@editora/ui-core 0.1.18 → 0.1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ElementBase-1b301e7f.js → ElementBase-EV6mVBUV.js} +1 -1
- package/dist/{ElementBase-909688f3.mjs → ElementBase-YlTLMsGk.mjs} +3 -3
- package/dist/accordion.cjs.js +3 -3
- package/dist/accordion.esm.js +39 -62
- package/dist/alert-dialog.cjs.js +19 -19
- package/dist/alert-dialog.esm.js +69 -87
- package/dist/alert.cjs.js +1 -1
- package/dist/alert.esm.js +4 -7
- package/dist/anchor.cjs.js +2 -2
- package/dist/anchor.esm.js +3 -3
- package/dist/animated-beam.cjs.js +83 -83
- package/dist/animated-beam.esm.js +250 -277
- package/dist/animated-list.cjs.js +4 -4
- package/dist/animated-list.esm.js +47 -61
- package/dist/animated-text.cjs.js +2 -2
- package/dist/animated-text.esm.js +13 -24
- package/dist/app-header.cjs.js +3 -3
- package/dist/app-header.esm.js +11 -13
- package/dist/aspect-ratio.cjs.js +1 -1
- package/dist/aspect-ratio.esm.js +4 -7
- package/dist/avatar.cjs.js +1 -1
- package/dist/avatar.esm.js +7 -13
- package/dist/badge.cjs.js +1 -1
- package/dist/badge.esm.js +4 -7
- package/dist/block-controls.cjs.js +2 -2
- package/dist/block-controls.esm.js +19 -35
- package/dist/box.cjs.js +1 -1
- package/dist/box.esm.js +8 -15
- package/dist/breadcrumb.cjs.js +2 -2
- package/dist/breadcrumb.esm.js +20 -37
- package/dist/button.cjs.js +1 -521
- package/dist/button.esm.js +2 -669
- package/dist/{calendar-2c11b824.mjs → calendar-DLY4acgn.mjs} +293 -342
- package/dist/{calendar-a8735e40.js → calendar-Dkof-FTK.js} +25 -25
- package/dist/calendar.cjs.js +1 -1
- package/dist/calendar.esm.js +8 -9
- package/dist/card.cjs.js +4 -4
- package/dist/card.esm.js +13 -19
- package/dist/chart.cjs.js +64 -64
- package/dist/chart.esm.js +223 -254
- package/dist/checkbox.cjs.js +1 -1
- package/dist/checkbox.esm.js +2 -3
- package/dist/collapsible.cjs.js +1 -1
- package/dist/collapsible.esm.js +5 -9
- package/dist/{collection-a1aac0c6.mjs → collection-C7URGjEI.mjs} +8 -14
- package/dist/collection.cjs.js +1 -1
- package/dist/collection.esm.js +4 -7
- package/dist/color-picker.cjs.js +9 -9
- package/dist/color-picker.esm.js +189 -252
- package/dist/combobox.cjs.js +13 -13
- package/dist/combobox.esm.js +93 -126
- package/dist/command-palette.cjs.js +3 -3
- package/dist/command-palette.esm.js +19 -30
- package/dist/command.cjs.js +4 -4
- package/dist/command.esm.js +41 -53
- package/dist/components/ui-button.d.ts +1 -0
- package/dist/components/ui-button.d.ts.map +1 -1
- package/dist/components/ui-date-picker.d.ts.map +1 -1
- package/dist/components/ui-date-range-picker.d.ts.map +1 -1
- package/dist/components/ui-date-range-time-picker.d.ts +1 -0
- package/dist/components/ui-date-range-time-picker.d.ts.map +1 -1
- package/dist/components/ui-date-time-picker.d.ts +1 -0
- package/dist/components/ui-date-time-picker.d.ts.map +1 -1
- package/dist/components/ui-orbiter.d.ts.map +1 -1
- package/dist/components/ui-skeleton.d.ts.map +1 -1
- package/dist/components/ui-split-button.d.ts +1 -0
- package/dist/components/ui-split-button.d.ts.map +1 -1
- package/dist/components/ui-time-picker.d.ts.map +1 -1
- package/dist/container.cjs.js +2 -2
- package/dist/container.esm.js +2 -3
- package/dist/context-menu.cjs.js +8 -8
- package/dist/context-menu.esm.js +157 -219
- package/dist/control-group.cjs.js +1 -1
- package/dist/control-group.esm.js +2 -3
- package/dist/data-table.cjs.js +4 -4
- package/dist/data-table.esm.js +299 -381
- package/dist/date-field.cjs.js +3 -3
- package/dist/date-field.esm.js +68 -80
- package/dist/date-picker.cjs.js +30 -9
- package/dist/date-picker.esm.js +90 -97
- package/dist/date-range-picker.cjs.js +22 -3
- package/dist/date-range-picker.esm.js +103 -108
- package/dist/date-range-time-picker.cjs.js +28 -12
- package/dist/date-range-time-picker.esm.js +137 -150
- package/dist/date-time-picker.cjs.js +25 -9
- package/dist/date-time-picker.esm.js +139 -155
- package/dist/date-time-utils-Dmost5Ee.js +1 -0
- package/dist/date-time-utils-y1N2gvG2.mjs +268 -0
- package/dist/description.cjs.js +1 -1
- package/dist/description.esm.js +3 -5
- package/dist/dialog.cjs.js +12 -12
- package/dist/dialog.esm.js +44 -63
- package/dist/direction-provider.cjs.js +1 -1
- package/dist/direction-provider.esm.js +2 -3
- package/dist/{dismissable-layer-9c7e6b58.mjs → dismissable-layer-BmPIoK80.mjs} +29 -33
- package/dist/dismissable-layer-DNfrKA20.js +1 -0
- package/dist/dismissable-layer.cjs.js +2 -2
- package/dist/dismissable-layer.esm.js +4 -6
- package/dist/dock.cjs.js +5 -5
- package/dist/dock.esm.js +134 -155
- package/dist/drawer.cjs.js +2 -2
- package/dist/drawer.esm.js +18 -35
- package/dist/dropdown.cjs.js +2 -2
- package/dist/dropdown.esm.js +119 -149
- package/dist/dropzone.cjs.js +1 -1
- package/dist/dropzone.esm.js +0 -1
- package/dist/empty-state.cjs.js +1 -1
- package/dist/empty-state.esm.js +1 -1
- package/dist/field-error.cjs.js +1 -1
- package/dist/field-error.esm.js +3 -5
- package/dist/field.cjs.js +5 -5
- package/dist/field.esm.js +27 -34
- package/dist/fieldset.cjs.js +4 -4
- package/dist/fieldset.esm.js +19 -24
- package/dist/file-upload.cjs.js +4 -4
- package/dist/file-upload.esm.js +69 -93
- package/dist/flex.cjs.js +1 -1
- package/dist/flex.esm.js +5 -9
- package/dist/floating-toolbar.cjs.js +4 -4
- package/dist/floating-toolbar.esm.js +60 -85
- package/dist/focus-scope-Bwug2gDv.js +1 -0
- package/dist/{focus-scope-103833ee.mjs → focus-scope-CmEsG5UZ.mjs} +39 -48
- package/dist/focus-scope.cjs.js +2 -2
- package/dist/focus-scope.esm.js +15 -20
- package/dist/form.cjs.js +2 -2
- package/dist/form.esm.js +26 -53
- package/dist/gantt.cjs.js +43 -43
- package/dist/gantt.esm.js +295 -322
- package/dist/grid.cjs.js +1 -1
- package/dist/grid.esm.js +5 -9
- package/dist/hover-card.cjs.js +4 -4
- package/dist/hover-card.esm.js +22 -28
- package/dist/icon-cloud.cjs.js +7 -7
- package/dist/icon-cloud.esm.js +48 -62
- package/dist/icon.cjs.js +1 -1
- package/dist/icon.esm.js +2 -4
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +378 -390
- package/dist/inline-edit.cjs.js +11 -11
- package/dist/inline-edit.esm.js +32 -36
- package/dist/input.cjs.js +17 -17
- package/dist/input.esm.js +50 -63
- package/dist/label.cjs.js +2 -2
- package/dist/label.esm.js +8 -17
- package/dist/layout.cjs.js +2 -2
- package/dist/layout.esm.js +20 -26
- package/dist/listbox-B6QgECax.js +46 -0
- package/dist/listbox-DJamVeFj.mjs +200 -0
- package/dist/listbox.cjs.js +1 -1
- package/dist/listbox.esm.js +2 -4
- package/dist/marquee.cjs.js +5 -5
- package/dist/marquee.esm.js +33 -50
- package/dist/masonry-grid.cjs.js +1 -1
- package/dist/masonry-grid.esm.js +5 -9
- package/dist/menu.cjs.js +3 -3
- package/dist/menu.esm.js +106 -126
- package/dist/menubar.cjs.js +5 -5
- package/dist/menubar.esm.js +118 -164
- package/dist/meter.cjs.js +2 -2
- package/dist/meter.esm.js +4 -4
- package/dist/multi-select.cjs.js +4 -4
- package/dist/multi-select.esm.js +120 -140
- package/dist/navigation-menu.cjs.js +4 -4
- package/dist/navigation-menu.esm.js +44 -55
- package/dist/number-field.cjs.js +2 -2
- package/dist/number-field.esm.js +73 -98
- package/dist/number-ticker.cjs.js +3 -3
- package/dist/number-ticker.esm.js +22 -43
- package/dist/odometer.cjs.js +1 -1
- package/dist/odometer.esm.js +5 -9
- package/dist/orbiter.cjs.js +13 -13
- package/dist/orbiter.esm.js +79 -90
- package/dist/{overlayManager-5bbd4dc3.mjs → overlayManager-BJjU1VA8.mjs} +4 -5
- package/dist/{overlayManager-0eda4e08.js → overlayManager-CSy3fJmJ.js} +1 -1
- package/dist/pagination.cjs.js +2 -2
- package/dist/pagination.esm.js +14 -18
- package/dist/{panel-group-a376cc5e.mjs → panel-group-8sVNnGxg.mjs} +24 -46
- package/dist/panel-group-CaD0_KQf.js +36 -0
- package/dist/panel-group.cjs.js +1 -1
- package/dist/panel-group.esm.js +2 -5
- package/dist/panel.cjs.js +4 -4
- package/dist/panel.esm.js +8 -10
- package/dist/password-field.cjs.js +9 -9
- package/dist/password-field.esm.js +62 -82
- package/dist/pin-input.cjs.js +3 -3
- package/dist/pin-input.esm.js +33 -39
- package/dist/placement-grid.cjs.js +4 -4
- package/dist/placement-grid.esm.js +108 -131
- package/dist/plugin-panel.cjs.js +7 -7
- package/dist/plugin-panel.esm.js +13 -15
- package/dist/popover.cjs.js +2 -2
- package/dist/popover.esm.js +21 -31
- package/dist/portal-DgpQ3Jo1.js +1 -0
- package/dist/{portal-fe73e5cc.mjs → portal-bR42gHvG.mjs} +43 -48
- package/dist/portal.cjs.js +2 -2
- package/dist/portal.esm.js +10 -19
- package/dist/{positioner-e9770c66.mjs → positioner-D0VGxtYU.mjs} +189 -209
- package/dist/positioner-D_fqyx_j.js +1 -0
- package/dist/positioner.cjs.js +2 -2
- package/dist/positioner.esm.js +11 -18
- package/dist/presence.cjs.js +1 -1
- package/dist/presence.esm.js +7 -13
- package/dist/progress.cjs.js +1 -1
- package/dist/progress.esm.js +5 -9
- package/dist/quick-actions.cjs.js +6 -6
- package/dist/quick-actions.esm.js +52 -62
- package/dist/radio-group.cjs.js +13 -13
- package/dist/radio-group.esm.js +39 -51
- package/dist/radio.cjs.js +1 -1
- package/dist/radio.esm.js +5 -9
- package/dist/rating.cjs.js +1 -1
- package/dist/rating.esm.js +12 -23
- package/dist/{roving-focus-group-4350c9a7.mjs → roving-focus-group-Dbm1Jko_.mjs} +3 -6
- package/dist/roving-focus-group.cjs.js +1 -1
- package/dist/roving-focus-group.esm.js +3 -5
- package/dist/runtime-CTaOSmBj.js +1 -0
- package/dist/{runtime-161f68a2.mjs → runtime-D1gFh1fS.mjs} +338 -366
- package/dist/runtime.cjs.js +1 -1
- package/dist/runtime.esm.js +6 -6
- package/dist/scroll-area.cjs.js +3 -3
- package/dist/scroll-area.esm.js +38 -46
- package/dist/{scroll-lock-31da444f.mjs → scroll-lock-LfqXXqsu.mjs} +5 -9
- package/dist/section.cjs.js +1 -1
- package/dist/section.esm.js +1 -1
- package/dist/select.cjs.js +7 -7
- package/dist/select.esm.js +67 -97
- package/dist/selection-popup.cjs.js +1 -1
- package/dist/selection-popup.esm.js +8 -15
- package/dist/separator.cjs.js +1 -1
- package/dist/separator.esm.js +1 -1
- package/dist/sidebar.cjs.js +18 -18
- package/dist/sidebar.esm.js +117 -139
- package/dist/skeleton.cjs.js +11 -11
- package/dist/skeleton.esm.js +27 -24
- package/dist/slider.cjs.js +1 -1
- package/dist/slider.esm.js +6 -11
- package/dist/slot.cjs.js +4 -4
- package/dist/slot.esm.js +16 -19
- package/dist/sortable.cjs.js +45 -45
- package/dist/sortable.esm.js +421 -524
- package/dist/spinning-text.cjs.js +12 -12
- package/dist/spinning-text.esm.js +80 -92
- package/dist/split-button.cjs.js +4 -4
- package/dist/split-button.esm.js +77 -62
- package/dist/splitter.cjs.js +1 -1
- package/dist/splitter.esm.js +1 -1
- package/dist/stepper.cjs.js +8 -8
- package/dist/stepper.esm.js +32 -52
- package/dist/switch.cjs.js +7 -7
- package/dist/switch.esm.js +23 -31
- package/dist/table.cjs.js +2 -2
- package/dist/table.esm.js +46 -56
- package/dist/tabs.cjs.js +3 -3
- package/dist/tabs.esm.js +35 -55
- package/dist/tags-input.cjs.js +4 -4
- package/dist/tags-input.esm.js +45 -62
- package/dist/textarea.cjs.js +6 -6
- package/dist/textarea.esm.js +32 -41
- package/dist/time-field.cjs.js +4 -4
- package/dist/time-field.esm.js +70 -84
- package/dist/time-picker.cjs.js +29 -21
- package/dist/time-picker.esm.js +96 -110
- package/dist/timeline.cjs.js +1 -1
- package/dist/timeline.esm.js +3 -5
- package/dist/toast.cjs.js +2 -2
- package/dist/toast.esm.js +33 -47
- package/dist/toggle-group.cjs.js +6 -6
- package/dist/toggle-group.esm.js +85 -105
- package/dist/toggle.cjs.js +1 -1
- package/dist/toggle.esm.js +3 -5
- package/dist/toolbar.cjs.js +1 -1
- package/dist/toolbar.esm.js +13 -24
- package/dist/tooltip.cjs.js +2 -2
- package/dist/tooltip.esm.js +31 -42
- package/dist/transfer-list.cjs.js +19 -19
- package/dist/transfer-list.esm.js +98 -111
- package/dist/{tree-dcd74a4a.mjs → tree-B3kE8ESs.mjs} +55 -62
- package/dist/tree-Dx_kv_ih.js +39 -0
- package/dist/tree-item.cjs.js +2 -2
- package/dist/tree-item.esm.js +2 -3
- package/dist/tree.cjs.js +1 -1
- package/dist/tree.esm.js +2 -5
- package/dist/ui-button-Q0GNNWKC.mjs +665 -0
- package/dist/ui-button-rXQOS9QJ.js +521 -0
- package/dist/{icon-9e9da03b.js → ui-icon-BzVNC_lr.js} +4 -4
- package/dist/{icon-e2a85cc1.mjs → ui-icon-YI6lyuqU.mjs} +58 -65
- package/dist/visually-hidden.cjs.js +1 -1
- package/dist/visually-hidden.esm.js +1 -1
- package/dist/wizard.cjs.js +14 -14
- package/dist/wizard.esm.js +85 -105
- package/package.json +3 -3
- package/dist/date-time-utils-66480de4.js +0 -1
- package/dist/date-time-utils-a2c7af25.mjs +0 -307
- package/dist/dismissable-layer-193e3bed.js +0 -1
- package/dist/focus-scope-2b12b4e7.js +0 -1
- package/dist/listbox-308789a0.mjs +0 -210
- package/dist/listbox-ef2f708e.js +0 -46
- package/dist/panel-group-40254cdd.js +0 -36
- package/dist/portal-c69756c0.js +0 -1
- package/dist/positioner-33529bb8.js +0 -1
- package/dist/runtime-3f13807b.js +0 -1
- package/dist/tree-0a7a8d05.js +0 -39
- /package/dist/{collection-a2969ad2.js → collection-qv8A8rq4.js} +0 -0
- /package/dist/{menu-item-styles-27fdbac4.mjs → menu-item-styles-CZiPwPwl.mjs} +0 -0
- /package/dist/{menu-item-styles-83ad1e22.js → menu-item-styles-CbNUEwP2.js} +0 -0
- /package/dist/{roving-focus-group-5c059bf9.js → roving-focus-group-BdJ_4Njm.js} +0 -0
- /package/dist/{scroll-lock-d7b0df21.js → scroll-lock-BX6e3Ced.js} +0 -0
package/dist/meter.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("./ElementBase-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("./ElementBase-EV6mVBUV.js"),f=`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
width: 100%;
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
:host([data-meter-state="high"]:not([tone])) {
|
|
203
203
|
--ui-meter-fill: #2563eb;
|
|
204
204
|
}
|
|
205
|
-
`;function s(i,e){if(i==null||i==="")return e;const t=Number(i);return Number.isFinite(t)?t:e}function o(i,e,t){return i<e?e:i>t?t:i}function g(i,e,t,r){return r==null?i<e?"low":i>t?"high":"optimum":r<e?i<=e?"optimum":i<=t?"suboptimum":"high":r>t?i>=t?"optimum":i>=e?"suboptimum":"low":i<e?"low":i>t?"high":"optimum"}class p extends b.ElementBase{constructor(){super(...arguments),this._lastChangeKey=""}static get observedAttributes(){return["value","min","max","low","high","optimum","label","show-label","format","precision","size","variant","tone","shape","mode"]}get metrics(){
|
|
205
|
+
`;function s(i,e){if(i==null||i==="")return e;const t=Number(i);return Number.isFinite(t)?t:e}function o(i,e,t){return i<e?e:i>t?t:i}function g(i,e,t,r){return r==null?i<e?"low":i>t?"high":"optimum":r<e?i<=e?"optimum":i<=t?"suboptimum":"high":r>t?i>=t?"optimum":i>=e?"suboptimum":"low":i<e?"low":i>t?"high":"optimum"}class p extends b.ElementBase{constructor(){super(...arguments),this._lastChangeKey=""}static get observedAttributes(){return["value","min","max","low","high","optimum","label","show-label","format","precision","size","variant","tone","shape","mode"]}get metrics(){const e=s(this.getAttribute("min"),0);let t=s(this.getAttribute("max"),1);t<=e&&(t=e+1);const r=o(s(this.getAttribute("value"),e),e,t),l=o(s(this.getAttribute("low"),e+(t-e)*.25),e,t),n=o(s(this.getAttribute("high"),e+(t-e)*.75),e,t),a=Math.min(l,n),c=Math.max(l,n),u=this.getAttribute("optimum"),m=u==null?null:o(s(u,r),e,t),d=(r-e)/(t-e)*100,h=g(r,a,c,m);return{value:r,min:e,max:t,low:a,high:c,optimum:m,percent:d,state:h,text:this._formatValue(r,e,t,d)}}_formatValue(e,t,r,l){const n=this.getAttribute("format")||"value",a=Math.max(0,Math.floor(s(this.getAttribute("precision"),0)));return n==="percent"?`${l.toFixed(a)}%`:n==="fraction"?`${e.toFixed(a)} / ${r.toFixed(a)}`:t===0&&r===1?e.toFixed(Math.max(a,2)):e.toFixed(a)}_emitChange(e){const t=[e.value,e.min,e.max,e.low,e.high,e.optimum??"",e.percent.toFixed(3),e.state].join("|");t!==this._lastChangeKey&&(this._lastChangeKey=t,this.dispatchEvent(new CustomEvent("change",{detail:{value:e.value,min:e.min,max:e.max,low:e.low,high:e.high,optimum:e.optimum,percent:e.percent,state:e.state},bubbles:!0,composed:!0})))}render(){const e=this.metrics,t=this.getAttribute("label")||"",r=this.hasAttribute("show-label")||!!t;this.setAttribute("data-meter-state",e.state),this.style.setProperty("--ui-meter-percent",e.percent.toFixed(3)),this.setContent(`
|
|
206
206
|
<style>${f}</style>
|
|
207
207
|
<div class="root">
|
|
208
208
|
${r?`
|
package/dist/meter.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as h } from "./ElementBase-
|
|
1
|
+
import { E as h } from "./ElementBase-YlTLMsGk.mjs";
|
|
2
2
|
const b = `
|
|
3
3
|
:host {
|
|
4
4
|
display: block;
|
|
@@ -205,8 +205,7 @@ const b = `
|
|
|
205
205
|
}
|
|
206
206
|
`;
|
|
207
207
|
function s(i, e) {
|
|
208
|
-
if (i == null || i === "")
|
|
209
|
-
return e;
|
|
208
|
+
if (i == null || i === "") return e;
|
|
210
209
|
const t = Number(i);
|
|
211
210
|
return Number.isFinite(t) ? t : e;
|
|
212
211
|
}
|
|
@@ -240,7 +239,8 @@ class g extends h {
|
|
|
240
239
|
];
|
|
241
240
|
}
|
|
242
241
|
get metrics() {
|
|
243
|
-
|
|
242
|
+
const e = s(this.getAttribute("min"), 0);
|
|
243
|
+
let t = s(this.getAttribute("max"), 1);
|
|
244
244
|
t <= e && (t = e + 1);
|
|
245
245
|
const r = o(s(this.getAttribute("value"), e), e, t), l = o(s(this.getAttribute("low"), e + (t - e) * 0.25), e, t), n = o(s(this.getAttribute("high"), e + (t - e) * 0.75), e, t), a = Math.min(l, n), c = Math.max(l, n), u = this.getAttribute("optimum"), m = u == null ? null : o(s(u, r), e, t), d = (r - e) / (t - e) * 100, p = f(r, a, c, m);
|
|
246
246
|
return {
|
package/dist/multi-select.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const R=require("./ElementBase-EV6mVBUV.js"),w=require("./collection-qv8A8rq4.js");require("./listbox-B6QgECax.js");let M=0;const K=`
|
|
2
2
|
:host {
|
|
3
3
|
--ui-multi-select-border-color: color-mix(in srgb, var(--ui-color-border, #cbd5e1) 82%, transparent);
|
|
4
4
|
--ui-multi-select-border: var(--base-multi-select-border, 1px solid var(--ui-multi-select-border-color));
|
|
@@ -522,8 +522,8 @@
|
|
|
522
522
|
--ui-multi-select-chip-bg: color-mix(in srgb, var(--ui-color-danger, #dc2626) 12%, transparent);
|
|
523
523
|
--ui-multi-select-chip-text: color-mix(in srgb, var(--ui-color-danger, #dc2626) 82%, #0f172a 18%);
|
|
524
524
|
}
|
|
525
|
-
`;function
|
|
526
|
-
<style>${
|
|
525
|
+
`;function I(r){if(!r)return[];try{const e=JSON.parse(r);if(!Array.isArray(e))return[];const t=[],s=(l,n)=>{const a=String(l.value??"").trim();a&&t.push({value:a,label:String(l.label??a),description:l.description?String(l.description):void 0,disabled:!!l.disabled,group:n})};return e.forEach(l=>{if(!l||typeof l!="object")return;const n=l;if(Array.isArray(n.options)){const a=String(n.label??"").trim();n.options.forEach(u=>{!u||typeof u!="object"||s(u,a||void 0)});return}s(n)}),t}catch{return[]}}function v(r){if(!r)return[];const e=r.trim();if(!e)return[];if(e.startsWith("["))try{const t=JSON.parse(e);if(Array.isArray(t))return t.map(s=>String(s)).filter(Boolean)}catch{}return e.split(",").map(t=>t.trim()).filter(Boolean)}function L(r){return!r||r==="default"?null:r==="none"||r==="square"?"0px":r==="sm"?"8px":r==="md"||r==="soft"?"12px":r==="lg"?"16px":r==="full"?"999px":/^\d+(\.\d+)?$/.test(r)?`${r}px`:/^\d+(\.\d+)?(px|rem|em|%)$/.test(r)?r:null}function W(r){return r==="sm"||r==="1"?"sm":r==="lg"||r==="3"?"lg":"md"}class O extends R.ElementBase{constructor(){super(),this._options=[],this._selected=[],this._query="",this._inputEl=null,this._shellEl=null,this._panelEl=null,this._formUnregister=null,this._outsidePointerDown=null,this._activeValue=null,this._uid=`ui-multi-select-${++M}`,this._isSyncingUi=!1,this._needsSyncUi=!1,this._onInput=this._onInput.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onToggle=this._onToggle.bind(this),this._onFocusIn=this._onFocusIn.bind(this),this._onFocusOut=this._onFocusOut.bind(this)}static get observedAttributes(){return["options","value","placeholder","label","description","data-error","name","required","disabled","readonly","loading","loading-text","clearable","open","max-selections","render-limit","selection-indicator","option-border","variant","tone","density","shape","size","radius","option-radius","elevation"]}get value(){return[...this._selected]}set value(e){const t=Array.isArray(e)?e.map(s=>String(s)).filter(Boolean):v(String(e??""));this._setSelected(t,"api")}get open(){return this.hasAttribute("open")}set open(e){e?this.setAttribute("open",""):this.removeAttribute("open")}connectedCallback(){super.connectedCallback(),this._registerWithForm()}disconnectedCallback(){this._detachOutsideListener(),this._formUnregister&&(this._formUnregister(),this._formUnregister=null),super.disconnectedCallback()}attributeChangedCallback(e,t,s){if(t!==s&&(e==="options"&&(this._options=I(s)),e==="value"&&(this._selected=v(s)),e==="name"&&this.isConnected&&this._registerWithForm(),!!this._shellEl)){if(e==="variant"||e==="tone"||e==="density"||e==="shape"||e==="size"||e==="radius"||e==="option-radius"||e==="elevation"){this._syncVisualState(),e==="size"&&this._syncUi();return}this._syncUi()}}shouldRenderOnAttributeChange(){return!1}render(){this.setContent(`
|
|
526
|
+
<style>${K}</style>
|
|
527
527
|
<div class="root">
|
|
528
528
|
<div class="meta" hidden>
|
|
529
529
|
<div class="label" hidden><span class="label-text"></span><span class="required" hidden>*</span></div>
|
|
@@ -546,4 +546,4 @@
|
|
|
546
546
|
</div>
|
|
547
547
|
<div class="error" part="error" hidden></div>
|
|
548
548
|
</div>
|
|
549
|
-
`),this._options=N(this.getAttribute("options")),this._selected=E(this.getAttribute("value")),this._shellEl=this.root.querySelector(".shell"),this._inputEl=this.root.querySelector(".input"),this._panelEl=this.root.querySelector(".panel"),(e=this._inputEl)==null||e.addEventListener("input",this._onInput),(t=this._inputEl)==null||t.addEventListener("keydown",this._onKeyDown),(i=this.root.querySelector(".toggle"))==null||i.addEventListener("click",this._onToggle),(r=this.root.querySelector(".clear"))==null||r.addEventListener("click",()=>this._clearSelection("clear-button")),(o=this._shellEl)==null||o.addEventListener("focusin",this._onFocusIn),(n=this._shellEl)==null||n.addEventListener("focusout",this._onFocusOut),this._syncVisualState(),this._syncUi()}_syncVisualState(){const e=D(this.getAttribute("radius")||this.getAttribute("shape"));e?this.style.setProperty("--ui-multi-select-radius",e):this.style.removeProperty("--ui-multi-select-radius");const t=D(this.getAttribute("option-radius"));t?this.style.setProperty("--ui-multi-select-option-radius",t):this.style.removeProperty("--ui-multi-select-option-radius");const i=H(this.getAttribute("size"));this.setAttribute("data-size",i)}_selectionIndicator(){const e=(this.getAttribute("selection-indicator")||"checkbox").trim().toLowerCase();return e==="none"||e==="check"?e:"checkbox"}_isInteractionLocked(){return this.hasAttribute("disabled")||this.hasAttribute("readonly")}_attachOutsideListener(){this._outsidePointerDown||typeof document>"u"||(this._outsidePointerDown=e=>{const t=e.composedPath();t.includes(this)||t.includes(this.root)||this._panelEl&&t.includes(this._panelEl)||this._inputEl&&t.includes(this._inputEl)||(this.open=!1,this._syncUi())},document.addEventListener("pointerdown",this._outsidePointerDown))}_detachOutsideListener(){!this._outsidePointerDown||typeof document>"u"||(document.removeEventListener("pointerdown",this._outsidePointerDown),this._outsidePointerDown=null)}_filteredOptions(){const e=U.normalizeCollectionText(this._query);return e?this._options.filter(t=>U.normalizeCollectionText(t.label).includes(e)||U.normalizeCollectionText(t.value).includes(e)):this._options}_renderLimit(){const e=Number(this.getAttribute("render-limit"));return Number.isFinite(e)&&e>0?e:200}_findOptionNode(e){return!e||!this._panelEl?null:Array.from(this._panelEl.querySelectorAll(".option")).find(t=>t.getAttribute("data-value")===e)}_selectedOptionRecords(){return this._selected.map(e=>this._options.find(t=>t.value===e)).filter(Boolean)}_emitChange(e,t){this.dispatchEvent(new CustomEvent("change",{detail:{value:[...this._selected],previousValue:t,selectedItems:this._selectedOptionRecords(),source:e},bubbles:!0,composed:!0}))}_setSelected(e,t){const i=Number(this.getAttribute("max-selections")),r=[];e.forEach(a=>{if(!a)return;const p=r.indexOf(a);p>=0&&r.splice(p,1),r.push(a)});const o=Number.isFinite(i)&&i>0?r.slice(-i):r,n=[...this._selected];if(n.length===o.length&&n.every((a,p)=>a===o[p])){this._syncUi();return}this._selected=o,this._selected.length?this.setAttribute("value",JSON.stringify(this._selected)):this.removeAttribute("value"),this._syncUi(),this._emitChange(t,n)}_toggleValue(e,t){if(this._isInteractionLocked()||this.hasAttribute("loading"))return;const r=this._selected.includes(e)?this._selected.filter(o=>o!==e):[...this._selected,e];this._activeValue=e,this._setSelected(r,t)}_removeChip(e){this._isInteractionLocked()||(this._activeValue===e&&(this._activeValue=null),this._toggleValue(e,"remove-chip"))}_clearSelection(e){var t,i;if(!(this._isInteractionLocked()||!this._selected.length)){this._activeValue=null,this._setSelected([],e),this._query="",this._inputEl&&(this._inputEl.value="");try{(t=this._inputEl)==null||t.focus({preventScroll:!0})}catch{(i=this._inputEl)==null||i.focus()}}}_registerWithForm(){var e;this._formUnregister&&(this._formUnregister(),this._formUnregister=null);try{const i=this.getRootNode().host,o=((e=i==null?void 0:i.closest)==null?void 0:e.call(i,"ui-form"))||null||this.closest("ui-form"),n=this.getAttribute("name");o&&typeof o.registerField=="function"&&n&&(this._formUnregister=o.registerField(n,{name:n,getValue:()=>[...this._selected],setValue:a=>{Array.isArray(a)?this._setSelected(a.map(p=>String(p)),"form"):this._setSelected(E(String(a??"")),"form")},validate:async()=>this.hasAttribute("required")&&this._selected.length===0?{valid:!1,message:"At least one option is required"}:{valid:!0},setError:a=>{a?this.setAttribute("data-error",a):this.removeAttribute("data-error"),this._syncUi()}}))}catch{}}_onInput(e){var t;this._isInteractionLocked()||(this._query=((t=e.target)==null?void 0:t.value)||"",this.open||(this.open=!0),this._syncUi())}_onKeyDown(e){var t,i,r,o,n,a,p,f;if(!this._isInteractionLocked()){if(e.key==="ArrowDown"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),(t=this._panelEl)!=null&&t.getActiveItem()?this._panelEl.move(1,{focus:!1,owner:this._inputEl,scroll:!1}):(i=this._panelEl)==null||i.focusBoundary("first",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="ArrowUp"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),(r=this._panelEl)!=null&&r.getActiveItem()?this._panelEl.move(-1,{focus:!1,owner:this._inputEl,scroll:!1}):(o=this._panelEl)==null||o.focusBoundary("last",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="Home"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),(n=this._panelEl)==null||n.focusBoundary("first",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="End"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),(a=this._panelEl)==null||a.focusBoundary("last",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="Enter"){const v=(p=this._panelEl)==null?void 0:p.getActiveItem();if(v){e.preventDefault();const g=v.getAttribute("data-value");g&&(this._activeValue=g,this._toggleValue(g,"keyboard"),this._query="",this._inputEl&&(this._inputEl.value=""),(f=this._inputEl)==null||f.focus())}return}if(e.key==="Escape"){e.preventDefault(),this._query?(this._query="",this._inputEl&&(this._inputEl.value="")):this.open=!1,this._syncUi();return}if(e.key==="Tab"){this.open=!1,this._syncUi();return}e.key==="Backspace"&&!this._query&&this._selected.length&&this._removeChip(this._selected[this._selected.length-1])}}_onToggle(){var e;this._isInteractionLocked()||(this.open=!this.open,this._syncUi(),this.open&&((e=this._inputEl)==null||e.focus()))}_onFocusIn(){this._isInteractionLocked()||(this.open=!0),this._syncUi()}_onFocusOut(e){var t;(t=this._shellEl)!=null&&t.contains(e.relatedTarget)||(this.open=!1,this._syncUi())}_syncUi(){var e;if(this._isSyncingUi){this._needsSyncUi=!0;return}if(!(!this._shellEl||!this._inputEl||!this._panelEl)){this._isSyncingUi=!0;try{const t=(this.getAttribute("label")||"").trim(),i=(this.getAttribute("description")||"").trim(),r=(this.getAttribute("data-error")||"").trim(),o=this.root.querySelector(".meta"),n=this.root.querySelector(".label"),a=this.root.querySelector(".label-text"),p=this.root.querySelector(".required"),f=this.root.querySelector(".description"),v=this.root.querySelector(".chips"),g=this.root.querySelector(".toggle"),q=this.root.querySelector(".clear"),C=this.root.querySelector(".error"),I=this._selectionIndicator(),L=this.hasAttribute("loading"),V=(this.getAttribute("loading-text")||"Loading options...").trim(),_=this.hasAttribute("disabled"),x=this.hasAttribute("readonly"),B=this.hasAttribute("clearable");o.hidden=!t&&!i,n.hidden=!t,a.textContent=t,p.hidden=!this.hasAttribute("required"),f.hidden=!i,f.textContent=i,C.hidden=!r,C.textContent=r,this._shellEl.setAttribute("data-open",this.open?"true":"false"),this._shellEl.setAttribute("data-invalid",r?"true":"false"),this._shellEl.setAttribute("data-readonly",x?"true":"false"),g.setAttribute("data-open",this.open?"true":"false"),g.disabled=_||x,q.hidden=!B||this._selected.length===0,q.disabled=_||x,this._inputEl.setAttribute("aria-expanded",this.open?"true":"false"),this._inputEl.setAttribute("aria-busy",L?"true":"false"),this._inputEl.placeholder=this._selected.length?"":this.getAttribute("placeholder")||"Select options",this._inputEl.disabled=_,this._inputEl.readOnly=x,this._inputEl.value!==this._query&&(this._inputEl.value=this._query),this.open?this._attachOutsideListener():this._detachOutsideListener(),v.replaceChildren(...this._selectedOptionRecords().map(s=>{const b=document.createElement("span");b.className="chip",b.textContent=s.label;const d=document.createElement("button");return d.type="button",d.className="chip-remove",d.setAttribute("data-value",s.value),d.setAttribute("aria-label",`Remove ${s.label}`),d.textContent="×",d.disabled=this.hasAttribute("disabled"),d.addEventListener("pointerdown",u=>{u.preventDefault()}),d.addEventListener("click",u=>{var m;u.preventDefault(),u.stopPropagation(),this._removeChip(s.value),(m=this._inputEl)==null||m.focus()}),b.append(d),b}));const A=this._filteredOptions(),P=this._renderLimit(),k=A.slice(0,P),T=A.length>k.length;if(this._panelEl.hidden=!this.open,L){const s=document.createElement("div");s.className="status",s.textContent=V,this._panelEl.replaceChildren(s),this._inputEl.removeAttribute("aria-activedescendant");return}if(!A.length){const s=document.createElement("div");s.className="status",s.textContent="No matching options",this._panelEl.replaceChildren(s),this._inputEl.removeAttribute("aria-activedescendant");return}const $=new Set(this._selected),R=(e=this._panelEl.getActiveItem())==null?void 0:e.getAttribute("data-value"),y=[];let w=null;if(k.forEach((s,b)=>{if(s.group&&s.group!==w){const c=document.createElement("div");c.className="group",c.setAttribute("role","presentation"),c.textContent=s.group,y.push(c),w=s.group}else s.group||(w=null);const d=$.has(s.value),u=document.createElement("button");u.className="option",u.type="button",u.id=`${this._uid}-option-${b}`,u.setAttribute("role","option"),u.setAttribute("data-value",s.value),u.setAttribute("data-selected",String(d)),u.setAttribute("data-indicator",I),u.setAttribute("aria-selected",d?"true":"false"),(s.disabled||_||x)&&(u.disabled=!0),u.addEventListener("pointerdown",c=>{c.preventDefault()}),u.addEventListener("click",c=>{var O;c.preventDefault(),!s.disabled&&(this._activeValue=s.value,this._toggleValue(s.value,"option"),this._query="",this._inputEl&&(this._inputEl.value=""),(O=this._inputEl)==null||O.focus())});const m=document.createElement("div");m.className="option-text";const S=document.createElement("span");if(S.className="option-label",S.textContent=s.label,m.append(S),s.description){const c=document.createElement("span");c.className="option-description",c.textContent=s.description,m.append(c)}if(I!=="none"){const c=document.createElement("span");c.className="check",c.textContent=d?"✓":"",u.append(c)}u.append(m),y.push(u)}),T){const s=document.createElement("div");s.className="status",s.textContent=`Showing first ${k.length} results. Keep typing to narrow the list.`,y.push(s)}this._panelEl.replaceChildren(...y);const M=R||this._activeValue||this._selected[this._selected.length-1]||null,z=this._findOptionNode(M),h=z&&!z.hasAttribute("disabled")?this._panelEl.setActiveItem(z,{focus:!1,owner:this._inputEl,scroll:!1}):(this._panelEl.clearActive(),null);this._activeValue=(h==null?void 0:h.getAttribute("data-value"))||null,h!=null&&h.id?this._inputEl.setAttribute("aria-activedescendant",h.id):this._inputEl.removeAttribute("aria-activedescendant")}finally{this._isSyncingUi=!1,this._needsSyncUi&&(this._needsSyncUi=!1,this._syncUi())}}}}typeof customElements<"u"&&!customElements.get("ui-multi-select")&&customElements.define("ui-multi-select",F);exports.UIMultiSelect=F;
|
|
549
|
+
`),this._options=I(this.getAttribute("options")),this._selected=v(this.getAttribute("value")),this._shellEl=this.root.querySelector(".shell"),this._inputEl=this.root.querySelector(".input"),this._panelEl=this.root.querySelector(".panel"),this._inputEl?.addEventListener("input",this._onInput),this._inputEl?.addEventListener("keydown",this._onKeyDown),this.root.querySelector(".toggle")?.addEventListener("click",this._onToggle),this.root.querySelector(".clear")?.addEventListener("click",()=>this._clearSelection("clear-button")),this._shellEl?.addEventListener("focusin",this._onFocusIn),this._shellEl?.addEventListener("focusout",this._onFocusOut),this._syncVisualState(),this._syncUi()}_syncVisualState(){const e=L(this.getAttribute("radius")||this.getAttribute("shape"));e?this.style.setProperty("--ui-multi-select-radius",e):this.style.removeProperty("--ui-multi-select-radius");const t=L(this.getAttribute("option-radius"));t?this.style.setProperty("--ui-multi-select-option-radius",t):this.style.removeProperty("--ui-multi-select-option-radius");const s=W(this.getAttribute("size"));this.setAttribute("data-size",s)}_selectionIndicator(){const e=(this.getAttribute("selection-indicator")||"checkbox").trim().toLowerCase();return e==="none"||e==="check"?e:"checkbox"}_isInteractionLocked(){return this.hasAttribute("disabled")||this.hasAttribute("readonly")}_attachOutsideListener(){this._outsidePointerDown||typeof document>"u"||(this._outsidePointerDown=e=>{const t=e.composedPath();t.includes(this)||t.includes(this.root)||this._panelEl&&t.includes(this._panelEl)||this._inputEl&&t.includes(this._inputEl)||(this.open=!1,this._syncUi())},document.addEventListener("pointerdown",this._outsidePointerDown))}_detachOutsideListener(){!this._outsidePointerDown||typeof document>"u"||(document.removeEventListener("pointerdown",this._outsidePointerDown),this._outsidePointerDown=null)}_filteredOptions(){const e=w.normalizeCollectionText(this._query);return e?this._options.filter(t=>w.normalizeCollectionText(t.label).includes(e)||w.normalizeCollectionText(t.value).includes(e)):this._options}_renderLimit(){const e=Number(this.getAttribute("render-limit"));return Number.isFinite(e)&&e>0?e:200}_findOptionNode(e){return!e||!this._panelEl?null:Array.from(this._panelEl.querySelectorAll(".option")).find(t=>t.getAttribute("data-value")===e)}_selectedOptionRecords(){return this._selected.map(e=>this._options.find(t=>t.value===e)).filter(Boolean)}_emitChange(e,t){this.dispatchEvent(new CustomEvent("change",{detail:{value:[...this._selected],previousValue:t,selectedItems:this._selectedOptionRecords(),source:e},bubbles:!0,composed:!0}))}_setSelected(e,t){const s=Number(this.getAttribute("max-selections")),l=[];e.forEach(u=>{if(!u)return;const p=l.indexOf(u);p>=0&&l.splice(p,1),l.push(u)});const n=Number.isFinite(s)&&s>0?l.slice(-s):l,a=[...this._selected];if(a.length===n.length&&a.every((u,p)=>u===n[p])){this._syncUi();return}this._selected=n,this._selected.length?this.setAttribute("value",JSON.stringify(this._selected)):this.removeAttribute("value"),this._syncUi(),this._emitChange(t,a)}_toggleValue(e,t){if(this._isInteractionLocked()||this.hasAttribute("loading"))return;const l=this._selected.includes(e)?this._selected.filter(n=>n!==e):[...this._selected,e];this._activeValue=e,this._setSelected(l,t)}_removeChip(e){this._isInteractionLocked()||(this._activeValue===e&&(this._activeValue=null),this._toggleValue(e,"remove-chip"))}_clearSelection(e){if(!(this._isInteractionLocked()||!this._selected.length)){this._activeValue=null,this._setSelected([],e),this._query="",this._inputEl&&(this._inputEl.value="");try{this._inputEl?.focus({preventScroll:!0})}catch{this._inputEl?.focus()}}}_registerWithForm(){this._formUnregister&&(this._formUnregister(),this._formUnregister=null);try{const l=this.getRootNode().host?.closest?.("ui-form")||null||this.closest("ui-form"),n=this.getAttribute("name");l&&typeof l.registerField=="function"&&n&&(this._formUnregister=l.registerField(n,{name:n,getValue:()=>[...this._selected],setValue:a=>{Array.isArray(a)?this._setSelected(a.map(u=>String(u)),"form"):this._setSelected(v(String(a??"")),"form")},validate:async()=>this.hasAttribute("required")&&this._selected.length===0?{valid:!1,message:"At least one option is required"}:{valid:!0},setError:a=>{a?this.setAttribute("data-error",a):this.removeAttribute("data-error"),this._syncUi()}}))}catch{}}_onInput(e){this._isInteractionLocked()||(this._query=e.target?.value||"",this.open||(this.open=!0),this._syncUi())}_onKeyDown(e){if(!this._isInteractionLocked()){if(e.key==="ArrowDown"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.getActiveItem()?this._panelEl.move(1,{focus:!1,owner:this._inputEl,scroll:!1}):this._panelEl?.focusBoundary("first",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="ArrowUp"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.getActiveItem()?this._panelEl.move(-1,{focus:!1,owner:this._inputEl,scroll:!1}):this._panelEl?.focusBoundary("last",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="Home"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.focusBoundary("first",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="End"){e.preventDefault(),this.open||(this.open=!0),this._syncUi(),this._panelEl?.focusBoundary("last",{focus:!1,owner:this._inputEl,scroll:!1});return}if(e.key==="Enter"){const t=this._panelEl?.getActiveItem();if(t){e.preventDefault();const s=t.getAttribute("data-value");s&&(this._activeValue=s,this._toggleValue(s,"keyboard"),this._query="",this._inputEl&&(this._inputEl.value=""),this._inputEl?.focus())}return}if(e.key==="Escape"){e.preventDefault(),this._query?(this._query="",this._inputEl&&(this._inputEl.value="")):this.open=!1,this._syncUi();return}if(e.key==="Tab"){this.open=!1,this._syncUi();return}e.key==="Backspace"&&!this._query&&this._selected.length&&this._removeChip(this._selected[this._selected.length-1])}}_onToggle(){this._isInteractionLocked()||(this.open=!this.open,this._syncUi(),this.open&&this._inputEl?.focus())}_onFocusIn(){this._isInteractionLocked()||(this.open=!0),this._syncUi()}_onFocusOut(e){this._shellEl?.contains(e.relatedTarget)||(this.open=!1,this._syncUi())}_syncUi(){if(this._isSyncingUi){this._needsSyncUi=!0;return}if(!(!this._shellEl||!this._inputEl||!this._panelEl)){this._isSyncingUi=!0;try{const e=(this.getAttribute("label")||"").trim(),t=(this.getAttribute("description")||"").trim(),s=(this.getAttribute("data-error")||"").trim(),l=this.root.querySelector(".meta"),n=this.root.querySelector(".label"),a=this.root.querySelector(".label-text"),u=this.root.querySelector(".required"),p=this.root.querySelector(".description"),N=this.root.querySelector(".chips"),z=this.root.querySelector(".toggle"),S=this.root.querySelector(".clear"),U=this.root.querySelector(".error"),C=this._selectionIndicator(),q=this.hasAttribute("loading"),D=(this.getAttribute("loading-text")||"Loading options...").trim(),g=this.hasAttribute("disabled"),m=this.hasAttribute("readonly"),F=this.hasAttribute("clearable");l.hidden=!e&&!t,n.hidden=!e,a.textContent=e,u.hidden=!this.hasAttribute("required"),p.hidden=!t,p.textContent=t,U.hidden=!s,U.textContent=s,this._shellEl.setAttribute("data-open",this.open?"true":"false"),this._shellEl.setAttribute("data-invalid",s?"true":"false"),this._shellEl.setAttribute("data-readonly",m?"true":"false"),z.setAttribute("data-open",this.open?"true":"false"),z.disabled=g||m,S.hidden=!F||this._selected.length===0,S.disabled=g||m,this._inputEl.setAttribute("aria-expanded",this.open?"true":"false"),this._inputEl.setAttribute("aria-busy",q?"true":"false"),this._inputEl.placeholder=this._selected.length?"":this.getAttribute("placeholder")||"Select options",this._inputEl.disabled=g,this._inputEl.readOnly=m,this._inputEl.value!==this._query&&(this._inputEl.value=this._query),this.open?this._attachOutsideListener():this._detachOutsideListener(),N.replaceChildren(...this._selectedOptionRecords().map(i=>{const h=document.createElement("span");h.className="chip",h.textContent=i.label;const d=document.createElement("button");return d.type="button",d.className="chip-remove",d.setAttribute("data-value",i.value),d.setAttribute("aria-label",`Remove ${i.label}`),d.textContent="×",d.disabled=this.hasAttribute("disabled"),d.addEventListener("pointerdown",o=>{o.preventDefault()}),d.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation(),this._removeChip(i.value),this._inputEl?.focus()}),h.append(d),h}));const x=this._filteredOptions(),V=this._renderLimit(),_=x.slice(0,V),B=x.length>_.length;if(this._panelEl.hidden=!this.open,q){const i=document.createElement("div");i.className="status",i.textContent=D,this._panelEl.replaceChildren(i),this._inputEl.removeAttribute("aria-activedescendant");return}if(!x.length){const i=document.createElement("div");i.className="status",i.textContent="No matching options",this._panelEl.replaceChildren(i),this._inputEl.removeAttribute("aria-activedescendant");return}const P=new Set(this._selected),T=this._panelEl.getActiveItem()?.getAttribute("data-value"),b=[];let y=null;if(_.forEach((i,h)=>{if(i.group&&i.group!==y){const c=document.createElement("div");c.className="group",c.setAttribute("role","presentation"),c.textContent=i.group,b.push(c),y=i.group}else i.group||(y=null);const d=P.has(i.value),o=document.createElement("button");o.className="option",o.type="button",o.id=`${this._uid}-option-${h}`,o.setAttribute("role","option"),o.setAttribute("data-value",i.value),o.setAttribute("data-selected",String(d)),o.setAttribute("data-indicator",C),o.setAttribute("aria-selected",d?"true":"false"),(i.disabled||g||m)&&(o.disabled=!0),o.addEventListener("pointerdown",c=>{c.preventDefault()}),o.addEventListener("click",c=>{c.preventDefault(),!i.disabled&&(this._activeValue=i.value,this._toggleValue(i.value,"option"),this._query="",this._inputEl&&(this._inputEl.value=""),this._inputEl?.focus())});const f=document.createElement("div");f.className="option-text";const k=document.createElement("span");if(k.className="option-label",k.textContent=i.label,f.append(k),i.description){const c=document.createElement("span");c.className="option-description",c.textContent=i.description,f.append(c)}if(C!=="none"){const c=document.createElement("span");c.className="check",c.textContent=d?"✓":"",o.append(c)}o.append(f),b.push(o)}),B){const i=document.createElement("div");i.className="status",i.textContent=`Showing first ${_.length} results. Keep typing to narrow the list.`,b.push(i)}this._panelEl.replaceChildren(...b);const $=T||this._activeValue||this._selected[this._selected.length-1]||null,E=this._findOptionNode($),A=E&&!E.hasAttribute("disabled")?this._panelEl.setActiveItem(E,{focus:!1,owner:this._inputEl,scroll:!1}):(this._panelEl.clearActive(),null);this._activeValue=A?.getAttribute("data-value")||null,A?.id?this._inputEl.setAttribute("aria-activedescendant",A.id):this._inputEl.removeAttribute("aria-activedescendant")}finally{this._isSyncingUi=!1,this._needsSyncUi&&(this._needsSyncUi=!1,this._syncUi())}}}}typeof customElements<"u"&&!customElements.get("ui-multi-select")&&customElements.define("ui-multi-select",O);exports.UIMultiSelect=O;
|
package/dist/multi-select.esm.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { E as
|
|
2
|
-
import { n as
|
|
3
|
-
import "./listbox-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const H = `
|
|
1
|
+
import { E as T } from "./ElementBase-YlTLMsGk.mjs";
|
|
2
|
+
import { n as w } from "./collection-C7URGjEI.mjs";
|
|
3
|
+
import "./listbox-DJamVeFj.mjs";
|
|
4
|
+
let R = 0;
|
|
5
|
+
const K = `
|
|
7
6
|
:host {
|
|
8
7
|
--ui-multi-select-border-color: color-mix(in srgb, var(--ui-color-border, #cbd5e1) 82%, transparent);
|
|
9
8
|
--ui-multi-select-border: var(--base-multi-select-border, 1px solid var(--ui-multi-select-border-color));
|
|
@@ -528,64 +527,58 @@ const H = `
|
|
|
528
527
|
--ui-multi-select-chip-text: color-mix(in srgb, var(--ui-color-danger, #dc2626) 82%, #0f172a 18%);
|
|
529
528
|
}
|
|
530
529
|
`;
|
|
531
|
-
function
|
|
532
|
-
if (!
|
|
533
|
-
return [];
|
|
530
|
+
function I(r) {
|
|
531
|
+
if (!r) return [];
|
|
534
532
|
try {
|
|
535
|
-
const e = JSON.parse(
|
|
536
|
-
if (!Array.isArray(e))
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
group: o
|
|
533
|
+
const e = JSON.parse(r);
|
|
534
|
+
if (!Array.isArray(e)) return [];
|
|
535
|
+
const t = [], s = (l, n) => {
|
|
536
|
+
const a = String(l.value ?? "").trim();
|
|
537
|
+
a && t.push({
|
|
538
|
+
value: a,
|
|
539
|
+
label: String(l.label ?? a),
|
|
540
|
+
description: l.description ? String(l.description) : void 0,
|
|
541
|
+
disabled: !!l.disabled,
|
|
542
|
+
group: n
|
|
546
543
|
});
|
|
547
544
|
};
|
|
548
|
-
return e.forEach((
|
|
549
|
-
if (!
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
!a || typeof a != "object" || i(a, n || void 0);
|
|
545
|
+
return e.forEach((l) => {
|
|
546
|
+
if (!l || typeof l != "object") return;
|
|
547
|
+
const n = l;
|
|
548
|
+
if (Array.isArray(n.options)) {
|
|
549
|
+
const a = String(n.label ?? "").trim();
|
|
550
|
+
n.options.forEach((u) => {
|
|
551
|
+
!u || typeof u != "object" || s(u, a || void 0);
|
|
556
552
|
});
|
|
557
553
|
return;
|
|
558
554
|
}
|
|
559
|
-
|
|
555
|
+
s(n);
|
|
560
556
|
}), t;
|
|
561
557
|
} catch {
|
|
562
558
|
return [];
|
|
563
559
|
}
|
|
564
560
|
}
|
|
565
|
-
function
|
|
566
|
-
if (!
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
if (!e)
|
|
570
|
-
return [];
|
|
561
|
+
function x(r) {
|
|
562
|
+
if (!r) return [];
|
|
563
|
+
const e = r.trim();
|
|
564
|
+
if (!e) return [];
|
|
571
565
|
if (e.startsWith("["))
|
|
572
566
|
try {
|
|
573
567
|
const t = JSON.parse(e);
|
|
574
|
-
if (Array.isArray(t))
|
|
575
|
-
return t.map((i) => String(i)).filter(Boolean);
|
|
568
|
+
if (Array.isArray(t)) return t.map((s) => String(s)).filter(Boolean);
|
|
576
569
|
} catch {
|
|
577
570
|
}
|
|
578
571
|
return e.split(",").map((t) => t.trim()).filter(Boolean);
|
|
579
572
|
}
|
|
580
|
-
function
|
|
581
|
-
return !
|
|
573
|
+
function L(r) {
|
|
574
|
+
return !r || r === "default" ? null : r === "none" || r === "square" ? "0px" : r === "sm" ? "8px" : r === "md" || r === "soft" ? "12px" : r === "lg" ? "16px" : r === "full" ? "999px" : /^\d+(\.\d+)?$/.test(r) ? `${r}px` : /^\d+(\.\d+)?(px|rem|em|%)$/.test(r) ? r : null;
|
|
582
575
|
}
|
|
583
|
-
function
|
|
584
|
-
return
|
|
576
|
+
function W(r) {
|
|
577
|
+
return r === "sm" || r === "1" ? "sm" : r === "lg" || r === "3" ? "lg" : "md";
|
|
585
578
|
}
|
|
586
|
-
class
|
|
579
|
+
class H extends T {
|
|
587
580
|
constructor() {
|
|
588
|
-
super(), this._options = [], this._selected = [], this._query = "", this._inputEl = null, this._shellEl = null, this._panelEl = null, this._formUnregister = null, this._outsidePointerDown = null, this._activeValue = null, this._uid = `ui-multi-select-${++
|
|
581
|
+
super(), this._options = [], this._selected = [], this._query = "", this._inputEl = null, this._shellEl = null, this._panelEl = null, this._formUnregister = null, this._outsidePointerDown = null, this._activeValue = null, this._uid = `ui-multi-select-${++R}`, this._isSyncingUi = !1, this._needsSyncUi = !1, this._onInput = this._onInput.bind(this), this._onKeyDown = this._onKeyDown.bind(this), this._onToggle = this._onToggle.bind(this), this._onFocusIn = this._onFocusIn.bind(this), this._onFocusOut = this._onFocusOut.bind(this);
|
|
589
582
|
}
|
|
590
583
|
static get observedAttributes() {
|
|
591
584
|
return [
|
|
@@ -621,7 +614,7 @@ class j extends K {
|
|
|
621
614
|
return [...this._selected];
|
|
622
615
|
}
|
|
623
616
|
set value(e) {
|
|
624
|
-
const t = Array.isArray(e) ? e.map((
|
|
617
|
+
const t = Array.isArray(e) ? e.map((s) => String(s)).filter(Boolean) : x(String(e ?? ""));
|
|
625
618
|
this._setSelected(t, "api");
|
|
626
619
|
}
|
|
627
620
|
get open() {
|
|
@@ -636,8 +629,8 @@ class j extends K {
|
|
|
636
629
|
disconnectedCallback() {
|
|
637
630
|
this._detachOutsideListener(), this._formUnregister && (this._formUnregister(), this._formUnregister = null), super.disconnectedCallback();
|
|
638
631
|
}
|
|
639
|
-
attributeChangedCallback(e, t,
|
|
640
|
-
if (t !==
|
|
632
|
+
attributeChangedCallback(e, t, s) {
|
|
633
|
+
if (t !== s && (e === "options" && (this._options = I(s)), e === "value" && (this._selected = x(s)), e === "name" && this.isConnected && this._registerWithForm(), !!this._shellEl)) {
|
|
641
634
|
if (e === "variant" || e === "tone" || e === "density" || e === "shape" || e === "size" || e === "radius" || e === "option-radius" || e === "elevation") {
|
|
642
635
|
this._syncVisualState(), e === "size" && this._syncUi();
|
|
643
636
|
return;
|
|
@@ -649,9 +642,8 @@ class j extends K {
|
|
|
649
642
|
return !1;
|
|
650
643
|
}
|
|
651
644
|
render() {
|
|
652
|
-
var e, t, i, r, o, n;
|
|
653
645
|
this.setContent(`
|
|
654
|
-
<style>${
|
|
646
|
+
<style>${K}</style>
|
|
655
647
|
<div class="root">
|
|
656
648
|
<div class="meta" hidden>
|
|
657
649
|
<div class="label" hidden><span class="label-text"></span><span class="required" hidden>*</span></div>
|
|
@@ -674,15 +666,15 @@ class j extends K {
|
|
|
674
666
|
</div>
|
|
675
667
|
<div class="error" part="error" hidden></div>
|
|
676
668
|
</div>
|
|
677
|
-
`), this._options =
|
|
669
|
+
`), this._options = I(this.getAttribute("options")), this._selected = x(this.getAttribute("value")), this._shellEl = this.root.querySelector(".shell"), this._inputEl = this.root.querySelector(".input"), this._panelEl = this.root.querySelector(".panel"), this._inputEl?.addEventListener("input", this._onInput), this._inputEl?.addEventListener("keydown", this._onKeyDown), this.root.querySelector(".toggle")?.addEventListener("click", this._onToggle), this.root.querySelector(".clear")?.addEventListener("click", () => this._clearSelection("clear-button")), this._shellEl?.addEventListener("focusin", this._onFocusIn), this._shellEl?.addEventListener("focusout", this._onFocusOut), this._syncVisualState(), this._syncUi();
|
|
678
670
|
}
|
|
679
671
|
_syncVisualState() {
|
|
680
|
-
const e =
|
|
672
|
+
const e = L(this.getAttribute("radius") || this.getAttribute("shape"));
|
|
681
673
|
e ? this.style.setProperty("--ui-multi-select-radius", e) : this.style.removeProperty("--ui-multi-select-radius");
|
|
682
|
-
const t =
|
|
674
|
+
const t = L(this.getAttribute("option-radius"));
|
|
683
675
|
t ? this.style.setProperty("--ui-multi-select-option-radius", t) : this.style.removeProperty("--ui-multi-select-option-radius");
|
|
684
|
-
const
|
|
685
|
-
this.setAttribute("data-size",
|
|
676
|
+
const s = W(this.getAttribute("size"));
|
|
677
|
+
this.setAttribute("data-size", s);
|
|
686
678
|
}
|
|
687
679
|
_selectionIndicator() {
|
|
688
680
|
const e = (this.getAttribute("selection-indicator") || "checkbox").trim().toLowerCase();
|
|
@@ -701,8 +693,8 @@ class j extends K {
|
|
|
701
693
|
!this._outsidePointerDown || typeof document > "u" || (document.removeEventListener("pointerdown", this._outsidePointerDown), this._outsidePointerDown = null);
|
|
702
694
|
}
|
|
703
695
|
_filteredOptions() {
|
|
704
|
-
const e =
|
|
705
|
-
return e ? this._options.filter((t) =>
|
|
696
|
+
const e = w(this._query);
|
|
697
|
+
return e ? this._options.filter((t) => w(t.label).includes(e) || w(t.value).includes(e)) : this._options;
|
|
706
698
|
}
|
|
707
699
|
_renderLimit() {
|
|
708
700
|
const e = Number(this.getAttribute("render-limit"));
|
|
@@ -729,50 +721,46 @@ class j extends K {
|
|
|
729
721
|
);
|
|
730
722
|
}
|
|
731
723
|
_setSelected(e, t) {
|
|
732
|
-
const
|
|
733
|
-
e.forEach((
|
|
734
|
-
if (!
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
p >= 0 && r.splice(p, 1), r.push(a);
|
|
724
|
+
const s = Number(this.getAttribute("max-selections")), l = [];
|
|
725
|
+
e.forEach((u) => {
|
|
726
|
+
if (!u) return;
|
|
727
|
+
const p = l.indexOf(u);
|
|
728
|
+
p >= 0 && l.splice(p, 1), l.push(u);
|
|
738
729
|
});
|
|
739
|
-
const
|
|
740
|
-
if (
|
|
730
|
+
const n = Number.isFinite(s) && s > 0 ? l.slice(-s) : l, a = [...this._selected];
|
|
731
|
+
if (a.length === n.length && a.every((u, p) => u === n[p])) {
|
|
741
732
|
this._syncUi();
|
|
742
733
|
return;
|
|
743
734
|
}
|
|
744
|
-
this._selected =
|
|
735
|
+
this._selected = n, this._selected.length ? this.setAttribute("value", JSON.stringify(this._selected)) : this.removeAttribute("value"), this._syncUi(), this._emitChange(t, a);
|
|
745
736
|
}
|
|
746
737
|
_toggleValue(e, t) {
|
|
747
|
-
if (this._isInteractionLocked() || this.hasAttribute("loading"))
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
this._activeValue = e, this._setSelected(r, t);
|
|
738
|
+
if (this._isInteractionLocked() || this.hasAttribute("loading")) return;
|
|
739
|
+
const l = this._selected.includes(e) ? this._selected.filter((n) => n !== e) : [...this._selected, e];
|
|
740
|
+
this._activeValue = e, this._setSelected(l, t);
|
|
751
741
|
}
|
|
752
742
|
_removeChip(e) {
|
|
753
743
|
this._isInteractionLocked() || (this._activeValue === e && (this._activeValue = null), this._toggleValue(e, "remove-chip"));
|
|
754
744
|
}
|
|
755
745
|
_clearSelection(e) {
|
|
756
|
-
var t, i;
|
|
757
746
|
if (!(this._isInteractionLocked() || !this._selected.length)) {
|
|
758
747
|
this._activeValue = null, this._setSelected([], e), this._query = "", this._inputEl && (this._inputEl.value = "");
|
|
759
748
|
try {
|
|
760
|
-
|
|
749
|
+
this._inputEl?.focus({ preventScroll: !0 });
|
|
761
750
|
} catch {
|
|
762
|
-
|
|
751
|
+
this._inputEl?.focus();
|
|
763
752
|
}
|
|
764
753
|
}
|
|
765
754
|
}
|
|
766
755
|
_registerWithForm() {
|
|
767
|
-
var e;
|
|
768
756
|
this._formUnregister && (this._formUnregister(), this._formUnregister = null);
|
|
769
757
|
try {
|
|
770
|
-
const
|
|
771
|
-
|
|
758
|
+
const l = this.getRootNode().host?.closest?.("ui-form") || null || this.closest("ui-form"), n = this.getAttribute("name");
|
|
759
|
+
l && typeof l.registerField == "function" && n && (this._formUnregister = l.registerField(n, {
|
|
772
760
|
name: n,
|
|
773
761
|
getValue: () => [...this._selected],
|
|
774
762
|
setValue: (a) => {
|
|
775
|
-
Array.isArray(a) ? this._setSelected(a.map((
|
|
763
|
+
Array.isArray(a) ? this._setSelected(a.map((u) => String(u)), "form") : this._setSelected(x(String(a ?? "")), "form");
|
|
776
764
|
},
|
|
777
765
|
validate: async () => this.hasAttribute("required") && this._selected.length === 0 ? { valid: !1, message: "At least one option is required" } : { valid: !0 },
|
|
778
766
|
setError: (a) => {
|
|
@@ -783,34 +771,32 @@ class j extends K {
|
|
|
783
771
|
}
|
|
784
772
|
}
|
|
785
773
|
_onInput(e) {
|
|
786
|
-
|
|
787
|
-
this._isInteractionLocked() || (this._query = ((t = e.target) == null ? void 0 : t.value) || "", this.open || (this.open = !0), this._syncUi());
|
|
774
|
+
this._isInteractionLocked() || (this._query = e.target?.value || "", this.open || (this.open = !0), this._syncUi());
|
|
788
775
|
}
|
|
789
776
|
_onKeyDown(e) {
|
|
790
|
-
var t, i, r, o, n, a, p, f;
|
|
791
777
|
if (!this._isInteractionLocked()) {
|
|
792
778
|
if (e.key === "ArrowDown") {
|
|
793
|
-
e.preventDefault(), this.open || (this.open = !0), this._syncUi(),
|
|
779
|
+
e.preventDefault(), this.open || (this.open = !0), this._syncUi(), this._panelEl?.getActiveItem() ? this._panelEl.move(1, { focus: !1, owner: this._inputEl, scroll: !1 }) : this._panelEl?.focusBoundary("first", { focus: !1, owner: this._inputEl, scroll: !1 });
|
|
794
780
|
return;
|
|
795
781
|
}
|
|
796
782
|
if (e.key === "ArrowUp") {
|
|
797
|
-
e.preventDefault(), this.open || (this.open = !0), this._syncUi(),
|
|
783
|
+
e.preventDefault(), this.open || (this.open = !0), this._syncUi(), this._panelEl?.getActiveItem() ? this._panelEl.move(-1, { focus: !1, owner: this._inputEl, scroll: !1 }) : this._panelEl?.focusBoundary("last", { focus: !1, owner: this._inputEl, scroll: !1 });
|
|
798
784
|
return;
|
|
799
785
|
}
|
|
800
786
|
if (e.key === "Home") {
|
|
801
|
-
e.preventDefault(), this.open || (this.open = !0), this._syncUi(),
|
|
787
|
+
e.preventDefault(), this.open || (this.open = !0), this._syncUi(), this._panelEl?.focusBoundary("first", { focus: !1, owner: this._inputEl, scroll: !1 });
|
|
802
788
|
return;
|
|
803
789
|
}
|
|
804
790
|
if (e.key === "End") {
|
|
805
|
-
e.preventDefault(), this.open || (this.open = !0), this._syncUi(),
|
|
791
|
+
e.preventDefault(), this.open || (this.open = !0), this._syncUi(), this._panelEl?.focusBoundary("last", { focus: !1, owner: this._inputEl, scroll: !1 });
|
|
806
792
|
return;
|
|
807
793
|
}
|
|
808
794
|
if (e.key === "Enter") {
|
|
809
|
-
const
|
|
810
|
-
if (
|
|
795
|
+
const t = this._panelEl?.getActiveItem();
|
|
796
|
+
if (t) {
|
|
811
797
|
e.preventDefault();
|
|
812
|
-
const
|
|
813
|
-
|
|
798
|
+
const s = t.getAttribute("data-value");
|
|
799
|
+
s && (this._activeValue = s, this._toggleValue(s, "keyboard"), this._query = "", this._inputEl && (this._inputEl.value = ""), this._inputEl?.focus());
|
|
814
800
|
}
|
|
815
801
|
return;
|
|
816
802
|
}
|
|
@@ -826,18 +812,15 @@ class j extends K {
|
|
|
826
812
|
}
|
|
827
813
|
}
|
|
828
814
|
_onToggle() {
|
|
829
|
-
|
|
830
|
-
this._isInteractionLocked() || (this.open = !this.open, this._syncUi(), this.open && ((e = this._inputEl) == null || e.focus()));
|
|
815
|
+
this._isInteractionLocked() || (this.open = !this.open, this._syncUi(), this.open && this._inputEl?.focus());
|
|
831
816
|
}
|
|
832
817
|
_onFocusIn() {
|
|
833
818
|
this._isInteractionLocked() || (this.open = !0), this._syncUi();
|
|
834
819
|
}
|
|
835
820
|
_onFocusOut(e) {
|
|
836
|
-
|
|
837
|
-
(t = this._shellEl) != null && t.contains(e.relatedTarget) || (this.open = !1, this._syncUi());
|
|
821
|
+
this._shellEl?.contains(e.relatedTarget) || (this.open = !1, this._syncUi());
|
|
838
822
|
}
|
|
839
823
|
_syncUi() {
|
|
840
|
-
var e;
|
|
841
824
|
if (this._isSyncingUi) {
|
|
842
825
|
this._needsSyncUi = !0;
|
|
843
826
|
return;
|
|
@@ -845,70 +828,67 @@ class j extends K {
|
|
|
845
828
|
if (!(!this._shellEl || !this._inputEl || !this._panelEl)) {
|
|
846
829
|
this._isSyncingUi = !0;
|
|
847
830
|
try {
|
|
848
|
-
const
|
|
849
|
-
|
|
850
|
-
const
|
|
851
|
-
|
|
831
|
+
const e = (this.getAttribute("label") || "").trim(), t = (this.getAttribute("description") || "").trim(), s = (this.getAttribute("data-error") || "").trim(), l = this.root.querySelector(".meta"), n = this.root.querySelector(".label"), a = this.root.querySelector(".label-text"), u = this.root.querySelector(".required"), p = this.root.querySelector(".description"), N = this.root.querySelector(".chips"), z = this.root.querySelector(".toggle"), S = this.root.querySelector(".clear"), U = this.root.querySelector(".error"), C = this._selectionIndicator(), q = this.hasAttribute("loading"), O = (this.getAttribute("loading-text") || "Loading options...").trim(), g = this.hasAttribute("disabled"), m = this.hasAttribute("readonly"), D = this.hasAttribute("clearable");
|
|
832
|
+
l.hidden = !e && !t, n.hidden = !e, a.textContent = e, u.hidden = !this.hasAttribute("required"), p.hidden = !t, p.textContent = t, U.hidden = !s, U.textContent = s, this._shellEl.setAttribute("data-open", this.open ? "true" : "false"), this._shellEl.setAttribute("data-invalid", s ? "true" : "false"), this._shellEl.setAttribute("data-readonly", m ? "true" : "false"), z.setAttribute("data-open", this.open ? "true" : "false"), z.disabled = g || m, S.hidden = !D || this._selected.length === 0, S.disabled = g || m, this._inputEl.setAttribute("aria-expanded", this.open ? "true" : "false"), this._inputEl.setAttribute("aria-busy", q ? "true" : "false"), this._inputEl.placeholder = this._selected.length ? "" : this.getAttribute("placeholder") || "Select options", this._inputEl.disabled = g, this._inputEl.readOnly = m, this._inputEl.value !== this._query && (this._inputEl.value = this._query), this.open ? this._attachOutsideListener() : this._detachOutsideListener(), N.replaceChildren(...this._selectedOptionRecords().map((i) => {
|
|
833
|
+
const h = document.createElement("span");
|
|
834
|
+
h.className = "chip", h.textContent = i.label;
|
|
852
835
|
const d = document.createElement("button");
|
|
853
|
-
return d.type = "button", d.className = "chip-remove", d.setAttribute("data-value",
|
|
854
|
-
|
|
855
|
-
}), d.addEventListener("click", (
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
}), b.append(d), b;
|
|
836
|
+
return d.type = "button", d.className = "chip-remove", d.setAttribute("data-value", i.value), d.setAttribute("aria-label", `Remove ${i.label}`), d.textContent = "×", d.disabled = this.hasAttribute("disabled"), d.addEventListener("pointerdown", (o) => {
|
|
837
|
+
o.preventDefault();
|
|
838
|
+
}), d.addEventListener("click", (o) => {
|
|
839
|
+
o.preventDefault(), o.stopPropagation(), this._removeChip(i.value), this._inputEl?.focus();
|
|
840
|
+
}), h.append(d), h;
|
|
859
841
|
}));
|
|
860
|
-
const
|
|
861
|
-
if (this._panelEl.hidden = !this.open,
|
|
862
|
-
const
|
|
863
|
-
|
|
842
|
+
const v = this._filteredOptions(), F = this._renderLimit(), _ = v.slice(0, F), V = v.length > _.length;
|
|
843
|
+
if (this._panelEl.hidden = !this.open, q) {
|
|
844
|
+
const i = document.createElement("div");
|
|
845
|
+
i.className = "status", i.textContent = O, this._panelEl.replaceChildren(i), this._inputEl.removeAttribute("aria-activedescendant");
|
|
864
846
|
return;
|
|
865
847
|
}
|
|
866
|
-
if (!
|
|
867
|
-
const
|
|
868
|
-
|
|
848
|
+
if (!v.length) {
|
|
849
|
+
const i = document.createElement("div");
|
|
850
|
+
i.className = "status", i.textContent = "No matching options", this._panelEl.replaceChildren(i), this._inputEl.removeAttribute("aria-activedescendant");
|
|
869
851
|
return;
|
|
870
852
|
}
|
|
871
|
-
const
|
|
872
|
-
let
|
|
873
|
-
if (
|
|
874
|
-
if (
|
|
875
|
-
const
|
|
876
|
-
|
|
877
|
-
} else
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
var N;
|
|
884
|
-
u.preventDefault(), !s.disabled && (this._activeValue = s.value, this._toggleValue(s.value, "option"), this._query = "", this._inputEl && (this._inputEl.value = ""), (N = this._inputEl) == null || N.focus());
|
|
853
|
+
const B = new Set(this._selected), P = this._panelEl.getActiveItem()?.getAttribute("data-value"), b = [];
|
|
854
|
+
let y = null;
|
|
855
|
+
if (_.forEach((i, h) => {
|
|
856
|
+
if (i.group && i.group !== y) {
|
|
857
|
+
const c = document.createElement("div");
|
|
858
|
+
c.className = "group", c.setAttribute("role", "presentation"), c.textContent = i.group, b.push(c), y = i.group;
|
|
859
|
+
} else i.group || (y = null);
|
|
860
|
+
const d = B.has(i.value), o = document.createElement("button");
|
|
861
|
+
o.className = "option", o.type = "button", o.id = `${this._uid}-option-${h}`, o.setAttribute("role", "option"), o.setAttribute("data-value", i.value), o.setAttribute("data-selected", String(d)), o.setAttribute("data-indicator", C), o.setAttribute("aria-selected", d ? "true" : "false"), (i.disabled || g || m) && (o.disabled = !0), o.addEventListener("pointerdown", (c) => {
|
|
862
|
+
c.preventDefault();
|
|
863
|
+
}), o.addEventListener("click", (c) => {
|
|
864
|
+
c.preventDefault(), !i.disabled && (this._activeValue = i.value, this._toggleValue(i.value, "option"), this._query = "", this._inputEl && (this._inputEl.value = ""), this._inputEl?.focus());
|
|
885
865
|
});
|
|
886
|
-
const
|
|
887
|
-
|
|
888
|
-
const
|
|
889
|
-
if (
|
|
890
|
-
const
|
|
891
|
-
|
|
866
|
+
const f = document.createElement("div");
|
|
867
|
+
f.className = "option-text";
|
|
868
|
+
const k = document.createElement("span");
|
|
869
|
+
if (k.className = "option-label", k.textContent = i.label, f.append(k), i.description) {
|
|
870
|
+
const c = document.createElement("span");
|
|
871
|
+
c.className = "option-description", c.textContent = i.description, f.append(c);
|
|
892
872
|
}
|
|
893
|
-
if (
|
|
894
|
-
const
|
|
895
|
-
|
|
873
|
+
if (C !== "none") {
|
|
874
|
+
const c = document.createElement("span");
|
|
875
|
+
c.className = "check", c.textContent = d ? "✓" : "", o.append(c);
|
|
896
876
|
}
|
|
897
|
-
|
|
898
|
-
}),
|
|
899
|
-
const
|
|
900
|
-
|
|
877
|
+
o.append(f), b.push(o);
|
|
878
|
+
}), V) {
|
|
879
|
+
const i = document.createElement("div");
|
|
880
|
+
i.className = "status", i.textContent = `Showing first ${_.length} results. Keep typing to narrow the list.`, b.push(i);
|
|
901
881
|
}
|
|
902
|
-
this._panelEl.replaceChildren(...
|
|
903
|
-
const
|
|
904
|
-
this._activeValue =
|
|
882
|
+
this._panelEl.replaceChildren(...b);
|
|
883
|
+
const $ = P || this._activeValue || this._selected[this._selected.length - 1] || null, E = this._findOptionNode($), A = E && !E.hasAttribute("disabled") ? this._panelEl.setActiveItem(E, { focus: !1, owner: this._inputEl, scroll: !1 }) : (this._panelEl.clearActive(), null);
|
|
884
|
+
this._activeValue = A?.getAttribute("data-value") || null, A?.id ? this._inputEl.setAttribute("aria-activedescendant", A.id) : this._inputEl.removeAttribute("aria-activedescendant");
|
|
905
885
|
} finally {
|
|
906
886
|
this._isSyncingUi = !1, this._needsSyncUi && (this._needsSyncUi = !1, this._syncUi());
|
|
907
887
|
}
|
|
908
888
|
}
|
|
909
889
|
}
|
|
910
890
|
}
|
|
911
|
-
typeof customElements < "u" && !customElements.get("ui-multi-select") && customElements.define("ui-multi-select",
|
|
891
|
+
typeof customElements < "u" && !customElements.get("ui-multi-select") && customElements.define("ui-multi-select", H);
|
|
912
892
|
export {
|
|
913
|
-
|
|
893
|
+
H as UIMultiSelect
|
|
914
894
|
};
|