@juspay/svelte-ui-components 4.26.0 → 4.27.1

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.
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { onMount, tick } from 'svelte';
3
- import type { SelectItem, SelectProperties } from './properties';
3
+ import type { SelectItem, SelectPlacement, SelectProperties } from './properties';
4
4
  import Pill from '../Pill/Pill.svelte';
5
5
  import Img from '../Img/Img.svelte';
6
6
  import { computeSelectDropdownPosition } from './dropdownPosition';
@@ -33,6 +33,7 @@
33
33
  classes,
34
34
  open = $bindable(false),
35
35
  dropdownAlign = 'left',
36
+ placement,
36
37
  hierarchy = 'default',
37
38
  leftIcon,
38
39
  leftIconTestId,
@@ -62,6 +63,67 @@
62
63
  // default. The in-flow panel still honours the CSS var via its margin-top.
63
64
  const PORTAL_DROPDOWN_GAP = 4;
64
65
 
66
+ /** Viewport padding the `'auto'` placement keeps between the panel and the edges. */
67
+ const AUTO_PLACEMENT_VIEWPORT_MARGIN = 8;
68
+
69
+ /* An unset `placement` is the pre-5.0 contract, kept exactly: the in-flow panel
70
+ always opens downward and only the portaled one flips on fit. Setting it opts
71
+ both paths into one resolved corner, which is the whole point of the prop. */
72
+ let placementRequest: SelectPlacement = $derived(
73
+ placement ?? (dropdownAlign === 'right' ? 'bottom-right' : 'bottom-left')
74
+ );
75
+ let placementPinned: boolean = $derived(placement != null);
76
+
77
+ /** Corner an `'auto'` measuring pass settled on; null until it has run. */
78
+ let autoResolved: Exclude<SelectPlacement, 'auto'> | null = $state(null);
79
+
80
+ /* Derived rather than assigned when the dropdown opens: `open` is bindable and
81
+ documented as something a parent can drive, so the panel can be rendered
82
+ without `openDropdown` ever running. Assigning on the click path left an
83
+ explicitly placed Select rendering at the default corner whenever its parent
84
+ opened it. */
85
+ let resolvedPlacement: Exclude<SelectPlacement, 'auto'> = $derived(
86
+ placementRequest === 'auto' ? (autoResolved ?? 'bottom-left') : placementRequest
87
+ );
88
+ /** True while an `'auto'` open measures the hidden panel -- suppresses paint. */
89
+ let measuringPlacement: boolean = $derived(placementRequest === 'auto' && autoResolved === null);
90
+
91
+ /* `$derived.by` rather than `$derived`: a bare expression here is evaluated in
92
+ the declaration's control flow, where TypeScript has `resolvedPlacement`
93
+ still narrowed to its initialiser literal and calls the comparison
94
+ unreachable. The closure resets that narrowing. */
95
+ let placementAlign: 'left' | 'right' = $derived.by(() =>
96
+ resolvedPlacement === 'bottom-right' || resolvedPlacement === 'top-right' ? 'right' : 'left'
97
+ );
98
+
99
+ /**
100
+ * Resolves `'auto'` against live geometry, mirroring Menu's pass: the panel is
101
+ * rendered hidden at the default corner first so it has real dimensions, then
102
+ * flips right/up only where the default overflows and the opposite side fits.
103
+ */
104
+ function resolveAutoPlacement(panel: HTMLElement): Exclude<SelectPlacement, 'auto'> {
105
+ if (containerEl === null || typeof window === 'undefined') {
106
+ return 'bottom-left';
107
+ }
108
+ const containerRect = containerEl.getBoundingClientRect();
109
+ const panelRect = panel.getBoundingClientRect();
110
+ const viewportWidth = window.innerWidth;
111
+ const viewportHeight = window.innerHeight;
112
+
113
+ const overflowsRight =
114
+ containerRect.left + panelRect.width > viewportWidth - AUTO_PLACEMENT_VIEWPORT_MARGIN;
115
+ const fitsRightAnchored =
116
+ containerRect.right - panelRect.width >= AUTO_PLACEMENT_VIEWPORT_MARGIN;
117
+ const horizontal = overflowsRight && fitsRightAnchored ? 'right' : 'left';
118
+
119
+ const overflowsBottom =
120
+ containerRect.bottom + panelRect.height > viewportHeight - AUTO_PLACEMENT_VIEWPORT_MARGIN;
121
+ const fitsAbove = containerRect.top - panelRect.height >= AUTO_PLACEMENT_VIEWPORT_MARGIN;
122
+ const vertical = overflowsBottom && fitsAbove ? 'top' : 'bottom';
123
+
124
+ return `${vertical}-${horizontal}`;
125
+ }
126
+
65
127
  const instanceId = $props.id();
66
128
  const listboxId = `select-listbox-${instanceId}`;
67
129
  const errorMessageId = `${listboxId}-error`;
@@ -195,9 +257,9 @@
195
257
  return { destroy: () => node.remove() };
196
258
  };
197
259
 
198
- let portalStyle = $derived.by(() => {
260
+ let portalPlacement = $derived.by(() => {
199
261
  if (!usePortal || !open || triggerEl === null) {
200
- return '';
262
+ return null;
201
263
  }
202
264
  void portalTick;
203
265
  const rect = triggerEl.getBoundingClientRect();
@@ -215,13 +277,62 @@
215
277
  },
216
278
  dropdown: { width: dropdownWidth, height: dropdownHeight },
217
279
  viewport,
218
- align: dropdownAlign,
280
+ align: placementAlign,
281
+ /* Unset `placement` keeps the fit-based flip this path always had; a pinned
282
+ corner is honoured on both axes instead. */
283
+ vertical: placementPinned
284
+ ? resolvedPlacement === 'top-left' || resolvedPlacement === 'top-right'
285
+ ? 'top'
286
+ : 'bottom'
287
+ : 'auto',
219
288
  gap: PORTAL_DROPDOWN_GAP
220
289
  });
290
+ return placement;
291
+ });
292
+
293
+ let portalStyle: string = $derived.by(() => {
294
+ const placement = portalPlacement;
295
+ if (placement === null) {
296
+ return '';
297
+ }
221
298
  const widthRule = placement.width === null ? '' : `width:${placement.width}px;`;
222
299
  return `top:${placement.top}px;left:${placement.left}px;min-width:${placement.minWidth}px;${widthRule}`;
223
300
  });
224
301
 
