@threadlabs/looma 0.1.22 → 0.1.23
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/{chunk-NIPNHZ5W.js → chunk-GDMQKT5F.js} +63 -31
- package/dist/{chunk-SZJQ3NPX.js → chunk-TL4FIE7X.js} +4 -8
- package/dist/cjs/{index-D07f6BOw.js → index-BHG9Rpil.js} +33 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/looma.cjs.js +2 -2
- package/dist/cjs/{manager-C9j3HZay.js → manager-Ce25WRtl.js} +6 -7
- package/dist/cjs/ui-affordance-scope.cjs.entry.js +1 -1
- package/dist/cjs/ui-avatar-group.cjs.entry.js +1 -1
- package/dist/cjs/ui-avatar.cjs.entry.js +1 -1
- package/dist/cjs/ui-badge.cjs.entry.js +1 -1
- package/dist/cjs/ui-button.cjs.entry.js +16 -5
- package/dist/cjs/ui-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/ui-combobox.cjs.entry.js +541 -0
- package/dist/cjs/ui-context-menu.cjs.entry.js +3 -3
- package/dist/cjs/ui-dialog.cjs.entry.js +3 -3
- package/dist/cjs/ui-disclosure.cjs.entry.js +2 -2
- package/dist/cjs/ui-floating-action-button.cjs.entry.js +2 -2
- package/dist/cjs/ui-form-field.cjs.entry.js +3 -3
- package/dist/cjs/ui-icon-button.cjs.entry.js +2 -2
- package/dist/cjs/ui-input.cjs.entry.js +11 -6
- package/dist/cjs/ui-menu-item.cjs.entry.js +2 -2
- package/dist/cjs/ui-menu.cjs.entry.js +3 -3
- package/dist/cjs/ui-popover.cjs.entry.js +3 -3
- package/dist/cjs/ui-radio-group.cjs.entry.js +2 -2
- package/dist/cjs/ui-radio.cjs.entry.js +3 -3
- package/dist/cjs/ui-search-result-row.cjs.entry.js +2 -2
- package/dist/cjs/ui-search-shell.cjs.entry.js +2 -2
- package/dist/cjs/ui-select.cjs.entry.js +15 -7
- package/dist/cjs/ui-switch.cjs.entry.js +3 -3
- package/dist/cjs/ui-tabs.cjs.entry.js +2 -2
- package/dist/cjs/ui-textarea.cjs.entry.js +10 -6
- package/dist/cjs/ui-toast-region.cjs.entry.js +2 -2
- package/dist/cjs/ui-tooltip.cjs.entry.js +52 -16
- package/dist/cjs/ui-top-bar.cjs.entry.js +2 -2
- package/dist/cjs/ui-tree-item.cjs.entry.js +7 -3
- package/dist/cjs/ui-tree.cjs.entry.js +81 -9
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/ui-button/ui-button.css +36 -26
- package/dist/collection/components/ui-button/ui-button.js +14 -3
- package/dist/collection/components/ui-combobox/ui-combobox.css +24 -0
- package/dist/collection/components/ui-combobox/ui-combobox.js +973 -0
- package/dist/collection/components/ui-context-menu/ui-context-menu.js +1 -1
- package/dist/collection/components/ui-dialog/ui-dialog.js +1 -1
- package/dist/collection/components/ui-disclosure/ui-disclosure.js +1 -1
- package/dist/collection/components/ui-floating-action-button/ui-floating-action-button.js +1 -1
- package/dist/collection/components/ui-form-field/ui-form-field.css +4 -0
- package/dist/collection/components/ui-form-field/ui-form-field.js +1 -1
- package/dist/collection/components/ui-icon-button/ui-icon-button.js +1 -1
- package/dist/collection/components/ui-input/ui-input.css +8 -6
- package/dist/collection/components/ui-input/ui-input.js +11 -7
- package/dist/collection/components/ui-menu/ui-menu.js +1 -1
- package/dist/collection/components/ui-menu-item/ui-menu-item.js +1 -1
- package/dist/collection/components/ui-popover/ui-popover.js +1 -1
- package/dist/collection/components/ui-radio/ui-radio.js +2 -2
- package/dist/collection/components/ui-radio-group/ui-radio-group.js +1 -1
- package/dist/collection/components/ui-search-result-row/ui-search-result-row.js +1 -1
- package/dist/collection/components/ui-search-shell/ui-search-shell.js +1 -1
- package/dist/collection/components/ui-select/ui-select.css +8 -6
- package/dist/collection/components/ui-select/ui-select.js +17 -11
- package/dist/collection/components/ui-switch/ui-switch.js +2 -2
- package/dist/collection/components/ui-tabs/ui-tabs.js +1 -1
- package/dist/collection/components/ui-textarea/ui-textarea.css +7 -6
- package/dist/collection/components/ui-textarea/ui-textarea.js +10 -7
- package/dist/collection/components/ui-toast-region/ui-toast-region.js +1 -1
- package/dist/collection/components/ui-tooltip/ui-tooltip.js +102 -15
- package/dist/collection/components/ui-top-bar/ui-top-bar.js +1 -1
- package/dist/collection/components/ui-tree/ui-tree.js +100 -8
- package/dist/collection/components/ui-tree-item/ui-tree-item.js +44 -2
- package/dist/collection/field/combobox.js +4 -0
- package/dist/collection/field/valibot.js +5 -0
- package/dist/collection/field/validation.js +62 -0
- package/dist/collection/overlay/manager.js +6 -7
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +1 -1
- package/dist/components/p-Bh_1GxOD.js +1 -0
- package/dist/components/p-C-0syqXZ.js +1 -0
- package/dist/components/p-CaietZcq.js +1 -0
- package/dist/components/p-DHd18bK7.js +1 -0
- package/dist/components/ui-affordance-scope.js +1 -1
- package/dist/components/ui-avatar-group.js +1 -1
- package/dist/components/ui-avatar.js +1 -1
- package/dist/components/ui-badge.js +1 -1
- package/dist/components/ui-button.js +1 -1
- package/dist/components/ui-checkbox.js +1 -1
- package/dist/components/ui-combobox.d.ts +11 -0
- package/dist/components/ui-combobox.js +1 -0
- package/dist/components/ui-context-menu.js +1 -1
- package/dist/components/ui-dialog.js +1 -1
- package/dist/components/ui-disclosure.js +1 -1
- package/dist/components/ui-floating-action-button.js +1 -1
- package/dist/components/ui-form-field.js +1 -1
- package/dist/components/ui-icon-button.js +1 -1
- package/dist/components/ui-input.js +1 -1
- package/dist/components/ui-menu-item.js +1 -1
- package/dist/components/ui-menu.js +1 -1
- package/dist/components/ui-popover.js +1 -1
- package/dist/components/ui-radio-group.js +1 -1
- package/dist/components/ui-radio.js +1 -1
- package/dist/components/ui-search-result-row.js +1 -1
- package/dist/components/ui-search-shell.js +1 -1
- package/dist/components/ui-select.js +1 -1
- package/dist/components/ui-switch.js +1 -1
- package/dist/components/ui-tabs.js +1 -1
- package/dist/components/ui-textarea.js +1 -1
- package/dist/components/ui-toast-region.js +1 -1
- package/dist/components/ui-tooltip.js +1 -1
- package/dist/components/ui-top-bar.js +1 -1
- package/dist/components/ui-tree-item.js +2 -2
- package/dist/components/ui-tree.js +1 -1
- package/dist/esm/{index-CEeiinfk.js → index-8BGiMGQ0.js} +33 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/looma.js +3 -3
- package/dist/esm/{manager-PM9a74r7.js → manager-C-0syqXZ.js} +6 -7
- package/dist/esm/ui-affordance-scope.entry.js +1 -1
- package/dist/esm/ui-avatar-group.entry.js +1 -1
- package/dist/esm/ui-avatar.entry.js +1 -1
- package/dist/esm/ui-badge.entry.js +1 -1
- package/dist/esm/ui-button.entry.js +16 -5
- package/dist/esm/ui-checkbox.entry.js +1 -1
- package/dist/esm/ui-combobox.entry.js +539 -0
- package/dist/esm/ui-context-menu.entry.js +3 -3
- package/dist/esm/ui-dialog.entry.js +3 -3
- package/dist/esm/ui-disclosure.entry.js +2 -2
- package/dist/esm/ui-floating-action-button.entry.js +2 -2
- package/dist/esm/ui-form-field.entry.js +3 -3
- package/dist/esm/ui-icon-button.entry.js +2 -2
- package/dist/esm/ui-input.entry.js +11 -6
- package/dist/esm/ui-menu-item.entry.js +2 -2
- package/dist/esm/ui-menu.entry.js +3 -3
- package/dist/esm/ui-popover.entry.js +3 -3
- package/dist/esm/ui-radio-group.entry.js +2 -2
- package/dist/esm/ui-radio.entry.js +3 -3
- package/dist/esm/ui-search-result-row.entry.js +2 -2
- package/dist/esm/ui-search-shell.entry.js +2 -2
- package/dist/esm/ui-select.entry.js +15 -7
- package/dist/esm/ui-switch.entry.js +3 -3
- package/dist/esm/ui-tabs.entry.js +2 -2
- package/dist/esm/ui-textarea.entry.js +10 -6
- package/dist/esm/ui-toast-region.entry.js +2 -2
- package/dist/esm/ui-tooltip.entry.js +52 -16
- package/dist/esm/ui-top-bar.entry.js +2 -2
- package/dist/esm/ui-tree-item.entry.js +7 -3
- package/dist/esm/ui-tree.entry.js +81 -9
- package/dist/index.cjs +883 -123
- package/dist/index.d.cts +104 -1
- package/dist/index.d.ts +104 -1
- package/dist/index.js +62 -8
- package/dist/looma/looma.esm.js +1 -1
- package/dist/looma/{p-0198bb21.entry.js → p-13347631.entry.js} +1 -1
- package/dist/looma/p-14c081cf.entry.js +1 -0
- package/dist/looma/{p-0f45c5f0.entry.js → p-25366205.entry.js} +1 -1
- package/dist/looma/{p-a9f46811.entry.js → p-2e3aa869.entry.js} +1 -1
- package/dist/looma/p-40fe7fee.entry.js +1 -0
- package/dist/looma/p-446cda76.entry.js +1 -0
- package/dist/looma/p-4fc1b005.entry.js +13 -0
- package/dist/looma/p-582973b5.entry.js +1 -0
- package/dist/looma/{p-d273b857.entry.js → p-5a87b59d.entry.js} +1 -1
- package/dist/looma/{p-2ed7e241.entry.js → p-5da09f47.entry.js} +1 -1
- package/dist/looma/{p-7e94d90d.entry.js → p-69a5557b.entry.js} +1 -1
- package/dist/looma/p-6a8a4736.entry.js +1 -0
- package/dist/looma/{p-caa8fc7b.entry.js → p-6bf4038b.entry.js} +1 -1
- package/dist/looma/p-7e0bb7f6.entry.js +1 -0
- package/dist/looma/{p-ed5abf6d.entry.js → p-8204fee6.entry.js} +1 -1
- package/dist/looma/{p-5ba9d496.entry.js → p-8238e0dc.entry.js} +1 -1
- package/dist/looma/p-8BGiMGQ0.js +2 -0
- package/dist/looma/{p-051f578c.entry.js → p-8b8840b8.entry.js} +1 -1
- package/dist/looma/{p-1674cda4.entry.js → p-99d88efb.entry.js} +1 -1
- package/dist/looma/p-C-0syqXZ.js +1 -0
- package/dist/looma/p-a27669b1.entry.js +1 -0
- package/dist/looma/{p-11083743.entry.js → p-a6ee76b7.entry.js} +1 -1
- package/dist/looma/p-a90d2821.entry.js +1 -0
- package/dist/looma/{p-2e6f791e.entry.js → p-add36e74.entry.js} +1 -1
- package/dist/looma/{p-0584a051.entry.js → p-b6398a6b.entry.js} +1 -1
- package/dist/looma/{p-078f9fb8.entry.js → p-d50faaff.entry.js} +1 -1
- package/dist/looma/{p-b7aa4488.entry.js → p-d77278ce.entry.js} +1 -1
- package/dist/looma/p-d9ec13b7.entry.js +1 -0
- package/dist/looma/{p-1681b218.entry.js → p-ecf8005f.entry.js} +1 -1
- package/dist/looma/p-ed368426.entry.js +1 -0
- package/dist/looma/{p-063f5a89.entry.js → p-f0487ff3.entry.js} +1 -1
- package/dist/looma/p-f74e5546.entry.js +1 -0
- package/dist/types/components/ui-combobox/ui-combobox.d.ts +93 -0
- package/dist/types/components/ui-input/ui-input.d.ts +1 -1
- package/dist/types/components/ui-select/ui-select.d.ts +3 -2
- package/dist/types/components/ui-textarea/ui-textarea.d.ts +1 -1
- package/dist/types/components/ui-tooltip/ui-tooltip.d.ts +18 -1
- package/dist/types/components/ui-tree/ui-tree.d.ts +9 -1
- package/dist/types/components/ui-tree-item/ui-tree-item.d.ts +4 -0
- package/dist/types/components.d.ts +260 -28
- package/dist/types/field/combobox.d.ts +46 -0
- package/dist/types/field/valibot.d.ts +7 -0
- package/dist/types/field/validation.d.ts +56 -0
- package/dist/{ui-affordance-scope.entry-L533MECG.js → ui-affordance-scope.entry-VO4C2MZX.js} +1 -1
- package/dist/{ui-avatar-group.entry-BWS7E2CM.js → ui-avatar-group.entry-TAXJRIIU.js} +1 -1
- package/dist/{ui-avatar.entry-3INAY3XP.js → ui-avatar.entry-T6FU6ZYM.js} +1 -1
- package/dist/{ui-badge.entry-2WOBVOYP.js → ui-badge.entry-MZFYNBMJ.js} +1 -1
- package/dist/ui-button.entry-7UXMUGHN.js +80 -0
- package/dist/{ui-checkbox.entry-2PTBHSCQ.js → ui-checkbox.entry-DMZJB3RE.js} +1 -1
- package/dist/ui-combobox.entry-ZCTPXEES.js +553 -0
- package/dist/{ui-context-menu.entry-AYDDCIZS.js → ui-context-menu.entry-2WMCBGCP.js} +6 -6
- package/dist/{ui-dialog.entry-I2XI3ZTZ.js → ui-dialog.entry-WO23XOSW.js} +6 -6
- package/dist/{ui-disclosure.entry-5LY2BT7B.js → ui-disclosure.entry-USX7OUEW.js} +2 -2
- package/dist/{ui-floating-action-button.entry-EJAMR5AM.js → ui-floating-action-button.entry-MXDIN7MV.js} +2 -2
- package/dist/{ui-form-field.entry-SJ6NNFXB.js → ui-form-field.entry-7ZCMEHPY.js} +3 -3
- package/dist/{ui-icon-button.entry-7SD2LVXE.js → ui-icon-button.entry-MJUNXHBU.js} +2 -2
- package/dist/{ui-input.entry-7MM7GEQW.js → ui-input.entry-AWG63YIG.js} +8 -6
- package/dist/{ui-menu-item.entry-V3HIMR75.js → ui-menu-item.entry-HFTWG62N.js} +2 -2
- package/dist/{ui-menu.entry-R4WK5QSX.js → ui-menu.entry-IT3GW5TL.js} +7 -7
- package/dist/{ui-popover.entry-ZRJRTXA7.js → ui-popover.entry-ZQQB4N6E.js} +6 -6
- package/dist/{ui-radio-group.entry-S6RXHFSN.js → ui-radio-group.entry-V7PCTS7I.js} +2 -2
- package/dist/{ui-radio.entry-B73QZK2M.js → ui-radio.entry-JYH6TQBI.js} +3 -3
- package/dist/{ui-search-result-row.entry-DR2Y5S7P.js → ui-search-result-row.entry-JBNYXXUN.js} +2 -2
- package/dist/{ui-search-shell.entry-ST5IKJBC.js → ui-search-shell.entry-TEAWE76O.js} +2 -2
- package/dist/{ui-select.entry-7GPRFV67.js → ui-select.entry-F3A6TE2U.js} +13 -7
- package/dist/{ui-switch.entry-XQ5IRJRH.js → ui-switch.entry-MJIICMP2.js} +3 -3
- package/dist/{ui-tabs.entry-HPW5L5CY.js → ui-tabs.entry-6REFIUHV.js} +2 -2
- package/dist/{ui-textarea.entry-W2PSRYVS.js → ui-textarea.entry-OJTXCED7.js} +8 -6
- package/dist/{ui-toast-region.entry-FJUHFXKZ.js → ui-toast-region.entry-NOFXLKPS.js} +5 -5
- package/dist/{ui-tooltip.entry-G5WHQW7K.js → ui-tooltip.entry-COWTWVHX.js} +57 -21
- package/dist/{ui-top-bar.entry-3NCHFC4Y.js → ui-top-bar.entry-PIAWXJNV.js} +2 -2
- package/dist/{ui-tree-item.entry-45RR3CMP.js → ui-tree-item.entry-BSEWNL2O.js} +7 -3
- package/dist/{ui-tree.entry-SZW4Q5PY.js → ui-tree.entry-XYI3ZFAZ.js} +77 -8
- package/dist/valibot.d.ts +52 -0
- package/dist/valibot.js +7 -0
- package/package.json +11 -3
- package/styles.css +36 -20
- package/theme-high-contrast.css +12 -0
- package/tokens.css +23 -0
- package/vue/{chunk-5KWCMTXB.js → chunk-JLW23USW.js} +88 -1
- package/vue/editor/index.js +1 -1
- package/vue/index.d.ts +123 -1
- package/vue/index.js +3 -1
- package/dist/components/p-CEYIKqYc.js +0 -1
- package/dist/components/p-CIA4RyEp.js +0 -1
- package/dist/components/p-PM9a74r7.js +0 -1
- package/dist/looma/p-34417499.entry.js +0 -1
- package/dist/looma/p-4b422d40.entry.js +0 -1
- package/dist/looma/p-54722713.entry.js +0 -13
- package/dist/looma/p-54c41576.entry.js +0 -1
- package/dist/looma/p-5d4713a6.entry.js +0 -1
- package/dist/looma/p-624ba086.entry.js +0 -1
- package/dist/looma/p-8d5adb17.entry.js +0 -1
- package/dist/looma/p-9194a99d.entry.js +0 -1
- package/dist/looma/p-CEeiinfk.js +0 -2
- package/dist/looma/p-PM9a74r7.js +0 -1
- package/dist/looma/p-a33522a2.entry.js +0 -1
- package/dist/looma/p-a5127c7d.entry.js +0 -1
- package/dist/looma/p-e3f99a24.entry.js +0 -1
- package/dist/ui-button.entry-VCGSEONK.js +0 -71
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as registerInstance, g as getElement, h, H as Host } from './index-
|
|
1
|
+
import { r as registerInstance, g as getElement, h, H as Host } from './index-8BGiMGQ0.js';
|
|
2
2
|
import { d as dispatchDetail, e as eventToTrigger } from './events-JwSoedEO.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -614,6 +614,10 @@ const UITreeItem = class {
|
|
|
614
614
|
label = '';
|
|
615
615
|
/** One-based visual and semantic nesting level. */
|
|
616
616
|
depth = 1;
|
|
617
|
+
/** Application hierarchy depth used for drop constraints. Defaults to visual depth. */
|
|
618
|
+
dropDepth;
|
|
619
|
+
/** Deepest descendant distance, used with the tree's max-depth drop constraint. */
|
|
620
|
+
subtreeDepth;
|
|
617
621
|
/** Whether this item accepts children and exposes disclosure behavior. */
|
|
618
622
|
container = false;
|
|
619
623
|
/** Whether this item participates in pointer drag and drop. */
|
|
@@ -676,10 +680,10 @@ const UITreeItem = class {
|
|
|
676
680
|
const level = Math.max(1, Math.floor(this.depth));
|
|
677
681
|
const disclosureLabel = `${this.internalExpanded ? 'Collapse' : 'Expand'} ${this.label || 'item'}`;
|
|
678
682
|
const dragLabel = `Drag ${this.label || 'item'} to reorder`;
|
|
679
|
-
return (h(Host, { key: '
|
|
683
|
+
return (h(Host, { key: '606f5fdac8a95489d0c62cd7d4918c6d5d0c759e', role: "treeitem", "aria-level": String(level), "aria-expanded": this.container ? String(this.internalExpanded) : undefined, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "data-container": this.container ? '' : undefined, "data-selected": this.selected ? '' : undefined, "data-disabled": this.disabled ? '' : undefined, "data-drag-type": this.dragType || 'item', "data-drop-scope": this.dropScope || undefined, "data-accepts": this.accepts || undefined, tabIndex: this.disabled ? -1 : 0, style: {
|
|
680
684
|
'--ui-tree-item-depth': String(level - 1),
|
|
681
685
|
'margin-inline-start': level > 1 ? 'var(--ui-tree-indent, 16px)' : '0px',
|
|
682
|
-
} }, h("div", { key: '
|
|
686
|
+
} }, h("div", { key: '2b4bb03d4b24ef668f22b08e803f7f43c2d63ae5', class: "row", part: "row", onClick: this.onRowClick }, this.sortable && !this.disabled ? (h("button", { class: "drag-handle", part: "drag-handle", type: "button", draggable: true, "aria-label": dragLabel, title: dragLabel }, h("span", { innerHTML: loomaIconMarkup('grip-vertical') }))) : null, this.container ? (h("button", { class: "disclosure", part: "disclosure", type: "button", "aria-label": disclosureLabel, "aria-expanded": String(this.internalExpanded), disabled: this.disabled, onClick: this.onDisclosureClick, onKeyDown: this.onDisclosureKeydown }, h("span", { class: { 'disclosure-icon': true, 'disclosure-icon--expanded': this.internalExpanded }, innerHTML: loomaIconMarkup('chevron-down') }))) : h("span", { class: "disclosure-spacer", "aria-hidden": "true" }), h("span", { key: 'e7b935158e35cdc6518bdd73d54c42dcfa211aee', class: "leading", part: "leading" }, h("slot", { key: '8448462349fd23b8be0fb673fc6e101bf94beaa7', name: "leading" })), h("span", { key: 'e0b6338e1ec9ec043446e42c5f03724adf7e1862', class: "label", part: "label" }, h("slot", { key: 'ed44e6f2ce3466c28d2b87fc7511399ecc339255' })), h("span", { key: '2aea78227904fe23cfc4b8e14852a4601e3cc34b', class: "actions", part: "actions" }, h("slot", { key: '7c6549008c2a54c3ea6fcdf9e0fdbe445d379922', name: "actions" })), h("span", { key: '05166ba04765bc518d6b95ca7ae5a67c4394d1bf', class: "drop-indicator row-drop-indicator", part: "drop-indicator", "aria-hidden": "true" })), this.container ? (h("div", { class: "children", part: "children", role: "group", hidden: !this.internalExpanded }, h("slot", { name: "children" }))) : null, h("span", { key: '7381d6e9e2a8f94695f29e73194b1603d79cefb9', class: "drop-indicator subtree-drop-indicator", part: "drop-indicator", "aria-hidden": "true" })));
|
|
683
687
|
}
|
|
684
688
|
static get watchers() { return {
|
|
685
689
|
"expanded": [{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as registerInstance, g as getElement, h, H as Host } from './index-
|
|
1
|
+
import { r as registerInstance, g as getElement, h, H as Host } from './index-8BGiMGQ0.js';
|
|
2
2
|
import { d as dispatchDetail } from './events-JwSoedEO.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -62,9 +62,14 @@ const UITree = class {
|
|
|
62
62
|
get host() { return getElement(this); }
|
|
63
63
|
label = 'Tree';
|
|
64
64
|
hoverExpandDelay = 700;
|
|
65
|
+
/** Maximum resulting item depth accepted by pointer reordering. Zero is unlimited. */
|
|
66
|
+
maxDepth = 0;
|
|
65
67
|
source = null;
|
|
66
68
|
target = null;
|
|
67
69
|
position = null;
|
|
70
|
+
rejectedTarget = null;
|
|
71
|
+
rejectedPosition = null;
|
|
72
|
+
rejection = null;
|
|
68
73
|
hoverIntent = null;
|
|
69
74
|
componentDidLoad() {
|
|
70
75
|
this.hoverIntent = createHoverIntent(this.hoverExpandDelay, this.expandTarget);
|
|
@@ -132,19 +137,42 @@ const UITree = class {
|
|
|
132
137
|
.filter(Boolean),
|
|
133
138
|
};
|
|
134
139
|
}
|
|
135
|
-
|
|
140
|
+
constraintDepth(item) {
|
|
141
|
+
if (item.dropDepth !== undefined)
|
|
142
|
+
return item.dropDepth;
|
|
143
|
+
const dropDepth = item.getAttribute('drop-depth');
|
|
144
|
+
if (dropDepth !== null)
|
|
145
|
+
return Number(dropDepth);
|
|
146
|
+
if (item.depth !== undefined)
|
|
147
|
+
return item.depth;
|
|
148
|
+
return Number(item.getAttribute('depth')) || 1;
|
|
149
|
+
}
|
|
150
|
+
dropRejection(source, target, position) {
|
|
136
151
|
// A tree item can never move into (or beside) one of its own descendants.
|
|
137
152
|
// Reject the target before showing any insertion affordance so the preview
|
|
138
153
|
// stays truthful instead of promising a move the consumer must undo.
|
|
139
154
|
if (source.contains(target))
|
|
140
|
-
return
|
|
155
|
+
return { reason: 'descendant' };
|
|
141
156
|
const sourceMeta = this.itemMetadata(source);
|
|
142
157
|
const targetMeta = this.itemMetadata(target);
|
|
143
158
|
if (position === 'inside') {
|
|
144
|
-
|
|
145
|
-
|
|
159
|
+
if (!this.acceptsChildren(target)
|
|
160
|
+
|| (targetMeta.accepts.length > 0 && !targetMeta.accepts.includes(sourceMeta.type))) {
|
|
161
|
+
return { reason: 'incompatible' };
|
|
162
|
+
}
|
|
146
163
|
}
|
|
147
|
-
|
|
164
|
+
else if (sourceMeta.type !== targetMeta.type) {
|
|
165
|
+
return { reason: 'incompatible' };
|
|
166
|
+
}
|
|
167
|
+
const maxDepth = Math.max(0, Math.floor(this.maxDepth));
|
|
168
|
+
if (maxDepth > 0 && source.subtreeDepth !== undefined) {
|
|
169
|
+
const targetDepth = Math.max(0, Math.floor(this.constraintDepth(target)));
|
|
170
|
+
const subtreeDepth = Math.max(0, Math.floor(source.subtreeDepth));
|
|
171
|
+
const resultingDepth = targetDepth + (position === 'inside' ? 1 : 0) + subtreeDepth;
|
|
172
|
+
if (resultingDepth > maxDepth)
|
|
173
|
+
return { reason: 'max-depth', maxDepth, resultingDepth };
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
148
176
|
}
|
|
149
177
|
clearTarget() {
|
|
150
178
|
this.target?.removeAttribute('data-drop-position');
|
|
@@ -152,10 +180,16 @@ const UITree = class {
|
|
|
152
180
|
this.position = null;
|
|
153
181
|
this.hoverIntent?.cancel();
|
|
154
182
|
}
|
|
183
|
+
clearRejection() {
|
|
184
|
+
this.rejectedTarget = null;
|
|
185
|
+
this.rejectedPosition = null;
|
|
186
|
+
this.rejection = null;
|
|
187
|
+
}
|
|
155
188
|
finishDrag() {
|
|
156
189
|
this.source?.removeAttribute('data-dragging');
|
|
157
190
|
this.source = null;
|
|
158
191
|
this.clearTarget();
|
|
192
|
+
this.clearRejection();
|
|
159
193
|
}
|
|
160
194
|
expandTarget = (itemId) => {
|
|
161
195
|
const item = Array.from(this.host.querySelectorAll('ui-tree-item'))
|
|
@@ -193,18 +227,29 @@ const UITree = class {
|
|
|
193
227
|
return false;
|
|
194
228
|
if (!target || target === this.source) {
|
|
195
229
|
this.clearTarget();
|
|
230
|
+
this.clearRejection();
|
|
196
231
|
return false;
|
|
197
232
|
}
|
|
198
233
|
const row = this.rowFor(target);
|
|
199
234
|
if (!row)
|
|
200
235
|
return false;
|
|
201
236
|
const position = classifyDropPosition(row.getBoundingClientRect(), clientY, this.acceptsChildren(target));
|
|
202
|
-
|
|
237
|
+
const rejection = this.dropRejection(this.source, target, position);
|
|
238
|
+
if (rejection) {
|
|
203
239
|
if (dataTransfer)
|
|
204
240
|
dataTransfer.dropEffect = 'none';
|
|
205
241
|
this.clearTarget();
|
|
242
|
+
if (rejection.reason === 'max-depth') {
|
|
243
|
+
this.rejectedTarget = target;
|
|
244
|
+
this.rejectedPosition = position;
|
|
245
|
+
this.rejection = rejection;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
this.clearRejection();
|
|
249
|
+
}
|
|
206
250
|
return false;
|
|
207
251
|
}
|
|
252
|
+
this.clearRejection();
|
|
208
253
|
if (dataTransfer)
|
|
209
254
|
dataTransfer.dropEffect = 'move';
|
|
210
255
|
if (this.target !== target || this.position !== position) {
|
|
@@ -246,12 +291,15 @@ const UITree = class {
|
|
|
246
291
|
if (this.itemAtPoint(event.clientX, event.clientY))
|
|
247
292
|
return;
|
|
248
293
|
this.clearTarget();
|
|
294
|
+
this.clearRejection();
|
|
249
295
|
};
|
|
250
296
|
dispatchReorder(source, target, position) {
|
|
251
297
|
const sourceId = this.itemId(source);
|
|
252
298
|
const targetId = this.itemId(target);
|
|
253
299
|
if (!sourceId || !targetId)
|
|
254
300
|
return;
|
|
301
|
+
if (position === 'inside')
|
|
302
|
+
this.expandTarget(targetId);
|
|
255
303
|
const sourceMeta = this.itemMetadata(source);
|
|
256
304
|
const targetMeta = this.itemMetadata(target);
|
|
257
305
|
dispatchDetail(this.host, 'reorder', {
|
|
@@ -265,6 +313,21 @@ const UITree = class {
|
|
|
265
313
|
trigger: 'pointer',
|
|
266
314
|
});
|
|
267
315
|
}
|
|
316
|
+
dispatchReorderRejected(source, target, position, rejection) {
|
|
317
|
+
const sourceId = this.itemId(source);
|
|
318
|
+
const targetId = this.itemId(target);
|
|
319
|
+
if (!sourceId || !targetId)
|
|
320
|
+
return;
|
|
321
|
+
dispatchDetail(this.host, 'reorder-rejected', {
|
|
322
|
+
sourceId,
|
|
323
|
+
targetId,
|
|
324
|
+
position,
|
|
325
|
+
reason: 'max-depth',
|
|
326
|
+
maxDepth: rejection.maxDepth,
|
|
327
|
+
resultingDepth: rejection.resultingDepth,
|
|
328
|
+
trigger: 'pointer',
|
|
329
|
+
});
|
|
330
|
+
}
|
|
268
331
|
onDrop = (event) => {
|
|
269
332
|
if (!this.source || !this.target || !this.position)
|
|
270
333
|
return;
|
|
@@ -274,14 +337,23 @@ const UITree = class {
|
|
|
274
337
|
};
|
|
275
338
|
onDragEnd = (event) => {
|
|
276
339
|
if (this.source) {
|
|
340
|
+
if (this.rejectedTarget && this.rejectedPosition && this.rejection) {
|
|
341
|
+
this.dispatchReorderRejected(this.source, this.rejectedTarget, this.rejectedPosition, this.rejection);
|
|
342
|
+
this.finishDrag();
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
277
345
|
const target = this.itemAtPoint(event.clientX, event.clientY);
|
|
278
346
|
if (target && target !== this.source) {
|
|
279
347
|
const row = this.rowFor(target);
|
|
280
348
|
if (row) {
|
|
281
349
|
const position = classifyDropPosition(row.getBoundingClientRect(), event.clientY, this.acceptsChildren(target));
|
|
282
|
-
|
|
350
|
+
const rejection = this.dropRejection(this.source, target, position);
|
|
351
|
+
if (!rejection) {
|
|
283
352
|
this.dispatchReorder(this.source, target, position);
|
|
284
353
|
}
|
|
354
|
+
else if (rejection.reason === 'max-depth') {
|
|
355
|
+
this.dispatchReorderRejected(this.source, target, position, rejection);
|
|
356
|
+
}
|
|
285
357
|
}
|
|
286
358
|
}
|
|
287
359
|
}
|
|
@@ -306,7 +378,7 @@ const UITree = class {
|
|
|
306
378
|
next.focus();
|
|
307
379
|
};
|
|
308
380
|
render() {
|
|
309
|
-
return (h(Host, { key: '
|
|
381
|
+
return (h(Host, { key: '474c2154d2abe3c76eee9c36bf552390089df6e8', role: "tree", "aria-label": this.label || 'Tree' }, h("slot", { key: '93aedd02f984dd33b5efc811fef417d1199917bd' })));
|
|
310
382
|
}
|
|
311
383
|
};
|
|
312
384
|
UITree.style = uiTreeCss();
|