@threadlabs/looma 0.18.6 → 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.
Files changed (220) hide show
  1. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +34 -3
  2. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +55 -0
  3. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +7 -2
  4. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +29 -0
  5. package/components/ui-tree-item/ui-tree-item.html +5 -5
  6. package/components/ui-tree-item/ui-tree-item.js +20 -3
  7. package/dist/index.js +1 -1
  8. package/editor/chunks/extensions.js +24 -3
  9. package/editor/extensions/preset.d.ts +2 -0
  10. package/editor/extensions/table-commands.d.ts +1 -1
  11. package/editor/table-overlay.d.ts +8 -3
  12. package/package.json +2 -1
  13. package/styles/ui-editor-table-overlay.css +30 -0
  14. package/styles/ui-editor-table-toolbar.css +7 -2
  15. package/styles/ui-tree-item.css +5 -5
  16. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  17. package/vanilla/UiEditorTableOverlay.js +9 -3
  18. package/vue/UiEditorTableOverlay.d.ts +8 -0
  19. package/vue/UiEditorTableOverlay.vue +45 -2
  20. package/vue/UiEditorTableToolbar.vue +7 -2
  21. package/vue/UiTreeItem.vue +5 -5
  22. package/vue/chunks/1c.js +106 -0
  23. package/vue/chunks/UiEditorTableOverlay.js +14 -4
  24. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  25. package/vue/chunks/UiTreeItem.js +1 -1
  26. package/vue/chunks/abnf.js +61 -0
  27. package/vue/chunks/accesslog.js +72 -0
  28. package/vue/chunks/actionscript.js +139 -0
  29. package/vue/chunks/ada.js +183 -0
  30. package/vue/chunks/angelscript.js +141 -0
  31. package/vue/chunks/apache.js +88 -0
  32. package/vue/chunks/applescript.js +99 -0
  33. package/vue/chunks/arcade.js +405 -0
  34. package/vue/chunks/arduino.js +871 -0
  35. package/vue/chunks/armasm.js +65 -0
  36. package/vue/chunks/asciidoc.js +181 -0
  37. package/vue/chunks/aspectj.js +202 -0
  38. package/vue/chunks/autohotkey.js +54 -0
  39. package/vue/chunks/autoit.js +132 -0
  40. package/vue/chunks/avrasm.js +46 -0
  41. package/vue/chunks/awk.js +58 -0
  42. package/vue/chunks/axapta.js +167 -0
  43. package/vue/chunks/bash.js +358 -0
  44. package/vue/chunks/basic.js +221 -0
  45. package/vue/chunks/bnf.js +27 -0
  46. package/vue/chunks/brainfuck.js +40 -0
  47. package/vue/chunks/c.js +265 -0
  48. package/vue/chunks/cal.js +136 -0
  49. package/vue/chunks/capnproto.js +86 -0
  50. package/vue/chunks/ceylon.js +125 -0
  51. package/vue/chunks/clean.js +54 -0
  52. package/vue/chunks/clojure-repl.js +17 -0
  53. package/vue/chunks/clojure.js +133 -0
  54. package/vue/chunks/cmake.js +23 -0
  55. package/vue/chunks/coffeescript.js +291 -0
  56. package/vue/chunks/coq.js +436 -0
  57. package/vue/chunks/cos.js +77 -0
  58. package/vue/chunks/cpp.js +492 -0
  59. package/vue/chunks/crmsh.js +80 -0
  60. package/vue/chunks/crystal.js +260 -0
  61. package/vue/chunks/csharp.js +376 -0
  62. package/vue/chunks/csp.js +52 -0
  63. package/vue/chunks/css.js +890 -0
  64. package/vue/chunks/d.js +184 -0
  65. package/vue/chunks/dart.js +226 -0
  66. package/vue/chunks/delphi.js +227 -0
  67. package/vue/chunks/diff.js +40 -0
  68. package/vue/chunks/django.js +43 -0
  69. package/vue/chunks/dns.js +66 -0
  70. package/vue/chunks/dockerfile.js +35 -0
  71. package/vue/chunks/dos.js +147 -0
  72. package/vue/chunks/dsconfig.js +55 -0
  73. package/vue/chunks/dts.js +119 -0
  74. package/vue/chunks/dust.js +33 -0
  75. package/vue/chunks/ebnf.js +40 -0
  76. package/vue/chunks/elixir.js +241 -0
  77. package/vue/chunks/elm.js +103 -0
  78. package/vue/chunks/erb.js +17 -0
  79. package/vue/chunks/erlang-repl.js +41 -0
  80. package/vue/chunks/erlang.js +236 -0
  81. package/vue/chunks/excel.js +562 -0
  82. package/vue/chunks/fix.js +30 -0
  83. package/vue/chunks/flix.js +60 -0
  84. package/vue/chunks/fortran.js +543 -0
  85. package/vue/chunks/fsharp.js +440 -0
  86. package/vue/chunks/gams.js +134 -0
  87. package/vue/chunks/gauss.js +167 -0
  88. package/vue/chunks/gcode.js +131 -0
  89. package/vue/chunks/gherkin.js +41 -0
  90. package/vue/chunks/glsl.js +25 -0
  91. package/vue/chunks/gml.js +3119 -0
  92. package/vue/chunks/go.js +140 -0
  93. package/vue/chunks/golo.js +72 -0
  94. package/vue/chunks/gradle.js +181 -0
  95. package/vue/chunks/graphql.js +68 -0
  96. package/vue/chunks/groovy.js +159 -0
  97. package/vue/chunks/haml.js +96 -0
  98. package/vue/chunks/handlebars.js +191 -0
  99. package/vue/chunks/haskell.js +149 -0
  100. package/vue/chunks/haxe.js +142 -0
  101. package/vue/chunks/hsp.js +45 -0
  102. package/vue/chunks/http.js +77 -0
  103. package/vue/chunks/hy.js +92 -0
  104. package/vue/chunks/inform7.js +45 -0
  105. package/vue/chunks/ini.js +94 -0
  106. package/vue/chunks/irpf90.js +52 -0
  107. package/vue/chunks/isbl.js +112 -0
  108. package/vue/chunks/java.js +237 -0
  109. package/vue/chunks/javascript.js +570 -0
  110. package/vue/chunks/jboss-cli.js +46 -0
  111. package/vue/chunks/json.js +45 -0
  112. package/vue/chunks/julia-repl.js +18 -0
  113. package/vue/chunks/julia.js +353 -0
  114. package/vue/chunks/kotlin.js +216 -0
  115. package/vue/chunks/lasso.js +127 -0
  116. package/vue/chunks/latex.js +206 -0
  117. package/vue/chunks/ldif.js +25 -0
  118. package/vue/chunks/leaf.js +72 -0
  119. package/vue/chunks/less.js +953 -0
  120. package/vue/chunks/lisp.js +119 -0
  121. package/vue/chunks/livecodeserver.js +86 -0
  122. package/vue/chunks/livescript.js +309 -0
  123. package/vue/chunks/llvm.js +77 -0
  124. package/vue/chunks/lsl.js +55 -0
  125. package/vue/chunks/lua.js +49 -0
  126. package/vue/chunks/makefile.js +62 -0
  127. package/vue/chunks/markdown.js +194 -0
  128. package/vue/chunks/mathematica.js +7317 -0
  129. package/vue/chunks/matlab.js +70 -0
  130. package/vue/chunks/maxima.js +38 -0
  131. package/vue/chunks/mel.js +24 -0
  132. package/vue/chunks/mercury.js +62 -0
  133. package/vue/chunks/mipsasm.js +53 -0
  134. package/vue/chunks/mizar.js +10 -0
  135. package/vue/chunks/mojolicious.js +27 -0
  136. package/vue/chunks/monkey.js +158 -0
  137. package/vue/chunks/moonscript.js +102 -0
  138. package/vue/chunks/n1ql.js +346 -0
  139. package/vue/chunks/nestedtext.js +66 -0
  140. package/vue/chunks/nginx.js +127 -0
  141. package/vue/chunks/nim.js +174 -0
  142. package/vue/chunks/nix.js +334 -0
  143. package/vue/chunks/node-repl.js +20 -0
  144. package/vue/chunks/nsis.js +515 -0
  145. package/vue/chunks/objectivec.js +235 -0
  146. package/vue/chunks/ocaml.js +52 -0
  147. package/vue/chunks/openscad.js +66 -0
  148. package/vue/chunks/oxygene.js +58 -0
  149. package/vue/chunks/parser3.js +40 -0
  150. package/vue/chunks/perl.js +454 -0
  151. package/vue/chunks/pf.js +30 -0
  152. package/vue/chunks/pgsql.js +196 -0
  153. package/vue/chunks/php-template.js +43 -0
  154. package/vue/chunks/php.js +527 -0
  155. package/vue/chunks/plaintext.js +10 -0
  156. package/vue/chunks/pony.js +60 -0
  157. package/vue/chunks/powershell.js +208 -0
  158. package/vue/chunks/processing.js +407 -0
  159. package/vue/chunks/profile.js +38 -0
  160. package/vue/chunks/prolog.js +62 -0
  161. package/vue/chunks/properties.js +45 -0
  162. package/vue/chunks/protobuf.js +63 -0
  163. package/vue/chunks/puppet.js +87 -0
  164. package/vue/chunks/purebasic.js +42 -0
  165. package/vue/chunks/python-repl.js +19 -0
  166. package/vue/chunks/python.js +357 -0
  167. package/vue/chunks/q.js +21 -0
  168. package/vue/chunks/qml.js +134 -0
  169. package/vue/chunks/r.js +145 -0
  170. package/vue/chunks/reasonml.js +134 -0
  171. package/vue/chunks/rib.js +16 -0
  172. package/vue/chunks/roboconf.js +54 -0
  173. package/vue/chunks/routeros.js +109 -0
  174. package/vue/chunks/rsl.js +138 -0
  175. package/vue/chunks/ruby.js +322 -0
  176. package/vue/chunks/ruleslanguage.js +26 -0
  177. package/vue/chunks/rust.js +296 -0
  178. package/vue/chunks/sas.js +533 -0
  179. package/vue/chunks/scala.js +173 -0
  180. package/vue/chunks/scheme.js +118 -0
  181. package/vue/chunks/scilab.js +45 -0
  182. package/vue/chunks/scss.js +900 -0
  183. package/vue/chunks/shell.js +18 -0
  184. package/vue/chunks/smali.js +113 -0
  185. package/vue/chunks/smalltalk.js +59 -0
  186. package/vue/chunks/sml.js +49 -0
  187. package/vue/chunks/sqf.js +2599 -0
  188. package/vue/chunks/sql.js +624 -0
  189. package/vue/chunks/stan.js +471 -0
  190. package/vue/chunks/stata.js +33 -0
  191. package/vue/chunks/step21.js +53 -0
  192. package/vue/chunks/stylus.js +925 -0
  193. package/vue/chunks/subunit.js +34 -0
  194. package/vue/chunks/swift.js +699 -0
  195. package/vue/chunks/taggerscript.js +37 -0
  196. package/vue/chunks/tap.js +30 -0
  197. package/vue/chunks/tcl.js +165 -0
  198. package/vue/chunks/thrift.js +65 -0
  199. package/vue/chunks/tp.js +155 -0
  200. package/vue/chunks/twig.js +232 -0
  201. package/vue/chunks/typescript.js +672 -0
  202. package/vue/chunks/vala.js +39 -0
  203. package/vue/chunks/vbnet.js +86 -0
  204. package/vue/chunks/vbscript-html.js +14 -0
  205. package/vue/chunks/vbscript.js +200 -0
  206. package/vue/chunks/verilog.js +534 -0
  207. package/vue/chunks/vhdl.js +190 -0
  208. package/vue/chunks/vim.js +54 -0
  209. package/vue/chunks/wasm.js +111 -0
  210. package/vue/chunks/wren.js +229 -0
  211. package/vue/chunks/x86asm.js +64 -0
  212. package/vue/chunks/xl.js +192 -0
  213. package/vue/chunks/xml.js +175 -0
  214. package/vue/chunks/xquery.js +303 -0
  215. package/vue/chunks/yaml.js +159 -0
  216. package/vue/chunks/zephir.js +74 -0
  217. package/vue/components.css +204 -170
  218. package/vue/editor/LoomaEditor.d.ts +7 -7
  219. package/vue/editor/code-language-catalog.d.ts +196 -0
  220. package/vue/editor/index.js +290 -20
