@smilodon/svelte 1.4.5 → 1.4.10

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/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("svelte/internal"),t=require("svelte");function r(t){let r;return{c(){r=e.element("enhanced-select"),e.set_custom_element_data(r,"class",t[0]),e.set_custom_element_data(r,"style",t[1])},m(l,n){e.insert(l,r,n),t[33](r)},p(t,l){1&l[0]&&e.set_custom_element_data(r,"class",t[0]),2&l[0]&&e.set_custom_element_data(r,"style",t[1])},i:e.noop,o:e.noop,d(l){l&&e.detach(r),t[33](null)}}}function l(r,l,n){let i,a,{items:s=[]}=l,{groupedItems:c}=l,{value:o}=l,{defaultValue:d}=l,{multiple:u=!1}=l,{searchable:m=!1}=l,{placeholder:p=""}=l,{disabled:v=!1}=l,{required:b=!1}=l,{error:h=!1}=l,{infiniteScroll:f=!1}=l,{pageSize:S=50}=l,{virtualized:$=!0}=l,{maxSelections:g}=l,{placement:A="auto"}=l,{className:y=""}=l,{style:I=""}=l,{clearable:L=!1}=l,{clearSelectionOnClear:_=!0}=l,{clearSearchOnClear:E=!0}=l,{clearAriaLabel:x="Clear selection and search"}=l,{clearIcon:z="×"}=l,{optionRenderer:C}=l;const q=t.createEventDispatcher();let O,R=d;const V=(e,t,r)=>C?C(e,t,r):document.createElement("div");function w(e){const t=e,{item:r,index:l}=t.detail;q("select",{item:r,index:l})}function G(e){const t=e,{selectedItems:r,selectedValues:l}=t.detail,a=l;i||n(30,R=u?a:a[0]);const s=u?a:a[0];n(3,o=s),q("change",{value:s,selectedItems:r})}function M(){q("open")}function N(){q("close")}function D(e){q("search",{query:e.detail.query})}function j(e){q("loadMore",{page:e.detail.page})}function k(e){q("create",{value:e.detail.value})}function P(e){const t=e;q("clear",{clearedSelection:t.detail.clearedSelection,clearedSearch:t.detail.clearedSearch})}function T(){var e;O&&(null==(e=O.updateConfig)||e.call(O,{searchable:m,placeholder:p,enabled:!v,selection:{mode:u?"multi":"single",maxSelections:g},infiniteScroll:{enabled:f,pageSize:S},clearControl:{enabled:L,clearSelection:_,clearSearch:E,ariaLabel:x,icon:z}}))}return t.onMount(()=>{if(!O)return;const e=O;if(p&&e.setAttribute("placeholder",p),v&&e.setAttribute("disabled",""),b&&e.setAttribute("required",""),h&&e.setAttribute("error",""),m&&e.setAttribute("searchable",""),u&&e.setAttribute("multiple",""),$&&e.setAttribute("virtualized",""),f&&e.setAttribute("infinite-scroll",""),S&&e.setAttribute("page-size",String(S)),g&&e.setAttribute("max-selections",String(g)),A&&e.setAttribute("placement",A),C&&(e.optionRenderer=V),(null==s?void 0:s.length)&&e.setItems(s),(null==c?void 0:c.length)&&e.setGroupedItems(c),void 0!==a){const t=Array.isArray(a)?a:[a];e.setSelectedValues(t)}e.addEventListener("select",w),e.addEventListener("change",G),e.addEventListener("open",M),e.addEventListener("close",N),e.addEventListener("search",D),e.addEventListener("loadMore",j),e.addEventListener("create",k),e.addEventListener("clear",P),T()}),t.onDestroy(()=>{if(!O)return;const e=O;e.removeEventListener("select",w),e.removeEventListener("change",G),e.removeEventListener("open",M),e.removeEventListener("close",N),e.removeEventListener("search",D),e.removeEventListener("loadMore",j),e.removeEventListener("create",k),e.removeEventListener("clear",P)}),r.$$set=e=>{"items"in e&&n(4,s=e.items),"groupedItems"in e&&n(5,c=e.groupedItems),"value"in e&&n(3,o=e.value),"defaultValue"in e&&n(6,d=e.defaultValue),"multiple"in e&&n(7,u=e.multiple),"searchable"in e&&n(8,m=e.searchable),"placeholder"in e&&n(9,p=e.placeholder),"disabled"in e&&n(10,v=e.disabled),"required"in e&&n(11,b=e.required),"error"in e&&n(12,h=e.error),"infiniteScroll"in e&&n(13,f=e.infiniteScroll),"pageSize"in e&&n(14,S=e.pageSize),"virtualized"in e&&n(15,$=e.virtualized),"maxSelections"in e&&n(16,g=e.maxSelections),"placement"in e&&n(17,A=e.placement),"className"in e&&n(0,y=e.className),"style"in e&&n(1,I=e.style),"clearable"in e&&n(18,L=e.clearable),"clearSelectionOnClear"in e&&n(19,_=e.clearSelectionOnClear),"clearSearchOnClear"in e&&n(20,E=e.clearSearchOnClear),"clearAriaLabel"in e&&n(21,x=e.clearAriaLabel),"clearIcon"in e&&n(22,z=e.clearIcon),"optionRenderer"in e&&n(23,C=e.optionRenderer)},r.$$.update=()=>{if(8&r.$$.dirty[0]&&n(31,i=void 0!==o),1073741832&r.$$.dirty[0]|1&r.$$.dirty[1]&&n(32,a=i?o:R),8423300&r.$$.dirty[0]&&O&&(p&&O.setAttribute("placeholder",p),v?O.setAttribute("disabled",""):O.removeAttribute("disabled"),m?O.setAttribute("searchable",""):O.removeAttribute("searchable"),u?O.setAttribute("multiple",""):O.removeAttribute("multiple"),$?O.setAttribute("virtualized",""):O.removeAttribute("virtualized"),C?O.optionRenderer!==V&&n(2,O.optionRenderer=V,O):O.optionRenderer===V&&n(2,O.optionRenderer=void 0,O)),20&r.$$.dirty[0]&&O&&s&&O.setItems(s),36&r.$$.dirty[0]&&O&&c&&O.setGroupedItems(c),4&r.$$.dirty[0]|2&r.$$.dirty[1]&&O&&void 0!==a){const e=Array.isArray(a)?a:[a];O.setSelectedValues(e)}4&r.$$.dirty[0]&&O&&T()},[y,I,O,o,s,c,d,u,m,p,v,b,h,f,S,$,g,A,L,_,E,x,z,C,function(){null==O||O.open()},function(){null==O||O.close()},function(){null==O||O.focus()},function(e){null==O||O.setItems(e)},function(e){null==O||O.setGroupedItems(e)},function(){null==O||O.setSelectedValues([]),i||n(30,R=u?[]:void 0);const e=u?[]:"";n(3,o=e),q("change",{value:e,selectedItems:[]})},R,i,a,function(t){e.binding_callbacks[t?"unshift":"push"](()=>{O=t,n(2,O),n(9,p),n(10,v),n(8,m),n(7,u),n(15,$),n(23,C)})}]}"undefined"!=typeof window&&(window.__svelte||(window.__svelte={v:new Set})).v.add("4");class n extends e.SvelteComponent{constructor(t){super(),e.init(this,t,l,r,e.safe_not_equal,{items:4,groupedItems:5,value:3,defaultValue:6,multiple:7,searchable:8,placeholder:9,disabled:10,required:11,error:12,infiniteScroll:13,pageSize:14,virtualized:15,maxSelections:16,placement:17,className:0,style:1,clearable:18,clearSelectionOnClear:19,clearSearchOnClear:20,clearAriaLabel:21,clearIcon:22,optionRenderer:23,open:24,close:25,focus:26,setItems:27,setGroupedItems:28,clear:29},null,[-1,-1])}get open(){return this.$$.ctx[24]}get close(){return this.$$.ctx[25]}get focus(){return this.$$.ctx[26]}get setItems(){return this.$$.ctx[27]}get setGroupedItems(){return this.$$.ctx[28]}get clear(){return this.$$.ctx[29]}}exports.Select=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("svelte/internal"),t=require("svelte");function r(t){let r;return{c(){r=e.element("enhanced-select"),e.set_custom_element_data(r,"class",t[0]),e.set_custom_element_data(r,"style",t[1])},m(n,l){e.insert(n,r,l),t[33](r)},p(t,n){1&n[0]&&e.set_custom_element_data(r,"class",t[0]),2&n[0]&&e.set_custom_element_data(r,"style",t[1])},i:e.noop,o:e.noop,d(n){n&&e.detach(r),t[33](null)}}}function n(r,n,l){let i,a,{items:s=[]}=n,{groupedItems:c}=n,{value:o}=n,{defaultValue:d}=n,{multiple:u=!1}=n,{searchable:m=!1}=n,{placeholder:p=""}=n,{disabled:v=!1}=n,{required:b=!1}=n,{error:h=!1}=n,{infiniteScroll:f=!1}=n,{pageSize:S=50}=n,{virtualized:g=!0}=n,{maxSelections:$}=n,{placement:A="auto"}=n,{className:y=""}=n,{style:I=""}=n,{clearable:L=!1}=n,{clearSelectionOnClear:E=!0}=n,{clearSearchOnClear:_=!0}=n,{clearAriaLabel:x="Clear selection and search"}=n,{clearIcon:z="×"}=n,{optionRenderer:C}=n;const q=t.createEventDispatcher();let O,R=d;const w=(e,t,r)=>C?C(e,t,r):document.createElement("div");function V(e){const t=e,{item:r,index:n}=t.detail;q("select",{item:r,index:n})}function G(e){const t=e,{selectedItems:r,selectedValues:n}=t.detail,a=n;i||l(30,R=u?a:a[0]);const s=u?a:a[0];l(3,o=s),q("change",{value:s,selectedItems:r})}function M(){q("open")}function N(){q("close")}function D(e){q("search",{query:e.detail.query})}function j(e){q("loadMore",{page:e.detail.page})}function k(e){q("create",{value:e.detail.value})}function P(e){const t=e;q("clear",{clearedSelection:t.detail.clearedSelection,clearedSearch:t.detail.clearedSearch})}function T(){var e;O&&(null==(e=O.updateConfig)||e.call(O,{searchable:m,placeholder:p,enabled:!v,selection:{mode:u?"multi":"single",maxSelections:$},infiniteScroll:{enabled:f,pageSize:S},clearControl:{enabled:L,clearSelection:E,clearSearch:_,ariaLabel:x,icon:z}}))}return t.onMount(()=>{if(!O)return;const e=O;if(p&&e.setAttribute("placeholder",p),v&&e.setAttribute("disabled",""),b&&e.setAttribute("required",""),h&&e.setAttribute("error",""),m&&e.setAttribute("searchable",""),u&&e.setAttribute("multiple",""),g&&e.setAttribute("virtualized",""),f&&e.setAttribute("infinite-scroll",""),S&&e.setAttribute("page-size",String(S)),$&&e.setAttribute("max-selections",String($)),A&&e.setAttribute("placement",A),C&&(e.optionRenderer=w),null==s?void 0:s.length){const t=s[0];if(t&&void 0!==t.group){const t=new Map;s.forEach(e=>{const r=e.group??"Ungrouped";t.has(r)||t.set(r,[]),t.get(r).push(e)});const r=Array.from(t.entries()).map(([e,t])=>({label:e,options:t}));e.setGroupedItems(r)}else e.setItems(s)}if((null==c?void 0:c.length)&&e.setGroupedItems(c),void 0!==a){const t=Array.isArray(a)?a:[a];e.setSelectedValues(t)}e.addEventListener("select",V),e.addEventListener("change",G),e.addEventListener("open",M),e.addEventListener("close",N),e.addEventListener("search",D),e.addEventListener("loadMore",j),e.addEventListener("create",k),e.addEventListener("clear",P),T()}),t.onDestroy(()=>{if(!O)return;const e=O;e.removeEventListener("select",V),e.removeEventListener("change",G),e.removeEventListener("open",M),e.removeEventListener("close",N),e.removeEventListener("search",D),e.removeEventListener("loadMore",j),e.removeEventListener("create",k),e.removeEventListener("clear",P)}),r.$$set=e=>{"items"in e&&l(4,s=e.items),"groupedItems"in e&&l(5,c=e.groupedItems),"value"in e&&l(3,o=e.value),"defaultValue"in e&&l(6,d=e.defaultValue),"multiple"in e&&l(7,u=e.multiple),"searchable"in e&&l(8,m=e.searchable),"placeholder"in e&&l(9,p=e.placeholder),"disabled"in e&&l(10,v=e.disabled),"required"in e&&l(11,b=e.required),"error"in e&&l(12,h=e.error),"infiniteScroll"in e&&l(13,f=e.infiniteScroll),"pageSize"in e&&l(14,S=e.pageSize),"virtualized"in e&&l(15,g=e.virtualized),"maxSelections"in e&&l(16,$=e.maxSelections),"placement"in e&&l(17,A=e.placement),"className"in e&&l(0,y=e.className),"style"in e&&l(1,I=e.style),"clearable"in e&&l(18,L=e.clearable),"clearSelectionOnClear"in e&&l(19,E=e.clearSelectionOnClear),"clearSearchOnClear"in e&&l(20,_=e.clearSearchOnClear),"clearAriaLabel"in e&&l(21,x=e.clearAriaLabel),"clearIcon"in e&&l(22,z=e.clearIcon),"optionRenderer"in e&&l(23,C=e.optionRenderer)},r.$$.update=()=>{if(8&r.$$.dirty[0]&&l(31,i=void 0!==o),1073741832&r.$$.dirty[0]|1&r.$$.dirty[1]&&l(32,a=i?o:R),8423300&r.$$.dirty[0]&&O&&(p&&O.setAttribute("placeholder",p),v?O.setAttribute("disabled",""):O.removeAttribute("disabled"),m?O.setAttribute("searchable",""):O.removeAttribute("searchable"),u?O.setAttribute("multiple",""):O.removeAttribute("multiple"),g?O.setAttribute("virtualized",""):O.removeAttribute("virtualized"),C?O.optionRenderer!==w&&l(2,O.optionRenderer=w,O):O.optionRenderer===w&&l(2,O.optionRenderer=void 0,O)),20&r.$$.dirty[0]&&O&&s&&O.setItems(s),36&r.$$.dirty[0]&&O&&c&&O.setGroupedItems(c),4&r.$$.dirty[0]|2&r.$$.dirty[1]&&O&&void 0!==a){const e=Array.isArray(a)?a:[a];O.setSelectedValues(e)}4&r.$$.dirty[0]&&O&&T()},[y,I,O,o,s,c,d,u,m,p,v,b,h,f,S,g,$,A,L,E,_,x,z,C,function(){null==O||O.open()},function(){null==O||O.close()},function(){null==O||O.focus()},function(e){null==O||O.setItems(e)},function(e){null==O||O.setGroupedItems(e)},function(){null==O||O.setSelectedValues([]),i||l(30,R=u?[]:void 0);const e=u?[]:"";l(3,o=e),q("change",{value:e,selectedItems:[]})},R,i,a,function(t){e.binding_callbacks[t?"unshift":"push"](()=>{O=t,l(2,O),l(9,p),l(10,v),l(8,m),l(7,u),l(15,g),l(23,C)})}]}"undefined"!=typeof window&&(window.__svelte||(window.__svelte={v:new Set})).v.add("4");class l extends e.SvelteComponent{constructor(t){super(),e.init(this,t,n,r,e.safe_not_equal,{items:4,groupedItems:5,value:3,defaultValue:6,multiple:7,searchable:8,placeholder:9,disabled:10,required:11,error:12,infiniteScroll:13,pageSize:14,virtualized:15,maxSelections:16,placement:17,className:0,style:1,clearable:18,clearSelectionOnClear:19,clearSearchOnClear:20,clearAriaLabel:21,clearIcon:22,optionRenderer:23,open:24,close:25,focus:26,setItems:27,setGroupedItems:28,clear:29},null,[-1,-1])}get open(){return this.$$.ctx[24]}get close(){return this.$$.ctx[25]}get focus(){return this.$$.ctx[26]}get setItems(){return this.$$.ctx[27]}get setGroupedItems(){return this.$$.ctx[28]}get clear(){return this.$$.ctx[29]}}exports.Select=l;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/Select.svelte","../../../node_modules/svelte/src/runtime/internal/disclose-version/index.js","../../../node_modules/svelte/src/shared/version.js"],"sourcesContent":["<!--\n Smilodon Select Component for Svelte\n \n A production-ready, accessible select component with advanced features:\n - Single and multi-select modes\n - Searchable with client or server-side filtering\n - Infinite scroll and virtual scrolling for large datasets\n - Grouped options\n - Custom rendering\n - Full keyboard navigation\n - WCAG 2.1 AAA compliant\n \n @example\n <Select\n {items}\n bind:value={selectedValue}\n searchable\n placeholder=\"Select an option...\"\n />\n-->\n\n<script lang=\"ts\" context=\"module\">\n export interface SelectItem {\n value: string | number;\n label: string;\n disabled?: boolean;\n group?: string;\n [key: string]: any;\n }\n</script>\n\n<script lang=\"ts\">\n import { onMount, onDestroy, createEventDispatcher } from 'svelte';\n import type {\n SelectEventDetail,\n OpenEventDetail,\n CloseEventDetail,\n SearchEventDetail,\n ChangeEventDetail,\n LoadMoreEventDetail,\n ClearEventDetail,\n GroupedItem,\n } from '@smilodon/core';\n\n // Props\n export let items: SelectItem[] = [];\n export let groupedItems: GroupedItem[] | undefined = undefined;\n export let value: string | number | (string | number)[] | undefined = undefined;\n export let defaultValue: string | number | (string | number)[] | undefined = undefined;\n export let multiple: boolean = false;\n export let searchable: boolean = false;\n export let placeholder: string = '';\n export let disabled: boolean = false;\n export let required: boolean = false;\n export let error: boolean = false;\n export let infiniteScroll: boolean = false;\n export let pageSize: number = 50;\n export let virtualized: boolean = true;\n export let maxSelections: number | undefined = undefined;\n export let placement: 'bottom' | 'top' | 'auto' = 'auto';\n export let className: string = '';\n export let style: string = '';\n export let clearable: boolean = false;\n export let clearSelectionOnClear: boolean = true;\n export let clearSearchOnClear: boolean = true;\n export let clearAriaLabel: string = 'Clear selection and search';\n export let clearIcon: string = '×';\n export let optionRenderer: ((item: SelectItem, index: number, helpers: any) => HTMLElement) | undefined = undefined;\n\n const dispatch = createEventDispatcher<{\n change: { value: string | number | (string | number)[]; selectedItems: SelectItem[] };\n select: { item: SelectItem; index: number };\n open: void;\n close: void;\n search: { query: string };\n loadMore: { page: number };\n create: { value: string };\n clear: { clearedSelection: boolean; clearedSearch: boolean };\n }>();\n\n let selectRef: HTMLElement;\n let internalValue: string | number | (string | number)[] | undefined = defaultValue;\n\n // Stable wrapper to handle optionRenderer updates without triggering infinite loops\n const resolvedOptionRenderer = (item: SelectItem, index: number, helpers: any) => {\n return optionRenderer ? optionRenderer(item, index, helpers) : document.createElement('div');\n };\n\n // Check if component is controlled\n $: isControlled = value !== undefined;\n $: currentValue = isControlled ? value : internalValue;\n\n // Event handlers\n function handleSelect(e: Event) {\n const customEvent = e as CustomEvent<SelectEventDetail>;\n const { item, index } = customEvent.detail;\n dispatch('select', { item: item as SelectItem, index });\n }\n\n function handleChange(e: Event) {\n const customEvent = e as CustomEvent<ChangeEventDetail>;\n const { selectedItems, selectedValues } = customEvent.detail;\n\n const values = selectedValues as (string | number)[];\n\n // Update internal value in uncontrolled mode\n if (!isControlled) {\n internalValue = multiple ? values : values[0];\n }\n\n // Emit change event\n const newValue = multiple ? values : values[0];\n value = newValue; // Update binding\n dispatch('change', { value: newValue, selectedItems: selectedItems as SelectItem[] });\n }\n\n function handleOpen() {\n dispatch('open');\n }\n\n function handleClose() {\n dispatch('close');\n }\n\n function handleSearch(e: Event) {\n const customEvent = e as CustomEvent<SearchEventDetail>;\n dispatch('search', { query: customEvent.detail.query });\n }\n\n function handleLoadMore(e: Event) {\n const customEvent = e as CustomEvent<LoadMoreEventDetail>;\n dispatch('loadMore', { page: customEvent.detail.page });\n }\n\n function handleCreate(e: Event) {\n const customEvent = e as CustomEvent<{ value: string }>;\n dispatch('create', { value: customEvent.detail.value });\n }\n\n function handleClear(e: Event) {\n const customEvent = e as CustomEvent<ClearEventDetail>;\n dispatch('clear', {\n clearedSelection: customEvent.detail.clearedSelection,\n clearedSearch: customEvent.detail.clearedSearch,\n });\n }\n\n function updateConfig() {\n if (!selectRef) return;\n (selectRef as any).updateConfig?.({\n searchable,\n placeholder,\n enabled: !disabled,\n selection: {\n mode: multiple ? 'multi' : 'single',\n maxSelections,\n },\n infiniteScroll: {\n enabled: infiniteScroll,\n pageSize,\n },\n clearControl: {\n enabled: clearable,\n clearSelection: clearSelectionOnClear,\n clearSearch: clearSearchOnClear,\n ariaLabel: clearAriaLabel,\n icon: clearIcon,\n },\n });\n }\n\n onMount(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Set initial attributes\n if (placeholder) element.setAttribute('placeholder', placeholder);\n if (disabled) element.setAttribute('disabled', '');\n if (required) element.setAttribute('required', '');\n if (error) element.setAttribute('error', '');\n if (searchable) element.setAttribute('searchable', '');\n if (multiple) element.setAttribute('multiple', '');\n if (virtualized) element.setAttribute('virtualized', '');\n if (infiniteScroll) element.setAttribute('infinite-scroll', '');\n if (pageSize) element.setAttribute('page-size', String(pageSize));\n if (maxSelections) element.setAttribute('max-selections', String(maxSelections));\n if (placement) element.setAttribute('placement', placement);\n\n if (optionRenderer) {\n (element as any).optionRenderer = resolvedOptionRenderer;\n }\n\n // Set initial items\n if (items?.length) {\n (element as any).setItems(items);\n }\n if (groupedItems?.length) {\n (element as any).setGroupedItems(groupedItems);\n }\n\n // Set initial value\n if (currentValue !== undefined) {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (element as any).setSelectedValues(values);\n }\n\n // Add event listeners\n element.addEventListener('select', handleSelect as EventListener);\n element.addEventListener('change', handleChange as EventListener);\n element.addEventListener('open', handleOpen as EventListener);\n element.addEventListener('close', handleClose as EventListener);\n element.addEventListener('search', handleSearch as EventListener);\n element.addEventListener('loadMore', handleLoadMore as EventListener);\n element.addEventListener('create', handleCreate as EventListener);\n element.addEventListener('clear', handleClear as EventListener);\n\n updateConfig();\n });\n\n onDestroy(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Remove event listeners\n element.removeEventListener('select', handleSelect as EventListener);\n element.removeEventListener('change', handleChange as EventListener);\n element.removeEventListener('open', handleOpen as EventListener);\n element.removeEventListener('close', handleClose as EventListener);\n element.removeEventListener('search', handleSearch as EventListener);\n element.removeEventListener('loadMore', handleLoadMore as EventListener);\n element.removeEventListener('create', handleCreate as EventListener);\n element.removeEventListener('clear', handleClear as EventListener);\n });\n\n // Reactive updates\n $: if (selectRef && items) {\n (selectRef as any).setItems(items);\n }\n\n $: if (selectRef && groupedItems) {\n (selectRef as any).setGroupedItems(groupedItems);\n }\n\n $: if (selectRef && currentValue !== undefined) {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (selectRef as any).setSelectedValues(values);\n }\n\n $: if (selectRef) {\n if (placeholder) selectRef.setAttribute('placeholder', placeholder);\n if (disabled) {\n selectRef.setAttribute('disabled', '');\n } else {\n selectRef.removeAttribute('disabled');\n }\n if (searchable) {\n selectRef.setAttribute('searchable', '');\n } else {\n selectRef.removeAttribute('searchable');\n }\n if (multiple) {\n selectRef.setAttribute('multiple', '');\n } else {\n selectRef.removeAttribute('multiple');\n }\n if (virtualized) {\n selectRef.setAttribute('virtualized', '');\n } else {\n selectRef.removeAttribute('virtualized');\n }\n\n if (optionRenderer) {\n if ((selectRef as any).optionRenderer !== resolvedOptionRenderer) {\n (selectRef as any).optionRenderer = resolvedOptionRenderer;\n }\n } else if ((selectRef as any).optionRenderer === resolvedOptionRenderer) {\n (selectRef as any).optionRenderer = undefined;\n }\n }\n\n $: if (selectRef) {\n updateConfig();\n }\n\n // Public methods\n export function open() {\n (selectRef as any)?.open();\n }\n\n export function close() {\n (selectRef as any)?.close();\n }\n\n export function focus() {\n selectRef?.focus();\n }\n\n export function setItems(newItems: SelectItem[]) {\n (selectRef as any)?.setItems(newItems);\n }\n\n export function setGroupedItems(groups: GroupedItem[]) {\n (selectRef as any)?.setGroupedItems(groups);\n }\n\n export function clear() {\n (selectRef as any)?.setSelectedValues([]);\n if (!isControlled) {\n internalValue = multiple ? [] : undefined;\n }\n const newValue = multiple ? [] : '';\n value = newValue as any;\n dispatch('change', { value: newValue as any, selectedItems: [] });\n }\n</script>\n\n<enhanced-select\n bind:this={selectRef}\n class={className}\n {style}\n/>\n\n<style>\n /* Component uses web component styling from @smilodon/core */\n</style>\n","import { PUBLIC_VERSION } from '../../../shared/version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION);\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '4.2.20';\nexport const PUBLIC_VERSION = '4';\n"],"names":["ctx","insert","target","enhanced_select","anchor","items","$$props","groupedItems","value","defaultValue","multiple","searchable","placeholder","disabled","required","error","infiniteScroll","pageSize","virtualized","maxSelections","placement","className","style","clearable","clearSelectionOnClear","clearSearchOnClear","clearAriaLabel","clearIcon","optionRenderer","dispatch","createEventDispatcher","selectRef","internalValue","resolvedOptionRenderer","item","index","helpers","document","createElement","handleSelect","e","customEvent","detail","handleChange","selectedItems","selectedValues","values","isControlled","newValue","handleOpen","handleClose","handleSearch","query","handleLoadMore","page","handleCreate","handleClear","clearedSelection","clearedSearch","updateConfig","_a","call","enabled","selection","mode","clearControl","clearSelection","clearSearch","ariaLabel","icon","onMount","element","setAttribute","String","length","setItems","setGroupedItems","currentValue","Array","isArray","setSelectedValues","addEventListener","onDestroy","removeEventListener","$$invalidate","removeAttribute","open","close","focus","newItems","groups","$$value","window","__svelte","v","Set","add"],"mappings":"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","x_google_ignoreList":[1,2]}
1
+ {"version":3,"file":"index.cjs","sources":["../src/Select.svelte","../../../node_modules/svelte/src/runtime/internal/disclose-version/index.js","../../../node_modules/svelte/src/shared/version.js"],"sourcesContent":["<!--\n Smilodon Select Component for Svelte\n \n A production-ready, accessible select component with advanced features:\n - Single and multi-select modes\n - Searchable with client or server-side filtering\n - Infinite scroll and virtual scrolling for large datasets\n - Grouped options\n - Custom rendering\n - Full keyboard navigation\n - WCAG 2.1 AAA compliant\n \n @example\n <Select\n {items}\n bind:value={selectedValue}\n searchable\n placeholder=\"Select an option...\"\n />\n-->\n\n<script lang=\"ts\" context=\"module\">\n export interface SelectItem {\n value: string | number;\n label: string;\n disabled?: boolean;\n group?: string;\n [key: string]: any;\n }\n</script>\n\n<script lang=\"ts\">\n import { onMount, onDestroy, createEventDispatcher } from 'svelte';\n import type {\n SelectEventDetail,\n OpenEventDetail,\n CloseEventDetail,\n SearchEventDetail,\n ChangeEventDetail,\n LoadMoreEventDetail,\n ClearEventDetail,\n GroupedItem,\n } from '@smilodon/core';\n\n // Props\n export let items: SelectItem[] = [];\n export let groupedItems: GroupedItem[] | undefined = undefined;\n export let value: string | number | (string | number)[] | undefined = undefined;\n export let defaultValue: string | number | (string | number)[] | undefined = undefined;\n export let multiple: boolean = false;\n export let searchable: boolean = false;\n export let placeholder: string = '';\n export let disabled: boolean = false;\n export let required: boolean = false;\n export let error: boolean = false;\n export let infiniteScroll: boolean = false;\n export let pageSize: number = 50;\n export let virtualized: boolean = true;\n export let maxSelections: number | undefined = undefined;\n export let placement: 'bottom' | 'top' | 'auto' = 'auto';\n export let className: string = '';\n export let style: string = '';\n export let clearable: boolean = false;\n export let clearSelectionOnClear: boolean = true;\n export let clearSearchOnClear: boolean = true;\n export let clearAriaLabel: string = 'Clear selection and search';\n export let clearIcon: string = '×';\n export let optionRenderer: ((item: SelectItem, index: number, helpers: any) => HTMLElement) | undefined = undefined;\n\n const dispatch = createEventDispatcher<{\n change: { value: string | number | (string | number)[]; selectedItems: SelectItem[] };\n select: { item: SelectItem; index: number };\n open: void;\n close: void;\n search: { query: string };\n loadMore: { page: number };\n create: { value: string };\n clear: { clearedSelection: boolean; clearedSearch: boolean };\n }>();\n\n let selectRef: HTMLElement;\n let internalValue: string | number | (string | number)[] | undefined = defaultValue;\n\n // Stable wrapper to handle optionRenderer updates without triggering infinite loops\n const resolvedOptionRenderer = (item: SelectItem, index: number, helpers: any) => {\n return optionRenderer ? optionRenderer(item, index, helpers) : document.createElement('div');\n };\n\n // Check if component is controlled\n $: isControlled = value !== undefined;\n $: currentValue = isControlled ? value : internalValue;\n\n // Event handlers\n function handleSelect(e: Event) {\n const customEvent = e as CustomEvent<SelectEventDetail>;\n const { item, index } = customEvent.detail;\n dispatch('select', { item: item as SelectItem, index });\n }\n\n function handleChange(e: Event) {\n const customEvent = e as CustomEvent<ChangeEventDetail>;\n const { selectedItems, selectedValues } = customEvent.detail;\n\n const values = selectedValues as (string | number)[];\n\n // Update internal value in uncontrolled mode\n if (!isControlled) {\n internalValue = multiple ? values : values[0];\n }\n\n // Emit change event\n const newValue = multiple ? values : values[0];\n value = newValue; // Update binding\n dispatch('change', { value: newValue, selectedItems: selectedItems as SelectItem[] });\n }\n\n function handleOpen() {\n dispatch('open');\n }\n\n function handleClose() {\n dispatch('close');\n }\n\n function handleSearch(e: Event) {\n const customEvent = e as CustomEvent<SearchEventDetail>;\n dispatch('search', { query: customEvent.detail.query });\n }\n\n function handleLoadMore(e: Event) {\n const customEvent = e as CustomEvent<LoadMoreEventDetail>;\n dispatch('loadMore', { page: customEvent.detail.page });\n }\n\n function handleCreate(e: Event) {\n const customEvent = e as CustomEvent<{ value: string }>;\n dispatch('create', { value: customEvent.detail.value });\n }\n\n function handleClear(e: Event) {\n const customEvent = e as CustomEvent<ClearEventDetail>;\n dispatch('clear', {\n clearedSelection: customEvent.detail.clearedSelection,\n clearedSearch: customEvent.detail.clearedSearch,\n });\n }\n\n function updateConfig() {\n if (!selectRef) return;\n (selectRef as any).updateConfig?.({\n searchable,\n placeholder,\n enabled: !disabled,\n selection: {\n mode: multiple ? 'multi' : 'single',\n maxSelections,\n },\n infiniteScroll: {\n enabled: infiniteScroll,\n pageSize,\n },\n clearControl: {\n enabled: clearable,\n clearSelection: clearSelectionOnClear,\n clearSearch: clearSearchOnClear,\n ariaLabel: clearAriaLabel,\n icon: clearIcon,\n },\n });\n }\n\n onMount(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Set initial attributes\n if (placeholder) element.setAttribute('placeholder', placeholder);\n if (disabled) element.setAttribute('disabled', '');\n if (required) element.setAttribute('required', '');\n if (error) element.setAttribute('error', '');\n if (searchable) element.setAttribute('searchable', '');\n if (multiple) element.setAttribute('multiple', '');\n if (virtualized) element.setAttribute('virtualized', '');\n if (infiniteScroll) element.setAttribute('infinite-scroll', '');\n if (pageSize) element.setAttribute('page-size', String(pageSize));\n if (maxSelections) element.setAttribute('max-selections', String(maxSelections));\n if (placement) element.setAttribute('placement', placement);\n\n if (optionRenderer) {\n (element as any).optionRenderer = resolvedOptionRenderer;\n }\n\n // Set initial items\n if (items?.length) {\n // Auto-convert flat items with `group` property into groupedItems\n const first = items[0];\n if (first && (first as any).group !== undefined) {\n const map = new Map<string, any[]>();\n items.forEach((it: any) => {\n const g = it.group ?? 'Ungrouped';\n if (!map.has(g)) map.set(g, []);\n map.get(g)!.push(it);\n });\n const groups = Array.from(map.entries()).map(([label, options]) => ({ label, options }));\n (element as any).setGroupedItems(groups);\n } else {\n (element as any).setItems(items);\n }\n }\n if (groupedItems?.length) {\n (element as any).setGroupedItems(groupedItems);\n }\n\n // Set initial value\n if (currentValue !== undefined) {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (element as any).setSelectedValues(values);\n }\n\n // Add event listeners\n element.addEventListener('select', handleSelect as EventListener);\n element.addEventListener('change', handleChange as EventListener);\n element.addEventListener('open', handleOpen as EventListener);\n element.addEventListener('close', handleClose as EventListener);\n element.addEventListener('search', handleSearch as EventListener);\n element.addEventListener('loadMore', handleLoadMore as EventListener);\n element.addEventListener('create', handleCreate as EventListener);\n element.addEventListener('clear', handleClear as EventListener);\n\n updateConfig();\n });\n\n onDestroy(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Remove event listeners\n element.removeEventListener('select', handleSelect as EventListener);\n element.removeEventListener('change', handleChange as EventListener);\n element.removeEventListener('open', handleOpen as EventListener);\n element.removeEventListener('close', handleClose as EventListener);\n element.removeEventListener('search', handleSearch as EventListener);\n element.removeEventListener('loadMore', handleLoadMore as EventListener);\n element.removeEventListener('create', handleCreate as EventListener);\n element.removeEventListener('clear', handleClear as EventListener);\n });\n\n // Reactive updates\n $: if (selectRef && items) {\n (selectRef as any).setItems(items);\n }\n\n $: if (selectRef && groupedItems) {\n (selectRef as any).setGroupedItems(groupedItems);\n }\n\n $: if (selectRef && currentValue !== undefined) {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (selectRef as any).setSelectedValues(values);\n }\n\n $: if (selectRef) {\n if (placeholder) selectRef.setAttribute('placeholder', placeholder);\n if (disabled) {\n selectRef.setAttribute('disabled', '');\n } else {\n selectRef.removeAttribute('disabled');\n }\n if (searchable) {\n selectRef.setAttribute('searchable', '');\n } else {\n selectRef.removeAttribute('searchable');\n }\n if (multiple) {\n selectRef.setAttribute('multiple', '');\n } else {\n selectRef.removeAttribute('multiple');\n }\n if (virtualized) {\n selectRef.setAttribute('virtualized', '');\n } else {\n selectRef.removeAttribute('virtualized');\n }\n\n if (optionRenderer) {\n if ((selectRef as any).optionRenderer !== resolvedOptionRenderer) {\n (selectRef as any).optionRenderer = resolvedOptionRenderer;\n }\n } else if ((selectRef as any).optionRenderer === resolvedOptionRenderer) {\n (selectRef as any).optionRenderer = undefined;\n }\n }\n\n $: if (selectRef) {\n updateConfig();\n }\n\n // Public methods\n export function open() {\n (selectRef as any)?.open();\n }\n\n export function close() {\n (selectRef as any)?.close();\n }\n\n export function focus() {\n selectRef?.focus();\n }\n\n export function setItems(newItems: SelectItem[]) {\n (selectRef as any)?.setItems(newItems);\n }\n\n export function setGroupedItems(groups: GroupedItem[]) {\n (selectRef as any)?.setGroupedItems(groups);\n }\n\n export function clear() {\n (selectRef as any)?.setSelectedValues([]);\n if (!isControlled) {\n internalValue = multiple ? [] : undefined;\n }\n const newValue = multiple ? [] : '';\n value = newValue as any;\n dispatch('change', { value: newValue as any, selectedItems: [] });\n }\n</script>\n\n<enhanced-select\n bind:this={selectRef}\n class={className}\n {style}\n/>\n\n<style>\n /* Component uses web component styling from @smilodon/core */\n</style>\n","import { PUBLIC_VERSION } from '../../../shared/version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION);\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '4.2.20';\nexport const PUBLIC_VERSION = '4';\n"],"names":["ctx","insert","target","enhanced_select","anchor","items","$$props","groupedItems","value","defaultValue","multiple","searchable","placeholder","disabled","required","error","infiniteScroll","pageSize","virtualized","maxSelections","placement","className","style","clearable","clearSelectionOnClear","clearSearchOnClear","clearAriaLabel","clearIcon","optionRenderer","dispatch","createEventDispatcher","selectRef","internalValue","resolvedOptionRenderer","item","index","helpers","document","createElement","handleSelect","e","customEvent","detail","handleChange","selectedItems","selectedValues","values","isControlled","newValue","handleOpen","handleClose","handleSearch","query","handleLoadMore","page","handleCreate","handleClear","clearedSelection","clearedSearch","updateConfig","_a","call","enabled","selection","mode","clearControl","clearSelection","clearSearch","ariaLabel","icon","onMount","element","setAttribute","String","length","first","group","map","Map","forEach","it","g","has","set","get","push","groups","Array","from","entries","label","options","setGroupedItems","setItems","currentValue","isArray","setSelectedValues","addEventListener","onDestroy","removeEventListener","$$invalidate","removeAttribute","open","close","focus","newItems","$$value","window","__svelte","v","Set","add"],"mappings":"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","x_google_ignoreList":[1,2]}
package/dist/index.mjs CHANGED
@@ -167,7 +167,19 @@ function instance($$self, $$props, $$invalidate) {
167
167
  element2.optionRenderer = resolvedOptionRenderer;
168
168
  }
