@threadlabs/looma 0.6.3 → 0.6.5
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/components/ui-tree-item/ui-tree-item.html +68 -12
- package/components/ui-tree-item/ui-tree-item.js +9 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
- package/styles/ui-affordance-scope.css +1 -1
- package/styles/ui-avatar-group.css +1 -1
- package/styles/ui-avatar.css +1 -1
- package/styles/ui-badge.css +1 -1
- package/styles/ui-button.css +1 -1
- package/styles/ui-callout.css +1 -1
- package/styles/ui-checkbox.css +1 -1
- package/styles/ui-cluster.css +1 -1
- package/styles/ui-combobox.css +1 -1
- package/styles/ui-container.css +1 -1
- package/styles/ui-context-menu.css +1 -1
- package/styles/ui-dialog.css +1 -1
- package/styles/ui-disclosure.css +1 -1
- package/styles/ui-editable.css +1 -1
- package/styles/ui-editor-insert-table-grid.css +1 -1
- package/styles/ui-editor-mention-menu.css +1 -1
- package/styles/ui-editor-slash-menu.css +1 -1
- package/styles/ui-editor-table-context-menu.css +1 -1
- package/styles/ui-editor-table-overlay.css +1 -1
- package/styles/ui-editor-table-toolbar.css +1 -1
- package/styles/ui-editor-toolbar.css +1 -1
- package/styles/ui-floating-action-button.css +1 -1
- package/styles/ui-form-field.css +1 -1
- package/styles/ui-grid.css +1 -1
- package/styles/ui-icon-button.css +1 -1
- package/styles/ui-icon.css +1 -1
- package/styles/ui-input.css +1 -1
- package/styles/ui-menu-item.css +1 -1
- package/styles/ui-menu.css +1 -1
- package/styles/ui-popover.css +1 -1
- package/styles/ui-radio-group.css +1 -1
- package/styles/ui-radio.css +1 -1
- package/styles/ui-reel.css +1 -1
- package/styles/ui-search-result-row.css +1 -1
- package/styles/ui-search-shell.css +1 -1
- package/styles/ui-select.css +1 -1
- package/styles/ui-separator.css +1 -1
- package/styles/ui-sidebar.css +1 -1
- package/styles/ui-stack.css +1 -1
- package/styles/ui-switch.css +1 -1
- package/styles/ui-switcher.css +1 -1
- package/styles/ui-tabs.css +1 -1
- package/styles/ui-textarea.css +1 -1
- package/styles/ui-toast-region.css +1 -1
- package/styles/ui-tooltip.css +1 -1
- package/styles/ui-top-bar.css +1 -1
- package/styles/ui-tree-item.css +75 -12
- package/styles/ui-tree.css +1 -1
- package/vanilla/UiAffordanceScope.d.ts +1 -1
- package/vanilla/UiAffordanceScope.js +1 -1
- package/vanilla/UiAvatar.d.ts +1 -1
- package/vanilla/UiAvatar.js +1 -1
- package/vanilla/UiAvatarGroup.d.ts +1 -1
- package/vanilla/UiAvatarGroup.js +1 -1
- package/vanilla/UiBadge.d.ts +1 -1
- package/vanilla/UiBadge.js +1 -1
- package/vanilla/UiButton.d.ts +1 -1
- package/vanilla/UiButton.js +1 -1
- package/vanilla/UiCallout.d.ts +1 -1
- package/vanilla/UiCallout.js +1 -1
- package/vanilla/UiCheckbox.d.ts +1 -1
- package/vanilla/UiCheckbox.js +1 -1
- package/vanilla/UiCluster.d.ts +1 -1
- package/vanilla/UiCluster.js +1 -1
- package/vanilla/UiCombobox.d.ts +1 -1
- package/vanilla/UiCombobox.js +1 -1
- package/vanilla/UiContainer.d.ts +1 -1
- package/vanilla/UiContainer.js +1 -1
- package/vanilla/UiContextMenu.d.ts +1 -1
- package/vanilla/UiContextMenu.js +1 -1
- package/vanilla/UiDialog.d.ts +1 -1
- package/vanilla/UiDialog.js +1 -1
- package/vanilla/UiDisclosure.d.ts +1 -1
- package/vanilla/UiDisclosure.js +1 -1
- package/vanilla/UiEditable.d.ts +1 -1
- package/vanilla/UiEditable.js +1 -1
- package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
- package/vanilla/UiEditorInsertTableGrid.js +1 -1
- package/vanilla/UiEditorMentionMenu.d.ts +1 -1
- package/vanilla/UiEditorMentionMenu.js +1 -1
- package/vanilla/UiEditorSlashMenu.d.ts +1 -1
- package/vanilla/UiEditorSlashMenu.js +1 -1
- package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
- package/vanilla/UiEditorTableContextMenu.js +1 -1
- package/vanilla/UiEditorTableOverlay.d.ts +1 -1
- package/vanilla/UiEditorTableOverlay.js +1 -1
- package/vanilla/UiEditorTableToolbar.d.ts +1 -1
- package/vanilla/UiEditorTableToolbar.js +1 -1
- package/vanilla/UiEditorToolbar.d.ts +1 -1
- package/vanilla/UiEditorToolbar.js +1 -1
- package/vanilla/UiFloatingActionButton.d.ts +1 -1
- package/vanilla/UiFloatingActionButton.js +1 -1
- package/vanilla/UiFormField.d.ts +1 -1
- package/vanilla/UiFormField.js +1 -1
- package/vanilla/UiGrid.d.ts +1 -1
- package/vanilla/UiGrid.js +1 -1
- package/vanilla/UiIcon.d.ts +1 -1
- package/vanilla/UiIcon.js +1 -1
- package/vanilla/UiIconButton.d.ts +1 -1
- package/vanilla/UiIconButton.js +1 -1
- package/vanilla/UiInput.d.ts +1 -1
- package/vanilla/UiInput.js +1 -1
- package/vanilla/UiMenu.d.ts +1 -1
- package/vanilla/UiMenu.js +1 -1
- package/vanilla/UiMenuItem.d.ts +1 -1
- package/vanilla/UiMenuItem.js +1 -1
- package/vanilla/UiPopover.d.ts +1 -1
- package/vanilla/UiPopover.js +1 -1
- package/vanilla/UiRadio.d.ts +1 -1
- package/vanilla/UiRadio.js +1 -1
- package/vanilla/UiRadioGroup.d.ts +1 -1
- package/vanilla/UiRadioGroup.js +1 -1
- package/vanilla/UiReel.d.ts +1 -1
- package/vanilla/UiReel.js +1 -1
- package/vanilla/UiSearchResultRow.d.ts +1 -1
- package/vanilla/UiSearchResultRow.js +1 -1
- package/vanilla/UiSearchShell.d.ts +1 -1
- package/vanilla/UiSearchShell.js +1 -1
- package/vanilla/UiSelect.d.ts +1 -1
- package/vanilla/UiSelect.js +1 -1
- package/vanilla/UiSeparator.d.ts +1 -1
- package/vanilla/UiSeparator.js +1 -1
- package/vanilla/UiSidebar.d.ts +1 -1
- package/vanilla/UiSidebar.js +1 -1
- package/vanilla/UiStack.d.ts +1 -1
- package/vanilla/UiStack.js +1 -1
- package/vanilla/UiSwitch.d.ts +1 -1
- package/vanilla/UiSwitch.js +1 -1
- package/vanilla/UiSwitcher.d.ts +1 -1
- package/vanilla/UiSwitcher.js +1 -1
- package/vanilla/UiTabs.d.ts +1 -1
- package/vanilla/UiTabs.js +1 -1
- package/vanilla/UiTextarea.d.ts +1 -1
- package/vanilla/UiTextarea.js +1 -1
- package/vanilla/UiToastRegion.d.ts +1 -1
- package/vanilla/UiToastRegion.js +1 -1
- package/vanilla/UiTooltip.d.ts +1 -1
- package/vanilla/UiTooltip.js +1 -1
- package/vanilla/UiTopBar.d.ts +1 -1
- package/vanilla/UiTopBar.js +1 -1
- package/vanilla/UiTree.d.ts +1 -1
- package/vanilla/UiTree.js +1 -1
- package/vanilla/UiTreeItem.d.ts +1 -1
- package/vanilla/UiTreeItem.js +2 -2
- package/vue/UiAffordanceScope.vue +8 -84
- package/vue/UiAvatar.d.ts +1 -1
- package/vue/UiAvatar.vue +9 -106
- package/vue/UiAvatarGroup.vue +9 -96
- package/vue/UiBadge.vue +1 -1
- package/vue/UiButton.vue +1 -1
- package/vue/UiCallout.vue +1 -1
- package/vue/UiCheckbox.vue +22 -123
- package/vue/UiCluster.vue +1 -1
- package/vue/UiCombobox.d.ts +1 -1
- package/vue/UiCombobox.vue +224 -475
- package/vue/UiContainer.vue +1 -1
- package/vue/UiContextMenu.vue +34 -141
- package/vue/UiDialog.vue +25 -126
- package/vue/UiDisclosure.vue +26 -138
- package/vue/UiEditable.vue +46 -158
- package/vue/UiEditorInsertTableGrid.vue +19 -138
- package/vue/UiEditorMentionMenu.vue +17 -124
- package/vue/UiEditorSlashMenu.vue +17 -109
- package/vue/UiEditorTableContextMenu.vue +34 -122
- package/vue/UiEditorTableOverlay.vue +61 -167
- package/vue/UiEditorTableToolbar.vue +34 -142
- package/vue/UiEditorToolbar.vue +1 -1
- package/vue/UiFloatingActionButton.vue +1 -1
- package/vue/UiFormField.vue +7 -79
- package/vue/UiGrid.vue +1 -1
- package/vue/UiIcon.vue +8 -84
- package/vue/UiIconButton.vue +7 -79
- package/vue/UiInput.vue +7 -79
- package/vue/UiMenu.vue +42 -127
- package/vue/UiMenuItem.vue +1 -1
- package/vue/UiPopover.vue +25 -121
- package/vue/UiRadio.vue +22 -123
- package/vue/UiRadioGroup.d.ts +1 -1
- package/vue/UiRadioGroup.vue +32 -119
- package/vue/UiReel.vue +1 -1
- package/vue/UiSearchResultRow.vue +1 -1
- package/vue/UiSearchShell.vue +25 -121
- package/vue/UiSelect.vue +7 -79
- package/vue/UiSeparator.vue +1 -1
- package/vue/UiSidebar.vue +32 -133
- package/vue/UiStack.vue +1 -1
- package/vue/UiSwitch.vue +22 -123
- package/vue/UiSwitcher.vue +1 -1
- package/vue/UiTabs.vue +24 -128
- package/vue/UiTextarea.vue +7 -79
- package/vue/UiToastRegion.vue +37 -126
- package/vue/UiTooltip.vue +25 -124
- package/vue/UiTopBar.vue +1 -1
- package/vue/UiTree.vue +56 -137
- package/vue/UiTreeItem.vue +97 -153
- package/vue/chunks/UiAffordanceScope.js +9 -78
- package/vue/chunks/UiAvatar.js +13 -89
- package/vue/chunks/UiAvatarGroup.js +10 -80
- package/vue/chunks/UiBadge.js +1 -1
- package/vue/chunks/UiButton.js +1 -1
- package/vue/chunks/UiCallout.js +1 -1
- package/vue/chunks/UiCheckbox.js +17 -95
- package/vue/chunks/UiCluster.js +1 -1
- package/vue/chunks/UiCombobox.js +114 -325
- package/vue/chunks/UiContainer.js +1 -1
- package/vue/chunks/UiContextMenu.js +21 -113
- package/vue/chunks/UiDialog.js +20 -99
- package/vue/chunks/UiDisclosure.js +22 -112
- package/vue/chunks/UiEditable.js +32 -128
- package/vue/chunks/UiEditorInsertTableGrid.js +22 -116
- package/vue/chunks/UiEditorMentionMenu.js +18 -116
- package/vue/chunks/UiEditorSlashMenu.js +15 -101
- package/vue/chunks/UiEditorTableContextMenu.js +12 -91
- package/vue/chunks/UiEditorTableOverlay.js +29 -120
- package/vue/chunks/UiEditorTableToolbar.js +16 -111
- package/vue/chunks/UiEditorToolbar.js +1 -1
- package/vue/chunks/UiFloatingActionButton.js +1 -1
- package/vue/chunks/UiFormField.js +8 -73
- package/vue/chunks/UiGrid.js +1 -1
- package/vue/chunks/UiIcon.js +9 -78
- package/vue/chunks/UiIconButton.js +8 -73
- package/vue/chunks/UiInput.js +8 -73
- package/vue/chunks/UiMenu.js +25 -111
- package/vue/chunks/UiMenuItem.js +1 -1
- package/vue/chunks/UiPopover.js +18 -105
- package/vue/chunks/UiRadio.js +17 -95
- package/vue/chunks/UiRadioGroup.js +23 -105
- package/vue/chunks/UiReel.js +1 -1
- package/vue/chunks/UiSearchResultRow.js +1 -1
- package/vue/chunks/UiSearchShell.js +17 -94
- package/vue/chunks/UiSelect.js +8 -73
- package/vue/chunks/UiSeparator.js +1 -1
- package/vue/chunks/UiSidebar.js +23 -108
- package/vue/chunks/UiStack.js +1 -1
- package/vue/chunks/UiSwitch.js +17 -95
- package/vue/chunks/UiSwitcher.js +1 -1
- package/vue/chunks/UiTabs.js +22 -103
- package/vue/chunks/UiTextarea.js +8 -73
- package/vue/chunks/UiToastRegion.js +27 -112
- package/vue/chunks/UiTooltip.js +18 -106
- package/vue/chunks/UiTopBar.js +1 -1
- package/vue/chunks/UiTree.js +31 -109
- package/vue/chunks/UiTreeItem.js +35 -118
- package/vue/chunks/host.js +101 -0
- package/vue/components.css +759 -707
- package/vue/host.ts +154 -0
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
</button>
|
|
64
64
|
<span class="leading"><slot name="leading"></slot></span>
|
|
65
65
|
<span class="label"><slot name="label"><template $value="label"></template></slot></span>
|
|
66
|
-
<span class="actions"><slot name="actions"></slot></span>
|
|
66
|
+
<span class="actions" $ref="actions"><slot name="actions"></slot></span>
|
|
67
67
|
<span class="drop-indicator row-drop-indicator" aria-hidden="true"></span>
|
|
68
68
|
</div>
|
|
69
69
|
<div class="children" $ref="children" role="group" :hidden="not (isContainer and internalExpanded)"><slot></slot></div>
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
<style>
|
|
73
73
|
:host {
|
|
74
74
|
--_tree-row-min-height: 32px;
|
|
75
|
+
--_tree-disclosure-size: 16px;
|
|
75
76
|
|
|
76
77
|
position: relative;
|
|
77
78
|
display: block;
|
|
@@ -82,7 +83,7 @@
|
|
|
82
83
|
.row {
|
|
83
84
|
position: relative;
|
|
84
85
|
display: grid;
|
|
85
|
-
grid-template-columns:
|
|
86
|
+
grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
|
|
86
87
|
align-items: center;
|
|
87
88
|
min-block-size: var(--ui-tree-item-min-block-size, var(--_tree-row-min-height));
|
|
88
89
|
min-inline-size: 0;
|
|
@@ -130,13 +131,14 @@
|
|
|
130
131
|
.disclosure-spacer {
|
|
131
132
|
grid-column: 1;
|
|
132
133
|
grid-row: 1;
|
|
133
|
-
inline-size:
|
|
134
|
+
inline-size: var(--_tree-disclosure-size);
|
|
134
135
|
block-size: 28px;
|
|
135
136
|
}
|
|
136
137
|
|
|
137
138
|
.disclosure {
|
|
138
139
|
display: grid;
|
|
139
|
-
|
|
140
|
+
/* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
|
|
141
|
+
place-items: center start;
|
|
140
142
|
padding: 0;
|
|
141
143
|
color: var(--ui-text-muted);
|
|
142
144
|
background: transparent;
|
|
@@ -157,18 +159,18 @@
|
|
|
157
159
|
.disclosure-icon {
|
|
158
160
|
display: grid;
|
|
159
161
|
place-items: center;
|
|
160
|
-
inline-size:
|
|
161
|
-
block-size:
|
|
162
|
+
inline-size: 12px;
|
|
163
|
+
block-size: 12px;
|
|
162
164
|
transform: rotate(-90deg);
|
|
163
165
|
transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
|
|
164
166
|
}
|
|
165
167
|
|
|
166
168
|
.disclosure-icon::before {
|
|
167
169
|
display: block;
|
|
168
|
-
inline-size: 0.
|
|
169
|
-
block-size: 0.
|
|
170
|
-
border-inline-end:
|
|
171
|
-
border-block-end:
|
|
170
|
+
inline-size: 0.375rem;
|
|
171
|
+
block-size: 0.375rem;
|
|
172
|
+
border-inline-end: 1.5px solid currentColor;
|
|
173
|
+
border-block-end: 1.5px solid currentColor;
|
|
172
174
|
content: "";
|
|
173
175
|
/* A chevron's ink sits below its box centre; lift it so it centres optically (in either rotation). */
|
|
174
176
|
transform: translateY(-20%) rotate(45deg);
|
|
@@ -229,12 +231,66 @@
|
|
|
229
231
|
min-inline-size: 0;
|
|
230
232
|
}
|
|
231
233
|
|
|
234
|
+
/* The controls sit over the label's end, so the text fades out where they begin. The fade is
|
|
235
|
+
the truncation mark while it shows: an ellipsis under it would read as a second one. */
|
|
236
|
+
.row:hover > .label,
|
|
237
|
+
.row:focus-within > .label {
|
|
238
|
+
text-overflow: clip;
|
|
239
|
+
mask-image: linear-gradient(
|
|
240
|
+
to right,
|
|
241
|
+
#000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
|
|
242
|
+
transparent calc(100% - var(--_tree-actions-width, 1.75rem))
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.row:hover > .label:dir(rtl),
|
|
247
|
+
.row:focus-within > .label:dir(rtl) {
|
|
248
|
+
mask-image: linear-gradient(
|
|
249
|
+
to left,
|
|
250
|
+
#000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
|
|
251
|
+
transparent calc(100% - var(--_tree-actions-width, 1.75rem))
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.row:hover > .label > :slotted(*),
|
|
256
|
+
.row:focus-within > .label > :slotted(*) {
|
|
257
|
+
text-overflow: clip;
|
|
258
|
+
}
|
|
259
|
+
|
|
232
260
|
.actions {
|
|
233
|
-
|
|
234
|
-
|
|
261
|
+
position: absolute;
|
|
262
|
+
z-index: 1;
|
|
263
|
+
inset-block: 0;
|
|
264
|
+
inset-inline-end: 0;
|
|
235
265
|
display: inline-flex;
|
|
236
266
|
align-items: center;
|
|
237
267
|
min-inline-size: 0;
|
|
268
|
+
opacity: 0;
|
|
269
|
+
pointer-events: none;
|
|
270
|
+
transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.row:hover > .actions,
|
|
274
|
+
.row:focus-within > .actions {
|
|
275
|
+
opacity: 1;
|
|
276
|
+
pointer-events: auto;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/* Without hover there is no reveal, so the controls keep their own column. */
|
|
280
|
+
@media (hover: none) {
|
|
281
|
+
.row {
|
|
282
|
+
grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.actions {
|
|
286
|
+
position: static;
|
|
287
|
+
grid-column: 4;
|
|
288
|
+
grid-row: 1;
|
|
289
|
+
padding-inline-start: 0;
|
|
290
|
+
background: none;
|
|
291
|
+
opacity: 1;
|
|
292
|
+
pointer-events: auto;
|
|
293
|
+
}
|
|
238
294
|
}
|
|
239
295
|
|
|
240
296
|
.drag-handle {
|
|
@@ -11,7 +11,7 @@ function parentItem(element) {
|
|
|
11
11
|
/** Synchronizes an inferred tree hierarchy after nested component lowering. */
|
|
12
12
|
export default function controller(host) {
|
|
13
13
|
const element = host.element;
|
|
14
|
-
const { row, disclosure, children } = host.refs;
|
|
14
|
+
const { row, disclosure, children, actions } = host.refs;
|
|
15
15
|
// Touch use enlarges rows and hides drag handles (see the template's styles).
|
|
16
16
|
trackInputModality(element.ownerDocument);
|
|
17
17
|
const childItems = () => Array.from(children?.children ?? [])
|
|
@@ -81,9 +81,17 @@ export default function controller(host) {
|
|
|
81
81
|
updateLevel();
|
|
82
82
|
const stop = host.effect(apply);
|
|
83
83
|
apply();
|
|
84
|
+
// The label's fade has to end where the controls begin, and only the controls know their width.
|
|
85
|
+
const actionsSize = new ResizeObserver(([entry]) => {
|
|
86
|
+
const width = entry.borderBoxSize?.[0]?.inlineSize ?? entry.contentRect.width;
|
|
87
|
+
element.style.setProperty("--_tree-actions-width", `${width}px`);
|
|
88
|
+
});
|
|
89
|
+
if (actions) actionsSize.observe(actions);
|
|
90
|
+
|
|
84
91
|
return () => {
|
|
85
92
|
stop?.();
|
|
86
93
|
observer.disconnect();
|
|
94
|
+
actionsSize.disconnect();
|
|
87
95
|
element.removeEventListener("ui-tree-auto-expand", onAutoExpand);
|
|
88
96
|
element.removeEventListener("ui-tree-structure-sync", onStructure);
|
|
89
97
|
element.removeEventListener("ui-tree-roving-tab-stop", onRoving);
|