@ibobbyts/svelte-ui-utils 0.4.0 → 0.4.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.
package/README.md CHANGED
@@ -393,6 +393,18 @@ use `menuAlign="right"` to align their right edges instead. `fitContent` sizes
393
393
  the menu to its longest option while keeping the selected edge aligned.
394
394
  `DataTable` uses this same component for its page-size picker.
395
395
 
396
+ For keyboard typeahead, an option may provide `searchText` separately from its
397
+ display `label`. Typeahead matches the beginning of `searchText` or `label`,
398
+ while the label remains the only text shown in the trigger and menu:
399
+
400
+ ```svelte
401
+ <Dropdown
402
+ value="cn"
403
+ options={[{ label: '中国', searchText: 'China', value: 'cn' }]}
404
+ ariaLabel="Country"
405
+ />
406
+ ```
407
+
396
408
  Set `multiselect={true}` to control the component with a `DropdownValue[]`.
397
409
  Each option then shows a checkbox, selecting or deselecting an option keeps the
398
410
  menu open, and `onChange` receives the complete selected-value array in option
@@ -27,6 +27,8 @@
27
27
  export let fitViewport = true;
28
28
  export let fitContent = true;
29
29
  export let disabled = false;
30
+ export let name: string | undefined = undefined;
31
+ export let required = false;
30
32
  export let width: string | undefined = undefined;
31
33
  export let minWidth: string | undefined = undefined;
32
34
  export let maxWidth: string | undefined = undefined;
@@ -51,6 +53,12 @@
51
53
  let portalMenuWidth: string | undefined = undefined;
52
54
  let removeOpenViewportListeners: (() => void) | undefined = undefined;
53
55
  let removeOutsidePointerListener: (() => void) | undefined = undefined;
56
+ let typeaheadBuffer = '';
57
+ let typeaheadTimer: ReturnType<typeof setTimeout> | undefined;
58
+ let typeaheadGeneration = 0;
59
+ // Keep the buffer long enough for users to type multi-character aliases
60
+ // while the menu is rendering a large option list.
61
+ const typeaheadTimeoutMs = 1000;
54
62
 
55
63
  $: resolvedOptions = optionGroups === undefined ? options : optionGroups.flatMap((group) => group.options);
56
64
  $: selectedValues = normalizeSelectedValues(multiselect && Array.isArray(value) ? value : []);
@@ -131,6 +139,70 @@
131
139
  activeValue = enabledOptions[nextIndex]?.value ?? activeValue;
132
140
  }
133
141
 
