Card's focus-ring CSS keys off data-focus-visible on the
bui-CardTrigger, but Link (the trigger when href is set) wasn't
emitting it because useLink does not track focus-visible state.
Compose useFocusRing in Link so keyboard focus is now properly
indicated on Card href=... and any other Link styled via
[data-focus-visible].
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Emma Indal <emma.indahl@gmail.com>
Validate the parsed Retry-After value is a finite positive number before
using it as a delay, falling back to exponential backoff otherwise. This
prevents a near-zero delay tight retry loop when the header contains an
HTTP-date or unexpected value.
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Capturing globalThis.fetch as a value at construction time meant the
GitLabUrlReader tests bypassed the MSW fetch interceptor and hit the
real gitlab.com (returning 401). Wrapping the call resolves fetch at
invocation time so the patched fetch is used.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Each catch path now decides for itself whether to rethrow or sleep and
continue, so the loop body has a definite Response after the try/catch
and there is no shared `error: unknown` slot that could in principle be
thrown unset. Pulls the exponential delay into a tiny local helper to
share between the two retry paths.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Flip the order of the response/error check so TypeScript narrows the
types itself rather than relying on `response!` to assert what the code
already guarantees by construction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
- Cancel discarded response bodies before retrying so the underlying
connection can be returned to the pool instead of being held open
until the response is garbage collected.
- Stop asserting on the rejected error message in the network-error
retry test; track rejection via a flag so the test isn't tied to
fetch/MSW error strings.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Removes a misplaced `mode: 'same-origin'` option that would have rejected
cross-origin requests when the integration is used from a browser, and
extends the retry wrapper so transient network errors are retried using
the configured `maxRetries`. Caller-initiated aborts still propagate
immediately.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Adds a Scaffolder category entry for @kissmiklosjr/plugin-scaffolder-studio
with an iconUrl pointing at a new SVG illustrating the plugin's template
graph editor.
Signed-off-by: Kiss Miklos <kissmiklosjr@gmail.com>
Align PluginHeader spacing across tabbed and non-tabbed variants so the component owns the surrounding page spacing more consistently.
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>
Updates the Select component to accept a set of sections with options as opposed to just a flat list of options.
---------
Signed-off-by: James Brooks <jamesbrooks@spotify.com>
@protobufjs/inquire@1.1.1 dropped the eval-based workaround that hid its
dynamic require() from bundlers, which makes webpack/rspack emit a
"Critical dependency: the request of a dependency is an expression"
warning that fails the build under CI=true. protobufjs@7.5.6 also
bumped its dependency on @protobufjs/inquire from ^1.1.0 to ^1.1.1, so
pinning just the inquire range isn't enough — pin protobufjs to 7.5.5
for all known workspace ranges as well.
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
* feat: Add status check functions for scaffolder steps
- Introduced `always()` and `failure()` functions to control step execution after failures.
- Updated documentation to explain usage of new status check functions.
- Enhanced NunjucksWorkflowRunner to process these functions in step conditions.
- Added tests to verify behavior of steps using `always()` and `failure()`.
Signed-off-by: ferin79 <ferinpatel79@gmail.com>
* feat: Enhance status check functions in scaffolder steps
- Updated documentation to clarify usage of status check functions with template expressions.
- Modified tests to reflect changes in syntax for status checks.
- Refactored NunjucksWorkflowRunner to ensure proper handling of status check functions in step conditions.
Signed-off-by: ferin79 <ferinpatel79@gmail.com>
* docs: Clarify usage of status check functions in writing templates
- Removed redundant explanation about truthy conditions after step failure.
- Streamlined the description for better clarity on status check functions.
Signed-off-by: ferin79 <ferinpatel79@gmail.com>
---------
Signed-off-by: ferin79 <ferinpatel79@gmail.com>
- Always render headerTop wrapper for consistent spacing
- Reduce default content padding-top from space-6 to space-3
- Add PluginHeaderAndHeader story and update Spotify theme
Signed-off-by: Charles de Dreuille <charles.dedreuille@gmail.com>