@threadlabs/looma 0.19.0 → 0.19.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threadlabs/looma",
3
- "version": "0.19.0",
3
+ "version": "0.19.1",
4
4
  "type": "module",
5
5
  "description": "Looma components as HTML, Vue, and plain DOM, with design tokens.",
6
6
  "license": "MIT",
@@ -220,7 +220,7 @@
220
220
  padding: var(--_ui-tree-item-label-padding-block, var(--ui-space-1)) var(--_ui-tree-item-label-padding-inline, var(--ui-space-2));
221
221
  /* The length of the fade before the controls. The label's one flex child lays out no gap; this
222
222
  is where the controller reads the length in pixels to stop a sliding name before the fade. */
223
- column-gap: var(--ui-space-3);
223
+ column-gap: var(--ui-space-1);
224
224
  }
225
225
 
226
226
  /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
@@ -243,7 +243,7 @@
243
243
  text-overflow: clip;
244
244
  mask-image: linear-gradient(
245
245
  to right,
246
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
246
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
247
247
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
248
248
  );
249
249
  }
@@ -252,7 +252,7 @@
252
252
  .row:focus-within > .label:dir(rtl) {
253
253
  mask-image: linear-gradient(
254
254
  to left,
255
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
255
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
256
256
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
257
257
  );
258
258
  }
@@ -279,7 +279,7 @@
279
279
  to right,
280
280
  transparent var(--_marquee-icon-width, 0px),
281
281
  #000 calc(var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))),
282
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
282
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
283
283
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
284
284
  );
285
285
  }
@@ -289,7 +289,7 @@
289
289
  to left,
290
290
  transparent var(--_marquee-icon-width, 0px),
291
291
  #000 calc(var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))),
292
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
292
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
293
293
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
294
294
  );
295
295
  }
@@ -408,7 +408,7 @@ useComponentHost(controllerModule.default, {
408
408
  var(--_ui-tree-item-label-padding-inline, var(--ui-space-2));
409
409
  /* The length of the fade before the controls. The label's one flex child lays out no gap; this
410
410
  is where the controller reads the length in pixels to stop a sliding name before the fade. */
411
- column-gap: var(--ui-space-3);
411
+ column-gap: var(--ui-space-1);
412
412
  }
413
413
 
414
414
  /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
@@ -436,7 +436,7 @@ useComponentHost(controllerModule.default, {
436
436
  text-overflow: clip;
437
437
  mask-image: linear-gradient(
438
438
  to right,
439
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
439
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
440
440
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
441
441
  );
442
442
  }
@@ -445,7 +445,7 @@ useComponentHost(controllerModule.default, {
445
445
  .row:focus-within > .label:dir(rtl) {
446
446
  mask-image: linear-gradient(
447
447
  to left,
448
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
448
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
449
449
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
450
450
  );
451
451
  }
@@ -476,7 +476,7 @@ useComponentHost(controllerModule.default, {
476
476
  #000 calc(
477
477
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
478
478
  ),
479
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
479
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
480
480
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
481
481
  );
482
482
  }
@@ -488,7 +488,7 @@ useComponentHost(controllerModule.default, {
488
488
  #000 calc(
489
489
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
490
490
  ),
491
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
491
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
492
492
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
493
493
  );
494
494
  }
@@ -252,6 +252,6 @@ var UiTreeItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
252
252
  ], 16, _hoisted_1);
253
253
  };
254
254
  }
255
- }), [["__scopeId", "data-v-78d948f0"]]);
255
+ }), [["__scopeId", "data-v-f9c58f7a"]]);
256
256
  //#endregion
257
257
  export { UiTreeItem_default as t };
@@ -7992,7 +7992,7 @@ to {
7992
7992
  syntax: "*";
7993
7993
  inherits: false;
7994
7994
  }