142
+ function clearTypeaheadBuffer() {
143
+ typeaheadBuffer = '';
144
+ typeaheadGeneration += 1;
145
+ if (typeaheadTimer !== undefined) {
146
+ clearTimeout(typeaheadTimer);
147
+ typeaheadTimer = undefined;
148
+ }
149
+ }
150
+
151
+ function scheduleTypeaheadReset() {
152
+ const generation = ++typeaheadGeneration;
153
+ if (typeaheadTimer !== undefined) {
154
+ clearTimeout(typeaheadTimer);
155
+ }
156
+ typeaheadTimer = setTimeout(() => {
157
+ if (generation !== typeaheadGeneration) {
158
+ return;
159
+ }
160
+ typeaheadBuffer = '';
161
+ typeaheadTimer = undefined;
162
+ }, typeaheadTimeoutMs);
163
+ }
164
+
165
+ function scrollActiveOptionIntoView() {
166
+ void tick().then(() => {
167
+ if (!open || typeof document === 'undefined') {
168
+ return;
169
+ }
170
+ const activeElement = Array.from(
171
+ menuElement?.querySelectorAll<HTMLElement>('.suu-dropdown__option') ?? []
172
+ ).find((element) => element.dataset.value === String(activeValue));
173
+ activeElement?.scrollIntoView?.({ block: 'nearest' });
174
+ });
175
+ }
176
+
177
+ function handleTypeahead(key: string) {
178
+ const normalizedKey = key.startsWith('Key') && key.length === 4
179
+ ? key.slice(3).toLocaleLowerCase()
180
+ : key.toLocaleLowerCase();
181
+ const nextBuffer = `${typeaheadBuffer}${normalizedKey}`;
182
+ const findMatch = (prefix: string) =>
183
+ resolvedOptions.find(
184
+ (option) =>
185
+ !option.disabled &&
186
+ [option.searchText, option.label]
187
+ .filter((text): text is string => text !== undefined)
188
+ .some((text) => text.toLocaleLowerCase().startsWith(prefix))
189
+ );
190
+ const match = findMatch(nextBuffer) ?? findMatch(normalizedKey);
191
+
192
+ typeaheadBuffer = match ? (findMatch(nextBuffer) ? nextBuffer : normalizedKey) : nextBuffer;
193
+ scheduleTypeaheadReset();
194
+ if (!match) {
195
+ return;
196
+ }
197
+
198
+ if (!open) {
199
+ updateResolvedPlacement();
200
+ open = true;
201
+ }
202
+ activeValue = match.value;
203
+ scrollActiveOptionIntoView();
204
+ }
205
+
134
206
  function selectOption(option: DropdownOption) {
135
207
  if (option.disabled) {
136
208
  return;
@@ -144,11 +216,13 @@
144
216
  nextSelected.add(option.value);
145
217
  }
146
218
  const nextValues = normalizeSelectedValues([...nextSelected]);
219
+ clearTypeaheadBuffer();
147
220
  void (onChange as DropdownMultiChangeHandler | undefined)?.(nextValues);
148
221
  return;
149
222
  }
150
223
 
151
224
  open = false;
225
+ clearTypeaheadBuffer();
152
226
  void (onChange as DropdownChangeHandler | undefined)?.(option.value);
153
227
  buttonElement?.focus();
154
228
  }
@@ -160,6 +234,7 @@
160
234
  if (!open) {
161
235
  updateResolvedPlacement();
162
236
  }
237
+ clearTypeaheadBuffer();
163
238
  open = !open;
164
239
  activeValue = initialActiveValue();
165
240
  }
@@ -179,6 +254,7 @@
179
254
  event.preventDefault();
180
255
  open = false;
181
256
  }
257
+ clearTypeaheadBuffer();
182
258
  return;
183
259
  }
184
260
 
@@ -193,6 +269,18 @@
193
269
  return;
194
270
  }
195
271
 
