@threadlabs/looma 0.10.5 → 0.10.6

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.10.5",
3
+ "version": "0.10.6",
4
4
  "type": "module",
5
5
  "description": "Looma components as HTML, Vue, and plain DOM, with design tokens.",
6
6
  "license": "MIT",
@@ -268,19 +268,23 @@
268
268
  }
269
269
  }
270
270
 
271
+ /* The handle sits beside what it drags. A leaf row has no disclosure, so the handle takes that
272
+ empty column, right before the icon; a branch's disclosure is there, so its handle sits just
273
+ outside the row. It is bare until pointed at: a resting surface behind it read as a faint
274
+ patch rather than as a control. */
271
275
  .drag-handle {
272
276
  position: absolute;
273
277
  z-index: 2;
274
278
  inset-block-start: 50%;
275
- inset-inline-start: -22px;
276
- inline-size: 20px;
277
- block-size: 32px;
279
+ inset-inline-start: 0;
280
+ inline-size: var(--_tree-disclosure-size);
281
+ block-size: 24px;
278
282
  display: grid;
279
283
  place-items: center;
280
- padding: 7px 3px;
284
+ padding: 5px 2px;
281
285
  color: var(--ui-text-muted);
282
- background: var(--ui-surface-elevated);
283
- border: 1px solid transparent;
286
+ background: transparent;
287
+ border: 0;
284
288
  border-radius: var(--ui-radius-sm);
285
289
  cursor: grab;
286
290
  /* Hidden until the row is hovered, but always hittable: the handle sits outside the row, and moving
@@ -297,6 +301,16 @@
297
301
  opacity: 1;
298
302
  }
299
303
 
304
+ :scope[data-ui-tree-item-state~="isContainer"] > .row > .drag-handle {
305
+ inset-inline-start: calc(-1 * var(--_tree-disclosure-size) - 2px);
306
+ }
307
+
308
+ .drag-handle:hover,
309
+ .drag-handle:focus-visible {
310
+ color: var(--ui-text-primary);
311
+ background: var(--ui-surface-hover);
312
+ }
313
+
300
314
  .drag-handle:active {
301
315
  cursor: grabbing;
302
316
  }
@@ -418,6 +432,11 @@
418
432
  @media (hover: none) {
419
433
  }
420
434
 
435
+ /* The handle sits beside what it drags. A leaf row has no disclosure, so the handle takes that
436
+ empty column, right before the icon; a branch's disclosure is there, so its handle sits just
437
+ outside the row. It is bare until pointed at: a resting surface behind it read as a faint
438
+ patch rather than as a control. */
439
+
421
440
  @media (prefers-reduced-motion: reduce) {
422
441
  }
423
442
 
@@ -64,6 +64,7 @@ const hostState = computed(() =>
64
64
  [
65
65
  props.selected && 'selected',
66
66
  props.disabled && 'disabled',
67
+ isContainer.value && 'isContainer',
67
68
  ].filter(Boolean).join(' ')
68
69
  )
69
70
 
@@ -455,19 +456,23 @@ useComponentHost(controllerModule.default, {
455
456
  }
456
457
  }
457
458
 
459
+ /* The handle sits beside what it drags. A leaf row has no disclosure, so the handle takes that
460
+ empty column, right before the icon; a branch's disclosure is there, so its handle sits just
461
+ outside the row. It is bare until pointed at: a resting surface behind it read as a faint
462
+ patch rather than as a control. */
458
463
  .drag-handle {
459
464
  position: absolute;
460
465
  z-index: 2;
461
466
  inset-block-start: 50%;
462
- inset-inline-start: -22px;
463
- inline-size: 20px;
464
- block-size: 32px;
467
+ inset-inline-start: 0;
468
+ inline-size: var(--_tree-disclosure-size);
469
+ block-size: 24px;
465
470
  display: grid;
466
471
  place-items: center;
467
- padding: 7px 3px;
472
+ padding: 5px 2px;
468
473
  color: var(--ui-text-muted);
469
- background: var(--ui-surface-elevated);
470
- border: 1px solid transparent;
474
+ background: transparent;
475
+ border: 0;
471
476
  border-radius: var(--ui-radius-sm);
472
477
  cursor: grab;
473
478
  /* Hidden until the row is hovered, but always hittable: the handle sits outside the row, and moving
@@ -484,6 +489,16 @@ useComponentHost(controllerModule.default, {
484
489
  opacity: 1;
485
490
  }
486
491
 
492
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"] > .row > .drag-handle {
493
+ inset-inline-start: calc(-1 * var(--_tree-disclosure-size) - 2px);
494
+ }
495
+
496
+ .drag-handle:hover,
497
+ .drag-handle:focus-visible {
498
+ color: var(--ui-text-primary);
499
+ background: var(--ui-surface-hover);
500
+ }
501
+
487
502
  .drag-handle:active {
488
503
  cursor: grabbing;
489
504
  }
@@ -87,7 +87,11 @@ var UiTreeItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
87
87
  const tabStop = ref(false);
88
88
  const isContainer = ref(false);
89
89
  /** The values the styles' :host-state() rules test. */
90
- const hostState = computed(() => [props.selected && "selected", props.disabled && "disabled"].filter(Boolean).join(" "));
90
+ const hostState = computed(() => [
91
+ props.selected && "selected",
92
+ props.disabled && "disabled",
93
+ isContainer.value && "isContainer"
94
+ ].filter(Boolean).join(" "));
91
95
  const isExpandDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["id"] === "string" && typeof detail["expanded"] === "boolean" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
92
96
  "id",
93
97
  "expanded",
@@ -220,6 +224,6 @@ var UiTreeItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
220
224
  ], 16, _hoisted_1);
