@editora/ui-core 0.1.20 → 0.1.22
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/accordion.cjs.js +3 -3
- package/dist/accordion.esm.js +3 -3
- package/dist/alert-dialog.cjs.js +32 -32
- package/dist/alert-dialog.esm.js +95 -75
- package/dist/alert.cjs.js +6 -6
- package/dist/alert.esm.js +6 -6
- package/dist/animated-list.cjs.js +4 -4
- package/dist/animated-list.esm.js +4 -4
- package/dist/animated-text.cjs.js +4 -4
- package/dist/animated-text.esm.js +4 -4
- package/dist/app-header.cjs.js +3 -3
- package/dist/app-header.esm.js +3 -3
- package/dist/aspect-ratio.cjs.js +3 -3
- package/dist/aspect-ratio.esm.js +3 -3
- package/dist/avatar.cjs.js +14 -14
- package/dist/avatar.esm.js +31 -29
- package/dist/badge.cjs.js +4 -4
- package/dist/badge.esm.js +4 -4
- package/dist/block-controls.cjs.js +4 -4
- package/dist/block-controls.esm.js +4 -4
- package/dist/box.cjs.js +2 -2
- package/dist/box.esm.js +2 -2
- package/dist/breadcrumb.cjs.js +5 -5
- package/dist/breadcrumb.esm.js +5 -5
- package/dist/button.cjs.js +1 -1
- package/dist/button.esm.js +1 -1
- package/dist/{calendar-DLY4acgn.mjs → calendar-DbxYRdlv.mjs} +227 -183
- package/dist/{calendar-Dkof-FTK.js → calendar-Qa-cFOp3.js} +74 -35
- package/dist/calendar.cjs.js +1 -1
- package/dist/calendar.esm.js +1 -1
- package/dist/card.cjs.js +8 -8
- package/dist/card.esm.js +63 -20
- package/dist/chart.cjs.js +4 -4
- package/dist/chart.esm.js +6 -6
- package/dist/checkbox.cjs.js +2 -2
- package/dist/checkbox.esm.js +2 -2
- package/dist/collapsible.cjs.js +7 -7
- package/dist/collapsible.esm.js +7 -7
- package/dist/collection.cjs.js +1 -1
- package/dist/collection.esm.js +27 -23
- package/dist/color-picker.cjs.js +34 -14
- package/dist/color-picker.esm.js +89 -67
- package/dist/combobox.cjs.js +29 -27
- package/dist/combobox.esm.js +51 -45
- package/dist/command.cjs.js +2 -2
- package/dist/command.esm.js +2 -2
- package/dist/components/ui-alert-dialog.d.ts +1 -0
- package/dist/components/ui-alert-dialog.d.ts.map +1 -1
- package/dist/components/ui-avatar.d.ts +1 -0
- package/dist/components/ui-avatar.d.ts.map +1 -1
- package/dist/components/ui-button.d.ts +1 -0
- package/dist/components/ui-button.d.ts.map +1 -1
- package/dist/components/ui-calendar.d.ts.map +1 -1
- package/dist/components/ui-card.d.ts +3 -0
- package/dist/components/ui-card.d.ts.map +1 -1
- package/dist/components/ui-checkbox.d.ts.map +1 -1
- package/dist/components/ui-collection.d.ts.map +1 -1
- package/dist/components/ui-color-picker.d.ts.map +1 -1
- package/dist/components/ui-combobox.d.ts.map +1 -1
- package/dist/components/ui-data-table.d.ts.map +1 -1
- package/dist/components/ui-date-field.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.map +1 -1
- package/dist/components/ui-date-time-picker.d.ts.map +1 -1
- package/dist/components/ui-dock.d.ts +1 -0
- package/dist/components/ui-dock.d.ts.map +1 -1
- package/dist/components/ui-drawer.d.ts.map +1 -1
- package/dist/components/ui-dropdown.d.ts.map +1 -1
- package/dist/components/ui-field.d.ts.map +1 -1
- package/dist/components/ui-file-upload.d.ts.map +1 -1
- package/dist/components/ui-gantt.d.ts.map +1 -1
- package/dist/components/ui-input.d.ts.map +1 -1
- package/dist/components/ui-menu.d.ts.map +1 -1
- package/dist/components/ui-multi-select.d.ts.map +1 -1
- package/dist/components/ui-number-field.d.ts.map +1 -1
- package/dist/components/ui-password-field.d.ts.map +1 -1
- package/dist/components/ui-pin-input.d.ts +1 -0
- package/dist/components/ui-pin-input.d.ts.map +1 -1
- package/dist/components/ui-placement-grid.d.ts.map +1 -1
- package/dist/components/ui-portal.d.ts.map +1 -1
- package/dist/components/ui-positioner.d.ts.map +1 -1
- package/dist/components/ui-progress.d.ts.map +1 -1
- package/dist/components/ui-radio.d.ts.map +1 -1
- package/dist/components/ui-rating.d.ts +1 -0
- package/dist/components/ui-rating.d.ts.map +1 -1
- package/dist/components/ui-select.d.ts.map +1 -1
- package/dist/components/ui-sortable.d.ts +8 -0
- package/dist/components/ui-sortable.d.ts.map +1 -1
- package/dist/components/ui-switch.d.ts.map +1 -1
- package/dist/components/ui-table.d.ts.map +1 -1
- package/dist/components/ui-tabs.d.ts +1 -0
- package/dist/components/ui-tabs.d.ts.map +1 -1
- package/dist/components/ui-tags-input.d.ts +1 -0
- package/dist/components/ui-tags-input.d.ts.map +1 -1
- package/dist/components/ui-textarea.d.ts.map +1 -1
- package/dist/components/ui-time-field.d.ts.map +1 -1
- package/dist/components/ui-toggle-group.d.ts.map +1 -1
- package/dist/components/ui-toggle.d.ts.map +1 -1
- package/dist/components/ui-tree.d.ts.map +1 -1
- package/dist/components/ui-wizard.d.ts.map +1 -1
- package/dist/context-menu.cjs.js +3 -3
- package/dist/context-menu.esm.js +4 -4
- package/dist/control-name-BmoI1m3a.js +1 -0
- package/dist/control-name-Bpj7F34X.mjs +48 -0
- package/dist/data-table.cjs.js +5 -2
- package/dist/data-table.esm.js +145 -142
- package/dist/date-field.cjs.js +5 -5
- package/dist/date-field.esm.js +34 -31
- package/dist/date-picker.cjs.js +16 -16
- package/dist/date-picker.esm.js +48 -44
- package/dist/date-range-picker.cjs.js +5 -5
- package/dist/date-range-picker.esm.js +120 -118
- package/dist/date-range-time-picker.cjs.js +22 -22
- package/dist/date-range-time-picker.esm.js +88 -84
- package/dist/date-time-picker.cjs.js +26 -26
- package/dist/date-time-picker.esm.js +105 -101
- package/dist/{date-time-utils-Dmost5Ee.js → date-time-utils-BzfTpeU-.js} +1 -1
- package/dist/{date-time-utils-y1N2gvG2.mjs → date-time-utils-Cps2aSu2.mjs} +1 -1
- package/dist/description.cjs.js +3 -3
- package/dist/description.esm.js +3 -3
- package/dist/dialog.cjs.js +2 -2
- package/dist/dialog.esm.js +2 -2
- package/dist/dock.cjs.js +12 -12
- package/dist/dock.esm.js +72 -74
- package/dist/drawer.cjs.js +19 -19
- package/dist/drawer.esm.js +58 -58
- package/dist/dropdown.cjs.js +13 -13
- package/dist/dropdown.esm.js +49 -48
- package/dist/empty-state.cjs.js +3 -3
- package/dist/empty-state.esm.js +3 -3
- package/dist/field-error.cjs.js +1 -1
- package/dist/field-error.esm.js +1 -1
- package/dist/field.cjs.js +12 -12
- package/dist/field.esm.js +84 -75
- package/dist/fieldset.cjs.js +4 -4
- package/dist/fieldset.esm.js +4 -4
- package/dist/file-upload.cjs.js +3 -3
- package/dist/file-upload.esm.js +5 -3
- package/dist/floating-toolbar.cjs.js +8 -8
- package/dist/floating-toolbar.esm.js +9 -9
- package/dist/form.cjs.js +11 -11
- package/dist/form.esm.js +11 -11
- package/dist/gantt.cjs.js +43 -32
- package/dist/gantt.esm.js +99 -88
- package/dist/icon-cloud.cjs.js +3 -3
- package/dist/icon-cloud.esm.js +3 -3
- package/dist/icon.cjs.js +1 -1
- package/dist/icon.esm.js +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +121 -118
- package/dist/inline-edit.cjs.js +1 -1
- package/dist/inline-edit.esm.js +1 -1
- package/dist/input.cjs.js +14 -14
- package/dist/input.esm.js +39 -32
- package/dist/label.cjs.js +3 -3
- package/dist/label.esm.js +3 -3
- package/dist/{listbox-B6QgECax.js → listbox-CTpRpuF7.js} +1 -1
- package/dist/{listbox-DJamVeFj.mjs → listbox-hMVOhKHC.mjs} +1 -1
- package/dist/listbox.cjs.js +1 -1
- package/dist/listbox.esm.js +1 -1
- package/dist/marquee.cjs.js +3 -3
- package/dist/marquee.esm.js +3 -3
- package/dist/{menu-item-styles-CbNUEwP2.js → menu-item-styles-B4onAr4C.js} +3 -3
- package/dist/{menu-item-styles-CZiPwPwl.mjs → menu-item-styles-IGSFLAHu.mjs} +3 -3
- package/dist/menu.cjs.js +7 -7
- package/dist/menu.esm.js +29 -28
- package/dist/menubar.cjs.js +1 -1
- package/dist/menubar.esm.js +2 -2
- package/dist/meter.cjs.js +1 -1
- package/dist/meter.esm.js +1 -1
- package/dist/multi-select.cjs.js +18 -18
- package/dist/multi-select.esm.js +82 -66
- package/dist/navigation-menu.cjs.js +1 -1
- package/dist/navigation-menu.esm.js +1 -1
- package/dist/number-field.cjs.js +11 -13
- package/dist/number-field.esm.js +29 -27
- package/dist/number-ticker.cjs.js +4 -4
- package/dist/number-ticker.esm.js +4 -4
- package/dist/odometer.cjs.js +2 -2
- package/dist/odometer.esm.js +2 -2
- package/dist/orbiter.cjs.js +3 -3
- package/dist/orbiter.esm.js +3 -3
- package/dist/pagination.cjs.js +1 -1
- package/dist/pagination.esm.js +1 -1
- package/dist/password-field.cjs.js +23 -23
- package/dist/password-field.esm.js +48 -47
- package/dist/pin-input.cjs.js +8 -6
- package/dist/pin-input.esm.js +21 -15
- package/dist/placement-grid.cjs.js +4 -4
- package/dist/placement-grid.esm.js +58 -58
- package/dist/plugin-panel.cjs.js +1 -1
- package/dist/plugin-panel.esm.js +1 -1
- package/dist/popover.cjs.js +5 -5
- package/dist/popover.esm.js +4 -4
- package/dist/portal.cjs.js +3 -3
- package/dist/portal.esm.js +11 -10
- package/dist/positioner.cjs.js +2 -2
- package/dist/positioner.esm.js +15 -14
- package/dist/primitives/auto-scroll.d.ts +9 -0
- package/dist/primitives/auto-scroll.d.ts.map +1 -0
- package/dist/primitives/control-name.d.ts +30 -0
- package/dist/primitives/control-name.d.ts.map +1 -0
- package/dist/primitives/selector.d.ts +4 -0
- package/dist/primitives/selector.d.ts.map +1 -0
- package/dist/primitives/trigger.d.ts +2 -0
- package/dist/primitives/trigger.d.ts.map +1 -0
- package/dist/progress.cjs.js +4 -4
- package/dist/progress.esm.js +20 -18
- package/dist/quick-actions.cjs.js +3 -3
- package/dist/quick-actions.esm.js +3 -3
- package/dist/radio-group.cjs.js +1 -1
- package/dist/radio-group.esm.js +1 -1
- package/dist/radio.cjs.js +2 -2
- package/dist/radio.esm.js +2 -2
- package/dist/rating.cjs.js +17 -16
- package/dist/rating.esm.js +91 -92
- package/dist/{runtime-D1gFh1fS.mjs → runtime-CFnK53iC.mjs} +133 -94
- package/dist/runtime-DwE-tizc.js +1 -0
- package/dist/runtime.cjs.js +1 -1
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.esm.js +29 -26
- package/dist/select.cjs.js +20 -19
- package/dist/select.esm.js +36 -32
- package/dist/selection-popup.cjs.js +2 -2
- package/dist/selection-popup.esm.js +2 -2
- package/dist/selector-BvAh35ve.js +1 -0
- package/dist/selector-WI8pD7YO.mjs +18 -0
- package/dist/separator.cjs.js +7 -7
- package/dist/separator.esm.js +7 -7
- package/dist/sidebar.cjs.js +7 -7
- package/dist/sidebar.esm.js +7 -7
- package/dist/skeleton.cjs.js +7 -7
- package/dist/skeleton.esm.js +7 -7
- package/dist/slider.cjs.js +3 -3
- package/dist/slider.esm.js +3 -3
- package/dist/slot.cjs.js +3 -3
- package/dist/slot.esm.js +3 -3
- package/dist/sortable.cjs.js +61 -48
- package/dist/sortable.esm.js +636 -554
- package/dist/spinning-text.cjs.js +3 -3
- package/dist/spinning-text.esm.js +3 -3
- package/dist/split-button.cjs.js +1 -1
- package/dist/split-button.esm.js +1 -1
- package/dist/stepper.cjs.js +1 -1
- package/dist/stepper.esm.js +1 -1
- package/dist/switch.cjs.js +10 -12
- package/dist/switch.esm.js +10 -12
- package/dist/table.cjs.js +9 -6
- package/dist/table.esm.js +46 -43
- package/dist/tabs.cjs.js +22 -23
- package/dist/tabs.esm.js +116 -112
- package/dist/tags-input.cjs.js +9 -9
- package/dist/tags-input.esm.js +32 -25
- package/dist/textarea.cjs.js +13 -13
- package/dist/textarea.esm.js +46 -31
- package/dist/theme.d.ts +18 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/time-field.cjs.js +5 -5
- package/dist/time-field.esm.js +21 -18
- package/dist/time-picker.cjs.js +4 -4
- package/dist/time-picker.esm.js +5 -5
- package/dist/timeline.cjs.js +2 -2
- package/dist/timeline.esm.js +4 -4
- package/dist/toast.cjs.js +6 -6
- package/dist/toast.esm.js +13 -13
- package/dist/toggle-group.cjs.js +5 -6
- package/dist/toggle-group.esm.js +63 -60
- package/dist/toggle.cjs.js +18 -18
- package/dist/toggle.esm.js +32 -31
- package/dist/tooltip.cjs.js +4 -4
- package/dist/tooltip.esm.js +4 -4
- package/dist/transfer-list.cjs.js +32 -32
- package/dist/transfer-list.esm.js +57 -57
- package/dist/tree-7qbVnpGp.js +39 -0
- package/dist/{tree-B3kE8ESs.mjs → tree-Deoft-kO.mjs} +34 -33
- package/dist/tree.cjs.js +1 -1
- package/dist/tree.esm.js +1 -1
- package/dist/trigger-BjnxLCeQ.mjs +9 -0
- package/dist/trigger-DkPsKxsP.js +1 -0
- package/dist/{ui-button-rXQOS9QJ.js → ui-button-BInsgSbr.js} +27 -26
- package/dist/{ui-button-Q0GNNWKC.mjs → ui-button-rfiuUnUD.mjs} +65 -48
- package/dist/{ui-icon-YI6lyuqU.mjs → ui-icon-BSi_GtqO.mjs} +2 -2
- package/dist/{ui-icon-BzVNC_lr.js → ui-icon-Bvt9oIIR.js} +5 -5
- package/dist/wizard.cjs.js +12 -13
- package/dist/wizard.esm.js +17 -15
- package/package.json +1 -1
- package/dist/runtime-CTaOSmBj.js +0 -1
- package/dist/tree-Dx_kv_ih.js +0 -39
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
:host {
|
|
3
3
|
--ui-transfer-accent: var(--ui-color-primary, #2563eb);
|
|
4
4
|
--ui-transfer-text: var(--ui-color-text, #0f172a);
|
|
5
|
-
--ui-transfer-muted: var(--ui-color-muted, #
|
|
5
|
+
--ui-transfer-muted: var(--ui-color-muted, #526175);
|
|
6
6
|
--ui-transfer-shell-bg: transparent;
|
|
7
7
|
--ui-transfer-shell-border-color: color-mix(in srgb, var(--ui-color-border, #cbd5e1) 84%, transparent);
|
|
8
8
|
--ui-transfer-shell-border: 1px solid var(--ui-transfer-shell-border-color);
|
|
@@ -193,11 +193,11 @@
|
|
|
193
193
|
}
|
|
194
194
|
|
|
195
195
|
:host([tone="success"]) {
|
|
196
|
-
--ui-transfer-accent: var(--ui-color-success, #
|
|
196
|
+
--ui-transfer-accent: var(--ui-color-success, #15803d);
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
:host([tone="warning"]) {
|
|
200
|
-
--ui-transfer-accent: var(--ui-color-warning, #
|
|
200
|
+
--ui-transfer-accent: var(--ui-color-warning, #b45309);
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
:host([tone="danger"]) {
|
|
@@ -656,79 +656,79 @@
|
|
|
656
656
|
min-inline-size: 0;
|
|
657
657
|
}
|
|
658
658
|
}
|
|
659
|
-
`;function
|
|
659
|
+
`;function s(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function k(n){if(!n)return[];try{const e=JSON.parse(n);if(!Array.isArray(e))return[];const t=[];return e.forEach(r=>{if(!r||typeof r!="object")return;const a={value:String(r.value??""),label:String(r.label??r.value??""),disabled:!!r.disabled};r.description&&(a.description=String(r.description)),a.value&&t.push(a)}),t}catch{return[]}}function w(n){if(!n)return[];try{const e=JSON.parse(n);return Array.isArray(e)?e.map(t=>String(t)):[]}catch{return[]}}function A(n,e){return new Set(Array.from(n).filter(t=>e.has(t)))}function R(n){return n==="tick"||n==="none"?n:"checkbox"}function p(n,e){return n==null?e:n===""||n==="true"||n==="1"||n==="yes"?!0:n==="false"||n==="0"||n==="no"?!1:e}function $(n){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><path d="${n==="right"?"M9 6l6 6-6 6":"M15 6l-6 6 6 6"}"/></svg>`}class S extends q.ElementBase{constructor(){super(...arguments),this._options=[],this._value=[],this._selectedAvailable=new Set,this._selectedChosen=new Set,this._formUnregister=null,this._suppressValueAttr=!1,this._delegatedListenersAttached=!1,this._handleRootClick=e=>{const t=e.target;if(!t)return;const r=t.closest(".move-btn");if(r&&this.root.contains(r)){this._move(r.getAttribute("data-action"));return}const a=t.closest(".item");a&&this.root.contains(a)&&this._toggleItem(a)},this._handleRootKeyDown=e=>{const t=e.target;if(!t)return;const r=t.closest(".item");r&&this.root.contains(r)&&this._onItemKeyDown(e,r)}}static get observedAttributes(){return["options","value","label","description","error","name","disabled","variant","tone","size","radius","elevation","available-label","selected-label","available-empty-label","selected-empty-label","selection-indicator","add-action-label","remove-action-label","show-action-labels","show-action-counts","show-panel-counts"]}get value(){return[...this._value]}set value(e){this._applyValue(e,"api")}connectedCallback(){super.connectedCallback(),this._attachDelegatedListeners(),this._registerWithForm()}disconnectedCallback(){this._formUnregister&&this._formUnregister(),this._detachDelegatedListeners(),super.disconnectedCallback()}attributeChangedCallback(e,t,r){t!==r&&(e==="options"&&(this._options=k(r)),e==="value"&&!this._suppressValueAttr&&(this._value=w(r)),e==="name"&&this.isConnected&&this._registerWithForm(),e==="disabled"&&(this._selectedAvailable.clear(),this._selectedChosen.clear()),this.isConnected&&this.requestRender())}render(){this._options.length||(this._options=k(this.getAttribute("options"))),!this._value.length&&this.getAttribute("value")&&(this._value=w(this.getAttribute("value")));const e=new Set(this._value),t=this._options.filter(i=>!e.has(i.value)),r=this._options.filter(i=>e.has(i.value)),a=new Set(t.map(i=>i.value)),l=new Set(r.map(i=>i.value));this._selectedAvailable=A(this._selectedAvailable,a),this._selectedChosen=A(this._selectedChosen,l);const o=this.getAttribute("label")||"",c=this.getAttribute("description")||"",d=this.getAttribute("error")||"",b=this.getAttribute("available-label")||"Available",h=this.getAttribute("selected-label")||"Selected",C=this.getAttribute("available-empty-label")||"No items available to add.",L=this.getAttribute("selected-empty-label")||"No items selected yet.",E=R(this.getAttribute("selection-indicator")),m=this.getAttribute("add-action-label")||"Add selected",g=this.getAttribute("remove-action-label")||"Remove selected",u=p(this.getAttribute("show-action-labels"),!0),f=p(this.getAttribute("show-action-counts"),!0),v=p(this.getAttribute("show-panel-counts"),!0),x=this.getAttribute("radius"),I=x?` style="--ui-transfer-panel-radius:${s(x)};"`:"",z=()=>E==="none"?"":'<span class="indicator" part="indicator" aria-hidden="true"><span class="indicator-box"><span class="indicator-mark">✓</span></span></span>',y=i=>u?`<span class="move-btn-text">${s(i)}</span>`:"",_=i=>f?`<span class="move-btn-count">${i}</span>`:"",V=t.length?t.map(i=>`<div
|
|
660
660
|
class="item"
|
|
661
661
|
part="item available-item"
|
|
662
662
|
role="option"
|
|
663
663
|
data-side="available"
|
|
664
|
-
data-value="${
|
|
664
|
+
data-value="${s(i.value)}"
|
|
665
665
|
data-selected="${this._selectedAvailable.has(i.value)}"
|
|
666
666
|
aria-selected="${this._selectedAvailable.has(i.value)?"true":"false"}"
|
|
667
667
|
aria-disabled="${i.disabled?"true":"false"}"
|
|
668
668
|
tabindex="${i.disabled?"-1":"0"}"
|
|
669
669
|
>
|
|
670
|
-
${
|
|
670
|
+
${z()}
|
|
671
671
|
<div class="item-copy">
|
|
672
|
-
<span class="item-title">${
|
|
673
|
-
${i.description?`<span class="item-description">${
|
|
672
|
+
<span class="item-title">${s(i.label)}</span>
|
|
673
|
+
${i.description?`<span class="item-description">${s(i.description)}</span>`:""}
|
|
674
674
|
</div>
|
|
675
|
-
</div>`).join(""):`<div class="empty" part="empty">${
|
|
675
|
+
</div>`).join(""):`<div class="empty" part="empty">${s(C)}</div>`,D=r.length?r.map(i=>`<div
|
|
676
676
|
class="item"
|
|
677
677
|
part="item selected-item"
|
|
678
678
|
role="option"
|
|
679
679
|
data-side="chosen"
|
|
680
|
-
data-value="${
|
|
680
|
+
data-value="${s(i.value)}"
|
|
681
681
|
data-selected="${this._selectedChosen.has(i.value)}"
|
|
682
682
|
aria-selected="${this._selectedChosen.has(i.value)?"true":"false"}"
|
|
683
683
|
aria-disabled="${i.disabled?"true":"false"}"
|
|
684
684
|
tabindex="${i.disabled?"-1":"0"}"
|
|
685
685
|
>
|
|
686
|
-
${
|
|
686
|
+
${z()}
|
|
687
687
|
<div class="item-copy">
|
|
688
|
-
<span class="item-title">${
|
|
689
|
-
${i.description?`<span class="item-description">${
|
|
688
|
+
<span class="item-title">${s(i.label)}</span>
|
|
689
|
+
${i.description?`<span class="item-description">${s(i.description)}</span>`:""}
|
|
690
690
|
</div>
|
|
691
|
-
</div>`).join(""):`<div class="empty" part="empty">${
|
|
691
|
+
</div>`).join(""):`<div class="empty" part="empty">${s(L)}</div>`;this.setContent(`
|
|
692
692
|
<style>${U}</style>
|
|
693
693
|
<div class="root"${I} part="root">
|
|
694
|
-
${
|
|
695
|
-
${c?`<p class="description" part="description">${
|
|
694
|
+
${o?`<p class="label" part="label">${s(o)}</p>`:""}
|
|
695
|
+
${c?`<p class="description" part="description">${s(c)}</p>`:""}
|
|
696
696
|
<div class="shell" part="shell">
|
|
697
697
|
<section class="panel" part="panel panel-available">
|
|
698
698
|
<div class="panel-header" part="panel-header">
|
|
699
699
|
<div class="panel-heading">
|
|
700
|
-
<div class="panel-title">${
|
|
701
|
-
${
|
|
700
|
+
<div class="panel-title">${s(b)}</div>
|
|
701
|
+
${v?`<span class="panel-count" part="count">${t.length}</span>`:""}
|
|
702
702
|
</div>
|
|
703
703
|
<div class="panel-help">Choose entries to move into the selected list.</div>
|
|
704
704
|
</div>
|
|
705
|
-
<div class="list" part="list available-list" data-list="available" role="listbox" aria-multiselectable="true">${V}</div>
|
|
705
|
+
<div class="list" part="list available-list" data-list="available" role="listbox" aria-multiselectable="true" aria-label="${s(b)}">${V}</div>
|
|
706
706
|
<div class="summary" part="summary">${t.length} available</div>
|
|
707
707
|
</section>
|
|
708
708
|
<div class="actions" part="actions">
|
|
709
|
-
<button class="move-btn" part="action-button action-add" data-compact="${!
|
|
710
|
-
<span class="move-btn-icon" aria-hidden="true">${
|
|
711
|
-
${
|
|
712
|
-
${
|
|
709
|
+
<button class="move-btn" part="action-button action-add" data-compact="${!u&&!f}" data-action="add" type="button"${u?"":` aria-label="${s(m)}"`}${this._selectedAvailable.size?"":" disabled"}>
|
|
710
|
+
<span class="move-btn-icon" aria-hidden="true">${$("right")}</span>
|
|
711
|
+
${y(m)}
|
|
712
|
+
${_(this._selectedAvailable.size||0)}
|
|
713
713
|
</button>
|
|
714
|
-
<button class="move-btn" part="action-button action-remove" data-compact="${!
|
|
715
|
-
<span class="move-btn-icon" aria-hidden="true">${
|
|
716
|
-
${g
|
|
717
|
-
${
|
|
714
|
+
<button class="move-btn" part="action-button action-remove" data-compact="${!u&&!f}" data-action="remove" type="button"${u?"":` aria-label="${s(g)}"`}${this._selectedChosen.size?"":" disabled"}>
|
|
715
|
+
<span class="move-btn-icon" aria-hidden="true">${$("left")}</span>
|
|
716
|
+
${y(g)}
|
|
717
|
+
${_(this._selectedChosen.size||0)}
|
|
718
718
|
</button>
|
|
719
719
|
</div>
|
|
720
720
|
<section class="panel" part="panel panel-selected">
|
|
721
721
|
<div class="panel-header" part="panel-header">
|
|
722
722
|
<div class="panel-heading">
|
|
723
|
-
<div class="panel-title">${
|
|
724
|
-
${
|
|
723
|
+
<div class="panel-title">${s(h)}</div>
|
|
724
|
+
${v?`<span class="panel-count" part="count">${r.length}</span>`:""}
|
|
725
725
|
</div>
|
|
726
726
|
<div class="panel-help">Use the remove action to send items back.</div>
|
|
727
727
|
</div>
|
|
728
|
-
<div class="list" part="list selected-list" data-list="chosen" role="listbox" aria-multiselectable="true">${D}</div>
|
|
728
|
+
<div class="list" part="list selected-list" data-list="chosen" role="listbox" aria-multiselectable="true" aria-label="${s(h)}">${D}</div>
|
|
729
729
|
<div class="summary" part="summary">${r.length} selected</div>
|
|
730
730
|
</section>
|
|
731
731
|
</div>
|
|
732
|
-
${
|
|
732
|
+
${d?`<p class="error" part="error">${s(d)}</p>`:""}
|
|
733
733
|
</div>
|
|
734
|
-
`)}_toggleItem(e){if(this.hasAttribute("disabled"))return;const t=e.getAttribute("data-side"),r=e.getAttribute("data-value")||"";if(!r)return;const a=t==="chosen"?this._selectedChosen:this._selectedAvailable;a.has(r)?a.delete(r):a.add(r),e.setAttribute("data-selected",a.has(r)?"true":"false"),e.setAttribute("aria-selected",a.has(r)?"true":"false"),this._syncActionButtons()}_onItemKeyDown(e,t){const r=t.getAttribute("data-side");if(!r)return;if(e.key==="Enter"||e.key===" "){e.preventDefault(),this._toggleItem(t);return}if(!["ArrowDown","ArrowUp","Home","End"].includes(e.key))return;e.preventDefault();const a=this.root.querySelector(`[data-list="${r}"]`),
|
|
734
|
+
`)}_toggleItem(e){if(this.hasAttribute("disabled"))return;const t=e.getAttribute("data-side"),r=e.getAttribute("data-value")||"";if(!r)return;const a=t==="chosen"?this._selectedChosen:this._selectedAvailable;a.has(r)?a.delete(r):a.add(r),e.setAttribute("data-selected",a.has(r)?"true":"false"),e.setAttribute("aria-selected",a.has(r)?"true":"false"),this._syncActionButtons()}_onItemKeyDown(e,t){const r=t.getAttribute("data-side");if(!r)return;if(e.key==="Enter"||e.key===" "){e.preventDefault(),this._toggleItem(t);return}if(!["ArrowDown","ArrowUp","Home","End"].includes(e.key))return;e.preventDefault();const a=this.root.querySelector(`[data-list="${r}"]`),l=Array.from(a?.querySelectorAll('.item[tabindex="0"]')||[]);if(!l.length)return;const o=l.indexOf(t);if(e.key==="Home"){l[0]?.focus();return}if(e.key==="End"){l[l.length-1]?.focus();return}const c=e.key==="ArrowDown"?Math.min(l.length-1,o+1):Math.max(0,o-1);l[c]?.focus()}_move(e){if(!this.hasAttribute("disabled")){if(e==="add"){const t=[...this._value,...Array.from(this._selectedAvailable).filter(r=>!this._value.includes(r))];this._selectedAvailable.clear(),this._applyValue(t,"transfer-right");return}if(e==="remove"){const t=new Set(this._selectedChosen),r=this._value.filter(a=>!t.has(a));this._selectedChosen.clear(),this._applyValue(r,"transfer-left")}}}_attachDelegatedListeners(){this._delegatedListenersAttached||(this.root.addEventListener("click",this._handleRootClick),this.root.addEventListener("keydown",this._handleRootKeyDown),this._delegatedListenersAttached=!0)}_detachDelegatedListeners(){this._delegatedListenersAttached&&(this.root.removeEventListener("click",this._handleRootClick),this.root.removeEventListener("keydown",this._handleRootKeyDown),this._delegatedListenersAttached=!1)}_applyValue(e,t){const r=new Set(this._options.map(o=>o.value)),a=Array.from(new Set(e.filter(o=>o&&(r.size===0||r.has(o))))),l=[...this._value];this._value=a,this._suppressValueAttr=!0;try{a.length?this.setAttribute("value",JSON.stringify(a)):this.removeAttribute("value")}finally{this._suppressValueAttr=!1}a.length>0&&this.removeAttribute("invalid"),this.requestRender(),this.dispatchEvent(new CustomEvent("change",{detail:{value:[...this._value],previousValue:l,selectedItems:this._options.filter(o=>this._value.includes(o.value)),source:t},bubbles:!0,composed:!0}))}_syncActionButtons(){const e=this.root.querySelector('[data-action="add"]'),t=this.root.querySelector('[data-action="remove"]');if(e){e.disabled=this._selectedAvailable.size===0;const r=e.querySelector(".move-btn-count");r&&(r.textContent=String(this._selectedAvailable.size))}if(t){t.disabled=this._selectedChosen.size===0;const r=t.querySelector(".move-btn-count");r&&(r.textContent=String(this._selectedChosen.size))}}_registerWithForm(){this._formUnregister&&(this._formUnregister(),this._formUnregister=null);try{const a=this.getRootNode().host?.closest?.("ui-form")||null||this.closest("ui-form"),l=this.getAttribute("name");a&&typeof a.registerField=="function"&&l&&(this._formUnregister=a.registerField(l,{name:l,getValue:()=>[...this._value],setValue:o=>{const c=Array.isArray(o)?o.map(d=>String(d)):[];this._applyValue(c,"api")},validate:async()=>({valid:!this.hasAttribute("required")||this._value.length>0,message:"Select at least one item."}),setError:o=>{o?(this.setAttribute("error",o),this.setAttribute("invalid","")):(this.removeAttribute("error"),this.removeAttribute("invalid")),this.requestRender()}}))}catch{}}}typeof customElements<"u"&&!customElements.get("ui-transfer-list")&&customElements.define("ui-transfer-list",S);exports.UITransferList=S;
|
|
@@ -3,7 +3,7 @@ const q = `
|
|
|
3
3
|
:host {
|
|
4
4
|
--ui-transfer-accent: var(--ui-color-primary, #2563eb);
|
|
5
5
|
--ui-transfer-text: var(--ui-color-text, #0f172a);
|
|
6
|
-
--ui-transfer-muted: var(--ui-color-muted, #
|
|
6
|
+
--ui-transfer-muted: var(--ui-color-muted, #526175);
|
|
7
7
|
--ui-transfer-shell-bg: transparent;
|
|
8
8
|
--ui-transfer-shell-border-color: color-mix(in srgb, var(--ui-color-border, #cbd5e1) 84%, transparent);
|
|
9
9
|
--ui-transfer-shell-border: 1px solid var(--ui-transfer-shell-border-color);
|
|
@@ -194,11 +194,11 @@ const q = `
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
:host([tone="success"]) {
|
|
197
|
-
--ui-transfer-accent: var(--ui-color-success, #
|
|
197
|
+
--ui-transfer-accent: var(--ui-color-success, #15803d);
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
:host([tone="warning"]) {
|
|
201
|
-
--ui-transfer-accent: var(--ui-color-warning, #
|
|
201
|
+
--ui-transfer-accent: var(--ui-color-warning, #b45309);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
:host([tone="danger"]) {
|
|
@@ -658,10 +658,10 @@ const q = `
|
|
|
658
658
|
}
|
|
659
659
|
}
|
|
660
660
|
`;
|
|
661
|
-
function
|
|
661
|
+
function s(n) {
|
|
662
662
|
return n.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
663
663
|
}
|
|
664
|
-
function
|
|
664
|
+
function k(n) {
|
|
665
665
|
if (!n) return [];
|
|
666
666
|
try {
|
|
667
667
|
const e = JSON.parse(n);
|
|
@@ -680,7 +680,7 @@ function x(n) {
|
|
|
680
680
|
return [];
|
|
681
681
|
}
|
|
682
682
|
}
|
|
683
|
-
function
|
|
683
|
+
function w(n) {
|
|
684
684
|
if (!n) return [];
|
|
685
685
|
try {
|
|
686
686
|
const e = JSON.parse(n);
|
|
@@ -689,7 +689,7 @@ function z(n) {
|
|
|
689
689
|
return [];
|
|
690
690
|
}
|
|
691
691
|
}
|
|
692
|
-
function
|
|
692
|
+
function A(n, e) {
|
|
693
693
|
return new Set(Array.from(n).filter((t) => e.has(t)));
|
|
694
694
|
}
|
|
695
695
|
function R(n) {
|
|
@@ -698,7 +698,7 @@ function R(n) {
|
|
|
698
698
|
function p(n, e) {
|
|
699
699
|
return n == null ? e : n === "" || n === "true" || n === "1" || n === "yes" ? !0 : n === "false" || n === "0" || n === "no" ? !1 : e;
|
|
700
700
|
}
|
|
701
|
-
function
|
|
701
|
+
function $(n) {
|
|
702
702
|
return `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" focusable="false" aria-hidden="true"><path d="${n === "right" ? "M9 6l6 6-6 6" : "M15 6l-6 6 6 6"}"/></svg>`;
|
|
703
703
|
}
|
|
704
704
|
class U extends D {
|
|
@@ -759,91 +759,91 @@ class U extends D {
|
|
|
759
759
|
this._formUnregister && this._formUnregister(), this._detachDelegatedListeners(), super.disconnectedCallback();
|
|
760
760
|
}
|
|
761
761
|
attributeChangedCallback(e, t, r) {
|
|
762
|
-
t !== r && (e === "options" && (this._options =
|
|
762
|
+
t !== r && (e === "options" && (this._options = k(r)), e === "value" && !this._suppressValueAttr && (this._value = w(r)), e === "name" && this.isConnected && this._registerWithForm(), e === "disabled" && (this._selectedAvailable.clear(), this._selectedChosen.clear()), this.isConnected && this.requestRender());
|
|
763
763
|
}
|
|
764
764
|
render() {
|
|
765
|
-
this._options.length || (this._options =
|
|
766
|
-
const e = new Set(this._value), t = this._options.filter((i) => !e.has(i.value)), r = this._options.filter((i) => e.has(i.value)), a = new Set(t.map((i) => i.value)),
|
|
767
|
-
this._selectedAvailable =
|
|
768
|
-
const
|
|
765
|
+
this._options.length || (this._options = k(this.getAttribute("options"))), !this._value.length && this.getAttribute("value") && (this._value = w(this.getAttribute("value")));
|
|
766
|
+
const e = new Set(this._value), t = this._options.filter((i) => !e.has(i.value)), r = this._options.filter((i) => e.has(i.value)), a = new Set(t.map((i) => i.value)), l = new Set(r.map((i) => i.value));
|
|
767
|
+
this._selectedAvailable = A(this._selectedAvailable, a), this._selectedChosen = A(this._selectedChosen, l);
|
|
768
|
+
const o = this.getAttribute("label") || "", c = this.getAttribute("description") || "", d = this.getAttribute("error") || "", b = this.getAttribute("available-label") || "Available", h = this.getAttribute("selected-label") || "Selected", C = this.getAttribute("available-empty-label") || "No items available to add.", S = this.getAttribute("selected-empty-label") || "No items selected yet.", L = R(this.getAttribute("selection-indicator")), m = this.getAttribute("add-action-label") || "Add selected", g = this.getAttribute("remove-action-label") || "Remove selected", u = p(this.getAttribute("show-action-labels"), !0), f = p(this.getAttribute("show-action-counts"), !0), v = p(this.getAttribute("show-panel-counts"), !0), x = this.getAttribute("radius"), E = x ? ` style="--ui-transfer-panel-radius:${s(x)};"` : "", z = () => L === "none" ? "" : '<span class="indicator" part="indicator" aria-hidden="true"><span class="indicator-box"><span class="indicator-mark">✓</span></span></span>', y = (i) => u ? `<span class="move-btn-text">${s(i)}</span>` : "", _ = (i) => f ? `<span class="move-btn-count">${i}</span>` : "", I = t.length ? t.map(
|
|
769
769
|
(i) => `<div
|
|
770
770
|
class="item"
|
|
771
771
|
part="item available-item"
|
|
772
772
|
role="option"
|
|
773
773
|
data-side="available"
|
|
774
|
-
data-value="${
|
|
774
|
+
data-value="${s(i.value)}"
|
|
775
775
|
data-selected="${this._selectedAvailable.has(i.value)}"
|
|
776
776
|
aria-selected="${this._selectedAvailable.has(i.value) ? "true" : "false"}"
|
|
777
777
|
aria-disabled="${i.disabled ? "true" : "false"}"
|
|
778
778
|
tabindex="${i.disabled ? "-1" : "0"}"
|
|
779
779
|
>
|
|
780
|
-
${
|
|
780
|
+
${z()}
|
|
781
781
|
<div class="item-copy">
|
|
782
|
-
<span class="item-title">${
|
|
783
|
-
${i.description ? `<span class="item-description">${
|
|
782
|
+
<span class="item-title">${s(i.label)}</span>
|
|
783
|
+
${i.description ? `<span class="item-description">${s(i.description)}</span>` : ""}
|
|
784
784
|
</div>
|
|
785
785
|
</div>`
|
|
786
|
-
).join("") : `<div class="empty" part="empty">${
|
|
786
|
+
).join("") : `<div class="empty" part="empty">${s(C)}</div>`, V = r.length ? r.map(
|
|
787
787
|
(i) => `<div
|
|
788
788
|
class="item"
|
|
789
789
|
part="item selected-item"
|
|
790
790
|
role="option"
|
|
791
791
|
data-side="chosen"
|
|
792
|
-
data-value="${
|
|
792
|
+
data-value="${s(i.value)}"
|
|
793
793
|
data-selected="${this._selectedChosen.has(i.value)}"
|
|
794
794
|
aria-selected="${this._selectedChosen.has(i.value) ? "true" : "false"}"
|
|
795
795
|
aria-disabled="${i.disabled ? "true" : "false"}"
|
|
796
796
|
tabindex="${i.disabled ? "-1" : "0"}"
|
|
797
797
|
>
|
|
798
|
-
${
|
|
798
|
+
${z()}
|
|
799
799
|
<div class="item-copy">
|
|
800
|
-
<span class="item-title">${
|
|
801
|
-
${i.description ? `<span class="item-description">${
|
|
800
|
+
<span class="item-title">${s(i.label)}</span>
|
|
801
|
+
${i.description ? `<span class="item-description">${s(i.description)}</span>` : ""}
|
|
802
802
|
</div>
|
|
803
803
|
</div>`
|
|
804
|
-
).join("") : `<div class="empty" part="empty">${
|
|
804
|
+
).join("") : `<div class="empty" part="empty">${s(S)}</div>`;
|
|
805
805
|
this.setContent(`
|
|
806
806
|
<style>${q}</style>
|
|
807
807
|
<div class="root"${E} part="root">
|
|
808
|
-
${
|
|
809
|
-
${c ? `<p class="description" part="description">${
|
|
808
|
+
${o ? `<p class="label" part="label">${s(o)}</p>` : ""}
|
|
809
|
+
${c ? `<p class="description" part="description">${s(c)}</p>` : ""}
|
|
810
810
|
<div class="shell" part="shell">
|
|
811
811
|
<section class="panel" part="panel panel-available">
|
|
812
812
|
<div class="panel-header" part="panel-header">
|
|
813
813
|
<div class="panel-heading">
|
|
814
|
-
<div class="panel-title">${
|
|
815
|
-
${
|
|
814
|
+
<div class="panel-title">${s(b)}</div>
|
|
815
|
+
${v ? `<span class="panel-count" part="count">${t.length}</span>` : ""}
|
|
816
816
|
</div>
|
|
817
817
|
<div class="panel-help">Choose entries to move into the selected list.</div>
|
|
818
818
|
</div>
|
|
819
|
-
<div class="list" part="list available-list" data-list="available" role="listbox" aria-multiselectable="true">${I}</div>
|
|
819
|
+
<div class="list" part="list available-list" data-list="available" role="listbox" aria-multiselectable="true" aria-label="${s(b)}">${I}</div>
|
|
820
820
|
<div class="summary" part="summary">${t.length} available</div>
|
|
821
821
|
</section>
|
|
822
822
|
<div class="actions" part="actions">
|
|
823
|
-
<button class="move-btn" part="action-button action-add" data-compact="${!
|
|
824
|
-
<span class="move-btn-icon" aria-hidden="true">${
|
|
825
|
-
${
|
|
826
|
-
${
|
|
823
|
+
<button class="move-btn" part="action-button action-add" data-compact="${!u && !f}" data-action="add" type="button"${u ? "" : ` aria-label="${s(m)}"`}${this._selectedAvailable.size ? "" : " disabled"}>
|
|
824
|
+
<span class="move-btn-icon" aria-hidden="true">${$("right")}</span>
|
|
825
|
+
${y(m)}
|
|
826
|
+
${_(this._selectedAvailable.size || 0)}
|
|
827
827
|
</button>
|
|
828
|
-
<button class="move-btn" part="action-button action-remove" data-compact="${!
|
|
829
|
-
<span class="move-btn-icon" aria-hidden="true">${
|
|
830
|
-
${g
|
|
831
|
-
${
|
|
828
|
+
<button class="move-btn" part="action-button action-remove" data-compact="${!u && !f}" data-action="remove" type="button"${u ? "" : ` aria-label="${s(g)}"`}${this._selectedChosen.size ? "" : " disabled"}>
|
|
829
|
+
<span class="move-btn-icon" aria-hidden="true">${$("left")}</span>
|
|
830
|
+
${y(g)}
|
|
831
|
+
${_(this._selectedChosen.size || 0)}
|
|
832
832
|
</button>
|
|
833
833
|
</div>
|
|
834
834
|
<section class="panel" part="panel panel-selected">
|
|
835
835
|
<div class="panel-header" part="panel-header">
|
|
836
836
|
<div class="panel-heading">
|
|
837
|
-
<div class="panel-title">${
|
|
838
|
-
${
|
|
837
|
+
<div class="panel-title">${s(h)}</div>
|
|
838
|
+
${v ? `<span class="panel-count" part="count">${r.length}</span>` : ""}
|
|
839
839
|
</div>
|
|
840
840
|
<div class="panel-help">Use the remove action to send items back.</div>
|
|
841
841
|
</div>
|
|
842
|
-
<div class="list" part="list selected-list" data-list="chosen" role="listbox" aria-multiselectable="true">${V}</div>
|
|
842
|
+
<div class="list" part="list selected-list" data-list="chosen" role="listbox" aria-multiselectable="true" aria-label="${s(h)}">${V}</div>
|
|
843
843
|
<div class="summary" part="summary">${r.length} selected</div>
|
|
844
844
|
</section>
|
|
845
845
|
</div>
|
|
846
|
-
${
|
|
846
|
+
${d ? `<p class="error" part="error">${s(d)}</p>` : ""}
|
|
847
847
|
</div>
|
|
848
848
|
`);
|
|
849
849
|
}
|
|
@@ -863,19 +863,19 @@ class U extends D {
|
|
|
863
863
|
}
|
|
864
864
|
if (!["ArrowDown", "ArrowUp", "Home", "End"].includes(e.key)) return;
|
|
865
865
|
e.preventDefault();
|
|
866
|
-
const a = this.root.querySelector(`[data-list="${r}"]`),
|
|
867
|
-
if (!
|
|
868
|
-
const
|
|
866
|
+
const a = this.root.querySelector(`[data-list="${r}"]`), l = Array.from(a?.querySelectorAll('.item[tabindex="0"]') || []);
|
|
867
|
+
if (!l.length) return;
|
|
868
|
+
const o = l.indexOf(t);
|
|
869
869
|
if (e.key === "Home") {
|
|
870
|
-
|
|
870
|
+
l[0]?.focus();
|
|
871
871
|
return;
|
|
872
872
|
}
|
|
873
873
|
if (e.key === "End") {
|
|
874
|
-
|
|
874
|
+
l[l.length - 1]?.focus();
|
|
875
875
|
return;
|
|
876
876
|
}
|
|
877
|
-
const c = e.key === "ArrowDown" ? Math.min(
|
|
878
|
-
|
|
877
|
+
const c = e.key === "ArrowDown" ? Math.min(l.length - 1, o + 1) : Math.max(0, o - 1);
|
|
878
|
+
l[c]?.focus();
|
|
879
879
|
}
|
|
880
880
|
_move(e) {
|
|
881
881
|
if (!this.hasAttribute("disabled")) {
|
|
@@ -897,7 +897,7 @@ class U extends D {
|
|
|
897
897
|
this._delegatedListenersAttached && (this.root.removeEventListener("click", this._handleRootClick), this.root.removeEventListener("keydown", this._handleRootKeyDown), this._delegatedListenersAttached = !1);
|
|
898
898
|
}
|
|
899
899
|
_applyValue(e, t) {
|
|
900
|
-
const r = new Set(this._options.map((
|
|
900
|
+
const r = new Set(this._options.map((o) => o.value)), a = Array.from(new Set(e.filter((o) => o && (r.size === 0 || r.has(o))))), l = [...this._value];
|
|
901
901
|
this._value = a, this._suppressValueAttr = !0;
|
|
902
902
|
try {
|
|
903
903
|
a.length ? this.setAttribute("value", JSON.stringify(a)) : this.removeAttribute("value");
|
|
@@ -908,8 +908,8 @@ class U extends D {
|
|
|
908
908
|
new CustomEvent("change", {
|
|
909
909
|
detail: {
|
|
910
910
|
value: [...this._value],
|
|
911
|
-
previousValue:
|
|
912
|
-
selectedItems: this._options.filter((
|
|
911
|
+
previousValue: l,
|
|
912
|
+
selectedItems: this._options.filter((o) => this._value.includes(o.value)),
|
|
913
913
|
source: t
|
|
914
914
|
},
|
|
915
915
|
bubbles: !0,
|
|
@@ -933,17 +933,17 @@ class U extends D {
|
|
|
933
933
|
_registerWithForm() {
|
|
934
934
|
this._formUnregister && (this._formUnregister(), this._formUnregister = null);
|
|
935
935
|
try {
|
|
936
|
-
const a = this.getRootNode().host?.closest?.("ui-form") || null || this.closest("ui-form"),
|
|
937
|
-
a && typeof a.registerField == "function" &&
|
|
938
|
-
name:
|
|
936
|
+
const a = this.getRootNode().host?.closest?.("ui-form") || null || this.closest("ui-form"), l = this.getAttribute("name");
|
|
937
|
+
a && typeof a.registerField == "function" && l && (this._formUnregister = a.registerField(l, {
|
|
938
|
+
name: l,
|
|
939
939
|
getValue: () => [...this._value],
|
|
940
|
-
setValue: (
|
|
941
|
-
const c = Array.isArray(
|
|
940
|
+
setValue: (o) => {
|
|
941
|
+
const c = Array.isArray(o) ? o.map((d) => String(d)) : [];
|
|
942
942
|
this._applyValue(c, "api");
|
|
943
943
|
},
|
|
944
944
|
validate: async () => ({ valid: !this.hasAttribute("required") || this._value.length > 0, message: "Select at least one item." }),
|
|
945
|
-
setError: (
|
|
946
|
-
|
|
945
|
+
setError: (o) => {
|
|
946
|
+
o ? (this.setAttribute("error", o), this.setAttribute("invalid", "")) : (this.removeAttribute("error"), this.removeAttribute("invalid")), this.requestRender();
|
|
947
947
|
}
|
|
948
948
|
}));
|
|
949
949
|
} catch {
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";const v=require("./ElementBase-EV6mVBUV.js"),p=require("./collection-qv8A8rq4.js"),f=require("./tree-item.cjs.js");function x(l,t){const e=[],i=t.getExpanded||(()=>!1),r=t.getDisabled||(()=>!1),s=(d,n,o)=>{d.forEach(a=>{const u=t.getChildren(a)||[],c={item:a,id:t.getId(a),label:t.getLabel(a),level:n,parentId:o,disabled:r(a),expanded:i(a),hasChildren:u.length>0};e.push(c),s(u,n+1,c.id)})};return s(l,1,null),e}function g(l,t){const e=[],i=t.getExpanded||(()=>!1),r=t.getDisabled||(()=>!1),s=(d,n,o)=>{d.forEach(a=>{const u=t.getChildren(a)||[],c=i(a),h={item:a,id:t.getId(a),label:t.getLabel(a),level:n,parentId:o,disabled:r(a),expanded:c,hasChildren:u.length>0};e.push(h),h.hasChildren&&c&&s(u,n+1,h.id)})};return s(l,1,null),e}function b(l,t){return l.findIndex(e=>e.id===t)}function _(l,t){const e=l[t];return e?.parentId?l.findIndex(i=>i.id===e.parentId):-1}function y(l,t,e=-1){const i=p.normalizeCollectionText(t);if(!i)return-1;for(let r=1;r<=l.length;r+=1){const s=(e+r+l.length)%l.length,d=l[s];if(!d.disabled&&p.normalizeCollectionText(d.label).startsWith(i))return s}return-1}const T=`
|
|
2
|
+
:host {
|
|
3
|
+
--ui-tree-indent: 16px;
|
|
4
|
+
--ui-tree-radius: 14px;
|
|
5
|
+
--ui-tree-bg: color-mix(in srgb, var(--ui-color-surface, #ffffff) 98%, transparent);
|
|
6
|
+
--ui-tree-border: color-mix(in srgb, var(--ui-color-border, #cbd5e1) 72%, transparent);
|
|
7
|
+
--ui-tree-text: var(--ui-color-text, #0f172a);
|
|
8
|
+
--ui-tree-muted: var(--ui-color-muted, #526175);
|
|
9
|
+
display: block;
|
|
10
|
+
min-inline-size: 0;
|
|
11
|
+
color-scheme: light dark;
|
|
12
|
+
font-family: "Inter", "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.tree {
|
|
16
|
+
min-inline-size: 0;
|
|
17
|
+
display: grid;
|
|
18
|
+
gap: 4px;
|
|
19
|
+
padding: 10px;
|
|
20
|
+
border: 1px solid var(--ui-tree-border);
|
|
21
|
+
border-radius: var(--ui-tree-radius);
|
|
22
|
+
background: var(--ui-tree-bg);
|
|
23
|
+
color: var(--ui-tree-text);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@media (forced-colors: active) {
|
|
27
|
+
.tree {
|
|
28
|
+
forced-color-adjust: none;
|
|
29
|
+
background: Canvas;
|
|
30
|
+
color: CanvasText;
|
|
31
|
+
border-color: CanvasText;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`;class m extends v.ElementBase{constructor(){super(),this._observer=null,this._focusedValue=null,this._typeaheadBuffer="",this._typeaheadTimer=null,this._onClick=this._onClick.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onMutation=this._onMutation.bind(this)}static get observedAttributes(){return["value","indent-size","aria-label","aria-labelledby"]}connectedCallback(){super.connectedCallback(),this.addEventListener("click",this._onClick),this.addEventListener("keydown",this._onKeyDown),this._observer=new MutationObserver(this._onMutation),this._observer.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["expanded","selected","disabled","label","value"]}),queueMicrotask(()=>this._syncTree())}disconnectedCallback(){this.removeEventListener("click",this._onClick),this.removeEventListener("keydown",this._onKeyDown),this._observer?.disconnect(),this._observer=null,this._typeaheadTimer!=null&&window.clearTimeout(this._typeaheadTimer),super.disconnectedCallback()}get value(){return this.getAttribute("value")||""}set value(t){t?this.setAttribute("value",t):this.removeAttribute("value")}expand(t){const e=this._findByValue(t);!e||e.childItems.length===0||(e.setAttribute("expanded",""),this._emitToggle(e,!0),this._syncTree())}collapse(t){const e=this._findByValue(t);!e||e.childItems.length===0||(e.removeAttribute("expanded"),this._emitToggle(e,!1),this._syncTree())}toggle(t){const e=this._findByValue(t);if(!e||e.childItems.length===0)return;const i=!e.hasAttribute("expanded");e.toggleAttribute("expanded",i),this._emitToggle(e,i),this._syncTree()}select(t){const e=this._findByValue(t);!e||e.hasAttribute("disabled")||(this.value=t,this._focusedValue=t,this._emitSelect(e),this._syncTree())}focusValue(t){const e=this._findByValue(t);e&&(this._focusedValue=t,this._syncTree(),e.focusRow({preventScroll:!0}))}_onMutation(){this._syncTree()}_allItems(){return Array.from(this.querySelectorAll("ui-tree-item")).filter(t=>t instanceof f.UITreeItem&&t.closest("ui-tree")===this)}_rootItems(){return Array.from(this.children).filter(t=>t instanceof f.UITreeItem)}_visibleRecords(){const t=this._rootItems();return g(t,{getId:e=>e.value,getLabel:e=>e.label,getChildren:e=>e.childItems,getExpanded:e=>e.hasAttribute("expanded"),getDisabled:e=>e.hasAttribute("disabled")}).map(e=>({...e,item:e.item}))}_findByValue(t){return this._allItems().find(e=>e.value===t)||null}_syncTree(){const t=this._allItems(),e=this._visibleRecords(),i=this.value||e.find(n=>!n.disabled)?.id||"",r=this._focusedValue&&e.some(n=>n.id===this._focusedValue)?this._focusedValue:i;this._focusedValue=r||null;const s=new Set(e.map(n=>n.id)),d=new Map(e.map(n=>[n.id,n]));t.forEach(n=>{const o=d.get(n.value);n.style.setProperty("--ui-tree-indent",this.getAttribute("indent-size")||"16px"),n.applyTreeState({level:o?.level||1,hasChildren:n.childItems.length>0,expanded:n.hasAttribute("expanded"),selected:n.value===i,active:n.value===r,hidden:!s.has(n.value)})})}_moveFocus(t){const e=this._visibleRecords();if(!e.length)return;const i=b(e,this._focusedValue||this.value||""),r=i>=0?i:-1;for(let s=1;s<=e.length;s+=1){const d=(r+t*s+e.length)%e.length,n=e[d];if(!n.disabled){this.focusValue(n.id);return}}}_emitSelect(t){this.dispatchEvent(new CustomEvent("select",{detail:{value:t.value,label:t.label},bubbles:!0,composed:!0}))}_emitToggle(t,e){this.dispatchEvent(new CustomEvent("expanded-change",{detail:{value:t.value,expanded:e},bubbles:!0,composed:!0}))}_onClick(t){const e=t.composedPath(),i=e.find(s=>s instanceof f.UITreeItem);if(!i||i.hasAttribute("disabled"))return;const r=e.find(s=>s instanceof HTMLElement&&s.getAttribute("data-action")==="toggle");if(this._focusedValue=i.value,r&&i.childItems.length>0){this.toggle(i.value);return}this.select(i.value)}_onKeyDown(t){const e=this._visibleRecords();if(!e.length)return;const i=b(e,this._focusedValue||this.value||""),r=i>=0?e[i]:e[0];if(r){if(t.key==="ArrowDown"){t.preventDefault(),this._moveFocus(1);return}if(t.key==="ArrowUp"){t.preventDefault(),this._moveFocus(-1);return}if(t.key==="Home"){t.preventDefault(),this.focusValue(e[0].id);return}if(t.key==="End"){t.preventDefault(),this.focusValue(e[e.length-1].id);return}if(t.key==="ArrowRight"){if(t.preventDefault(),r.hasChildren&&!r.expanded){this.expand(r.id);return}if(r.hasChildren&&r.expanded){const s=e[i+1];s?.parentId===r.id&&this.focusValue(s.id)}return}if(t.key==="ArrowLeft"){if(t.preventDefault(),r.hasChildren&&r.expanded){this.collapse(r.id);return}const s=_(e,i);s>=0&&this.focusValue(e[s].id);return}if(t.key==="Enter"||t.key===" "){t.preventDefault(),this.select(r.id);return}if(t.key.length===1&&/\S/.test(t.key)){this._typeaheadBuffer=`${this._typeaheadBuffer}${t.key.toLowerCase()}`.slice(0,24),this._typeaheadTimer!=null&&window.clearTimeout(this._typeaheadTimer),this._typeaheadTimer=window.setTimeout(()=>{this._typeaheadBuffer="",this._typeaheadTimer=null},420);const s=y(e,this._typeaheadBuffer,i);s>=0&&(t.preventDefault(),this.focusValue(e[s].id))}}}shouldRenderOnAttributeChange(t){return t==="indent-size"||t==="aria-label"||t==="aria-labelledby"}render(){const t=(this.getAttribute("aria-label")||"").trim(),e=(this.getAttribute("aria-labelledby")||"").trim(),i=s=>s.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<"),r=(t?` aria-label="${i(t)}"`:"")+(e?` aria-labelledby="${i(e)}"`:"");this.setContent(`
|
|
35
|
+
<style>${T}</style>
|
|
36
|
+
<div class="tree" part="tree" role="tree"${r}>
|
|
37
|
+
<slot></slot>
|
|
38
|
+
</div>
|
|
39
|
+
`),queueMicrotask(()=>this._syncTree())}}typeof customElements<"u"&&!customElements.get("ui-tree")&&customElements.define("ui-tree",m);exports.UITree=m;exports.findParentTreeRecordIndex=_;exports.findTreeRecordIndexById=b;exports.findTreeTypeaheadMatch=y;exports.flattenTree=x;exports.flattenVisibleTree=g;
|