@@ -3319,39 +3319,39 @@ ul[data-v-7603f4ce] {
3319
3319
  display: none;
3320
3320
  }
3321
3321
 
3322
- [data-component~="ui-editor-table-overlay"][data-v-58a8a2b8] {
3322
+ [data-component~="ui-editor-table-overlay"][data-v-914e1f1d] {
3323
3323
  display: block;
3324
3324
  width: 100%;
3325
3325
  height: 100%;
3326
3326
  overflow: visible;
3327
3327
  pointer-events: none;
3328
3328
  }
3329
- [data-component~="ui-editor-table-overlay"][data-v-58a8a2b8] {
3329
+ [data-component~="ui-editor-table-overlay"][data-v-914e1f1d] {
3330
3330
  position: relative;
3331
3331
  width: 100%;
3332
3332
  height: 100%;
3333
3333
  overflow: visible;
3334
3334
  pointer-events: none;
3335
3335
  }
3336
- .rows[data-v-58a8a2b8],
3337
- .cols[data-v-58a8a2b8] {
3336
+ .rows[data-v-914e1f1d],
3337
+ .cols[data-v-914e1f1d] {
3338
3338
  pointer-events: none;
3339
3339
  position: absolute;
3340
3340
  }
3341
- .rows[data-v-58a8a2b8] {
3341
+ .rows[data-v-914e1f1d] {
3342
3342
  inset: 0;
3343
3343
  width: 100%;
3344
3344
  }
3345
- .cols[data-v-58a8a2b8] {
3345
+ .cols[data-v-914e1f1d] {
3346
3346
  inset: 0;
3347
3347
  height: 100%;
3348
3348
  }
3349
- .control[data-v-58a8a2b8] {
3349
+ .control[data-v-914e1f1d] {
3350
3350
  position: absolute;
3351
3351
  z-index: 1;
3352
3352
  pointer-events: none;
3353
3353
  }
3354
- .handle[data-v-58a8a2b8] {
3354
+ .handle[data-v-914e1f1d] {
3355
3355
  position: absolute;
3356
3356
  display: inline-flex;
3357
3357
  align-items: center;
@@ -3378,65 +3378,65 @@ ul[data-v-7603f4ce] {
3378
3378
  pointer-events: auto;
3379
3379
  cursor: pointer;
3380
3380
  }
3381
- .handle[data-v-58a8a2b8] {
3381
+ .handle[data-v-914e1f1d] {
3382
3382
  --_ui-default-icon-size: 14px;
3383
3383
  --_ui-default-icon-stroke-width: 2;
3384
3384
  }
3385
- .handle[data-ui-proximity="near"][data-v-58a8a2b8],
3386
- .control.active .handle[data-v-58a8a2b8],
3387
- .handle[data-v-58a8a2b8]:focus-visible {
3385
+ .handle[data-ui-proximity="near"][data-v-914e1f1d],
3386
+ .control.active .handle[data-v-914e1f1d],
3387
+ .handle[data-v-914e1f1d]:focus-visible {
3388
3388
  opacity: 1;
3389
3389
  scale: 1;
3390
3390
  }
3391
- .control.active .handle[data-v-58a8a2b8],
3392
- .handle[data-v-58a8a2b8]:focus-visible {
3391
+ .control.active .handle[data-v-914e1f1d],
3392
+ .handle[data-v-914e1f1d]:focus-visible {
3393
3393
  border-color: var(--ui-affordance-direct-color, var(--ui-accent-solid));
3394
3394
  background: var(--ui-affordance-direct-color, var(--ui-accent-solid));
3395
3395
  color: var(--ui-text-on-accent);
3396
3396
  box-shadow: var(--ui-shadow-sm, 0 1px 3px rgb(0 0 0 / 0.1));
3397
3397
  }
3398
- .handle[data-v-58a8a2b8]:focus-visible,
3399
- .selector[data-v-58a8a2b8]:focus-visible,
3400
- .cell-menu[data-v-58a8a2b8]:focus-visible {
3398
+ .handle[data-v-914e1f1d]:focus-visible,
3399
+ .selector[data-v-914e1f1d]:focus-visible,
3400
+ .cell-menu[data-v-914e1f1d]:focus-visible {
3401
3401
  outline: 2px solid var(--ui-focus-ring);
3402
3402
  outline-offset: 2px;
3403
3403
  }
3404
- .control.row[data-v-58a8a2b8] {
3404
+ .control.row[data-v-914e1f1d] {
3405
3405
  left: 0;
3406
3406
  width: 100%;
3407
3407
  height: 0;
3408
3408
  }
3409
- .control.row .handle[data-v-58a8a2b8] {
3409
+ .control.row .handle[data-v-914e1f1d] {
3410
3410
  top: -12px;
3411
3411
  left: -30px;
3412
3412
  }
3413
- .control.col[data-v-58a8a2b8] {
3413
+ .control.col[data-v-914e1f1d] {
3414
3414
  top: 0;
3415
3415
  width: 0;
3416
3416
  height: 100%;
3417
3417
  }
3418
- .control.col .handle[data-v-58a8a2b8] {
3418
+ .control.col .handle[data-v-914e1f1d] {
3419
3419
  top: -30px;
3420
3420
  left: -12px;
3421
3421
  }
3422
- .line[data-v-58a8a2b8] {
3422
+ .line[data-v-914e1f1d] {
3423
3423
  position: absolute;
3424
3424
  background: var(--ui-affordance-direct-color, var(--ui-accent-solid));
3425
3425
  opacity: 0;
3426
3426
  transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
3427
3427
  }
3428
- .control.row .line[data-v-58a8a2b8] {
3428
+ .control.row .line[data-v-914e1f1d] {
3429
3429
  inset: -1px 0 auto;
3430
3430
  height: 2px;
3431
3431
  }
3432
- .control.col .line[data-v-58a8a2b8] {
3432
+ .control.col .line[data-v-914e1f1d] {
3433
3433
  inset: 0 auto 0 -1px;
3434
3434
  width: 2px;
3435
3435
  }
3436
- .control.active .line[data-v-58a8a2b8] {
3436
+ .control.active .line[data-v-914e1f1d] {
3437
3437
  opacity: 0.8;
3438
3438
  }
3439
- .guide[data-v-58a8a2b8] {
3439
+ .guide[data-v-914e1f1d] {
3440
3440
  position: absolute;
3441
3441
  width: var(--ui-affordance-guide-size);
3442
3442
  height: var(--ui-affordance-guide-size);
@@ -3445,19 +3445,19 @@ ul[data-v-7603f4ce] {
3445
3445
  opacity: calc(var(--ui-affordance-guide-opacity) * var(--ui-affordance-scope-guide, 1));
3446
3446
  transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
3447
3447
  }
3448
- .control.row .guide[data-v-58a8a2b8] {
3448
+ .control.row .guide[data-v-914e1f1d] {
3449
3449
  left: -10px;
3450
3450
  top: -2px;
3451
3451
  }
3452
- .control.col .guide[data-v-58a8a2b8] {
3452
+ .control.col .guide[data-v-914e1f1d] {
3453
3453
  left: -2px;
3454
3454
  top: -10px;
3455
3455
  }
3456
- .control:has(.handle[data-ui-proximity="near"]) .guide[data-v-58a8a2b8],
3457
- .control.active .guide[data-v-58a8a2b8] {
3456
+ .control:has(.handle[data-ui-proximity="near"]) .guide[data-v-914e1f1d],
3457
+ .control.active .guide[data-v-914e1f1d] {
3458
3458
  opacity: 0;
3459
3459
  }
3460
- .tooltip[data-v-58a8a2b8] {
3460
+ .tooltip[data-v-914e1f1d] {
3461
3461
  position: absolute;
3462
3462
  z-index: 2;
3463
3463
  top: calc(100% + 6px);
@@ -3476,18 +3476,18 @@ ul[data-v-7603f4ce] {
3476
3476
  transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
3477
3477
  pointer-events: none;
3478
3478
  }
3479
- .control.row .tooltip[data-v-58a8a2b8] {
3479
+ .control.row .tooltip[data-v-914e1f1d] {
3480
3480
  top: 50%;
3481
3481
  left: auto;
3482
3482
  right: calc(100% + 8px);
3483
3483
  transform: translateY(-50%);
3484
3484
  }
3485
- .control.active .tooltip[data-v-58a8a2b8],
3486
- .handle:focus-visible .tooltip[data-v-58a8a2b8] {
3485
+ .control.active .tooltip[data-v-914e1f1d],
3486
+ .handle:focus-visible .tooltip[data-v-914e1f1d] {
3487
3487
  opacity: 1;
3488
3488
  }
3489
- .selector[data-v-58a8a2b8],
3490
- .cell-menu[data-v-58a8a2b8] {
3489
+ .selector[data-v-914e1f1d],
3490
+ .cell-menu[data-v-914e1f1d] {
3491
3491
  position: absolute;
3492
3492
  z-index: 2;
3493
3493
  display: inline-flex;
@@ -3506,16 +3506,21 @@ ul[data-v-7603f4ce] {
3506
3506
  border-color var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
3507
3507
  box-shadow var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
3508
3508
  }
3509
- .selector[data-v-58a8a2b8]:hover,
3510
- .cell-menu[data-v-58a8a2b8]:hover {
3509
+ .selector[data-v-914e1f1d]:hover,
3510
+ .cell-menu[data-v-914e1f1d]:hover {
3511
3511
  background: var(--ui-surface-muted);
3512
3512
  color: var(--ui-text-primary);
3513
3513
  box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
3514
3514
  }
3515
- .selector[data-v-58a8a2b8] {
3515
+ .selector[data-v-914e1f1d] {
3516
3516
  border-radius: var(--ui-radius-round);
3517
+ touch-action: none;
3518
+ cursor: grab;
3519
+ }
3520
+ .selector[data-v-914e1f1d]:active {
3521
+ cursor: grabbing;
3517
3522
  }
3518
- .selector[data-v-58a8a2b8]::before {
3523
+ .selector[data-v-914e1f1d]::before {
3519
3524
  content: "";
3520
3525
  position: absolute;
3521
3526
  inset: 50% auto auto 50%;
@@ -3526,7 +3531,7 @@ ul[data-v-7603f4ce] {
3526
3531
  transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
3527
3532
  pointer-events: none;
3528
3533
  }
3529
- .selector .glyph[data-v-58a8a2b8] {
3534
+ .selector .glyph[data-v-914e1f1d] {
3530
3535
  display: block;
3531
3536
  width: 14px;
3532
3537
  height: 14px;
@@ -3538,59 +3543,79 @@ ul[data-v-7603f4ce] {
3538
3543
  opacity var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease),
3539
3544
  transform var(--ui-affordance-motion, var(--ui-motion-fast)) var(--ui-motion-ease);
3540
3545
  }
3541
- .selector[data-v-58a8a2b8]:hover::before,
3542
- .selector[data-v-58a8a2b8]:focus-visible::before {
3546
+ .selector[data-v-914e1f1d]:hover::before,
3547
+ .selector[data-v-914e1f1d]:focus-visible::before {
3543
3548
  opacity: 0;
3544
3549
  }
3545
- .selector:hover .glyph[data-v-58a8a2b8],
3546
- .selector:focus-visible .glyph[data-v-58a8a2b8] {
3550
+ .selector:hover .glyph[data-v-914e1f1d],
3551
+ .selector:focus-visible .glyph[data-v-914e1f1d] {
3547
3552
  opacity: 1;
3548
3553
  transform: scale(1);
3549
3554
  }
3550
- .selector.row[data-v-58a8a2b8] {
3555
+ .selector.row[data-v-914e1f1d] {
3551
3556
  left: -9px;
3552
3557
  width: 18px;
3553
3558
  height: 32px;
3554
3559
  transform: translateY(-50%);
3555
3560
  }
3556
- .selector.row[data-v-58a8a2b8]::before {
3561
+ .selector.row[data-v-914e1f1d]::before {
3557
3562
  width: 2px;
3558
3563
  height: 16px;
3559
3564
  }
3560
- .selector.column[data-v-58a8a2b8] {
3565
+ .selector.column[data-v-914e1f1d] {
3561
3566
  top: -9px;
3562
3567
  width: 32px;
3563
3568
  height: 18px;
3564
3569
  transform: translateX(-50%);
3565
3570
  }
3566
- .selector.column[data-v-58a8a2b8]::before {
3571
+ .selector.column[data-v-914e1f1d]::before {
3567
3572
  width: 16px;
3568
3573
  height: 2px;
3569
3574
  }
3570
3575
  @media (hover: none), (pointer: coarse) {
3571
- .selector[data-v-58a8a2b8]::before {
3576
+ .selector[data-v-914e1f1d]::before {
3572
3577
  opacity: 0;
3573
3578
  }
3574
- .selector .glyph[data-v-58a8a2b8] {
3579
+ .selector .glyph[data-v-914e1f1d] {
3575
3580
  opacity: 1;
3576
3581
  transform: none;
3577
3582
  }
3578
3583
  }
3579
- .cell-menu[data-v-58a8a2b8] {
3584
+ .cell-menu[data-v-914e1f1d] {
3580
3585
  width: 24px;
3581
3586
  height: 24px;
3582
3587
  border-radius: var(--ui-radius-sm);
3583
3588
  background: color-mix(in srgb, var(--ui-surface-muted) 78%, transparent);
3584
3589
  }
3585
- .cell-menu[data-v-58a8a2b8] {
3590
+ .cell-menu[data-v-914e1f1d] {
3586
3591
  --_ui-default-icon-size: 15px;
3587
3592
  --_ui-default-icon-stroke-width: 2;
3588
3593
  }
3589
- [data-component~="ui-editor-table-overlay"][hidden][data-v-58a8a2b8] {
3594
+ .drop-indicator[data-v-914e1f1d] {
3595
+ position: absolute;
3596
+ z-index: 3;
3597
+ background: var(--ui-accent-solid);
3598
+ box-shadow: 0 0 0 2px var(--ui-surface);
3599
+ pointer-events: none;
3600
+ }
3601
+ .drop-indicator.row[data-v-914e1f1d] {
3602
+ left: 0;
3603
+ width: 100%;
3604
+ height: 2px;
3605
+ }
3606
+ .drop-indicator.column[data-v-914e1f1d] {
3607
+ top: 0;
3608
+ width: 2px;
3609
+ height: 100%;
3610
+ }
3611
+ .drop-indicator[hidden][data-v-914e1f1d] {
3612
+ display: none;
3613
+ }
3614
+ [data-component~="ui-editor-table-overlay"][hidden][data-v-914e1f1d] {
3590
3615
  display: none;
3591
3616
  }
3592
3617
 
3593
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"][data-v-26c35c0d] {
3618
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"][data-v-3c04b848] {
3594
3619
  min-width: max-content;
3595
3620
  min-height: 100%;
3596
3621
  padding: 0;
@@ -3600,15 +3625,15 @@ ul[data-v-7603f4ce] {
3600
3625
  box-shadow: none;
3601
3626
  backdrop-filter: none;
3602
3627
  }
3603
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button[data-v-26c35c0d] {
3628
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button[data-v-3c04b848] {
3604
3629
  min-height: 44px;
3605
3630
  background: transparent;
3606
3631
  }
3607
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.active[data-v-26c35c0d],
3608
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.selected[data-v-26c35c0d] {
3632
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.active[data-v-3c04b848],
3633
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] button.selected[data-v-3c04b848] {
3609
3634
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
3610
3635
  }
3611
- .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] .menu[data-v-26c35c0d] {
3636
+ .looma-editor__mobile-toolbar-shell [data-component~="ui-editor-table-toolbar"] .menu[data-v-3c04b848] {
3612
3637
  top: auto;
3613
3638
  right: 0;
3614
3639
  bottom: calc(100% + var(--ui-space-2));
@@ -3616,7 +3641,7 @@ ul[data-v-7603f4ce] {
3616
3641
  overflow-y: auto;
3617
3642
  overscroll-behavior: contain;
3618
3643
  }
3619
- [data-component~="ui-editor-table-toolbar"][data-v-26c35c0d] {
3644
+ [data-component~="ui-editor-table-toolbar"][data-v-3c04b848] {
3620
3645
  display: inline-flex;
3621
3646
  align-items: center;
3622
3647
  gap: var(--ui-space-1);
@@ -3627,21 +3652,21 @@ ul[data-v-7603f4ce] {
3627
3652
  box-shadow: var(--ui-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1));
3628
3653
  backdrop-filter: blur(10px);
3629
3654
  }
3630
- .group[data-v-26c35c0d] {
3655
+ .group[data-v-3c04b848] {
3631
3656
  display: inline-flex;
3632
3657
  align-items: center;
3633
3658
  gap: 2px;
3634
3659
  overflow: hidden;
3635
3660
  }
3636
- .sep[data-v-26c35c0d] {
3661
+ .sep[data-v-3c04b848] {
3637
3662
  width: 1px;
3638
3663
  align-self: stretch;
3639
3664
  background: var(--ui-border-divider);
3640
3665
  }
3641
- .overflow[data-v-26c35c0d] {
3666
+ .overflow[data-v-3c04b848] {
3642
3667
  position: relative;
3643
3668
  }
3644
- [data-component~="ui-editor-table-toolbar"] button[data-v-26c35c0d] {
3669
+ [data-component~="ui-editor-table-toolbar"] button[data-v-3c04b848] {
3645
3670
  display: inline-flex;
3646
3671
  align-items: center;
3647
3672
  justify-content: center;
@@ -3658,43 +3683,45 @@ ul[data-v-7603f4ce] {
3658
3683
  padding: var(--ui-space-2) var(--ui-space-2);
3659
3684
  white-space: nowrap;
3660
3685
  }
3661
- [data-component~="ui-editor-table-toolbar"] button[data-v-26c35c0d]:hover {
3686
+ [data-component~="ui-editor-table-toolbar"] button[data-v-3c04b848]:hover {
3662
3687
  background: var(--ui-surface-hover);
3663
3688
  }
3664
- [data-component~="ui-editor-table-toolbar"] button.active[data-v-26c35c0d] {
3689
+ [data-component~="ui-editor-table-toolbar"] button.active[data-v-3c04b848] {
3665
3690
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
3666
3691
  color: var(--ui-accent-active);
3667
3692
  }
3668
- .group button[data-v-26c35c0d] {
3693
+ .group button[data-v-3c04b848] {
3669
3694
  border-radius: var(--ui-radius-sm);
3670
3695
  }
3671
- .group button + button[data-v-26c35c0d] {
3696
+ .group button + button[data-v-3c04b848] {
3672
3697
  border-left: 0;
3673
3698
  }
3674
- [data-component~="ui-editor-table-toolbar"] .more[data-v-26c35c0d] {
3699
+ [data-component~="ui-editor-table-toolbar"] .more[data-v-3c04b848] {
3675
3700
  border: 0;
3676
3701
  border-radius: var(--ui-radius-sm);
3677
3702
  }
3678
- [data-component~="ui-editor-table-toolbar"] button.danger[data-v-26c35c0d] {
3703
+ [data-component~="ui-editor-table-toolbar"] button.danger[data-v-3c04b848] {
3679
3704
  color: var(--ui-danger);
3680
3705
  }
3681
- [data-component~="ui-editor-table-toolbar"][data-v-26c35c0d] {
3706
+ [data-component~="ui-editor-table-toolbar"][data-v-3c04b848] {
3682
3707
  --_ui-default-icon-size: var(--ui-editor-toolbar-icon-size, 1rem);
3683
3708
  --_ui-default-icon-stroke-width: var(--ui-editor-toolbar-icon-stroke-width, 1.75);
3684
3709
  }
3685
- .chevron[data-v-26c35c0d] {
3710
+ .chevron[data-v-3c04b848] {
3686
3711
  display: inline-flex;
3687
3712
  --_ui-default-icon-size: 0.875rem;
3688
3713
  }
3689
- [data-component~="ui-editor-table-toolbar"] .icon-button[data-v-26c35c0d] {
3714
+ [data-component~="ui-editor-table-toolbar"] .icon-button[data-v-3c04b848] {
3690
3715
  width: 32px;
3691
3716
  padding-inline: 0;
3692
3717
  }
3693
- .menu[data-v-26c35c0d] {
3718
+ .menu[data-v-3c04b848] {
3719
+ box-sizing: border-box;
3694
3720
  position: absolute;
3695
3721
  top: calc(100% + var(--ui-space-2));
3696
3722
  right: 0;
3697
3723
  min-width: 12rem;
3724
+ max-width: min(17rem, calc(100vw - 24px));
3698
3725
  padding: var(--ui-space-1);
3699
3726
  background: var(--ui-surface);
3700
3727
  border: 1px solid var(--ui-border-strong);
@@ -3704,13 +3731,16 @@ ul[data-v-7603f4ce] {
3704
3731
  flex-direction: column;
3705
3732
  gap: 2px;
3706
3733
  z-index: 2;
3734
+ overflow-y: auto;
3735
+ overscroll-behavior: contain;
3736
+ scrollbar-width: thin;
3707
3737
  }
3708
- .menu-section + .menu-section[data-v-26c35c0d] {
3738
+ .menu-section + .menu-section[data-v-3c04b848] {
3709
3739
  margin-top: var(--ui-space-1);
3710
3740
  padding-top: var(--ui-space-1);
3711
3741
  border-top: 1px solid var(--ui-border-divider);
3712
3742
  }
3713
- .menu-heading[data-v-26c35c0d] {
3743
+ .menu-heading[data-v-3c04b848] {
3714
3744
  padding: var(--ui-space-1) var(--ui-space-2);
3715
3745
  font-size: var(--ui-font-size-2xs);
3716
3746
  font-weight: 700;
@@ -3718,38 +3748,38 @@ ul[data-v-7603f4ce] {
3718
3748
  text-transform: uppercase;
3719
3749
  color: var(--ui-text-muted);
3720
3750
  }
3721
- .menu button[data-v-26c35c0d] {
3751
+ .menu button[data-v-3c04b848] {
3722
3752
  display: flex;
3723
3753
  justify-content: flex-start;
3724
3754
  width: 100%;
3725
3755
  text-align: left;
3726
3756
  }
3727
- .swatches[data-v-26c35c0d] {
3757
+ .swatches[data-v-3c04b848] {
3728
3758
  display: grid;
3729
- grid-template-columns: repeat(3, minmax(0, 1fr));
3759
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3730
3760
  gap: 2px;
3731
3761
  }
3732
- [data-component~="ui-editor-table-toolbar"] .swatch-button[data-v-26c35c0d] {
3762
+ [data-component~="ui-editor-table-toolbar"] .swatch-button[data-v-3c04b848] {
3733
3763
  gap: var(--ui-space-1);
3734
3764
  justify-content: flex-start;
3735
3765
  }
3736
- .swatch[data-v-26c35c0d] {
3766
+ .swatch[data-v-3c04b848] {
3737
3767
  width: 14px;
3738
3768
  height: 14px;
3739
3769
  flex: 0 0 14px;
3740
3770
  border: 1px solid color-mix(in srgb, var(--ui-border) 80%, #000);
3741
- border-radius: 3px;
3771
+ border-radius: var(--ui-radius-round);
3742
3772
  background: var(--_swatch);
3743
3773
  }
3744
- .swatch.default[data-v-26c35c0d] {
3774
+ .swatch.default[data-v-3c04b848] {
3745
3775
  background:
3746
3776
  linear-gradient(135deg, transparent 44%, var(--ui-danger) 46% 54%, transparent 56%),
3747
3777
  var(--ui-surface);
3748
3778
  }
3749
- .swatch-button.selected[data-v-26c35c0d] {
3779
+ .swatch-button.selected[data-v-3c04b848] {
3750
3780
  background: var(--ui-accent-soft, var(--ui-accent-subtle));
3751
3781
  }
3752
- [data-component~="ui-editor-table-toolbar"][hidden][data-v-26c35c0d] {
3782
+ [data-component~="ui-editor-table-toolbar"][hidden][data-v-3c04b848] {
3753
3783
  display: none;
3754
3784
  }
3755
3785
 
@@ -7962,7 +7992,7 @@ to {
7962
7992
  syntax: "*";
7963
7993
  inherits: false;
7964
7994
  }
7965
- [data-component~="ui-tree-item"][data-v-78d948f0] {
7995
+ [data-component~="ui-tree-item"][data-v-f9c58f7a] {
7966
7996
  /* Hooks do not inherit, so the parts below read them from the root. The tree's density
7967
7997
  sets the defaults, in --_ui-default-*. */
7968
7998
  --_ui-tree-item-min-block-size: var(
@@ -7984,7 +8014,7 @@ to {
7984
8014
  min-inline-size: 0;
7985
8015
  margin-inline-start: calc(var(--ui-tree-item-depth, 0) * var(--_ui-tree-indent, 16px));
7986
8016
  }
7987
- .row[data-v-78d948f0] {
8017
+ .row[data-v-f9c58f7a] {
7988
8018
  position: relative;
7989
8019
  display: grid;
7990
8020
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
@@ -8001,39 +8031,39 @@ to {
8001
8031
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
8002
8032
  min-block-size var(--ui-motion-base) var(--ui-motion-ease);
8003
8033
  }
8004
- .row[data-v-78d948f0]:hover,
8005
- [data-component~="ui-tree-item"][data-ui-tree-item-state~="selected"] .row[data-v-78d948f0],
8006
- .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 {
8007
8037
  color: var(--ui-text-primary);
8008
8038
  background: var(--ui-surface-muted);
8009
8039
  }
8010
- [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] {
8011
8041
  color: var(--ui-disabled-text);
8012
8042
  background: var(--ui-disabled-surface);
8013
8043
  }
8014
- [data-component~="ui-tree-item"][data-dragging] .row[data-v-78d948f0] {
8044
+ [data-component~="ui-tree-item"][data-dragging] .row[data-v-f9c58f7a] {
8015
8045
  opacity: 0.42;
8016
8046
  }
8017
- [data-component~="ui-tree-item"][data-v-78d948f0]:focus {
8047
+ [data-component~="ui-tree-item"][data-v-f9c58f7a]:focus {
8018
8048
  outline: none;
8019
8049
  }
8020
- [data-component~="ui-tree-item"]:focus-visible .row[data-v-78d948f0] {
8050
+ [data-component~="ui-tree-item"]:focus-visible .row[data-v-f9c58f7a] {
8021
8051
  box-shadow: 0 0 0 2px var(--ui-focus-ring);
8022
8052
  }
8023
8053
 
8024
8054
  /* Child combinators: drop feedback belongs to this item's own row, not the rows nested in it. */
8025
- [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] {
8026
8056
  background: var(--ui-accent-subtle);
8027
8057
  box-shadow: inset 0 0 0 1px var(--_ui-tree-drop-color, var(--ui-accent-solid));
8028
8058
  }
8029
- .disclosure[data-v-78d948f0],
8030
- .disclosure-spacer[data-v-78d948f0] {
8059
+ .disclosure[data-v-f9c58f7a],
8060
+ .disclosure-spacer[data-v-f9c58f7a] {
8031
8061
  grid-column: 1;
8032
8062
  grid-row: 1;
8033
8063
  inline-size: var(--_tree-disclosure-size);
8034
8064
  block-size: 28px;
8035
8065
  }
8036
- .disclosure[data-v-78d948f0] {
8066
+ .disclosure[data-v-f9c58f7a] {
8037
8067
  display: grid;
8038
8068
  /* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
8039
8069
  place-items: center start;
@@ -8044,10 +8074,10 @@ to {
8044
8074
  border-radius: var(--ui-radius-sm);
8045
8075
  cursor: pointer;
8046
8076
  }
8047
- .disclosure[hidden][data-v-78d948f0] {
8077
+ .disclosure[hidden][data-v-f9c58f7a] {
8048
8078
  display: none;
8049
8079
  }
8050
- .selection-hit[data-v-78d948f0] {
8080
+ .selection-hit[data-v-f9c58f7a] {
8051
8081
  display: none;
8052
8082
  grid-column: 2;
8053
8083
  grid-row: 1;
@@ -8056,29 +8086,29 @@ to {
8056
8086
  block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
8057
8087
  cursor: pointer;
8058
8088
  }
8059
- .selection-checkbox[data-v-78d948f0] {
8089
+ .selection-checkbox[data-v-f9c58f7a] {
8060
8090
  inline-size: 1rem;
8061
8091
  block-size: 1rem;
8062
8092
  margin: 0;
8063
8093
  accent-color: var(--ui-accent-solid);
8064
8094
  }
8065
- [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] {
8066
8096
  grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr);
8067
8097
  }
8068
- [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] {
8069
8099
  display: grid;
8070
8100
  }
8071
- [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] {
8072
8102
  grid-column: 3;
8073
8103
  }
8074
- [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] {
8075
8105
  grid-column: 4;
8076
8106
  }
8077
- .disclosure[data-v-78d948f0]:hover {
8107
+ .disclosure[data-v-f9c58f7a]:hover {
8078
8108
  color: var(--ui-text-primary);
8079
8109
  background: var(--ui-surface-elevated);
8080
8110
  }
8081
- .disclosure-icon[data-v-78d948f0] {
8111
+ .disclosure-icon[data-v-f9c58f7a] {
8082
8112
  display: grid;
8083
8113
  place-items: center;
8084
8114
  inline-size: 12px;
@@ -8086,7 +8116,7 @@ to {
8086
8116
  transform: rotate(-90deg);
8087
8117
  transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
8088
8118
  }
8089
- .disclosure-icon[data-v-78d948f0]::before {
8119
+ .disclosure-icon[data-v-f9c58f7a]::before {
8090
8120
  display: block;
8091
8121
  inline-size: 0.375rem;
8092
8122
  block-size: 0.375rem;
@@ -8096,19 +8126,19 @@ to {
8096
8126
  /* A chevron's ink sits below its box centre; lift it so it centres optically (in either rotation). */
8097
8127
  transform: translateY(-20%) rotate(45deg);
8098
8128
  }
8099
- [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] {
8100
8130
  transform: rotate(0deg);
8101
8131
  }
8102
8132
 
8103
8133
  /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
8104
- .drag-handle svg[data-v-78d948f0] {
8134
+ .drag-handle svg[data-v-f9c58f7a] {
8105
8135
  display: block;
8106
8136
  inline-size: 100%;
8107
8137
  block-size: 100%;
8108
8138
  }
8109
8139
 
8110
8140
  /* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
8111
- .leading[data-v-78d948f0] {
8141
+ .leading[data-v-f9c58f7a] {
8112
8142
  display: inline-grid;
8113
8143
  place-items: center;
8114
8144
  grid-column: 2;
@@ -8121,12 +8151,12 @@ to {
8121
8151
  position: relative;
8122
8152
  z-index: 1;
8123
8153
  }
8124
- .leading[data-v-78d948f0]:empty {
8154
+ .leading[data-v-f9c58f7a]:empty {
8125
8155
  display: none;
8126
8156
  }
8127
8157
 
8128
8158
  /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
8129
- svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8159
+ svg[data-v-f9c58f7a-s],img[data-v-f9c58f7a-s] {
8130
8160
  display: block;
8131
8161
  inline-size: 1em;
8132
8162
  block-size: 1em;
@@ -8135,7 +8165,7 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8135
8165
 
8136
8166
  /* The label spans the row's height and centres its content, so slotted content (a link) can
8137
8167
  stretch to fill the row as its own hit area; the padding tokens remove the inset. */
8138
- .label[data-v-78d948f0] {
8168
+ .label[data-v-f9c58f7a] {
8139
8169
  grid-column: 3;
8140
8170
  grid-row: 1;
8141
8171
  align-self: stretch;
@@ -8148,12 +8178,12 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8148
8178
  var(--_ui-tree-item-label-padding-inline, var(--ui-space-2));
8149
8179
  /* The length of the fade before the controls. The label's one flex child lays out no gap; this
8150
8180
  is where the controller reads the length in pixels to stop a sliding name before the fade. */
8151
- column-gap: var(--ui-space-3);
8181
+ column-gap: var(--ui-space-1);
8152
8182
  }
8153
8183
 
8154
8184
  /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
8155
8185
  its own text and reading as overflow. */
8156
- .label-text[data-v-78d948f0] {
8186
+ .label-text[data-v-f9c58f7a] {
8157
8187
  display: flex;
8158
8188
  align-items: center;
8159
8189
  /* Stretches, so slotted content can still be the row's full-height hit area. */
@@ -8163,27 +8193,27 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8163
8193
  inline-size: 100%;
8164
8194
  white-space: nowrap;
8165
8195
  }
8166
- .label-text > [data-v-78d948f0-s] {
8196
+ .label-text > [data-v-f9c58f7a-s] {
8167
8197
  flex: 1 1 auto;
8168
8198
  min-inline-size: 0;
8169
8199
  }
8170
8200
 
8171
8201
  /* The controls sit over the label's end, so the text fades out where they begin. The fade is
8172
8202
  the truncation mark while it shows: an ellipsis under it would read as a second one. */
8173
- .row:hover > .label[data-v-78d948f0],
8174
- .row:focus-within > .label[data-v-78d948f0] {
8203
+ .row:hover > .label[data-v-f9c58f7a],
8204
+ .row:focus-within > .label[data-v-f9c58f7a] {
8175
8205
  text-overflow: clip;
8176
8206
  mask-image: linear-gradient(
8177
8207
  to right,
8178
- #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)),
8179
8209
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
8180
8210
  );
8181
8211
  }
8182
- .row:hover > .label[data-v-78d948f0]:dir(rtl),
8183
- .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) {
8184
8214
  mask-image: linear-gradient(
8185
8215
  to left,
8186
- #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)),
8187
8217
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
8188
8218
  );
8189
8219
  }
@@ -8192,10 +8222,10 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8192
8222
  there, and starts again. Only when it actually overflows — the controller measures by how
8193
8223
  much — after the controls have taken their place over its end — and hands over the distance
8194
8224
  and a duration from it, so every name moves at the same speed. */
8195
- .row[data-ui-marquee] > .label > .label-text[data-v-78d948f0] {
8225
+ .row[data-ui-marquee] > .label > .label-text[data-v-f9c58f7a] {
8196
8226
  /* Once per pass: the controller restarts it after a rest at the end, so the name holds still
8197
8227
  long enough to read rather than sliding back and forth. */
8198
- 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;
8199
8229
  will-change: transform;
8200
8230
  }
8201
8231
 
@@ -8203,7 +8233,7 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8203
8233
  slides, the label reaches back under the icon (the controller measures how far) with its text
8204
8234
  where it was, and fades out across the gap before the icon, fully gone where the icon begins
8205
8235
  to cover it: the name slips under the icon rather than stopping at a hard edge beside it. */
8206
- .row[data-ui-marquee] > .label[data-v-78d948f0] {
8236
+ .row[data-ui-marquee] > .label[data-v-f9c58f7a] {
8207
8237
  margin-inline-start: calc(-1 * var(--_marquee-lead, 0px));
8208
8238
  padding-inline-start: calc(
8209
8239
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
@@ -8214,22 +8244,22 @@ svg[data-v-78d948f0-s],img[data-v-78d948f0-s] {
8214
8244
  #000 calc(
8215
8245
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
8216
8246
  ),
8217
- #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)),
8218
8248
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
8219
8249
  );
8220
8250
  }
8221
- .row[data-ui-marquee] > .label[data-v-78d948f0]:dir(rtl) {
8251
+ .row[data-ui-marquee] > .label[data-v-f9c58f7a]:dir(rtl) {
8222
8252
  mask-image: linear-gradient(
8223
8253
  to left,
8224
8254
  transparent var(--_marquee-icon-width, 0px),
8225
8255
  #000 calc(
8226
8256
  var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))
8227
8257
  ),
8228
- #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)),
8229
8259
  transparent calc(100% - var(--_tree-actions-width, 1.75rem))
8230
8260
  );
8231
8261
  }
8232
- @keyframes ui-tree-item-marquee-78d948f0 {
8262
+ @keyframes ui-tree-item-marquee-f9c58f7a {
8233
8263
  from {
8234
8264
  transform: translateX(0);
8235
8265
  }
@@ -8240,15 +8270,15 @@ to {
8240
8270
 
8241
8271
  /* Reduced motion keeps the fade, which already says the name continues. */
8242
8272
  @media (prefers-reduced-motion: reduce) {
8243
- .row[data-ui-marquee] > .label > .label-text[data-v-78d948f0] {
8273
+ .row[data-ui-marquee] > .label > .label-text[data-v-f9c58f7a] {
8244
8274
  animation: none;
8245
8275
  }
8246
8276
  }
8247
- .row:hover > .label > [data-v-78d948f0-s],
8248
- .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] {
8249
8279
  text-overflow: clip;
8250
8280
  }
8251
- .actions[data-v-78d948f0] {
8281
+ .actions[data-v-f9c58f7a] {
8252
8282
  position: absolute;
8253
8283
  z-index: 1;
8254
8284
  inset-block: 0;
@@ -8260,18 +8290,18 @@ to {
8260
8290
  pointer-events: none;
8261
8291
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
8262
8292
  }
8263
- .row:hover > .actions[data-v-78d948f0],
8264
- .row:focus-within > .actions[data-v-78d948f0] {
8293
+ .row:hover > .actions[data-v-f9c58f7a],
8294
+ .row:focus-within > .actions[data-v-f9c58f7a] {
8265
8295
  opacity: 1;
8266
8296
  pointer-events: auto;
8267
8297
  }
8268
8298
 
8269
8299
  /* Without hover there is no reveal, so the controls keep their own column. */
8270
8300
  @media (hover: none) {
8271
- .row[data-v-78d948f0] {
8301
+ .row[data-v-f9c58f7a] {
8272
8302
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr) auto;
8273
8303
  }
8274
- .actions[data-v-78d948f0] {
8304
+ .actions[data-v-f9c58f7a] {
8275
8305
  position: static;
8276
8306
  grid-column: 4;
8277
8307
  grid-row: 1;
@@ -8286,7 +8316,7 @@ to {
8286
8316
  empty column, right before the icon; a branch's disclosure is there, so its handle sits just
8287
8317
  outside the row. It is bare until pointed at: a resting surface behind it read as a faint
8288
8318
  patch rather than as a control. */
8289
- .drag-handle[data-v-78d948f0] {
8319
+ .drag-handle[data-v-f9c58f7a] {
8290
8320
  position: absolute;
8291
8321
  z-index: 2;
8292
8322
  inset-block-start: 50%;
@@ -8307,24 +8337,24 @@ to {
8307
8337
  transform: translateY(-50%);
8308
8338
  transition: opacity var(--ui-motion-fast) var(--ui-motion-ease);
8309
8339
  }
8310
- .row:hover .drag-handle[data-v-78d948f0],
8311
- .drag-handle[data-v-78d948f0]:hover,
8312
- .drag-handle[data-v-78d948f0]:focus-visible,
8313
- [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] {
8314
8344
  opacity: 1;
8315
8345
  }
8316
- [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] {
8317
8347
  inset-inline-start: calc(-1 * var(--_tree-disclosure-size) - 2px);
8318
8348
  }
8319
- .drag-handle[data-v-78d948f0]:hover,
8320
- .drag-handle[data-v-78d948f0]:focus-visible {
8349
+ .drag-handle[data-v-f9c58f7a]:hover,
8350
+ .drag-handle[data-v-f9c58f7a]:focus-visible {
8321
8351
  color: var(--ui-text-primary);
8322
8352
  background: var(--ui-surface-hover);
8323
8353
  }
8324
- .drag-handle[data-v-78d948f0]:active {
8354
+ .drag-handle[data-v-f9c58f7a]:active {
8325
8355
  cursor: grabbing;
8326
8356
  }
8327
- .drop-indicator[data-v-78d948f0] {
8357
+ .drop-indicator[data-v-f9c58f7a] {
8328
8358
  position: absolute;
8329
8359
  z-index: 3;
8330
8360
  inset-inline: 1px;
@@ -8334,8 +8364,8 @@ to {
8334
8364
  background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
8335
8365
  pointer-events: none;
8336
8366
  }
8337
- .drop-indicator[data-v-78d948f0]::before,
8338
- .drop-indicator[data-v-78d948f0]::after {
8367
+ .drop-indicator[data-v-f9c58f7a]::before,
8368
+ .drop-indicator[data-v-f9c58f7a]::after {
8339
8369
  content: "";
8340
8370
  position: absolute;
8341
8371
  inset-block-start: 50%;
@@ -8346,34 +8376,34 @@ to {
8346
8376
  background: var(--ui-surface-elevated);
8347
8377
  transform: translateY(-50%);
8348
8378
  }
8349
- .drop-indicator[data-v-78d948f0]::before {
8379
+ .drop-indicator[data-v-f9c58f7a]::before {
8350
8380
  inset-inline-start: -1px;
8351
8381
  }
8352
- .drop-indicator[data-v-78d948f0]::after {
8382
+ .drop-indicator[data-v-f9c58f7a]::after {
8353
8383
  inset-inline-end: -1px;
8354
8384
  }
8355
- [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] {
8356
8386
  display: block;
8357
8387
  inset-block-start: -1px;
8358
8388
  }
8359
- [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] {
8360
8390
  display: block;
8361
8391
  inset-block-end: -1px;
8362
8392
  }
8363
- .children[hidden][data-v-78d948f0] {
8393
+ .children[hidden][data-v-f9c58f7a] {
8364
8394
  display: none;
8365
8395
  }
8366
- 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] {
8367
8397
  --_tree-row-min-height: 44px;
8368
8398
  }
8369
- 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] {
8370
8400
  grid-template-columns: 44px var(--_tree-disclosure-size) auto minmax(0, 1fr);
8371
8401
  }
8372
- 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],
8373
8403
  html[data-ui-input-modality="touch"]
8374
8404
  [data-component~="ui-tree-item"][data-ui-tree-item-state~="isContainer"]
8375
8405
  > .row
8376
- > .drag-handle[data-v-78d948f0] {
8406
+ > .drag-handle[data-v-f9c58f7a] {
8377
8407
  position: relative;
8378
8408
  grid-column: 1;
8379
8409
  grid-row: 1;
@@ -8385,24 +8415,24 @@ html[data-ui-input-modality="touch"]
8385
8415
  transform: none;
8386
8416
  cursor: pointer;
8387
8417
  }
8388
- 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] {
8389
8419
  grid-column: 2;
8390
8420
  }
8391
- 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] {
8392
8422
  grid-column: 3;
8393
8423
  }
8394
- 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] {
8395
8425
  grid-column: 4;
8396
8426
  }
8397
8427
  html[data-ui-input-modality="touch"]
8398
8428
  [data-component~="ui-tree-item"][data-selection-mode="multiple"]
8399
- > .row[data-v-78d948f0] {
8429
+ > .row[data-v-f9c58f7a] {
8400
8430
  grid-template-columns: 44px var(--_tree-disclosure-size) 44px auto minmax(0, 1fr);
8401
8431
  }
8402
8432
  html[data-ui-input-modality="touch"]
8403
8433
  [data-component~="ui-tree-item"][data-selection-mode="multiple"]
8404
8434
  > .row
8405
- > .selection-hit[data-v-78d948f0] {
8435
+ > .selection-hit[data-v-f9c58f7a] {
8406
8436
  grid-column: 3;
8407
8437
  inline-size: 44px;
8408
8438
  block-size: 44px;
@@ -8410,25 +8440,25 @@ html[data-ui-input-modality="touch"]
8410
8440
  html[data-ui-input-modality="touch"]
8411
8441
  [data-component~="ui-tree-item"][data-selection-mode="multiple"]
8412
8442
  > .row
8413
- > .leading[data-v-78d948f0] {
8443
+ > .leading[data-v-f9c58f7a] {
8414
8444
  grid-column: 4;
8415
8445
  }
8416
8446
  html[data-ui-input-modality="touch"]
8417
8447
  [data-component~="ui-tree-item"][data-selection-mode="multiple"]
8418
8448
  > .row
8419
- > .label[data-v-78d948f0] {
8449
+ > .label[data-v-f9c58f7a] {
8420
8450
  grid-column: 5;
8421
8451
  }
8422
8452
  @media (prefers-reduced-motion: reduce) {
8423
- .row[data-v-78d948f0],
8424
- .disclosure-icon[data-v-78d948f0],
8425
- .drag-handle[data-v-78d948f0] {
8453
+ .row[data-v-f9c58f7a],
8454
+ .disclosure-icon[data-v-f9c58f7a],
8455
+ .drag-handle[data-v-f9c58f7a] {
8426
8456
  transition: none;
8427
8457
  }
8428
8458
  }
8429
8459
 
8430
8460
  /* A component that sets its display still honours the hidden attribute on its root. */
8431
- [data-component~="ui-tree-item"][hidden][data-v-78d948f0] {
8461
+ [data-component~="ui-tree-item"][hidden][data-v-f9c58f7a] {
8432
8462
  display: none;
8433
8463
  }
8434
8464
  /**
@@ -9214,6 +9244,10 @@ html[data-ui-input-modality="touch"]
9214
9244
  -webkit-overflow-scrolling: touch;
9215
9245
  }
9216
9246
 
9247
+ .looma-editor .ProseMirror .tableWrapper + p {
9248
+ margin-top: var(--ui-editor-table-following-gap, var(--ui-space-4));
9249
+ }
9250
+
9217
9251
  /* ProseMirror table (for when Looma editor content is rendered) */
9218
9252
  .ProseMirror:focus-visible {
9219
9253
  outline: none;