@smilodon/svelte 1.4.10 → 1.8.0

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
@@ -9,7 +9,7 @@ Production-ready, accessible select component for Svelte applications. Part of t
9
9
  👉 **[Complete Svelte Guide](./COMPLETE-GUIDE.md)** 👈
10
10
 
11
11
  The complete guide includes:
12
- - ✅ All 60+ CSS variables for complete customization
12
+ - ✅ Complete styling token coverage for colors, layout, chips, motion, and accessibility
13
13
  - ✅ Svelte-specific patterns (reactive statements, stores, bind:value)
14
14
  - ✅ Complete API reference with TypeScript types
15
15
  - ✅ Svelte stores integration (writable, derived)
@@ -64,6 +64,34 @@ The complete guide includes:
64
64
  npm install @smilodon/svelte @smilodon/core
65
65
  ```
66
66
 
67
+ ## SvelteKit / SSR Notes
68
+
69
+ The Svelte adapter waits for `enhanced-select` to be defined during `onMount()`, so it is safe to use in SvelteKit pages as long as imperative browser-only code stays inside lifecycle hooks.
70
+
71
+ ### Recommended pattern
72
+
73
+ ```svelte
74
+ <script lang="ts">
75
+ import { onMount } from 'svelte';
76
+ import { Select } from '@smilodon/svelte';
77
+
78
+ let items = [];
79
+ let value = [];
80
+
81
+ onMount(async () => {
82
+ items = await fetch('/api/frameworks').then((response) => response.json());
83
+ });
84
+ </script>
85
+
86
+ <Select {items} bind:value searchable multiple clearable />
87
+ ```
88
+
89
+ ### SSR guidance
90
+
91
+ - Avoid direct `window`, `document`, or custom-element access outside `onMount()`.
92
+ - Use `bind:value` for regular selection flow and exported instance methods for imperative control.
93
+ - Prefer `optionRenderer` when you need DOM-driven custom options and plain markup when you do not.
94
+
67
95
  ## Quick Start
68
96
 
69
97
  ```svelte
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("svelte/internal"),t=require("svelte");function r(t){let r;return{c(){r=e.element("enhanced-select"),e.set_custom_element_data(r,"class",t[0]),e.set_custom_element_data(r,"style",t[1])},m(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;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),require("@smilodon/core");const e=require("svelte/internal"),t=require("svelte");function i(t){let i;return{c(){i=e.element("enhanced-select"),e.set_custom_element_data(i,"class",t[0]),e.set_custom_element_data(i,"style",t[1])},m(n,a){e.insert(n,i,a),t[47](i)},p(t,n){1&n[0]&&e.set_custom_element_data(i,"class",t[0]),2&n[0]&&e.set_custom_element_data(i,"style",t[1])},i:e.noop,o:e.noop,d(n){n&&e.detach(i),t[47](null)}}}function n(i,n,a){let r,l,{items:s=[]}=n,{groupedItems:c}=n,{value:o}=n,{defaultValue:u}=n,{multiple:d=!1}=n,{searchable:m=!1}=n,{placeholder:p=""}=n,{disabled:v=!1}=n,{required:g=!1}=n,{error:f=!1}=n,{infiniteScroll:h=!1}=n,{pageSize:b=50}=n,{virtualized:S=!0}=n,{maxSelections:$}=n,{placement:y="auto"}=n,{className:E=""}=n,{style:L=""}=n,{classMap:A}=n,{clearable:k=!1}=n,{clearSelectionOnClear:x=!0}=n,{clearSearchOnClear:M=!0}=n,{clearAriaLabel:I="Clear selection and search"}=n,{clearIcon:_="×"}=n,{optionRenderer:w}=n,{trackingEnabled:C=!1}=n,{trackEvents:R=!0}=n,{trackStyling:z=!0}=n,{trackLimitations:q=!0}=n,{emitDiagnostics:O=!1}=n,{trackingMaxEntries:V=200}=n,{limitationPolicies:D}=n,{autoMitigateRuntimeModeSwitch:P=!0}=n;const G=t.createEventDispatcher();let T,N=u;const K=(e,t,i)=>w?w(e,t,i):document.createElement("div");function j(e){const t=e,{item:i,index:n}=t.detail;G("select",{item:i,index:n})}function U(e){const t=e,{selectedItems:i,selectedValues:n}=t.detail,l=n;r||a(44,N=d?l:l[0]);const s=d?l:l[0];a(3,o=s),G("change",{value:s,selectedItems:i})}function B(){G("open")}function F(){G("close")}function H(e){G("search",{query:e.detail.query})}function J(e){G("loadMore",{page:e.detail.page})}function Q(e){G("create",{value:e.detail.value})}function W(e){const t=e;G("clear",{clearedSelection:t.detail.clearedSelection,clearedSearch:t.detail.clearedSearch})}function X(e){G("diagnostic",e.detail)}function Y(){var e;T&&(null==(e=T.updateConfig)||e.call(T,{searchable:m,placeholder:p,enabled:!v,selection:{mode:d?"multi":"single",maxSelections:$},infiniteScroll:{enabled:h,pageSize:b},clearControl:{enabled:k,clearSelection:x,clearSearch:M,ariaLabel:I,icon:_},tracking:{enabled:C,events:R,styling:z,limitations:q,emitDiagnostics:O,maxEntries:V},limitations:{policies:D,autoMitigateRuntimeModeSwitch:P}}))}return t.onMount(async()=>{if(!T)return;if(await customElements.whenDefined("enhanced-select"),!T)return;const e=T;if(p&&e.setAttribute("placeholder",p),v&&e.setAttribute("disabled",""),g&&e.setAttribute("required",""),f&&e.setAttribute("error",""),m&&e.setAttribute("searchable",""),d&&e.setAttribute("multiple",""),S&&e.setAttribute("virtualized",""),h&&e.setAttribute("infinite-scroll",""),b&&e.setAttribute("page-size",String(b)),$&&e.setAttribute("max-selections",String($)),y&&e.setAttribute("placement",y),w&&(e.optionRenderer=K),null==s?void 0:s.length){const t=s[0];if(t&&void 0!==t.group){const t=new Map;s.forEach(e=>{const i=e.group??"Ungrouped";t.has(i)||t.set(i,[]),t.get(i).push(e)});const i=Array.from(t.entries()).map(([e,t])=>({label:e,options:t}));e.setGroupedItems(i)}else e.setItems(s)}if((null==c?void 0:c.length)&&e.setGroupedItems(c),void 0!==l){const t=Array.isArray(l)?l:[l];e.setSelectedValues(t)}e.addEventListener("select",j),e.addEventListener("change",U),e.addEventListener("open",B),e.addEventListener("close",F),e.addEventListener("search",H),e.addEventListener("loadMore",J),e.addEventListener("create",Q),e.addEventListener("clear",W),e.addEventListener("diagnostic",X),Y()}),t.onDestroy(()=>{if(!T)return;const e=T;e.removeEventListener("select",j),e.removeEventListener("change",U),e.removeEventListener("open",B),e.removeEventListener("close",F),e.removeEventListener("search",H),e.removeEventListener("loadMore",J),e.removeEventListener("create",Q),e.removeEventListener("clear",W),e.removeEventListener("diagnostic",X)}),i.$$set=e=>{"items"in e&&a(4,s=e.items),"groupedItems"in e&&a(5,c=e.groupedItems),"value"in e&&a(3,o=e.value),"defaultValue"in e&&a(6,u=e.defaultValue),"multiple"in e&&a(7,d=e.multiple),"searchable"in e&&a(8,m=e.searchable),"placeholder"in e&&a(9,p=e.placeholder),"disabled"in e&&a(10,v=e.disabled),"required"in e&&a(11,g=e.required),"error"in e&&a(12,f=e.error),"infiniteScroll"in e&&a(13,h=e.infiniteScroll),"pageSize"in e&&a(14,b=e.pageSize),"virtualized"in e&&a(15,S=e.virtualized),"maxSelections"in e&&a(16,$=e.maxSelections),"placement"in e&&a(17,y=e.placement),"className"in e&&a(0,E=e.className),"style"in e&&a(1,L=e.style),"classMap"in e&&a(18,A=e.classMap),"clearable"in e&&a(19,k=e.clearable),"clearSelectionOnClear"in e&&a(20,x=e.clearSelectionOnClear),"clearSearchOnClear"in e&&a(21,M=e.clearSearchOnClear),"clearAriaLabel"in e&&a(22,I=e.clearAriaLabel),"clearIcon"in e&&a(23,_=e.clearIcon),"optionRenderer"in e&&a(24,w=e.optionRenderer),"trackingEnabled"in e&&a(25,C=e.trackingEnabled),"trackEvents"in e&&a(26,R=e.trackEvents),"trackStyling"in e&&a(27,z=e.trackStyling),"trackLimitations"in e&&a(28,q=e.trackLimitations),"emitDiagnostics"in e&&a(29,O=e.emitDiagnostics),"trackingMaxEntries"in e&&a(30,V=e.trackingMaxEntries),"limitationPolicies"in e&&a(31,D=e.limitationPolicies),"autoMitigateRuntimeModeSwitch"in e&&a(32,P=e.autoMitigateRuntimeModeSwitch)},i.$$.update=()=>{if(8&i.$$.dirty[0]&&a(45,r=void 0!==o),8&i.$$.dirty[0]|24576&i.$$.dirty[1]&&a(46,l=r?o:N),17074052&i.$$.dirty[0]&&T&&(p&&T.setAttribute("placeholder",p),v?T.setAttribute("disabled",""):T.removeAttribute("disabled"),m?T.setAttribute("searchable",""):T.removeAttribute("searchable"),d?T.setAttribute("multiple",""):T.removeAttribute("multiple"),S?T.setAttribute("virtualized",""):T.removeAttribute("virtualized"),w?T.optionRenderer!==K&&a(2,T.optionRenderer=K,T):T.optionRenderer===K&&a(2,T.optionRenderer=void 0,T),a(2,T.classMap=A,T)),20&i.$$.dirty[0]&&T&&s&&"function"==typeof T.setItems&&T.setItems(s),36&i.$$.dirty[0]&&T&&c&&"function"==typeof T.setGroupedItems&&T.setGroupedItems(c),4&i.$$.dirty[0]|32768&i.$$.dirty[1]&&T&&void 0!==l&&"function"==typeof T.setSelectedValues){const e=Array.isArray(l)?l:[l];T.setSelectedValues(e)}4&i.$$.dirty[0]&&T&&Y()},[E,L,T,o,s,c,u,d,m,p,v,g,f,h,b,S,$,y,A,k,x,M,I,_,w,C,R,z,q,O,V,D,P,function(){"function"==typeof(null==T?void 0:T.open)&&T.open()},function(){"function"==typeof(null==T?void 0:T.close)&&T.close()},function(){"function"==typeof(null==T?void 0:T.focus)&&T.focus()},function(e){null==T||T.setItems(e)},function(e){null==T||T.setGroupedItems(e)},function(){null==T||T.setSelectedValues([]),r||a(44,N=d?[]:void 0);const e=d?[]:"";a(3,o=e),G("change",{value:e,selectedItems:[]})},function(){var e;return null==(e=null==T?void 0:T.getCapabilities)?void 0:e.call(T)},function(){var e;return(null==(e=null==T?void 0:T.getKnownLimitations)?void 0:e.call(T))||[]},function(){var e;return(null==(e=null==T?void 0:T.getTrackingSnapshot)?void 0:e.call(T))||{events:[],styles:[],limitations:[]}},function(e){var t;null==(t=null==T?void 0:T.clearTracking)||t.call(T,e)},function(e){var t;null==(t=null==T?void 0:T.setLimitationPolicies)||t.call(T,e)},N,r,l,function(t){e.binding_callbacks[t?"unshift":"push"](()=>{T=t,a(2,T),a(9,p),a(10,v),a(8,m),a(7,d),a(15,S),a(24,w),a(18,A)})}]}"undefined"!=typeof window&&(window.__svelte||(window.__svelte={v:new Set})).v.add("4");class a extends e.SvelteComponent{constructor(t){super(),e.init(this,t,n,i,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,classMap:18,clearable:19,clearSelectionOnClear:20,clearSearchOnClear:21,clearAriaLabel:22,clearIcon:23,optionRenderer:24,trackingEnabled:25,trackEvents:26,trackStyling:27,trackLimitations:28,emitDiagnostics:29,trackingMaxEntries:30,limitationPolicies:31,autoMitigateRuntimeModeSwitch:32,open:33,close:34,focus:35,setItems:36,setGroupedItems:37,clear:38,getCapabilities:39,getKnownLimitations:40,getTrackingSnapshot:41,clearTracking:42,setLimitationPolicies:43},null,[-1,-1])}get open(){return this.$$.ctx[33]}get close(){return this.$$.ctx[34]}get focus(){return this.$$.ctx[35]}get setItems(){return this.$$.ctx[36]}get setGroupedItems(){return this.$$.ctx[37]}get clear(){return this.$$.ctx[38]}get getCapabilities(){return this.$$.ctx[39]}get getKnownLimitations(){return this.$$.ctx[40]}get getTrackingSnapshot(){return this.$$.ctx[41]}get clearTracking(){return this.$$.ctx[42]}get setLimitationPolicies(){return this.$$.ctx[43]}}exports.Select=a;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/Select.svelte","../../../node_modules/svelte/src/runtime/internal/disclose-version/index.js","../../../node_modules/svelte/src/shared/version.js"],"sourcesContent":["<!--\n Smilodon Select Component for Svelte\n \n A production-ready, accessible select component with advanced features:\n - Single and multi-select modes\n - Searchable with client or server-side filtering\n - Infinite scroll and virtual scrolling for large datasets\n - Grouped options\n - Custom rendering\n - Full keyboard navigation\n - WCAG 2.1 AAA compliant\n \n @example\n <Select\n {items}\n bind:value={selectedValue}\n searchable\n placeholder=\"Select an option...\"\n />\n-->\n\n<script lang=\"ts\" context=\"module\">\n export interface SelectItem {\n value: string | number;\n label: string;\n disabled?: boolean;\n group?: string;\n [key: string]: any;\n }\n</script>\n\n<script lang=\"ts\">\n import { onMount, onDestroy, createEventDispatcher } from 'svelte';\n import type {\n SelectEventDetail,\n OpenEventDetail,\n CloseEventDetail,\n SearchEventDetail,\n ChangeEventDetail,\n LoadMoreEventDetail,\n ClearEventDetail,\n GroupedItem,\n } from '@smilodon/core';\n\n // Props\n export let items: SelectItem[] = [];\n export let groupedItems: GroupedItem[] | undefined = undefined;\n export let value: string | number | (string | number)[] | undefined = undefined;\n export let defaultValue: string | number | (string | number)[] | undefined = undefined;\n export let multiple: boolean = false;\n export let searchable: boolean = false;\n export let placeholder: string = '';\n export let disabled: boolean = false;\n export let required: boolean = false;\n export let error: boolean = false;\n export let infiniteScroll: boolean = false;\n export let pageSize: number = 50;\n export let virtualized: boolean = true;\n export let maxSelections: number | undefined = undefined;\n export let placement: 'bottom' | 'top' | 'auto' = 'auto';\n export let className: string = '';\n export let style: string = '';\n export let clearable: boolean = false;\n export let clearSelectionOnClear: boolean = true;\n export let clearSearchOnClear: boolean = true;\n export let clearAriaLabel: string = 'Clear selection and search';\n export let clearIcon: string = '×';\n export let optionRenderer: ((item: SelectItem, index: number, helpers: any) => HTMLElement) | undefined = undefined;\n\n const dispatch = createEventDispatcher<{\n change: { value: string | number | (string | number)[]; selectedItems: SelectItem[] };\n select: { item: SelectItem; index: number };\n open: void;\n close: void;\n search: { query: string };\n loadMore: { page: number };\n create: { value: string };\n clear: { clearedSelection: boolean; clearedSearch: boolean };\n }>();\n\n let selectRef: HTMLElement;\n let internalValue: string | number | (string | number)[] | undefined = defaultValue;\n\n // Stable wrapper to handle optionRenderer updates without triggering infinite loops\n const resolvedOptionRenderer = (item: SelectItem, index: number, helpers: any) => {\n return optionRenderer ? optionRenderer(item, index, helpers) : document.createElement('div');\n };\n\n // Check if component is controlled\n $: isControlled = value !== undefined;\n $: currentValue = isControlled ? value : internalValue;\n\n // Event handlers\n function handleSelect(e: Event) {\n const customEvent = e as CustomEvent<SelectEventDetail>;\n const { item, index } = customEvent.detail;\n dispatch('select', { item: item as SelectItem, index });\n }\n\n function handleChange(e: Event) {\n const customEvent = e as CustomEvent<ChangeEventDetail>;\n const { selectedItems, selectedValues } = customEvent.detail;\n\n const values = selectedValues as (string | number)[];\n\n // Update internal value in uncontrolled mode\n if (!isControlled) {\n internalValue = multiple ? values : values[0];\n }\n\n // Emit change event\n const newValue = multiple ? values : values[0];\n value = newValue; // Update binding\n dispatch('change', { value: newValue, selectedItems: selectedItems as SelectItem[] });\n }\n\n function handleOpen() {\n dispatch('open');\n }\n\n function handleClose() {\n dispatch('close');\n }\n\n function handleSearch(e: Event) {\n const customEvent = e as CustomEvent<SearchEventDetail>;\n dispatch('search', { query: customEvent.detail.query });\n }\n\n function handleLoadMore(e: Event) {\n const customEvent = e as CustomEvent<LoadMoreEventDetail>;\n dispatch('loadMore', { page: customEvent.detail.page });\n }\n\n function handleCreate(e: Event) {\n const customEvent = e as CustomEvent<{ value: string }>;\n dispatch('create', { value: customEvent.detail.value });\n }\n\n function handleClear(e: Event) {\n const customEvent = e as CustomEvent<ClearEventDetail>;\n dispatch('clear', {\n clearedSelection: customEvent.detail.clearedSelection,\n clearedSearch: customEvent.detail.clearedSearch,\n });\n }\n\n function updateConfig() {\n if (!selectRef) return;\n (selectRef as any).updateConfig?.({\n searchable,\n placeholder,\n enabled: !disabled,\n selection: {\n mode: multiple ? 'multi' : 'single',\n maxSelections,\n },\n infiniteScroll: {\n enabled: infiniteScroll,\n pageSize,\n },\n clearControl: {\n enabled: clearable,\n clearSelection: clearSelectionOnClear,\n clearSearch: clearSearchOnClear,\n ariaLabel: clearAriaLabel,\n icon: clearIcon,\n },\n });\n }\n\n onMount(() => {\n if (!selectRef) return;\n\n const element = selectRef;\n\n // Set initial attributes\n if (placeholder) element.setAttribute('placeholder', placeholder);\n if (disabled) element.setAttribute('disabled', '');\n if (required) element.setAttribute('required', '');\n if (error) element.setAttribute('error', '');\n if (searchable) element.setAttribute('searchable', '');\n if (multiple) element.setAttribute('multiple', '');\n if (virtualized) element.setAttribute('virtualized', '');\n if (infiniteScroll) element.setAttribute('infinite-scroll', '');\n if (pageSize) element.setAttribute('page-size', String(pageSize));\n if (maxSelections) element.setAttribute('max-selections', String(maxSelections));\n if (placement) element.setAttribute('placement', placement);\n\n if (optionRenderer) {\n (element as any).optionRenderer = resolvedOptionRenderer;\n }\n\n // Set initial items\n if (items?.length) {\n // 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":"yOA6USA,EAAS,sDAFlBC,SAICC,EAAAC,EAAAC,gEAFQJ,EAAS,sIAhSLK,MAAAA,EAAA,IAAAC,gBACAC,GAA0CD,SAC1CE,GAA2DF,gBAC3DG,GAAkEH,YAClEI,GAAoB,GAAAJ,cACpBK,GAAsB,GAAAL,eACtBM,EAAsB,IAAAN,YACtBO,GAAoB,GAAAP,YACpBQ,GAAoB,GAAAR,SACpBS,GAAiB,GAAAT,kBACjBU,GAA0B,GAAAV,YAC1BW,EAAmB,IAAAX,eACnBY,GAAuB,GAAAZ,iBACvBa,GAAoCb,aACpCc,EAAuC,QAAAd,aACvCe,EAAoB,IAAAf,SACpBgB,EAAgB,IAAAhB,aAChBiB,GAAqB,GAAAjB,yBACrBkB,GAAiC,GAAAlB,sBACjCmB,GAA8B,GAAAnB,kBAC9BoB,EAAyB,8BAAApB,aACzBqB,EAAoB,KAAArB,kBACpBsB,GAA+FtB,QAEpGuB,EAAWC,EAAAA,wBAWb,IAAAC,EACAC,EAAmEvB,EAGjE,MAAAwB,EAAA,CAA0BC,EAAkBC,EAAeC,IACxDR,EAAiBA,EAAeM,EAAMC,EAAOC,GAAWC,SAASC,cAAc,gBAQ/EC,EAAaC,SACdC,EAAcD,GACZN,KAAAA,EAAAC,MAAMA,GAAUM,EAAYC,OACpCb,EAAS,UAAYK,OAA0BC,mBAGxCQ,EAAaH,SACdC,EAAcD,GACZI,cAAAA,EAAAC,eAAeA,GAAmBJ,EAAYC,OAEhDI,EAASD,EAGVE,QACHf,EAAgBtB,EAAWoC,EAASA,EAAO,UAIvCE,EAAWtC,EAAWoC,EAASA,EAAO,OAC5CtC,EAAQwC,GACRnB,EAAS,SAAA,CAAYrB,MAAOwC,EAAUJ,kBAG/B,SAAAK,IACPpB,EAAS,QAGF,SAAAqB,IACPrB,EAAS,kBAGFsB,EAAaX,GAEpBX,EAAS,SAAA,CAAYuB,MADDZ,EACoBE,OAAOU,iBAGxCC,EAAeb,GAEtBX,EAAS,WAAA,CAAcyB,KADHd,EACqBE,OAAOY,gBAGzCC,EAAaf,GAEpBX,EAAS,SAAA,CAAYrB,MADDgC,EACoBE,OAAOlC,iBAGxCgD,EAAYhB,SACbC,EAAcD,EACpBX,EAAS,QAAA,CACP4B,iBAAkBhB,EAAYC,OAAOe,iBACrCC,cAAejB,EAAYC,OAAOgB,gBAI7B,SAAAC,UACF5B,IACJ,OAAA6B,EAAA7B,EAAkB4B,eAAlBC,EAAAC,KAAA9B,EAAkB,CACjBpB,aACAC,cACAkD,SAAUjD,EACVkD,UAAA,CACEC,KAAMtD,EAAW,QAAU,SAC3BS,iBAEFH,eAAA,CACE8C,QAAS9C,EACTC,YAEFgD,aAAA,CACEH,QAASvC,EACT2C,eAAgB1C,EAChB2C,YAAa1C,EACb2C,UAAW1C,EACX2C,KAAM1C,aAKZ2C,EAAAA,QAAA,KACO,IAAAvC,EAAA,aAECwC,EAAUxC,KAGZnB,GAAa2D,EAAQC,aAAa,cAAe5D,GACjDC,GAAU0D,EAAQC,aAAa,WAAY,IAC3C1D,GAAUyD,EAAQC,aAAa,WAAY,IAC3CzD,GAAOwD,EAAQC,aAAa,QAAS,IACrC7D,GAAY4D,EAAQC,aAAa,aAAc,IAC/C9D,GAAU6D,EAAQC,aAAa,WAAY,IAC3CtD,GAAaqD,EAAQC,aAAa,cAAe,IACjDxD,GAAgBuD,EAAQC,aAAa,kBAAmB,IACxDvD,GAAUsD,EAAQC,aAAa,YAAaC,OAAOxD,IACnDE,GAAeoD,EAAQC,aAAa,iBAAkBC,OAAOtD,IAC7DC,GAAWmD,EAAQC,aAAa,YAAapD,GAE7CQ,IACD2C,EAAgB3C,eAAiBK,SAIhC5B,WAAOqE,OAAA,CAEH,MAAAC,EAAQtE,EAAM,GAChB,GAAAsE,QAAwB,IAAdA,EAAcC,MAAU,OAC9BC,MAAUC,IAChBzE,EAAM0E,QAASC,IACP,MAAAC,EAAID,EAAGJ,OAAS,YACjBC,EAAIK,IAAID,IAAIJ,EAAIM,IAAIF,EAAA,IACzBJ,EAAIO,IAAIH,GAAII,KAAKL,WAEbM,EAASC,MAAMC,KAAKX,EAAIY,WAAWZ,MAAMa,EAAOC,MAAO,CAASD,QAAOC,aAC5EpB,EAAgBqB,gBAAgBN,QAEhCf,EAAgBsB,SAASxF,aAG1BE,WAAcmE,SACfH,EAAgBqB,gBAAgBrF,QAI/B,IAAAuF,EAAiB,OACbhD,EAASyC,MAAMQ,QAAQD,GAAgBA,GAAgBA,GAC5DvB,EAAgByB,kBAAkBlD,GAIrCyB,EAAQ0B,iBAAiB,SAAU1D,GACnCgC,EAAQ0B,iBAAiB,SAAUtD,GACnC4B,EAAQ0B,iBAAiB,OAAQhD,GACjCsB,EAAQ0B,iBAAiB,QAAS/C,GAClCqB,EAAQ0B,iBAAiB,SAAU9C,GACnCoB,EAAQ0B,iBAAiB,WAAY5C,GACrCkB,EAAQ0B,iBAAiB,SAAU1C,GACnCgB,EAAQ0B,iBAAiB,QAASzC,GAElCG,MAGFuC,EAAAA,UAAA,KACO,IAAAnE,EAAA,aAECwC,EAAUxC,EAGhBwC,EAAQ4B,oBAAoB,SAAU5D,GACtCgC,EAAQ4B,oBAAoB,SAAUxD,GACtC4B,EAAQ4B,oBAAoB,OAAQlD,GACpCsB,EAAQ4B,oBAAoB,QAASjD,GACrCqB,EAAQ4B,oBAAoB,SAAUhD,GACtCoB,EAAQ4B,oBAAoB,WAAY9C,GACxCkB,EAAQ4B,oBAAoB,SAAU5C,GACtCgB,EAAQ4B,oBAAoB,QAAS3C,+7BA7JvC4C,EAAA,GAAGrD,OAAe,IAAAvC,6CAClB4F,EAAA,GAAGN,EAAe/C,EAAevC,EAAQwB,0BA6KlCD,IACDnB,GAAamB,EAAUyC,aAAa,cAAe5D,GACnDC,EACFkB,EAAUyC,aAAa,WAAY,IAEnCzC,EAAUsE,gBAAgB,YAExB1F,EACFoB,EAAUyC,aAAa,aAAc,IAErCzC,EAAUsE,gBAAgB,cAExB3F,EACFqB,EAAUyC,aAAa,WAAY,IAEnCzC,EAAUsE,gBAAgB,YAExBnF,EACFa,EAAUyC,aAAa,cAAe,IAEtCzC,EAAUsE,gBAAgB,eAGxBzE,EACGG,EAAkBH,iBAAmBK,GACvCmE,EAAA,EAAArE,EAAkBH,eAAiBK,EAAAF,GAE5BA,EAAkBH,iBAAmBK,GAC9CmE,EAAA,EAAArE,EAAkBH,oBAAA,EAAiBG,sBAzCjCA,GAAa1B,GACjB0B,EAAkB8D,SAASxF,qBAGvB0B,GAAaxB,GACjBwB,EAAkB6D,gBAAgBrF,oCAG9BwB,QAAa,IAAA+D,EAAiB,OAC7BhD,EAASyC,MAAMQ,QAAQD,GAAgBA,GAAgBA,GAC5D/D,EAAkBiE,kBAAkBlD,oBAmChCf,GACL4B,sDAIc,WACb,MAAA5B,GAAAA,EAAmBuE,QAGN,WACb,MAAAvE,GAAAA,EAAmBwE,SAGN,WACd,MAAAxE,GAAAA,EAAWyE,kBAGYC,GACtB,MAAA1E,GAAAA,EAAmB8D,SAASY,aAGCnB,GAC7B,MAAAvD,GAAAA,EAAmB6D,gBAAgBN,IAGtB,WACb,MAAAvD,GAAAA,EAAmBiE,kBAAA,IACfjD,GACHqD,EAAA,GAAApE,EAAgBtB,EAAA,QAAA,GAEZ,MAAAsC,EAAWtC,EAAA,GAAgB,OACjCF,EAAQwC,GACRnB,EAAS,SAAA,CAAYrB,MAAOwC,EAAiBJ,cAAA,qEAKpCb,EAAS2E,0DC1UA,oBAAXC,SAETA,OAAOC,WAAaD,OAAOC,SAAW,CAAEC,EAAG,IAAIC,OAAUD,EAAEE,ICK/B","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 ClassMap,\n DiagnosticEventDetail,\n LimitationPolicyMap,\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 classMap: ClassMap | undefined = undefined;\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 export let trackingEnabled: boolean = false;\n export let trackEvents: boolean = true;\n export let trackStyling: boolean = true;\n export let trackLimitations: boolean = true;\n export let emitDiagnostics: boolean = false;\n export let trackingMaxEntries: number = 200;\n export let limitationPolicies: LimitationPolicyMap | undefined = undefined;\n export let autoMitigateRuntimeModeSwitch: boolean = true;\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 diagnostic: DiagnosticEventDetail;\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 handleDiagnostic(e: Event) {\n const customEvent = e as CustomEvent<DiagnosticEventDetail>;\n dispatch('diagnostic', customEvent.detail);\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 tracking: {\n enabled: trackingEnabled,\n events: trackEvents,\n styling: trackStyling,\n limitations: trackLimitations,\n emitDiagnostics,\n maxEntries: trackingMaxEntries,\n },\n limitations: {\n policies: limitationPolicies,\n autoMitigateRuntimeModeSwitch,\n },\n });\n }\n\n onMount(async () => {\n if (!selectRef) return;\n\n await customElements.whenDefined('enhanced-select');\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 element.addEventListener('diagnostic', handleDiagnostic 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 element.removeEventListener('diagnostic', handleDiagnostic as EventListener);\n });\n\n // Reactive updates\n $: if (selectRef && items) {\n if (typeof (selectRef as any).setItems === 'function') {\n (selectRef as any).setItems(items);\n }\n }\n\n $: if (selectRef && groupedItems) {\n if (typeof (selectRef as any).setGroupedItems === 'function') {\n (selectRef as any).setGroupedItems(groupedItems);\n }\n }\n\n $: if (selectRef && currentValue !== undefined) {\n if (typeof (selectRef as any).setSelectedValues === 'function') {\n const values = Array.isArray(currentValue) ? currentValue : [currentValue];\n (selectRef as any).setSelectedValues(values);\n }\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 (selectRef as any).classMap = classMap;\n }\n\n $: if (selectRef) {\n updateConfig();\n }\n\n // Public methods\n export function open() {\n if (typeof (selectRef as any)?.open === 'function') {\n (selectRef as any).open();\n }\n }\n\n export function close() {\n if (typeof (selectRef as any)?.close === 'function') {\n (selectRef as any).close();\n }\n }\n\n export function focus() {\n if (typeof (selectRef as any)?.focus === 'function') {\n (selectRef as any).focus();\n }\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\n export function getCapabilities() {\n return (selectRef as any)?.getCapabilities?.();\n }\n\n export function getKnownLimitations() {\n return (selectRef as any)?.getKnownLimitations?.() || [];\n }\n\n export function getTrackingSnapshot() {\n return (selectRef as any)?.getTrackingSnapshot?.() || { events: [], styles: [], limitations: [] };\n }\n\n export function clearTracking(source?: 'event' | 'style' | 'limitation' | 'all') {\n (selectRef as any)?.clearTracking?.(source);\n }\n\n export function setLimitationPolicies(policies: LimitationPolicyMap) {\n (selectRef as any)?.setLimitationPolicies?.(policies);\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","classMap","clearable","clearSelectionOnClear","clearSearchOnClear","clearAriaLabel","clearIcon","optionRenderer","trackingEnabled","trackEvents","trackStyling","trackLimitations","emitDiagnostics","trackingMaxEntries","limitationPolicies","autoMitigateRuntimeModeSwitch","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","handleDiagnostic","updateConfig","_a","call","enabled","selection","mode","clearControl","clearSelection","clearSearch","ariaLabel","icon","tracking","events","styling","limitations","maxEntries","policies","onMount","async","customElements","whenDefined","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","getCapabilities","getKnownLimitations","getTrackingSnapshot","styles","source","clearTracking","setLimitationPolicies","$$value","window","__svelte","v","Set","add"],"mappings":"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","x_google_ignoreList":[1,2]}
package/dist/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ import "@smilodon/core";
1
2
  import { SvelteComponent, init, safe_not_equal, noop, detach, set_custom_element_data, insert, element, binding_callbacks } from "svelte/internal";