272
+ if (
273
+ ((event.key.length === 1 && event.key !== ' ') ||
274
+ (event.key.startsWith('Key') && event.key.length === 4)) &&
275
+ !event.ctrlKey &&
276
+ !event.metaKey &&
277
+ !event.altKey
278
+ ) {
279
+ event.preventDefault();
280
+ handleTypeahead(event.key);
281
+ return;
282
+ }
283
+
196
284
  if ((event.key === 'Enter' || event.key === ' ') && open) {
197
285
  event.preventDefault();
198
286
  const index = activeOptionIndex(activeValue);
@@ -366,6 +454,7 @@
366
454
  onDestroy(() => {
367
455
  disableOpenViewportTracking();
368
456
  disableOutsidePointerDismissal();
457
+ clearTypeaheadBuffer();
369
458
  });
370
459
  </script>
371
460
 
@@ -402,6 +491,19 @@
402
491
  <span class="suu-dropdown__chevron" aria-hidden="true"></span>
403
492
  </button>
404
493
 
494
+ {#if name !== undefined && !multiselect}
495
+ <input
496
+ class="suu-visually-hidden"
497
+ type="text"
498
+ name={name}
499
+ value={String(value)}
500
+ required={required}
501
+ disabled={disabled}
502
+ tabindex="-1"
503
+ aria-label={ariaLabel}
504
+ />
505
+ {/if}
506
+
405
507
  {#if open}
406
508
  <div
407
509
  bind:this={menuElement}
@@ -24,6 +24,8 @@ declare const Dropdown: $$__sveltets_2_IsomorphicComponent<{
24
24
  fitViewport?: boolean;
25
25
  fitContent?: boolean;
26
26
  disabled?: boolean;
27
+ name?: string | undefined;
28
+ required?: boolean;
27
29
  width?: string | undefined;
28
30
  minWidth?: string | undefined;
29
31
  maxWidth?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/dropdown/Dropdown.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAER,iBAAiB,EAGjB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,8BAA8B,EAC9B,iBAAiB,EACjB,2BAA2B,EAE5B,MAAM,YAAY,CAAC;AAkatB,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,QAAQ;SAVmZ,MAAM,GAAG,SAAS;YAAU,iBAAiB;;cAA8C,cAAc,EAAE;mBAAiB,mBAAmB,EAAE,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;gBAAc,iBAAiB;gBAAc,iBAAiB;;;;YAAwG,MAAM,GAAG,SAAS;eAAa,MAAM,GAAG,SAAS;eAAa,MAAM,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;;eAAqC,8BAA8B,GAAG,SAAS;qBAAmB,2BAA2B,GAAG,SAAS;;;kBAUh6B,CAAC;AAC5E,KAAK,QAAQ,GAAG,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;AAChD,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Dropdown.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/dropdown/Dropdown.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAER,iBAAiB,EAGjB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,8BAA8B,EAC9B,iBAAiB,EACjB,2BAA2B,EAE5B,MAAM,YAAY,CAAC;AA+ftB,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,QAAQ;SAVqb,MAAM,GAAG,SAAS;YAAU,iBAAiB;;cAA8C,cAAc,EAAE;mBAAiB,mBAAmB,EAAE,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;gBAAc,iBAAiB;gBAAc,iBAAiB;;;;WAAuG,MAAM,GAAG,SAAS;;YAAsC,MAAM,GAAG,SAAS;eAAa,MAAM,GAAG,SAAS;eAAa,MAAM,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;;eAAqC,8BAA8B,GAAG,SAAS;qBAAmB,2BAA2B,GAAG,SAAS;;;kBAUz/B,CAAC;AAC5E,KAAK,QAAQ,GAAG,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC;AAChD,eAAe,QAAQ,CAAC"}
@@ -5,6 +5,8 @@ export type DropdownPlacement = 'auto' | 'up' | 'down';
5
5
  export type DropdownMenuAlign = 'left' | 'right';
6
6
  export interface DropdownOption {
7
7
  label: string;
8
+ /** Optional text used for keyboard typeahead matching instead of (or in addition to) the label. */
9
+ searchText?: string;
8
10
  value: DropdownValue;
9
11
  disabled?: boolean;
10
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/dropdown/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAAG,aAAa,EAAE,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,kBAAkB,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnF,MAAM,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F,MAAM,MAAM,8BAA8B,GAAG;IAC5C,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D,CAAC,gBAAgB,CAAC,CAAC;AAEpB,MAAM,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/dropdown/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAAG,aAAa,EAAE,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,kBAAkB,CAAC;AAEnE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnF,MAAM,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F,MAAM,MAAM,8BAA8B,GAAG;IAC5C,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D,CAAC,gBAAgB,CAAC,CAAC;AAEpB,MAAM,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC"}
@@ -561,7 +561,24 @@
561
561
  if (searchOnExternalValueChange && normalizeDropdownSearchValue(value)) {
562
562
  handleExternalValue(value);
563
563
  }
564
- return () => formElement?.removeEventListener('reset', handleFormReset);
564
+
565
+ const visibilityObserver =
566
+ typeof IntersectionObserver === 'undefined'
567
+ ? undefined
568
+ : new IntersectionObserver(([entry]) => {
569
+ if (!entry?.isIntersecting) {
570
+ focused = false;
571
+ showingFocusOptions = false;
572
+ }
573
+ });
574
+ if (inputElement && visibilityObserver) {
575
+ visibilityObserver.observe(inputElement);
576
+ }
577
+
578
+ return () => {
579
+ formElement?.removeEventListener('reset', handleFormReset);
580
+ visibilityObserver?.disconnect();
581
+ };
565
582
  });
566
583
  </script>
567
584
 
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownSearch.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/dropdown-search/DropdownSearch.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAM5D,OAAO,KAAK,EACR,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,yBAAyB,EACzB,qCAAqC,EACrC,wCAAwC,EACxC,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAynBtB,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,cAAc;;mBAdihC,kBAAkB,GAAG,IAAI;oBAAkB,kBAAkB,EAAE;aAAW,oBAAoB;;;;;;;;;mBAAyR,kBAAkB,EAAE;iBAAe,MAAM,GAAG,SAAS;iBAAe,yBAAyB;SAAO,MAAM,GAAG,SAAS;WAAS,MAAM,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;;eAAyC,UAAU;oBAAkB,MAAM,GAAG,SAAS;kBAAgB,MAAM,GAAG,SAAS;iBAAe,MAAM,GAAG,SAAS;;YAA4E,MAAM,GAAG,SAAS;eAAa,MAAM,GAAG,SAAS;eAAa,MAAM,GAAG,SAAS;;8BAA8E,qCAAqC,GAChhE,SAAS;mBAAiB,6BAA6B;eAAe,CAAC,CAAC,MAAM,EAAE,0BAA0B,KAAK,IAAI,CAAC,GACpH,SAAS;eAAa,CAAC,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAAG,SAAS;iBAAe,CAAC,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAAG,SAAS;4BAA4B,wCAAwC,GACzM,SAAS;qBAAqB,CAAC,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC,GACtE,SAAS;kBAAgB,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS;cAAY,CAAC,CAAC,MAAM,EAAE,yBAAyB,KAAK,IAAI,CAAC,GAAG,SAAS;;;;;kBAU1C,CAAC;AAClF,KAAK,cAAc,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"DropdownSearch.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/dropdown-search/DropdownSearch.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAM5D,OAAO,KAAK,EACR,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,yBAAyB,EACzB,qCAAqC,EACrC,wCAAwC,EACxC,oBAAoB,EACrB,MAAM,YAAY,CAAC;AA0oBtB,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,cAAc;;mBAdihC,kBAAkB,GAAG,IAAI;oBAAkB,kBAAkB,EAAE;aAAW,oBAAoB;;;;;;;;;mBAAyR,kBAAkB,EAAE;iBAAe,MAAM,GAAG,SAAS;iBAAe,yBAAyB;SAAO,MAAM,GAAG,SAAS;WAAS,MAAM,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;;eAAyC,UAAU;oBAAkB,MAAM,GAAG,SAAS;kBAAgB,MAAM,GAAG,SAAS;iBAAe,MAAM,GAAG,SAAS;;YAA4E,MAAM,GAAG,SAAS;eAAa,MAAM,GAAG,SAAS;eAAa,MAAM,GAAG,SAAS;;8BAA8E,qCAAqC,GAChhE,SAAS;mBAAiB,6BAA6B;eAAe,CAAC,CAAC,MAAM,EAAE,0BAA0B,KAAK,IAAI,CAAC,GACpH,SAAS;eAAa,CAAC,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAAG,SAAS;iBAAe,CAAC,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAAG,SAAS;4BAA4B,wCAAwC,GACzM,SAAS;qBAAqB,CAAC,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC,GACtE,SAAS;kBAAgB,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS;cAAY,CAAC,CAAC,MAAM,EAAE,yBAAyB,KAAK,IAAI,CAAC,GAAG,SAAS;;;;;kBAU1C,CAAC;AAClF,KAAK,cAAc,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,eAAe,cAAc,CAAC"}
package/dist/style.css CHANGED
@@ -41,6 +41,7 @@
41
41
 
42
42
  .suu-visually-hidden {
43
43
  position: absolute;
44
+ pointer-events: none;
44
45
  overflow: hidden;
45
46
  width: 1px;
46
47
  height: 1px;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibobbyts/svelte-ui-utils",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Reusable Svelte 5 UI utilities for dialogs, toast notifications, dropdown search, and data tables.",
5
5
  "type": "module",
6
6
  "license": "MIT",