@juspay/svelte-ui-components 4.40.1 → 4.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -133,6 +133,7 @@
133
133
  {#if enable}
134
134
  {#if useFlyAnimation && useOutTransition}
135
135
  <div
136
+ class="modal-animation"
136
137
  in:tokenizedFly|global={flyInParams}
137
138
  out:tokenizedFly|global={flyOutParams}
138
139
  data-pw={typeof testId === 'string' ? testId : null}
@@ -142,6 +143,7 @@
142
143
  </div>
143
144
  {:else if useFlyAnimation}
144
145
  <div
146
+ class="modal-animation"
145
147
  in:tokenizedFly|global={flyInParams}
146
148
  data-pw={typeof testId === 'string' ? testId : null}
147
149
  testID={typeof testId === 'string' ? testId : null}
@@ -150,6 +152,7 @@
150
152
  </div>
151
153
  {:else if useOutTransition}
152
154
  <div
155
+ class="modal-animation"
153
156
  in:tokenizedFly|global={fadeInParams}
154
157
  out:tokenizedFly|global={fadeOutParams}
155
158
  data-pw={typeof testId === 'string' ? testId : null}
@@ -159,6 +162,7 @@
159
162
  </div>
160
163
  {:else}
161
164
  <div
165
+ class="modal-animation"
162
166
  in:tokenizedFly|global={fadeInParams}
163
167
  data-pw={typeof testId === 'string' ? testId : null}
164
168
  testID={typeof testId === 'string' ? testId : null}
@@ -8,6 +8,7 @@
8
8
  size = 'md',
9
9
  iconOnly = false,
10
10
  fullWidth = false,
11
+ shrinkable = false,
11
12
  href,
12
13
  target,
13
14
  rel,
@@ -73,6 +74,7 @@
73
74
  class="button-container variant-{variant} size-{size} {classes ?? ''}"
74
75
  class:icon-only={iconOnly}
75
76
  class:full-width={fullWidth}
77
+ class:button-shrinkable={shrinkable}
76
78
  style={style ?? null}
77
79
  >
78
80
  {#if showProgressBar}
@@ -238,6 +240,47 @@
238
240
  --button-width: 100%;
239
241
  }
240
242
 
243
+ /* Opt-in only. With the default nowrap label, fit-content never drops below the
244
+ label's full width, so a percentage cap on the inner button resolves against
245
+ an already label-wide container and a Button in a parent narrower than its
246
+ label (a flex row, a grid cell or a plain block) cannot shrink. Capping the
247
+ container itself gives that percentage something real to resolve against.
248
+
249
+ The box is `width: 100%` bounded by `max-width: max-content` rather than
250
+ `fit-content`: as wide as the label and never wider than the parent, with no
251
+ intrinsic keyword as its width. Firefox and WebKit size a `1fr` or `auto`
252
+ grid track to at least the content width of an item whose width is such a
253
+ keyword, so the track grew to the label and the Button never shrank in a grid
254
+ cell (Chromium shrinks the track). A percentage is not counted that way.
255
+ `width: auto` would shrink the track too, but it stretches the box across a
256
+ block, stretch or `justify-items: normal` parent, and `margin: auto` on the
257
+ root would stop centring it. As a flex item the box is clamped to the
258
+ label's width, so `flex-grow` on the root does not widen it. A custom
259
+ `--button-width` replaces the max-content bound, and `fullWidth` sets it
260
+ to 100%.
261
+
262
+ Deliberately class-gated rather than a pair of tokens on every container: an
263
+ unconditional declaration here would outrank a consumer's own max-width class
264
+ on the root (the scoped selector is more specific). The class carries the
265
+ component prefix because `classes` lands on this same element, and a
266
+ consumer's own `shrinkable` class must not opt a Button in. */
267
+ .button-container.button-shrinkable {
268
+ min-width: 0;
269
+ width: 100%;
270
+ max-width: var(--button-width, max-content);
271
+ }
272
+
273
+ .button-container.button-shrinkable > .button-el {
274
+ max-width: var(--button-max-width, 100%);
275
+ }
276
+
277
+ /* An icon with a percentage max-width (the common `img { max-width: 100% }`
278
+ reset) has a min-content width of zero, so the shrinking button would
279
+ squeeze it along with the label. */
280
+ .button-container.button-shrinkable > .button-el > .button-icon {
281
+ flex-shrink: 0;
282
+ }
283
+
241
284
  .button-el {
242
285
  max-height: var(--button-max-height);
243
286
  max-width: var(--button-max-width);
@@ -20,6 +20,20 @@ export type OptionalButtonProperties = {
20
20
  iconOnly?: boolean;
21
21
  /** Stretch the button to the full width of its container. */
22
22
  fullWidth?: boolean;
23
+ /**
24
+ * Let the button be narrower than its label. By default a button is as wide as its label
25
+ * (which does not wrap), so inside a parent narrower than the label (a flex row, a grid cell or
26
+ * a plain block) it can never give width back and a long label overflows its parent. With
27
+ * `shrinkable` the button still hugs a label that fits, but a label that does not is truncated
28
+ * with an ellipsis inside whatever width the parent offers. The button is capped at
29
+ * `var(--button-max-width, 100%)` of that width.
30
+ *
31
+ * Only the `text` label is truncated: custom `children` content has to manage its own overflow.
32
+ * Wrapping with `--button-white-space: normal` works without this prop; with it, a single word
33
+ * wider than the parent is clipped instead of overflowing. On an `iconOnly` button it changes
34
+ * nothing while the square fits; in a narrower parent the padding gives way before the glyph does.
35
+ */
36
+ shrinkable?: boolean;
23
37
  /**
24
38
  * Render the button as an `<a>` styled identically. Use for button-styled links/navigation.
25
39
  * When set, `type` is ignored; a disabled link is rendered inert via `aria-disabled`.
@@ -465,8 +465,44 @@
465
465
  anything taller than the screen) grew past the viewport and pushed its
466
466
  footer and bottom rounding off-screen. dvh tracks the real visible
467
467
  viewport on mobile; the vh line is the fallback for engines without dvh. */
468
- max-height: var(--modal-max-height, calc(100vh - 32px));
469
- max-height: var(--modal-max-height, calc(100dvh - 32px));
468
+ max-height: var(--modal-max-height, calc(100vh - var(--modal-viewport-gutter, 32px)));
469
+ max-height: var(--modal-max-height, calc(100dvh - var(--modal-viewport-gutter, 32px)));
470
+ }
471
+
472
+ /* The width rules below are wrapped in :where() so they carry no specificity.
473
+ An app that already styles .modal-content or .footer-action-buttons wrote
474
+ that rule before these existed, and Svelte's scope class would otherwise
475
+ make these tie it or beat it whatever the load order. Svelte compiles
476
+ :where(.x) to :where(.x.svelte-hash), which stays at zero.
477
+
478
+ The ceiling is chosen per alignment on .modal (see .center/.top/.bottom) and
479
+ only read here. It caps whatever width a size token or a wide child asks for
480
+ instead of wrapping that token in min(): a keyword such as fit-content or
481
+ auto makes min() invalid and silently drops the width.
482
+ The "+ 0%" is load-bearing. A max-width that contains a percentage is
483
+ ignored while the shrink-to-fit transition wrapper works out its own width,
484
+ so the cap does not narrow the box a percentage size token resolves
485
+ against: calc(100% - 32px) stays 343px on a 375px phone instead of becoming
486
+ 311px. Laid out, it is the same length. "none" makes the calc invalid, which
487
+ leaves max-width unset, i.e. no cap, as intended. */
488
+ :where(.modal-content) {
489
+ max-width: calc(var(--_modal-max-width, 100vw) + 0%);
490
+ }
491
+
492
+ /* The wrapper is sized from the uncapped width, so it can be wider than the
493
+ capped panel. It stays inside the overlay (or the ceiling, when an embedded
494
+ overlay is narrower) and lets clicks in the strip beside the panel reach the
495
+ overlay. The panel is inset by half of what the wrapper has beyond the
496
+ ceiling, which centres a panel that fills the ceiling; a narrower one is
497
+ offset by the same amount. Below the ceiling there is no inset and the panel
498
+ keeps its position at the start of the wrapper, as it always had. */
499
+ :where(.modal > :global(.modal-animation)) {
500
+ pointer-events: none;
501
+ max-width: max(100%, var(--_modal-max-width, 100vw));
502
+ }
503
+
504
+ :where(:global(.modal-animation) > .modal-content) {
505
+ margin-inline-start: max(0px, calc((100% - var(--_modal-max-width, 100vw)) / 2));
470
506
  }
471
507
 
472
508
  /* The comment this replaced claimed tabindex="-1" meant this never needed a
@@ -500,19 +536,28 @@
500
536
  display: none;
501
537
  }
502
538
 
539
+ /* A dialog keeps a gutter either side; a top or bottom sheet is edge to edge,
540
+ so only the centred ceiling subtracts one. Each alignment owns its token so
541
+ an app-wide default for dialogs never reshapes a bottom sheet. */
503
542
  .center {
504
543
  justify-content: var(--modal-center-justify-content, center);
505
544
  align-items: var(--modal-center-align-items, center);
545
+ --_modal-max-width: var(
546
+ --modal-center-max-width,
547
+ calc(100vw - var(--modal-viewport-gutter, 32px))
548
+ );
506
549
  }
507
550
 
508
551
  .bottom {
509
552
  justify-content: var(--modal-bottom-justify-content, flex-end);
510
553
  align-items: var(--modal-bottom-align-items);
554
+ --_modal-max-width: var(--modal-bottom-max-width, 100vw);
511
555
  }
512
556
 
513
557
  .top {
514
558
  justify-content: var(--modal-top-justify-content, flex-start);
515
559
  align-items: var(--modal-top-align-items);
560
+ --_modal-max-width: var(--modal-top-max-width, 100vw);
516
561
  }
517
562
 
518
563
  .small {
@@ -559,6 +604,13 @@
559
604
  width: var(--modal-footer-action-buttons-width, fit-content);
560
605
  }
561
606
 
607
+ /* Zero specificity for the same reason as the width rules above: an app that
608
+ already wraps and aligns this row keeps doing so. */
609
+ :where(.footer-action-buttons) {
610
+ flex-wrap: wrap;
611
+ justify-content: var(--modal-footer-action-buttons-justify-content, flex-start);
612
+ }
613
+
562
614
  .footer-secondary-button {
563
615
  --button-max-height: var(--modal-footer-secondary-button-max-height);
564
616
  --button-max-width: var(--modal-footer-secondary-button-max-width);
package/dist-wc/index.js CHANGED
@@ -4680,19 +4680,19 @@ create_custom_element(Loader, {
4680
4680
  //#region src/lib/Button/Button.svelte
4681
4681
  var root$107 = /* @__PURE__ */ from_html("<div class=\"button-progress-bar svelte-1j9w5l4\"></div>"), root_1$95 = /* @__PURE__ */ from_html("<div class=\"button-loader svelte-1j9w5l4\"><!></div>"), root_2$74 = /* @__PURE__ */ from_html("<div class=\"button-icon svelte-1j9w5l4\"><!></div>"), root_3$66 = /* @__PURE__ */ from_html("<div class=\"button-text svelte-1j9w5l4\"></div>"), root_4$54 = /* @__PURE__ */ from_html("<div class=\"button-text svelte-1j9w5l4\"> </div>"), root_5$42 = /* @__PURE__ */ from_html("<!> <!> <!> <!>", 1), root_6$36 = /* @__PURE__ */ from_html("<div class=\"button-status svelte-1j9w5l4\" role=\"status\" aria-live=\"polite\"> </div>"), root_7$32 = /* @__PURE__ */ from_html("<div><!> <!> <!></div>"), $$css$196 = {
4682
4682
  hash: "svelte-1j9w5l4",
4683
- code: ".button-container.svelte-1j9w5l4 {position:relative;width:var(--button-width, fit-content);}\n\n /* The statusText region: out of flow at 1x1px inside the positioned\n container, so it never moves the button or its row (the visually-hidden\n recipe ChatComposer and Label use). Not named .sr-only: `classes` lands on\n this container, so a consumer's own `sr-only` class would match a rule of\n that name here and hide the whole button. */.button-status.svelte-1j9w5l4 {position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);clip-path:inset(50%);white-space:nowrap;border-width:0;}\n\n /* ---- Variant defaults (set the internal --_btn-* layer; explicit --button-* always wins) ---- */.variant-primary.svelte-1j9w5l4 {--_btn-color: #3a4550;--_btn-text-color: #ffffff;--_btn-border: none;}.variant-secondary.svelte-1j9w5l4 {--_btn-color: transparent;--_btn-text-color: var(--button-secondary-text-color, #3a4550);--_btn-border: 1px solid var(--button-secondary-border-color, #cbd5e1);--_btn-hover-color: var(--button-secondary-hover-background, #f1f5f9);--_btn-hover-text-color: var(--button-secondary-text-color, #3a4550);--_btn-hover-border: 1px solid var(--button-secondary-border-color, #cbd5e1);}.variant-ghost.svelte-1j9w5l4 {--_btn-color: transparent;--_btn-text-color: var(--button-ghost-text-color, #3a4550);--_btn-border: none;--_btn-hover-color: var(--button-ghost-hover-background, #f1f5f9);--_btn-hover-text-color: var(--button-ghost-text-color, #3a4550);--_btn-hover-border: none;}.variant-destructive.svelte-1j9w5l4 {--_btn-color: #e7000b;--_btn-text-color: #ffffff;--_btn-border: none;--_btn-hover-color: #c10007;--_btn-hover-text-color: #ffffff;--_btn-hover-border: none;}\n\n /* Transparent chassis for gradient marketing CTAs — deliberately no background\n of its own. Pair with a --button-background gradient (and usually a matching\n --button-hover-color, since --_btn-hover-color sits before --button-background\n in the hover fallback chain and would otherwise flatten the gradient to\n transparent on hover). Geometry (padding/font-size) is intentionally left to\n the size preset, not this variant. */.variant-brand.svelte-1j9w5l4 {--_btn-color: transparent;--_btn-text-color: #ffffff;--_btn-border: none;--_btn-hover-color: transparent;--_btn-hover-text-color: #ffffff;--_btn-hover-border: none;}\n\n /* ---- Size defaults (md reproduces the legacy 16px padding / 14px font) ---- */.size-sm.svelte-1j9w5l4 {--_btn-padding: 8px 12px;--_btn-font-size: 13px;}.size-md.svelte-1j9w5l4 {--_btn-padding: 16px;--_btn-font-size: 14px;}.size-lg.svelte-1j9w5l4 {--_btn-padding: 20px 28px;--_btn-font-size: 16px;}.icon-only.svelte-1j9w5l4 {--_btn-padding: 8px;}.icon-only.size-sm.svelte-1j9w5l4 {--_btn-padding: 6px;}.icon-only.size-lg.svelte-1j9w5l4 {--_btn-padding: 12px;}.full-width.svelte-1j9w5l4 {--button-width: 100%;}.button-el.svelte-1j9w5l4 {max-height:var(--button-max-height);max-width:var(--button-max-width);min-width:var(--button-min-width);font-family:var(--button-font-family);font-weight:var(--button-font-weight, 500);font-size:var(--button-font-size, var(--_btn-font-size, 14px));background-color:var(--button-color, var(--_btn-color, #3a4550));\n /* Image layer, deliberately not the `background` shorthand — the shorthand\n would reset a consumer's own background-image/position/size layers\n whenever the hook is unset. Gradients go here; solids stay on --button-color. */background-image:var(--button-background, none);color:var(\n --button-text-color,\n var(--_btn-text-color, var(--button-neutral-text-color, white))\n );height:var(--button-height, fit-content);padding:var(--button-padding, var(--_btn-padding, 16px));margin:var(--button-margin);border-radius:var(--button-border-radius, var(--radius, 6px));width:var(--button-width, fit-content);cursor:var(--cursor, pointer);opacity:var(--opacity, 1);border:var(--button-border, var(--_btn-border, none));box-sizing:border-box;text-decoration:var(--button-text-decoration, none);line-height:var(--button-line-height, normal);display:flex;justify-content:var(--button-justify-content, center);align-items:center;flex-direction:var(--button-content-flex-direction, row);gap:var(--button-content-gap, 16px);visibility:var(--button-visibility, visible);box-shadow:var(--button-box-shadow, none);transition:var(--button-transition, none);\n\n /* A button label should never soft-wrap onto a second line as the label text\n changes (e.g. \"Select\" -> \"Select (1)\") — that jitters the layout around it.\n Consumers that genuinely want multi-line buttons opt back in via the var. */white-space:var(--button-white-space, nowrap);}.button-el.disabled.svelte-1j9w5l4,\n .button-el.svelte-1j9w5l4:disabled {cursor:var(--disabled-cursor, not-allowed);opacity:var(--disabled-opacity, 0.4);color:var(--disabled-text-color, var(--button-text-color, var(--_btn-text-color, white)));font-size:var(--disabled-font-size, inherit);font-weight:var(--disabled-font-weight, inherit);text-decoration:var(--button-disabled-text-decoration, var(--button-text-decoration, none));\n /* Preserve the variant border when disabled so secondary (bordered) stays distinct from ghost. */border:var(--disabled-border, var(--button-border, var(--_btn-border, none)));background:var(\n --disabled-background-color,\n var(--button-background, var(--button-color, var(--_btn-color, #3a4550)))\n );box-shadow:var(\n --button-disabled-box-shadow,\n var(--disabled-box-shadow, var(--button-box-shadow, none))\n );}.button-loader.svelte-1j9w5l4 {order:var(--button-loader-order, 1);}.button-icon.svelte-1j9w5l4 {order:var(--button-icon-order, 2);display:var(--button-icon-display);}.button-text.svelte-1j9w5l4 {order:var(--button-text-order, 3);display:var(--button-text-display);\n\n /* With nowrap as the default, a label longer than the button's box would\n otherwise bleed past it — truncate with an ellipsis instead. Full labels\n stay available via the button's accessible name / title at the call site. */overflow:hidden;text-overflow:ellipsis;}.button-el.svelte-1j9w5l4:hover:not(.disabled) {background:var(\n --button-hover-color,\n var(\n --_btn-hover-color,\n var(--button-background, var(--button-color, var(--_btn-color, #3a4550)))\n )\n );color:var(\n --button-hover-text-color,\n var(--_btn-hover-text-color, var(--button-text-color, var(--_btn-text-color, white)))\n );border:var(\n --button-hover-border,\n var(--_btn-hover-border, var(--button-border, var(--_btn-border, none)))\n );transform:var(--button-hover-transform);box-shadow:var(--button-hover-box-shadow, var(--button-box-shadow, none));}.button-el.svelte-1j9w5l4:active:not(.disabled) {transform:var(--button-active-transform);background:var(\n --button-active-background,\n var(--button-background, var(--button-color, var(--_btn-color, #3a4550)))\n );box-shadow:var(--button-active-box-shadow, var(--button-box-shadow, none));}.button-el.svelte-1j9w5l4:focus-visible {box-shadow:var(--button-focus-visible-box-shadow, var(--button-box-shadow, none));}.button-progress-bar.svelte-1j9w5l4 {position:absolute;height:100%;width:100%;background:var(--button-progress-loader-background-color, #00000030);\n animation: svelte-1j9w5l4-fill-loader var(--button-progress-loader-duration, 8s) forwards;z-index:2;}\n\n @keyframes svelte-1j9w5l4-fill-loader {\n 0% {\n width: 0;\n }\n\n 100% {\n width: 100%;\n }\n }\n\n /* This bar is not indefinite like a spinner -- its width IS the meaning:\n \"how much of `--button-progress-loader-duration` has elapsed\", and\n `showProgressBar` keeps the button disabled for that whole span. A bare\n `animation: none` would freeze it at the base rule above (`width: 100%`),\n showing a FULL, \"finished\" bar for up to 8s while the button is actually\n still counting down and still disabled -- a frame that means something\n else is worse than the motion it removed. Freezing at 0% instead would\n lie the other way once the real duration elapses and the bar should read\n complete. Neither static width is honest for the whole span, so motion is\n thinned rather than removed: `steps()` swaps the continuous ease for\n discrete jumps that hold the PRIOR interval's value until each jump (the\n `jump-end` default), so the displayed width can only ever under-report\n elapsed time -- never claim to be further along than it really is -- while\n still losing the smooth per-frame slide prefers-reduced-motion targets.\n The step count is a LITERAL, deliberately not a token. `steps()` is invalid\n for a count below 1, and an invalid value does not fall back to a safer\n stepped default -- the whole declaration is dropped and the property takes\n the base rule's `ease`, restoring exactly the continuous slide this block\n exists to remove. A consumer passing `0` to \"just freeze it\" would silently\n switch the guard off for every user who asked for reduced motion. A guard\n that fails OPEN, quietly, is worse than no guard, and one tunable is not\n worth that. \n This block lives in the component's own <style> because that is the only\n stylesheet that reaches inside the shadow root a custom-element consumer\n gets. */\n @media (prefers-reduced-motion: reduce) {.button-progress-bar.svelte-1j9w5l4 {animation-timing-function:steps(5, jump-end);}\n\n /* The loader is not the only motion here. `--button-transition` defaults to\n `none`, so this rule does nothing until a consumer opts in -- and the\n documented way to opt in is exactly a hover/press animation, which is\n what a user asking for reduced motion is asking not to have. The sweep\n that covered every transition in ThemeSwitcher stopped at the one\n animation the brief named in this file. */.button-el.svelte-1j9w5l4,\n .button-container.svelte-1j9w5l4 {transition:none;}\n }"
4683
+ code: ".button-container.svelte-1j9w5l4 {position:relative;width:var(--button-width, fit-content);}\n\n /* The statusText region: out of flow at 1x1px inside the positioned\n container, so it never moves the button or its row (the visually-hidden\n recipe ChatComposer and Label use). Not named .sr-only: `classes` lands on\n this container, so a consumer's own `sr-only` class would match a rule of\n that name here and hide the whole button. */.button-status.svelte-1j9w5l4 {position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);clip-path:inset(50%);white-space:nowrap;border-width:0;}\n\n /* ---- Variant defaults (set the internal --_btn-* layer; explicit --button-* always wins) ---- */.variant-primary.svelte-1j9w5l4 {--_btn-color: #3a4550;--_btn-text-color: #ffffff;--_btn-border: none;}.variant-secondary.svelte-1j9w5l4 {--_btn-color: transparent;--_btn-text-color: var(--button-secondary-text-color, #3a4550);--_btn-border: 1px solid var(--button-secondary-border-color, #cbd5e1);--_btn-hover-color: var(--button-secondary-hover-background, #f1f5f9);--_btn-hover-text-color: var(--button-secondary-text-color, #3a4550);--_btn-hover-border: 1px solid var(--button-secondary-border-color, #cbd5e1);}.variant-ghost.svelte-1j9w5l4 {--_btn-color: transparent;--_btn-text-color: var(--button-ghost-text-color, #3a4550);--_btn-border: none;--_btn-hover-color: var(--button-ghost-hover-background, #f1f5f9);--_btn-hover-text-color: var(--button-ghost-text-color, #3a4550);--_btn-hover-border: none;}.variant-destructive.svelte-1j9w5l4 {--_btn-color: #e7000b;--_btn-text-color: #ffffff;--_btn-border: none;--_btn-hover-color: #c10007;--_btn-hover-text-color: #ffffff;--_btn-hover-border: none;}\n\n /* Transparent chassis for gradient marketing CTAs — deliberately no background\n of its own. Pair with a --button-background gradient (and usually a matching\n --button-hover-color, since --_btn-hover-color sits before --button-background\n in the hover fallback chain and would otherwise flatten the gradient to\n transparent on hover). Geometry (padding/font-size) is intentionally left to\n the size preset, not this variant. */.variant-brand.svelte-1j9w5l4 {--_btn-color: transparent;--_btn-text-color: #ffffff;--_btn-border: none;--_btn-hover-color: transparent;--_btn-hover-text-color: #ffffff;--_btn-hover-border: none;}\n\n /* ---- Size defaults (md reproduces the legacy 16px padding / 14px font) ---- */.size-sm.svelte-1j9w5l4 {--_btn-padding: 8px 12px;--_btn-font-size: 13px;}.size-md.svelte-1j9w5l4 {--_btn-padding: 16px;--_btn-font-size: 14px;}.size-lg.svelte-1j9w5l4 {--_btn-padding: 20px 28px;--_btn-font-size: 16px;}.icon-only.svelte-1j9w5l4 {--_btn-padding: 8px;}.icon-only.size-sm.svelte-1j9w5l4 {--_btn-padding: 6px;}.icon-only.size-lg.svelte-1j9w5l4 {--_btn-padding: 12px;}.full-width.svelte-1j9w5l4 {--button-width: 100%;}\n\n /* Opt-in only. With the default nowrap label, fit-content never drops below the\n label's full width, so a percentage cap on the inner button resolves against\n an already label-wide container and a Button in a parent narrower than its\n label (a flex row, a grid cell or a plain block) cannot shrink. Capping the\n container itself gives that percentage something real to resolve against.\n\n The box is `width: 100%` bounded by `max-width: max-content` rather than\n `fit-content`: as wide as the label and never wider than the parent, with no\n intrinsic keyword as its width. Firefox and WebKit size a `1fr` or `auto`\n grid track to at least the content width of an item whose width is such a\n keyword, so the track grew to the label and the Button never shrank in a grid\n cell (Chromium shrinks the track). A percentage is not counted that way.\n `width: auto` would shrink the track too, but it stretches the box across a\n block, stretch or `justify-items: normal` parent, and `margin: auto` on the\n root would stop centring it. As a flex item the box is clamped to the\n label's width, so `flex-grow` on the root does not widen it. A custom\n `--button-width` replaces the max-content bound, and `fullWidth` sets it\n to 100%.\n\n Deliberately class-gated rather than a pair of tokens on every container: an\n unconditional declaration here would outrank a consumer's own max-width class\n on the root (the scoped selector is more specific). The class carries the\n component prefix because `classes` lands on this same element, and a\n consumer's own `shrinkable` class must not opt a Button in. */.button-container.button-shrinkable.svelte-1j9w5l4 {min-width:0;width:100%;max-width:var(--button-width, max-content);}.button-container.button-shrinkable.svelte-1j9w5l4 > .button-el:where(.svelte-1j9w5l4) {max-width:var(--button-max-width, 100%);}\n\n /* An icon with a percentage max-width (the common `img { max-width: 100% }`\n reset) has a min-content width of zero, so the shrinking button would\n squeeze it along with the label. */.button-container.button-shrinkable.svelte-1j9w5l4 > .button-el:where(.svelte-1j9w5l4) > .button-icon:where(.svelte-1j9w5l4) {flex-shrink:0;}.button-el.svelte-1j9w5l4 {max-height:var(--button-max-height);max-width:var(--button-max-width);min-width:var(--button-min-width);font-family:var(--button-font-family);font-weight:var(--button-font-weight, 500);font-size:var(--button-font-size, var(--_btn-font-size, 14px));background-color:var(--button-color, var(--_btn-color, #3a4550));\n /* Image layer, deliberately not the `background` shorthand — the shorthand\n would reset a consumer's own background-image/position/size layers\n whenever the hook is unset. Gradients go here; solids stay on --button-color. */background-image:var(--button-background, none);color:var(\n --button-text-color,\n var(--_btn-text-color, var(--button-neutral-text-color, white))\n );height:var(--button-height, fit-content);padding:var(--button-padding, var(--_btn-padding, 16px));margin:var(--button-margin);border-radius:var(--button-border-radius, var(--radius, 6px));width:var(--button-width, fit-content);cursor:var(--cursor, pointer);opacity:var(--opacity, 1);border:var(--button-border, var(--_btn-border, none));box-sizing:border-box;text-decoration:var(--button-text-decoration, none);line-height:var(--button-line-height, normal);display:flex;justify-content:var(--button-justify-content, center);align-items:center;flex-direction:var(--button-content-flex-direction, row);gap:var(--button-content-gap, 16px);visibility:var(--button-visibility, visible);box-shadow:var(--button-box-shadow, none);transition:var(--button-transition, none);\n\n /* A button label should never soft-wrap onto a second line as the label text\n changes (e.g. \"Select\" -> \"Select (1)\") — that jitters the layout around it.\n Consumers that genuinely want multi-line buttons opt back in via the var. */white-space:var(--button-white-space, nowrap);}.button-el.disabled.svelte-1j9w5l4,\n .button-el.svelte-1j9w5l4:disabled {cursor:var(--disabled-cursor, not-allowed);opacity:var(--disabled-opacity, 0.4);color:var(--disabled-text-color, var(--button-text-color, var(--_btn-text-color, white)));font-size:var(--disabled-font-size, inherit);font-weight:var(--disabled-font-weight, inherit);text-decoration:var(--button-disabled-text-decoration, var(--button-text-decoration, none));\n /* Preserve the variant border when disabled so secondary (bordered) stays distinct from ghost. */border:var(--disabled-border, var(--button-border, var(--_btn-border, none)));background:var(\n --disabled-background-color,\n var(--button-background, var(--button-color, var(--_btn-color, #3a4550)))\n );box-shadow:var(\n --button-disabled-box-shadow,\n var(--disabled-box-shadow, var(--button-box-shadow, none))\n );}.button-loader.svelte-1j9w5l4 {order:var(--button-loader-order, 1);}.button-icon.svelte-1j9w5l4 {order:var(--button-icon-order, 2);display:var(--button-icon-display);}.button-text.svelte-1j9w5l4 {order:var(--button-text-order, 3);display:var(--button-text-display);\n\n /* With nowrap as the default, a label longer than the button's box would\n otherwise bleed past it — truncate with an ellipsis instead. Full labels\n stay available via the button's accessible name / title at the call site. */overflow:hidden;text-overflow:ellipsis;}.button-el.svelte-1j9w5l4:hover:not(.disabled) {background:var(\n --button-hover-color,\n var(\n --_btn-hover-color,\n var(--button-background, var(--button-color, var(--_btn-color, #3a4550)))\n )\n );color:var(\n --button-hover-text-color,\n var(--_btn-hover-text-color, var(--button-text-color, var(--_btn-text-color, white)))\n );border:var(\n --button-hover-border,\n var(--_btn-hover-border, var(--button-border, var(--_btn-border, none)))\n );transform:var(--button-hover-transform);box-shadow:var(--button-hover-box-shadow, var(--button-box-shadow, none));}.button-el.svelte-1j9w5l4:active:not(.disabled) {transform:var(--button-active-transform);background:var(\n --button-active-background,\n var(--button-background, var(--button-color, var(--_btn-color, #3a4550)))\n );box-shadow:var(--button-active-box-shadow, var(--button-box-shadow, none));}.button-el.svelte-1j9w5l4:focus-visible {box-shadow:var(--button-focus-visible-box-shadow, var(--button-box-shadow, none));}.button-progress-bar.svelte-1j9w5l4 {position:absolute;height:100%;width:100%;background:var(--button-progress-loader-background-color, #00000030);\n animation: svelte-1j9w5l4-fill-loader var(--button-progress-loader-duration, 8s) forwards;z-index:2;}\n\n @keyframes svelte-1j9w5l4-fill-loader {\n 0% {\n width: 0;\n }\n\n 100% {\n width: 100%;\n }\n }\n\n /* This bar is not indefinite like a spinner -- its width IS the meaning:\n \"how much of `--button-progress-loader-duration` has elapsed\", and\n `showProgressBar` keeps the button disabled for that whole span. A bare\n `animation: none` would freeze it at the base rule above (`width: 100%`),\n showing a FULL, \"finished\" bar for up to 8s while the button is actually\n still counting down and still disabled -- a frame that means something\n else is worse than the motion it removed. Freezing at 0% instead would\n lie the other way once the real duration elapses and the bar should read\n complete. Neither static width is honest for the whole span, so motion is\n thinned rather than removed: `steps()` swaps the continuous ease for\n discrete jumps that hold the PRIOR interval's value until each jump (the\n `jump-end` default), so the displayed width can only ever under-report\n elapsed time -- never claim to be further along than it really is -- while\n still losing the smooth per-frame slide prefers-reduced-motion targets.\n The step count is a LITERAL, deliberately not a token. `steps()` is invalid\n for a count below 1, and an invalid value does not fall back to a safer\n stepped default -- the whole declaration is dropped and the property takes\n the base rule's `ease`, restoring exactly the continuous slide this block\n exists to remove. A consumer passing `0` to \"just freeze it\" would silently\n switch the guard off for every user who asked for reduced motion. A guard\n that fails OPEN, quietly, is worse than no guard, and one tunable is not\n worth that. \n This block lives in the component's own <style> because that is the only\n stylesheet that reaches inside the shadow root a custom-element consumer\n gets. */\n @media (prefers-reduced-motion: reduce) {.button-progress-bar.svelte-1j9w5l4 {animation-timing-function:steps(5, jump-end);}\n\n /* The loader is not the only motion here. `--button-transition` defaults to\n `none`, so this rule does nothing until a consumer opts in -- and the\n documented way to opt in is exactly a hover/press animation, which is\n what a user asking for reduced motion is asking not to have. The sweep\n that covered every transition in ThemeSwitcher stopped at the one\n animation the brief named in this file. */.button-el.svelte-1j9w5l4,\n .button-container.svelte-1j9w5l4 {transition:none;}\n }"
4684
4684
  };
4685
4685
  function Button(e, t) {
4686
4686
  push(t, !0), append_styles$1(e, $$css$196);
4687
- let n = prop(t, "text", 7), i = prop(t, "variant", 7, "primary"), a = prop(t, "size", 7, "md"), o = prop(t, "iconOnly", 7, !1), s = prop(t, "fullWidth", 7, !1), c = prop(t, "href", 7), l = prop(t, "target", 7), u = prop(t, "rel", 7), f = prop(t, "loading", 7, !1), p = prop(t, "allowHtml", 7, !1), h = prop(t, "enable", 7, !0), S = prop(t, "disabled", 7, !1), C = prop(t, "showLoader", 7, !1), k = prop(t, "loaderType", 7), R = prop(t, "showProgressBar", 15, !1), te = prop(t, "type", 7, "button"), ne = prop(t, "testId", 7), G = prop(t, "ariaLabel", 7), re = prop(t, "ariaExpanded", 7), be = prop(t, "ariaControls", 7), Me = prop(t, "ariaHaspopup", 7), Re = prop(t, "ariaSelected", 7), Ue = prop(t, "ariaPressed", 7), it = prop(t, "ariaBusy", 7), at = prop(t, "role", 7), ot = prop(t, "title", 7), ct = prop(t, "statusText", 7), lt = prop(t, "statusTestId", 7), ut = prop(t, "onclick", 7), dt = prop(t, "onkeydown", 7, () => {}), ft = prop(t, "onkeyup", 7, () => {}), pt = prop(t, "onmousedown", 7), mt = prop(t, "onmouseup", 7), ht = prop(t, "onmouseleave", 7), gt = prop(t, "ontouchstart", 7), _t = prop(t, "ontouchend", 7), vt = prop(t, "icon", 7), yt = prop(t, "children", 7), bt = prop(t, "classes", 7), xt = prop(t, "style", 7), St = /* @__PURE__ */ user_derived(() => f() || C() && k() === "Circular"), Ct = /* @__PURE__ */ user_derived(() => C() && k() === "ProgressBar"), wt = /* @__PURE__ */ user_derived(() => get(St) || R()), Tt = /* @__PURE__ */ user_derived(() => S() || !h() || get(St) || R()), Et = /* @__PURE__ */ user_derived(() => u() ?? (l() === "_blank" ? "noopener noreferrer" : null));
4688
- function Dt(e) {
4689
- if (get(Tt)) {
4690
- c() && e.preventDefault();
4687
+ let n = prop(t, "text", 7), i = prop(t, "variant", 7, "primary"), a = prop(t, "size", 7, "md"), o = prop(t, "iconOnly", 7, !1), s = prop(t, "fullWidth", 7, !1), c = prop(t, "shrinkable", 7, !1), l = prop(t, "href", 7), u = prop(t, "target", 7), f = prop(t, "rel", 7), p = prop(t, "loading", 7, !1), h = prop(t, "allowHtml", 7, !1), S = prop(t, "enable", 7, !0), C = prop(t, "disabled", 7, !1), k = prop(t, "showLoader", 7, !1), R = prop(t, "loaderType", 7), te = prop(t, "showProgressBar", 15, !1), ne = prop(t, "type", 7, "button"), G = prop(t, "testId", 7), re = prop(t, "ariaLabel", 7), be = prop(t, "ariaExpanded", 7), Me = prop(t, "ariaControls", 7), Re = prop(t, "ariaHaspopup", 7), Ue = prop(t, "ariaSelected", 7), it = prop(t, "ariaPressed", 7), at = prop(t, "ariaBusy", 7), ot = prop(t, "role", 7), ct = prop(t, "title", 7), lt = prop(t, "statusText", 7), ut = prop(t, "statusTestId", 7), dt = prop(t, "onclick", 7), ft = prop(t, "onkeydown", 7, () => {}), pt = prop(t, "onkeyup", 7, () => {}), mt = prop(t, "onmousedown", 7), ht = prop(t, "onmouseup", 7), gt = prop(t, "onmouseleave", 7), _t = prop(t, "ontouchstart", 7), vt = prop(t, "ontouchend", 7), yt = prop(t, "icon", 7), bt = prop(t, "children", 7), xt = prop(t, "classes", 7), St = prop(t, "style", 7), Ct = /* @__PURE__ */ user_derived(() => p() || k() && R() === "Circular"), wt = /* @__PURE__ */ user_derived(() => k() && R() === "ProgressBar"), Tt = /* @__PURE__ */ user_derived(() => get(Ct) || te()), Et = /* @__PURE__ */ user_derived(() => C() || !S() || get(Ct) || te()), Dt = /* @__PURE__ */ user_derived(() => f() ?? (u() === "_blank" ? "noopener noreferrer" : null));
4688
+ function Ot(e) {
4689
+ if (get(Et)) {
4690
+ l() && e.preventDefault();
4691
4691
  return;
4692
4692
  }
4693
- ut()?.(e), get(Ct) && R(!0);
4693
+ dt()?.(e), get(wt) && te(!0);
4694
4694
  }
4695
- var Ot = {
4695
+ var kt = {
4696
4696
  get text() {
4697
4697
  return n();
4698
4698
  },
@@ -4723,271 +4723,277 @@ function Button(e, t) {
4723
4723
  set fullWidth(e = !1) {
4724
4724
  s(e), flushSync();
4725
4725
  },
4726
- get href() {
4726
+ get shrinkable() {
4727
4727
  return c();
4728
4728
  },
4729
- set href(e) {
4729
+ set shrinkable(e = !1) {
4730
4730
  c(e), flushSync();
4731
4731
  },
4732
- get target() {
4732
+ get href() {
4733
4733
  return l();
4734
4734
  },
4735
- set target(e) {
4735
+ set href(e) {
4736
4736
  l(e), flushSync();
4737
4737
  },
4738
- get rel() {
4738
+ get target() {
4739
4739
  return u();
4740
4740
  },
4741
- set rel(e) {
4741
+ set target(e) {
4742
4742
  u(e), flushSync();
4743
4743
  },
4744
- get loading() {
4744
+ get rel() {
4745
4745
  return f();
4746
4746
  },
4747
- set loading(e = !1) {
4747
+ set rel(e) {
4748
4748
  f(e), flushSync();
4749
4749
  },
4750
- get allowHtml() {
4750
+ get loading() {
4751
4751
  return p();
4752
4752
  },
4753
- set allowHtml(e = !1) {
4753
+ set loading(e = !1) {
4754
4754
  p(e), flushSync();
4755
4755
  },
4756
- get enable() {
4756
+ get allowHtml() {
4757
4757
  return h();
4758
4758
  },
4759
- set enable(e = !0) {
4759
+ set allowHtml(e = !1) {
4760
4760
  h(e), flushSync();
4761
4761
  },
4762
- get disabled() {
4762
+ get enable() {
4763
4763
  return S();
4764
4764
  },
4765
- set disabled(e = !1) {
4765
+ set enable(e = !0) {
4766
4766
  S(e), flushSync();
4767
4767
  },
4768
- get showLoader() {
4768
+ get disabled() {
4769
4769
  return C();
4770
4770
  },
4771
- set showLoader(e = !1) {
4771
+ set disabled(e = !1) {
4772
4772
  C(e), flushSync();
4773
4773
  },
4774
- get loaderType() {
4774
+ get showLoader() {
4775
4775
  return k();
4776
4776
  },
4777
- set loaderType(e) {
4777
+ set showLoader(e = !1) {
4778
4778
  k(e), flushSync();
4779
4779
  },
4780
- get showProgressBar() {
4780
+ get loaderType() {
4781
4781
  return R();
4782
4782
  },
4783
- set showProgressBar(e = !1) {
4783
+ set loaderType(e) {
4784
4784
  R(e), flushSync();
4785
4785
  },
4786
- get type() {
4786
+ get showProgressBar() {
4787
4787
  return te();
4788
4788
  },
4789
- set type(e = "button") {
4789
+ set showProgressBar(e = !1) {
4790
4790
  te(e), flushSync();
4791
4791
  },
4792
- get testId() {
4792
+ get type() {
4793
4793
  return ne();
4794
4794
  },
4795
- set testId(e) {
4795
+ set type(e = "button") {
4796
4796
  ne(e), flushSync();
4797
4797
  },
4798
- get ariaLabel() {
4798
+ get testId() {
4799
4799
  return G();
4800
4800
  },
4801
- set ariaLabel(e) {
4801
+ set testId(e) {
4802
4802
  G(e), flushSync();
4803
4803
  },
4804
- get ariaExpanded() {
4804
+ get ariaLabel() {
4805
4805
  return re();
4806
4806
  },
4807
- set ariaExpanded(e) {
4807
+ set ariaLabel(e) {
4808
4808
  re(e), flushSync();
4809
4809
  },
4810
- get ariaControls() {
4810
+ get ariaExpanded() {
4811
4811
  return be();
4812
4812
  },
4813
- set ariaControls(e) {
4813
+ set ariaExpanded(e) {
4814
4814
  be(e), flushSync();
4815
4815
  },
4816
- get ariaHaspopup() {
4816
+ get ariaControls() {
4817
4817
  return Me();
4818
4818
  },
4819
- set ariaHaspopup(e) {
4819
+ set ariaControls(e) {
4820
4820
  Me(e), flushSync();
4821
4821
  },
4822
- get ariaSelected() {
4822
+ get ariaHaspopup() {
4823
4823
  return Re();
4824
4824
  },
4825
- set ariaSelected(e) {
4825
+ set ariaHaspopup(e) {
4826
4826
  Re(e), flushSync();
4827
4827
  },
4828
- get ariaPressed() {
4828
+ get ariaSelected() {
4829
4829
  return Ue();
4830
4830
  },
4831
- set ariaPressed(e) {
4831
+ set ariaSelected(e) {
4832
4832
  Ue(e), flushSync();
4833
4833
  },
4834
- get ariaBusy() {
4834
+ get ariaPressed() {
4835
4835
  return it();
4836
4836
  },
4837
- set ariaBusy(e) {
4837
+ set ariaPressed(e) {
4838
4838
  it(e), flushSync();
4839
4839
  },
4840
- get role() {
4840
+ get ariaBusy() {
4841
4841
  return at();
4842
4842
  },
4843
- set role(e) {
4843
+ set ariaBusy(e) {
4844
4844
  at(e), flushSync();
4845
4845
  },
4846
- get title() {
4846
+ get role() {
4847
4847
  return ot();
4848
4848
  },
4849
- set title(e) {
4849
+ set role(e) {
4850
4850
  ot(e), flushSync();
4851
4851
  },
4852
- get statusText() {
4852
+ get title() {
4853
4853
  return ct();
4854
4854
  },
4855
- set statusText(e) {
4855
+ set title(e) {
4856
4856
  ct(e), flushSync();
4857
4857
  },
4858
- get statusTestId() {
4858
+ get statusText() {
4859
4859
  return lt();
4860
4860
  },
4861
- set statusTestId(e) {
4861
+ set statusText(e) {
4862
4862
  lt(e), flushSync();
4863
4863
  },
4864
- get onclick() {
4864
+ get statusTestId() {
4865
4865
  return ut();
4866
4866
  },
4867
- set onclick(e) {
4867
+ set statusTestId(e) {
4868
4868
  ut(e), flushSync();
4869
4869
  },
4870
- get onkeydown() {
4870
+ get onclick() {
4871
4871
  return dt();
4872
4872
  },
4873
- set onkeydown(e = () => {}) {
4873
+ set onclick(e) {
4874
4874
  dt(e), flushSync();
4875
4875
  },
4876
- get onkeyup() {
4876
+ get onkeydown() {
4877
4877
  return ft();
4878
4878
  },
4879
- set onkeyup(e = () => {}) {
4879
+ set onkeydown(e = () => {}) {
4880
4880
  ft(e), flushSync();
4881
4881
  },
4882
- get onmousedown() {
4882
+ get onkeyup() {
4883
4883
  return pt();
4884
4884
  },
4885
- set onmousedown(e) {
4885
+ set onkeyup(e = () => {}) {
4886
4886
  pt(e), flushSync();
4887
4887
  },
4888
- get onmouseup() {
4888
+ get onmousedown() {
4889
4889
  return mt();
4890
4890
  },
4891
- set onmouseup(e) {
4891
+ set onmousedown(e) {
4892
4892
  mt(e), flushSync();
4893
4893
  },
4894
- get onmouseleave() {
4894
+ get onmouseup() {
4895
4895
  return ht();
4896
4896
  },
4897
- set onmouseleave(e) {
4897
+ set onmouseup(e) {
4898
4898
  ht(e), flushSync();
4899
4899
  },
4900
- get ontouchstart() {
4900
+ get onmouseleave() {
4901
4901
  return gt();
4902
4902
  },
4903
- set ontouchstart(e) {
4903
+ set onmouseleave(e) {
4904
4904
  gt(e), flushSync();
4905
4905
  },
4906
- get ontouchend() {
4906
+ get ontouchstart() {
4907
4907
  return _t();
4908
4908
  },
4909
- set ontouchend(e) {
4909
+ set ontouchstart(e) {
4910
4910
  _t(e), flushSync();
4911
4911
  },
4912
- get icon() {
4912
+ get ontouchend() {
4913
4913
  return vt();
4914
4914
  },
4915
- set icon(e) {
4915
+ set ontouchend(e) {
4916
4916
  vt(e), flushSync();
4917
4917
  },
4918
- get children() {
4918
+ get icon() {
4919
4919
  return yt();
4920
4920
  },
4921
- set children(e) {
4921
+ set icon(e) {
4922
4922
  yt(e), flushSync();
4923
4923
  },
4924
- get classes() {
4924
+ get children() {
4925
4925
  return bt();
4926
4926
  },
4927
- set classes(e) {
4927
+ set children(e) {
4928
4928
  bt(e), flushSync();
4929
4929
  },
4930
- get style() {
4930
+ get classes() {
4931
4931
  return xt();
4932
4932
  },
4933
- set style(e) {
4933
+ set classes(e) {
4934
4934
  xt(e), flushSync();
4935
+ },
4936
+ get style() {
4937
+ return St();
4938
+ },
4939
+ set style(e) {
4940
+ St(e), flushSync();
4935
4941
  }
4936
- }, kt = root_7$32();
4937
- let At;
4938
- var jt = child(kt), Mt = (e) => {
4942
+ }, At = root_7$32();
4943
+ let jt;
4944
+ var Mt = child(At), Nt = (e) => {
4939
4945
  append(e, root$107());
4940
4946
  };
4941
- if_block(jt, (e) => {
4942
- R() && e(Mt);
4947
+ if_block(Mt, (e) => {
4948
+ te() && e(Nt);
4943
4949
  });
4944
- var Nt = sibling(jt, 2);
4945
- element(Nt, () => c() ? "a" : "button", !1, (e, t) => {
4950
+ var Pt = sibling(Mt, 2);
4951
+ element(Pt, () => l() ? "a" : "button", !1, (e, t) => {
4946
4952
  attribute_effect(e, () => ({
4947
4953
  class: "button-el",
4948
- onclick: Dt,
4949
- onkeydown: dt(),
4950
- onkeyup: ft(),
4951
- onmousedown: pt(),
4952
- onmouseup: mt(),
4953
- onmouseleave: ht(),
4954
- ontouchstart: gt(),
4955
- ontouchend: _t(),
4956
- "data-pw": ne(),
4957
- testID: ne(),
4958
- role: at() ?? null,
4959
- "aria-label": G() ?? null,
4960
- "aria-expanded": re() ?? null,
4961
- "aria-controls": be() ?? null,
4962
- "aria-haspopup": Me() ?? null,
4963
- "aria-selected": Re() ?? null,
4964
- "aria-pressed": Ue() ?? null,
4965
- "aria-busy": get(wt) || it() || null,
4966
- title: ot() ?? null,
4967
- type: c() ? null : te(),
4968
- disabled: c() ? null : get(Tt),
4969
- href: c() ? get(Tt) ? null : c() : null,
4970
- target: c() ? l() : null,
4971
- rel: c() ? get(Et) : null,
4972
- "aria-disabled": c() && get(Tt) ? "true" : null,
4973
- tabindex: c() && get(Tt) ? -1 : null,
4974
- [CLASS]: { disabled: get(Tt) }
4954
+ onclick: Ot,
4955
+ onkeydown: ft(),
4956
+ onkeyup: pt(),
4957
+ onmousedown: mt(),
4958
+ onmouseup: ht(),
4959
+ onmouseleave: gt(),
4960
+ ontouchstart: _t(),
4961
+ ontouchend: vt(),
4962
+ "data-pw": G(),
4963
+ testID: G(),
4964
+ role: ot() ?? null,
4965
+ "aria-label": re() ?? null,
4966
+ "aria-expanded": be() ?? null,
4967
+ "aria-controls": Me() ?? null,
4968
+ "aria-haspopup": Re() ?? null,
4969
+ "aria-selected": Ue() ?? null,
4970
+ "aria-pressed": it() ?? null,
4971
+ "aria-busy": get(Tt) || at() || null,
4972
+ title: ct() ?? null,
4973
+ type: l() ? null : ne(),
4974
+ disabled: l() ? null : get(Et),
4975
+ href: l() ? get(Et) ? null : l() : null,
4976
+ target: l() ? u() : null,
4977
+ rel: l() ? get(Dt) : null,
4978
+ "aria-disabled": l() && get(Et) ? "true" : null,
4979
+ tabindex: l() && get(Et) ? -1 : null,
4980
+ [CLASS]: { disabled: get(Et) }
4975
4981
  }), void 0, void 0, void 0, "svelte-1j9w5l4");
4976
4982
  var i = root_5$42(), a = first_child(i), o = (e) => {
4977
4983
  var t = root_1$95();
4978
4984
  Loader(child(t), {}), reset(t), append(e, t);
4979
4985
  };
4980
4986
  if_block(a, (e) => {
4981
- get(St) && e(o);
4987
+ get(Ct) && e(o);
4982
4988
  });
4983
- var s = sibling(a, 2), u = (e) => {
4989
+ var s = sibling(a, 2), c = (e) => {
4984
4990
  var t = root_2$74();
4985
- snippet(child(t), vt), reset(t), append(e, t);
4991
+ snippet(child(t), yt), reset(t), append(e, t);
4986
4992
  };
4987
4993
  if_block(s, (e) => {
4988
- typeof vt() == "function" && e(u);
4994
+ typeof yt() == "function" && e(c);
4989
4995
  });
4990
- var f = sibling(s, 2), h = (e) => {
4996
+ var f = sibling(s, 2), p = (e) => {
4991
4997
  var t = comment(), i = first_child(t), a = (e) => {
4992
4998
  var t = root_3$66();
4993
4999
  html(t, n, !0), reset(t), append(e, t);
@@ -4996,34 +5002,35 @@ function Button(e, t) {
4996
5002
  reset(t), template_effect(() => set_text(i, n())), append(e, t);
4997
5003
  };
4998
5004
  if_block(i, (e) => {
4999
- p() ? e(a) : e(o, -1);
5005
+ h() ? e(a) : e(o, -1);
5000
5006
  }), append(e, t);
5001
5007
  };
5002
5008
  if_block(f, (e) => {
5003
- typeof n() == "string" && n().length > 0 && e(h);
5009
+ typeof n() == "string" && n().length > 0 && e(p);
5004
5010
  });
5005
5011
  var S = sibling(f, 2), C = (e) => {
5006
5012
  var t = comment();
5007
- snippet(first_child(t), yt), append(e, t);
5013
+ snippet(first_child(t), bt), append(e, t);
5008
5014
  };
5009
5015
  if_block(S, (e) => {
5010
- typeof yt() == "function" && e(C);
5016
+ typeof bt() == "function" && e(C);
5011
5017
  }), append(t, i);
5012
5018
  });
5013
- var Pt = sibling(Nt, 2), It = (e) => {
5019
+ var It = sibling(Pt, 2), Lt = (e) => {
5014
5020
  var t = root_6$36(), n = child(t, !0);
5015
5021
  reset(t), template_effect(() => {
5016
- set_attribute(t, "data-pw", lt() ?? null), set_text(n, ct());
5022
+ set_attribute(t, "data-pw", ut() ?? null), set_text(n, lt());
5017
5023
  }), append(e, t);
5018
5024
  };
5019
- return if_block(Pt, (e) => {
5020
- typeof ct() == "string" && e(It);
5021
- }), reset(kt), template_effect(() => {
5022
- At = set_class(kt, 1, `button-container variant-${i() ?? ""} size-${a() ?? ""} ${bt() ?? "" ?? ""}`, "svelte-1j9w5l4", At, {
5025
+ return if_block(It, (e) => {
5026
+ typeof lt() == "string" && e(Lt);
5027
+ }), reset(At), template_effect(() => {
5028
+ jt = set_class(At, 1, `button-container variant-${i() ?? ""} size-${a() ?? ""} ${xt() ?? "" ?? ""}`, "svelte-1j9w5l4", jt, {
5023
5029
  "icon-only": o(),
5024
- "full-width": s()
5025
- }), set_style(kt, xt() ?? null);
5026
- }), append(e, kt), pop(Ot);
5030
+ "full-width": s(),
5031
+ "button-shrinkable": c()
5032
+ }), set_style(At, St() ?? null);
5033
+ }), append(e, At), pop(kt);
5027
5034
  }
5028
5035
  create_custom_element(Button, {
5029
5036
  text: {},
@@ -5031,6 +5038,7 @@ create_custom_element(Button, {
5031
5038
  size: {},
5032
5039
  iconOnly: {},
5033
5040
  fullWidth: {},
5041
+ shrinkable: {},
5034
5042
  href: {},
5035
5043
  target: {},
5036
5044
  rel: {},
@@ -6987,7 +6995,7 @@ function getActiveElement(e) {
6987
6995
  }
6988
6996
  //#endregion
6989
6997
  //#region src/lib/Input/Input.svelte
6990
- var root$100 = /* @__PURE__ */ from_html("<textarea></textarea>"), root_1$88 = /* @__PURE__ */ from_html("<input/>"), root_2$69 = /* @__PURE__ */ from_html("<span class=\"input-mandatory-asterisk svelte-1h0c2oe\" aria-hidden=\"true\">*</span>"), root_3$61 = /* @__PURE__ */ from_html("<div class=\"label-row svelte-1h0c2oe\"><label class=\"label svelte-1h0c2oe\"> <!></label> <span class=\"svelte-1h0c2oe\"><!></span></div>"), root_4$50 = /* @__PURE__ */ from_html("<label class=\"label svelte-1h0c2oe\"> <!></label>"), root_5$40 = /* @__PURE__ */ from_html("<button type=\"button\" class=\"input-icon input-icon-left input-icon-button svelte-1h0c2oe\"><!></button>"), root_6$35 = /* @__PURE__ */ from_html("<span class=\"input-icon input-icon-left svelte-1h0c2oe\"><!></span>"), root_7$31 = /* @__PURE__ */ from_html("<button type=\"button\" class=\"input-icon input-icon-right input-icon-button svelte-1h0c2oe\"><!></button>"), root_8$26 = /* @__PURE__ */ from_html("<span class=\"input-icon input-icon-right svelte-1h0c2oe\"><!></span>"), root_9$20 = /* @__PURE__ */ from_html("<div><!> <!> <!></div>"), root_10$19 = /* @__PURE__ */ from_html("<div role=\"alert\" class=\"error-message svelte-1h0c2oe\"> </div>"), root_11$17 = /* @__PURE__ */ from_html("<div class=\"info-message svelte-1h0c2oe\"> </div>"), root_12$16 = /* @__PURE__ */ from_html("<div> </div>"), root_13$14 = /* @__PURE__ */ from_html("<div><!> <!> <!> <!> <!></div>"), $$css$185 = {
6998
+ var root$100 = /* @__PURE__ */ from_html("<textarea></textarea>"), root_1$88 = /* @__PURE__ */ from_html("<input/>"), root_2$69 = /* @__PURE__ */ from_html("<span class=\"input-mandatory-asterisk svelte-1h0c2oe\" aria-hidden=\"true\">*</span>"), root_3$61 = /* @__PURE__ */ from_html("<div class=\"label-row svelte-1h0c2oe\"><label class=\"label svelte-1h0c2oe\"> <!></label> <span class=\"svelte-1h0c2oe\"><!></span></div>"), root_4$50 = /* @__PURE__ */ from_html("<label class=\"label svelte-1h0c2oe\"> <!></label>"), root_5$40 = /* @__PURE__ */ from_html("<button type=\"button\" class=\"input-icon input-icon-left input-icon-button svelte-1h0c2oe\"><!></button>"), root_6$35 = /* @__PURE__ */ from_html("<span class=\"input-icon input-icon-left svelte-1h0c2oe\"><!></span>"), root_7$31 = /* @__PURE__ */ from_html("<button type=\"button\" class=\"input-icon input-icon-right input-icon-button svelte-1h0c2oe\"><!></button>"), root_8$26 = /* @__PURE__ */ from_html("<span class=\"input-icon input-icon-right svelte-1h0c2oe\"><!></span>"), root_9$20 = /* @__PURE__ */ from_html("<div><!> <!> <!></div>"), root_10$20 = /* @__PURE__ */ from_html("<div role=\"alert\" class=\"error-message svelte-1h0c2oe\"> </div>"), root_11$17 = /* @__PURE__ */ from_html("<div class=\"info-message svelte-1h0c2oe\"> </div>"), root_12$16 = /* @__PURE__ */ from_html("<div> </div>"), root_13$14 = /* @__PURE__ */ from_html("<div><!> <!> <!> <!> <!></div>"), $$css$185 = {
6991
6999
  hash: "svelte-1h0c2oe",
6992
7000
  code: "textarea.svelte-1h0c2oe,\n input.svelte-1h0c2oe {box-sizing:var(--input-box-sizing, border-box);height:var(--input-height, fit-content);\n\n /* Both default to the CSS initial value, so a consumer that sets neither is\n byte-identical to before. A textarea that grows with its content needs a\n ceiling before it can scroll, and one used as a paste target needs a floor;\n neither was reachable through the --input-* surface. */min-height:var(--input-min-height, auto);max-height:var(--input-max-height, none);background-color:var(--input-background, white);font-size:var(--input-font-size, 16px) !important;font-family:var(--input-font-family, inherit);border-radius:var(--input-radius, var(--radius, 4px));outline:none;padding:var(--input-padding, 16px);font-weight:var(--input-font-weight, 500);\n\n /* `normal` is what a textarea/input computes today regardless of any inherited\n value — the UA sheet sets it, and inheritance loses to a UA declaration on the\n element itself. So the default here is byte-identical for existing consumers,\n and this is the only way a consumer can set it at all. */line-height:var(--input-line-height, normal);width:var(--input-width, fit-content);margin:var(--input-margin, 0);appearance:none !important;-webkit-appearance:none !important; /* For Safari MWeb */box-shadow:var(--input-box-shadow, 0px 1px 8px #2f537733);border:var(--input-border, 1px solid transparent);resize:none;visibility:var(--input-visibility, visible);text-align:var(--input-text-align, left);text-transform:var(--input-text-transform, none);color:var(--input-text-color, #333333);}\n\n /* The fallback used to be `1px solid transparent` -- a border that changes\n width/style but not colour, so a mouse-focused OR keyboard-focused field\n looked identical to unfocused. Text inputs use a real :focus (not\n :focus-visible): unlike a button-shaped control, a text field's focus\n ring has to stay visible regardless of input modality, since a mouse\n click into a field is itself the start of a keyboard interaction.\n --input-focus-border-color already exists for exactly this colour (see\n .input-icon-button:focus-visible below), so this reuses it instead of\n minting a second token for the same ring. */textarea.svelte-1h0c2oe:focus,\n input.svelte-1h0c2oe:focus {border:var(--input-focus-border, 1px solid var(--input-focus-border-color, #005fcc));}.input-error.svelte-1h0c2oe {--input-focus-border: var(\n --input-error-border,\n 1px solid var(--input-error-msg-text-color, #c5120a)\n ) !important;--input-border: var(\n --input-error-border,\n 1px solid var(--input-error-msg-text-color, #c5120a)\n ) !important;}.action-input.svelte-1h0c2oe {border-radius:var(--input-radius, var(--radius, 4px) 0 0 var(--radius, 4px));box-shadow:var(--input-box-shadow, 0px 0px 0px #ffffff);margin-bottom:0;}.input-container.svelte-1h0c2oe {display:flex;flex-direction:column;margin:var(--input-container-margin, 0);padding:var(--input-container-padding, 0);width:var(--input-container-width, fit-content);}\n\n /* Only present when labelSuffix is supplied (and written as a direct child of the\n container, so a `label-row` class a consumer passes through `classes`, which lands\n on the container itself, cannot match): a flex item's own margin is\n space around just that item, not something later content in the column\n can rely on to open up room below the whole row, so the row itself\n carries the margin a lone .label used to carry on its own below. */.input-container.svelte-1h0c2oe > .label-row:where(.svelte-1h0c2oe) {display:flex;align-items:baseline;justify-content:space-between;gap:var(--input-label-row-gap, 8px);margin:var(--input-label-msg-margin, 0px 0px 6px 0px);}\n\n /* A row-wrapped label hands its margin to the row above, so it does not\n take it twice. Only exists in the labelSuffix branch. */.input-container.svelte-1h0c2oe > .label-row:where(.svelte-1h0c2oe) > .label:where(.svelte-1h0c2oe) {margin:0;}.label.svelte-1h0c2oe {font-weight:var(--input-label-msg-text-weight, 400);font-size:var(--input-label-msg-text-size, 12px);color:var(--input-label-msg-text-color, #4d6174);margin:var(--input-label-msg-margin, 0px 0px 6px 0px);padding:var(--input-label-msg-padding);}.input-mandatory-asterisk.svelte-1h0c2oe {color:var(--input-mandatory-color, var(--input-error-msg-text-color, #c5120a));margin-left:var(--input-mandatory-gap, 2px);}\n\n /* Icon wrapper: only rendered when leftIcon/rightIcon is supplied, so non-icon\n consumers keep the exact prior DOM. The field's bottom margin moves to the\n wrap so the absolutely-positioned icons centre on the field, not the margin. */.input-field-wrap.svelte-1h0c2oe {position:relative;display:block;margin:var(--input-margin, 0);}.input-field-wrap.svelte-1h0c2oe > textarea,\n .input-field-wrap.svelte-1h0c2oe > input {margin:0 !important;width:var(--input-width, 100%);}.input-icon.svelte-1h0c2oe {position:absolute;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:var(--input-icon-size, 20px);height:var(--input-icon-size, 20px);color:var(--input-icon-color, inherit);pointer-events:none;}.input-icon-button.svelte-1h0c2oe {background:none;border:none;padding:0;cursor:pointer;pointer-events:auto;}.input-icon-button.svelte-1h0c2oe:focus-visible {outline:var(--input-icon-focus-outline, 2px solid var(--input-focus-border-color, #005fcc));outline-offset:var(--input-icon-focus-outline-offset, 2px);border-radius:var(--input-icon-focus-radius, var(--radius, 4px));}.input-icon-left.svelte-1h0c2oe {left:var(--input-icon-gap, 12px);color:var(--input-left-icon-color, var(--input-icon-color, inherit));}.input-icon-right.svelte-1h0c2oe {right:var(--input-icon-gap, 12px);}.input-field-wrap.has-left-icon.svelte-1h0c2oe > textarea,\n .input-field-wrap.has-left-icon.svelte-1h0c2oe > input {padding-left:calc(var(--input-icon-size, 20px) + var(--input-icon-gap, 12px) * 2);}.input-field-wrap.has-right-icon.svelte-1h0c2oe > textarea,\n .input-field-wrap.has-right-icon.svelte-1h0c2oe > input {padding-right:calc(var(--input-icon-size, 20px) + var(--input-icon-gap, 12px) * 2);}.error-message.svelte-1h0c2oe {font-weight:var(--input-error-msg-text-weight, 400);font-size:var(--input-error-msg-text-size, 12px);\n /* #c5120a clears WCAG AA (6.06:1 on white) at this 12px size; the prior #fa1405\n default was only 4.06:1, so the error message itself failed to be legible. */color:var(--input-error-msg-text-color, #c5120a);margin:var(--input-error-msg-margin);padding:var(--input-error-msg-padding);}.info-message.svelte-1h0c2oe {font-weight:var(--input-info-msg-text-weight, 400);font-size:var(--input-info-msg-text-size, 12px);\n /* Neutral on purpose -- this used to default to the same red as .error-message,\n so helper text with no error visually read as a failed field (color-alone\n signalling, WCAG 1.4.1). #52525b is the muted-text tone already used for\n ChatToolStatus/ThinkingIndicator elsewhere in this library, at 7.73:1. */color:var(--input-info-msg-text-color, #52525b);margin:var(--input-info-msg-margin);padding:var(--input-info-msg-padding);}.input-char-count.svelte-1h0c2oe {align-self:flex-end;font-size:var(--input-char-count-size, 12px);color:var(--input-char-count-color, #5c6b7a);margin:var(--input-char-count-margin, 4px 0 0);font-variant-numeric:tabular-nums;}.input-char-count.at-limit.svelte-1h0c2oe {color:var(--input-char-count-limit-color, var(--input-error-msg-text-color, #c5120a));}.svelte-1h0c2oe::placeholder {color:var(--input-placeholder-color, #5c6b7a);}"
6993
7001
  };
@@ -7542,7 +7550,7 @@ function Input(e, t) {
7542
7550
  get(ln) || get(un) ? e(En) : e(Dn, -1);
7543
7551
  });
7544
7552
  var On = sibling(Tn, 2), kn = (e) => {
7545
- var t = root_10$19(), n = child(t, !0);
7553
+ var t = root_10$20(), n = child(t, !0);
7546
7554
  reset(t), template_effect(() => {
7547
7555
  set_attribute(t, "id", get(cn).errorId), set_attribute(t, "data-pw", typeof ct() == "string" && ct().length > 0 ? `${ct()}-error-message` : null), set_attribute(t, "testid", typeof ct() == "string" && ct().length > 0 ? `${ct()}-error-message` : null), set_text(n, u());
7548
7556
  }), append(e, t);
@@ -9162,7 +9170,7 @@ customElements.define("sui-color-picker", create_custom_element(ColorPicker_wc,
9162
9170
  }, [], [], { mode: "open" }));
9163
9171
  //#endregion
9164
9172
  //#region src/lib/Combobox/Combobox.svelte
9165
- var root$94 = /* @__PURE__ */ from_html("<div class=\"combobox-input-prefix svelte-178p70i\"><!></div>"), root_1$82 = /* @__PURE__ */ from_html("<div class=\"combobox-input-suffix svelte-178p70i\"><!></div>"), root_2$63 = /* @__PURE__ */ from_html("<div class=\"combobox-dropdown-header svelte-178p70i\"><!></div>"), root_3$56 = /* @__PURE__ */ from_html("<div class=\"combobox-limit svelte-178p70i\" role=\"alert\"> </div>"), root_4$47 = /* @__PURE__ */ from_html("<div class=\"combobox-empty svelte-178p70i\"> </div>"), root_5$37 = /* @__PURE__ */ from_html("<div role=\"option\" tabindex=\"-1\"><!></div>"), root_6$33 = /* @__PURE__ */ from_html("<div role=\"option\" aria-selected=\"false\" tabindex=\"-1\"><span class=\"combobox-create-icon svelte-178p70i\" aria-hidden=\"true\"><svg viewBox=\"0 0 20 20\" width=\"14\" height=\"14\" fill=\"none\"><path d=\"M10 4v12M4 10h12\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"></path></svg></span> </div>"), root_7$29 = /* @__PURE__ */ from_html("<span class=\"combobox-action-icon svelte-178p70i\" aria-hidden=\"true\"><!></span>"), root_8$25 = /* @__PURE__ */ from_html("<div role=\"option\" aria-selected=\"false\" tabindex=\"-1\"><!> </div>"), root_9$19 = /* @__PURE__ */ from_html("<div class=\"combobox-dropdown-footer svelte-178p70i\"><!></div>"), root_10$18 = /* @__PURE__ */ from_html("<div class=\"combobox-dropdown svelte-178p70i\" role=\"listbox\"><!> <!> <!> <!> <!></div>"), root_11$16 = /* @__PURE__ */ from_html("<div role=\"alert\" class=\"field-error svelte-178p70i\"> </div>"), root_12$15 = /* @__PURE__ */ from_html("<div class=\"field-info svelte-178p70i\"> </div>"), root_13$13 = /* @__PURE__ */ from_html("<div><div><!> <!> <div class=\"combobox-input svelte-178p70i\"><!></div> <!></div> <!></div> <!> <!>", 1), $$css$177 = {
9173
+ var root$94 = /* @__PURE__ */ from_html("<div class=\"combobox-input-prefix svelte-178p70i\"><!></div>"), root_1$82 = /* @__PURE__ */ from_html("<div class=\"combobox-input-suffix svelte-178p70i\"><!></div>"), root_2$63 = /* @__PURE__ */ from_html("<div class=\"combobox-dropdown-header svelte-178p70i\"><!></div>"), root_3$56 = /* @__PURE__ */ from_html("<div class=\"combobox-limit svelte-178p70i\" role=\"alert\"> </div>"), root_4$47 = /* @__PURE__ */ from_html("<div class=\"combobox-empty svelte-178p70i\"> </div>"), root_5$37 = /* @__PURE__ */ from_html("<div role=\"option\" tabindex=\"-1\"><!></div>"), root_6$33 = /* @__PURE__ */ from_html("<div role=\"option\" aria-selected=\"false\" tabindex=\"-1\"><span class=\"combobox-create-icon svelte-178p70i\" aria-hidden=\"true\"><svg viewBox=\"0 0 20 20\" width=\"14\" height=\"14\" fill=\"none\"><path d=\"M10 4v12M4 10h12\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\"></path></svg></span> </div>"), root_7$29 = /* @__PURE__ */ from_html("<span class=\"combobox-action-icon svelte-178p70i\" aria-hidden=\"true\"><!></span>"), root_8$25 = /* @__PURE__ */ from_html("<div role=\"option\" aria-selected=\"false\" tabindex=\"-1\"><!> </div>"), root_9$19 = /* @__PURE__ */ from_html("<div class=\"combobox-dropdown-footer svelte-178p70i\"><!></div>"), root_10$19 = /* @__PURE__ */ from_html("<div class=\"combobox-dropdown svelte-178p70i\" role=\"listbox\"><!> <!> <!> <!> <!></div>"), root_11$16 = /* @__PURE__ */ from_html("<div role=\"alert\" class=\"field-error svelte-178p70i\"> </div>"), root_12$15 = /* @__PURE__ */ from_html("<div class=\"field-info svelte-178p70i\"> </div>"), root_13$13 = /* @__PURE__ */ from_html("<div><div><!> <!> <div class=\"combobox-input svelte-178p70i\"><!></div> <!></div> <!></div> <!> <!>", 1), $$css$177 = {
9166
9174
  hash: "svelte-178p70i",
9167
9175
  code: ".field-error.svelte-178p70i {color:var(--field-error-color, #c5120a);font-size:var(--field-error-font-size, 12px);margin:var(--field-error-margin, 4px 0 0 0);}.field-info.svelte-178p70i {color:var(--field-info-color, #6b7280);font-size:var(--field-info-font-size, 12px);margin:var(--field-info-margin, 4px 0 0 0);}.combobox.svelte-178p70i {position:relative;width:var(--combobox-width, 100%);font-family:var(--combobox-font-family, inherit);font-size:var(--combobox-font-size, 14px);color:var(--combobox-color, #333333);}.combobox.disabled.svelte-178p70i {opacity:var(--combobox-disabled-opacity, 0.5);cursor:var(--combobox-disabled-cursor, not-allowed);pointer-events:none;}.combobox-input-wrapper.svelte-178p70i {display:flex;align-items:center;background:var(--combobox-input-background, #ffffff);border:var(--combobox-input-border, 1px solid #cccccc);border-radius:var(--combobox-input-border-radius, var(--radius, 4px));transition:var(\n --combobox-input-transition,\n border-color\n var(\n --combobox-input-transition-duration,\n var(--duration-quick, var(--motion-duration, 0.15s))\n )\n var(--combobox-input-transition-easing, var(--motion-easing, ease)),\n box-shadow\n var(\n --combobox-input-transition-duration,\n var(--duration-quick, var(--motion-duration, 0.15s))\n )\n var(--combobox-input-transition-easing, var(--motion-easing, ease))\n );}\n\n /* Multi-select control: pills wrap above the typeahead input. */.combobox-input-wrapper.multiple.svelte-178p70i {flex-wrap:wrap;gap:var(--combobox-pill-gap, 4px);padding:var(--combobox-multiple-padding, 4px 6px);cursor:text;}.combobox-input-wrapper.svelte-178p70i:hover {border-color:var(--combobox-input-hover-border-color, #999999);}.combobox-input-wrapper.svelte-178p70i:focus-within {border-color:var(--combobox-input-focus-border-color, #2563eb);box-shadow:var(--combobox-input-focus-shadow, 0 0 0 2px rgba(37, 99, 235, 0.2));}.combobox-input-prefix.svelte-178p70i {display:flex;align-items:center;padding-left:var(--combobox-input-prefix-padding, 8px);flex-shrink:0;}.combobox-input-suffix.svelte-178p70i {display:flex;align-items:center;padding-right:var(--combobox-input-suffix-padding, 8px);flex-shrink:0;}.combobox-input.svelte-178p70i {flex:1;min-width:0;--input-border: none;--input-focus-border: none;--input-box-shadow: none;--input-margin: 0;--input-width: 100%;--input-padding: var(--combobox-input-padding, 8px 12px);--input-background: transparent;--input-font-size: inherit;--input-font-family: inherit;--input-font-weight: inherit;--input-text-color: inherit;--input-radius: 0;}.combobox-input-wrapper.multiple.svelte-178p70i .combobox-input:where(.svelte-178p70i) {flex:1 1 60px;min-width:60px;--input-padding: var(--combobox-multiple-input-padding, 2px 4px);}.combobox-input.svelte-178p70i::placeholder {color:var(--combobox-placeholder-color, #999999);}.combobox-dropdown.svelte-178p70i {position:absolute;top:var(--combobox-dropdown-top, 100%);left:var(--combobox-dropdown-left, 0);right:var(--combobox-dropdown-right, 0);margin-top:var(--combobox-dropdown-gap, 4px);background:var(--combobox-dropdown-background, #ffffff);border:var(--combobox-dropdown-border, 1px solid #cccccc);border-radius:var(--combobox-dropdown-border-radius, var(--radius, 4px));box-shadow:var(--combobox-dropdown-shadow, 0 4px 12px rgba(0, 0, 0, 0.1));max-height:var(--combobox-dropdown-max-height, 200px);overflow-y:auto;z-index:var(--combobox-dropdown-z-index, 10);padding:var(--combobox-dropdown-padding, 0);}.combobox-option.svelte-178p70i {display:flex;align-items:center;gap:var(--combobox-option-gap, 8px);padding:var(--combobox-option-padding, 8px 12px);color:var(--combobox-option-color, #333333);font-size:var(--combobox-option-font-size, inherit);font-weight:var(--combobox-option-font-weight, inherit);cursor:pointer;transition:background var(--combobox-option-transition-duration, var(--motion-duration, 0.1s))\n var(--combobox-option-transition-easing, var(--motion-easing, ease));}.combobox-option.svelte-178p70i:hover,\n .combobox-option.highlighted.svelte-178p70i {background:var(--combobox-option-hover-background, #f0f0f0);color:var(--combobox-option-hover-color, var(--combobox-option-color, #333333));}.combobox-option.selected.svelte-178p70i {background:var(--combobox-option-selected-background, #e8f0fe);color:var(--combobox-option-selected-color, var(--combobox-option-color, #333333));font-weight:var(\n --combobox-option-selected-font-weight,\n var(--combobox-option-font-weight, inherit)\n );}.combobox-option.selected.highlighted.svelte-178p70i {background:var(\n --combobox-option-selected-hover-background,\n var(--combobox-option-selected-background, #e8f0fe)\n );}.combobox-option-disabled.svelte-178p70i {opacity:var(--combobox-option-disabled-opacity, 0.4);cursor:var(--combobox-option-disabled-cursor, not-allowed);pointer-events:none;}.combobox-create.svelte-178p70i {color:var(--combobox-create-color, #2563eb);}.combobox-action.svelte-178p70i {color:var(--combobox-action-color, #374151);}.combobox-option.with-divider.svelte-178p70i {border-top:var(--combobox-divider, 1px solid #e5e7eb);}.combobox-create-icon.svelte-178p70i,\n .combobox-action-icon.svelte-178p70i {display:inline-flex;align-items:center;flex-shrink:0;}.combobox-action-icon.svelte-178p70i svg {width:14px;height:14px;}.combobox-limit.svelte-178p70i {display:flex;align-items:center;gap:6px;padding:var(--combobox-limit-padding, 8px 12px);font-size:var(--combobox-limit-font-size, 13px);font-weight:500;color:var(--combobox-limit-color, #b45309);background:var(--combobox-limit-background, #fffbeb);}.combobox-dropdown-header.svelte-178p70i {border-bottom:var(--combobox-dropdown-header-border, none);padding:var(--combobox-dropdown-header-padding, 0);}.combobox-dropdown-footer.svelte-178p70i {border-top:var(--combobox-dropdown-footer-border, none);padding:var(--combobox-dropdown-footer-padding, 0);}.combobox-empty.svelte-178p70i {padding:var(--combobox-empty-padding, 8px 12px);color:var(--combobox-empty-color, #999999);font-style:var(--combobox-empty-font-style, italic);}"
9168
9176
  };
@@ -9637,7 +9645,7 @@ function Combobox(e, t) {
9637
9645
  typeof Me() == "function" && e(Pn);
9638
9646
  }), reset(Tn);
9639
9647
  var Fn = sibling(Tn, 2), In = (e) => {
9640
- var t = root_10$18(), n = child(t), i = (e) => {
9648
+ var t = root_10$19(), n = child(t), i = (e) => {
9641
9649
  var t = root_2$63();
9642
9650
  snippet(child(t), Re), reset(t), append(e, t);
9643
9651
  };
@@ -10421,7 +10429,7 @@ function tokenizedFly(e, t) {
10421
10429
  }
10422
10430
  //#endregion
10423
10431
  //#region src/lib/assets/search.svg?raw
10424
- var search_default = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\n</svg>\n", root$92 = /* @__PURE__ */ from_html("<span class=\"command-menu-search-icon svelte-rk55q\"></span>"), root_1$81 = /* @__PURE__ */ from_html("<div class=\"command-menu-empty svelte-rk55q\"> </div>"), root_2$62 = /* @__PURE__ */ from_html("<div class=\"command-menu-group-heading svelte-rk55q\"> </div>"), root_3$55 = /* @__PURE__ */ from_html("<span class=\"command-menu-item-icon svelte-rk55q\"><!></span>"), root_4$46 = /* @__PURE__ */ from_html("<div class=\"command-menu-item-icon-img-wrapper svelte-rk55q\"><!></div>"), root_5$36 = /* @__PURE__ */ from_html("<kbd class=\"command-menu-kbd svelte-rk55q\"> </kbd>"), root_6$32 = /* @__PURE__ */ from_html("<span class=\"command-menu-item-shortcut svelte-rk55q\"></span>"), root_7$28 = /* @__PURE__ */ from_html("<!> <span class=\"command-menu-item-label svelte-rk55q\"> </span> <!>", 1), root_8$24 = /* @__PURE__ */ from_html("<button type=\"button\" role=\"option\" tabindex=\"-1\"><!></button>"), root_9$18 = /* @__PURE__ */ from_html("<!> <!>", 1), root_10$17 = /* @__PURE__ */ from_html("<div role=\"dialog\" aria-modal=\"true\" tabindex=\"-1\"><div class=\"command-menu-dialog svelte-rk55q\"><div class=\"command-menu-input-wrapper svelte-rk55q\"><!> <input type=\"text\" class=\"command-menu-input svelte-rk55q\" autocomplete=\"off\" spellcheck=\"false\" role=\"combobox\" aria-autocomplete=\"list\"/></div> <div class=\"command-menu-separator svelte-rk55q\"></div> <div class=\"command-menu-list svelte-rk55q\" role=\"listbox\"><!></div></div></div>"), $$css$175 = {
10432
+ var search_default = "<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\n</svg>\n", root$92 = /* @__PURE__ */ from_html("<span class=\"command-menu-search-icon svelte-rk55q\"></span>"), root_1$81 = /* @__PURE__ */ from_html("<div class=\"command-menu-empty svelte-rk55q\"> </div>"), root_2$62 = /* @__PURE__ */ from_html("<div class=\"command-menu-group-heading svelte-rk55q\"> </div>"), root_3$55 = /* @__PURE__ */ from_html("<span class=\"command-menu-item-icon svelte-rk55q\"><!></span>"), root_4$46 = /* @__PURE__ */ from_html("<div class=\"command-menu-item-icon-img-wrapper svelte-rk55q\"><!></div>"), root_5$36 = /* @__PURE__ */ from_html("<kbd class=\"command-menu-kbd svelte-rk55q\"> </kbd>"), root_6$32 = /* @__PURE__ */ from_html("<span class=\"command-menu-item-shortcut svelte-rk55q\"></span>"), root_7$28 = /* @__PURE__ */ from_html("<!> <span class=\"command-menu-item-label svelte-rk55q\"> </span> <!>", 1), root_8$24 = /* @__PURE__ */ from_html("<button type=\"button\" role=\"option\" tabindex=\"-1\"><!></button>"), root_9$18 = /* @__PURE__ */ from_html("<!> <!>", 1), root_10$18 = /* @__PURE__ */ from_html("<div role=\"dialog\" aria-modal=\"true\" tabindex=\"-1\"><div class=\"command-menu-dialog svelte-rk55q\"><div class=\"command-menu-input-wrapper svelte-rk55q\"><!> <input type=\"text\" class=\"command-menu-input svelte-rk55q\" autocomplete=\"off\" spellcheck=\"false\" role=\"combobox\" aria-autocomplete=\"list\"/></div> <div class=\"command-menu-separator svelte-rk55q\"></div> <div class=\"command-menu-list svelte-rk55q\" role=\"listbox\"><!></div></div></div>"), $$css$175 = {
10425
10433
  hash: "svelte-rk55q",
10426
10434
  code: ".command-menu-overlay.svelte-rk55q {position:fixed;top:0;left:0;right:0;bottom:0;background-color:var(--command-menu-overlay-background, rgba(0, 0, 0, 0.5));display:flex;align-items:var(--command-menu-overlay-align, flex-start);justify-content:center;padding-top:var(--command-menu-overlay-padding-top, 20vh);z-index:var(--command-menu-z-index, 50);-webkit-tap-highlight-color:transparent;}.command-menu-dialog.svelte-rk55q {background-color:var(--command-menu-background, #ffffff);border-radius:var(--command-menu-border-radius, var(--radius, 4px));box-shadow:var(--command-menu-box-shadow, 0 16px 70px rgba(0, 0, 0, 0.2));width:var(--command-menu-width, 560px);max-width:var(--command-menu-max-width, 90vw);max-height:var(--command-menu-max-height, 60vh);display:flex;flex-direction:column;overflow:hidden;border:var(--command-menu-border, 1px solid #e2e8f0);}.command-menu-input-wrapper.svelte-rk55q {display:flex;align-items:center;padding:var(--command-menu-input-wrapper-padding, 12px 16px);gap:var(--command-menu-input-wrapper-gap, 10px);}.command-menu-search-icon.svelte-rk55q {display:inline-flex;align-items:center;justify-content:center;width:var(--command-menu-search-icon-size, 20px);height:var(--command-menu-search-icon-size, 20px);color:var(--command-menu-search-icon-color, #94a3b8);flex-shrink:0;}.command-menu-search-icon.svelte-rk55q svg {width:100%;height:100%;}.command-menu-input.svelte-rk55q {flex:1;border:none;outline:none;background:transparent;font-size:var(--command-menu-input-font-size, 16px);font-family:var(--command-menu-input-font-family, inherit);font-weight:var(--command-menu-input-font-weight, 400);color:var(--command-menu-input-color, #1e293b);caret-color:var(--command-menu-input-caret-color, #3b82f6);}\n\n /* The input is the only real Tab stop the overlay currently renders (list\n items are a roving aria-activedescendant selection, not DOM focus -- see\n .active below), so it is also the only element here that WCAG 2.4.7\n applies to. A real text input, so :focus rather than :focus-visible: the\n ring must stay visible regardless of input modality, matching Input.svelte's\n own textarea/input convention. Positive offset (not Sheet/Modal's inset\n -2px) because the input sits inside .command-menu-input-wrapper's own\n padding, not flush against the dialog's edge. */.command-menu-input.svelte-rk55q:focus {outline:var(--command-menu-input-focus-outline, 2px solid #2563eb);outline-offset:var(--command-menu-input-focus-outline-offset, 2px);}.command-menu-input.svelte-rk55q::placeholder {color:var(--command-menu-input-placeholder-color, #94a3b8);}.command-menu-separator.svelte-rk55q {height:var(--command-menu-separator-height, 1px);background-color:var(--command-menu-separator-color, #e2e8f0);flex-shrink:0;}.command-menu-list.svelte-rk55q {overflow-y:auto;padding:var(--command-menu-list-padding, 8px);scrollbar-width:var(--command-menu-scrollbar-width, thin);}.command-menu-empty.svelte-rk55q {padding:var(--command-menu-empty-padding, 32px 16px);text-align:center;color:var(--command-menu-empty-color, #94a3b8);font-size:var(--command-menu-empty-font-size, 14px);font-style:var(--command-menu-empty-font-style, normal);}.command-menu-group-heading.svelte-rk55q {padding:var(--command-menu-group-heading-padding, 8px 12px 4px);font-size:var(--command-menu-group-heading-font-size, 12px);font-weight:var(--command-menu-group-heading-font-weight, 600);color:var(--command-menu-group-heading-color, #94a3b8);text-transform:var(--command-menu-group-heading-text-transform, uppercase);letter-spacing:var(--command-menu-group-heading-letter-spacing, 0.05em);}.command-menu-item.svelte-rk55q {display:flex;align-items:center;padding:var(--command-menu-item-padding, 10px 12px);border-radius:var(--command-menu-item-border-radius, var(--radius, 4px));cursor:pointer;gap:var(--command-menu-item-gap, 10px);font-size:var(--command-menu-item-font-size, 14px);color:var(--command-menu-item-color, #334155);transition:background-color\n var(--command-menu-item-transition-duration, var(--motion-duration, 0.1s))\n var(--command-menu-item-transition-easing, var(--motion-easing, ease));background:none;border:none;width:100%;text-align:left;font-family:inherit;}.command-menu-item.active.svelte-rk55q {background-color:var(--command-menu-item-active-background, #f1f5f9);color:var(--command-menu-item-active-color, #0f172a);}.command-menu-item.disabled.svelte-rk55q {opacity:var(--command-menu-item-disabled-opacity, 0.4);cursor:not-allowed;}.command-menu-item-icon.svelte-rk55q {display:flex;align-items:center;justify-content:center;flex-shrink:0;}.command-menu-item-icon-img-wrapper.svelte-rk55q {--image-width: var(--command-menu-item-icon-size, 20px);--image-height: var(--command-menu-item-icon-size, 20px);\n\n /* Mirrors --command-menu-search-icon-color, which this component already had. */color:var(--command-menu-item-icon-color, inherit);flex-shrink:0;display:flex;align-items:center;justify-content:center;}.command-menu-item-label.svelte-rk55q {flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.command-menu-item-shortcut.svelte-rk55q {display:flex;align-items:center;gap:var(--command-menu-shortcut-gap, 4px);flex-shrink:0;}.command-menu-kbd.svelte-rk55q {display:inline-flex;align-items:center;justify-content:center;min-width:var(--command-menu-kbd-min-width, 24px);height:var(--command-menu-kbd-height, 22px);padding:var(--command-menu-kbd-padding, 0 6px);border-radius:var(--command-menu-kbd-border-radius, var(--radius, 4px));background-color:var(--command-menu-kbd-background, #f1f5f9);border:var(--command-menu-kbd-border, 1px solid #e2e8f0);color:var(--command-menu-kbd-color, #64748b);font-size:var(--command-menu-kbd-font-size, 11px);font-family:var(--command-menu-kbd-font-family, inherit);font-weight:var(--command-menu-kbd-font-weight, 500);box-shadow:var(--command-menu-kbd-box-shadow, 0 1px 0 #e2e8f0);}"
10427
10435
  };
@@ -10659,7 +10667,7 @@ function CommandMenu(e, t) {
10659
10667
  be(e), flushSync();
10660
10668
  }
10661
10669
  }, wt = comment(), Tt = first_child(wt), Et = (e) => {
10662
- var t = root_10$17(), i = child(t), a = child(i), c = child(a), C = (e) => {
10670
+ var t = root_10$18(), i = child(t), a = child(i), c = child(a), C = (e) => {
10663
10671
  var t = comment();
10664
10672
  snippet(first_child(t), S), append(e, t);
10665
10673
  }, k = (e) => {
@@ -16858,12 +16866,14 @@ var rest_excludes$59 = new Set([
16858
16866
  "buttonAriaPressed"
16859
16867
  ]), $$css$120 = {
16860
16868
  hash: "svelte-94kscb",
16861
- code: "\n /* A custom element defaults to `display: inline`, which has no definite\n width for a percentage to resolve against -- so a component sizing itself\n with `width: 100%` resolved against the wrong ancestor, and layout depended\n on the consumer's surrounding markup rather than on the component. The value\n matches this component's own root element (block-level), and is a token so a\n consumer can change it without reaching inside the shadow root -- which they\n could not do, since a stylesheet cannot add a rule there. */:host {display:var(--sui-button-display, block);}"
16869
+ code: "\n /* A custom element defaults to `display: inline`, which has no definite\n width for a percentage to resolve against -- so a component sizing itself\n with `width: 100%` resolved against the wrong ancestor, and layout depended\n on the consumer's surrounding markup rather than on the component. The value\n matches this component's own root element (block-level), and is a token so a\n consumer can change it without reaching inside the shadow root -- which they\n could not do, since a stylesheet cannot add a rule there. */:host {display:var(--sui-button-display, block);}\n\n /* In a custom-element consumer the host, not the inner container, is the flex\n or grid item, so it is the box that has to be allowed to shrink. The inner\n container's own rule only caps it at the host's width. */:host([shrinkable]) {min-width:0;max-width:100%;}"
16862
16870
  };
16863
16871
  function Button_wc(e, t) {
16864
16872
  push(t, !0), append_styles$1(e, $$css$120);
16865
16873
  let n = prop(t, "buttonAriaExpanded", 7), i = prop(t, "buttonAriaLabel", 7), a = prop(t, "buttonAriaPressed", 7), o = /* @__PURE__ */ rest_props(t, rest_excludes$59), s = t.$$host, c = /* @__PURE__ */ user_derived(() => dispatchEvents(s, o));
16866
- return Button(e, spread_props(() => o, () => get(c), {
16874
+ return user_effect(() => {
16875
+ s.toggleAttribute("shrinkable", t.shrinkable === !0);
16876
+ }), Button(e, spread_props(() => o, () => get(c), {
16867
16877
  get ariaLabel() {
16868
16878
  return i();
16869
16879
  },
@@ -17000,6 +17010,10 @@ customElements.define("sui-button", create_custom_element(Button_wc, {
17000
17010
  attribute: "full-width",
17001
17011
  type: "Boolean"
17002
17012
  },
17013
+ shrinkable: {
17014
+ attribute: "shrinkable",
17015
+ type: "Boolean"
17016
+ },
17003
17017
  href: {
17004
17018
  attribute: "href",
17005
17019
  type: "String"
@@ -19935,7 +19949,7 @@ customElements.define("sui-menu", create_custom_element(Menu_wc, {
19935
19949
  }, ["trigger"], [], { mode: "open" }));
19936
19950
  //#endregion
19937
19951
  //#region src/lib/Animations/ModalAnimation.svelte
19938
- var root$54 = /* @__PURE__ */ from_html("<div><!></div>");
19952
+ var root$54 = /* @__PURE__ */ from_html("<div class=\"modal-animation\"><!></div>");
19939
19953
  function ModalAnimation(e, t) {
19940
19954
  push(t, !0);
19941
19955
  let n = prop(t, "enable", 7, !0), i = prop(t, "align", 7, "bottom"), a = prop(t, "transitionType", 7, "ALL"), o = prop(t, "entryAnimation", 7), s = prop(t, "children", 7), c = prop(t, "testId", 7), l = /* @__PURE__ */ user_derived(() => {
@@ -20143,9 +20157,9 @@ create_custom_element(OverlayAnimation, {
20143
20157
  }, [], [], { mode: "open" });
20144
20158
  //#endregion
20145
20159
  //#region src/lib/Modal/Modal.svelte
20146
- var root_1$49 = /* @__PURE__ */ from_html("<div role=\"button\" tabindex=\"0\"><!></div>"), root_2$39 = /* @__PURE__ */ from_html("<div><!></div>"), root_3$36 = /* @__PURE__ */ from_html("<div class=\"header-text svelte-lnufm\"> </div>"), root_4$32 = /* @__PURE__ */ from_html("<div class=\"header svelte-lnufm\"><!> <!> <!></div>"), root_5$28 = /* @__PURE__ */ from_html("<div class=\"footer-content svelte-lnufm\"><!></div>"), root_6$25 = /* @__PURE__ */ from_html("<div class=\"footer-secondary-button svelte-lnufm\"><!></div>"), root_7$23 = /* @__PURE__ */ from_html("<div class=\"footer-primary-button svelte-lnufm\"><!></div>"), root_8$22 = /* @__PURE__ */ from_html("<div class=\"footer-content svelte-lnufm\"><div class=\"footer-action-buttons svelte-lnufm\"><!> <!></div></div>"), root_9$17 = /* @__PURE__ */ from_html("<div tabindex=\"-1\"><!> <div class=\"slot-content svelte-lnufm\"><!></div> <!></div>"), $$css$101 = {
20160
+ var root_1$49 = /* @__PURE__ */ from_html("<div role=\"button\" tabindex=\"0\" class=\"svelte-lnufm\"><!></div>"), root_2$39 = /* @__PURE__ */ from_html("<div class=\"svelte-lnufm\"><!></div>"), root_3$36 = /* @__PURE__ */ from_html("<div class=\"header-text svelte-lnufm\"> </div>"), root_4$32 = /* @__PURE__ */ from_html("<div class=\"header svelte-lnufm\"><!> <!> <!></div>"), root_5$28 = /* @__PURE__ */ from_html("<div class=\"footer-content svelte-lnufm\"><!></div>"), root_6$25 = /* @__PURE__ */ from_html("<div class=\"footer-secondary-button svelte-lnufm\"><!></div>"), root_7$23 = /* @__PURE__ */ from_html("<div class=\"footer-primary-button svelte-lnufm\"><!></div>"), root_8$22 = /* @__PURE__ */ from_html("<div class=\"footer-content svelte-lnufm\"><div class=\"footer-action-buttons svelte-lnufm\"><!> <!></div></div>"), root_9$17 = /* @__PURE__ */ from_html("<div tabindex=\"-1\"><!> <div class=\"slot-content svelte-lnufm\"><!></div> <!></div>"), root_10$17 = /* @__PURE__ */ from_html("<div><!></div>"), $$css$101 = {
20147
20161
  hash: "svelte-lnufm",
20148
- code: ".modal.svelte-lnufm {position:fixed;top:0;bottom:0;left:0;right:0;width:var(--modal-width, 100vw);height:var(--modal-height, 100vh);display:flex;flex-direction:column;z-index:var(--modal-z-index, 15);-webkit-tap-highlight-color:transparent;margin:var(--modal-margin);}.overlay-active.svelte-lnufm {\n /* Prefer the modal-specific token; fall back to the legacy generic\n --background-color (kept for backward compatibility), then the default.\n The generic name collides with app-level --background-color tokens, which\n silently override the overlay; --modal-overlay-background-color lets a\n consumer theme the backdrop without that collision. */background-color:var(--modal-overlay-background-color, var(--background-color, #00000066));backdrop-filter:var(--modal-overlay-backdrop-filter, none);-webkit-backdrop-filter:var(--modal-overlay-backdrop-filter, none);pointer-events:auto;}.overlay-inactive.svelte-lnufm {pointer-events:none;}.modal-content.svelte-lnufm {pointer-events:auto;background-color:var(--modal-content-background-color, #ffffff);cursor:auto;display:flex;flex-direction:column;border-radius:var(--modal-border-radius, var(--radius, 4px));overflow:var(--modal-content-overflow, auto);border-top:var(--modal-content-border-top);outline:none;\n /* Viewport containment for every size class: only .fit-content used to carry\n a max-height, so a size whose height var is overridden to fit-content (or\n anything taller than the screen) grew past the viewport and pushed its\n footer and bottom rounding off-screen. dvh tracks the real visible\n viewport on mobile; the vh line is the fallback for engines without dvh. */max-height:var(--modal-max-height, calc(100vh - 32px));max-height:var(--modal-max-height, calc(100dvh - 32px));}\n\n /* The comment this replaced claimed tabindex=\"-1\" meant this never needed a\n ring because it's \"never in the Tab order itself\" -- true, but beside the\n point: onMount calls focusEntryPoint(modalContent), which focuses THIS\n element directly (real DOM focus, not merely reachable via Tab) whenever\n the modal has no focusable content of its own. That is exactly Sheet's\n sheet-panel problem, and sheet-panel got the fix this comment said it\n \"matches\" -- this one didn't. :focus-visible so the trigger click that\n opens the modal shows nothing new; offset is negative like Sheet's,\n since a modal can be sized to fill nearly the whole viewport. */.modal-content.svelte-lnufm:focus-visible {outline:var(--modal-content-focus-outline, 2px solid #2563eb);outline-offset:var(--modal-content-focus-outline-offset, -2px);}.slot-content.svelte-lnufm {display:var(--modal-display, flex);\n /* Flex children default to min-height: auto and refuse to shrink below their\n content, which defeats the overflow-y scroll once modal-content is\n height-capped — the content spills instead of scrolling and the footer is\n pushed out. 0 lets the slot shrink so its own scrollbar engages and the\n header/footer stay pinned inside the viewport. */min-height:var(--modal-slot-content-min-height, 0);overflow-y:var(--modal-overflow-y, scroll);scrollbar-width:var(--modal-scrollbar-width, none);padding:var(--modal-content-padding, 0);}.slot-content.svelte-lnufm::-webkit-scrollbar {display:none;}.center.svelte-lnufm {justify-content:var(--modal-center-justify-content, center);align-items:var(--modal-center-align-items, center);}.bottom.svelte-lnufm {justify-content:var(--modal-bottom-justify-content, flex-end);align-items:var(--modal-bottom-align-items);}.top.svelte-lnufm {justify-content:var(--modal-top-justify-content, flex-start);align-items:var(--modal-top-align-items);}.small.svelte-lnufm {height:var(--modal-small-height, 20vh);width:var(--modal-small-width);}.medium.svelte-lnufm {height:var(--modal-medium-height, 50vh);width:var(--modal-medium-width);}.large.svelte-lnufm {height:var(--modal-large-height, 80vh);width:var(--modal-large-width);}.fit-content.svelte-lnufm {height:fit-content;max-height:var(--modal-fit-content-max-height, 80vh);}.header.svelte-lnufm {display:flex;background-color:var(--modal-header-background-color, #f6f7f9);padding:var(--modal-header-padding, 18px 20px);border-radius:var(--modal-header-border-radius, 0px);border-bottom:var(--modal-header-border-bottom, none);align-items:var(--modal-header-align-items, center);}.footer-content.svelte-lnufm {display:flex;background-color:var(--modal-footer-background-color, #f6f7f9);padding:var(--modal-footer-padding, 18px 20px);border-radius:var(--modal-footer-border-radius, 0px);border-top:var(--modal-footer-border-top, none);justify-content:var(--modal-footer-justify-content, none);}.footer-action-buttons.svelte-lnufm {display:flex;gap:var(--modal-footer-gap, 0px);width:var(--modal-footer-action-buttons-width, fit-content);}.footer-secondary-button.svelte-lnufm {--button-max-height: var(--modal-footer-secondary-button-max-height);--button-max-width: var(--modal-footer-secondary-button-max-width);--button-font-family: var(--modal-footer-secondary-button-font-family);--button-font-weight: var(--modal-footer-secondary-button-font-weight, 500);--button-font-size: var(--modal-footer-secondary-button-font-size, 14px);--button-color: var(--modal-footer-secondary-button-color, #3a4550);--button-text-color: var(--modal-footer-secondary-button-text-color, white);--button-height: var(--modal-footer-secondary-button-height, fit-content);--button-padding: var(--modal-footer-secondary-button-padding, 16px);--button-margin: var(--modal-footer-secondary-button-margin);--button-border-radius: var(--modal-footer-secondary-button-border-radius, var(--radius, 4px));--button-width: var(--modal-footer-secondary-button-width, fit-content);--cursor: var(--modal-footer-secondary-button-cursor, pointer);--opacity: var(--modal-footer-secondary-button-opacity, 1);--button-border: var(--modal-footer-secondary-button-border, none);--disabled-background-color: var(\n --modal-footer-secondary-button-disabled-color,\n var(--modal-footer-secondary-button-color, #3a4550)\n );--disabled-text-color: var(\n --modal-footer-secondary-button-disabled-text-color,\n var(--modal-footer-secondary-button-text-color, white)\n );--disabled-border: var(\n --modal-footer-secondary-button-disabled-border,\n var(--modal-footer-secondary-button-border, none)\n );--disabled-opacity: var(--modal-footer-secondary-button-disabled-opacity, 0.4);--button-justify-content: var(--modal-footer-secondary-button-justify-content, center);--button-content-flex-direction: var(\n --modal-footer-secondary-button-content-flex-direction,\n row\n );--button-content-gap: var(--modal-footer-secondary-button-content-gap, 16px);--button-visibility: var(--modal-footer-secondary-button-visibility, visible);--button-box-shadow: var(--modal-footer-secondary-button-box-shadow, none);order:var(--modal-secondary-button-order, none);flex:var(--modal-footer-secondary-button-flex-value, none);}.footer-primary-button.svelte-lnufm {--button-max-height: var(--modal-footer-primary-button-max-height);--button-max-width: var(--modal-footer-primary-button-max-width);--button-font-family: var(--modal-footer-primary-button-font-family);--button-font-weight: var(--modal-footer-primary-button-font-weight, 500);--button-font-size: var(--modal-footer-primary-button-font-size, 14px);--button-color: var(--modal-footer-primary-button-color, #3a4550);--button-text-color: var(--modal-footer-primary-button-text-color, white);--button-height: var(--modal-footer-primary-button-height, fit-content);--button-padding: var(--modal-footer-primary-button-padding, 16px);--button-margin: var(--modal-footer-primary-button-margin);--button-border-radius: var(--modal-footer-primary-button-border-radius, var(--radius, 4px));--button-width: var(--modal-footer-primary-button-width, fit-content);--cursor: var(--modal-footer-primary-button-cursor, pointer);--opacity: var(--modal-footer-primary-button-opacity, 1);--button-border: var(--modal-footer-primary-button-border, none);--disabled-background-color: var(\n --modal-footer-primary-button-disabled-color,\n var(--modal-footer-primary-button-color, #3a4550)\n );--disabled-text-color: var(\n --modal-footer-primary-button-disabled-text-color,\n var(--modal-footer-primary-button-text-color, white)\n );--disabled-border: var(\n --modal-footer-primary-button-disabled-border,\n var(--modal-footer-primary-button-border, none)\n );--disabled-opacity: var(--modal-footer-primary-button-disabled-opacity, 0.4);--button-justify-content: var(--modal-footer-primary-button-justify-content, center);--button-content-flex-direction: var(--modal-footer-primary-button-content-flex-direction, row);--button-content-gap: var(--modal-footer-primary-button-content-gap, 16px);--button-visibility: var(--modal-footer-primary-button-visibility, visible);--button-box-shadow: var(--modal-footer-primary-button-box-shadow, none);order:var(--modal-primary-button-order, none);flex:var(--modal-footer-primary-button-flex-value, none);}.header-text.svelte-lnufm {display:flex;align-items:center;flex:1;font-size:var(--header-text-size, 16px);font-weight:var(--modal-header-text-weight, inherit);line-height:var(--modal-header-text-line-height, inherit);letter-spacing:var(--modal-header-text-letter-spacing, inherit);}\n\n /* The header images render through the Img component (inline svg or img), so\n these classes ride on Img's element — match them via :global under the\n scoped .header to keep the sizing contract. */.header.svelte-lnufm .header-left-img,\n .header.svelte-lnufm .header-right-img {padding-top:var(--header-img-top-padding, 5px);cursor:pointer;}.header.svelte-lnufm .header-left-img {margin:var(--header-left-image-margin, 0px 18px 0px 0px);width:var(--header-left-image-width, 25px);height:var(--header-left-image-height, 25px);}.header.svelte-lnufm .header-right-img {width:var(--header-right-image-width, 25px);height:var(--header-right-image-height, 25px);padding:var(--header-right-image-padding);}"
20162
+ code: ".modal.svelte-lnufm {position:fixed;top:0;bottom:0;left:0;right:0;width:var(--modal-width, 100vw);height:var(--modal-height, 100vh);display:flex;flex-direction:column;z-index:var(--modal-z-index, 15);-webkit-tap-highlight-color:transparent;margin:var(--modal-margin);}.overlay-active.svelte-lnufm {\n /* Prefer the modal-specific token; fall back to the legacy generic\n --background-color (kept for backward compatibility), then the default.\n The generic name collides with app-level --background-color tokens, which\n silently override the overlay; --modal-overlay-background-color lets a\n consumer theme the backdrop without that collision. */background-color:var(--modal-overlay-background-color, var(--background-color, #00000066));backdrop-filter:var(--modal-overlay-backdrop-filter, none);-webkit-backdrop-filter:var(--modal-overlay-backdrop-filter, none);pointer-events:auto;}.overlay-inactive.svelte-lnufm {pointer-events:none;}.modal-content.svelte-lnufm {pointer-events:auto;background-color:var(--modal-content-background-color, #ffffff);cursor:auto;display:flex;flex-direction:column;border-radius:var(--modal-border-radius, var(--radius, 4px));overflow:var(--modal-content-overflow, auto);border-top:var(--modal-content-border-top);outline:none;\n /* Viewport containment for every size class: only .fit-content used to carry\n a max-height, so a size whose height var is overridden to fit-content (or\n anything taller than the screen) grew past the viewport and pushed its\n footer and bottom rounding off-screen. dvh tracks the real visible\n viewport on mobile; the vh line is the fallback for engines without dvh. */max-height:var(--modal-max-height, calc(100vh - var(--modal-viewport-gutter, 32px)));max-height:var(--modal-max-height, calc(100dvh - var(--modal-viewport-gutter, 32px)));}\n\n /* The width rules below are wrapped in :where() so they carry no specificity.\n An app that already styles .modal-content or .footer-action-buttons wrote\n that rule before these existed, and Svelte's scope class would otherwise\n make these tie it or beat it whatever the load order. Svelte compiles\n :where(.x) to :where(.x.svelte-hash), which stays at zero.\n\n The ceiling is chosen per alignment on .modal (see .center/.top/.bottom) and\n only read here. It caps whatever width a size token or a wide child asks for\n instead of wrapping that token in min(): a keyword such as fit-content or\n auto makes min() invalid and silently drops the width.\n The \"+ 0%\" is load-bearing. A max-width that contains a percentage is\n ignored while the shrink-to-fit transition wrapper works out its own width,\n so the cap does not narrow the box a percentage size token resolves\n against: calc(100% - 32px) stays 343px on a 375px phone instead of becoming\n 311px. Laid out, it is the same length. \"none\" makes the calc invalid, which\n leaves max-width unset, i.e. no cap, as intended. */:where(.modal-content.svelte-lnufm) {max-width:calc(var(--_modal-max-width, 100vw) + 0%);}\n\n /* The wrapper is sized from the uncapped width, so it can be wider than the\n capped panel. It stays inside the overlay (or the ceiling, when an embedded\n overlay is narrower) and lets clicks in the strip beside the panel reach the\n overlay. The panel is inset by half of what the wrapper has beyond the\n ceiling, which centres a panel that fills the ceiling; a narrower one is\n offset by the same amount. Below the ceiling there is no inset and the panel\n keeps its position at the start of the wrapper, as it always had. */:where(.modal.svelte-lnufm > .modal-animation) {pointer-events:none;max-width:max(100%, var(--_modal-max-width, 100vw));}:where(.modal-animation > .modal-content.svelte-lnufm) {margin-inline-start:max(0px, calc((100% - var(--_modal-max-width, 100vw)) / 2));}\n\n /* The comment this replaced claimed tabindex=\"-1\" meant this never needed a\n ring because it's \"never in the Tab order itself\" -- true, but beside the\n point: onMount calls focusEntryPoint(modalContent), which focuses THIS\n element directly (real DOM focus, not merely reachable via Tab) whenever\n the modal has no focusable content of its own. That is exactly Sheet's\n sheet-panel problem, and sheet-panel got the fix this comment said it\n \"matches\" -- this one didn't. :focus-visible so the trigger click that\n opens the modal shows nothing new; offset is negative like Sheet's,\n since a modal can be sized to fill nearly the whole viewport. */.modal-content.svelte-lnufm:focus-visible {outline:var(--modal-content-focus-outline, 2px solid #2563eb);outline-offset:var(--modal-content-focus-outline-offset, -2px);}.slot-content.svelte-lnufm {display:var(--modal-display, flex);\n /* Flex children default to min-height: auto and refuse to shrink below their\n content, which defeats the overflow-y scroll once modal-content is\n height-capped — the content spills instead of scrolling and the footer is\n pushed out. 0 lets the slot shrink so its own scrollbar engages and the\n header/footer stay pinned inside the viewport. */min-height:var(--modal-slot-content-min-height, 0);overflow-y:var(--modal-overflow-y, scroll);scrollbar-width:var(--modal-scrollbar-width, none);padding:var(--modal-content-padding, 0);}.slot-content.svelte-lnufm::-webkit-scrollbar {display:none;}\n\n /* A dialog keeps a gutter either side; a top or bottom sheet is edge to edge,\n so only the centred ceiling subtracts one. Each alignment owns its token so\n an app-wide default for dialogs never reshapes a bottom sheet. */.center.svelte-lnufm {justify-content:var(--modal-center-justify-content, center);align-items:var(--modal-center-align-items, center);--_modal-max-width: var(\n --modal-center-max-width,\n calc(100vw - var(--modal-viewport-gutter, 32px))\n );}.bottom.svelte-lnufm {justify-content:var(--modal-bottom-justify-content, flex-end);align-items:var(--modal-bottom-align-items);--_modal-max-width: var(--modal-bottom-max-width, 100vw);}.top.svelte-lnufm {justify-content:var(--modal-top-justify-content, flex-start);align-items:var(--modal-top-align-items);--_modal-max-width: var(--modal-top-max-width, 100vw);}.small.svelte-lnufm {height:var(--modal-small-height, 20vh);width:var(--modal-small-width);}.medium.svelte-lnufm {height:var(--modal-medium-height, 50vh);width:var(--modal-medium-width);}.large.svelte-lnufm {height:var(--modal-large-height, 80vh);width:var(--modal-large-width);}.fit-content.svelte-lnufm {height:fit-content;max-height:var(--modal-fit-content-max-height, 80vh);}.header.svelte-lnufm {display:flex;background-color:var(--modal-header-background-color, #f6f7f9);padding:var(--modal-header-padding, 18px 20px);border-radius:var(--modal-header-border-radius, 0px);border-bottom:var(--modal-header-border-bottom, none);align-items:var(--modal-header-align-items, center);}.footer-content.svelte-lnufm {display:flex;background-color:var(--modal-footer-background-color, #f6f7f9);padding:var(--modal-footer-padding, 18px 20px);border-radius:var(--modal-footer-border-radius, 0px);border-top:var(--modal-footer-border-top, none);justify-content:var(--modal-footer-justify-content, none);}.footer-action-buttons.svelte-lnufm {display:flex;gap:var(--modal-footer-gap, 0px);width:var(--modal-footer-action-buttons-width, fit-content);}\n\n /* Zero specificity for the same reason as the width rules above: an app that\n already wraps and aligns this row keeps doing so. */:where(.footer-action-buttons.svelte-lnufm) {flex-wrap:wrap;justify-content:var(--modal-footer-action-buttons-justify-content, flex-start);}.footer-secondary-button.svelte-lnufm {--button-max-height: var(--modal-footer-secondary-button-max-height);--button-max-width: var(--modal-footer-secondary-button-max-width);--button-font-family: var(--modal-footer-secondary-button-font-family);--button-font-weight: var(--modal-footer-secondary-button-font-weight, 500);--button-font-size: var(--modal-footer-secondary-button-font-size, 14px);--button-color: var(--modal-footer-secondary-button-color, #3a4550);--button-text-color: var(--modal-footer-secondary-button-text-color, white);--button-height: var(--modal-footer-secondary-button-height, fit-content);--button-padding: var(--modal-footer-secondary-button-padding, 16px);--button-margin: var(--modal-footer-secondary-button-margin);--button-border-radius: var(--modal-footer-secondary-button-border-radius, var(--radius, 4px));--button-width: var(--modal-footer-secondary-button-width, fit-content);--cursor: var(--modal-footer-secondary-button-cursor, pointer);--opacity: var(--modal-footer-secondary-button-opacity, 1);--button-border: var(--modal-footer-secondary-button-border, none);--disabled-background-color: var(\n --modal-footer-secondary-button-disabled-color,\n var(--modal-footer-secondary-button-color, #3a4550)\n );--disabled-text-color: var(\n --modal-footer-secondary-button-disabled-text-color,\n var(--modal-footer-secondary-button-text-color, white)\n );--disabled-border: var(\n --modal-footer-secondary-button-disabled-border,\n var(--modal-footer-secondary-button-border, none)\n );--disabled-opacity: var(--modal-footer-secondary-button-disabled-opacity, 0.4);--button-justify-content: var(--modal-footer-secondary-button-justify-content, center);--button-content-flex-direction: var(\n --modal-footer-secondary-button-content-flex-direction,\n row\n );--button-content-gap: var(--modal-footer-secondary-button-content-gap, 16px);--button-visibility: var(--modal-footer-secondary-button-visibility, visible);--button-box-shadow: var(--modal-footer-secondary-button-box-shadow, none);order:var(--modal-secondary-button-order, none);flex:var(--modal-footer-secondary-button-flex-value, none);}.footer-primary-button.svelte-lnufm {--button-max-height: var(--modal-footer-primary-button-max-height);--button-max-width: var(--modal-footer-primary-button-max-width);--button-font-family: var(--modal-footer-primary-button-font-family);--button-font-weight: var(--modal-footer-primary-button-font-weight, 500);--button-font-size: var(--modal-footer-primary-button-font-size, 14px);--button-color: var(--modal-footer-primary-button-color, #3a4550);--button-text-color: var(--modal-footer-primary-button-text-color, white);--button-height: var(--modal-footer-primary-button-height, fit-content);--button-padding: var(--modal-footer-primary-button-padding, 16px);--button-margin: var(--modal-footer-primary-button-margin);--button-border-radius: var(--modal-footer-primary-button-border-radius, var(--radius, 4px));--button-width: var(--modal-footer-primary-button-width, fit-content);--cursor: var(--modal-footer-primary-button-cursor, pointer);--opacity: var(--modal-footer-primary-button-opacity, 1);--button-border: var(--modal-footer-primary-button-border, none);--disabled-background-color: var(\n --modal-footer-primary-button-disabled-color,\n var(--modal-footer-primary-button-color, #3a4550)\n );--disabled-text-color: var(\n --modal-footer-primary-button-disabled-text-color,\n var(--modal-footer-primary-button-text-color, white)\n );--disabled-border: var(\n --modal-footer-primary-button-disabled-border,\n var(--modal-footer-primary-button-border, none)\n );--disabled-opacity: var(--modal-footer-primary-button-disabled-opacity, 0.4);--button-justify-content: var(--modal-footer-primary-button-justify-content, center);--button-content-flex-direction: var(--modal-footer-primary-button-content-flex-direction, row);--button-content-gap: var(--modal-footer-primary-button-content-gap, 16px);--button-visibility: var(--modal-footer-primary-button-visibility, visible);--button-box-shadow: var(--modal-footer-primary-button-box-shadow, none);order:var(--modal-primary-button-order, none);flex:var(--modal-footer-primary-button-flex-value, none);}.header-text.svelte-lnufm {display:flex;align-items:center;flex:1;font-size:var(--header-text-size, 16px);font-weight:var(--modal-header-text-weight, inherit);line-height:var(--modal-header-text-line-height, inherit);letter-spacing:var(--modal-header-text-letter-spacing, inherit);}\n\n /* The header images render through the Img component (inline svg or img), so\n these classes ride on Img's element — match them via :global under the\n scoped .header to keep the sizing contract. */.header.svelte-lnufm .header-left-img,\n .header.svelte-lnufm .header-right-img {padding-top:var(--header-img-top-padding, 5px);cursor:pointer;}.header.svelte-lnufm .header-left-img {margin:var(--header-left-image-margin, 0px 18px 0px 0px);width:var(--header-left-image-width, 25px);height:var(--header-left-image-height, 25px);}.header.svelte-lnufm .header-right-img {width:var(--header-right-image-width, 25px);height:var(--header-right-image-height, 25px);padding:var(--header-right-image-padding);}"
20149
20163
  };
20150
20164
  function Modal(e, t) {
20151
20165
  push(t, !0), append_styles$1(e, $$css$101);
@@ -20413,7 +20427,7 @@ function Modal(e, t) {
20413
20427
  return dt();
20414
20428
  },
20415
20429
  children: (e, t) => {
20416
- var a = root_2$39();
20430
+ var a = root_10$17();
20417
20431
  ModalAnimation(child(a), {
20418
20432
  get enable() {
20419
20433
  return f();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/svelte-ui-components",
3
- "version": "4.40.1",
3
+ "version": "4.42.0",
4
4
  "description": "A themeable Svelte 5 UI component library with CSS custom property driven styling",
5
5
  "keywords": [
6
6
  "svelte",