2
3
  import { createEventDispatcher, onMount, onDestroy } from "svelte";
3
4
  const PUBLIC_VERSION = "4";
@@ -23,7 +24,7 @@ function create_fragment(ctx) {
23
24
  },
24
25
  m(target, anchor) {
25
26
  insert(target, enhanced_select, anchor);
26
- ctx[33](enhanced_select);
27
+ ctx[47](enhanced_select);
27
28
  },
28
29
  p(ctx2, dirty) {
29
30
  if (dirty[0] & /*className*/
@@ -51,7 +52,7 @@ function create_fragment(ctx) {
51
52
  if (detaching) {
52
53
  detach(enhanced_select);
53
54
  }
54
- ctx[33](null);
55
+ ctx[47](null);
55
56
  }
56
57
  };
57
58
  }
@@ -75,12 +76,21 @@ function instance($$self, $$props, $$invalidate) {
75
76
  let { placement = "auto" } = $$props;
76
77
  let { className = "" } = $$props;
77
78
  let { style = "" } = $$props;
79
+ let { classMap = void 0 } = $$props;
78
80
  let { clearable = false } = $$props;
79
81
  let { clearSelectionOnClear = true } = $$props;
80
82
  let { clearSearchOnClear = true } = $$props;
81
83
  let { clearAriaLabel = "Clear selection and search" } = $$props;
82
84
  let { clearIcon = "×" } = $$props;
83
85
  let { optionRenderer = void 0 } = $$props;
86
+ let { trackingEnabled = false } = $$props;
87
+ let { trackEvents = true } = $$props;
88
+ let { trackStyling = true } = $$props;
89
+ let { trackLimitations = true } = $$props;
90
+ let { emitDiagnostics = false } = $$props;
91
+ let { trackingMaxEntries = 200 } = $$props;
92
+ let { limitationPolicies = void 0 } = $$props;
93
+ let { autoMitigateRuntimeModeSwitch = true } = $$props;
84
94
  const dispatch = createEventDispatcher();
85
95
  let selectRef;
86
96
  let internalValue = defaultValue;
@@ -97,7 +107,7 @@ function instance($$self, $$props, $$invalidate) {
97
107
  const { selectedItems, selectedValues } = customEvent.detail;
98
108
  const values = selectedValues;
99
109
  if (!isControlled) {
100
- $$invalidate(30, internalValue = multiple ? values : values[0]);
110
+ $$invalidate(44, internalValue = multiple ? values : values[0]);
101
111
  }
102
112
  const newValue = multiple ? values : values[0];
103
113
  $$invalidate(3, value = newValue);
@@ -128,6 +138,10 @@ function instance($$self, $$props, $$invalidate) {
128
138
  clearedSearch: customEvent.detail.clearedSearch
129
139
  });
130
140
  }