221
225
  };
222
226
  }
223
- }), [["__scopeId", "data-v-171d033f"]]);
227
+ }), [["__scopeId", "data-v-a950b4d2"]]);
224
228
  //#endregion
225
229
  export { UiTreeItem_default as t };
@@ -4130,7 +4130,7 @@ to {
4130
4130
  display: none;
4131
4131
  }
4132
4132
 
4133
- [data-component~="ui-tree-item"][data-v-171d033f] {
4133
+ [data-component~="ui-tree-item"][data-v-a950b4d2] {
4134
4134
  --_tree-row-min-height: 32px;
4135
4135
  --_tree-disclosure-size: 16px;
4136
4136
 
@@ -4139,7 +4139,7 @@ to {
4139
4139
  min-inline-size: 0;
4140
4140
  margin-inline-start: calc(var(--ui-tree-item-depth, 0) * var(--ui-tree-indent, 16px));
4141
4141
  }
4142
- .row[data-v-171d033f] {
4142
+ .row[data-v-a950b4d2] {
4143
4143
  position: relative;
4144
4144
  display: grid;
4145
4145
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
@@ -4156,38 +4156,38 @@ to {
4156
4156
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
4157
4157
  min-block-size var(--ui-motion-base) var(--ui-motion-ease);
4158
4158
  }
4159
- .row[data-v-171d033f]:hover,
4160
- [data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] .row[data-v-171d033f],
4161
- .row[data-v-171d033f]:focus-within {
4159
+ .row[data-v-a950b4d2]:hover,
4160
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] .row[data-v-a950b4d2],
4161
+ .row[data-v-a950b4d2]:focus-within {
4162
4162
  color: var(--ui-text-primary);
4163
4163
  background: var(--ui-surface-muted);
4164
4164
  }
4165
- [data-component~="ui-tree-item"][data-ui-tree-item-state~="disabled"] .row[data-v-171d033f] {
4165
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="disabled"] .row[data-v-a950b4d2] {
4166
4166
  opacity: 0.55;
4167
4167
  }
4168
- [data-component~="ui-tree-item"][data-dragging] .row[data-v-171d033f] {
4168
+ [data-component~="ui-tree-item"][data-dragging] .row[data-v-a950b4d2] {
4169
4169
  opacity: 0.42;
4170
4170
  }
4171
- [data-component~="ui-tree-item"][data-v-171d033f]:focus {
4171
+ [data-component~="ui-tree-item"][data-v-a950b4d2]:focus {
4172
4172
  outline: none;
4173
4173
  }
4174
- [data-component~="ui-tree-item"]:focus-visible .row[data-v-171d033f] {
4174
+ [data-component~="ui-tree-item"]:focus-visible .row[data-v-a950b4d2] {
4175
4175
  box-shadow: 0 0 0 2px var(--ui-focus-ring);
4176
4176
  }
4177
4177
 
4178
4178
  /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
4179
- [data-component~="ui-tree-item"][data-drop-position="inside"] > .row[data-v-171d033f] {
4179
+ [data-component~="ui-tree-item"][data-drop-position="inside"] > .row[data-v-a950b4d2] {
4180
4180
  background: var(--ui-accent-subtle);
4181
4181
  box-shadow: inset 0 0 0 1px var(--ui-tree-drop-color, var(--ui-accent-solid));
4182
4182
  }
4183
- .disclosure[data-v-171d033f],
4184
- .disclosure-spacer[data-v-171d033f] {
4183
+ .disclosure[data-v-a950b4d2],
4184
+ .disclosure-spacer[data-v-a950b4d2] {
4185
4185
  grid-column: 1;
4186
4186
  grid-row: 1;
4187
4187
  inline-size: var(--_tree-disclosure-size);
4188
4188
  block-size: 28px;
4189
4189
  }
4190
- .disclosure[data-v-171d033f] {
4190
+ .disclosure[data-v-a950b4d2] {
4191
4191
  display: grid;
4192
4192
  /* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
4193
4193
  place-items: center start;
@@ -4198,14 +4198,14 @@ to {
4198
4198
  border-radius: var(--ui-radius-sm);
4199
4199
  cursor: pointer;
4200
4200
  }
4201
- .disclosure[hidden][data-v-171d033f] {
4201
+ .disclosure[hidden][data-v-a950b4d2] {
4202
4202
  display: none;
4203
4203
  }
4204
- .disclosure[data-v-171d033f]:hover {
4204
+ .disclosure[data-v-a950b4d2]:hover {
4205
4205
  color: var(--ui-text-primary);
4206
4206
  background: var(--ui-surface-elevated);
4207
4207
  }
4208
- .disclosure-icon[data-v-171d033f] {
4208
+ .disclosure-icon[data-v-a950b4d2] {
4209
4209
  display: grid;
4210
4210
  place-items: center;
4211
4211
  inline-size: 12px;
@@ -4213,7 +4213,7 @@ to {
4213
4213
  transform: rotate(-90deg);
4214
4214
  transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
4215
4215
  }
4216
- .disclosure-icon[data-v-171d033f]::before {
4216
+ .disclosure-icon[data-v-a950b4d2]::before {
4217
4217
  display: block;
4218
4218
  inline-size: 0.375rem;
4219
4219
  block-size: 0.375rem;
@@ -4223,19 +4223,19 @@ to {
4223
4223
  /* A chevron's ink sits below its box centre; lift it so it centres optically (in either rotation). */
4224
4224
  transform: translateY(-20%) rotate(45deg);
4225
4225
  }
4226
- [data-component~="ui-tree-item"][aria-expanded="true"] .disclosure-icon[data-v-171d033f] {
4226
+ [data-component~="ui-tree-item"][aria-expanded="true"] .disclosure-icon[data-v-a950b4d2] {
4227
4227
  transform: rotate(0deg);
4228
4228
  }
4229
4229
 
4230
4230
  /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
4231
- .drag-handle svg[data-v-171d033f] {
4231
+ .drag-handle svg[data-v-a950b4d2] {
4232
4232
  display: block;
4233
4233
  inline-size: 100%;
4234
4234
  block-size: 100%;
4235
4235
  }
4236
4236
 
4237
4237
  /* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
4238
- .leading[data-v-171d033f] {
4238
+ .leading[data-v-a950b4d2] {
4239
4239
  display: inline-grid;
4240
4240
  place-items: center;
4241
4241
  grid-column: 2;
@@ -4245,12 +4245,12 @@ to {
4245
4245
  margin-inline-start: var(--ui-space-1);
4246
4246
  color: var(--ui-text-muted);
4247
4247
  }
4248
- .leading[data-v-171d033f]:empty {
4248
+ .leading[data-v-a950b4d2]:empty {
4249
4249
  display: none;
4250
4250
  }
4251
4251
 
4252
4252
  /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
4253
- svg[data-v-171d033f-s],img[data-v-171d033f-s] {
4253
+ svg[data-v-a950b4d2-s],img[data-v-a950b4d2-s] {
4254
4254
  display: block;
4255
4255
  inline-size: 1em;
4256
4256
  block-size: 1em;
@@ -4259,7 +4259,7 @@ svg[data-v-171d033f-s],img[data-v-171d033f-s] {
4259
4259
 
4260
4260
  /* The label spans the row's height and centres its content, so slotted content (a link) can
4261
4261
  stretch to fill the row as its own hit area; the padding tokens remove the inset. */
4262
- .label[data-v-171d033f] {
4262
+ .label[data-v-a950b4d2] {
4263
4263
  grid-column: 3;
4264
4264
  grid-row: 1;
4265
4265
  align-self: stretch;
@@ -4274,7 +4274,7 @@ svg[data-v-171d033f-s],img[data-v-171d033f-s] {
4274
4274
 
4275
4275
  /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
4276
4276
  its own text and reading as overflow. */
4277
- .label-text[data-v-171d033f] {
4277
+ .label-text[data-v-a950b4d2] {
4278
4278
  display: flex;
4279
4279
  align-items: center;
4280
4280
  /* Stretches, so slotted content can still be the row's full-height hit area. */
@@ -4284,7 +4284,7 @@ svg[data-v-171d033f-s],img[data-v-171d033f-s] {
4284
4284
  inline-size: 100%;
4285
4285
  white-space: nowrap;
4286
4286
  }
4287
- .label-text > [data-v-171d033f-s] {
4287
+ .label-text > [data-v-a950b4d2-s] {
4288
4288
  flex: 1 1 auto;
4289
4289
  min-inline-size: 0;
4290
4290
  }
@@ -4293,16 +4293,16 @@ svg[data-v-171d033f-s],img[data-v-171d033f-s] {
4293
4293
  there, and comes back. Only when it actually overflows — the controller measures by how
4294
4294
  much — after the controls have taken their place over its end — and hands over the distance
4295
4295
  and a duration from it, so a longer name travels no faster. */
4296
- .row[data-ui-marquee] > .label > .label-text[data-v-171d033f] {
4296
+ .row[data-ui-marquee] > .label > .label-text[data-v-a950b4d2] {
4297
4297
  /* Once, and it stays at the end while the pointer is there: a name that keeps sliding back
4298
4298
  and forth under the pointer is harder to read than one that arrives and holds. */
4299
- animation: ui-tree-item-marquee-171d033f var(--_marquee-duration) linear 0.5s 1 normal forwards;
4299
+ animation: ui-tree-item-marquee-a950b4d2 var(--_marquee-duration) linear 0.5s 1 normal forwards;
4300
4300
  will-change: transform;
4301
4301
  }
4302
4302
 
4303
4303
  /* While it slides, the start fades too: the name is leaving the cell at both ends, and a hard
4304
4304
  edge beside the icon reads as a collision rather than as more text. */
4305
- .row[data-ui-marquee] > .label[data-v-171d033f] {
4305
+ .row[data-ui-marquee] > .label[data-v-a950b4d2] {
4306
4306
  mask-image: linear-gradient(
4307
4307
  to right,
4308
4308
  transparent 0,
@@ -4311,7 +4311,7 @@ svg[data-v-171d033f-s],img[data-v-171d033f-s] {
4311
4311
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
4312
4312
  );
4313
4313
  }
4314
- .row[data-ui-marquee] > .label[data-v-171d033f]:dir(rtl) {
4314
+ .row[data-ui-marquee] > .label[data-v-a950b4d2]:dir(rtl) {
4315
4315
  mask-image: linear-gradient(
4316
4316
  to left,
4317
4317
  transparent 0,
@@ -4320,7 +4320,7 @@ svg[data-v-171d033f-s],img[data-v-171d033f-s] {
4320
4320
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
4321
4321
  );
4322
4322
  }
4323
- @keyframes ui-tree-item-marquee-171d033f {
4323
+ @keyframes ui-tree-item-marquee-a950b4d2 {
4324
4324
  from {
4325
4325
  transform: translateX(0);
4326
4326
  }
@@ -4331,15 +4331,15 @@ to {
4331
4331
 
4332
4332
  /* Reduced motion keeps the fade, which already says the name continues. */
4333
4333
  @media (prefers-reduced-motion: reduce) {
4334
- .row[data-ui-marquee] > .label > .label-text[data-v-171d033f] {
4334
+ .row[data-ui-marquee] > .label > .label-text[data-v-a950b4d2] {
4335
4335
  animation: none;
4336
4336
  }
4337
4337
  }
4338
4338
 
4339
4339
  /* The controls sit over the label's end, so the text fades out where they begin. The fade is
4340
4340
  the truncation mark while it shows: an ellipsis under it would read as a second one. */
4341
- .row:hover > .label[data-v-171d033f],
4342
- .row:focus-within > .label[data-v-171d033f] {
4341
+ .row:hover > .label[data-v-a950b4d2],
4342
+ .row:focus-within > .label[data-v-a950b4d2] {
4343
4343
  text-overflow: clip;
4344
4344
  mask-image: linear-gradient(
4345
4345
  to right,
@@ -4347,19 +4347,19 @@ to {
4347
4347
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
4348
4348
  );
4349
4349
  }
4350
- .row:hover > .label[data-v-171d033f]:dir(rtl),
4351
- .row:focus-within > .label[data-v-171d033f]:dir(rtl) {
4350
+ .row:hover > .label[data-v-a950b4d2]:dir(rtl),
4351
+ .row:focus-within > .label[data-v-a950b4d2]:dir(rtl) {
4352
4352
  mask-image: linear-gradient(
4353
4353
  to left,
4354
4354
  #000 calc(100% - var(--_tree-actions-width, 1.75rem) - var(--ui-space-3)),
4355
4355
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
4356
4356
  );
4357
4357
  }
4358
- .row:hover > .label > [data-v-171d033f-s],
4359
- .row:focus-within > .label > [data-v-171d033f-s] {
4358
+ .row:hover > .label > [data-v-a950b4d2-s],
4359
+ .row:focus-within > .label > [data-v-a950b4d2-s] {
4360
4360
  text-overflow: clip;
4361
4361
  }
4362
- .actions[data-v-171d033f] {
4362
+ .actions[data-v-a950b4d2] {
4363
4363
  position: absolute;
4364
4364
  z-index: 1;
4365
4365
  inset-block: 0;
@@ -4371,18 +4371,18 @@ to {
4371
4371
  pointer-events: none;
4372
4372
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
4373
4373
  }
4374
- .row:hover > .actions[data-v-171d033f],
4375
- .row:focus-within > .actions[data-v-171d033f] {
4374
+ .row:hover > .actions[data-v-a950b4d2],
4375
+ .row:focus-within > .actions[data-v-a950b4d2] {
4376
4376
  opacity: 1;
4377
4377
  pointer-events: auto;
4378
4378
  }
4379
4379
 
4380
4380
  /* Without hover there is no reveal, so the controls keep their own column. */
4381
4381
  @media (hover: none) {
4382
- .row[data-v-171d033f] {
4382
+ .row[data-v-a950b4d2] {
4383
4383
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
4384
4384
  }
4385
- .actions[data-v-171d033f] {
4385
+ .actions[data-v-a950b4d2] {
4386
4386
  position: static;
4387
4387
  grid-column: 4;
4388
4388
  grid-row: 1;
@@ -4392,19 +4392,24 @@ to {
4392
4392
  pointer-events: auto;
4393
4393
  }
4394
4394
  }
4395
- .drag-handle[data-v-171d033f] {
4395
+
4396
+ /* The handle sits beside what it drags. A leaf row has no disclosure, so the handle takes that
4397
+ empty column, right before the icon; a branch's disclosure is there, so its handle sits just
4398
+ outside the row. It is bare until pointed at: a resting surface behind it read as a faint
4399
+ patch rather than as a control. */
4400
+ .drag-handle[data-v-a950b4d2] {
4396
4401
  position: absolute;
4397
4402
  z-index: 2;
4398
4403
  inset-block-start: 50%;
4399
- inset-inline-start: -22px;
4400
- inline-size: 20px;
4401
- block-size: 32px;
4404
+ inset-inline-start: 0;
4405
+ inline-size: var(--_tree-disclosure-size);
4406
+ block-size: 24px;
4402
4407
  display: grid;
4403
4408
  place-items: center;
4404
- padding: 7px 3px;
4409
+ padding: 5px 2px;
4405
4410
  color: var(--ui-text-muted);
4406
- background: var(--ui-surface-elevated);
4407
- border: 1px solid transparent;
4411
+ background: transparent;
4412
+ border: 0;
4408
4413
  border-radius: var(--ui-radius-sm);
4409
4414
  cursor: grab;
4410
4415
  /* Hidden until the row is hovered, but always hittable: the handle sits outside the row, and moving
@@ -4413,16 +4418,24 @@ to {
4413
4418
  transform: translateY(-50%);
4414
4419
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
4415
4420
  }
4416
- .row:hover .drag-handle[data-v-171d033f],
4417
- .drag-handle[data-v-171d033f]:hover,
4418
- .drag-handle[data-v-171d033f]:focus-visible,
4419
- [data-component~="ui-tree-item"][data-dragging] > .row > .drag-handle[data-v-171d033f] {
4421
+ .row:hover .drag-handle[data-v-a950b4d2],
4422
+ .drag-handle[data-v-a950b4d2]:hover,
4423
+ .drag-handle[data-v-a950b4d2]:focus-visible,
4424
+ [data-component~="ui-tree-item"][data-dragging] > .row > .drag-handle[data-v-a950b4d2] {
4420
4425
  opacity: 1;
4421
4426
  }
4422
- .drag-handle[data-v-171d033f]:active {
4427
+ [data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"] > .row > .drag-handle[data-v-a950b4d2] {
4428
+ inset-inline-start: calc(-1 * var(--_tree-disclosure-size) - 2px);
4429
+ }
4430
+ .drag-handle[data-v-a950b4d2]:hover,
4431
+ .drag-handle[data-v-a950b4d2]:focus-visible {
4432
+ color: var(--ui-text-primary);
4433
+ background: var(--ui-surface-hover);
4434
+ }
4435
+ .drag-handle[data-v-a950b4d2]:active {
4423
4436
  cursor: grabbing;
4424
4437
  }
4425
- .drop-indicator[data-v-171d033f] {
4438
+ .drop-indicator[data-v-a950b4d2] {
4426
4439
  position: absolute;
4427
4440
  z-index: 3;
4428
4441
  inset-inline: 1px;
@@ -4432,8 +4445,8 @@ to {
4432
4445
  background: var(--ui-tree-drop-color, var(--ui-accent-solid));
4433
4446
  pointer-events: none;
4434
4447
  }
4435
- .drop-indicator[data-v-171d033f]::before,
4436
- .drop-indicator[data-v-171d033f]::after {
4448
+ .drop-indicator[data-v-a950b4d2]::before,
4449
+ .drop-indicator[data-v-a950b4d2]::after {
4437
4450
  content: "";
4438
4451
  position: absolute;
4439
4452
  inset-block-start: 50%;
@@ -4444,39 +4457,39 @@ to {
4444
4457
  background: var(--ui-surface-elevated);
4445
4458
  transform: translateY(-50%);
4446
4459
  }
4447
- .drop-indicator[data-v-171d033f]::before {
4460
+ .drop-indicator[data-v-a950b4d2]::before {
4448
4461
  inset-inline-start: -1px;
4449
4462
  }
4450
- .drop-indicator[data-v-171d033f]::after {
4463
+ .drop-indicator[data-v-a950b4d2]::after {
4451
4464
  inset-inline-end: -1px;
4452
4465
  }
4453
- [data-component~="ui-tree-item"][data-drop-position="before"] > .row > .row-drop-indicator[data-v-171d033f] {
4466
+ [data-component~="ui-tree-item"][data-drop-position="before"] > .row > .row-drop-indicator[data-v-a950b4d2] {
4454
4467
  display: block;
4455
4468
  inset-block-start: -1px;
4456
4469
  }
4457
- [data-component~="ui-tree-item"][data-drop-position="after"] > .subtree-drop-indicator[data-v-171d033f] {
4470
+ [data-component~="ui-tree-item"][data-drop-position="after"] > .subtree-drop-indicator[data-v-a950b4d2] {
4458
4471
  display: block;
4459
4472
  inset-block-end: -1px;
4460
4473
  }
4461
- .children[hidden][data-v-171d033f] {
4474
+ .children[hidden][data-v-a950b4d2] {
4462
4475
  display: none;
4463
4476
  }
4464
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"][data-v-171d033f] {
4477
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"][data-v-a950b4d2] {
4465
4478
  --_tree-row-min-height: 44px;
4466
4479
  }
4467
- html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle[data-v-171d033f] {
4480
+ html[data-ui-input-modality="touch"] [data-component~="ui-tree-item"] .drag-handle[data-v-a950b4d2] {
4468
4481
  display: none;
4469
4482
  }
4470
4483
  @media (prefers-reduced-motion: reduce) {
4471
- .row[data-v-171d033f],
4472
- .disclosure-icon[data-v-171d033f],
4473
- .drag-handle[data-v-171d033f] {
4484
+ .row[data-v-a950b4d2],
4485
+ .disclosure-icon[data-v-a950b4d2],
4486
+ .drag-handle[data-v-a950b4d2] {
4474
4487
  transition: none;
4475
4488
  }
4476
4489
  }
4477
4490
 
4478
4491
  /* A component that sets its display still honours the hidden attribute on its root. */
4479
- [data-component~="ui-tree-item"][hidden][data-v-171d033f] {
4492
+ [data-component~="ui-tree-item"][hidden][data-v-a950b4d2] {
4480
4493
  display: none;
4481
4494
  }
4482
4495
  /**