@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 +29 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +98 -27
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
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
|
|
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -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[
|
|
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[
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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 ("
|
|
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(
|
|
271
|
+
$$invalidate(31, isControlled = value !== void 0);
|
|
219
272
|
}
|
|
220
|
-
if ($$self.$$.dirty[0] & /*
|
|
221
|
-
|
|
222
|
-
|
|
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
|
-
|
|
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
|
|
270
|
-
|
|
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
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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[
|
|
420
|
+
return this.$$.ctx[24];
|
|
350
421
|
}
|
|
351
422
|
get close() {
|
|
352
|
-
return this.$$.ctx[
|
|
423
|
+
return this.$$.ctx[25];
|
|
353
424
|
}
|
|
354
425
|
get focus() {
|
|
355
|
-
return this.$$.ctx[
|
|
426
|
+
return this.$$.ctx[26];
|
|
356
427
|
}
|
|
357
428
|
get setItems() {
|
|
358
|
-
return this.$$.ctx[
|
|
429
|
+
return this.$$.ctx[27];
|
|
359
430
|
}
|
|
360
431
|
get setGroupedItems() {
|
|
361
|
-
return this.$$.ctx[
|
|
432
|
+
return this.$$.ctx[28];
|
|
362
433
|
}
|
|
363
434
|
get clear() {
|
|
364
|
-
return this.$$.ctx[
|
|
435
|
+
return this.$$.ctx[29];
|
|
365
436
|
}
|
|
366
437
|
}
|
|
367
438
|
export {
|
package/dist/index.mjs.map
CHANGED
|
@@ -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.
|
|
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.
|
|
29
|
+
"@smilodon/core": "^1.4.9",
|
|
30
30
|
"svelte": ">=3.0.0 || >=4.0.0 || >=5.0.0"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|