169
169
  if (items == null ? void 0 : items.length) {
170
- element2.setItems(items);
170
+ const first = items[0];
171
+ if (first && first.group !== void 0) {
172
+ const map = /* @__PURE__ */ new Map();
173
+ items.forEach((it) => {
174
+ const g = it.group ?? "Ungrouped";
175
+ if (!map.has(g)) map.set(g, []);
176
+ map.get(g).push(it);
177
+ });
178
+ const groups = Array.from(map.entries()).map(([label, options]) => ({ label, options }));
179
+ element2.setGroupedItems(groups);
180
+ } else {
181
+ element2.setItems(items);
182
+ }
171
183
  }
172
184
  if (groupedItems == null ? void 0 : groupedItems.length) {
173
185
  element2.setGroupedItems(groupedItems);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../node_modules/svelte/src/shared/version.js","../../../node_modules/svelte/src/runtime/internal/disclose-version/index.js","../src/Select.svelte"],"sourcesContent":["// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '4.2.20';\nexport const PUBLIC_VERSION = '4';\n","import { PUBLIC_VERSION } from '../../../shared/version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION);\n","<!--\n Smilodon Select Component for Svelte\n \n A production-ready, accessible select component with advanced features:\n - Single and multi-select modes\n - Searchable with client or server-side filtering\n - Infinite scroll and virtual scrolling for large datasets\n - Grouped options\n - Custom rendering\n - Full keyboard navigation\n - WCAG 2.1 AAA compliant\n \n @example\n <Select\n {items}\n bind:value={selectedValue}\n searchable\n placeholder=\"Select an option...\"\n />\n-->\n\n<script lang=\"ts\" context=\"module\">\n export interface SelectItem {\n value: string | number;\n label: string;\n disabled?: boolean;\n group?: string;\n [key: string]: any;\n }\n</script>\n\n<script lang=\"ts\">\n import { onMount, onDestroy, createEventDispatcher } from 'svelte';\n import type {\n SelectEventDetail,\n OpenEventDetail,\n CloseEventDetail,\n SearchEventDetail,\n ChangeEventDetail,\n LoadMoreEventDetail,\n ClearEventDetail,\n GroupedItem,\n } from '@smilodon/core';\n\n // Props\n export let items: SelectItem[] = [];\n export let groupedItems: GroupedItem[] | undefined = undefined;\n export let value: string | number | (string | number)[] | undefined = undefined;\n export let defaultValue: string | number | (string | number)[] | undefined = undefined;\n export let multiple: boolean = false;\n export let searchable: boolean = false;\n export let placeholder: string = '';\n export let disabled: boolean = false;\n export let required: boolean = false;\n export let error: boolean = false;\n export let infiniteScroll: boolean = false;\n export let pageSize: number = 50;\n export let virtualized: boolean = true;\n export let maxSelections: number | undefined = undefined;\n export let placement: 'bottom' | 'top' | 'auto' = 'auto';\n export let className: string = '';\n export let style: string = '';\n export let clearable: boolean = false;\n export let clearSelectionOnClear: boolean = true;\n export let clearSearchOnClear: boolean = true;\n export let clearAriaLabel: string = 'Clear selection and search';\n export let clearIcon: string = '×';\n export let optionRenderer: ((item: SelectItem, index: number, helpers: any) => HTMLElement) | undefined = undefined;\n\n const dispatch = createEventDispatcher<{\n change: { value: string | number | (string | number)[]; selectedItems: SelectItem[] };\n select: { item: SelectItem; index: number };\n open: void;\n close: void;\n search: { query: string };\n loadMore: { page: number };\n create: { value: string };\n clear: { clearedSelection: boolean; clearedSearch: boolean };\n }>();\n\n let selectRef: HTMLElement;\n let internalValue: string | number | (string | number)[] | undefined = defaultValue;\n\n // Stable wrapper to handle optionRenderer updates without triggering infinite loops\n const resolvedOptionRenderer = (item: SelectItem, index: number, helpers: any) => {\n return optionRenderer ? optionRenderer(item, index, helpers) : document.createElement('div');\n };\n\n // Check if component is controlled\n $: isControlled = value !== undefined;\n $: currentValue = isControlled ? value : internalValue;\n\n // Event handlers\n function handleSelect(e: Event) {\n const customEvent = e as CustomEvent<SelectEventDetail>;\n const { item, index } = customEvent.detail;\n dispatch('select', { item: item as SelectItem, index });\n }\n\n function handleChange(e: Event) {\n const customEvent = e as CustomEvent<ChangeEventDetail>;\n const { selectedItems, selectedValues } = customEvent.detail;\n\n const values = selectedValues as (string | number)[];\n\n // Update internal value in uncontrolled mode\n if (!isControlled) {\n internalValue = multiple ? values : values[0];\n }\n\n // Emit change event\n const newValue = multiple ? values : values[0];\n value = newValue; // Update binding\n dispatch('change', { value: newValue, selectedItems: selectedItems as SelectItem[] });\n }\n\n function handleOpen() {\n dispatch('open');\n }\n\n function handleClose() {\n dispatch('close');\n }\n\n function handleSearch(e: Event) {\n const customEvent = e as CustomEvent<SearchEventDetail>;\n dispatch('search', { query: customEvent.detail.query });\n }\n\n function handleLoadMore(e: Event) {\n const customEvent = e as CustomEvent<LoadMoreEventDetail>;\n dispatch('loadMore', { page: customEvent.detail.page });\n }\n\n function handleCreate(e: Event) {\n const customEvent = e as CustomEvent<{ value: string }>;\n dispatch('create', { value: customEvent.detail.value });\n }\n\n function handleClear(e: Event) {\n const customEvent = e as CustomEvent<ClearEventDetail>;\n dispatch('clear', {\n clearedSelection: customEvent.detail.clearedSelection,\n clearedSearch: customEvent.detail.clearedSearch,\n });\n }\n\n function updateConfig() {\n if (!selectRef) return;\n (selectRef as any).updateConfig?.({\n searchable,\n placeholder,\n enabled: !disabled,\n selection: {\n mode: multiple ? 'multi' : 'single',\n maxSelections,\n },\n infiniteScroll: {\n enabled: infiniteScroll,\n pageSize,\n },\n clearControl: {\n enabled: clearable,\n clearSelection: clearSelectionOnClear,\n clearSearch: clearSearchOnClear,\n ariaLabel: clearAriaLabel,\n icon: clearIcon,\n },\n });\n }\n\n onMount(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Set initial attributes\n if (placeholder) element.setAttribute('placeholder', placeholder);\n if (disabled) element.setAttribute('disabled', '');\n if (required) element.setAttribute('required', '');\n if (error) element.setAttribute('error', '');\n if (searchable) element.setAttribute('searchable', '');\n if (multiple) element.setAttribute('multiple', '');\n if (virtualized) element.setAttribute('virtualized', '');\n if (infiniteScroll) element.setAttribute('infinite-scroll', '');\n if (pageSize) element.setAttribute('page-size', String(pageSize));\n if (maxSelections) element.setAttribute('max-selections', String(maxSelections));\n if (placement) element.setAttribute('placement', placement);\n\n if (optionRenderer) {\n (element as any).optionRenderer = resolvedOptionRenderer;\n }\n\n // Set initial items\n if (items?.length) {\n (element as any).setItems(items);\n }\n if (groupedItems?.length) {\n (element as any).setGroupedItems(groupedItems);\n }\n\n // Set initial value\n if (currentValue !== undefined) {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (element as any).setSelectedValues(values);\n }\n\n // Add event listeners\n element.addEventListener('select', handleSelect as EventListener);\n element.addEventListener('change', handleChange as EventListener);\n element.addEventListener('open', handleOpen as EventListener);\n element.addEventListener('close', handleClose as EventListener);\n element.addEventListener('search', handleSearch as EventListener);\n element.addEventListener('loadMore', handleLoadMore as EventListener);\n element.addEventListener('create', handleCreate as EventListener);\n element.addEventListener('clear', handleClear as EventListener);\n\n updateConfig();\n });\n\n onDestroy(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Remove event listeners\n element.removeEventListener('select', handleSelect as EventListener);\n element.removeEventListener('change', handleChange as EventListener);\n element.removeEventListener('open', handleOpen as EventListener);\n element.removeEventListener('close', handleClose as EventListener);\n element.removeEventListener('search', handleSearch as EventListener);\n element.removeEventListener('loadMore', handleLoadMore as EventListener);\n element.removeEventListener('create', handleCreate as EventListener);\n element.removeEventListener('clear', handleClear as EventListener);\n });\n\n // Reactive updates\n $: if (selectRef && items) {\n (selectRef as any).setItems(items);\n }\n\n $: if (selectRef && groupedItems) {\n (selectRef as any).setGroupedItems(groupedItems);\n }\n\n $: if (selectRef && currentValue !== undefined) {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (selectRef as any).setSelectedValues(values);\n }\n\n $: if (selectRef) {\n if (placeholder) selectRef.setAttribute('placeholder', placeholder);\n if (disabled) {\n selectRef.setAttribute('disabled', '');\n } else {\n selectRef.removeAttribute('disabled');\n }\n if (searchable) {\n selectRef.setAttribute('searchable', '');\n } else {\n selectRef.removeAttribute('searchable');\n }\n if (multiple) {\n selectRef.setAttribute('multiple', '');\n } else {\n selectRef.removeAttribute('multiple');\n }\n if (virtualized) {\n selectRef.setAttribute('virtualized', '');\n } else {\n selectRef.removeAttribute('virtualized');\n }\n\n if (optionRenderer) {\n if ((selectRef as any).optionRenderer !== resolvedOptionRenderer) {\n (selectRef as any).optionRenderer = resolvedOptionRenderer;\n }\n } else if ((selectRef as any).optionRenderer === resolvedOptionRenderer) {\n (selectRef as any).optionRenderer = undefined;\n }\n }\n\n $: if (selectRef) {\n updateConfig();\n }\n\n // Public methods\n export function open() {\n (selectRef as any)?.open();\n }\n\n export function close() {\n (selectRef as any)?.close();\n }\n\n export function focus() {\n selectRef?.focus();\n }\n\n export function setItems(newItems: SelectItem[]) {\n (selectRef as any)?.setItems(newItems);\n }\n\n export function setGroupedItems(groups: GroupedItem[]) {\n (selectRef as any)?.setGroupedItems(groups);\n }\n\n export function clear() {\n (selectRef as any)?.setSelectedValues([]);\n if (!isControlled) {\n internalValue = multiple ? [] : undefined;\n }\n const newValue = multiple ? [] : '';\n value = newValue as any;\n dispatch('change', { value: newValue as any, selectedItems: [] });\n }\n</script>\n\n<enhanced-select\n bind:this={selectRef}\n class={className}\n {style}\n/>\n\n<style>\n /* Component uses web component styling from @smilodon/core */\n</style>\n"],"names":["ctx","element"],"mappings":";;AASO,MAAM,iBAAiB;ACP9B,IAAI,OAAO,WAAW;AAErB,GAAC,OAAO,aAAa,OAAO,WAAW,EAAE,GAAG,oBAAI,IAAG,EAAE,IAAK,EAAE,IAAI,cAAc;;;;;;;;;;QC4TtE,IAAS,CAAA;AAAA,MAAA;;;;;;;;;AAFlB,aAIC,QAAA,iBAAA,MAAA;;;;;;;;;;UAFQA,KAAS,CAAA;AAAA,QAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AAnRL,MAAA,EAAA,QAAA,CAAA,EAAA,IAAA;QACA,eAAA,OAA0C,IAAA;QAC1C,QAAA,OAA2D,IAAA;QAC3D,eAAA,OAAkE,IAAA;QAClE,WAAoB,MAAA,IAAA;QACpB,aAAsB,MAAA,IAAA;QACtB,cAAsB,GAAA,IAAA;QACtB,WAAoB,MAAA,IAAA;QACpB,WAAoB,MAAA,IAAA;QACpB,QAAiB,MAAA,IAAA;QACjB,iBAA0B,MAAA,IAAA;QAC1B,WAAmB,GAAA,IAAA;QACnB,cAAuB,KAAA,IAAA;QACvB,gBAAA,OAAoC,IAAA;QACpC,YAAuC,OAAA,IAAA;QACvC,YAAoB,GAAA,IAAA;QACpB,QAAgB,GAAA,IAAA;QAChB,YAAqB,MAAA,IAAA;QACrB,wBAAiC,KAAA,IAAA;QACjC,qBAA8B,KAAA,IAAA;QAC9B,iBAAyB,6BAAA,IAAA;QACzB,YAAoB,IAAA,IAAA;QACpB,iBAAA,OAA+F,IAAA;QAEpG,WAAW,sBAAA;AAWb,MAAA;MACA,gBAAmE;AAGjE,QAAA,yBAAA,CAA0B,MAAkB,OAAe,YAAA;AACxD,WAAA,iBAAiB,eAAe,MAAM,OAAO,OAAO,IAAI,SAAS,cAAc,KAAK;AAAA;WAQpF,aAAa,GAAA;UACd,cAAc;AACZ,UAAA,EAAA,MAAM,UAAU,YAAY;AACpC,aAAS,YAAY,MAA0B,MAAA,CAAA;AAAA;WAGxC,aAAa,GAAA;UACd,cAAc;AACZ,UAAA,EAAA,eAAe,mBAAmB,YAAY;UAEhD,SAAS;AAGV,QAAA,CAAA,cAAA;uBACH,gBAAgB,WAAW,SAAS,OAAO,CAAC,CAAA;AAAA;UAIxC,WAAW,WAAW,SAAS,OAAO,CAAC;oBAC7C,QAAQ,QAAA;AACR,aAAS,UAAA,EAAY,OAAO,UAAU,cAAA,CAAA;AAAA;AAG/B,WAAA,aAAA;AACP,aAAS,MAAM;AAAA;AAGR,WAAA,cAAA;AACP,aAAS,OAAO;AAAA;WAGT,aAAa,GAAA;UACd,cAAc;AACpB,aAAS,UAAA,EAAY,OAAO,YAAY,OAAO,OAAA;AAAA;WAGxC,eAAe,GAAA;UAChB,cAAc;AACpB,aAAS,YAAA,EAAc,MAAM,YAAY,OAAO,MAAA;AAAA;WAGzC,aAAa,GAAA;UACd,cAAc;AACpB,aAAS,UAAA,EAAY,OAAO,YAAY,OAAO,OAAA;AAAA;WAGxC,YAAY,GAAA;UACb,cAAc;AACpB,aAAS,SAAA;AAAA,MACP,kBAAkB,YAAY,OAAO;AAAA,MACrC,eAAe,YAAY,OAAO;AAAA;;AAI7B,WAAA,eAAA;;AACF,QAAA,CAAA,UAAA;AACJ,oBAAkB,iBAAlB,mCAAkB;AAAA,MACjB;AAAA,MACA;AAAA,MACA,SAAA,CAAU;AAAA,MACV,WAAA;AAAA,QACE,MAAM,WAAW,UAAU;AAAA,QAC3B;AAAA;MAEF,gBAAA,EACE,SAAS,gBACT,SAAA;AAAA,MAEF,cAAA;AAAA,QACE,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,WAAW;AAAA,QACX,MAAM;AAAA;;;AAKZ,UAAA,MAAA;AACO,QAAA,CAAA,UAAA;UAECC,WAAU;QAGZ,YAAa,CAAAA,SAAQ,aAAa,eAAe,WAAW;QAC5D,SAAU,CAAAA,SAAQ,aAAa,YAAY,EAAE;QAC7C,SAAU,CAAAA,SAAQ,aAAa,YAAY,EAAE;QAC7C,MAAO,CAAAA,SAAQ,aAAa,SAAS,EAAE;QACvC,WAAY,CAAAA,SAAQ,aAAa,cAAc,EAAE;QACjD,SAAU,CAAAA,SAAQ,aAAa,YAAY,EAAE;QAC7C,YAAa,CAAAA,SAAQ,aAAa,eAAe,EAAE;QACnD,eAAgB,CAAAA,SAAQ,aAAa,mBAAmB,EAAE;AAC1D,QAAA,SAAU,CAAAA,SAAQ,aAAa,aAAa,OAAO,QAAQ,CAAA;AAC3D,QAAA,cAAe,CAAAA,SAAQ,aAAa,kBAAkB,OAAO,aAAa,CAAA;QAC1E,UAAW,CAAAA,SAAQ,aAAa,aAAa,SAAS;AAEtD,QAAA,gBAAA;AACD,MAAAA,SAAgB,iBAAiB;AAAA;QAIhC,+BAAO,QAAA;AACR,MAAAA,SAAgB,SAAS,KAAK;AAAA;QAE7B,6CAAc,QAAA;AACf,MAAAA,SAAgB,gBAAgB,YAAY;AAAA;QAI3C,iBAAA,QAAiB;YACb,SAAS,MAAM,QAAQ,YAAY,IAAI,gBAAgB,YAAY;AACxE,MAAAA,SAAgB,kBAAkB,MAAM;AAAA;AAI3C,IAAAA,SAAQ,iBAAiB,UAAU,YAA6B;AAChE,IAAAA,SAAQ,iBAAiB,UAAU,YAA6B;AAChE,IAAAA,SAAQ,iBAAiB,QAAQ,UAA2B;AAC5D,IAAAA,SAAQ,iBAAiB,SAAS,WAA4B;AAC9D,IAAAA,SAAQ,iBAAiB,UAAU,YAA6B;AAChE,IAAAA,SAAQ,iBAAiB,YAAY,cAA+B;AACpE,IAAAA,SAAQ,iBAAiB,UAAU,YAA6B;AAChE,IAAAA,SAAQ,iBAAiB,SAAS,WAA4B;AAE9D,iBAAA;AAAA;AAGF,YAAA,MAAA;AACO,QAAA,CAAA,UAAA;UAECA,WAAU;AAGhB,IAAAA,SAAQ,oBAAoB,UAAU,YAA6B;AACnE,IAAAA,SAAQ,oBAAoB,UAAU,YAA6B;AACnE,IAAAA,SAAQ,oBAAoB,QAAQ,UAA2B;AAC/D,IAAAA,SAAQ,oBAAoB,SAAS,WAA4B;AACjE,IAAAA,SAAQ,oBAAoB,UAAU,YAA6B;AACnE,IAAAA,SAAQ,oBAAoB,YAAY,cAA+B;AACvE,IAAAA,SAAQ,oBAAoB,UAAU,YAA6B;AACnE,IAAAA,SAAQ,oBAAoB,SAAS,WAA4B;AAAA;AAsDnD,WAAA,OAAA;AACb,2CAAmB;AAAA;AAGN,WAAA,QAAA;AACb,2CAAmB;AAAA;AAGN,WAAA,QAAA;AACd,2CAAW;AAAA;WAGG,SAAS,UAAA;AACtB,2CAAmB,SAAS;AAAA;WAGf,gBAAgB,QAAA;AAC7B,2CAAmB,gBAAgB;AAAA;AAGtB,WAAA,QAAA;AACb,2CAAmB,kBAAA;AACf,QAAA,CAAA,cAAA;AACH,mBAAA,IAAA,gBAAgB,WAAA,CAAA,IAAA,MAAgB;AAAA;AAE5B,UAAA,WAAW,WAAA,CAAA,IAAgB;oBACjC,QAAQ,QAAA;AACR,aAAS,UAAA,EAAY,OAAO,UAAiB,eAAA,CAAA,GAAA;AAAA;;;AAKpC,kBAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAtOpB,mBAAA,IAAG,eAAe,UAAA,MAAU;AAAA;;;;AAC5B,mBAAA,IAAG,eAAe,eAAe,QAAQ,aAAA;AAAA;;;AAgKzC,UAAO,WAAA;YACD,YAAa,WAAU,aAAa,eAAe,WAAW;AAC9D,YAAA,UAAA;AACF,oBAAU,aAAa,YAAY,EAAE;AAAA;AAErC,oBAAU,gBAAgB,UAAU;AAAA;AAElC,YAAA,YAAA;AACF,oBAAU,aAAa,cAAc,EAAE;AAAA;AAEvC,oBAAU,gBAAgB,YAAY;AAAA;AAEpC,YAAA,UAAA;AACF,oBAAU,aAAa,YAAY,EAAE;AAAA;AAErC,oBAAU,gBAAgB,UAAU;AAAA;AAElC,YAAA,aAAA;AACF,oBAAU,aAAa,eAAe,EAAE;AAAA;AAExC,oBAAU,gBAAgB,aAAa;AAAA;AAGrC,YAAA,gBAAA;AACG,cAAA,UAAkB,mBAAmB,wBAAA;AACvC,yBAAA,GAAA,UAAkB,iBAAiB,wBAAA,SAAA;AAAA;QAE5B,WAAA,UAAkB,mBAAmB,wBAAA;AAC9C,uBAAA,GAAA,UAAkB,iBAAA,QAAiB,SAAA;AAAA;;;;;AAzCxC,UAAO,aAAa,OAAA;AACjB,kBAAkB,SAAS,KAAK;AAAA;;;;AAGnC,UAAO,aAAa,cAAA;AACjB,kBAAkB,gBAAgB,YAAY;AAAA;;;;;AAGjD,UAAO,aAAa,iBAAA,QAAiB;cAC7B,SAAS,MAAM,QAAQ,YAAY,IAAI,gBAAgB,YAAY;AACxE,kBAAkB,kBAAkB,MAAM;AAAA;;;;AAmC7C,UAAO,WAAA;AACL,qBAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"index.mjs","sources":["../../../node_modules/svelte/src/shared/version.js","../../../node_modules/svelte/src/runtime/internal/disclose-version/index.js","../src/Select.svelte"],"sourcesContent":["// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '4.2.20';\nexport const PUBLIC_VERSION = '4';\n","import { PUBLIC_VERSION } from '../../../shared/version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION);\n","<!--\n Smilodon Select Component for Svelte\n \n A production-ready, accessible select component with advanced features:\n - Single and multi-select modes\n - Searchable with client or server-side filtering\n - Infinite scroll and virtual scrolling for large datasets\n - Grouped options\n - Custom rendering\n - Full keyboard navigation\n - WCAG 2.1 AAA compliant\n \n @example\n <Select\n {items}\n bind:value={selectedValue}\n searchable\n placeholder=\"Select an option...\"\n />\n-->\n\n<script lang=\"ts\" context=\"module\">\n export interface SelectItem {\n value: string | number;\n label: string;\n disabled?: boolean;\n group?: string;\n [key: string]: any;\n }\n</script>\n\n<script lang=\"ts\">\n import { onMount, onDestroy, createEventDispatcher } from 'svelte';\n import type {\n SelectEventDetail,\n OpenEventDetail,\n CloseEventDetail,\n SearchEventDetail,\n ChangeEventDetail,\n LoadMoreEventDetail,\n ClearEventDetail,\n GroupedItem,\n } from '@smilodon/core';\n\n // Props\n export let items: SelectItem[] = [];\n export let groupedItems: GroupedItem[] | undefined = undefined;\n export let value: string | number | (string | number)[] | undefined = undefined;\n export let defaultValue: string | number | (string | number)[] | undefined = undefined;\n export let multiple: boolean = false;\n export let searchable: boolean = false;\n export let placeholder: string = '';\n export let disabled: boolean = false;\n export let required: boolean = false;\n export let error: boolean = false;\n export let infiniteScroll: boolean = false;\n export let pageSize: number = 50;\n export let virtualized: boolean = true;\n export let maxSelections: number | undefined = undefined;\n export let placement: 'bottom' | 'top' | 'auto' = 'auto';\n export let className: string = '';\n export let style: string = '';\n export let clearable: boolean = false;\n export let clearSelectionOnClear: boolean = true;\n export let clearSearchOnClear: boolean = true;\n export let clearAriaLabel: string = 'Clear selection and search';\n export let clearIcon: string = '×';\n export let optionRenderer: ((item: SelectItem, index: number, helpers: any) => HTMLElement) | undefined = undefined;\n\n const dispatch = createEventDispatcher<{\n change: { value: string | number | (string | number)[]; selectedItems: SelectItem[] };\n select: { item: SelectItem; index: number };\n open: void;\n close: void;\n search: { query: string };\n loadMore: { page: number };\n create: { value: string };\n clear: { clearedSelection: boolean; clearedSearch: boolean };\n }>();\n\n let selectRef: HTMLElement;\n let internalValue: string | number | (string | number)[] | undefined = defaultValue;\n\n // Stable wrapper to handle optionRenderer updates without triggering infinite loops\n const resolvedOptionRenderer = (item: SelectItem, index: number, helpers: any) => {\n return optionRenderer ? optionRenderer(item, index, helpers) : document.createElement('div');\n };\n\n // Check if component is controlled\n $: isControlled = value !== undefined;\n $: currentValue = isControlled ? value : internalValue;\n\n // Event handlers\n function handleSelect(e: Event) {\n const customEvent = e as CustomEvent<SelectEventDetail>;\n const { item, index } = customEvent.detail;\n dispatch('select', { item: item as SelectItem, index });\n }\n\n function handleChange(e: Event) {\n const customEvent = e as CustomEvent<ChangeEventDetail>;\n const { selectedItems, selectedValues } = customEvent.detail;\n\n const values = selectedValues as (string | number)[];\n\n // Update internal value in uncontrolled mode\n if (!isControlled) {\n internalValue = multiple ? values : values[0];\n }\n\n // Emit change event\n const newValue = multiple ? values : values[0];\n value = newValue; // Update binding\n dispatch('change', { value: newValue, selectedItems: selectedItems as SelectItem[] });\n }\n\n function handleOpen() {\n dispatch('open');\n }\n\n function handleClose() {\n dispatch('close');\n }\n\n function handleSearch(e: Event) {\n const customEvent = e as CustomEvent<SearchEventDetail>;\n dispatch('search', { query: customEvent.detail.query });\n }\n\n function handleLoadMore(e: Event) {\n const customEvent = e as CustomEvent<LoadMoreEventDetail>;\n dispatch('loadMore', { page: customEvent.detail.page });\n }\n\n function handleCreate(e: Event) {\n const customEvent = e as CustomEvent<{ value: string }>;\n dispatch('create', { value: customEvent.detail.value });\n }\n\n function handleClear(e: Event) {\n const customEvent = e as CustomEvent<ClearEventDetail>;\n dispatch('clear', {\n clearedSelection: customEvent.detail.clearedSelection,\n clearedSearch: customEvent.detail.clearedSearch,\n });\n }\n\n function updateConfig() {\n if (!selectRef) return;\n (selectRef as any).updateConfig?.({\n searchable,\n placeholder,\n enabled: !disabled,\n selection: {\n mode: multiple ? 'multi' : 'single',\n maxSelections,\n },\n infiniteScroll: {\n enabled: infiniteScroll,\n pageSize,\n },\n clearControl: {\n enabled: clearable,\n clearSelection: clearSelectionOnClear,\n clearSearch: clearSearchOnClear,\n ariaLabel: clearAriaLabel,\n icon: clearIcon,\n },\n });\n }\n\n onMount(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Set initial attributes\n if (placeholder) element.setAttribute('placeholder', placeholder);\n if (disabled) element.setAttribute('disabled', '');\n if (required) element.setAttribute('required', '');\n if (error) element.setAttribute('error', '');\n if (searchable) element.setAttribute('searchable', '');\n if (multiple) element.setAttribute('multiple', '');\n if (virtualized) element.setAttribute('virtualized', '');\n if (infiniteScroll) element.setAttribute('infinite-scroll', '');\n if (pageSize) element.setAttribute('page-size', String(pageSize));\n if (maxSelections) element.setAttribute('max-selections', String(maxSelections));\n if (placement) element.setAttribute('placement', placement);\n\n if (optionRenderer) {\n (element as any).optionRenderer = resolvedOptionRenderer;\n }\n\n // Set initial items\n if (items?.length) {\n // Auto-convert flat items with `group` property into groupedItems\n const first = items[0];\n if (first && (first as any).group !== undefined) {\n const map = new Map<string, any[]>();\n items.forEach((it: any) => {\n const g = it.group ?? 'Ungrouped';\n if (!map.has(g)) map.set(g, []);\n map.get(g)!.push(it);\n });\n const groups = Array.from(map.entries()).map(([label, options]) => ({ label, options }));\n (element as any).setGroupedItems(groups);\n } else {\n (element as any).setItems(items);\n }\n }\n if (groupedItems?.length) {\n (element as any).setGroupedItems(groupedItems);\n }\n\n // Set initial value\n if (currentValue !== undefined) {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (element as any).setSelectedValues(values);\n }\n\n // Add event listeners\n element.addEventListener('select', handleSelect as EventListener);\n element.addEventListener('change', handleChange as EventListener);\n element.addEventListener('open', handleOpen as EventListener);\n element.addEventListener('close', handleClose as EventListener);\n element.addEventListener('search', handleSearch as EventListener);\n element.addEventListener('loadMore', handleLoadMore as EventListener);\n element.addEventListener('create', handleCreate as EventListener);\n element.addEventListener('clear', handleClear as EventListener);\n\n updateConfig();\n });\n\n onDestroy(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Remove event listeners\n element.removeEventListener('select', handleSelect as EventListener);\n element.removeEventListener('change', handleChange as EventListener);\n element.removeEventListener('open', handleOpen as EventListener);\n element.removeEventListener('close', handleClose as EventListener);\n element.removeEventListener('search', handleSearch as EventListener);\n element.removeEventListener('loadMore', handleLoadMore as EventListener);\n element.removeEventListener('create', handleCreate as EventListener);\n element.removeEventListener('clear', handleClear as EventListener);\n });\n\n // Reactive updates\n $: if (selectRef && items) {\n (selectRef as any).setItems(items);\n }\n\n $: if (selectRef && groupedItems) {\n (selectRef as any).setGroupedItems(groupedItems);\n }\n\n $: if (selectRef && currentValue !== undefined) {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (selectRef as any).setSelectedValues(values);\n }\n\n $: if (selectRef) {\n if (placeholder) selectRef.setAttribute('placeholder', placeholder);\n if (disabled) {\n selectRef.setAttribute('disabled', '');\n } else {\n selectRef.removeAttribute('disabled');\n }\n if (searchable) {\n selectRef.setAttribute('searchable', '');\n } else {\n selectRef.removeAttribute('searchable');\n }\n if (multiple) {\n selectRef.setAttribute('multiple', '');\n } else {\n selectRef.removeAttribute('multiple');\n }\n if (virtualized) {\n selectRef.setAttribute('virtualized', '');\n } else {\n selectRef.removeAttribute('virtualized');\n }\n\n if (optionRenderer) {\n if ((selectRef as any).optionRenderer !== resolvedOptionRenderer) {\n (selectRef as any).optionRenderer = resolvedOptionRenderer;\n }\n } else if ((selectRef as any).optionRenderer === resolvedOptionRenderer) {\n (selectRef as any).optionRenderer = undefined;\n }\n }\n\n $: if (selectRef) {\n updateConfig();\n }\n\n // Public methods\n export function open() {\n (selectRef as any)?.open();\n }\n\n export function close() {\n (selectRef as any)?.close();\n }\n\n export function focus() {\n selectRef?.focus();\n }\n\n export function setItems(newItems: SelectItem[]) {\n (selectRef as any)?.setItems(newItems);\n }\n\n export function setGroupedItems(groups: GroupedItem[]) {\n (selectRef as any)?.setGroupedItems(groups);\n }\n\n export function clear() {\n (selectRef as any)?.setSelectedValues([]);\n if (!isControlled) {\n internalValue = multiple ? [] : undefined;\n }\n const newValue = multiple ? [] : '';\n value = newValue as any;\n dispatch('change', { value: newValue as any, selectedItems: [] });\n }\n</script>\n\n<enhanced-select\n bind:this={selectRef}\n class={className}\n {style}\n/>\n\n<style>\n /* Component uses web component styling from @smilodon/core */\n</style>\n"],"names":["ctx","element"],"mappings":"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","x_google_ignoreList":[0,1]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smilodon/svelte",
3
- "version": "1.4.5",
3
+ "version": "1.4.10",
4
4
  "description": "Production-ready, accessible select component for Svelte - part of the Smilodon UI toolkit",
5
5
  "type": "module",
6
6
  "svelte": "./dist/index.mjs",
@@ -26,7 +26,7 @@
26
26
  "prepublishOnly": "npm run build"
27
27
  },
28
28
  "peerDependencies": {
29
- "@smilodon/core": "^1.4.4",
29
+ "@smilodon/core": "^1.4.10",
30
30
  "svelte": ">=3.0.0 || >=4.0.0 || >=5.0.0"
31
31
  },
32
32
  "devDependencies": {