7995
- [data-component~="ui-tree-item"][data-v-78d948f0] {
7995
+ [data-component~="ui-tree-item"][data-v-f9c58f7a] {
7996
7996
  /* Hooks do not inherit, so the parts below read them from the root. The tree's density
7997
7997
  sets the defaults, in --_ui-default-*. */
7998
7998
  --_ui-tree-item-min-block-size: var(
@@ -8014,7 +8014,7 @@ to {
8014
8014
  min-inline-size: 0;
8015
8015
  margin-inline-start: calc(var(--ui-tree-item-depth, 0) * var(--_ui-tree-indent, 16px));
8016
8016
  }
8017
- .row[data-v-78d948f0] {
8017
+ .row[data-v-f9c58f7a] {
8018
8018
  position: relative;
8019
8019
  display: grid;
8020
8020
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
@@ -8031,39 +8031,39 @@ to {
8031
8031
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
8032
8032
  min-block-size var(--ui-motion-base) var(--ui-motion-ease);
8033
8033
  }
8034
- .row[data-v-78d948f0]:hover,
8035
- [data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] .row[data-v-78d948f0],
8036
- .row[data-v-78d948f0]:focus-within {
8034
+ .row[data-v-f9c58f7a]:hover,
8035
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] .row[data-v-f9c58f7a],
8036
+ .row[data-v-f9c58f7a]:focus-within {
8037
8037
  color: var(--ui-text-primary);
8038
8038
  background: var(--ui-surface-muted);
8039
8039
  }
8040
- [data-component~="ui-tree-item"][data-ui-tree-item-state~="disabled"] .row[data-v-78d948f0] {
8040
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="disabled"] .row[data-v-f9c58f7a] {
8041
8041
  color: var(--ui-disabled-text);
8042
8042
  background: var(--ui-disabled-surface);
8043
8043
  }
8044
- [data-component~="ui-tree-item"][data-dragging] .row[data-v-78d948f0] {
8044
+ [data-component~="ui-tree-item"][data-dragging] .row[data-v-f9c58f7a] {
8045
8045
  opacity: 0.42;
8046
8046
  }
8047
- [data-component~="ui-tree-item"][data-v-78d948f0]:focus {
8047
+ [data-component~="ui-tree-item"][data-v-f9c58f7a]:focus {
8048
8048
  outline: none;
8049
8049
  }
8050
- [data-component~="ui-tree-item"]:focus-visible .row[data-v-78d948f0] {
8050
+ [data-component~="ui-tree-item"]:focus-visible .row[data-v-f9c58f7a] {
8051
8051
  box-shadow: 0 0 0 2px var(--ui-focus-ring);
8052
8052
  }
8053
8053
 
8054
8054
  /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
8055
- [data-component~="ui-tree-item"][data-drop-position="inside"] > .row[data-v-78d948f0] {
8055
+ [data-component~="ui-tree-item"][data-drop-position="inside"] > .row[data-v-f9c58f7a] {
8056
8056
  background: var(--ui-accent-subtle);
8057
8057
  box-shadow: inset 0 0 0 1px var(--_ui-tree-drop-color, var(--ui-accent-solid));
8058
8058
  }
8059
- .disclosure[data-v-78d948f0],
8060
- .disclosure-spacer[data-v-78d948f0] {
8059
+ .disclosure[data-v-f9c58f7a],
8060
+ .disclosure-spacer[data-v-f9c58f7a] {
8061
8061
  grid-column: 1;
8062
8062
  grid-row: 1;
8063
8063
  inline-size: var(--_tree-disclosure-size);
8064
8064
  block-size: 28px;
8065
8065
  }
8066
- .disclosure[data-v-78d948f0] {
8066
+ .disclosure[data-v-f9c58f7a] {
8067
8067
  display: grid;
8068
8068
  /* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
8069
8069
  place-items: center start;
@@ -8074,10 +8074,10 @@ to {
8074
8074
  border-radius: var(--ui-radius-sm);
8075
8075
  cursor: pointer;
8076
8076
  }
8077
- .disclosure[hidden][data-v-78d948f0] {
8077
+ .disclosure[hidden][data-v-f9c58f7a] {
8078
8078
  display: none;
8079
8079
  }
8080
- .selection-hit[data-v-78d948f0] {
8080
+ .selection-hit[data-v-f9c58f7a] {
8081
8081
  display: none;
8082
8082
  grid-column: 2;
8083
8083
  grid-row: 1;
@@ -8086,29 +8086,29 @@ to {
8086
8086
  block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
8087
8087
  cursor: pointer;
8088
8088
  }
8089
- .selection-checkbox[data-v-78d948f0] {
8089
+ .selection-checkbox[data-v-f9c58f7a] {
8090
8090
  inline-size: 1rem;
8091
8091
  block-size: 1rem;
8092
8092
  margin: 0;
8093
8093
  accent-color: var(--ui-accent-solid);
8094
8094
  }
8095
- [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row[data-v-78d948f0] {
8095
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row[data-v-f9c58f7a] {
8096
8096
  grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr);
8097
8097
  }
8098
- [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .selection-hit[data-v-78d948f0] {
8098
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .selection-hit[data-v-f9c58f7a] {
8099
8099
  display: grid;
8100
8100
  }
8101
- [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .leading[data-v-78d948f0] {
8101
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .leading[data-v-f9c58f7a] {
8102
8102
  grid-column: 3;
8103
8103
  }
8104
- [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .label[data-v-78d948f0] {
8104
+ [data-component~="ui-tree-item"][data-selection-mode="multiple"] > .row > .label[data-v-f9c58f7a] {
8105
8105
  grid-column: 4;
8106
8106
  }
8107
- .disclosure[data-v-78d948f0]:hover {
8107
+ .disclosure[data-v-f9c58f7a]:hover {
8108
8108
  color: var(--ui-text-primary);
8109
8109
  background: var(--ui-surface-elevated);
8110
8110
  }
8111
- .disclosure-icon[data-v-78d948f0] {
8111
+ .disclosure-icon[data-v-f9c58f7a] {
8112
8112
  display: grid;
8113
8113
  place-items: center;
8114
8114
  inline-size: 12px;
@@ -8116,7 +8116,7 @@ to {
8116
8116
  transform: rotate(-90deg);
8117
8117
  transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
8118
8118
  }
8119
- .disclosure-icon[data-v-78d948f0]::before {
8119
+ .disclosure-icon[data-v-f9c58f7a]::before {
8120
8120
  display: block;
8121
8121
  inline-size: 0.375rem;
8122
8122
  block-size: 0.375rem;
@@ -8126,19 +8126,19 @@ to {
8126
8126
  /* A chevron's ink sits below its box centre; lift it so it centres optically (in either rotation). */
8127
8127
  transform: translateY(-20%) rotate(45deg);
8128
8128
  }
8129
- [data-component~="ui-tree-item"][aria-expanded="true"] .disclosure-icon[data-v-78d948f0] {
8129
+ [data-component~="ui-tree-item"][aria-expanded="true"] .disclosure-icon[data-v-f9c58f7a] {
8130
8130
  transform: rotate(0deg);
8131
8131
  }
8132
8132
 
8133
8133
  /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
8134
- .drag-handle svg[data-v-78d948f0] {
8134
+ .drag-handle svg[data-v-f9c58f7a] {
8135
8135
  display: block;
8136
8136
  inline-size: 100%;
8137
8137
  block-size: 100%;
8138
8138
  }
8139
8139
 
8140
8140
  /* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
8141
- .leading[data-v-78d948f0] {
8141
+ .leading[data-v-f9c58f7a] {
8142
8142
  display: inline-grid;
8143
8143
  place-items: center;
8144
8144
  grid-column: 2;
@@ -8151,12 +8151,12 @@ to {
8151
8151
  position: relative;
8152
8152
  z-index: 1;
8153
8153
  }
8154
- .leading[data-v-78d948f0]:empty {
8154
+ .leading[data-v-f9c58f7a]:empty {
8155
8155
  display: none;
8156
8156
  }
8157
8157
 
8158
8158
  /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
8159
- svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8159
+ svg[data-v-f9c58f7a-s],img[data-v-f9c58f7a-s] {
8160
8160
  display: block;
8161
8161
  inline-size: 1em;
8162
8162
  block-size: 1em;
@@ -8165,7 +8165,7 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8165
8165
 
8166
8166
  /* The label spans the row's height and centres its content, so slotted content (a link) can
8167
8167
  stretch to fill the row as its own hit area; the padding tokens remove the inset. */
8168
- .label[data-v-78d948f0] {
8168
+ .label[data-v-f9c58f7a] {
8169
8169
  grid-column: 3;
8170
8170
  grid-row: 1;
8171
8171
  align-self: stretch;
@@ -8178,12 +8178,12 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8178
8178
  var(--_ui-tree-item-label-padding-inline, var(--ui-space-2));
8179
8179
  /* The length of the fade before the controls. The label's one flex child lays out no gap; this
8180
8180
  is where the controller reads the length in pixels to stop a sliding name before the fade. */
8181
- column-gap: var(--ui-space-3);
8181
+ column-gap: var(--ui-space-1);
8182
8182
  }
8183
8183
 
8184
8184
  /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
8185
8185
  its own text and reading as overflow. */
8186
- .label-text[data-v-78d948f0] {
8186
+ .label-text[data-v-f9c58f7a] {
8187
8187
  display: flex;
8188
8188
  align-items: center;
8189
8189
  /* Stretches, so slotted content can still be the row's full-height hit area. */
@@ -8193,27 +8193,27 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8193
8193
  inline-size: 100%;
8194
8194
  white-space: nowrap;
8195
8195
  }
8196
- .label-text > [data-v-78d948f0-s] {
8196
+ .label-text > [data-v-f9c58f7a-s] {
8197
8197
  flex: 1 1 auto;
8198
8198
  min-inline-size: 0;
8199
8199
  }
8200
8200
 
8201
8201
  /* The controls sit over the label's end, so the text fades out where they begin. The fade is
8202
8202
  the truncation mark while it shows: an ellipsis under it would read as a second one. */
8203
- .row:hover > .label[data-v-78d948f0],
8204
- .row:focus-within > .label[data-v-78d948f0] {
8203
+ .row:hover > .label[data-v-f9c58f7a],
8204
+ .row:focus-within > .label[data-v-f9c58f7a] {
8205
8205
  text-overflow: clip;
8206
8206
  mask-image: linear-gradient(
8207
8207
  to right,
8208
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
8208
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
8209
8209
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
8210
8210
  );
8211
8211
  }
8212
- .row:hover > .label[data-v-78d948f0]:dir(rtl),
8213
- .row:focus-within > .label[data-v-78d948f0]:dir(rtl) {
8212
+ .row:hover > .label[data-v-f9c58f7a]:dir(rtl),
8213
+ .row:focus-within > .label[data-v-f9c58f7a]:dir(rtl) {
8214
8214
  mask-image: linear-gradient(
8215
8215
  to left,
8216
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
8216
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
8217
8217
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
8218
8218
  );
8219
8219
  }
@@ -8222,10 +8222,10 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8222
8222
  there, and starts again. Only when it actually overflows — the controller measures by how
8223
8223
  much — after the controls have taken their place over its end — and hands over the distance
8224
8224
  and a duration from it, so every name moves at the same speed. */
8225
- .row[data-ui-marquee] > .label > .label-text[data-v-78d948f0] {
8225
+ .row[data-ui-marquee] > .label > .label-text[data-v-f9c58f7a] {
8226
8226
  /* Once per pass: the controller restarts it after a rest at the end, so the name holds still
8227
8227
  long enough to read rather than sliding back and forth. */
8228
- animation: ui-tree-item-marquee-78d948f0 var(--_marquee-duration) linear 0.5s 1 normal forwards;
8228
+ animation: ui-tree-item-marquee-f9c58f7a var(--_marquee-duration) linear 0.5s 1 normal forwards;
8229
8229
  will-change: transform;
8230
8230
  }
8231
8231
 
@@ -8233,7 +8233,7 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8233
8233
  slides, the label reaches back under the icon (the controller measures how far) with its text
8234
8234
  where it was, and fades out across the gap before the icon, fully gone where the icon begins
8235
8235
  to cover it: the name slips under the icon rather than stopping at a hard edge beside it. */
8236
- .row[data-ui-marquee] > .label[data-v-78d948f0] {
8236
+ .row[data-ui-marquee] > .label[data-v-f9c58f7a] {
8237
8237
  margin-inline-start: calc(-1 * var(--_marquee-lead, 0px));
8238
8238
  padding-inline-start: calc(
8239
8239
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
@@ -8244,22 +8244,22 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8244
8244
  #000 calc(
8245
8245
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
8246
8246
  ),
8247
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
8247
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
8248
8248
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
8249
8249
  );
8250
8250
  }
8251
- .row[data-ui-marquee] > .label[data-v-78d948f0]:dir(rtl) {
8251
+ .row[data-ui-marquee] > .label[data-v-f9c58f7a]:dir(rtl) {
8252
8252
  mask-image: linear-gradient(
8253
8253
  to left,
8254
8254
  transparent var(--_marquee-icon-width, 0px),
8255
8255
  #000 calc(
8256
8256
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
8257
8257
  ),
8258
- #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
8258
+ #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-1)),
8259
8259
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
8260
8260
  );
8261
8261
  }
8262
- @keyframes ui-tree-item-marquee-78d948f0 {
8262
+ @keyframes ui-tree-item-marquee-f9c58f7a {
8263
8263
  from {
8264
8264
  transform: translateX(0);
8265
8265
  }
@@ -8270,15 +8270,15 @@ to {
8270
8270
 
8271
8271
  /* Reduced motion keeps the fade, which already says the name continues. */
8272
8272
  @media (prefers-reduced-motion: reduce) {
8273
- .row[data-ui-marquee] > .label > .label-text[data-v-78d948f0] {
8273
+ .row[data-ui-marquee] > .label > .label-text[data-v-f9c58f7a] {
8274
8274
  animation: none;
8275
8275
  }
8276
8276
  }
8277
- .row:hover > .label > [data-v-78d948f0-s],
8278
- .row:focus-within > .label > [data-v-78d948f0-s] {
8277
+ .row:hover > .label > [data-v-f9c58f7a-s],
8278
+ .row:focus-within > .label > [data-v-f9c58f7a-s] {
8279
8279
  text-overflow: clip;
8280
8280
  }
8281
- .actions[data-v-78d948f0] {
8281
+ .actions[data-v-f9c58f7a] {
8282
8282
  position: absolute;
8283
8283
  z-index: 1;
8284
8284
  inset-block: 0;
@@ -8290,18 +8290,18 @@ to {
8290
8290
  pointer-events: none;
8291
8291
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
8292
8292
  }
8293
- .row:hover > .actions[data-v-78d948f0],
8294
- .row:focus-within > .actions[data-v-78d948f0] {
8293
+ .row:hover > .actions[data-v-f9c58f7a],
8294
+ .row:focus-within > .actions[data-v-f9c58f7a] {
8295
8295
  opacity: 1;
8296
8296
  pointer-events: auto;
8297
8297
  }
8298
8298
 
8299
8299
  /* Without hover there is no reveal, so the controls keep their own column. */
8300
8300
  @media (hover: none) {
8301
- .row[data-v-78d948f0] {
8301
+ .row[data-v-f9c58f7a] {
8302
8302
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
8303
8303
  }
8304
- .actions[data-v-78d948f0] {
8304
+ .actions[data-v-f9c58f7a] {
8305
8305
  position: static;
8306
8306
  grid-column: 4;
8307
8307
  grid-row: 1;
@@ -8316,7 +8316,7 @@ to {
8316
8316
  empty column, right before the icon; a branch's disclosure is there, so its handle sits just
8317
8317
  outside the row. It is bare until pointed at: a resting surface behind it read as a faint
8318
8318
  patch rather than as a control. */
8319
- .drag-handle[data-v-78d948f0] {
8319
+ .drag-handle[data-v-f9c58f7a] {
8320
8320
  position: absolute;
8321
8321
  z-index: 2;
8322
8322
  inset-block-start: 50%;
@@ -8337,24 +8337,24 @@ to {
8337
8337
  transform: translateY(-50%);
8338
8338
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
8339
8339
  }
8340
- .row:hover .drag-handle[data-v-78d948f0],
8341
- .drag-handle[data-v-78d948f0]:hover,
8342
- .drag-handle[data-v-78d948f0]:focus-visible,
8343
- [data-component~="ui-tree-item"][data-dragging] > .row > .drag-handle[data-v-78d948f0] {
8340
+ .row:hover .drag-handle[data-v-f9c58f7a],
8341
+ .drag-handle[data-v-f9c58f7a]:hover,
8342
+ .drag-handle[data-v-f9c58f7a]:focus-visible,
8343
+ [data-component~="ui-tree-item"][data-dragging] > .row > .drag-handle[data-v-f9c58f7a] {
8344
8344
  opacity: 1;
8345
8345
  }
8346
- [data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"] > .row > .drag-handle[data-v-78d948f0] {
8346
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"] > .row > .drag-handle[data-v-f9c58f7a] {
8347
8347
  inset-inline-start: calc(-1 * var(--_tree-disclosure-size) - 2px);
8348
8348
  }
8349
- .drag-handle[data-v-78d948f0]:hover,
8350
- .drag-handle[data-v-78d948f0]:focus-visible {
8349
+ .drag-handle[data-v-f9c58f7a]:hover,
8350
+ .drag-handle[data-v-f9c58f7a]:focus-visible {
8351
8351
  color: var(--ui-text-primary);
8352
8352
  background: var(--ui-surface-hover);
8353
8353
  }
8354
- .drag-handle[data-v-78d948f0]:active {
8354
+ .drag-handle[data-v-f9c58f7a]:active {
8355
8355
  cursor: grabbing;
8356
8356
  }
8357
- .drop-indicator[data-v-78d948f0] {
8357
+ .drop-indicator[data-v-f9c58f7a] {
8358
8358
  position: absolute;
8359
8359
  z-index: 3;
8360
8360
  inset-inline: 1px;
@@ -8364,8 +8364,8 @@ to {
8364
8364
  background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
8365
8365
  pointer-events: none;
8366
8366
  }
8367
- .drop-indicator[data-v-78d948f0]::before,
8368
- .drop-indicator[data-v-78d948f0]::after {
8367
+ .drop-indicator[data-v-f9c58f7a]::before,
8368
+ .drop-indicator[data-v-f9c58f7a]::after {
8369
8369
  content: "";
8370
8370
  position: absolute;
8371
8371
  inset-block-start: 50%;
@@ -8376,34 +8376,34 @@ to {
8376
8376
  background: var(--ui-surface-elevated);
8377
8377
  transform: translateY(-50%);
8378
8378
  }
8379
- .drop-indicator[data-v-78d948f0]::before {
8379
+ .drop-indicator[data-v-f9c58f7a]::before {
8380
8380
  inset-inline-start: -1px;
8381
8381
  }
8382
- .drop-indicator[data-v-78d948f0]::after {
8382
+ .drop-indicator[data-v-f9c58f7a]::after {
8383
8383
  inset-inline-end: -1px;
8384
8384
  }
8385
- [data-component~="ui-tree-item"][data-drop-position="before"] > .row > .row-drop-indicator[data-v-78d948f0] {
8385
+ [data-component~="ui-tree-item"][data-drop-position="before"] > .row > .row-drop-indicator[data-v-f9c58f7a] {
8386
8386
  display: block;
8387
8387
  inset-block-start: -1px;
8388
8388
  }
8389
- [data-component~="ui-tree-item"][data-drop-position="after"] > .subtree-drop-indicator[data-v-78d948f0] {
8389
+ [data-component~="ui-tree-item"][data-drop-position="after"] > .subtree-drop-indicator[data-v-f9c58f7a] {
8390
8390
  display: block;
8391
8391
  inset-block-end: -1px;
8392
8392
  }
8393
- .children[hidden][data-v-78d948f0] {
8393
+ .children[hidden][data-v-f9c58f7a] {
8394
8394
  display: none;
8395
8395
  }
8396
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"][data-v-78d948f0] {
8396
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"][data-v-f9c58f7a] {
8397
8397
  --_tree-row-min-height: 44px;
8398
8398
  }
8399
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .row[data-v-78d948f0] {
8399
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .row[data-v-f9c58f7a] {
8400
8400
  grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr);
8401
8401
  }
8402
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle[data-v-78d948f0],
8402
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle[data-v-f9c58f7a],
8403
8403
  html[data-ui-input-modality="touch"]
8404
8404
  [data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"]
8405
8405
  > .row
8406
- > .drag-handle[data-v-78d948f0] {
8406
+ > .drag-handle[data-v-f9c58f7a] {
8407
8407
  position: relative;
8408
8408
  grid-column: 1;
8409
8409
  grid-row: 1;
@@ -8415,24 +8415,24 @@ html[data-ui-input-modality="touch"]
8415
8415
  transform: none;
8416
8416
  cursor: pointer;
8417
8417
  }
8418
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .disclosure[data-v-78d948f0] {
8418
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .disclosure[data-v-f9c58f7a] {
8419
8419
  grid-column: 2;
8420
8420
  }
8421
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .leading[data-v-78d948f0] {
8421
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .leading[data-v-f9c58f7a] {
8422
8422
  grid-column: 3;
8423
8423
  }
8424
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .label[data-v-78d948f0] {
8424
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .label[data-v-f9c58f7a] {
8425
8425
  grid-column: 4;
8426
8426
  }
8427
8427
  html[data-ui-input-modality="touch"]
8428
8428
  [data-component~="ui-tree-item"][data-selection-mode="multiple"]
8429
- > .row[data-v-78d948f0] {
8429
+ > .row[data-v-f9c58f7a] {
8430
8430
  grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr);
8431
8431
  }
8432
8432
  html[data-ui-input-modality="touch"]
8433
8433
  [data-component~="ui-tree-item"][data-selection-mode="multiple"]
8434
8434
  > .row
8435
- > .selection-hit[data-v-78d948f0] {
8435
+ > .selection-hit[data-v-f9c58f7a] {
8436
8436
  grid-column: 3;
8437
8437
  inline-size: 44px;
8438
8438
  block-size: 44px;
@@ -8440,25 +8440,25 @@ html[data-ui-input-modality="touch"]
8440
8440
  html[data-ui-input-modality="touch"]
8441
8441
  [data-component~="ui-tree-item"][data-selection-mode="multiple"]
8442
8442
  > .row
8443
- > .leading[data-v-78d948f0] {
8443
+ > .leading[data-v-f9c58f7a] {
8444
8444
  grid-column: 4;
8445
8445
  }
8446
8446
  html[data-ui-input-modality="touch"]
8447
8447
  [data-component~="ui-tree-item"][data-selection-mode="multiple"]
8448
8448
  > .row
8449
- > .label[data-v-78d948f0] {
8449
+ > .label[data-v-f9c58f7a] {
8450
8450
  grid-column: 5;
8451
8451
  }
8452
8452
  @media (prefers-reduced-motion: reduce) {
8453
- .row[data-v-78d948f0],
8454
- .disclosure-icon[data-v-78d948f0],
8455
- .drag-handle[data-v-78d948f0] {
8453
+ .row[data-v-f9c58f7a],
8454
+ .disclosure-icon[data-v-f9c58f7a],
8455
+ .drag-handle[data-v-f9c58f7a] {
8456
8456
  transition: none;
8457
8457
  }
8458
8458
  }
8459
8459
 
8460
8460
  /* A component that sets its display still honours the hidden attribute on its root. */
8461
- [data-component~="ui-tree-item"][hidden][data-v-78d948f0] {
8461
+ [data-component~="ui-tree-item"][hidden][data-v-f9c58f7a] {
8462
8462
  display: none;
8463
8463
  }
8464
8464
  /**