302
+ /* A portaled panel's side comes from the geometry, which still flips on fit
303
+ when `placement` is unset. Reporting the requested corner there would make
304
+ `data-placement` disagree with where the panel actually is -- the exact
305
+ thing the attribute exists to tell a consumer. */
306
+ let effectivePlacement: Exclude<SelectPlacement, 'auto'> = $derived.by(() => {
307
+ const placement = portalPlacement;
308
+ if (placement === null) {
309
+ return resolvedPlacement;
310
+ }
311
+ if (placement.flippedUp) {
312
+ return placementAlign === 'right' ? 'top-right' : 'top-left';
313
+ }
314
+ return placementAlign === 'right' ? 'bottom-right' : 'bottom-left';
315
+ });
316
+
317
+ /**
318
+ * Svelte action on the panel itself: `openDropdown` is not the only way the
319
+ * panel appears, so the `'auto'` measuring pass is driven by the panel's own
320
+ * lifecycle rather than by the open handler. Resetting on destroy is what
321
+ * makes a reopen re-measure against the trigger's current position.
322
+ */
323
+ const resolveAutoPlacementOnMount = (node: HTMLElement) => {
324
+ if (placementRequest === 'auto') {
325
+ void tick().then(() => {
326
+ autoResolved = resolveAutoPlacement(node);
327
+ });
328
+ }
329
+ return {
330
+ destroy: () => {
331
+ autoResolved = null;
332
+ }
333
+ };
334
+ };
335
+
225
336
  async function openDropdown(): Promise<void> {
226
337
  if (disabled || open) {
227
338
  return;
@@ -792,8 +903,13 @@
792
903
  the inner element that actually holds the options. -->
793
904
  <div
794
905
  class="select-dropdown"
795
- class:select-dropdown-right={dropdownAlign === 'right'}
906
+ class:select-dropdown-right={placementAlign === 'right'}
907
+ class:select-dropdown-up={!usePortal &&
908
+ (effectivePlacement === 'top-left' || effectivePlacement === 'top-right')}
909
+ class:select-dropdown-measuring={measuringPlacement}
796
910
  class:select-dropdown-portal={usePortal}
911
+ data-placement={effectivePlacement}
912
+ use:resolveAutoPlacementOnMount
797
913
  bind:this={dropdownEl}
798
914
  bind:clientWidth={dropdownWidth}
799
915
  bind:clientHeight={dropdownHeight}
@@ -841,8 +957,13 @@
841
957
  {:else}
842
958
  <div
843
959
  class="select-dropdown"
844
- class:select-dropdown-right={dropdownAlign === 'right'}
960
+ class:select-dropdown-right={placementAlign === 'right'}
961
+ class:select-dropdown-up={!usePortal &&
962
+ (effectivePlacement === 'top-left' || effectivePlacement === 'top-right')}
963
+ class:select-dropdown-measuring={measuringPlacement}
845
964
  class:select-dropdown-portal={usePortal}
965
+ data-placement={effectivePlacement}
966
+ use:resolveAutoPlacementOnMount
846
967
  bind:this={dropdownEl}
847
968
  bind:clientWidth={dropdownWidth}
848
969
  bind:clientHeight={dropdownHeight}
@@ -1045,6 +1166,23 @@
1045
1166
  height: 100%;
1046
1167
  }
1047
1168
 
1169
+ /* Anchors the in-flow panel above the trigger. `margin-top` is what the
1170
+ downward panel uses for the gap, so it has to be unset here or the panel
1171
+ sits a gap's width too high. */
1172
+ .select-dropdown.select-dropdown-up {
1173
+ top: auto;
1174
+ bottom: 100%;
1175
+ margin-top: 0;
1176
+ margin-bottom: var(--select-dropdown-gap, 4px);
1177
+ }
1178
+
1179
+ /* One-tick measuring pass for placement="auto": the panel needs rendered
1180
+ dimensions before the corner is chosen, without a visible flash at the
1181
+ wrong corner. */
1182
+ .select-dropdown.select-dropdown-measuring {
1183
+ visibility: hidden;
1184
+ }
1185
+
1048
1186
  .select-dropdown {
1049
1187
  position: absolute;
1050
1188
  top: 100%;
@@ -9,6 +9,12 @@ type Size = {
9
9
  width: number;
10
10
  height: number;
11
11
  };
12
+ /**
13
+ * Which side of the trigger the panel opens on. `'auto'` picks the side that
14
+ * fits, which is what a portaled Select did before `placement` existed and so
15
+ * stays the default when the option is omitted.
16
+ */
17
+ export type SelectVerticalPlacement = 'bottom' | 'top' | 'auto';
12
18
  export type SelectDropdownPlacement = {
13
19
  left: number;
14
20
  top: number;
@@ -28,14 +34,16 @@ export type SelectDropdownPlacement = {
28
34
  * coordinates for a `position: fixed` panel anchored to `trigger`. Left-aligned
29
35
  * panels match the trigger width; right-aligned panels hang leftward from the
30
36
  * trigger's right edge using their measured content width. The panel flips above
31
- * the trigger only when it cannot fit below and there is more room above, and is
32
- * clamped horizontally to a viewport margin.
37
+ * the trigger only when it cannot fit below and there is more room above — or
38
+ * unconditionally when `vertical` pins a side — and is clamped horizontally to a
39
+ * viewport margin.
33
40
  */
34
41
  export declare function computeSelectDropdownPosition(opts: {
35
42
  trigger: TriggerRect;
36
43
  dropdown: Size;
37
44
  viewport: Size;
38
45
  align: 'left' | 'right';
46
+ vertical?: SelectVerticalPlacement;
39
47
  gap: number;
40
48
  margin?: number;
41
49
  }): SelectDropdownPlacement;
@@ -3,11 +3,13 @@
3
3
  * coordinates for a `position: fixed` panel anchored to `trigger`. Left-aligned
4
4
  * panels match the trigger width; right-aligned panels hang leftward from the
5
5
  * trigger's right edge using their measured content width. The panel flips above
6
- * the trigger only when it cannot fit below and there is more room above, and is
7
- * clamped horizontally to a viewport margin.
6
+ * the trigger only when it cannot fit below and there is more room above — or
7
+ * unconditionally when `vertical` pins a side — and is clamped horizontally to a
8
+ * viewport margin.
8
9
  */
9
10
  export function computeSelectDropdownPosition(opts) {
10
11
  const margin = opts.margin ?? 8;
12
+ const vertical = opts.vertical ?? 'auto';
11
13
  const { trigger, dropdown, viewport, align, gap } = opts;
12
14
  const minWidth = trigger.width;
13
15
  const width = align === 'left' ? trigger.width : null;
@@ -19,7 +21,30 @@ export function computeSelectDropdownPosition(opts) {
19
21
  }
20
22
  const spaceBelow = viewport.height - trigger.bottom;
21
23
  const spaceAbove = trigger.top;
22
- const flippedUp = dropdown.height > 0 && spaceBelow < dropdown.height + gap && spaceAbove > spaceBelow;
23
- const top = flippedUp ? trigger.top - gap - dropdown.height : trigger.bottom + gap;
24
+ /* A pinned side is honoured even where the panel will not fit: the caller
25
+ asked for that side, and silently overriding it is the behaviour
26
+ `placement` exists to escape. Only `'auto'` consults the geometry. */
27
+ const fitsBelow = !(dropdown.height > 0 && spaceBelow < dropdown.height + gap);
28
+ const flippedUp = vertical === 'auto' ? !fitsBelow && spaceAbove > spaceBelow : vertical === 'top';
29
+ const unclamped = flippedUp ? trigger.top - gap - dropdown.height : trigger.bottom + gap;
30
+ /* The panel is `position: fixed` when portaled, so whatever a viewport edge
31
+ cuts off cannot be scrolled back into view -- hence clamping at all. The two
32
+ edges are not symmetric, though:
33
+
34
+ The top edge is always held. A negative top is unreachable however the side
35
+ was chosen.
36
+
37
+ The bottom edge is held only for an auto-resolved side. `'auto'` picks the
38
+ side with more room and can still overflow in a short viewport, where
39
+ pulling the panel up is right. A *pinned* side is the caller overriding the
40
+ fit, and dragging it back would park the panel over the very trigger it was
41
+ pinned below -- the silent override `placement` exists to escape. */
42
+ const bottomLimit = viewport.height - dropdown.height - margin;
43
+ const withinViewport = vertical === 'auto' && Number.isFinite(viewport.height)
44
+ ? Math.min(unclamped, bottomLimit)
45
+ : unclamped;
46
+ const top = Number.isFinite(viewport.height) && dropdown.height > 0
47
+ ? Math.max(margin, withinViewport)
48
+ : unclamped;
24
49
  return { left, top, minWidth, width, flippedUp };
25
50
  }
@@ -1,4 +1,9 @@
1
1
  import type { Snippet } from 'svelte';
2
+ /**
3
+ * Corner the dropdown anchors to. Mirrors `MenuPlacement` so the two components
4
+ * that open a panel from a trigger describe placement the same way.
5
+ */
6
+ export type SelectPlacement = 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right' | 'auto';
2
7
  export type SelectProperties = MandatorySelectProperties & OptionalSelectProperties & SelectEventProperties;
3
8
  export type SelectItem = {
4
9
  id: string;
@@ -103,8 +108,23 @@ export type OptionalSelectProperties = {
103
108
  classes?: string;
104
109
  /** Bindable. Controls whether the dropdown is open; the component writes back on open/close so parents can `bind:open` to observe or drive it. Unbound, the component manages its own state. */
105
110
  open?: boolean;
106
- /** Horizontal anchor of the dropdown panel. `'left'` (default) anchors to the trigger's left edge; `'right'` anchors to the right edge so a content-wider panel hangs leftward instead of overflowing. */
111
+ /**
112
+ * @deprecated Use `placement`, which controls both axes. `dropdownAlign: 'left'`
113
+ * is `placement: 'bottom-left'` and `'right'` is `'bottom-right'`. Still honoured
114
+ * when `placement` is not set; scheduled for removal in 5.0.0.
115
+ */
107
116
  dropdownAlign?: 'left' | 'right';
117
+ /**
118
+ * Corner the dropdown panel anchors to, matching `Menu`'s prop of the same name.
119
+ * `'auto'` resolves the best-fitting corner against the viewport on open, so a
120
+ * Select sitting just above a sticky footer opens upward instead of into it.
121
+ *
122
+ * Unset is the pre-5.0 contract and is what `dropdownAlign` still drives: the
123
+ * in-flow panel always opens downward, and a portaled one flips up only when it
124
+ * cannot fit below. Setting `placement` opts both paths into the same resolved
125
+ * corner, so an in-flow Select can finally open upward.
126
+ */
127
+ placement?: SelectPlacement;
108
128
  /** Snippet for rendering a compact trigger summary in multiple mode instead of one Pill per selected value. Receives `{ value, items }` so the consumer can compute e.g. "All" / "3 selected". When not provided the default Pill-per-value behaviour is used. */
109
129
  triggerSummary?: import('svelte').Snippet<[{
110
130
  value: string[];
package/dist-wc/index.js CHANGED
@@ -17396,59 +17396,65 @@ customElements.define("sui-scroller", create_custom_element(Scroller_wc, {
17396
17396
  //#endregion
17397
17397
  //#region src/lib/Select/dropdownPosition.ts
17398
17398
  function computeSelectDropdownPosition(e) {
17399
- let t = e.margin ?? 8, { trigger: n, dropdown: i, viewport: a, align: o, gap: s } = e, c = n.width, l = o === "left" ? n.width : null, u = Math.max(o === "right" ? i.width : n.width, n.width), f = o === "right" ? n.right - u : n.left;
17400
- if (Number.isFinite(a.width)) {
17401
- let e = a.width - u - t;
17402
- f = Math.max(t, Math.min(f, e));
17399
+ let t = e.margin ?? 8, n = e.vertical ?? "auto", { trigger: i, dropdown: a, viewport: o, align: s, gap: c } = e, l = i.width, u = s === "left" ? i.width : null, f = Math.max(s === "right" ? a.width : i.width, i.width), p = s === "right" ? i.right - f : i.left;
17400
+ if (Number.isFinite(o.width)) {
17401
+ let e = o.width - f - t;
17402
+ p = Math.max(t, Math.min(p, e));
17403
17403
  }
17404
- let p = a.height - n.bottom, h = n.top, S = i.height > 0 && p < i.height + s && h > p, C = S ? n.top - s - i.height : n.bottom + s;
17404
+ let h = o.height - i.bottom, S = i.top, C = !(a.height > 0 && h < a.height + c), k = n === "auto" ? !C && S > h : n === "top", R = k ? i.top - c - a.height : i.bottom + c, te = o.height - a.height - t, ne = n === "auto" && Number.isFinite(o.height) ? Math.min(R, te) : R, re = Number.isFinite(o.height) && a.height > 0 ? Math.max(t, ne) : R;
17405
17405
  return {
17406
- left: f,
17407
- top: C,
17408
- minWidth: c,
17409
- width: l,
17410
- flippedUp: S
17406
+ left: p,
17407
+ top: re,
17408
+ minWidth: l,
17409
+ width: u,
17410
+ flippedUp: k
17411
17411
  };
17412
17412
  }
17413
17413
  //#endregion
17414
17414
  //#region src/lib/Select/Select.svelte
17415
17415
  var root$36 = /* @__PURE__ */ from_html("<div class=\"select-empty svelte-52lifo\">No results</div>"), root_1$33 = /* @__PURE__ */ from_html("<span class=\"select-option-check svelte-52lifo\"></span>"), root_2$26 = /* @__PURE__ */ from_html("<span class=\"select-option-dash svelte-52lifo\"></span>"), root_3$24 = /* @__PURE__ */ from_html("<span aria-hidden=\"true\"><!></span>"), root_4$19 = /* @__PURE__ */ from_html("<div><!> </div>"), root_5$17 = /* @__PURE__ */ from_html("<span class=\"select-option-tick svelte-52lifo\" aria-hidden=\"true\"></span>"), root_6$16 = /* @__PURE__ */ from_html("<div><!> <!> <span class=\"select-option-label svelte-52lifo\"> </span> <!></div>"), root_7$15 = /* @__PURE__ */ from_html("<div class=\"select-bottom-content svelte-52lifo\"><!></div>"), root_8$14 = /* @__PURE__ */ from_html("<!> <!>", 1), root_9$11 = /* @__PURE__ */ from_html("<input type=\"hidden\"/>"), root_10$10 = /* @__PURE__ */ from_html("<input class=\"select-search svelte-52lifo\" type=\"text\" autocomplete=\"off\"/>"), root_11$9 = /* @__PURE__ */ from_html("<span class=\"select-placeholder svelte-52lifo\"> </span>"), root_12$8 = /* @__PURE__ */ from_html("<span> </span>"), root_13$7 = /* @__PURE__ */ from_html("<button type=\"button\" class=\"select-clear svelte-52lifo\" aria-label=\"Clear selection\"><span aria-hidden=\"true\">×</span></button>"), root_14$7 = /* @__PURE__ */ from_html("<div role=\"alert\" class=\"select-error-message svelte-52lifo\"> </div>"), root_15$7 = /* @__PURE__ */ from_html("<div><input class=\"select-menu-search svelte-52lifo\" type=\"search\" aria-label=\"Search options\" autocomplete=\"off\"/> <div class=\"select-menu-list svelte-52lifo\" role=\"listbox\" tabindex=\"-1\"><!></div> <!></div>"), root_16$6 = /* @__PURE__ */ from_html("<div role=\"listbox\"><!></div>"), root_17$5 = /* @__PURE__ */ from_html("<div><!> <div><div><!> <!> <span class=\"select-arrow svelte-52lifo\"></span></div> <!></div> <!> <!></div>"), $$css$38 = {
17416
17416
  hash: "svelte-52lifo",
17417
- code: ".select.svelte-52lifo {position:relative;width:var(--select-width, 100%);font-family:var(--select-font-family, inherit);font-size:var(--select-font-size, 14px);color:var(--select-color, #333333);}.select.disabled.svelte-52lifo {opacity:var(--select-disabled-opacity, 0.5);cursor:var(--select-disabled-cursor, not-allowed);pointer-events:none;}.select-trigger.svelte-52lifo {display:flex;flex-wrap:wrap;align-items:center;gap:var(--select-trigger-gap, 4px);min-height:var(--select-trigger-min-height, 40px);padding:var(--select-trigger-padding, 8px 12px);background:var(--select-trigger-background, #ffffff);border:var(--select-trigger-border, 1px solid #cccccc);border-radius:var(--select-trigger-border-radius, var(--radius, 4px));cursor:pointer;outline:none;-webkit-tap-highlight-color:transparent;transition:var(--select-trigger-transition, border-color 0.15s, box-shadow 0.15s);}.select-trigger.svelte-52lifo .select-left-icon {--image-width: var(--select-left-icon-size, 16px);--image-height: var(--select-left-icon-size, 16px);--image-object-fit: contain;\n\n /* The icon inlines, so a currentColor asset resolves against this. Defaults to\n `inherit` — the trigger's text colour, which is what it already did — so this is\n a hook, not a change. Without it a consumer cannot tint the icon independently\n of the label, and an icon migrated to currentColor is forced to match its label\n exactly, flattening any deliberate muted-icon/strong-label hierarchy. */color:var(--select-left-icon-color, inherit);flex:none;}.select-trigger.svelte-52lifo:hover:not(.disabled:where(.svelte-52lifo) .select-trigger:where(.svelte-52lifo)) {border-color:var(--select-trigger-hover-border-color, #999999);}.select-trigger.svelte-52lifo:focus-within,\n .select.open.svelte-52lifo .select-trigger:where(.svelte-52lifo) {border-color:var(--select-trigger-focus-border-color, #2563eb);box-shadow:var(--select-trigger-focus-shadow, 0 0 0 2px rgba(37, 99, 235, 0.2));}\n\n /* Pressed feedback on the trigger. `:active` only, so it lasts exactly as\n long as the pointer is down and never lingers as a stuck state the way a\n class-driven one can. */.select.svelte-52lifo:not(.disabled) .select-trigger:where(.svelte-52lifo):active {background:var(--select-trigger-pressed-background, #ededed);}\n\n /* The error border has to outrank BOTH hover and focus/open, or the field\n stops reading as invalid the moment the user enters it -- which is the one\n moment they most need to see it. Listed after them, at equal or higher\n specificity, rather than reached for with !important. */.select.error.svelte-52lifo .select-trigger:where(.svelte-52lifo),\n .select.error.svelte-52lifo .select-trigger:where(.svelte-52lifo):hover,\n .select.error.svelte-52lifo .select-trigger:where(.svelte-52lifo):focus-within,\n .select.error.open.svelte-52lifo .select-trigger:where(.svelte-52lifo) {border-color:var(--select-trigger-error-border-color, #dc2626);}.select.error.svelte-52lifo .select-trigger:where(.svelte-52lifo):focus-within,\n .select.error.open.svelte-52lifo .select-trigger:where(.svelte-52lifo) {box-shadow:var(--select-trigger-error-shadow, 0 0 0 2px rgba(220, 38, 38, 0.2));}.select-error-message.svelte-52lifo {margin-top:var(--select-error-message-margin-top, 4px);font-size:var(--select-error-message-font-size, 12px);color:var(--select-error-message-color, #dc2626);}.select-control.svelte-52lifo {position:relative;}.select-control.has-clear.svelte-52lifo .select-trigger:where(.svelte-52lifo) {padding-inline-end:calc(var(--select-clear-size, 18px) + 36px);}.select-control.has-clear.svelte-52lifo .select-arrow:where(.svelte-52lifo) {position:absolute;right:12px;}.select-clear.svelte-52lifo {position:absolute;right:32px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;flex:none;width:var(--select-clear-size, 18px);height:var(--select-clear-size, 18px);margin:0;padding:0;border:none;border-radius:var(--select-clear-border-radius, var(--radius, 4px));background:var(--select-clear-background, transparent);color:var(--select-clear-color, #666666);font-size:var(--select-clear-font-size, 16px);line-height:1;cursor:pointer;}.select-clear.svelte-52lifo:focus-visible {outline:var(--select-clear-focus-outline, 2px solid currentColor);outline-offset:2px;}.select-clear.svelte-52lifo:hover {background:var(--select-clear-hover-background, #ededed);color:var(--select-clear-hover-color, #111111);}.select-clear.svelte-52lifo:active {background:var(--select-clear-pressed-background, #e0e0e0);}.select-value.svelte-52lifo {flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:var(--select-value-align, left);}.select-placeholder.svelte-52lifo {flex:1;color:var(--select-placeholder-color, #999999);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:var(--select-value-align, left);}.select-search.svelte-52lifo {flex:1;min-width:60px;border:none;outline:none;background:transparent;font-family:inherit;font-size:inherit;color:inherit;padding:0;cursor:text;}.select-search.svelte-52lifo::placeholder {color:var(--select-placeholder-color, #999999);}.select-arrow.svelte-52lifo {display:inline-flex;align-items:center;justify-content:center;width:var(--select-arrow-size, 16px);height:var(--select-arrow-size, 16px);color:var(--select-arrow-color, #666666);flex-shrink:0;transition:transform 0.15s;}.select.open.svelte-52lifo .select-arrow:where(.svelte-52lifo) {transform:rotate(180deg);}.select-arrow.svelte-52lifo svg {width:100%;height:100%;}.select-dropdown.svelte-52lifo {position:absolute;top:100%;left:var(--select-dropdown-left, 0);right:var(--select-dropdown-right, 0);min-width:var(--select-dropdown-min-width, auto);max-width:var(--select-dropdown-max-width, none);width:var(--select-dropdown-width, auto);margin-top:var(--select-dropdown-gap, 4px);background:var(--select-dropdown-background, #ffffff);border:var(--select-dropdown-border, 1px solid #cccccc);border-radius:var(--select-dropdown-border-radius, var(--radius, 4px));box-shadow:var(--select-dropdown-shadow, 0 4px 12px rgba(0, 0, 0, 0.1));max-height:var(--select-dropdown-max-height, 200px);overflow-y:auto;z-index:var(--select-dropdown-z-index, 10);}\n\n /* With the search box inside the panel, the PANEL must stop scrolling and\n the list scroll instead -- otherwise the search box scrolls away as soon\n as the user moves down the results, which is the one control they still\n need. The max-height moves down with the scrolling, so the panel keeps\n growing to fit the search box plus a list of the same height as before. */.select-dropdown.svelte-52lifo:has(> .select-menu-list:where(.svelte-52lifo)) {max-height:none;overflow-y:visible;display:flex;flex-direction:column;}.select-menu-list.svelte-52lifo {max-height:var(--select-dropdown-max-height, 200px);overflow-y:auto;}.select-menu-search.svelte-52lifo {flex:none;margin:var(--select-menu-search-margin, 6px);padding:var(--select-menu-search-padding, 6px 8px);border:var(--select-menu-search-border, 1px solid #cccccc);border-radius:var(--select-menu-search-border-radius, var(--radius, 4px));background:var(--select-menu-search-background, #ffffff);color:var(--select-menu-search-color, inherit);font-family:inherit;font-size:var(--select-menu-search-font-size, inherit);outline:none;}.select-menu-search.svelte-52lifo:focus-visible {border-color:var(--select-menu-search-focus-border-color, #2563eb);box-shadow:var(--select-menu-search-focus-shadow, 0 0 0 2px rgba(37, 99, 235, 0.2));}.select-dropdown-right.svelte-52lifo {left:auto;right:var(--select-dropdown-right, 0);min-width:var(--select-dropdown-min-width, 100%);max-width:var(--select-dropdown-max-width, none);width:var(--select-dropdown-width, max-content);}.select-dropdown.select-dropdown-portal.svelte-52lifo {\n /* Portaled to <body>: fixed positioning escapes overflow/scroll ancestors\n (e.g. a table cell). Placement (top/left/width/min-width) is set inline\n from the trigger rect, so neutralise the in-flow anchoring here. */position:fixed;right:auto;margin-top:0;\n /* In the root stacking context the panel competes with modals/sheets rather\n than painting above same-container siblings, so default it into the\n top-layer band (consumers still override via --select-dropdown-z-index). */z-index:var(--select-dropdown-z-index, 1000);}.select-option.svelte-52lifo {padding:var(--select-option-padding, 8px 12px);color:var(--select-option-color, #333333);font-size:var(--select-option-font-size, inherit);cursor:pointer;transition:background 0.1s;}\n\n /* Per-option leading icon (SelectItem.icon). Kept inline + vertically centred so\n it needs no change to the option's display and can't regress icon-less lists. */.select-option.svelte-52lifo .select-option-icon {--image-width: var(--select-option-icon-size, 16px);--image-height: var(--select-option-icon-size, 16px);--image-object-fit: contain;color:var(--select-option-icon-color, inherit);vertical-align:middle;margin-right:var(--select-option-icon-gap, 8px);}.select-option.multi.svelte-52lifo {display:flex;align-items:center;gap:var(--select-option-gap, 0);}.select-option.svelte-52lifo:hover,\n .select-option.highlighted.svelte-52lifo {background:var(--select-option-hover-background, #f0f0f0);color:var(--select-option-hover-color, var(--select-option-color, #333333));}.select-option.selected.svelte-52lifo {background:var(--select-option-selected-background, #e8f0fe);color:var(--select-option-selected-color, var(--select-option-color, #333333));}.select-option.selected.highlighted.svelte-52lifo {background:var(\n --select-option-selected-hover-background,\n var(--select-option-selected-background, #e8f0fe)\n );}\n\n /* Pressed feedback comes last, and each selector carries enough specificity\n to outrank its non-active counterpart above. An option is always hovered\n when pressed and is often selected too, so a single low-specificity rule\n earlier in the sheet would be correct in isolation and invisible in\n practice -- which is how a pressed state ends up shipping as dead CSS.\n A press on an already-selected row still has to confirm the tap landed. */.select-option.svelte-52lifo:active,\n .select-option.selected.svelte-52lifo:active,\n .select-option.selected.highlighted.svelte-52lifo:active {background:var(--select-option-pressed-background, #ededed);}.select-option-indicator.svelte-52lifo {display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;box-sizing:border-box;width:var(--select-option-indicator-size, 18px);height:var(--select-option-indicator-size, 18px);border:var(--select-option-indicator-border, 2px solid #757575);border-radius:var(--select-option-indicator-border-radius, var(--radius, 4px));background-color:var(--select-option-indicator-background, transparent);color:var(--select-option-indicator-color, currentColor);transition:background-color 0.15s,\n border-color 0.15s;}.select-option-indicator.checked.svelte-52lifo {background-color:var(--select-option-indicator-checked-background, #2196f3);border-color:var(--select-option-indicator-checked-border-color, #2196f3);}.select-option-check.svelte-52lifo {display:inline-flex;align-items:center;justify-content:center;width:var(--select-option-indicator-check-size, 12px);height:var(--select-option-indicator-check-size, 12px);color:var(--select-option-indicator-check-color, #ffffff);}.select-option-check.svelte-52lifo svg {width:100%;height:100%;}.select-option-indicator.indeterminate.svelte-52lifo {background-color:var(--select-option-indicator-checked-background, #2196f3);border-color:var(--select-option-indicator-checked-border-color, #2196f3);}.select-option-dash.svelte-52lifo {width:var(--select-option-indicator-dash-size, 10px);height:var(--select-option-indicator-dash-thickness, 2px);border-radius:1px;background-color:var(--select-option-indicator-dash-color, #ffffff);}.select-option.select-all.svelte-52lifo {border-bottom:var(--select-all-border, none);font-weight:var(--select-all-font-weight, inherit);}.select-empty.svelte-52lifo {padding:var(--select-empty-padding, 8px 12px);color:var(--select-empty-color, #999999);font-style:var(--select-empty-font-style, italic);font-size:var(--select-empty-font-size, inherit);}.select-bottom-content.svelte-52lifo {border-top:var(--select-bottom-content-border, none);padding:var(--select-bottom-content-padding, 8px 12px);}.select-trigger.svelte-52lifo .pill {--pill-background: var(--select-pill-background, #e0e0e0);--pill-color: var(--select-pill-color, #333333);--pill-border-radius: var(--select-pill-border-radius, 999px);--pill-padding: var(--select-pill-padding, 2px 8px);--pill-font-size: var(--select-pill-font-size, 13px);}\n\n /* Ghost hierarchy: transparent, borderless trigger */.select.ghost.svelte-52lifo .select-trigger:where(.svelte-52lifo) {background:var(--select-ghost-trigger-background, transparent);border-color:var(--select-ghost-trigger-border-color, transparent);box-shadow:none;}.select.ghost.svelte-52lifo .select-trigger:where(.svelte-52lifo):hover:not(.disabled:where(.svelte-52lifo) .select-trigger:where(.svelte-52lifo)) {border-color:var(--select-ghost-trigger-hover-border-color, transparent);background:var(--select-ghost-trigger-hover-background, rgba(0, 0, 0, 0.04));}.select.ghost.open.svelte-52lifo .select-trigger:where(.svelte-52lifo) {border-color:var(--select-ghost-trigger-open-border-color, transparent);background:var(--select-ghost-trigger-open-background, rgba(0, 0, 0, 0.06));box-shadow:none;}\n\n /* Single-select right-edge tick (showSelectedTick) */.select-option.tickable.svelte-52lifo {display:flex;align-items:center;gap:8px;}.select-option.tickable.svelte-52lifo .select-option-label:where(.svelte-52lifo) {flex:1 1 auto;min-width:0;}.select-option-tick.svelte-52lifo {display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--select-option-tick-size, 16px);height:var(--select-option-tick-size, 16px);color:var(--select-option-tick-color, #2563eb);}.select-option-tick.svelte-52lifo svg {width:100%;height:100%;}"
17417
+ code: ".select.svelte-52lifo {position:relative;width:var(--select-width, 100%);font-family:var(--select-font-family, inherit);font-size:var(--select-font-size, 14px);color:var(--select-color, #333333);}.select.disabled.svelte-52lifo {opacity:var(--select-disabled-opacity, 0.5);cursor:var(--select-disabled-cursor, not-allowed);pointer-events:none;}.select-trigger.svelte-52lifo {display:flex;flex-wrap:wrap;align-items:center;gap:var(--select-trigger-gap, 4px);min-height:var(--select-trigger-min-height, 40px);padding:var(--select-trigger-padding, 8px 12px);background:var(--select-trigger-background, #ffffff);border:var(--select-trigger-border, 1px solid #cccccc);border-radius:var(--select-trigger-border-radius, var(--radius, 4px));cursor:pointer;outline:none;-webkit-tap-highlight-color:transparent;transition:var(--select-trigger-transition, border-color 0.15s, box-shadow 0.15s);}.select-trigger.svelte-52lifo .select-left-icon {--image-width: var(--select-left-icon-size, 16px);--image-height: var(--select-left-icon-size, 16px);--image-object-fit: contain;\n\n /* The icon inlines, so a currentColor asset resolves against this. Defaults to\n `inherit` — the trigger's text colour, which is what it already did — so this is\n a hook, not a change. Without it a consumer cannot tint the icon independently\n of the label, and an icon migrated to currentColor is forced to match its label\n exactly, flattening any deliberate muted-icon/strong-label hierarchy. */color:var(--select-left-icon-color, inherit);flex:none;}.select-trigger.svelte-52lifo:hover:not(.disabled:where(.svelte-52lifo) .select-trigger:where(.svelte-52lifo)) {border-color:var(--select-trigger-hover-border-color, #999999);}.select-trigger.svelte-52lifo:focus-within,\n .select.open.svelte-52lifo .select-trigger:where(.svelte-52lifo) {border-color:var(--select-trigger-focus-border-color, #2563eb);box-shadow:var(--select-trigger-focus-shadow, 0 0 0 2px rgba(37, 99, 235, 0.2));}\n\n /* Pressed feedback on the trigger. `:active` only, so it lasts exactly as\n long as the pointer is down and never lingers as a stuck state the way a\n class-driven one can. */.select.svelte-52lifo:not(.disabled) .select-trigger:where(.svelte-52lifo):active {background:var(--select-trigger-pressed-background, #ededed);}\n\n /* The error border has to outrank BOTH hover and focus/open, or the field\n stops reading as invalid the moment the user enters it -- which is the one\n moment they most need to see it. Listed after them, at equal or higher\n specificity, rather than reached for with !important. */.select.error.svelte-52lifo .select-trigger:where(.svelte-52lifo),\n .select.error.svelte-52lifo .select-trigger:where(.svelte-52lifo):hover,\n .select.error.svelte-52lifo .select-trigger:where(.svelte-52lifo):focus-within,\n .select.error.open.svelte-52lifo .select-trigger:where(.svelte-52lifo) {border-color:var(--select-trigger-error-border-color, #dc2626);}.select.error.svelte-52lifo .select-trigger:where(.svelte-52lifo):focus-within,\n .select.error.open.svelte-52lifo .select-trigger:where(.svelte-52lifo) {box-shadow:var(--select-trigger-error-shadow, 0 0 0 2px rgba(220, 38, 38, 0.2));}.select-error-message.svelte-52lifo {margin-top:var(--select-error-message-margin-top, 4px);font-size:var(--select-error-message-font-size, 12px);color:var(--select-error-message-color, #dc2626);}.select-control.svelte-52lifo {position:relative;}.select-control.has-clear.svelte-52lifo .select-trigger:where(.svelte-52lifo) {padding-inline-end:calc(var(--select-clear-size, 18px) + 36px);}.select-control.has-clear.svelte-52lifo .select-arrow:where(.svelte-52lifo) {position:absolute;right:12px;}.select-clear.svelte-52lifo {position:absolute;right:32px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;flex:none;width:var(--select-clear-size, 18px);height:var(--select-clear-size, 18px);margin:0;padding:0;border:none;border-radius:var(--select-clear-border-radius, var(--radius, 4px));background:var(--select-clear-background, transparent);color:var(--select-clear-color, #666666);font-size:var(--select-clear-font-size, 16px);line-height:1;cursor:pointer;}.select-clear.svelte-52lifo:focus-visible {outline:var(--select-clear-focus-outline, 2px solid currentColor);outline-offset:2px;}.select-clear.svelte-52lifo:hover {background:var(--select-clear-hover-background, #ededed);color:var(--select-clear-hover-color, #111111);}.select-clear.svelte-52lifo:active {background:var(--select-clear-pressed-background, #e0e0e0);}.select-value.svelte-52lifo {flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:var(--select-value-align, left);}.select-placeholder.svelte-52lifo {flex:1;color:var(--select-placeholder-color, #999999);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:var(--select-value-align, left);}.select-search.svelte-52lifo {flex:1;min-width:60px;border:none;outline:none;background:transparent;font-family:inherit;font-size:inherit;color:inherit;padding:0;cursor:text;}.select-search.svelte-52lifo::placeholder {color:var(--select-placeholder-color, #999999);}.select-arrow.svelte-52lifo {display:inline-flex;align-items:center;justify-content:center;width:var(--select-arrow-size, 16px);height:var(--select-arrow-size, 16px);color:var(--select-arrow-color, #666666);flex-shrink:0;transition:transform 0.15s;}.select.open.svelte-52lifo .select-arrow:where(.svelte-52lifo) {transform:rotate(180deg);}.select-arrow.svelte-52lifo svg {width:100%;height:100%;}\n\n /* Anchors the in-flow panel above the trigger. `margin-top` is what the\n downward panel uses for the gap, so it has to be unset here or the panel\n sits a gap's width too high. */.select-dropdown.select-dropdown-up.svelte-52lifo {top:auto;bottom:100%;margin-top:0;margin-bottom:var(--select-dropdown-gap, 4px);}\n\n /* One-tick measuring pass for placement=\"auto\": the panel needs rendered\n dimensions before the corner is chosen, without a visible flash at the\n wrong corner. */.select-dropdown.select-dropdown-measuring.svelte-52lifo {visibility:hidden;}.select-dropdown.svelte-52lifo {position:absolute;top:100%;left:var(--select-dropdown-left, 0);right:var(--select-dropdown-right, 0);min-width:var(--select-dropdown-min-width, auto);max-width:var(--select-dropdown-max-width, none);width:var(--select-dropdown-width, auto);margin-top:var(--select-dropdown-gap, 4px);background:var(--select-dropdown-background, #ffffff);border:var(--select-dropdown-border, 1px solid #cccccc);border-radius:var(--select-dropdown-border-radius, var(--radius, 4px));box-shadow:var(--select-dropdown-shadow, 0 4px 12px rgba(0, 0, 0, 0.1));max-height:var(--select-dropdown-max-height, 200px);overflow-y:auto;z-index:var(--select-dropdown-z-index, 10);}\n\n /* With the search box inside the panel, the PANEL must stop scrolling and\n the list scroll instead -- otherwise the search box scrolls away as soon\n as the user moves down the results, which is the one control they still\n need. The max-height moves down with the scrolling, so the panel keeps\n growing to fit the search box plus a list of the same height as before. */.select-dropdown.svelte-52lifo:has(> .select-menu-list:where(.svelte-52lifo)) {max-height:none;overflow-y:visible;display:flex;flex-direction:column;}.select-menu-list.svelte-52lifo {max-height:var(--select-dropdown-max-height, 200px);overflow-y:auto;}.select-menu-search.svelte-52lifo {flex:none;margin:var(--select-menu-search-margin, 6px);padding:var(--select-menu-search-padding, 6px 8px);border:var(--select-menu-search-border, 1px solid #cccccc);border-radius:var(--select-menu-search-border-radius, var(--radius, 4px));background:var(--select-menu-search-background, #ffffff);color:var(--select-menu-search-color, inherit);font-family:inherit;font-size:var(--select-menu-search-font-size, inherit);outline:none;}.select-menu-search.svelte-52lifo:focus-visible {border-color:var(--select-menu-search-focus-border-color, #2563eb);box-shadow:var(--select-menu-search-focus-shadow, 0 0 0 2px rgba(37, 99, 235, 0.2));}.select-dropdown-right.svelte-52lifo {left:auto;right:var(--select-dropdown-right, 0);min-width:var(--select-dropdown-min-width, 100%);max-width:var(--select-dropdown-max-width, none);width:var(--select-dropdown-width, max-content);}.select-dropdown.select-dropdown-portal.svelte-52lifo {\n /* Portaled to <body>: fixed positioning escapes overflow/scroll ancestors\n (e.g. a table cell). Placement (top/left/width/min-width) is set inline\n from the trigger rect, so neutralise the in-flow anchoring here. */position:fixed;right:auto;margin-top:0;\n /* In the root stacking context the panel competes with modals/sheets rather\n than painting above same-container siblings, so default it into the\n top-layer band (consumers still override via --select-dropdown-z-index). */z-index:var(--select-dropdown-z-index, 1000);}.select-option.svelte-52lifo {padding:var(--select-option-padding, 8px 12px);color:var(--select-option-color, #333333);font-size:var(--select-option-font-size, inherit);cursor:pointer;transition:background 0.1s;}\n\n /* Per-option leading icon (SelectItem.icon). Kept inline + vertically centred so\n it needs no change to the option's display and can't regress icon-less lists. */.select-option.svelte-52lifo .select-option-icon {--image-width: var(--select-option-icon-size, 16px);--image-height: var(--select-option-icon-size, 16px);--image-object-fit: contain;color:var(--select-option-icon-color, inherit);vertical-align:middle;margin-right:var(--select-option-icon-gap, 8px);}.select-option.multi.svelte-52lifo {display:flex;align-items:center;gap:var(--select-option-gap, 0);}.select-option.svelte-52lifo:hover,\n .select-option.highlighted.svelte-52lifo {background:var(--select-option-hover-background, #f0f0f0);color:var(--select-option-hover-color, var(--select-option-color, #333333));}.select-option.selected.svelte-52lifo {background:var(--select-option-selected-background, #e8f0fe);color:var(--select-option-selected-color, var(--select-option-color, #333333));}.select-option.selected.highlighted.svelte-52lifo {background:var(\n --select-option-selected-hover-background,\n var(--select-option-selected-background, #e8f0fe)\n );}\n\n /* Pressed feedback comes last, and each selector carries enough specificity\n to outrank its non-active counterpart above. An option is always hovered\n when pressed and is often selected too, so a single low-specificity rule\n earlier in the sheet would be correct in isolation and invisible in\n practice -- which is how a pressed state ends up shipping as dead CSS.\n A press on an already-selected row still has to confirm the tap landed. */.select-option.svelte-52lifo:active,\n .select-option.selected.svelte-52lifo:active,\n .select-option.selected.highlighted.svelte-52lifo:active {background:var(--select-option-pressed-background, #ededed);}.select-option-indicator.svelte-52lifo {display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;box-sizing:border-box;width:var(--select-option-indicator-size, 18px);height:var(--select-option-indicator-size, 18px);border:var(--select-option-indicator-border, 2px solid #757575);border-radius:var(--select-option-indicator-border-radius, var(--radius, 4px));background-color:var(--select-option-indicator-background, transparent);color:var(--select-option-indicator-color, currentColor);transition:background-color 0.15s,\n border-color 0.15s;}.select-option-indicator.checked.svelte-52lifo {background-color:var(--select-option-indicator-checked-background, #2196f3);border-color:var(--select-option-indicator-checked-border-color, #2196f3);}.select-option-check.svelte-52lifo {display:inline-flex;align-items:center;justify-content:center;width:var(--select-option-indicator-check-size, 12px);height:var(--select-option-indicator-check-size, 12px);color:var(--select-option-indicator-check-color, #ffffff);}.select-option-check.svelte-52lifo svg {width:100%;height:100%;}.select-option-indicator.indeterminate.svelte-52lifo {background-color:var(--select-option-indicator-checked-background, #2196f3);border-color:var(--select-option-indicator-checked-border-color, #2196f3);}.select-option-dash.svelte-52lifo {width:var(--select-option-indicator-dash-size, 10px);height:var(--select-option-indicator-dash-thickness, 2px);border-radius:1px;background-color:var(--select-option-indicator-dash-color, #ffffff);}.select-option.select-all.svelte-52lifo {border-bottom:var(--select-all-border, none);font-weight:var(--select-all-font-weight, inherit);}.select-empty.svelte-52lifo {padding:var(--select-empty-padding, 8px 12px);color:var(--select-empty-color, #999999);font-style:var(--select-empty-font-style, italic);font-size:var(--select-empty-font-size, inherit);}.select-bottom-content.svelte-52lifo {border-top:var(--select-bottom-content-border, none);padding:var(--select-bottom-content-padding, 8px 12px);}.select-trigger.svelte-52lifo .pill {--pill-background: var(--select-pill-background, #e0e0e0);--pill-color: var(--select-pill-color, #333333);--pill-border-radius: var(--select-pill-border-radius, 999px);--pill-padding: var(--select-pill-padding, 2px 8px);--pill-font-size: var(--select-pill-font-size, 13px);}\n\n /* Ghost hierarchy: transparent, borderless trigger */.select.ghost.svelte-52lifo .select-trigger:where(.svelte-52lifo) {background:var(--select-ghost-trigger-background, transparent);border-color:var(--select-ghost-trigger-border-color, transparent);box-shadow:none;}.select.ghost.svelte-52lifo .select-trigger:where(.svelte-52lifo):hover:not(.disabled:where(.svelte-52lifo) .select-trigger:where(.svelte-52lifo)) {border-color:var(--select-ghost-trigger-hover-border-color, transparent);background:var(--select-ghost-trigger-hover-background, rgba(0, 0, 0, 0.04));}.select.ghost.open.svelte-52lifo .select-trigger:where(.svelte-52lifo) {border-color:var(--select-ghost-trigger-open-border-color, transparent);background:var(--select-ghost-trigger-open-background, rgba(0, 0, 0, 0.06));box-shadow:none;}\n\n /* Single-select right-edge tick (showSelectedTick) */.select-option.tickable.svelte-52lifo {display:flex;align-items:center;gap:8px;}.select-option.tickable.svelte-52lifo .select-option-label:where(.svelte-52lifo) {flex:1 1 auto;min-width:0;}.select-option-tick.svelte-52lifo {display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--select-option-tick-size, 16px);height:var(--select-option-tick-size, 16px);color:var(--select-option-tick-color, #2563eb);}.select-option-tick.svelte-52lifo svg {width:100%;height:100%;}"
17418
17418
  };
17419
17419
  function Select(e, t) {
17420
17420
  let n = props_id();
17421
17421
  push(t, !0), append_styles$1(e, $$css$38);
17422
- let i = prop(t, "items", 7), a = prop(t, "value", 31, () => proxy([])), o = prop(t, "multiple", 7, !1), s = prop(t, "searchable", 7, !1), c = prop(t, "searchPosition", 7, "trigger"), l = prop(t, "placeholder", 7, ""), u = prop(t, "disabled", 7, !1), f = prop(t, "error", 7, !1), p = prop(t, "errorMessage", 7), h = prop(t, "clearable", 7, !1), S = prop(t, "onclear", 7), C = prop(t, "bottomContent", 7), k = prop(t, "optionIndicator", 7), R = prop(t, "showSelectAll", 7, !1), te = prop(t, "selectAllLabel", 7, "Select all"), ne = prop(t, "showSelectedTick", 7, !1), re = prop(t, "triggerSummary", 7), G = prop(t, "testId", 7), be = prop(t, "itemTestId", 7), Me = prop(t, "onchange", 7), Re = prop(t, "onopen", 7), Ue = prop(t, "onclose", 7), it = prop(t, "classes", 7), at = prop(t, "open", 15, !1), ot = prop(t, "dropdownAlign", 7, "left"), ct = prop(t, "hierarchy", 7, "default"), lt = prop(t, "leftIcon", 7), ut = prop(t, "leftIconTestId", 7), dt = prop(t, "usePortal", 7, !1), ft = prop(t, "name", 7);
17423
- function pt(e) {
17422
+ let i = prop(t, "items", 7), a = prop(t, "value", 31, () => proxy([])), o = prop(t, "multiple", 7, !1), s = prop(t, "searchable", 7, !1), c = prop(t, "searchPosition", 7, "trigger"), l = prop(t, "placeholder", 7, ""), u = prop(t, "disabled", 7, !1), f = prop(t, "error", 7, !1), p = prop(t, "errorMessage", 7), h = prop(t, "clearable", 7, !1), S = prop(t, "onclear", 7), C = prop(t, "bottomContent", 7), k = prop(t, "optionIndicator", 7), R = prop(t, "showSelectAll", 7, !1), te = prop(t, "selectAllLabel", 7, "Select all"), ne = prop(t, "showSelectedTick", 7, !1), re = prop(t, "triggerSummary", 7), G = prop(t, "testId", 7), be = prop(t, "itemTestId", 7), Me = prop(t, "onchange", 7), Re = prop(t, "onopen", 7), Ue = prop(t, "onclose", 7), it = prop(t, "classes", 7), at = prop(t, "open", 15, !1), ot = prop(t, "dropdownAlign", 7, "left"), ct = prop(t, "placement", 7), lt = prop(t, "hierarchy", 7, "default"), ut = prop(t, "leftIcon", 7), dt = prop(t, "leftIconTestId", 7), ft = prop(t, "usePortal", 7, !1), pt = prop(t, "name", 7);
17423
+ function mt(e) {
17424
17424
  return e.map((e) => typeof e == "string" ? {
17425
17425
  id: e,
17426
17426
  label: e
17427
17427
  } : e);
17428
17428
  }
17429
- let mt = /* @__PURE__ */ user_derived(() => pt(i())), ht = /* @__PURE__ */ state(""), gt = !1, _t = /* @__PURE__ */ state(-1), vt = /* @__PURE__ */ state(null), yt = /* @__PURE__ */ state(null), bt = /* @__PURE__ */ state(null), xt = /* @__PURE__ */ state(null), St = /* @__PURE__ */ state(0), Ct = /* @__PURE__ */ state(0), wt = /* @__PURE__ */ state(0), Tt = 4, Et = `select-listbox-${n}`, Dt = `${Et}-error`, Ot = /* @__PURE__ */ user_derived(() => s() && c() !== "menu"), kt = /* @__PURE__ */ user_derived(() => s() && c() === "menu"), At = /* @__PURE__ */ user_derived(() => f() && typeof p() == "string" && p().trim().length > 0), jt = /* @__PURE__ */ user_derived(() => h() && !u() && a().length > 0);
17430
- function Mt(e) {
17431
- e.stopPropagation(), a().length !== 0 && (a([]), Me()?.(a()), S()?.(), s() && get(yt) !== null ? (gt = !0, get(yt).focus(), gt = !1) : get(bt)?.focus());
17429
+ let ht = /* @__PURE__ */ user_derived(() => mt(i())), gt = /* @__PURE__ */ state(""), _t = !1, vt = /* @__PURE__ */ state(-1), yt = /* @__PURE__ */ state(null), bt = /* @__PURE__ */ state(null), xt = /* @__PURE__ */ state(null), St = /* @__PURE__ */ state(null), Ct = /* @__PURE__ */ state(0), wt = /* @__PURE__ */ state(0), Tt = /* @__PURE__ */ state(0), Et = 4, Dt = 8, Ot = /* @__PURE__ */ user_derived(() => ct() ?? (ot() === "right" ? "bottom-right" : "bottom-left")), kt = /* @__PURE__ */ user_derived(() => ct() != null), At = /* @__PURE__ */ state(null), jt = /* @__PURE__ */ user_derived(() => get(Ot) === "auto" ? get(At) ?? "bottom-left" : get(Ot)), Mt = /* @__PURE__ */ user_derived(() => get(Ot) === "auto" && get(At) === null), Nt = /* @__PURE__ */ user_derived(() => get(jt) === "bottom-right" || get(jt) === "top-right" ? "right" : "left");
17430
+ function Pt(e) {
17431
+ if (get(yt) === null || typeof window > "u") return "bottom-left";
17432
+ let t = get(yt).getBoundingClientRect(), n = e.getBoundingClientRect(), i = window.innerWidth, a = window.innerHeight, o = t.left + n.width > i - 8, s = t.right - n.width >= 8, c = o && s ? "right" : "left", l = t.bottom + n.height > a - 8, u = t.top - n.height >= 8;
17433
+ return `${l && u ? "top" : "bottom"}-${c}`;
17432
17434
  }
17433
- function Nt(e) {
17434
- let t = get(mt).find((t) => t.id === e);
17435
+ let It = `select-listbox-${n}`, Lt = `${It}-error`, Rt = /* @__PURE__ */ user_derived(() => s() && c() !== "menu"), zt = /* @__PURE__ */ user_derived(() => s() && c() === "menu"), Bt = /* @__PURE__ */ user_derived(() => f() && typeof p() == "string" && p().trim().length > 0), Ht = /* @__PURE__ */ user_derived(() => h() && !u() && a().length > 0);
17436
+ function Gt(e) {
17437
+ e.stopPropagation(), a().length !== 0 && (a([]), Me()?.(a()), S()?.(), s() && get(bt) !== null ? (_t = !0, get(bt).focus(), _t = !1) : get(xt)?.focus());
17438
+ }
17439
+ function qt(e) {
17440
+ let t = get(ht).find((t) => t.id === e);
17435
17441
  return typeof t == "object" ? t.label : e;
17436
17442
  }
17437
- let Pt = /* @__PURE__ */ user_derived(() => s() && get(ht).length > 0 ? get(mt).filter((e) => e.label.toLowerCase().includes(get(ht).toLowerCase())) : get(mt)), It = /* @__PURE__ */ user_derived(() => o() && R() && get(Pt).length > 0), Lt = /* @__PURE__ */ user_derived(() => get(Pt).filter((e) => a().includes(e.id)).length), Rt = /* @__PURE__ */ user_derived(() => get(Pt).length > 0 && get(Lt) === get(Pt).length), zt = /* @__PURE__ */ user_derived(() => get(Lt) > 0 && get(Lt) < get(Pt).length), Bt = /* @__PURE__ */ user_derived(() => get(It) ? [{ kind: "select-all" }, ...get(Pt).map((e) => ({
17443
+ let Zt = /* @__PURE__ */ user_derived(() => s() && get(gt).length > 0 ? get(ht).filter((e) => e.label.toLowerCase().includes(get(gt).toLowerCase())) : get(ht)), Qt = /* @__PURE__ */ user_derived(() => o() && R() && get(Zt).length > 0), $t = /* @__PURE__ */ user_derived(() => get(Zt).filter((e) => a().includes(e.id)).length), en = /* @__PURE__ */ user_derived(() => get(Zt).length > 0 && get($t) === get(Zt).length), tn = /* @__PURE__ */ user_derived(() => get($t) > 0 && get($t) < get(Zt).length), nn = /* @__PURE__ */ user_derived(() => get(Qt) ? [{ kind: "select-all" }, ...get(Zt).map((e) => ({
17438
17444
  kind: "item",
17439
17445
  item: e
17440
- }))] : get(Pt).map((e) => ({
17446
+ }))] : get(Zt).map((e) => ({
17441
17447
  kind: "item",
17442
17448
  item: e
17443
- }))), Ht = /* @__PURE__ */ user_derived(() => {
17449
+ }))), rn = /* @__PURE__ */ user_derived(() => {
17444
17450
  let e = a().at(0);
17445
- return typeof e == "string" ? Nt(e) : "";
17446
- }), Gt = /* @__PURE__ */ user_derived(() => get(_t) >= 0 ? `${Et}-option-${get(_t)}` : null), qt = /* @__PURE__ */ user_derived(() => at() && get(Ht).length > 0 ? get(Ht) : l());
17451
+ return typeof e == "string" ? qt(e) : "";
17452
+ }), an = /* @__PURE__ */ user_derived(() => get(vt) >= 0 ? `${It}-option-${get(vt)}` : null), on = /* @__PURE__ */ user_derived(() => at() && get(rn).length > 0 ? get(rn) : l());
17447
17453
  user_effect(() => {
17448
- if (!dt() || !at() || typeof window > "u") return;
17454
+ if (!ft() || !at() || typeof window > "u") return;
17449
17455
  let e = null, t = () => {
17450
17456
  e === null && (e = requestAnimationFrame(() => {
17451
- e = null, set(wt, get(wt) + 1);
17457
+ e = null, set(Tt, get(Tt) + 1);
17452
17458
  }));
17453
17459
  };
17454
17460
  return window.addEventListener("scroll", t, {
@@ -17458,18 +17464,19 @@ function Select(e, t) {
17458
17464
  window.removeEventListener("scroll", t, { capture: !0 }), window.removeEventListener("resize", t), e !== null && cancelAnimationFrame(e);
17459
17465
  };
17460
17466
  });
17461
- let Zt = (e) => {
17462
- if (dt()) return document.body.appendChild(e), { destroy: () => e.remove() };
17463
- }, Qt = /* @__PURE__ */ user_derived(() => {
17464
- if (!dt() || !at() || get(bt) === null) return "";
17465
- get(wt);
17466
- let e = get(bt).getBoundingClientRect(), t = typeof window > "u" ? {
17467
+ let sn = (e) => {
17468
+ if (ft()) return document.body.appendChild(e), { destroy: () => e.remove() };
17469
+ }, cn = /* @__PURE__ */ user_derived(() => {
17470
+ if (!ft() || !at() || get(xt) === null) return null;
17471
+ get(Tt);
17472
+ let e = get(xt).getBoundingClientRect(), t = typeof window > "u" ? {
17467
17473
  width: Infinity,
17468
17474
  height: Infinity
17469
17475
  } : {
17470
17476
  width: window.innerWidth,
17471
17477
  height: window.innerHeight
17472
- }, n = computeSelectDropdownPosition({
17478
+ };
17479
+ return computeSelectDropdownPosition({
17473
17480
  trigger: {
17474
17481
  left: e.left,
17475
17482
  right: e.right,
@@ -17478,118 +17485,130 @@ function Select(e, t) {
17478
17485
  width: e.width
17479
17486
  },
17480
17487
  dropdown: {
17481
- width: get(St),
17482
- height: get(Ct)
17488
+ width: get(Ct),
17489
+ height: get(wt)
17483
17490
  },
17484
17491
  viewport: t,
17485
- align: ot(),
17492
+ align: get(Nt),
17493
+ vertical: get(kt) ? get(jt) === "top-left" || get(jt) === "top-right" ? "top" : "bottom" : "auto",
17486
17494
  gap: 4
17487
- }), i = n.width === null ? "" : `width:${n.width}px;`;
17488
- return `top:${n.top}px;left:${n.left}px;min-width:${n.minWidth}px;${i}`;
17489
- });
17490
- async function $t() {
17491
- u() || at() || (at(!0), Re()?.(), set(_t, -1), set(ht, ""), get(Ot) && (await tick(), get(yt) !== null && get(yt).focus()));
17495
+ });
17496
+ }), ln = /* @__PURE__ */ user_derived(() => {
17497
+ let e = get(cn);
17498
+ if (e === null) return "";
17499
+ let t = e.width === null ? "" : `width:${e.width}px;`;
17500
+ return `top:${e.top}px;left:${e.left}px;min-width:${e.minWidth}px;${t}`;
17501
+ }), un = /* @__PURE__ */ user_derived(() => {
17502
+ let e = get(cn);
17503
+ return e === null ? get(jt) : e.flippedUp ? get(Nt) === "right" ? "top-right" : "top-left" : get(Nt) === "right" ? "bottom-right" : "bottom-left";
17504
+ }), dn = (e) => (get(Ot) === "auto" && tick().then(() => {
17505
+ set(At, Pt(e), !0);
17506
+ }), { destroy: () => {
17507
+ set(At, null);
17508
+ } });
17509
+ async function fn() {
17510
+ u() || at() || (at(!0), Re()?.(), set(vt, -1), set(gt, ""), get(Rt) && (await tick(), get(bt) !== null && get(bt).focus()));
17492
17511
  }
17493
- function en() {
17494
- at(!1), Ue()?.(), set(ht, ""), set(_t, -1);
17512
+ function pn() {
17513
+ at(!1), Ue()?.(), set(gt, ""), set(vt, -1);
17495
17514
  }
17496
- function tn(e) {
17497
- u() || (o() ? a(a().includes(e) ? a().filter((t) => t !== e) : [...a(), e]) : (a([e]), en(), get(kt) && get(bt)?.focus()), Me()?.(a()));
17515
+ function mn(e) {
17516
+ u() || (o() ? a(a().includes(e) ? a().filter((t) => t !== e) : [...a(), e]) : (a([e]), pn(), get(zt) && get(xt)?.focus()), Me()?.(a()));
17498
17517
  }
17499
- function nn(e) {
17518
+ function hn(e) {
17500
17519
  u() || (a(a().filter((t) => t !== e)), Me()?.(a()));
17501
17520
  }
17502
- function rn() {
17503
- u() || (get(Rt) ? a(a().filter((e) => !get(Pt).some((t) => t.id === e))) : a([...new Set([...a(), ...get(Pt).map((e) => e.id)])]), Me()?.(a()));
17504
- }
17505
- function an() {
17506
- if (get(_t) < 0 || get(_t) >= get(Bt).length) return;
17507
- let e = get(Bt).at(get(_t));
17508
- typeof e != "object" || !e || (e.kind === "select-all" ? rn() : tn(e.item.id));
17521
+ function gn() {
17522
+ u() || (get(en) ? a(a().filter((e) => !get(Zt).some((t) => t.id === e))) : a([...new Set([...a(), ...get(Zt).map((e) => e.id)])]), Me()?.(a()));
17509
17523
  }
17510
- async function on(e) {
17511
- let t = get(_t) + e;
17512
- if (!(t < 0 || t >= get(Bt).length) && (set(_t, t), await tick(), get(xt) !== null)) {
17513
- let e = get(xt).querySelector(".select-option.highlighted");
17524
+ function _n() {
17525
+ if (get(vt) < 0 || get(vt) >= get(nn).length) return;
17526
+ let e = get(nn).at(get(vt));
17527
+ typeof e != "object" || !e || (e.kind === "select-all" ? gn() : mn(e.item.id));
17528
+ }
17529
+ async function vn(e) {
17530
+ let t = get(vt) + e;
17531
+ if (!(t < 0 || t >= get(nn).length) && (set(vt, t), await tick(), get(St) !== null)) {
17532
+ let e = get(St).querySelector(".select-option.highlighted");
17514
17533
  e instanceof HTMLElement && e.scrollIntoView({ block: "nearest" });
17515
17534
  }
17516
17535
  }
17517
- function sn(e) {
17536
+ function yn(e) {
17518
17537
  if (e.target instanceof HTMLInputElement) {
17519
- at() || $t();
17538
+ at() || fn();
17520
17539
  return;
17521
17540
  }
17522
- at() ? en() : $t();
17541
+ at() ? pn() : fn();
17523
17542
  }
17524
- let cn = "a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
17525
- function ln() {
17526
- return get(xt) === null ? [] : [...get(xt).querySelectorAll(cn)];
17543
+ let bn = "a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
17544
+ function xn() {
17545
+ return get(St) === null ? [] : [...get(St).querySelectorAll(bn)];
17527
17546
  }
17528
- function un() {
17529
- if (get(bt) === null || typeof document > "u") return;
17530
- let e = [...document.querySelectorAll(cn)].filter((e) => e.closest(".select-dropdown") === null);
17531
- e.at(e.indexOf(get(bt)) + 1)?.focus();
17547
+ function Sn() {
17548
+ if (get(xt) === null || typeof document > "u") return;
17549
+ let e = [...document.querySelectorAll(bn)].filter((e) => e.closest(".select-dropdown") === null);
17550
+ e.at(e.indexOf(get(xt)) + 1)?.focus();
17532
17551
  }
17533
- function dn(e) {
17552
+ function Cn(e) {
17534
17553
  if (!u()) switch (e.key) {
17535
17554
  case "Enter":
17536
- e.preventDefault(), at() ? an() : $t();
17555
+ e.preventDefault(), at() ? _n() : fn();
17537
17556
  break;
17538
17557
  case " ":
17539
- e.target instanceof HTMLInputElement || (e.preventDefault(), at() ? an() : $t());
17558
+ e.target instanceof HTMLInputElement || (e.preventDefault(), at() ? _n() : fn());
17540
17559
  break;
17541
17560
  case "ArrowDown":
17542
- e.preventDefault(), at() ? on(1) : $t();
17561
+ e.preventDefault(), at() ? vn(1) : fn();
17543
17562
  break;
17544
17563
  case "ArrowUp":
17545
- e.preventDefault(), on(-1);
17564
+ e.preventDefault(), vn(-1);
17546
17565
  break;
17547
17566
  case "Escape":
17548
- at() && (en(), !get(Ot) && get(bt) !== null && get(bt).focus());
17567
+ at() && (pn(), !get(Rt) && get(xt) !== null && get(xt).focus());
17549
17568
  break;
17550
17569
  case "Backspace":
17551
- if (o() && get(ht) === "" && a().length > 0) {
17570
+ if (o() && get(gt) === "" && a().length > 0) {
17552
17571
  let e = a().at(-1);
17553
- typeof e == "string" && nn(e);
17572
+ typeof e == "string" && hn(e);
17554
17573
  }
17555
17574
  break;
17556
17575
  case "Tab": {
17557
17576
  if (!at()) break;
17558
- if (!get(kt)) {
17559
- en();
17577
+ if (!get(zt)) {
17578
+ pn();
17560
17579
  break;
17561
17580
  }
17562
17581
  let t = document.activeElement;
17563
17582
  if (e.shiftKey) {
17564
- t === get(bt) ? en() : t === get(yt) && (e.preventDefault(), get(bt)?.focus());
17583
+ t === get(xt) ? pn() : t === get(bt) && (e.preventDefault(), get(xt)?.focus());
17565
17584
  break;
17566
17585
  }
17567
- if (t === get(bt)) {
17568
- e.preventDefault(), get(yt)?.focus();
17586
+ if (t === get(xt)) {
17587
+ e.preventDefault(), get(bt)?.focus();
17569
17588
  break;
17570
17589
  }
17571
- t === ln().at(-1) && (e.preventDefault(), en(), un());
17590
+ t === xn().at(-1) && (e.preventDefault(), pn(), Sn());
17572
17591
  break;
17573
17592
  }
17574
17593
  }
17575
17594
  }
17576
- function fn(e) {
17577
- e.target !== get(yt) && dn(e);
17595
+ function wn(e) {
17596
+ e.target !== get(bt) && Cn(e);
17578
17597
  }
17579
- let pn = (e) => (e.addEventListener("keydown", fn), { destroy: () => e.removeEventListener("keydown", fn) });
17580
- function mn(e) {
17581
- e.target instanceof HTMLInputElement && (set(ht, e.target.value, !0), at() || $t(), set(_t, -1));
17598
+ let Tn = (e) => (e.addEventListener("keydown", wn), { destroy: () => e.removeEventListener("keydown", wn) });
17599
+ function En(e) {
17600
+ e.target instanceof HTMLInputElement && (set(gt, e.target.value, !0), at() || fn(), set(vt, -1));
17582
17601
  }
17583
- function hn() {
17584
- !at() && !gt && $t();
17602
+ function Dn() {
17603
+ !at() && !_t && fn();
17585
17604
  }
17586
- function gn(e) {
17587
- e.target instanceof Node && get(vt) !== null && !get(vt).contains(e.target) && !(get(xt) !== null && get(xt).contains(e.target)) && en();
17605
+ function On(e) {
17606
+ e.target instanceof Node && get(yt) !== null && !get(yt).contains(e.target) && !(get(St) !== null && get(St).contains(e.target)) && pn();
17588
17607
  }
17589
- onMount(() => (document.addEventListener("click", gn), () => {
17590
- document.removeEventListener("click", gn), at() && Ue()?.();
17608
+ onMount(() => (document.addEventListener("click", On), () => {
17609
+ document.removeEventListener("click", On), at() && Ue()?.();
17591
17610
  }));
17592
- var _n = {
17611
+ var kn = {
17593
17612
  get items() {
17594
17613
  return i();
17595
17614
  },
@@ -17740,38 +17759,44 @@ function Select(e, t) {
17740
17759
  set dropdownAlign(e = "left") {
17741
17760
  ot(e), flushSync();
17742
17761
  },
17743
- get hierarchy() {
17762
+ get placement() {
17744
17763
  return ct();
17745
17764
  },
17746
- set hierarchy(e = "default") {
17765
+ set placement(e) {
17747
17766
  ct(e), flushSync();
17748
17767
  },
17749
- get leftIcon() {
17768
+ get hierarchy() {
17750
17769
  return lt();
17751
17770
  },
17752
- set leftIcon(e) {
17771
+ set hierarchy(e = "default") {
17753
17772
  lt(e), flushSync();
17754
17773
  },
17755
- get leftIconTestId() {
17774
+ get leftIcon() {
17756
17775
  return ut();
17757
17776
  },
17758
- set leftIconTestId(e) {
17777
+ set leftIcon(e) {
17759
17778
  ut(e), flushSync();
17760
17779
  },
17761
- get usePortal() {
17780
+ get leftIconTestId() {
17762
17781
  return dt();
17763
17782
  },
17764
- set usePortal(e = !1) {
17783
+ set leftIconTestId(e) {
17765
17784
  dt(e), flushSync();
17766
17785
  },
17767
- get name() {
17786
+ get usePortal() {
17768
17787
  return ft();
17769
17788
  },
17770
- set name(e) {
17789
+ set usePortal(e = !1) {
17771
17790
  ft(e), flushSync();
17791
+ },
17792
+ get name() {
17793
+ return pt();
17794
+ },
17795
+ set name(e) {
17796
+ pt(e), flushSync();
17772
17797
  }
17773
- }, vn = root_17$5();
17774
- attribute_effect(vn, () => ({
17798
+ }, An = root_17$5();
17799
+ attribute_effect(An, () => ({
17775
17800
  class: `select ${it() ?? "" ?? ""}`,
17776
17801
  ...typeof G() == "string" ? {
17777
17802
  "data-pw": G(),
@@ -17781,7 +17806,7 @@ function Select(e, t) {
17781
17806
  open: at(),
17782
17807
  disabled: u(),
17783
17808
  error: f(),
17784
- ghost: ct() === "ghost"
17809
+ ghost: lt() === "ghost"
17785
17810
  }
17786
17811
  }), void 0, void 0, void 0, "svelte-52lifo");
17787
17812
  {
@@ -17790,33 +17815,33 @@ function Select(e, t) {
17790
17815
  append(e, root$36());
17791
17816
  }, s = (e) => {
17792
17817
  var t = comment();
17793
- each(first_child(t), 19, () => get(Bt), (e) => e.kind === "select-all" ? "select-all" : e.item.id, (e, t, n) => {
17818
+ each(first_child(t), 19, () => get(nn), (e) => e.kind === "select-all" ? "select-all" : e.item.id, (e, t, n) => {
17794
17819
  var i = comment(), s = first_child(i), c = (e) => {
17795
- var t = root_4$19(), i = () => set(_t, get(n), !0);
17820
+ var t = root_4$19(), i = () => set(vt, get(n), !0);
17796
17821
  attribute_effect(t, () => ({
17797
17822
  class: "select-option select-all",
17798
17823
  role: "option",
17799
- id: `${Et}-option-${get(n)}`,
17800
- "aria-selected": get(Rt),
17801
- "aria-label": get(zt) ? `${te()}, ${get(Lt)} of ${get(Pt).length} selected` : te(),
17824
+ id: `${It}-option-${get(n)}`,
17825
+ "aria-selected": get(en),
17826
+ "aria-label": get(tn) ? `${te()}, ${get($t)} of ${get(Zt).length} selected` : te(),
17802
17827
  tabindex: "-1",
17803
17828
  ...typeof G() == "string" ? {
17804
17829
  "data-pw": `${G()}-select-all`,
17805
17830
  testID: `${G()}-select-all`
17806
17831
  } : {},
17807
- onclick: rn,
17832
+ onclick: gn,
17808
17833
  onmouseenter: i,
17809
17834
  [CLASS]: {
17810
17835
  multi: o(),
17811
- selected: get(Rt),
17812
- highlighted: get(n) === get(_t)
17836
+ selected: get(en),
17837
+ highlighted: get(n) === get(vt)
17813
17838
  }
17814
17839
  }), void 0, void 0, void 0, "svelte-52lifo");
17815
17840
  var a = child(t), s = (e) => {
17816
17841
  var t = comment();
17817
17842
  snippet(first_child(t), k, () => ({
17818
- checked: get(Rt),
17819
- indeterminate: get(zt)
17843
+ checked: get(en),
17844
+ indeterminate: get(tn)
17820
17845
  })), append(e, t);
17821
17846
  }, c = (e) => {
17822
17847
  var t = root_3$24();
@@ -17831,12 +17856,12 @@ function Select(e, t) {
17831
17856
  }), append(e, t);
17832
17857
  };
17833
17858
  if_block(i, (e) => {
17834
- get(Rt) ? e(a) : get(zt) && e(o, 1);
17859
+ get(en) ? e(a) : get(tn) && e(o, 1);
17835
17860
  }), reset(t), template_effect(() => {
17836
17861
  n = set_class(t, 1, "select-option-indicator svelte-52lifo", null, n, {
17837
- checked: get(Rt),
17838
- indeterminate: get(zt)
17839
- }), set_attribute(t, "data-checked", get(Rt) ? "true" : "false"), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-select-all-indicator` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-select-all-indicator` : null);
17862
+ checked: get(en),
17863
+ indeterminate: get(tn)
17864
+ }), set_attribute(t, "data-checked", get(en) ? "true" : "false"), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-select-all-indicator` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-select-all-indicator` : null);
17840
17865
  }), append(e, t);
17841
17866
  };
17842
17867
  if_block(a, (e) => {
@@ -17845,11 +17870,11 @@ function Select(e, t) {
17845
17870
  var l = sibling(a);
17846
17871
  reset(t), template_effect(() => set_text(l, ` ${te() ?? ""}`)), append(e, t);
17847
17872
  }, l = (e) => {
17848
- var i = root_6$16(), s = () => tn(get(t).item.id), c = () => set(_t, get(n), !0);
17873
+ var i = root_6$16(), s = () => mn(get(t).item.id), c = () => set(vt, get(n), !0);
17849
17874
  attribute_effect(i, (e, i) => ({
17850
17875
  class: "select-option",
17851
17876
  role: "option",
17852
- id: `${Et}-option-${get(n)}`,
17877
+ id: `${It}-option-${get(n)}`,
17853
17878
  "aria-selected": e,
17854
17879
  tabindex: "-1",
17855
17880
  ...typeof get(t).item.testId == "string" ? {
@@ -17869,7 +17894,7 @@ function Select(e, t) {
17869
17894
  multi: o(),
17870
17895
  tickable: ne() && !o(),
17871
17896
  selected: a().includes(get(t).item.id),
17872
- highlighted: get(n) === get(_t)
17897
+ highlighted: get(n) === get(vt)
17873
17898
  })], void 0, void 0, "svelte-52lifo");
17874
17899
  var l = child(i), u = (e) => {
17875
17900
  var n = comment(), i = first_child(n), o = (e) => {
@@ -17932,79 +17957,79 @@ function Select(e, t) {
17932
17957
  }), append(e, t);
17933
17958
  };
17934
17959
  if_block(n, (e) => {
17935
- get(Pt).length === 0 ? e(i) : e(s, -1);
17960
+ get(Zt).length === 0 ? e(i) : e(s, -1);
17936
17961
  });
17937
17962
  var c = sibling(n, 2), l = (e) => {
17938
17963
  var t = root_7$15();
17939
17964
  snippet(child(t), C), reset(t), append(e, t);
17940
17965
  };
17941
17966
  if_block(c, (e) => {
17942
- typeof C() == "function" && !get(kt) && e(l);
17967
+ typeof C() == "function" && !get(zt) && e(l);
17943
17968
  }), append(e, t);
17944
17969
  };
17945
- var yn = child(vn), bn = (e) => {
17970
+ var jn = child(An), Mn = (e) => {
17946
17971
  var t = comment();
17947
17972
  each(first_child(t), 16, a, (e) => e, (e, t) => {
17948
17973
  var n = root_9$11();
17949
17974
  remove_input_defaults(n), template_effect(() => {
17950
- set_attribute(n, "name", ft()), set_value(n, t), n.disabled = u();
17975
+ set_attribute(n, "name", pt()), set_value(n, t), n.disabled = u();
17951
17976
  }), append(e, n);
17952
17977
  }), append(e, t);
17953
17978
  };
17954
- if_block(yn, (e) => {
17955
- typeof ft() == "string" && ft().length > 0 && e(bn);
17979
+ if_block(jn, (e) => {
17980
+ typeof pt() == "string" && pt().length > 0 && e(Mn);
17956
17981
  });
17957
- var xn = sibling(yn, 2);
17982
+ var Nn = sibling(jn, 2);
17958
17983
  let t;
17959
- var Sn = child(xn);
17960
- attribute_effect(Sn, () => ({
17984
+ var Pn = child(Nn);
17985
+ attribute_effect(Pn, () => ({
17961
17986
  class: "select-trigger",
17962
- onclick: sn,
17963
- onkeydown: dn,
17987
+ onclick: yn,
17988
+ onkeydown: Cn,
17964
17989
  role: "combobox",
17965
17990
  "aria-expanded": at(),
17966
17991
  "aria-haspopup": "listbox",
17967
- "aria-controls": Et,
17992
+ "aria-controls": It,
17968
17993
  "aria-invalid": f() ? "true" : null,
17969
- "aria-describedby": get(At) ? Dt : null,
17970
- ...get(Gt) === null ? {} : { "aria-activedescendant": get(Gt) },
17971
- tabindex: u() || get(Ot) ? -1 : 0
17994
+ "aria-describedby": get(Bt) ? Lt : null,
17995
+ ...get(an) === null ? {} : { "aria-activedescendant": get(an) },
17996
+ tabindex: u() || get(Rt) ? -1 : 0
17972
17997
  }), void 0, void 0, void 0, "svelte-52lifo");
17973
- var Cn = child(Sn), wn = (e) => {
17998
+ var Fn = child(Pn), In = (e) => {
17974
17999
  Img(e, spread_props({
17975
18000
  inlineSvg: !0,
17976
18001
  get src() {
17977
- return lt();
18002
+ return ut();
17978
18003
  },
17979
18004
  alt: "",
17980
18005
  fallback: "",
17981
18006
  classes: "select-left-icon"
17982
- }, () => typeof ut() == "string" ? { testId: ut() } : {}));
18007
+ }, () => typeof dt() == "string" ? { testId: dt() } : {}));
17983
18008
  };
17984
- if_block(Cn, (e) => {
17985
- typeof lt() == "string" && lt().length > 0 && e(wn);
18009
+ if_block(Fn, (e) => {
18010
+ typeof ut() == "string" && ut().length > 0 && e(In);
17986
18011
  });
17987
- var Tn = sibling(Cn, 2), En = (e) => {
18012
+ var Ln = sibling(Fn, 2), Rn = (e) => {
17988
18013
  var t = comment(), n = first_child(t), i = (e) => {
17989
18014
  var t = root_8$14(), n = first_child(t);
17990
18015
  snippet(n, re, () => ({
17991
18016
  value: a(),
17992
- items: get(mt)
18017
+ items: get(ht)
17993
18018
  }));
17994
18019
  var i = sibling(n, 2), o = (e) => {
17995
18020
  var t = root_10$10();
17996
- remove_input_defaults(t), bind_this(t, (e) => set(yt, e), () => get(yt)), template_effect(() => {
17997
- set_value(t, get(ht)), set_attribute(t, "placeholder", a().length === 0 ? l() : ""), t.disabled = u(), set_attribute(t, "aria-invalid", f() ? "true" : null), set_attribute(t, "aria-describedby", get(At) ? Dt : null), set_attribute(t, "tabindex", u() ? -1 : 0), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-search` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-search` : null);
17998
- }), delegated("input", t, mn), event("focus", t, hn), append(e, t);
18021
+ remove_input_defaults(t), bind_this(t, (e) => set(bt, e), () => get(bt)), template_effect(() => {
18022
+ set_value(t, get(gt)), set_attribute(t, "placeholder", a().length === 0 ? l() : ""), t.disabled = u(), set_attribute(t, "aria-invalid", f() ? "true" : null), set_attribute(t, "aria-describedby", get(Bt) ? Lt : null), set_attribute(t, "tabindex", u() ? -1 : 0), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-search` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-search` : null);
18023
+ }), delegated("input", t, En), event("focus", t, Dn), append(e, t);
17999
18024
  };
18000
18025
  if_block(i, (e) => {
18001
- get(Ot) && e(o);
18026
+ get(Rt) && e(o);
18002
18027
  }), append(e, t);
18003
18028
  }, o = (e) => {
18004
18029
  var t = root_8$14(), n = first_child(t);
18005
18030
  each(n, 16, a, (e) => e, (e, t) => {
18006
18031
  {
18007
- let n = /* @__PURE__ */ user_derived(() => Nt(t));
18032
+ let n = /* @__PURE__ */ user_derived(() => qt(t));
18008
18033
  Pill(e, spread_props({
18009
18034
  get text() {
18010
18035
  return get(n);
@@ -18013,68 +18038,68 @@ function Select(e, t) {
18013
18038
  get disabled() {
18014
18039
  return u();
18015
18040
  },
18016
- ondismiss: () => nn(t)
18041
+ ondismiss: () => hn(t)
18017
18042
  }, () => typeof G() == "string" ? { testId: `${G()}-pill-${t}` } : {}));
18018
18043
  }
18019
18044
  });
18020
18045
  var i = sibling(n, 2), o = (e) => {
18021
18046
  var t = root_10$10();
18022
- remove_input_defaults(t), bind_this(t, (e) => set(yt, e), () => get(yt)), template_effect(() => {
18023
- set_value(t, get(ht)), set_attribute(t, "placeholder", a().length === 0 ? l() : ""), t.disabled = u(), set_attribute(t, "aria-invalid", f() ? "true" : null), set_attribute(t, "aria-describedby", get(At) ? Dt : null), set_attribute(t, "tabindex", u() ? -1 : 0), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-search` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-search` : null);
18024
- }), delegated("input", t, mn), event("focus", t, hn), append(e, t);
18047
+ remove_input_defaults(t), bind_this(t, (e) => set(bt, e), () => get(bt)), template_effect(() => {
18048
+ set_value(t, get(gt)), set_attribute(t, "placeholder", a().length === 0 ? l() : ""), t.disabled = u(), set_attribute(t, "aria-invalid", f() ? "true" : null), set_attribute(t, "aria-describedby", get(Bt) ? Lt : null), set_attribute(t, "tabindex", u() ? -1 : 0), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-search` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-search` : null);
18049
+ }), delegated("input", t, En), event("focus", t, Dn), append(e, t);
18025
18050
  }, s = (e) => {
18026
18051
  var t = root_11$9(), n = child(t, !0);
18027
18052
  reset(t), template_effect(() => set_text(n, l())), append(e, t);
18028
18053
  };
18029
18054
  if_block(i, (e) => {
18030
- get(Ot) ? e(o) : a().length === 0 && e(s, 1);
18055
+ get(Rt) ? e(o) : a().length === 0 && e(s, 1);
18031
18056
  }), append(e, t);
18032
18057
  };
18033
18058
  if_block(n, (e) => {
18034
18059
  typeof re() == "function" ? e(i) : e(o, -1);
18035
18060
  }), append(e, t);
18036
- }, Dn = (e) => {
18061
+ }, zn = (e) => {
18037
18062
  var t = root_10$10();
18038
- remove_input_defaults(t), bind_this(t, (e) => set(yt, e), () => get(yt)), template_effect(() => {
18039
- set_value(t, at() ? get(ht) : get(Ht)), set_attribute(t, "placeholder", get(qt)), t.disabled = u(), set_attribute(t, "aria-invalid", f() ? "true" : null), set_attribute(t, "aria-describedby", get(At) ? Dt : null), set_attribute(t, "tabindex", u() ? -1 : 0), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-search` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-search` : null);
18040
- }), delegated("input", t, mn), event("focus", t, hn), append(e, t);
18041
- }, On = (e) => {
18063
+ remove_input_defaults(t), bind_this(t, (e) => set(bt, e), () => get(bt)), template_effect(() => {
18064
+ set_value(t, at() ? get(gt) : get(rn)), set_attribute(t, "placeholder", get(on)), t.disabled = u(), set_attribute(t, "aria-invalid", f() ? "true" : null), set_attribute(t, "aria-describedby", get(Bt) ? Lt : null), set_attribute(t, "tabindex", u() ? -1 : 0), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-search` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-search` : null);
18065
+ }), delegated("input", t, En), event("focus", t, Dn), append(e, t);
18066
+ }, Bn = (e) => {
18042
18067
  var t = root_12$8(), n = child(t, !0);
18043
18068
  reset(t), template_effect(() => {
18044
- set_class(t, 1, clsx(get(Ht).length > 0 ? "select-value" : "select-placeholder"), "svelte-52lifo"), set_text(n, get(Ht).length > 0 ? get(Ht) : l());
18069
+ set_class(t, 1, clsx(get(rn).length > 0 ? "select-value" : "select-placeholder"), "svelte-52lifo"), set_text(n, get(rn).length > 0 ? get(rn) : l());
18045
18070
  }), append(e, t);
18046
18071
  };
18047
- if_block(Tn, (e) => {
18048
- o() ? e(En) : get(Ot) ? e(Dn, 1) : e(On, -1);
18072
+ if_block(Ln, (e) => {
18073
+ o() ? e(Rn) : get(Rt) ? e(zn, 1) : e(Bn, -1);
18049
18074
  });
18050
- var kn = sibling(Tn, 2);
18051
- html(kn, () => chevron_down_default, !0), reset(kn), reset(Sn), bind_this(Sn, (e) => set(bt, e), () => get(bt));
18052
- var An = sibling(Sn, 2), jn = (e) => {
18075
+ var Vn = sibling(Ln, 2);
18076
+ html(Vn, () => chevron_down_default, !0), reset(Vn), reset(Pn), bind_this(Pn, (e) => set(xt, e), () => get(xt));
18077
+ var Hn = sibling(Pn, 2), Un = (e) => {
18053
18078
  var t = root_13$7();
18054
18079
  template_effect(() => {
18055
18080
  set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-clear` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-clear` : null);
18056
18081
  }), delegated("keydown", t, (e) => {
18057
18082
  (e.key === "Enter" || e.key === " ") && e.stopPropagation();
18058
- }), delegated("click", t, Mt), append(e, t);
18083
+ }), delegated("click", t, Gt), append(e, t);
18059
18084
  };
18060
- if_block(An, (e) => {
18061
- get(jt) && e(jn);
18062
- }), reset(xn);
18063
- var Mn = sibling(xn, 2), Nn = (e) => {
18085
+ if_block(Hn, (e) => {
18086
+ get(Ht) && e(Un);
18087
+ }), reset(Nn);
18088
+ var Wn = sibling(Nn, 2), Gn = (e) => {
18064
18089
  var t = root_14$7(), n = child(t, !0);
18065
18090
  reset(t), template_effect(() => {
18066
- set_attribute(t, "id", Dt), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-error-message` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-error-message` : null), set_text(n, p());
18091
+ set_attribute(t, "id", Lt), set_attribute(t, "data-pw", typeof G() == "string" ? `${G()}-error-message` : null), set_attribute(t, "testid", typeof G() == "string" ? `${G()}-error-message` : null), set_text(n, p());
18067
18092
  }), append(e, t);
18068
18093
  };
18069
- if_block(Mn, (e) => {
18070
- get(At) && e(Nn);
18094
+ if_block(Wn, (e) => {
18095
+ get(Bt) && e(Gn);
18071
18096
  });
18072
- var Pn = sibling(Mn, 2), Fn = (t) => {
18097
+ var Kn = sibling(Wn, 2), qn = (t) => {
18073
18098
  var n = comment(), i = first_child(n), a = (t) => {
18074
18099
  var n = root_15$7();
18075
18100
  let i;
18076
18101
  var a = child(n);
18077
- remove_input_defaults(a), bind_this(a, (e) => set(yt, e), () => get(yt));
18102
+ remove_input_defaults(a), bind_this(a, (e) => set(bt, e), () => get(bt));
18078
18103
  var s = sibling(a, 2);
18079
18104
  e(child(s)), reset(s);
18080
18105
  var c = sibling(s, 2), u = (e) => {
@@ -18083,31 +18108,35 @@ function Select(e, t) {
18083
18108
  };
18084
18109
  if_block(c, (e) => {
18085
18110
  typeof C() == "function" && e(u);
18086
- }), reset(n), bind_this(n, (e) => set(xt, e), () => get(xt)), effect(() => bind_element_size(n, "clientWidth", (e) => set(St, e))), effect(() => bind_element_size(n, "clientHeight", (e) => set(Ct, e))), action(n, (e) => pn?.(e)), action(n, (e) => Zt?.(e)), template_effect(() => {
18111
+ }), reset(n), action(n, (e) => dn?.(e)), bind_this(n, (e) => set(St, e), () => get(St)), effect(() => bind_element_size(n, "clientWidth", (e) => set(Ct, e))), effect(() => bind_element_size(n, "clientHeight", (e) => set(wt, e))), action(n, (e) => Tn?.(e)), action(n, (e) => sn?.(e)), template_effect(() => {
18087
18112
  i = set_class(n, 1, "select-dropdown svelte-52lifo", null, i, {
18088
- "select-dropdown-right": ot() === "right",
18089
- "select-dropdown-portal": dt()
18090
- }), set_style(n, get(Qt)), set_value(a, get(ht)), set_attribute(a, "placeholder", l().length > 0 ? l() : "Search"), set_attribute(a, "aria-controls", Et), set_attribute(a, "data-pw", typeof G() == "string" ? `${G()}-menu-search` : null), set_attribute(a, "testid", typeof G() == "string" ? `${G()}-menu-search` : null), set_attribute(s, "id", Et), set_attribute(s, "aria-multiselectable", o());
18091
- }), delegated("input", a, mn), delegated("keydown", a, dn), append(t, n);
18113
+ "select-dropdown-right": get(Nt) === "right",
18114
+ "select-dropdown-up": !ft() && (get(un) === "top-left" || get(un) === "top-right"),
18115
+ "select-dropdown-measuring": get(Mt),
18116
+ "select-dropdown-portal": ft()
18117
+ }), set_attribute(n, "data-placement", get(un)), set_style(n, get(ln)), set_value(a, get(gt)), set_attribute(a, "placeholder", l().length > 0 ? l() : "Search"), set_attribute(a, "aria-controls", It), set_attribute(a, "data-pw", typeof G() == "string" ? `${G()}-menu-search` : null), set_attribute(a, "testid", typeof G() == "string" ? `${G()}-menu-search` : null), set_attribute(s, "id", It), set_attribute(s, "aria-multiselectable", o());
18118
+ }), delegated("input", a, En), delegated("keydown", a, Cn), append(t, n);
18092
18119
  }, s = (t) => {
18093
18120
  var n = root_16$6();
18094
18121
  let i;
18095
- e(child(n)), reset(n), bind_this(n, (e) => set(xt, e), () => get(xt)), effect(() => bind_element_size(n, "clientWidth", (e) => set(St, e))), effect(() => bind_element_size(n, "clientHeight", (e) => set(Ct, e))), action(n, (e) => Zt?.(e)), template_effect(() => {
18122
+ e(child(n)), reset(n), action(n, (e) => dn?.(e)), bind_this(n, (e) => set(St, e), () => get(St)), effect(() => bind_element_size(n, "clientWidth", (e) => set(Ct, e))), effect(() => bind_element_size(n, "clientHeight", (e) => set(wt, e))), action(n, (e) => sn?.(e)), template_effect(() => {
18096
18123
  i = set_class(n, 1, "select-dropdown svelte-52lifo", null, i, {
18097
- "select-dropdown-right": ot() === "right",
18098
- "select-dropdown-portal": dt()
18099
- }), set_attribute(n, "id", Et), set_attribute(n, "aria-multiselectable", o()), set_style(n, get(Qt));
18124
+ "select-dropdown-right": get(Nt) === "right",
18125
+ "select-dropdown-up": !ft() && (get(un) === "top-left" || get(un) === "top-right"),
18126
+ "select-dropdown-measuring": get(Mt),
18127
+ "select-dropdown-portal": ft()
18128
+ }), set_attribute(n, "data-placement", get(un)), set_attribute(n, "id", It), set_attribute(n, "aria-multiselectable", o()), set_style(n, get(ln));
18100
18129
  }), append(t, n);
18101
18130
  };
18102
18131
  if_block(i, (e) => {
18103
- get(kt) ? e(a) : e(s, -1);
18132
+ get(zt) ? e(a) : e(s, -1);
18104
18133
  }), append(t, n);
18105
18134
  };
18106
- if_block(Pn, (e) => {
18107
- at() && !u() && e(Fn);
18108
- }), reset(vn), bind_this(vn, (e) => set(vt, e), () => get(vt)), template_effect(() => t = set_class(xn, 1, "select-control svelte-52lifo", null, t, { "has-clear": get(jt) }));
18135
+ if_block(Kn, (e) => {
18136
+ at() && !u() && e(qn);
18137
+ }), reset(An), bind_this(An, (e) => set(yt, e), () => get(yt)), template_effect(() => t = set_class(Nn, 1, "select-control svelte-52lifo", null, t, { "has-clear": get(Ht) }));
18109
18138
  }
18110
- return append(e, vn), pop(_n);
18139
+ return append(e, An), pop(kn);
18111
18140
  }
18112
18141
  delegate([
18113
18142
  "input",
@@ -18139,6 +18168,7 @@ delegate([
18139
18168
  classes: {},
18140
18169
  open: {},
18141
18170
  dropdownAlign: {},
18171
+ placement: {},
18142
18172
  hierarchy: {},
18143
18173
  leftIcon: {},
18144
18174
  leftIconTestId: {},
@@ -18216,6 +18246,10 @@ customElements.define("sui-select", create_custom_element(Select_wc, {
18216
18246
  attribute: "dropdown-align",
18217
18247
  type: "String"
18218
18248
  },
18249
+ placement: {
18250
+ attribute: "placement",
18251
+ type: "String"
18252
+ },
18219
18253
  showSelectAll: {
18220
18254
  attribute: "show-select-all",
18221
18255
  reflect: !0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/svelte-ui-components",
3
- "version": "4.26.0",
3
+ "version": "4.27.1",
4
4
  "description": "A themeable Svelte 5 UI component library with CSS custom property driven styling",
5
5
  "keywords": [
6
6
  "svelte",