141
+ function handleDiagnostic(e) {
142
+ const customEvent = e;
143
+ dispatch("diagnostic", customEvent.detail);
144
+ }
131
145
  function updateConfig() {
132
146
  var _a;
133
147
  if (!selectRef) return;
@@ -146,10 +160,24 @@ function instance($$self, $$props, $$invalidate) {
146
160
  clearSearch: clearSearchOnClear,
147
161
  ariaLabel: clearAriaLabel,
148
162
  icon: clearIcon
163
+ },
164
+ tracking: {
165
+ enabled: trackingEnabled,
166
+ events: trackEvents,
167
+ styling: trackStyling,
168
+ limitations: trackLimitations,
169
+ emitDiagnostics,
170
+ maxEntries: trackingMaxEntries
171
+ },
172
+ limitations: {
173
+ policies: limitationPolicies,
174
+ autoMitigateRuntimeModeSwitch
149
175
  }
150
176
  });
151
177
  }
152
- onMount(() => {
178
+ onMount(async () => {
179
+ if (!selectRef) return;
180
+ await customElements.whenDefined("enhanced-select");
153
181
  if (!selectRef) return;
154
182
  const element2 = selectRef;
155
183
  if (placeholder) element2.setAttribute("placeholder", placeholder);
@@ -196,6 +224,7 @@ function instance($$self, $$props, $$invalidate) {
196
224
  element2.addEventListener("loadMore", handleLoadMore);
197
225
  element2.addEventListener("create", handleCreate);
198
226
  element2.addEventListener("clear", handleClear);
227
+ element2.addEventListener("diagnostic", handleDiagnostic);
199
228
  updateConfig();
200
229
  });
201
230
  onDestroy(() => {
@@ -209,15 +238,22 @@ function instance($$self, $$props, $$invalidate) {
209
238
  element2.removeEventListener("loadMore", handleLoadMore);
210
239
  element2.removeEventListener("create", handleCreate);
211
240
  element2.removeEventListener("clear", handleClear);
241
+ element2.removeEventListener("diagnostic", handleDiagnostic);
212
242
  });
213
243
  function open() {
214
- selectRef == null ? void 0 : selectRef.open();
244
+ if (typeof (selectRef == null ? void 0 : selectRef.open) === "function") {
245
+ selectRef.open();
246
+ }
215
247
  }
216
248
  function close() {
217
- selectRef == null ? void 0 : selectRef.close();
249
+ if (typeof (selectRef == null ? void 0 : selectRef.close) === "function") {
250
+ selectRef.close();
251
+ }
218
252
  }
219
253
  function focus() {
220
- selectRef == null ? void 0 : selectRef.focus();
254
+ if (typeof (selectRef == null ? void 0 : selectRef.focus) === "function") {
255
+ selectRef.focus();
256
+ }
221
257
  }
222
258
  function setItems(newItems) {
223
259
  selectRef == null ? void 0 : selectRef.setItems(newItems);
@@ -228,16 +264,36 @@ function instance($$self, $$props, $$invalidate) {
228
264
  function clear() {
229
265
  selectRef == null ? void 0 : selectRef.setSelectedValues([]);
230
266
  if (!isControlled) {
231
- $$invalidate(30, internalValue = multiple ? [] : void 0);
267
+ $$invalidate(44, internalValue = multiple ? [] : void 0);
232
268
  }
233
269
  const newValue = multiple ? [] : "";
234
270
  $$invalidate(3, value = newValue);
235
271
  dispatch("change", { value: newValue, selectedItems: [] });
236
272
  }
273
+ function getCapabilities() {
274
+ var _a;
275
+ return (_a = selectRef == null ? void 0 : selectRef.getCapabilities) == null ? void 0 : _a.call(selectRef);
276
+ }
277
+ function getKnownLimitations() {
278
+ var _a;
279
+ return ((_a = selectRef == null ? void 0 : selectRef.getKnownLimitations) == null ? void 0 : _a.call(selectRef)) || [];
280
+ }
281
+ function getTrackingSnapshot() {
282
+ var _a;
283
+ return ((_a = selectRef == null ? void 0 : selectRef.getTrackingSnapshot) == null ? void 0 : _a.call(selectRef)) || { events: [], styles: [], limitations: [] };
284
+ }
285
+ function clearTracking(source) {
286
+ var _a;
287
+ (_a = selectRef == null ? void 0 : selectRef.clearTracking) == null ? void 0 : _a.call(selectRef, source);
288
+ }
289
+ function setLimitationPolicies(policies) {
290
+ var _a;
291
+ (_a = selectRef == null ? void 0 : selectRef.setLimitationPolicies) == null ? void 0 : _a.call(selectRef, policies);
292
+ }
237
293
  function enhanced_select_binding($$value) {
238
294
  binding_callbacks[$$value ? "unshift" : "push"](() => {
239
295
  selectRef = $$value;
240
- $$invalidate(2, selectRef), $$invalidate(9, placeholder), $$invalidate(10, disabled), $$invalidate(8, searchable), $$invalidate(7, multiple), $$invalidate(15, virtualized), $$invalidate(23, optionRenderer);
296
+ $$invalidate(2, selectRef), $$invalidate(9, placeholder), $$invalidate(10, disabled), $$invalidate(8, searchable), $$invalidate(7, multiple), $$invalidate(15, virtualized), $$invalidate(24, optionRenderer), $$invalidate(18, classMap);
241
297
  });
242
298
  }
243
299
  $$self.$$set = ($$props2) => {
@@ -258,25 +314,34 @@ function instance($$self, $$props, $$invalidate) {
258
314
  if ("placement" in $$props2) $$invalidate(17, placement = $$props2.placement);
259
315
  if ("className" in $$props2) $$invalidate(0, className = $$props2.className);
260
316
  if ("style" in $$props2) $$invalidate(1, style = $$props2.style);
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);
317
+ if ("classMap" in $$props2) $$invalidate(18, classMap = $$props2.classMap);
318
+ if ("clearable" in $$props2) $$invalidate(19, clearable = $$props2.clearable);
319
+ if ("clearSelectionOnClear" in $$props2) $$invalidate(20, clearSelectionOnClear = $$props2.clearSelectionOnClear);
320
+ if ("clearSearchOnClear" in $$props2) $$invalidate(21, clearSearchOnClear = $$props2.clearSearchOnClear);
321
+ if ("clearAriaLabel" in $$props2) $$invalidate(22, clearAriaLabel = $$props2.clearAriaLabel);
322
+ if ("clearIcon" in $$props2) $$invalidate(23, clearIcon = $$props2.clearIcon);
323
+ if ("optionRenderer" in $$props2) $$invalidate(24, optionRenderer = $$props2.optionRenderer);
324
+ if ("trackingEnabled" in $$props2) $$invalidate(25, trackingEnabled = $$props2.trackingEnabled);
325
+ if ("trackEvents" in $$props2) $$invalidate(26, trackEvents = $$props2.trackEvents);
326
+ if ("trackStyling" in $$props2) $$invalidate(27, trackStyling = $$props2.trackStyling);
327
+ if ("trackLimitations" in $$props2) $$invalidate(28, trackLimitations = $$props2.trackLimitations);
328
+ if ("emitDiagnostics" in $$props2) $$invalidate(29, emitDiagnostics = $$props2.emitDiagnostics);
329
+ if ("trackingMaxEntries" in $$props2) $$invalidate(30, trackingMaxEntries = $$props2.trackingMaxEntries);
330
+ if ("limitationPolicies" in $$props2) $$invalidate(31, limitationPolicies = $$props2.limitationPolicies);
331
+ if ("autoMitigateRuntimeModeSwitch" in $$props2) $$invalidate(32, autoMitigateRuntimeModeSwitch = $$props2.autoMitigateRuntimeModeSwitch);
267
332
  };
268
333
  $$self.$$.update = () => {
269
334
  if ($$self.$$.dirty[0] & /*value*/
270
335
  8) {
271
- $$invalidate(31, isControlled = value !== void 0);
336
+ $$invalidate(45, isControlled = value !== void 0);
272
337
  }
273
- if ($$self.$$.dirty[0] & /*value, internalValue*/
274
- 1073741832 | $$self.$$.dirty[1] & /*isControlled*/
275
- 1) {
276
- $$invalidate(32, currentValue = isControlled ? value : internalValue);
338
+ if ($$self.$$.dirty[0] & /*value*/
339
+ 8 | $$self.$$.dirty[1] & /*isControlled, internalValue*/
340
+ 24576) {
341
+ $$invalidate(46, currentValue = isControlled ? value : internalValue);
277
342
  }
278
- if ($$self.$$.dirty[0] & /*selectRef, placeholder, disabled, searchable, multiple, virtualized, optionRenderer*/
279
- 8423300) {
343
+ if ($$self.$$.dirty[0] & /*selectRef, placeholder, disabled, searchable, multiple, virtualized, optionRenderer, classMap*/
344
+ 17074052) {
280
345
  if (selectRef) {
281
346
  if (placeholder) selectRef.setAttribute("placeholder", placeholder);
282
347
  if (disabled) {
@@ -306,26 +371,33 @@ function instance($$self, $$props, $$invalidate) {
306
371
  } else if (selectRef.optionRenderer === resolvedOptionRenderer) {
307
372
  $$invalidate(2, selectRef.optionRenderer = void 0, selectRef);
308
373
  }
374
+ $$invalidate(2, selectRef.classMap = classMap, selectRef);
309
375
  }
310
376
  }
311
377
  if ($$self.$$.dirty[0] & /*selectRef, items*/
312
378
  20) {
313
379
  if (selectRef && items) {
314
- selectRef.setItems(items);
380
+ if (typeof selectRef.setItems === "function") {
381
+ selectRef.setItems(items);
382
+ }
315
383
  }
316
384
  }
317
385
  if ($$self.$$.dirty[0] & /*selectRef, groupedItems*/
318
386
  36) {
319
387
  if (selectRef && groupedItems) {
320
- selectRef.setGroupedItems(groupedItems);
388
+ if (typeof selectRef.setGroupedItems === "function") {
389
+ selectRef.setGroupedItems(groupedItems);
390
+ }
321
391
  }
322
392
  }
323
393
  if ($$self.$$.dirty[0] & /*selectRef*/
324
394
  4 | $$self.$$.dirty[1] & /*currentValue*/
325
- 2) {
395
+ 32768) {
326
396
  if (selectRef && currentValue !== void 0) {
327
- const values = Array.isArray(currentValue) ? currentValue : [currentValue];
328
- selectRef.setSelectedValues(values);
397
+ if (typeof selectRef.setSelectedValues === "function") {
398
+ const values = Array.isArray(currentValue) ? currentValue : [currentValue];
399
+ selectRef.setSelectedValues(values);
400
+ }
329
401
  }
330
402
  }
331
403
  if ($$self.$$.dirty[0] & /*selectRef*/
@@ -354,18 +426,32 @@ function instance($$self, $$props, $$invalidate) {
354
426
  virtualized,
355
427
  maxSelections,
356
428
  placement,
429
+ classMap,
357
430
  clearable,
358
431
  clearSelectionOnClear,
359
432
  clearSearchOnClear,
360
433
  clearAriaLabel,
361
434
  clearIcon,
362
435
  optionRenderer,
436
+ trackingEnabled,
437
+ trackEvents,
438
+ trackStyling,
439
+ trackLimitations,
440
+ emitDiagnostics,
441
+ trackingMaxEntries,
442
+ limitationPolicies,
443
+ autoMitigateRuntimeModeSwitch,
363
444
  open,
364
445
  close,
365
446
  focus,
366
447
  setItems,
367
448
  setGroupedItems,
368
449
  clear,
450
+ getCapabilities,
451
+ getKnownLimitations,
452
+ getTrackingSnapshot,
453
+ clearTracking,
454
+ setLimitationPolicies,
369
455
  internalValue,
370
456
  isControlled,
371
457
  currentValue,
@@ -399,40 +485,69 @@ class Select extends SvelteComponent {
399
485
  placement: 17,
400
486
  className: 0,
401
487
  style: 1,
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
488
+ classMap: 18,
489
+ clearable: 19,
490
+ clearSelectionOnClear: 20,
491
+ clearSearchOnClear: 21,
492
+ clearAriaLabel: 22,
493
+ clearIcon: 23,
494
+ optionRenderer: 24,
495
+ trackingEnabled: 25,
496
+ trackEvents: 26,
497
+ trackStyling: 27,
498
+ trackLimitations: 28,
499
+ emitDiagnostics: 29,
500
+ trackingMaxEntries: 30,
501
+ limitationPolicies: 31,
502
+ autoMitigateRuntimeModeSwitch: 32,
503
+ open: 33,
504
+ close: 34,
505
+ focus: 35,
506
+ setItems: 36,
507
+ setGroupedItems: 37,
508
+ clear: 38,
509
+ getCapabilities: 39,
510
+ getKnownLimitations: 40,
511
+ getTrackingSnapshot: 41,
512
+ clearTracking: 42,
513
+ setLimitationPolicies: 43
414
514
  },
415
515
  null,
416
516
  [-1, -1]
417
517
  );
418
518
  }
419
519
  get open() {
420
- return this.$$.ctx[24];
520
+ return this.$$.ctx[33];
421
521
  }
422
522
  get close() {
423
- return this.$$.ctx[25];
523
+ return this.$$.ctx[34];
424
524
  }
425
525
  get focus() {
426
- return this.$$.ctx[26];
526
+ return this.$$.ctx[35];
427
527
  }
428
528
  get setItems() {
429
- return this.$$.ctx[27];
529
+ return this.$$.ctx[36];
430
530
  }
431
531
  get setGroupedItems() {
432
- return this.$$.ctx[28];
532
+ return this.$$.ctx[37];
433
533
  }
434
534
  get clear() {
435
- return this.$$.ctx[29];
535
+ return this.$$.ctx[38];
536
+ }
537
+ get getCapabilities() {
538
+ return this.$$.ctx[39];
539
+ }
540
+ get getKnownLimitations() {
541
+ return this.$$.ctx[40];
542
+ }
543
+ get getTrackingSnapshot() {
544
+ return this.$$.ctx[41];
545
+ }
546
+ get clearTracking() {
547
+ return this.$$.ctx[42];
548
+ }
549
+ get setLimitationPolicies() {
550
+ return this.$$.ctx[43];
436
551
  }
437
552
  }
438
553
  export {