@threadlabs/looma 0.1.13 → 0.1.15
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-DQZJTDIB.js → chunk-SVINNT3E.js} +29 -27
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/looma.cjs.js +1 -1
- package/dist/cjs/ui-tree-item.cjs.entry.js +694 -0
- package/dist/cjs/ui-tree.cjs.entry.js +257 -0
- package/dist/collection/collection-manifest.json +3 -1
- package/dist/collection/components/ui-tree/ui-tree.css +11 -0
- package/dist/collection/components/ui-tree/ui-tree.js +252 -0
- package/dist/collection/components/ui-tree-item/ui-tree-item.css +213 -0
- package/dist/collection/components/ui-tree-item/ui-tree-item.js +347 -0
- package/dist/collection/utils/drag-drop.js +51 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +1 -1
- package/dist/components/ui-tree-item.d.ts +11 -0
- package/dist/components/ui-tree-item.js +13 -0
- package/dist/components/ui-tree.d.ts +11 -0
- package/dist/components/ui-tree.js +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/looma.js +1 -1
- package/dist/esm/ui-tree-item.entry.js +692 -0
- package/dist/esm/ui-tree.entry.js +255 -0
- package/dist/index.cjs +687 -15
- package/dist/index.d.cts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +44 -3
- package/dist/looma/looma.esm.js +1 -1
- package/dist/looma/p-95368dee.entry.js +1 -0
- package/dist/looma/p-ef9ca2ed.entry.js +13 -0
- package/dist/types/components/ui-tree/ui-tree.d.ts +28 -0
- package/dist/types/components/ui-tree-item/ui-tree-item.d.ts +36 -0
- package/dist/types/components.d.ts +176 -0
- package/dist/types/utils/drag-drop.d.ts +15 -0
- package/dist/{ui-affordance-scope.entry-SWTDTGGU.js → ui-affordance-scope.entry-PFP2TDKO.js} +1 -1
- package/dist/{ui-avatar-group.entry-VUYE2XOM.js → ui-avatar-group.entry-DQDP325O.js} +1 -1
- package/dist/{ui-avatar.entry-2CKHEJTS.js → ui-avatar.entry-WYIDMOFE.js} +1 -1
- package/dist/{ui-badge.entry-4SWSD3R5.js → ui-badge.entry-VGHXPEDT.js} +1 -1
- package/dist/{ui-button.entry-SS3AS32R.js → ui-button.entry-LKPLOJ22.js} +1 -1
- package/dist/{ui-checkbox.entry-V7OYTOLW.js → ui-checkbox.entry-J74HEA22.js} +1 -1
- package/dist/{ui-context-menu.entry-UCLTQESP.js → ui-context-menu.entry-MQM2FCLI.js} +1 -1
- package/dist/{ui-dialog.entry-PXIVZF7D.js → ui-dialog.entry-DQMMDO4Z.js} +1 -1
- package/dist/{ui-disclosure.entry-ZADBPM2D.js → ui-disclosure.entry-ONF7UZDC.js} +1 -1
- package/dist/{ui-floating-action-button.entry-WNBWY36T.js → ui-floating-action-button.entry-FKTGVC5T.js} +1 -1
- package/dist/{ui-form-field.entry-RZPSWN6Y.js → ui-form-field.entry-M3ISWQNU.js} +1 -1
- package/dist/{ui-icon-button.entry-ILU7RD7M.js → ui-icon-button.entry-AWFIQUHM.js} +1 -1
- package/dist/{ui-input.entry-FEIUK4EE.js → ui-input.entry-JZ6RETMT.js} +1 -1
- package/dist/{ui-menu-item.entry-UJVECPSK.js → ui-menu-item.entry-5MFR5LFL.js} +1 -1
- package/dist/{ui-menu.entry-MTCE3F5U.js → ui-menu.entry-IOEIDATQ.js} +1 -1
- package/dist/{ui-popover.entry-OAME35VB.js → ui-popover.entry-ELCMKO6Y.js} +1 -1
- package/dist/{ui-radio-group.entry-CPFX4LVA.js → ui-radio-group.entry-RJHUPPEM.js} +1 -1
- package/dist/{ui-radio.entry-44OTRYPB.js → ui-radio.entry-3VRDPOY4.js} +1 -1
- package/dist/{ui-search-result-row.entry-ZU5SL5OP.js → ui-search-result-row.entry-J34YPAV7.js} +1 -1
- package/dist/{ui-search-shell.entry-G7HG4RKU.js → ui-search-shell.entry-IJ4UUP27.js} +1 -1
- package/dist/{ui-select.entry-NAONXMFG.js → ui-select.entry-C6YD3HQ5.js} +1 -1
- package/dist/{ui-switch.entry-SE4ZTCS2.js → ui-switch.entry-UZDF5QTI.js} +1 -1
- package/dist/{ui-tabs.entry-2YG2JE3K.js → ui-tabs.entry-YRAKWOMR.js} +1 -1
- package/dist/{ui-textarea.entry-PV3APDLY.js → ui-textarea.entry-JLDKFT3K.js} +1 -1
- package/dist/{ui-toast-region.entry-WH2OL3FR.js → ui-toast-region.entry-GC7C7KXF.js} +1 -1
- package/dist/{ui-tooltip.entry-FY563DP4.js → ui-tooltip.entry-F26XDTYX.js} +1 -1
- package/dist/{ui-top-bar.entry-LJSZXFAH.js → ui-top-bar.entry-5W5UA5KV.js} +1 -1
- package/dist/ui-tree-item.entry-3LM7IXIK.js +385 -0
- package/dist/ui-tree.entry-X4FU42A6.js +244 -0
- package/editor.css +42 -0
- package/package.json +1 -1
- package/styles.css +18 -6
- package/vue/{chunk-YN4IUYVY.js → chunk-IITL6UBR.js} +7 -1
- package/vue/editor/index.d.ts +41 -3
- package/vue/editor/index.js +273 -4
- package/vue/index.d.ts +24 -1
- package/vue/index.js +5 -1
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
--ui-tree-indent: 16px;
|
|
3
|
+
--ui-tree-row-min-height: 44px;
|
|
4
|
+
--ui-tree-drop-color: var(--ui-accent-solid);
|
|
5
|
+
|
|
6
|
+
position: relative;
|
|
7
|
+
display: block;
|
|
8
|
+
min-inline-size: 0;
|
|
9
|
+
margin-inline-start: calc(var(--ui-tree-item-depth, 0) * var(--ui-tree-indent));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.row {
|
|
13
|
+
position: relative;
|
|
14
|
+
display: grid;
|
|
15
|
+
grid-template-columns: 20px auto minmax(0, 1fr) auto;
|
|
16
|
+
align-items: center;
|
|
17
|
+
min-block-size: var(--ui-tree-row-min-height);
|
|
18
|
+
min-inline-size: 0;
|
|
19
|
+
border-radius: var(--ui-radius-md);
|
|
20
|
+
color: var(--ui-text-secondary);
|
|
21
|
+
transition:
|
|
22
|
+
background-color var(--ui-motion-fast) var(--ui-motion-ease),
|
|
23
|
+
color var(--ui-motion-fast) var(--ui-motion-ease),
|
|
24
|
+
opacity var(--ui-motion-fast) var(--ui-motion-ease),
|
|
25
|
+
box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.row:hover,
|
|
29
|
+
:host([data-selected]) .row,
|
|
30
|
+
.row:focus-within {
|
|
31
|
+
color: var(--ui-text-primary);
|
|
32
|
+
background: var(--ui-surface-muted);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
:host([data-disabled]) .row {
|
|
36
|
+
opacity: 0.55;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
:host([data-dragging]) .row {
|
|
40
|
+
opacity: 0.42;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
:host(:focus) {
|
|
44
|
+
outline: none;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
:host(:focus-visible) .row {
|
|
48
|
+
box-shadow: 0 0 0 2px var(--ui-focus-ring);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
:host([data-drop-position='inside']) .row {
|
|
52
|
+
background: var(--ui-accent-subtle);
|
|
53
|
+
box-shadow: inset 0 0 0 1px var(--ui-tree-drop-color);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.disclosure,
|
|
57
|
+
.disclosure-spacer {
|
|
58
|
+
grid-column: 1;
|
|
59
|
+
grid-row: 1;
|
|
60
|
+
inline-size: 20px;
|
|
61
|
+
block-size: 28px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.disclosure {
|
|
65
|
+
display: grid;
|
|
66
|
+
place-items: center;
|
|
67
|
+
padding: 0;
|
|
68
|
+
color: var(--ui-text-muted);
|
|
69
|
+
background: transparent;
|
|
70
|
+
border: 0;
|
|
71
|
+
border-radius: var(--ui-radius-sm);
|
|
72
|
+
cursor: pointer;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.disclosure:hover {
|
|
76
|
+
color: var(--ui-text-primary);
|
|
77
|
+
background: var(--ui-surface-elevated);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.disclosure-icon {
|
|
81
|
+
display: block;
|
|
82
|
+
inline-size: 14px;
|
|
83
|
+
block-size: 14px;
|
|
84
|
+
transform: rotate(-90deg);
|
|
85
|
+
transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.disclosure-icon--expanded {
|
|
89
|
+
transform: rotate(0deg);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.disclosure-icon :is(svg),
|
|
93
|
+
.drag-handle :is(svg) {
|
|
94
|
+
display: block;
|
|
95
|
+
inline-size: 100%;
|
|
96
|
+
block-size: 100%;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.leading {
|
|
100
|
+
display: none;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.leading:has(*) {
|
|
104
|
+
display: inline-grid;
|
|
105
|
+
place-items: center;
|
|
106
|
+
grid-column: 2;
|
|
107
|
+
grid-row: 1;
|
|
108
|
+
inline-size: 16px;
|
|
109
|
+
block-size: 16px;
|
|
110
|
+
margin-inline-start: var(--ui-space-1);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.label {
|
|
114
|
+
grid-column: 3;
|
|
115
|
+
grid-row: 1;
|
|
116
|
+
min-inline-size: 0;
|
|
117
|
+
padding: var(--ui-space-1) var(--ui-space-2);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.actions {
|
|
121
|
+
grid-column: 4;
|
|
122
|
+
grid-row: 1;
|
|
123
|
+
display: inline-flex;
|
|
124
|
+
align-items: center;
|
|
125
|
+
min-inline-size: 0;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.drag-handle {
|
|
129
|
+
position: absolute;
|
|
130
|
+
z-index: 2;
|
|
131
|
+
inset-block-start: 50%;
|
|
132
|
+
inset-inline-start: -22px;
|
|
133
|
+
inline-size: 20px;
|
|
134
|
+
block-size: 32px;
|
|
135
|
+
display: grid;
|
|
136
|
+
place-items: center;
|
|
137
|
+
padding: 7px 3px;
|
|
138
|
+
color: var(--ui-text-muted);
|
|
139
|
+
background: var(--ui-surface-elevated);
|
|
140
|
+
border: 1px solid transparent;
|
|
141
|
+
border-radius: var(--ui-radius-sm);
|
|
142
|
+
cursor: grab;
|
|
143
|
+
opacity: 0;
|
|
144
|
+
pointer-events: none;
|
|
145
|
+
transform: translateY(-50%);
|
|
146
|
+
transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.row:hover .drag-handle,
|
|
150
|
+
.drag-handle:focus-visible,
|
|
151
|
+
:host([data-dragging]) .drag-handle {
|
|
152
|
+
opacity: 1;
|
|
153
|
+
pointer-events: auto;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.drag-handle:active {
|
|
157
|
+
cursor: grabbing;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.drop-indicator {
|
|
161
|
+
position: absolute;
|
|
162
|
+
z-index: 3;
|
|
163
|
+
inset-inline: 1px;
|
|
164
|
+
display: none;
|
|
165
|
+
block-size: 2px;
|
|
166
|
+
border-radius: 999px;
|
|
167
|
+
background: var(--ui-tree-drop-color);
|
|
168
|
+
pointer-events: none;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.drop-indicator::before,
|
|
172
|
+
.drop-indicator::after {
|
|
173
|
+
content: '';
|
|
174
|
+
position: absolute;
|
|
175
|
+
inset-block-start: 50%;
|
|
176
|
+
inline-size: 7px;
|
|
177
|
+
block-size: 7px;
|
|
178
|
+
border: 2px solid var(--ui-tree-drop-color);
|
|
179
|
+
border-radius: 999px;
|
|
180
|
+
background: var(--ui-surface-elevated);
|
|
181
|
+
transform: translateY(-50%);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.drop-indicator::before { inset-inline-start: -1px; }
|
|
185
|
+
.drop-indicator::after { inset-inline-end: -1px; }
|
|
186
|
+
|
|
187
|
+
:host([data-drop-position='before']) .drop-indicator {
|
|
188
|
+
display: block;
|
|
189
|
+
inset-block-start: -1px;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
:host([data-drop-position='after']) .drop-indicator {
|
|
193
|
+
display: block;
|
|
194
|
+
inset-block-end: -1px;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.children[hidden] {
|
|
198
|
+
display: none;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
@media (hover: none), (pointer: coarse) {
|
|
202
|
+
.drag-handle {
|
|
203
|
+
display: none;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
@media (prefers-reduced-motion: reduce) {
|
|
208
|
+
.row,
|
|
209
|
+
.disclosure-icon,
|
|
210
|
+
.drag-handle {
|
|
211
|
+
transition: none;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
import { Host, h } from "@stencil/core";
|
|
2
|
+
import { dispatchDetail, eventToTrigger } from "../../utils/events";
|
|
3
|
+
import { loomaIconMarkup } from "../../icons";
|
|
4
|
+
export class UITreeItem {
|
|
5
|
+
host;
|
|
6
|
+
/** Stable application identifier emitted by tree interaction events. */
|
|
7
|
+
itemId = '';
|
|
8
|
+
/** Accessible name used by the disclosure and drag handle. */
|
|
9
|
+
label = '';
|
|
10
|
+
/** One-based visual and semantic nesting level. */
|
|
11
|
+
depth = 1;
|
|
12
|
+
/** Whether this item accepts children and exposes disclosure behavior. */
|
|
13
|
+
container = false;
|
|
14
|
+
/** Whether this item participates in pointer drag and drop. */
|
|
15
|
+
sortable = false;
|
|
16
|
+
/** Application-defined kind used to reject incompatible sibling drops. */
|
|
17
|
+
dragType = 'item';
|
|
18
|
+
/** Application-defined parent/list identity included with reorder events. */
|
|
19
|
+
dropScope = '';
|
|
20
|
+
/** Comma-separated drag kinds accepted as children. Empty accepts every kind. */
|
|
21
|
+
accepts = '';
|
|
22
|
+
/** Initial controlled expansion value. */
|
|
23
|
+
expanded = false;
|
|
24
|
+
/** Initial uncontrolled expansion value. */
|
|
25
|
+
defaultExpanded = false;
|
|
26
|
+
selected = false;
|
|
27
|
+
disabled = false;
|
|
28
|
+
internalExpanded = false;
|
|
29
|
+
syncExpandedFromProp() {
|
|
30
|
+
this.internalExpanded = this.expanded;
|
|
31
|
+
}
|
|
32
|
+
componentWillLoad() {
|
|
33
|
+
this.internalExpanded = this.expanded || this.defaultExpanded;
|
|
34
|
+
}
|
|
35
|
+
componentDidLoad() {
|
|
36
|
+
this.host.addEventListener('ui-tree-auto-expand', this.onAutoExpand);
|
|
37
|
+
}
|
|
38
|
+
disconnectedCallback() {
|
|
39
|
+
this.host.removeEventListener('ui-tree-auto-expand', this.onAutoExpand);
|
|
40
|
+
}
|
|
41
|
+
setExpanded(expanded, trigger) {
|
|
42
|
+
if (!this.container || this.disabled || this.internalExpanded === expanded)
|
|
43
|
+
return;
|
|
44
|
+
this.internalExpanded = expanded;
|
|
45
|
+
dispatchDetail(this.host, 'expand', { id: this.itemId, expanded, trigger });
|
|
46
|
+
}
|
|
47
|
+
onAutoExpand = () => {
|
|
48
|
+
this.setExpanded(true, 'pointer');
|
|
49
|
+
};
|
|
50
|
+
onDisclosureClick = (event) => {
|
|
51
|
+
event.stopPropagation();
|
|
52
|
+
this.setExpanded(!this.internalExpanded, eventToTrigger(event));
|
|
53
|
+
};
|
|
54
|
+
onDisclosureKeydown = (event) => {
|
|
55
|
+
if (event.key !== 'ArrowRight' && event.key !== 'ArrowLeft')
|
|
56
|
+
return;
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
event.stopPropagation();
|
|
59
|
+
this.setExpanded(event.key === 'ArrowRight', 'keyboard');
|
|
60
|
+
};
|
|
61
|
+
onRowClick = (event) => {
|
|
62
|
+
if (!this.container || this.disabled)
|
|
63
|
+
return;
|
|
64
|
+
const path = event.composedPath();
|
|
65
|
+
const interactive = path.some((node) => node instanceof HTMLElement && (node.matches('a, button, input, select, textarea, [role="button"], [role="link"]')
|
|
66
|
+
|| node.getAttribute('slot') === 'actions'));
|
|
67
|
+
if (!interactive)
|
|
68
|
+
this.setExpanded(!this.internalExpanded, eventToTrigger(event));
|
|
69
|
+
};
|
|
70
|
+
render() {
|
|
71
|
+
const level = Math.max(1, Math.floor(this.depth));
|
|
72
|
+
const disclosureLabel = `${this.internalExpanded ? 'Collapse' : 'Expand'} ${this.label || 'item'}`;
|
|
73
|
+
const dragLabel = `Drag ${this.label || 'item'} to reorder`;
|
|
74
|
+
return (h(Host, { key: 'ea8ed538aa3883c87257a25614a066965364693f', 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: {
|
|
75
|
+
'--ui-tree-item-depth': String(level - 1),
|
|
76
|
+
'margin-inline-start': level > 1 ? 'var(--ui-tree-indent, 16px)' : '0px',
|
|
77
|
+
} }, h("div", { key: '740b93aa47e65d8a1cb899d4b9c966d9ad1d456f', 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: '37e1b7f1cdddf623734becef465ffde83d8b86f2', class: "leading", part: "leading" }, h("slot", { key: '0ab3a60c98628f009918d0d720772154912d2709', name: "leading" })), h("span", { key: 'defdd343f25a0f4354110e981f3889e1d09c27ee', class: "label", part: "label" }, h("slot", { key: 'bde46ccacc1a620348062fc300503c4f1736316b' })), h("span", { key: 'caff9ada38c41be90aeb6e331f4c54a51f31d26c', class: "actions", part: "actions" }, h("slot", { key: 'e11704d6871445c91eaa29c99302d8b751be69d3', name: "actions" })), h("span", { key: '7e40559d6c5ba56710bc705083ad2ede3046e0b1', class: "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));
|
|
78
|
+
}
|
|
79
|
+
static get is() { return "ui-tree-item"; }
|
|
80
|
+
static get encapsulation() { return "shadow"; }
|
|
81
|
+
static get originalStyleUrls() {
|
|
82
|
+
return {
|
|
83
|
+
"$": ["ui-tree-item.css"]
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
static get styleUrls() {
|
|
87
|
+
return {
|
|
88
|
+
"$": ["ui-tree-item.css"]
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
static get properties() {
|
|
92
|
+
return {
|
|
93
|
+
"itemId": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"mutable": false,
|
|
96
|
+
"complexType": {
|
|
97
|
+
"original": "string",
|
|
98
|
+
"resolved": "string",
|
|
99
|
+
"references": {}
|
|
100
|
+
},
|
|
101
|
+
"required": false,
|
|
102
|
+
"optional": false,
|
|
103
|
+
"docs": {
|
|
104
|
+
"tags": [],
|
|
105
|
+
"text": "Stable application identifier emitted by tree interaction events."
|
|
106
|
+
},
|
|
107
|
+
"getter": false,
|
|
108
|
+
"setter": false,
|
|
109
|
+
"reflect": false,
|
|
110
|
+
"attribute": "item-id",
|
|
111
|
+
"defaultValue": "''"
|
|
112
|
+
},
|
|
113
|
+
"label": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"mutable": false,
|
|
116
|
+
"complexType": {
|
|
117
|
+
"original": "string",
|
|
118
|
+
"resolved": "string",
|
|
119
|
+
"references": {}
|
|
120
|
+
},
|
|
121
|
+
"required": false,
|
|
122
|
+
"optional": false,
|
|
123
|
+
"docs": {
|
|
124
|
+
"tags": [],
|
|
125
|
+
"text": "Accessible name used by the disclosure and drag handle."
|
|
126
|
+
},
|
|
127
|
+
"getter": false,
|
|
128
|
+
"setter": false,
|
|
129
|
+
"reflect": false,
|
|
130
|
+
"attribute": "label",
|
|
131
|
+
"defaultValue": "''"
|
|
132
|
+
},
|
|
133
|
+
"depth": {
|
|
134
|
+
"type": "number",
|
|
135
|
+
"mutable": false,
|
|
136
|
+
"complexType": {
|
|
137
|
+
"original": "number",
|
|
138
|
+
"resolved": "number",
|
|
139
|
+
"references": {}
|
|
140
|
+
},
|
|
141
|
+
"required": false,
|
|
142
|
+
"optional": false,
|
|
143
|
+
"docs": {
|
|
144
|
+
"tags": [],
|
|
145
|
+
"text": "One-based visual and semantic nesting level."
|
|
146
|
+
},
|
|
147
|
+
"getter": false,
|
|
148
|
+
"setter": false,
|
|
149
|
+
"reflect": false,
|
|
150
|
+
"attribute": "depth",
|
|
151
|
+
"defaultValue": "1"
|
|
152
|
+
},
|
|
153
|
+
"container": {
|
|
154
|
+
"type": "boolean",
|
|
155
|
+
"mutable": false,
|
|
156
|
+
"complexType": {
|
|
157
|
+
"original": "boolean",
|
|
158
|
+
"resolved": "boolean",
|
|
159
|
+
"references": {}
|
|
160
|
+
},
|
|
161
|
+
"required": false,
|
|
162
|
+
"optional": false,
|
|
163
|
+
"docs": {
|
|
164
|
+
"tags": [],
|
|
165
|
+
"text": "Whether this item accepts children and exposes disclosure behavior."
|
|
166
|
+
},
|
|
167
|
+
"getter": false,
|
|
168
|
+
"setter": false,
|
|
169
|
+
"reflect": false,
|
|
170
|
+
"attribute": "container",
|
|
171
|
+
"defaultValue": "false"
|
|
172
|
+
},
|
|
173
|
+
"sortable": {
|
|
174
|
+
"type": "boolean",
|
|
175
|
+
"mutable": false,
|
|
176
|
+
"complexType": {
|
|
177
|
+
"original": "boolean",
|
|
178
|
+
"resolved": "boolean",
|
|
179
|
+
"references": {}
|
|
180
|
+
},
|
|
181
|
+
"required": false,
|
|
182
|
+
"optional": false,
|
|
183
|
+
"docs": {
|
|
184
|
+
"tags": [],
|
|
185
|
+
"text": "Whether this item participates in pointer drag and drop."
|
|
186
|
+
},
|
|
187
|
+
"getter": false,
|
|
188
|
+
"setter": false,
|
|
189
|
+
"reflect": false,
|
|
190
|
+
"attribute": "sortable",
|
|
191
|
+
"defaultValue": "false"
|
|
192
|
+
},
|
|
193
|
+
"dragType": {
|
|
194
|
+
"type": "string",
|
|
195
|
+
"mutable": false,
|
|
196
|
+
"complexType": {
|
|
197
|
+
"original": "string",
|
|
198
|
+
"resolved": "string",
|
|
199
|
+
"references": {}
|
|
200
|
+
},
|
|
201
|
+
"required": false,
|
|
202
|
+
"optional": false,
|
|
203
|
+
"docs": {
|
|
204
|
+
"tags": [],
|
|
205
|
+
"text": "Application-defined kind used to reject incompatible sibling drops."
|
|
206
|
+
},
|
|
207
|
+
"getter": false,
|
|
208
|
+
"setter": false,
|
|
209
|
+
"reflect": false,
|
|
210
|
+
"attribute": "drag-type",
|
|
211
|
+
"defaultValue": "'item'"
|
|
212
|
+
},
|
|
213
|
+
"dropScope": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"mutable": false,
|
|
216
|
+
"complexType": {
|
|
217
|
+
"original": "string",
|
|
218
|
+
"resolved": "string",
|
|
219
|
+
"references": {}
|
|
220
|
+
},
|
|
221
|
+
"required": false,
|
|
222
|
+
"optional": false,
|
|
223
|
+
"docs": {
|
|
224
|
+
"tags": [],
|
|
225
|
+
"text": "Application-defined parent/list identity included with reorder events."
|
|
226
|
+
},
|
|
227
|
+
"getter": false,
|
|
228
|
+
"setter": false,
|
|
229
|
+
"reflect": false,
|
|
230
|
+
"attribute": "drop-scope",
|
|
231
|
+
"defaultValue": "''"
|
|
232
|
+
},
|
|
233
|
+
"accepts": {
|
|
234
|
+
"type": "string",
|
|
235
|
+
"mutable": false,
|
|
236
|
+
"complexType": {
|
|
237
|
+
"original": "string",
|
|
238
|
+
"resolved": "string",
|
|
239
|
+
"references": {}
|
|
240
|
+
},
|
|
241
|
+
"required": false,
|
|
242
|
+
"optional": false,
|
|
243
|
+
"docs": {
|
|
244
|
+
"tags": [],
|
|
245
|
+
"text": "Comma-separated drag kinds accepted as children. Empty accepts every kind."
|
|
246
|
+
},
|
|
247
|
+
"getter": false,
|
|
248
|
+
"setter": false,
|
|
249
|
+
"reflect": false,
|
|
250
|
+
"attribute": "accepts",
|
|
251
|
+
"defaultValue": "''"
|
|
252
|
+
},
|
|
253
|
+
"expanded": {
|
|
254
|
+
"type": "boolean",
|
|
255
|
+
"mutable": false,
|
|
256
|
+
"complexType": {
|
|
257
|
+
"original": "boolean",
|
|
258
|
+
"resolved": "boolean",
|
|
259
|
+
"references": {}
|
|
260
|
+
},
|
|
261
|
+
"required": false,
|
|
262
|
+
"optional": false,
|
|
263
|
+
"docs": {
|
|
264
|
+
"tags": [],
|
|
265
|
+
"text": "Initial controlled expansion value."
|
|
266
|
+
},
|
|
267
|
+
"getter": false,
|
|
268
|
+
"setter": false,
|
|
269
|
+
"reflect": false,
|
|
270
|
+
"attribute": "expanded",
|
|
271
|
+
"defaultValue": "false"
|
|
272
|
+
},
|
|
273
|
+
"defaultExpanded": {
|
|
274
|
+
"type": "boolean",
|
|
275
|
+
"mutable": false,
|
|
276
|
+
"complexType": {
|
|
277
|
+
"original": "boolean",
|
|
278
|
+
"resolved": "boolean",
|
|
279
|
+
"references": {}
|
|
280
|
+
},
|
|
281
|
+
"required": false,
|
|
282
|
+
"optional": false,
|
|
283
|
+
"docs": {
|
|
284
|
+
"tags": [],
|
|
285
|
+
"text": "Initial uncontrolled expansion value."
|
|
286
|
+
},
|
|
287
|
+
"getter": false,
|
|
288
|
+
"setter": false,
|
|
289
|
+
"reflect": false,
|
|
290
|
+
"attribute": "default-expanded",
|
|
291
|
+
"defaultValue": "false"
|
|
292
|
+
},
|
|
293
|
+
"selected": {
|
|
294
|
+
"type": "boolean",
|
|
295
|
+
"mutable": false,
|
|
296
|
+
"complexType": {
|
|
297
|
+
"original": "boolean",
|
|
298
|
+
"resolved": "boolean",
|
|
299
|
+
"references": {}
|
|
300
|
+
},
|
|
301
|
+
"required": false,
|
|
302
|
+
"optional": false,
|
|
303
|
+
"docs": {
|
|
304
|
+
"tags": [],
|
|
305
|
+
"text": ""
|
|
306
|
+
},
|
|
307
|
+
"getter": false,
|
|
308
|
+
"setter": false,
|
|
309
|
+
"reflect": false,
|
|
310
|
+
"attribute": "selected",
|
|
311
|
+
"defaultValue": "false"
|
|
312
|
+
},
|
|
313
|
+
"disabled": {
|
|
314
|
+
"type": "boolean",
|
|
315
|
+
"mutable": false,
|
|
316
|
+
"complexType": {
|
|
317
|
+
"original": "boolean",
|
|
318
|
+
"resolved": "boolean",
|
|
319
|
+
"references": {}
|
|
320
|
+
},
|
|
321
|
+
"required": false,
|
|
322
|
+
"optional": false,
|
|
323
|
+
"docs": {
|
|
324
|
+
"tags": [],
|
|
325
|
+
"text": ""
|
|
326
|
+
},
|
|
327
|
+
"getter": false,
|
|
328
|
+
"setter": false,
|
|
329
|
+
"reflect": false,
|
|
330
|
+
"attribute": "disabled",
|
|
331
|
+
"defaultValue": "false"
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
static get states() {
|
|
336
|
+
return {
|
|
337
|
+
"internalExpanded": {}
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
static get elementRef() { return "host"; }
|
|
341
|
+
static get watchers() {
|
|
342
|
+
return [{
|
|
343
|
+
"propName": "expanded",
|
|
344
|
+
"methodName": "syncExpandedFromProp"
|
|
345
|
+
}];
|
|
346
|
+
}
|
|
347
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classify the pointer against stable edge bands. Containers reserve their
|
|
3
|
+
* middle half for containment; leaf rows split cleanly at their midpoint.
|
|
4
|
+
*/
|
|
5
|
+
export function classifyDropPosition(rect, clientY, acceptsChildren) {
|
|
6
|
+
const progress = rect.height > 0
|
|
7
|
+
? Math.min(1, Math.max(0, (clientY - rect.top) / rect.height))
|
|
8
|
+
: 0.5;
|
|
9
|
+
if (!acceptsChildren)
|
|
10
|
+
return progress < 0.5 ? 'before' : 'after';
|
|
11
|
+
if (progress < 0.25)
|
|
12
|
+
return 'before';
|
|
13
|
+
if (progress > 0.75)
|
|
14
|
+
return 'after';
|
|
15
|
+
return 'inside';
|
|
16
|
+
}
|
|
17
|
+
/** Use the rendered row—not the tiny handle—as the browser drag preview. */
|
|
18
|
+
export function setElementDragImage(dataTransfer, element) {
|
|
19
|
+
if (!dataTransfer || typeof dataTransfer.setDragImage !== 'function')
|
|
20
|
+
return;
|
|
21
|
+
const { height } = element.getBoundingClientRect();
|
|
22
|
+
dataTransfer.setDragImage(element, 16, Math.max(0, height / 2));
|
|
23
|
+
}
|
|
24
|
+
/** A keyed, replaceable hover timer suitable for expansion and disclosure intent. */
|
|
25
|
+
export function createHoverIntent(delay, onIntent) {
|
|
26
|
+
let timer;
|
|
27
|
+
let pendingKey;
|
|
28
|
+
function cancel() {
|
|
29
|
+
if (timer)
|
|
30
|
+
clearTimeout(timer);
|
|
31
|
+
timer = undefined;
|
|
32
|
+
pendingKey = undefined;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
schedule(key) {
|
|
36
|
+
if (pendingKey === key && timer)
|
|
37
|
+
return;
|
|
38
|
+
cancel();
|
|
39
|
+
pendingKey = key;
|
|
40
|
+
timer = setTimeout(() => {
|
|
41
|
+
timer = undefined;
|
|
42
|
+
const resolvedKey = pendingKey;
|
|
43
|
+
pendingKey = undefined;
|
|
44
|
+
if (resolvedKey)
|
|
45
|
+
onIntent(resolvedKey);
|
|
46
|
+
}, Math.max(0, delay));
|
|
47
|
+
},
|
|
48
|
+
cancel,
|
|
49
|
+
destroy: cancel,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -53,6 +53,10 @@ export { UITooltip as UiTooltip } from '../types/components/ui-tooltip/ui-toolti
|
|
|
53
53
|
export { defineCustomElement as defineCustomElementUiTooltip } from './ui-tooltip';
|
|
54
54
|
export { UITopBar as UiTopBar } from '../types/components/ui-top-bar/ui-top-bar';
|
|
55
55
|
export { defineCustomElement as defineCustomElementUiTopBar } from './ui-top-bar';
|
|
56
|
+
export { UITree as UiTree } from '../types/components/ui-tree/ui-tree';
|
|
57
|
+
export { defineCustomElement as defineCustomElementUiTree } from './ui-tree';
|
|
58
|
+
export { UITreeItem as UiTreeItem } from '../types/components/ui-tree-item/ui-tree-item';
|
|
59
|
+
export { defineCustomElement as defineCustomElementUiTreeItem } from './ui-tree-item';
|
|
56
60
|
|
|
57
61
|
/**
|
|
58
62
|
* Get the base path to where the assets can be found. Use "setAssetPath(path)"
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-CIA4RyEp.js";export{UiAffordanceScope,defineCustomElement as defineCustomElementUiAffordanceScope}from"./ui-affordance-scope.js";export{UiAvatar,defineCustomElement as defineCustomElementUiAvatar}from"./ui-avatar.js";export{UiAvatarGroup,defineCustomElement as defineCustomElementUiAvatarGroup}from"./ui-avatar-group.js";export{UiBadge,defineCustomElement as defineCustomElementUiBadge}from"./ui-badge.js";export{UiButton,defineCustomElement as defineCustomElementUiButton}from"./ui-button.js";export{UiCheckbox,defineCustomElement as defineCustomElementUiCheckbox}from"./ui-checkbox.js";export{UiContextMenu,defineCustomElement as defineCustomElementUiContextMenu}from"./ui-context-menu.js";export{UiDialog,defineCustomElement as defineCustomElementUiDialog}from"./ui-dialog.js";export{UiDisclosure,defineCustomElement as defineCustomElementUiDisclosure}from"./ui-disclosure.js";export{UiFloatingActionButton,defineCustomElement as defineCustomElementUiFloatingActionButton}from"./ui-floating-action-button.js";export{UiFormField,defineCustomElement as defineCustomElementUiFormField}from"./ui-form-field.js";export{UiIconButton,defineCustomElement as defineCustomElementUiIconButton}from"./ui-icon-button.js";export{UiInput,defineCustomElement as defineCustomElementUiInput}from"./ui-input.js";export{UiMenu,defineCustomElement as defineCustomElementUiMenu}from"./ui-menu.js";export{UiMenuItem,defineCustomElement as defineCustomElementUiMenuItem}from"./ui-menu-item.js";export{UiPopover,defineCustomElement as defineCustomElementUiPopover}from"./ui-popover.js";export{UiRadio,defineCustomElement as defineCustomElementUiRadio}from"./ui-radio.js";export{UiRadioGroup,defineCustomElement as defineCustomElementUiRadioGroup}from"./ui-radio-group.js";export{UiSearchResultRow,defineCustomElement as defineCustomElementUiSearchResultRow}from"./ui-search-result-row.js";export{UiSearchShell,defineCustomElement as defineCustomElementUiSearchShell}from"./ui-search-shell.js";export{UiSelect,defineCustomElement as defineCustomElementUiSelect}from"./ui-select.js";export{UiSwitch,defineCustomElement as defineCustomElementUiSwitch}from"./ui-switch.js";export{UiTabs,defineCustomElement as defineCustomElementUiTabs}from"./ui-tabs.js";export{UiTextarea,defineCustomElement as defineCustomElementUiTextarea}from"./ui-textarea.js";export{UiToastRegion,defineCustomElement as defineCustomElementUiToastRegion}from"./ui-toast-region.js";export{UiTooltip,defineCustomElement as defineCustomElementUiTooltip}from"./ui-tooltip.js";export{UiTopBar,defineCustomElement as defineCustomElementUiTopBar}from"./ui-top-bar.js";
|
|
1
|
+
export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-CIA4RyEp.js";export{UiAffordanceScope,defineCustomElement as defineCustomElementUiAffordanceScope}from"./ui-affordance-scope.js";export{UiAvatar,defineCustomElement as defineCustomElementUiAvatar}from"./ui-avatar.js";export{UiAvatarGroup,defineCustomElement as defineCustomElementUiAvatarGroup}from"./ui-avatar-group.js";export{UiBadge,defineCustomElement as defineCustomElementUiBadge}from"./ui-badge.js";export{UiButton,defineCustomElement as defineCustomElementUiButton}from"./ui-button.js";export{UiCheckbox,defineCustomElement as defineCustomElementUiCheckbox}from"./ui-checkbox.js";export{UiContextMenu,defineCustomElement as defineCustomElementUiContextMenu}from"./ui-context-menu.js";export{UiDialog,defineCustomElement as defineCustomElementUiDialog}from"./ui-dialog.js";export{UiDisclosure,defineCustomElement as defineCustomElementUiDisclosure}from"./ui-disclosure.js";export{UiFloatingActionButton,defineCustomElement as defineCustomElementUiFloatingActionButton}from"./ui-floating-action-button.js";export{UiFormField,defineCustomElement as defineCustomElementUiFormField}from"./ui-form-field.js";export{UiIconButton,defineCustomElement as defineCustomElementUiIconButton}from"./ui-icon-button.js";export{UiInput,defineCustomElement as defineCustomElementUiInput}from"./ui-input.js";export{UiMenu,defineCustomElement as defineCustomElementUiMenu}from"./ui-menu.js";export{UiMenuItem,defineCustomElement as defineCustomElementUiMenuItem}from"./ui-menu-item.js";export{UiPopover,defineCustomElement as defineCustomElementUiPopover}from"./ui-popover.js";export{UiRadio,defineCustomElement as defineCustomElementUiRadio}from"./ui-radio.js";export{UiRadioGroup,defineCustomElement as defineCustomElementUiRadioGroup}from"./ui-radio-group.js";export{UiSearchResultRow,defineCustomElement as defineCustomElementUiSearchResultRow}from"./ui-search-result-row.js";export{UiSearchShell,defineCustomElement as defineCustomElementUiSearchShell}from"./ui-search-shell.js";export{UiSelect,defineCustomElement as defineCustomElementUiSelect}from"./ui-select.js";export{UiSwitch,defineCustomElement as defineCustomElementUiSwitch}from"./ui-switch.js";export{UiTabs,defineCustomElement as defineCustomElementUiTabs}from"./ui-tabs.js";export{UiTextarea,defineCustomElement as defineCustomElementUiTextarea}from"./ui-textarea.js";export{UiToastRegion,defineCustomElement as defineCustomElementUiToastRegion}from"./ui-toast-region.js";export{UiTooltip,defineCustomElement as defineCustomElementUiTooltip}from"./ui-tooltip.js";export{UiTopBar,defineCustomElement as defineCustomElementUiTopBar}from"./ui-top-bar.js";export{UiTree,defineCustomElement as defineCustomElementUiTree}from"./ui-tree.js";export{UiTreeItem,defineCustomElement as defineCustomElementUiTreeItem}from"./ui-tree-item.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../types/components";
|
|
2
|
+
|
|
3
|
+
interface UiTreeItem extends Components.UiTreeItem, HTMLElement {}
|
|
4
|
+
export const UiTreeItem: {
|
|
5
|
+
prototype: UiTreeItem;
|
|
6
|
+
new (): UiTreeItem;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|