@smilodon/svelte 1.4.4 → 1.4.6

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
@@ -82,6 +82,35 @@ npm install @smilodon/svelte @smilodon/core
82
82
  <Select {items} bind:value={selectedValue} placeholder="Select a fruit..." />
83
83
  ```
84
84
 
85
+ ## Clear Control (Reset Selected/Search Value)
86
+
87
+ ```svelte
88
+ <script lang="ts">
89
+ import { Select } from '@smilodon/svelte';
90
+
91
+ let value = '';
92
+ const items = [
93
+ { value: 'js', label: 'JavaScript' },
94
+ { value: 'py', label: 'Python' },
95
+ { value: 'rs', label: 'Rust' },
96
+ ];
97
+ </script>
98
+
99
+ <Select
100
+ {items}
101
+ bind:value
102
+ searchable
103
+ clearable
104
+ clearSelectionOnClear
105
+ clearSearchOnClear
106
+ clearAriaLabel="Clear selected and searched values"
107
+ clearIcon="✕"
108
+ on:clear={(e) => console.log('cleared', e.detail)}
109
+ />
110
+ ```
111
+
112
+ Styling hooks: `::part(clear-button)` and `::part(clear-icon)` plus `--select-clear-*` CSS tokens.
113
+
85
114
  ## Examples
86
115
 
87
116
  ### Searchable Select
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 n(t){let n;return{c(){n=e.element("enhanced-select"),e.set_custom_element_data(n,"class",t[0]),e.set_custom_element_data(n,"style",t[1])},m(i,r){e.insert(i,n,r),t[28](n)},p(t,i){1&i[0]&&e.set_custom_element_data(n,"class",t[0]),2&i[0]&&e.set_custom_element_data(n,"style",t[1])},i:e.noop,o:e.noop,d(i){i&&e.detach(n),t[28](null)}}}function i(n,i,r){let s,l,{items:o=[]}=i,{groupedItems:a}=i,{value:u}=i,{defaultValue:d}=i,{multiple:c=!1}=i,{searchable:m=!1}=i,{placeholder:p=""}=i,{disabled:v=!1}=i,{required:b=!1}=i,{error:f=!1}=i,{infiniteScroll:h=!1}=i,{pageSize:g=50}=i,{virtualized:$=!0}=i,{maxSelections:A}=i,{placement:y="auto"}=i,{className:S=""}=i,{style:_=""}=i,{optionRenderer:I}=i;const x=t.createEventDispatcher();let E,L=d;const z=(e,t,n)=>I?I(e,t,n):document.createElement("div");function q(e){const t=e,{item:n,index:i}=t.detail;x("select",{item:n,index:i})}function R(e){const t=e,{selectedItems:n,selectedValues:i}=t.detail,l=i;s||r(25,L=c?l:l[0]);const o=c?l:l[0];r(3,u=o),x("change",{value:o,selectedItems:n})}function V(){x("open")}function w(){x("close")}function G(e){x("search",{query:e.detail.query})}function M(e){x("loadMore",{page:e.detail.page})}function N(e){x("create",{value:e.detail.value})}return t.onMount(()=>{if(!E)return;const e=E;if(p&&e.setAttribute("placeholder",p),v&&e.setAttribute("disabled",""),b&&e.setAttribute("required",""),f&&e.setAttribute("error",""),m&&e.setAttribute("searchable",""),c&&e.setAttribute("multiple",""),$&&e.setAttribute("virtualized",""),h&&e.setAttribute("infinite-scroll",""),g&&e.setAttribute("page-size",String(g)),A&&e.setAttribute("max-selections",String(A)),y&&e.setAttribute("placement",y),I&&(e.optionRenderer=z),(null==o?void 0:o.length)&&e.setItems(o),(null==a?void 0:a.length)&&e.setGroupedItems(a),void 0!==l){const t=Array.isArray(l)?l:[l];e.setSelectedValues(t)}e.addEventListener("select",q),e.addEventListener("change",R),e.addEventListener("open",V),e.addEventListener("close",w),e.addEventListener("search",G),e.addEventListener("loadMore",M),e.addEventListener("create",N)}),t.onDestroy(()=>{if(!E)return;const e=E;e.removeEventListener("select",q),e.removeEventListener("change",R),e.removeEventListener("open",V),e.removeEventListener("close",w),e.removeEventListener("search",G),e.removeEventListener("loadMore",M),e.removeEventListener("create",N)}),n.$$set=e=>{"items"in e&&r(4,o=e.items),"groupedItems"in e&&r(5,a=e.groupedItems),"value"in e&&r(3,u=e.value),"defaultValue"in e&&r(6,d=e.defaultValue),"multiple"in e&&r(7,c=e.multiple),"searchable"in e&&r(8,m=e.searchable),"placeholder"in e&&r(9,p=e.placeholder),"disabled"in e&&r(10,v=e.disabled),"required"in e&&r(11,b=e.required),"error"in e&&r(12,f=e.error),"infiniteScroll"in e&&r(13,h=e.infiniteScroll),"pageSize"in e&&r(14,g=e.pageSize),"virtualized"in e&&r(15,$=e.virtualized),"maxSelections"in e&&r(16,A=e.maxSelections),"placement"in e&&r(17,y=e.placement),"className"in e&&r(0,S=e.className),"style"in e&&r(1,_=e.style),"optionRenderer"in e&&r(18,I=e.optionRenderer)},n.$$.update=()=>{if(8&n.$$.dirty[0]&&r(26,s=void 0!==u),100663304&n.$$.dirty[0]&&r(27,l=s?u:L),296836&n.$$.dirty[0]&&E&&(p&&E.setAttribute("placeholder",p),v?E.setAttribute("disabled",""):E.removeAttribute("disabled"),m?E.setAttribute("searchable",""):E.removeAttribute("searchable"),c?E.setAttribute("multiple",""):E.removeAttribute("multiple"),$?E.setAttribute("virtualized",""):E.removeAttribute("virtualized"),I?E.optionRenderer!==z&&r(2,E.optionRenderer=z,E):E.optionRenderer===z&&r(2,E.optionRenderer=void 0,E)),20&n.$$.dirty[0]&&E&&o&&E.setItems(o),36&n.$$.dirty[0]&&E&&a&&E.setGroupedItems(a),134217732&n.$$.dirty[0]&&E&&void 0!==l){const e=Array.isArray(l)?l:[l];E.setSelectedValues(e)}},[S,_,E,u,o,a,d,c,m,p,v,b,f,h,g,$,A,y,I,function(){null==E||E.open()},function(){null==E||E.close()},function(){null==E||E.focus()},function(e){null==E||E.setItems(e)},function(e){null==E||E.setGroupedItems(e)},function(){null==E||E.setSelectedValues([]),s||r(25,L=c?[]:void 0);const e=c?[]:"";r(3,u=e),x("change",{value:e,selectedItems:[]})},L,s,l,function(t){e.binding_callbacks[t?"unshift":"push"](()=>{E=t,r(2,E),r(9,p),r(10,v),r(8,m),r(7,c),r(15,$),r(18,I)})}]}"undefined"!=typeof window&&(window.__svelte||(window.__svelte={v:new Set})).v.add("4");class r extends e.SvelteComponent{constructor(t){super(),e.init(this,t,i,n,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,optionRenderer:18,open:19,close:20,focus:21,setItems:22,setGroupedItems:23,clear:24},null,[-1,-1])}get open(){return this.$$.ctx[19]}get close(){return this.$$.ctx[20]}get focus(){return this.$$.ctx[21]}get setItems(){return this.$$.ctx[22]}get setGroupedItems(){return this.$$.ctx[23]}get clear(){return this.$$.ctx[24]}}exports.Select=r;
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 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 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 }>();\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 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 });\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 });\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 // 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","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","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
@@ -23,7 +23,7 @@ function create_fragment(ctx) {
23
23
  },
24
24
  m(target, anchor) {
25
25
  insert(target, enhanced_select, anchor);
26
- ctx[28](enhanced_select);
26
+ ctx[33](enhanced_select);
27
27
  },
28
28
  p(ctx2, dirty) {
29
29
  if (dirty[0] & /*className*/
@@ -51,7 +51,7 @@ function create_fragment(ctx) {
51
51
  if (detaching) {
52
52
  detach(enhanced_select);
53
53
  }
54
- ctx[28](null);
54
+ ctx[33](null);
55
55
  }
56
56
  };
57
57
  }
@@ -75,6 +75,11 @@ function instance($$self, $$props, $$invalidate) {
75
75
  let { placement = "auto" } = $$props;
76
76
  let { className = "" } = $$props;
77
77
  let { style = "" } = $$props;
78
+ let { clearable = false } = $$props;
79
+ let { clearSelectionOnClear = true } = $$props;
80
+ let { clearSearchOnClear = true } = $$props;
81
+ let { clearAriaLabel = "Clear selection and search" } = $$props;
82
+ let { clearIcon = "×" } = $$props;
78
83
  let { optionRenderer = void 0 } = $$props;
79
84
  const dispatch = createEventDispatcher();
80
85
  let selectRef;
@@ -92,7 +97,7 @@ function instance($$self, $$props, $$invalidate) {
92
97
  const { selectedItems, selectedValues } = customEvent.detail;
93
98
  const values = selectedValues;
94
99
  if (!isControlled) {
95
- $$invalidate(25, internalValue = multiple ? values : values[0]);
100
+ $$invalidate(30, internalValue = multiple ? values : values[0]);
96
101
  }
97
102
  const newValue = multiple ? values : values[0];
98
103
  $$invalidate(3, value = newValue);
@@ -116,6 +121,34 @@ function instance($$self, $$props, $$invalidate) {
116
121
  const customEvent = e;
117
122
  dispatch("create", { value: customEvent.detail.value });
118
123
  }
124
+ function handleClear(e) {
125
+ const customEvent = e;
126
+ dispatch("clear", {
127
+ clearedSelection: customEvent.detail.clearedSelection,
128
+ clearedSearch: customEvent.detail.clearedSearch
129
+ });
130
+ }
131
+ function updateConfig() {
132
+ var _a;
133
+ if (!selectRef) return;
134
+ (_a = selectRef.updateConfig) == null ? void 0 : _a.call(selectRef, {
135
+ searchable,
136
+ placeholder,
137
+ enabled: !disabled,
138
+ selection: {
139
+ mode: multiple ? "multi" : "single",
140
+ maxSelections
141
+ },
142
+ infiniteScroll: { enabled: infiniteScroll, pageSize },
143
+ clearControl: {
144
+ enabled: clearable,
145
+ clearSelection: clearSelectionOnClear,
146
+ clearSearch: clearSearchOnClear,
147
+ ariaLabel: clearAriaLabel,
148
+ icon: clearIcon
149
+ }
150
+ });
151
+ }
119
152
  onMount(() => {
120
153
  if (!selectRef) return;
121
154
  const element2 = selectRef;
@@ -134,7 +167,19 @@ function instance($$self, $$props, $$invalidate) {
134
167
  element2.optionRenderer = resolvedOptionRenderer;
135
168
  }
136
169
  if (items == null ? void 0 : items.length) {
137
- 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
+ }
138
183
  }
139
184
  if (groupedItems == null ? void 0 : groupedItems.length) {
140
185
  element2.setGroupedItems(groupedItems);
@@ -150,6 +195,8 @@ function instance($$self, $$props, $$invalidate) {
150
195
  element2.addEventListener("search", handleSearch);
151
196
  element2.addEventListener("loadMore", handleLoadMore);
152
197
  element2.addEventListener("create", handleCreate);
198
+ element2.addEventListener("clear", handleClear);
199
+ updateConfig();
153
200
  });
154
201
  onDestroy(() => {
155
202
  if (!selectRef) return;
@@ -161,6 +208,7 @@ function instance($$self, $$props, $$invalidate) {
161
208
  element2.removeEventListener("search", handleSearch);
162
209
  element2.removeEventListener("loadMore", handleLoadMore);
163
210
  element2.removeEventListener("create", handleCreate);
211
+ element2.removeEventListener("clear", handleClear);
164
212
  });
165
213
  function open() {
166
214
  selectRef == null ? void 0 : selectRef.open();
@@ -180,7 +228,7 @@ function instance($$self, $$props, $$invalidate) {
180
228
  function clear() {
181
229
  selectRef == null ? void 0 : selectRef.setSelectedValues([]);
182
230
  if (!isControlled) {
183
- $$invalidate(25, internalValue = multiple ? [] : void 0);
231
+ $$invalidate(30, internalValue = multiple ? [] : void 0);
184
232
  }
185
233
  const newValue = multiple ? [] : "";
186
234
  $$invalidate(3, value = newValue);
@@ -189,7 +237,7 @@ function instance($$self, $$props, $$invalidate) {
189
237
  function enhanced_select_binding($$value) {
190
238
  binding_callbacks[$$value ? "unshift" : "push"](() => {
191
239
  selectRef = $$value;
192
- $$invalidate(2, selectRef), $$invalidate(9, placeholder), $$invalidate(10, disabled), $$invalidate(8, searchable), $$invalidate(7, multiple), $$invalidate(15, virtualized), $$invalidate(18, optionRenderer);
240
+ $$invalidate(2, selectRef), $$invalidate(9, placeholder), $$invalidate(10, disabled), $$invalidate(8, searchable), $$invalidate(7, multiple), $$invalidate(15, virtualized), $$invalidate(23, optionRenderer);
193
241
  });
194
242
  }
195
243
  $$self.$$set = ($$props2) => {
@@ -210,19 +258,25 @@ function instance($$self, $$props, $$invalidate) {
210
258
  if ("placement" in $$props2) $$invalidate(17, placement = $$props2.placement);
211
259
  if ("className" in $$props2) $$invalidate(0, className = $$props2.className);
212
260
  if ("style" in $$props2) $$invalidate(1, style = $$props2.style);
213
- if ("optionRenderer" in $$props2) $$invalidate(18, optionRenderer = $$props2.optionRenderer);
261
+ if ("clearable" in $$props2) $$invalidate(18, clearable = $$props2.clearable);
262
+ if ("clearSelectionOnClear" in $$props2) $$invalidate(19, clearSelectionOnClear = $$props2.clearSelectionOnClear);
263
+ if ("clearSearchOnClear" in $$props2) $$invalidate(20, clearSearchOnClear = $$props2.clearSearchOnClear);
264
+ if ("clearAriaLabel" in $$props2) $$invalidate(21, clearAriaLabel = $$props2.clearAriaLabel);
265
+ if ("clearIcon" in $$props2) $$invalidate(22, clearIcon = $$props2.clearIcon);
266
+ if ("optionRenderer" in $$props2) $$invalidate(23, optionRenderer = $$props2.optionRenderer);
214
267
  };
215
268
  $$self.$$.update = () => {
216
269
  if ($$self.$$.dirty[0] & /*value*/
217
270
  8) {
218
- $$invalidate(26, isControlled = value !== void 0);
271
+ $$invalidate(31, isControlled = value !== void 0);
219
272
  }
220
- if ($$self.$$.dirty[0] & /*isControlled, value, internalValue*/
221
- 100663304) {
222
- $$invalidate(27, currentValue = isControlled ? value : internalValue);
273
+ if ($$self.$$.dirty[0] & /*value, internalValue*/
274
+ 1073741832 | $$self.$$.dirty[1] & /*isControlled*/
275
+ 1) {
276
+ $$invalidate(32, currentValue = isControlled ? value : internalValue);
223
277
  }
224
278
  if ($$self.$$.dirty[0] & /*selectRef, placeholder, disabled, searchable, multiple, virtualized, optionRenderer*/
225
- 296836) {
279
+ 8423300) {
226
280
  if (selectRef) {
227
281
  if (placeholder) selectRef.setAttribute("placeholder", placeholder);
228
282
  if (disabled) {
@@ -266,13 +320,20 @@ function instance($$self, $$props, $$invalidate) {
266
320
  selectRef.setGroupedItems(groupedItems);
267
321
  }
268
322
  }
269
- if ($$self.$$.dirty[0] & /*selectRef, currentValue*/
270
- 134217732) {
323
+ if ($$self.$$.dirty[0] & /*selectRef*/
324
+ 4 | $$self.$$.dirty[1] & /*currentValue*/
325
+ 2) {
271
326
  if (selectRef && currentValue !== void 0) {
272
327
  const values = Array.isArray(currentValue) ? currentValue : [currentValue];
273
328
  selectRef.setSelectedValues(values);
274
329
  }
275
330
  }
331
+ if ($$self.$$.dirty[0] & /*selectRef*/
332
+ 4) {
333
+ if (selectRef) {
334
+ updateConfig();
335
+ }
336
+ }
276
337
  };
277
338
  return [
278
339
  className,
@@ -293,6 +354,11 @@ function instance($$self, $$props, $$invalidate) {
293
354
  virtualized,
294
355
  maxSelections,
295
356
  placement,
357
+ clearable,
358
+ clearSelectionOnClear,
359
+ clearSearchOnClear,
360
+ clearAriaLabel,
361
+ clearIcon,
296
362
  optionRenderer,
297
363
  open,
298
364
  close,
@@ -333,35 +399,40 @@ class Select extends SvelteComponent {
333
399
  placement: 17,
334
400
  className: 0,
335
401
  style: 1,
336
- optionRenderer: 18,
337
- open: 19,
338
- close: 20,
339
- focus: 21,
340
- setItems: 22,
341
- setGroupedItems: 23,
342
- clear: 24
402
+ clearable: 18,
403
+ clearSelectionOnClear: 19,
404
+ clearSearchOnClear: 20,
405
+ clearAriaLabel: 21,
406
+ clearIcon: 22,
407
+ optionRenderer: 23,
408
+ open: 24,
409
+ close: 25,
410
+ focus: 26,
411
+ setItems: 27,
412
+ setGroupedItems: 28,
413
+ clear: 29
343
414
  },
344
415
  null,
345
416
  [-1, -1]
346
417
  );
347
418
  }
348
419
  get open() {
349
- return this.$$.ctx[19];
420
+ return this.$$.ctx[24];
350
421
  }
351
422
  get close() {
352
- return this.$$.ctx[20];
423
+ return this.$$.ctx[25];
353
424
  }
354
425
  get focus() {
355
- return this.$$.ctx[21];
426
+ return this.$$.ctx[26];
356
427
  }
357
428
  get setItems() {
358
- return this.$$.ctx[22];
429
+ return this.$$.ctx[27];
359
430
  }
360
431
  get setGroupedItems() {
361
- return this.$$.ctx[23];
432
+ return this.$$.ctx[28];
362
433
  }
363
434
  get clear() {
364
- return this.$$.ctx[24];
435
+ return this.$$.ctx[29];
365
436
  }
366
437
  }
367
438
  export {
@@ -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 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 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 }>();\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 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 });\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 });\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 // 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]}
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.4",
3
+ "version": "1.4.6",
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.9",
30
30
  "svelte": ">=3.0.0 || >=4.0.0 || >=5.0.0"
31
31
  },
32
32
  "devDependencies": {