@threadlabs/looma 0.25.4 → 0.25.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.
Files changed (71) hide show
  1. package/components/ui-card/ui-card.html +27 -2
  2. package/components/ui-checkbox/ui-checkbox.html +2 -0
  3. package/components/ui-cluster/ui-cluster.html +35 -2
  4. package/components/ui-editor-surface/ui-editor-surface.html +23 -0
  5. package/components/ui-list-item/ui-list-item.html +12 -3
  6. package/components/ui-scroll-area/ui-scroll-area.html +5 -0
  7. package/components/ui-stack/ui-stack.html +17 -1
  8. package/components/ui-text/ui-text.html +5 -0
  9. package/components/ui-textarea/ui-textarea.html +7 -0
  10. package/dist/index.js +1 -1
  11. package/package.json +1 -1
  12. package/styles/ui-card.css +24 -0
  13. package/styles/ui-cluster.css +28 -0
  14. package/styles/ui-editor-surface.css +19 -0
  15. package/styles/ui-list-item.css +11 -3
  16. package/styles/ui-scroll-area.css +4 -0
  17. package/styles/ui-stack.css +13 -0
  18. package/styles/ui-text.css +4 -0
  19. package/styles/ui-textarea.css +4 -0
  20. package/vanilla/UiCard.d.ts +1 -1
  21. package/vanilla/UiCard.js +1 -1
  22. package/vanilla/UiCheckbox.d.ts +1 -0
  23. package/vanilla/UiCheckbox.js +18 -15
  24. package/vanilla/UiCluster.d.ts +4 -1
  25. package/vanilla/UiCluster.js +10 -4
  26. package/vanilla/UiEditorSurface.d.ts +14 -0
  27. package/vanilla/UiEditorSurface.js +27 -0
  28. package/vanilla/UiListItem.d.ts +1 -0
  29. package/vanilla/UiListItem.js +4 -2
  30. package/vanilla/UiScrollArea.d.ts +1 -0
  31. package/vanilla/UiScrollArea.js +1 -1
  32. package/vanilla/UiStack.d.ts +2 -0
  33. package/vanilla/UiStack.js +8 -9
  34. package/vanilla/UiText.d.ts +1 -0
  35. package/vanilla/UiText.js +1 -1
  36. package/vanilla/UiTextarea.d.ts +1 -0
  37. package/vanilla/UiTextarea.js +4 -1
  38. package/vanilla/index.js +1 -0
  39. package/vue/UiCard.d.ts +3 -3
  40. package/vue/UiCard.vue +34 -5
  41. package/vue/UiCheckbox.d.ts +9 -0
  42. package/vue/UiCheckbox.vue +20 -0
  43. package/vue/UiCluster.d.ts +30 -3
  44. package/vue/UiCluster.vue +102 -5
  45. package/vue/UiEditorSurface.d.ts +26 -0
  46. package/vue/UiEditorSurface.js +2 -0
  47. package/vue/UiEditorSurface.vue +129 -0
  48. package/vue/UiListItem.d.ts +9 -0
  49. package/vue/UiListItem.vue +35 -4
  50. package/vue/UiScrollArea.d.ts +9 -0
  51. package/vue/UiScrollArea.vue +28 -2
  52. package/vue/UiStack.d.ts +18 -0
  53. package/vue/UiStack.vue +58 -1
  54. package/vue/UiText.d.ts +9 -0
  55. package/vue/UiText.vue +33 -0
  56. package/vue/UiTextarea.d.ts +9 -0
  57. package/vue/UiTextarea.vue +37 -2
  58. package/vue/chunks/UiCard.js +10 -3
  59. package/vue/chunks/UiCheckbox.js +25 -1
  60. package/vue/chunks/UiCluster.js +85 -3
  61. package/vue/chunks/UiEditorSurface.js +71 -0
  62. package/vue/chunks/UiListItem.js +23 -1
  63. package/vue/chunks/UiScrollArea.js +28 -2
  64. package/vue/chunks/UiStack.js +46 -1
  65. package/vue/chunks/UiText.js +43 -1
  66. package/vue/chunks/UiTextarea.js +28 -2
  67. package/vue/components.css +255 -162
  68. package/vue/editor/LoomaEditor.d.ts +12 -0
  69. package/vue/editor/index.js +7 -2
  70. package/vue/index.d.ts +1 -0
  71. package/vue/index.js +2 -1
@@ -1331,7 +1331,7 @@ html[data-ui-input-modality="touch"]
1331
1331
 
1332
1332
  /* A surface that groups content. Its children stack with even space between them, so a card
1333
1333
  needs no layout of its own. */
1334
- [data-component~="ui-card"][data-v-fa2ae386] {
1334
+ [data-component~="ui-card"][data-v-c589f774] {
1335
1335
  display: flex;
1336
1336
  flex-direction: column;
1337
1337
  gap: var(--ui-space-4);
@@ -1343,45 +1343,64 @@ html[data-ui-input-modality="touch"]
1343
1343
  background: var(--ui-surface-raised);
1344
1344
  color: var(--ui-text-primary);
1345
1345
  }
1346
- [data-component~="ui-card"][data-ui-card-state~="padding=xs"][data-v-fa2ae386] {
1346
+ [data-component~="ui-card"][data-ui-card-state~="padding=xs"][data-v-c589f774] {
1347
1347
  gap: var(--ui-space-1);
1348
1348
  padding: var(--ui-space-2);
1349
1349
  }
1350
- [data-component~="ui-card"][data-ui-card-state~="padding=sm"][data-v-fa2ae386] {
1350
+ [data-component~="ui-card"][data-ui-card-state~="padding=sm"][data-v-c589f774] {
1351
1351
  gap: var(--ui-space-2);
1352
1352
  padding: var(--ui-space-3);
1353
1353
  }
1354
- [data-component~="ui-card"][data-ui-card-state~="padding=lg"][data-v-fa2ae386] {
1354
+ [data-component~="ui-card"][data-ui-card-state~="padding=lg"][data-v-c589f774] {
1355
1355
  padding: var(--ui-space-6);
1356
1356
  }
1357
- [data-component~="ui-card"][data-ui-card-state~="variant=subtle"][data-v-fa2ae386] {
1357
+ [data-component~="ui-card"][data-ui-card-state~="variant=subtle"][data-v-c589f774] {
1358
1358
  border-color: transparent;
1359
1359
  background: var(--ui-surface-muted);
1360
1360
  }
1361
- [data-component~="ui-card"][data-ui-card-state~="variant=elevated"][data-v-fa2ae386] {
1361
+ [data-component~="ui-card"][data-ui-card-state~="variant=elevated"][data-v-c589f774] {
1362
1362
  border-color: var(--ui-border-subtle);
1363
1363
  box-shadow: var(--ui-shadow-lg);
1364
1364
  }
1365
- [data-component~="ui-card"][data-ui-card-state~="tone=danger"][data-v-fa2ae386] {
1365
+ [data-component~="ui-card"][data-ui-card-state~="tone=accent"][data-v-c589f774] {
1366
+ border-color: color-mix(in srgb, var(--ui-accent) 25%, var(--ui-border-default));
1367
+ background: color-mix(in srgb, var(--ui-accent) 6%, var(--ui-surface-default));
1368
+ }
1369
+ [data-component~="ui-card"][data-ui-card-state~="tone=info"][data-v-c589f774] {
1370
+ border-color: color-mix(in srgb, var(--ui-info) 25%, var(--ui-border-default));
1371
+ background: color-mix(in srgb, var(--ui-info) 6%, var(--ui-surface-default));
1372
+ }
1373
+ [data-component~="ui-card"][data-ui-card-state~="tone=success"][data-v-c589f774] {
1374
+ border-color: color-mix(in srgb, var(--ui-success) 25%, var(--ui-border-default));
1375
+ background: color-mix(in srgb, var(--ui-success) 6%, var(--ui-surface-default));
1376
+ }
1377
+ [data-component~="ui-card"][data-ui-card-state~="tone=warning"][data-v-c589f774] {
1378
+ border-color: color-mix(in srgb, var(--ui-warning) 25%, var(--ui-border-default));
1379
+ background: color-mix(in srgb, var(--ui-warning) 6%, var(--ui-surface-default));
1380
+ }
1381
+ [data-component~="ui-card"][data-ui-card-state~="variant=subtle"][data-v-c589f774]:is([data-ui-card-state~="tone=accent"], [data-ui-card-state~="tone=info"], [data-ui-card-state~="tone=success"], [data-ui-card-state~="tone=warning"]) {
1382
+ border-color: transparent;
1383
+ }
1384
+ [data-component~="ui-card"][data-ui-card-state~="tone=danger"][data-v-c589f774] {
1366
1385
  border-color: color-mix(in srgb, var(--ui-danger) 45%, var(--ui-border-default));
1367
1386
  border-inline-start: var(--ui-accent-line-width) solid var(--ui-danger);
1368
1387
  background: var(--ui-danger-soft);
1369
1388
  }
1370
- [data-component~="ui-card"][data-ui-card-state~="size=sm"][data-v-fa2ae386] {
1389
+ [data-component~="ui-card"][data-ui-card-state~="size=sm"][data-v-c589f774] {
1371
1390
  inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
1372
1391
  max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
1373
1392
  }
1374
- [data-component~="ui-card"][data-ui-card-state~="size=md"][data-v-fa2ae386] {
1393
+ [data-component~="ui-card"][data-ui-card-state~="size=md"][data-v-c589f774] {
1375
1394
  inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
1376
1395
  max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
1377
1396
  }
1378
- [data-component~="ui-card"][data-ui-card-state~="size=lg"][data-v-fa2ae386] {
1397
+ [data-component~="ui-card"][data-ui-card-state~="size=lg"][data-v-c589f774] {
1379
1398
  inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
1380
1399
  max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
1381
1400
  }
1382
1401
 
1383
1402
  /* A component that sets its display still honours the hidden attribute on its root. */
1384
- [data-component~="ui-card"][hidden][data-v-fa2ae386] {
1403
+ [data-component~="ui-card"][hidden][data-v-c589f774] {
1385
1404
  display: none;
1386
1405
  }
1387
1406
 
@@ -1398,7 +1417,7 @@ html[data-ui-input-modality="touch"]
1398
1417
  syntax: "*";
1399
1418
  inherits: false;
1400
1419
  }
1401
- [data-component~="ui-checkbox"][data-v-ce204e6e] {
1420
+ [data-component~="ui-checkbox"][data-v-3bebca63] {
1402
1421
  /* Hooks do not inherit, so the parts below read them from the root. */
1403
1422
  --_ui-checkbox-size: var(--ui-checkbox-size);
1404
1423
  --_ui-checkbox-invalid-border: var(
@@ -1415,25 +1434,25 @@ html[data-ui-input-modality="touch"]
1415
1434
  }
1416
1435
 
1417
1436
  /* The label, and under it an optional line saying what the choice means. */
1418
- .text[data-v-ce204e6e] {
1437
+ .text[data-v-3bebca63] {
1419
1438
  display: flex;
1420
1439
  flex-direction: column;
1421
1440
  gap: var(--ui-space-1);
1422
1441
  min-inline-size: 0;
1423
1442
  }
1424
- .label[data-v-ce204e6e] {
1443
+ .label[data-v-3bebca63] {
1425
1444
  min-inline-size: 0;
1426
1445
  line-height: var(--ui-line-height-md);
1427
1446
  }
1428
- .description[data-v-ce204e6e] {
1447
+ .description[data-v-3bebca63] {
1429
1448
  color: var(--ui-text-secondary);
1430
1449
  font-size: var(--ui-font-size-sm);
1431
1450
  line-height: var(--ui-line-height);
1432
1451
  }
1433
- .description[data-v-ce204e6e]:empty {
1452
+ .description[data-v-3bebca63]:empty {
1434
1453
  display: none;
1435
1454
  }
1436
- input[data-v-ce204e6e] {
1455
+ input[data-v-3bebca63] {
1437
1456
  appearance: none;
1438
1457
  -webkit-appearance: none;
1439
1458
  position: relative;
@@ -1451,21 +1470,21 @@ input[data-v-ce204e6e] {
1451
1470
  border-color var(--ui-motion-fast) var(--ui-motion-ease),
1452
1471
  box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
1453
1472
  }
1454
- input[data-v-ce204e6e]::after {
1473
+ input[data-v-3bebca63]::after {
1455
1474
  content: "";
1456
1475
  position: absolute;
1457
1476
  opacity: 0;
1458
1477
  transition: opacity 120ms var(--ui-motion-ease);
1459
1478
  }
1460
- input[data-v-ce204e6e]:checked,
1461
- input[data-v-ce204e6e]:indeterminate {
1479
+ input[data-v-3bebca63]:checked,
1480
+ input[data-v-3bebca63]:indeterminate {
1462
1481
  border-color: var(--ui-accent-solid);
1463
1482
  background: var(--ui-accent-solid);
1464
1483
  box-shadow: var(--ui-control-inset);
1465
1484
  }
1466
1485
 
1467
1486
  /* Centre the tick's box and lift it slightly for the rotated check shape. */
1468
- input[data-v-ce204e6e]:checked::after {
1487
+ input[data-v-3bebca63]:checked::after {
1469
1488
  inset: 0;
1470
1489
  margin: auto;
1471
1490
  inline-size: 0.28rem;
@@ -1477,9 +1496,9 @@ input[data-v-ce204e6e]:checked::after {
1477
1496
  border-width: 0 0.125rem 0.125rem 0;
1478
1497
  opacity: 1;
1479
1498
  transform: translateY(-0.09rem) rotate(45deg);
1480
- animation: ui-checkbox-check-ce204e6e 180ms var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
1499
+ animation: ui-checkbox-check-3bebca63 180ms var(--ui-motion-ease-out, cubic-bezier(0.16, 1, 0.3, 1)) both;
1481
1500
  }
1482
- input[data-v-ce204e6e]:indeterminate::after {
1501
+ input[data-v-3bebca63]:indeterminate::after {
1483
1502
  inset: 50% 0.23rem auto;
1484
1503
  block-size: 0.125rem;
1485
1504
  border-radius: var(--ui-radius-round);
@@ -1487,7 +1506,7 @@ input[data-v-ce204e6e]:indeterminate::after {
1487
1506
  opacity: 1;
1488
1507
  transform: translateY(-50%);
1489
1508
  }
1490
- @keyframes ui-checkbox-check-ce204e6e {
1509
+ @keyframes ui-checkbox-check-3bebca63 {
1491
1510
  from {
1492
1511
  opacity: 0;
1493
1512
  transform: translateY(-0.09rem) rotate(45deg) scale(0.55);
@@ -1502,29 +1521,29 @@ to {
1502
1521
  }
1503
1522
  }
1504
1523
  @media (prefers-reduced-motion: reduce) {
1505
- input[data-v-ce204e6e]::after {
1524
+ input[data-v-3bebca63]::after {
1506
1525
  transition: none;
1507
1526
  animation: none;
1508
1527
  }
1509
1528
  }
1510
- input[data-v-ce204e6e]:hover:enabled {
1529
+ input[data-v-3bebca63]:hover:enabled {
1511
1530
  border-color: var(--ui-accent-solid);
1512
1531
  }
1513
- input[data-v-ce204e6e]:focus-visible {
1532
+ input[data-v-3bebca63]:focus-visible {
1514
1533
  outline: var(--ui-focus-width) solid var(--ui-focus-ring, var(--ui-accent-solid));
1515
1534
  outline-offset: var(--ui-focus-width);
1516
1535
  }
1517
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="invalid"] input[data-v-ce204e6e] {
1536
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="invalid"] input[data-v-3bebca63] {
1518
1537
  border-color: var(--_ui-checkbox-invalid-border);
1519
1538
  }
1520
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"][data-v-ce204e6e] {
1539
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"][data-v-3bebca63] {
1521
1540
  color: var(--ui-disabled-text);
1522
1541
  cursor: not-allowed;
1523
1542
  }
1524
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] .description[data-v-ce204e6e] {
1543
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] .description[data-v-3bebca63] {
1525
1544
  color: var(--ui-disabled-text);
1526
1545
  }
1527
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] input[data-v-ce204e6e] {
1546
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] input[data-v-3bebca63] {
1528
1547
  border-color: var(--ui-disabled-border);
1529
1548
  background: var(--ui-disabled-surface);
1530
1549
  box-shadow: none;
@@ -1534,32 +1553,32 @@ input[data-v-ce204e6e]:focus-visible {
1534
1553
  /* A sized choice keeps its box and aligns instead: the label takes that size's field type size,
1535
1554
  and the first line centres in that control height, so the label shares a row's baseline.
1536
1555
  Multi-line labels and descriptions still grow downward from that first line. */
1537
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=sm"][data-v-ce204e6e] {
1556
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=sm"][data-v-3bebca63] {
1538
1557
  --_font: var(--ui-font-size-sm);
1539
1558
  --_row: var(--ui-control-size-sm);
1540
1559
  }
1541
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=lg"][data-v-ce204e6e] {
1560
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=lg"][data-v-3bebca63] {
1542
1561
  --_font: var(--ui-font-size-md);
1543
1562
  --_row: var(--ui-control-size-lg);
1544
1563
  }
1545
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=sm"][data-v-ce204e6e],
1546
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=lg"][data-v-ce204e6e] {
1564
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=sm"][data-v-3bebca63],
1565
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=lg"][data-v-3bebca63] {
1547
1566
  --_line: calc(var(--_font) * var(--ui-line-height-md));
1548
1567
  font-size: var(--_font);
1549
1568
  padding-block: calc((var(--_row) - var(--_line)) / 2);
1550
1569
  }
1551
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=sm"] input[data-v-ce204e6e],
1552
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=lg"] input[data-v-ce204e6e] {
1570
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=sm"] input[data-v-3bebca63],
1571
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=lg"] input[data-v-3bebca63] {
1553
1572
  margin-top: calc((var(--_line) - var(--_ui-checkbox-size, 1.125rem)) / 2);
1554
1573
  }
1555
1574
  @media (pointer: coarse) {
1556
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=sm"][data-v-ce204e6e] {
1575
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="size=sm"][data-v-3bebca63] {
1557
1576
  --_row: var(--ui-control-min-block-size);
1558
1577
  }
1559
1578
  }
1560
1579
 
1561
1580
  /* A component that sets its display still honours the hidden attribute on its root. */
1562
- [data-component~="ui-checkbox"][hidden][data-v-ce204e6e] {
1581
+ [data-component~="ui-checkbox"][hidden][data-v-3bebca63] {
1563
1582
  display: none;
1564
1583
  }
1565
1584
 
@@ -1568,7 +1587,7 @@ input[data-v-ce204e6e]:focus-visible {
1568
1587
  syntax: "*";
1569
1588
  inherits: false;
1570
1589
  }
1571
- [data-component~="ui-cluster"][data-v-fafdad21] {
1590
+ [data-component~="ui-cluster"][data-v-acd23e4a] {
1572
1591
  --_layout-gap: var(--ui-space-3);
1573
1592
  display: flex;
1574
1593
  flex-wrap: wrap;
@@ -1578,45 +1597,72 @@ input[data-v-ce204e6e]:focus-visible {
1578
1597
  max-inline-size: 100%;
1579
1598
  margin: 0;
1580
1599
  }
1581
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xs"][data-v-fafdad21] {
1600
+ [data-component~="ui-cluster"][data-ui-cluster-state~="fixed"][data-v-acd23e4a] {
1601
+ flex: none;
1602
+ }
1603
+ [data-component~="ui-cluster"][data-ui-cluster-state~="padding=s"][data-v-acd23e4a] {
1604
+ padding: var(--ui-space-2);
1605
+ }
1606
+ [data-component~="ui-cluster"][data-ui-cluster-state~="padding=m"][data-v-acd23e4a] {
1607
+ padding: var(--ui-space-3);
1608
+ }
1609
+ [data-component~="ui-cluster"][data-ui-cluster-state~="padding=l"][data-v-acd23e4a] {
1610
+ padding: var(--ui-space-4);
1611
+ }
1612
+ [data-component~="ui-cluster"][data-ui-cluster-state~="paddingEnd=s"][data-v-acd23e4a] {
1613
+ padding-inline-end: var(--ui-space-2);
1614
+ }
1615
+ [data-component~="ui-cluster"][data-ui-cluster-state~="paddingEnd=m"][data-v-acd23e4a] {
1616
+ padding-inline-end: var(--ui-space-3);
1617
+ }
1618
+ [data-component~="ui-cluster"][data-ui-cluster-state~="paddingEnd=l"][data-v-acd23e4a] {
1619
+ padding-inline-end: var(--ui-space-4);
1620
+ }
1621
+ [data-component~="ui-cluster"][data-ui-cluster-state~="paddingEnd=xl"][data-v-acd23e4a] {
1622
+ padding-inline-end: calc(var(--ui-space-4) * 4);
1623
+ }
1624
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xs"][data-v-acd23e4a] {
1582
1625
  --_layout-gap: var(--ui-space-2);
1583
1626
  }
1584
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=s"][data-v-fafdad21] {
1627
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=s"][data-v-acd23e4a] {
1585
1628
  --_layout-gap: var(--ui-space-3);
1586
1629
  }
1587
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=m"][data-v-fafdad21] {
1630
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=m"][data-v-acd23e4a] {
1588
1631
  --_layout-gap: var(--ui-space-4);
1589
1632
  }
1590
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=l"][data-v-fafdad21] {
1633
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=l"][data-v-acd23e4a] {
1591
1634
  --_layout-gap: var(--ui-space-5);
1592
1635
  }
1593
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xl"][data-v-fafdad21] {
1636
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xl"][data-v-acd23e4a] {
1594
1637
  --_layout-gap: var(--ui-space-6);
1595
1638
  }
1596
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=start"][data-v-fafdad21] {
1639
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=start"][data-v-acd23e4a] {
1597
1640
  align-items: flex-start;
1598
1641
  }
1599
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=end"][data-v-fafdad21] {
1642
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=end"][data-v-acd23e4a] {
1600
1643
  align-items: flex-end;
1601
1644
  }
1602
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=stretch"][data-v-fafdad21] {
1645
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=baseline"][data-v-acd23e4a] {
1646
+ align-items: baseline;
1647
+ }
1648
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=stretch"][data-v-acd23e4a] {
1603
1649
  align-items: stretch;
1604
1650
  }
1605
- [data-component~="ui-cluster"][data-ui-cluster-state~="justify=center"][data-v-fafdad21] {
1651
+ [data-component~="ui-cluster"][data-ui-cluster-state~="justify=center"][data-v-acd23e4a] {
1606
1652
  justify-content: center;
1607
1653
  }
1608
- [data-component~="ui-cluster"][data-ui-cluster-state~="justify=end"][data-v-fafdad21] {
1654
+ [data-component~="ui-cluster"][data-ui-cluster-state~="justify=end"][data-v-acd23e4a] {
1609
1655
  justify-content: flex-end;
1610
1656
  }
1611
- [data-component~="ui-cluster"][data-ui-cluster-state~="justify=between"][data-v-fafdad21] {
1657
+ [data-component~="ui-cluster"][data-ui-cluster-state~="justify=between"][data-v-acd23e4a] {
1612
1658
  justify-content: space-between;
1613
1659
  }
1614
- [data-component~="ui-cluster"][data-ui-cluster-state~="wrap=nowrap"][data-v-fafdad21] {
1660
+ [data-component~="ui-cluster"][data-ui-cluster-state~="wrap=nowrap"][data-v-acd23e4a] {
1615
1661
  flex-wrap: nowrap;
1616
1662
  }
1617
1663
 
1618
1664
  /* A component that sets its display still honours the hidden attribute on its root. */
1619
- [data-component~="ui-cluster"][hidden][data-v-fafdad21] {
1665
+ [data-component~="ui-cluster"][hidden][data-v-acd23e4a] {
1620
1666
  display: none;
1621
1667
  }
1622
1668
 
@@ -2492,7 +2538,10 @@ dd[data-v-cc61fece] {
2492
2538
  /* The controller sets each fade length from overflow and scroll position. The mask blends
2493
2539
  into whatever is behind the area without needing to know its colour. Before upgrade, its
2494
2540
  zero-length defaults leave the authored scroll area fully visible. */
2495
- [data-component~="ui-scroll-area"][data-v-7357ecdb] {
2541
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="fill"][data-v-1f6366dd] {
2542
+ flex: 1;
2543
+ }
2544
+ [data-component~="ui-scroll-area"][data-v-1f6366dd] {
2496
2545
  display: block;
2497
2546
  box-sizing: border-box;
2498
2547
  min-block-size: 0;
@@ -2511,29 +2560,29 @@ dd[data-v-cc61fece] {
2511
2560
  transparent
2512
2561
  );
2513
2562
  }
2514
- .content[data-v-7357ecdb] {
2563
+ .content[data-v-1f6366dd] {
2515
2564
  display: flow-root;
2516
2565
  }
2517
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="orientation=horizontal"][data-v-7357ecdb] {
2566
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="orientation=horizontal"][data-v-1f6366dd] {
2518
2567
  overflow-x: auto;
2519
2568
  overflow-y: hidden;
2520
2569
  --_ui-scroll-fade-direction: var(--_ui-scroll-fade-inline);
2521
2570
  }
2522
- [data-component~="ui-scroll-area"][data-v-7357ecdb]:dir(rtl) {
2571
+ [data-component~="ui-scroll-area"][data-v-1f6366dd]:dir(rtl) {
2523
2572
  --_ui-scroll-fade-inline: to left;
2524
2573
  }
2525
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=sm"][data-v-7357ecdb] {
2574
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=sm"][data-v-1f6366dd] {
2526
2575
  max-block-size: calc(9.375rem + var(--ui-scroll-fade-size, 24px));
2527
2576
  }
2528
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=md"][data-v-7357ecdb] {
2577
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=md"][data-v-1f6366dd] {
2529
2578
  max-block-size: 20rem;
2530
2579
  }
2531
- [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=lg"][data-v-7357ecdb] {
2580
+ [data-component~="ui-scroll-area"][data-ui-scroll-area-state~="size=lg"][data-v-1f6366dd] {
2532
2581
  max-block-size: 30rem;
2533
2582
  }
2534
2583
 
2535
2584
  /* A component that sets its display still honours the hidden attribute on its root. */
2536
- [data-component~="ui-scroll-area"][hidden][data-v-7357ecdb] {
2585
+ [data-component~="ui-scroll-area"][hidden][data-v-1f6366dd] {
2537
2586
  display: none;
2538
2587
  }
2539
2588
 
@@ -3581,6 +3630,20 @@ ul[data-v-d78f0cb3] {
3581
3630
  display: none;
3582
3631
  }
3583
3632
 
3633
+ [data-component~="ui-editor-surface"][data-v-7e72ed22] {
3634
+ display: flex;
3635
+ flex-direction: column;
3636
+ min-inline-size: 0;
3637
+ max-inline-size: 100%;
3638
+ }
3639
+ /* The document renderer consumes these inherited surface settings. They do not style controls. */
3640
+ [data-component~="ui-editor-surface"][data-ui-editor-surface-state~="density=compact"][data-v-7e72ed22] {
3641
+ --_ui-editor-content-min-height: 0px;
3642
+ --_ui-editor-content-padding-block: 0px;
3643
+ --_ui-editor-content-padding-inline: 0px;
3644
+ --_ui-editor-mobile-bottom-space: 0px;
3645
+ }
3646
+
3584
3647
  [data-component~="ui-editor-table-context-menu"][data-v-27797f18] {
3585
3648
  /* The max-width is a promise about the menu's footprint, so it counts padding and border. */
3586
3649
  box-sizing: border-box;
@@ -5541,7 +5604,7 @@ svg[data-v-521a280a-s] {
5541
5604
  padding follow it too, and the item takes the link's focus ring. The link stays a real link, so
5542
5605
  a router, a modified click, and "open in new tab" all work. Trailing controls sit above it and
5543
5606
  stay their own. */
5544
- [data-component~="ui-list-item"][data-v-9f16562f] {
5607
+ [data-component~="ui-list-item"][data-v-8b9a3e2b] {
5545
5608
  /* Hooks do not inherit, so the parts below read them from the root. */
5546
5609
  --_ui-list-item-icon-size: var(--ui-list-item-icon-size);
5547
5610
 
@@ -5566,91 +5629,97 @@ svg[data-v-521a280a-s] {
5566
5629
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
5567
5630
  border-color var(--ui-motion-fast) var(--ui-motion-ease);
5568
5631
  }
5569
- [data-component~="ui-list-item"][data-ui-list-item-state~="variant=card"][data-v-9f16562f] {
5632
+ [data-component~="ui-list-item"][data-ui-list-item-state~="variant=card"][data-v-8b9a3e2b] {
5570
5633
  padding-block: var(--ui-list-item-padding-block, var(--ui-space-3));
5571
5634
  padding-inline: var(--ui-list-item-padding-inline, var(--ui-space-4));
5572
5635
  border: var(--ui-border-width) solid var(--ui-border-strong);
5573
5636
  border-radius: var(--ui-radius-lg);
5574
5637
  background: var(--ui-surface-raised);
5575
5638
  }
5576
- [data-component~="ui-list-item"][data-v-9f16562f]:has(.title a[href]:hover) {
5577
- background: var(--ui-surface-hover);
5639
+ [data-component~="ui-list-item"][data-v-8b9a3e2b]:where(:has(.title a[href])):hover {
5640
+ background: var(--ui-selection-surface);
5578
5641
  }
5579
- [data-component~="ui-list-item"][data-ui-list-item-state~="variant=card"][data-v-9f16562f]:has(.title
5580
- a[href]:hover) {
5642
+ [data-component~="ui-list-item"][data-ui-list-item-state~="variant=card"][data-v-8b9a3e2b]:where(:has(.title
5643
+ a[href])):hover {
5581
5644
  border-color: var(--ui-border-strong);
5582
5645
  }
5583
- [data-component~="ui-list-item"][data-ui-list-item-state~="highlighted"][data-v-9f16562f] {
5646
+ [data-component~="ui-list-item"][data-ui-list-item-state~="highlighted"][data-v-8b9a3e2b] {
5584
5647
  background: var(--ui-selection-surface);
5585
5648
  }
5586
- [data-component~="ui-list-item"][data-ui-list-item-state~="current"][data-v-9f16562f] {
5649
+ [data-component~="ui-list-item"][data-ui-list-item-state~="current"][data-v-8b9a3e2b] {
5587
5650
  background: var(--ui-selection-surface);
5588
5651
  color: var(--ui-selection-text);
5589
5652
  }
5590
- [data-component~="ui-list-item"][data-v-9f16562f]:has(.title a[href]:focus-visible) {
5653
+ [data-component~="ui-list-item"][data-v-8b9a3e2b]:has(.title a[href]:focus-visible) {
5591
5654
  box-shadow: 0 0 0 var(--ui-focus-width) var(--ui-focus-ring);
5592
5655
  }
5593
- .leading[data-v-9f16562f],
5594
- .trailing[data-v-9f16562f] {
5656
+ .leading[data-v-8b9a3e2b],
5657
+ .trailing[data-v-8b9a3e2b] {
5595
5658
  display: inline-flex;
5596
5659
  flex: none;
5597
5660
  align-items: center;
5598
5661
  gap: var(--ui-space-2);
5599
5662
  }
5600
- .leading[data-v-9f16562f] {
5663
+ .leading[data-v-8b9a3e2b] {
5601
5664
  color: var(--ui-text-muted);
5602
5665
  font-size: var(--_ui-list-item-icon-size, var(--ui-font-size-lg));
5603
5666
  }
5604
- [data-component~="ui-list-item"][data-ui-list-item-state~="current"] .leading[data-v-9f16562f] {
5667
+ [data-component~="ui-list-item"][data-ui-list-item-state~="current"] .leading[data-v-8b9a3e2b] {
5605
5668
  color: var(--ui-selection-text);
5606
5669
  }
5607
5670
 
5671
+ /* An explicitly independent leading control sits above the stretched row link. */
5672
+ [data-component~="ui-list-item"][data-ui-list-item-state~="leadingInteractive"] .leading[data-v-8b9a3e2b] {
5673
+ position: relative;
5674
+ z-index: 1;
5675
+ }
5676
+
5608
5677
  /* Trailing controls take their own clicks, above the title link's stretched hit area. */
5609
- .trailing[data-v-9f16562f] {
5678
+ .trailing[data-v-8b9a3e2b] {
5610
5679
  position: relative;
5611
5680
  z-index: 1;
5612
5681
  color: var(--ui-text-muted);
5613
5682
  font-size: var(--ui-font-size-sm);
5614
5683
  }
5615
- .content[data-v-9f16562f] {
5684
+ .content[data-v-8b9a3e2b] {
5616
5685
  display: flex;
5617
5686
  flex: 1;
5618
5687
  flex-direction: column;
5619
5688
  gap: var(--ui-space-0-5, 2px);
5620
5689
  min-inline-size: 0;
5621
5690
  }
5622
- .title[data-v-9f16562f],
5623
- .description[data-v-9f16562f] {
5691
+ .title[data-v-8b9a3e2b],
5692
+ .description[data-v-8b9a3e2b] {
5624
5693
  display: block;
5625
5694
  min-inline-size: 0;
5626
5695
  overflow: hidden;
5627
5696
  text-overflow: ellipsis;
5628
5697
  white-space: nowrap;
5629
5698
  }
5630
- [data-component~="ui-list-item"][data-ui-list-item-state~="wrap"] .title[data-v-9f16562f],
5631
- [data-component~="ui-list-item"][data-ui-list-item-state~="wrap"] .description[data-v-9f16562f] {
5699
+ [data-component~="ui-list-item"][data-ui-list-item-state~="wrap"] .title[data-v-8b9a3e2b],
5700
+ [data-component~="ui-list-item"][data-ui-list-item-state~="wrap"] .description[data-v-8b9a3e2b] {
5632
5701
  white-space: normal;
5633
5702
  overflow-wrap: anywhere;
5634
5703
  }
5635
- .title[data-v-9f16562f] {
5704
+ .title[data-v-8b9a3e2b] {
5636
5705
  font-size: var(--ui-font-size-md);
5637
5706
  font-weight: var(--_ui-list-item-title-weight, var(--ui-font-medium));
5638
5707
  line-height: var(--ui-line-height-tight);
5639
5708
  }
5640
- .description[data-v-9f16562f] {
5709
+ .description[data-v-8b9a3e2b] {
5641
5710
  color: var(--ui-text-muted);
5642
5711
  font-size: var(--ui-font-size-sm);
5643
5712
  line-height: var(--ui-line-height-tight);
5644
5713
  }
5645
- .title > a[data-v-9f16562f-s] {
5714
+ .title > a[data-v-8b9a3e2b-s] {
5646
5715
  color: inherit;
5647
5716
  text-decoration: none;
5648
5717
  }
5649
- .title > a[data-v-9f16562f-s]:focus-visible {
5718
+ .title > a[data-v-8b9a3e2b-s]:focus-visible {
5650
5719
  outline: none;
5651
5720
  box-shadow: none;
5652
5721
  }
5653
- .title > a[href][data-v-9f16562f-s]::after {
5722
+ .title > a[href][data-v-8b9a3e2b-s]::after {
5654
5723
  position: absolute;
5655
5724
  inset: 0;
5656
5725
  border-radius: inherit;
@@ -5658,24 +5727,24 @@ svg[data-v-521a280a-s] {
5658
5727
  }
5659
5728
 
5660
5729
  /* An unused region takes no space. */
5661
- .leading[data-v-9f16562f]:empty,
5662
- .description[data-v-9f16562f]:empty,
5663
- .trailing[data-v-9f16562f]:empty {
5730
+ .leading[data-v-8b9a3e2b]:empty,
5731
+ .description[data-v-8b9a3e2b]:empty,
5732
+ .trailing[data-v-8b9a3e2b]:empty {
5664
5733
  display: none;
5665
5734
  }
5666
5735
  @media (forced-colors: active) {
5667
- [data-component~="ui-list-item"][data-v-9f16562f]:has(a:focus-visible) {
5736
+ [data-component~="ui-list-item"][data-v-8b9a3e2b]:has(a:focus-visible) {
5668
5737
  outline: var(--ui-focus-width) solid Highlight;
5669
5738
  outline-offset: calc(-1 * var(--ui-focus-width));
5670
5739
  }
5671
- :is([data-component~="ui-list-item"][data-ui-list-item-state~="current"][data-v-9f16562f], [data-component~="ui-list-item"][data-ui-list-item-state~="highlighted"][data-v-9f16562f]):not(:has(a:focus-visible)) {
5740
+ :is([data-component~="ui-list-item"][data-ui-list-item-state~="current"][data-v-8b9a3e2b], [data-component~="ui-list-item"][data-ui-list-item-state~="highlighted"][data-v-8b9a3e2b]):not(:has(a:focus-visible)) {
5672
5741
  outline: var(--ui-border-width) solid Highlight;
5673
5742
  outline-offset: calc(-1 * var(--ui-border-width));
5674
5743
  }
5675
5744
  }
5676
5745
 
5677
5746
  /* A component that sets its display still honours the hidden attribute on its root. */
5678
- [data-component~="ui-list-item"][hidden][data-v-9f16562f] {
5747
+ [data-component~="ui-list-item"][hidden][data-v-8b9a3e2b] {
5679
5748
  display: none;
5680
5749
  }
5681
5750
 
@@ -7564,11 +7633,15 @@ dialog[data-v-a7c1863a] {
7564
7633
  }
7565
7634
 
7566
7635
  /* This component's hooks style the element they are set on, and never a nested one. */
7636
+ @property --ui-stack-height {
7637
+ syntax: "*";
7638
+ inherits: false;
7639
+ }
7567
7640
  @property --ui-stack-gap {
7568
7641
  syntax: "*";
7569
7642
  inherits: false;
7570
7643
  }
7571
- [data-component~="ui-stack"][data-v-8129c161] {
7644
+ [data-component~="ui-stack"][data-v-bdf63b20] {
7572
7645
  --_layout-gap: var(--ui-space-4);
7573
7646
  display: flex;
7574
7647
  flex-direction: column;
@@ -7578,45 +7651,53 @@ dialog[data-v-a7c1863a] {
7578
7651
  max-inline-size: 100%;
7579
7652
  margin: 0;
7580
7653
  }
7581
- [data-component~="ui-stack"][data-ui-stack-state~="gap=none"][data-v-8129c161] {
7654
+ [data-component~="ui-stack"][data-ui-stack-state~="fill"][data-v-bdf63b20] {
7655
+ flex: 1;
7656
+ min-block-size: 0;
7657
+ }
7658
+ [data-component~="ui-stack"][data-ui-stack-state~="height"][data-v-bdf63b20] {
7659
+ block-size: calc(var(--ui-stack-height, 0) * 1px);
7660
+ min-block-size: 0;
7661
+ }
7662
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=none"][data-v-bdf63b20] {
7582
7663
  --_layout-gap: 0px;
7583
7664
  }
7584
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"][data-v-8129c161] {
7665
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"][data-v-bdf63b20] {
7585
7666
  --_layout-gap: var(--ui-space-2);
7586
7667
  }
7587
- [data-component~="ui-stack"][data-ui-stack-state~="gap=s"][data-v-8129c161] {
7668
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=s"][data-v-bdf63b20] {
7588
7669
  --_layout-gap: var(--ui-space-3);
7589
7670
  }
7590
- [data-component~="ui-stack"][data-ui-stack-state~="gap=m"][data-v-8129c161] {
7671
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=m"][data-v-bdf63b20] {
7591
7672
  --_layout-gap: var(--ui-space-4);
7592
7673
  }
7593
- [data-component~="ui-stack"][data-ui-stack-state~="gap=l"][data-v-8129c161] {
7674
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=l"][data-v-bdf63b20] {
7594
7675
  --_layout-gap: var(--ui-space-5);
7595
7676
  }
7596
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"][data-v-8129c161] {
7677
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"][data-v-bdf63b20] {
7597
7678
  --_layout-gap: var(--ui-space-6);
7598
7679
  }
7599
- [data-component~="ui-stack"][data-ui-stack-state~="align=start"][data-v-8129c161] {
7680
+ [data-component~="ui-stack"][data-ui-stack-state~="align=start"][data-v-bdf63b20] {
7600
7681
  align-items: flex-start;
7601
7682
  }
7602
- [data-component~="ui-stack"][data-ui-stack-state~="align=center"][data-v-8129c161] {
7683
+ [data-component~="ui-stack"][data-ui-stack-state~="align=center"][data-v-bdf63b20] {
7603
7684
  align-items: center;
7604
7685
  }
7605
- [data-component~="ui-stack"][data-ui-stack-state~="align=end"][data-v-8129c161] {
7686
+ [data-component~="ui-stack"][data-ui-stack-state~="align=end"][data-v-bdf63b20] {
7606
7687
  align-items: flex-end;
7607
7688
  }
7608
- [data-component~="ui-stack"][data-ui-stack-state~="justify=center"][data-v-8129c161] {
7689
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=center"][data-v-bdf63b20] {
7609
7690
  justify-content: center;
7610
7691
  }
7611
- [data-component~="ui-stack"][data-ui-stack-state~="justify=end"][data-v-8129c161] {
7692
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=end"][data-v-bdf63b20] {
7612
7693
  justify-content: flex-end;
7613
7694
  }
7614
- [data-component~="ui-stack"][data-ui-stack-state~="justify=between"][data-v-8129c161] {
7695
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=between"][data-v-bdf63b20] {
7615
7696
  justify-content: space-between;
7616
7697
  }
7617
7698
 
7618
7699
  /* A component that sets its display still honours the hidden attribute on its root. */
7619
- [data-component~="ui-stack"][hidden][data-v-8129c161] {
7700
+ [data-component~="ui-stack"][hidden][data-v-bdf63b20] {
7620
7701
  display: none;
7621
7702
  }
7622
7703
 
@@ -8159,7 +8240,10 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8159
8240
  /* Running text, set on the type scale and in a tone that says what it is, so a view never styles
8160
8241
  text of its own. The root is a paragraph unless as= names a span, div, small, strong, label, or
8161
8242
  heading. */
8162
- [data-component~="ui-text"][data-v-d830471c] {
8243
+ [data-component~="ui-text"][data-ui-text-state~="grow"][data-v-2c821f7e] {
8244
+ flex: 1;
8245
+ }
8246
+ [data-component~="ui-text"][data-v-2c821f7e] {
8163
8247
  margin: 0;
8164
8248
  min-inline-size: 0;
8165
8249
  color: var(--ui-text-primary);
@@ -8168,93 +8252,93 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8168
8252
 
8169
8253
  /* A heading drops the browser's heading size and weight, so size and weight set it as they set
8170
8254
  any text, and inherit keeps the text around it. */
8171
- [data-component~="ui-text"][data-v-d830471c]:is(h2, h3, h4, h5, h6) {
8255
+ [data-component~="ui-text"][data-v-2c821f7e]:is(h2, h3, h4, h5, h6) {
8172
8256
  font-size: inherit;
8173
8257
  font-weight: inherit;
8174
8258
  }
8175
- [data-component~="ui-text"][data-ui-text-state~="size=xs"][data-v-d830471c] {
8259
+ [data-component~="ui-text"][data-ui-text-state~="size=xs"][data-v-2c821f7e] {
8176
8260
  font-size: var(--ui-font-size-xs);
8177
8261
  line-height: var(--ui-line-height);
8178
8262
  }
8179
- [data-component~="ui-text"][data-ui-text-state~="size=sm"][data-v-d830471c] {
8263
+ [data-component~="ui-text"][data-ui-text-state~="size=sm"][data-v-2c821f7e] {
8180
8264
  font-size: var(--ui-font-size-sm);
8181
8265
  line-height: var(--ui-line-height);
8182
8266
  }
8183
- [data-component~="ui-text"][data-ui-text-state~="size=md"][data-v-d830471c] {
8267
+ [data-component~="ui-text"][data-ui-text-state~="size=md"][data-v-2c821f7e] {
8184
8268
  font-size: var(--ui-font-size-md);
8185
8269
  line-height: var(--ui-line-height);
8186
8270
  }
8187
- [data-component~="ui-text"][data-ui-text-state~="size=lg"][data-v-d830471c] {
8271
+ [data-component~="ui-text"][data-ui-text-state~="size=lg"][data-v-2c821f7e] {
8188
8272
  font-size: var(--ui-font-size-lg);
8189
8273
  line-height: var(--ui-line-height-relaxed);
8190
8274
  }
8191
- [data-component~="ui-text"][data-ui-text-state~="tone=secondary"][data-v-d830471c] {
8275
+ [data-component~="ui-text"][data-ui-text-state~="tone=secondary"][data-v-2c821f7e] {
8192
8276
  color: var(--ui-text-secondary);
8193
8277
  }
8194
- [data-component~="ui-text"][data-ui-text-state~="tone=muted"][data-v-d830471c] {
8278
+ [data-component~="ui-text"][data-ui-text-state~="tone=muted"][data-v-2c821f7e] {
8195
8279
  color: var(--ui-text-muted);
8196
8280
  }
8197
- [data-component~="ui-text"][data-ui-text-state~="tone=accent"][data-v-d830471c] {
8281
+ [data-component~="ui-text"][data-ui-text-state~="tone=accent"][data-v-2c821f7e] {
8198
8282
  color: var(--ui-accent-active);
8199
8283
  }
8200
8284
  /* Every status tone uses the text-safe token a subtle badge sets its words in, so text and badges
8201
8285
  in one tone match, and each holds 4.5:1 on sunken surfaces where some base colours fall short. */
8202
- [data-component~="ui-text"][data-ui-text-state~="tone=danger"][data-v-d830471c] {
8286
+ [data-component~="ui-text"][data-ui-text-state~="tone=danger"][data-v-2c821f7e] {
8203
8287
  color: var(--ui-danger-subtle-text);
8204
8288
  }
8205
- [data-component~="ui-text"][data-ui-text-state~="tone=success"][data-v-d830471c] {
8289
+ [data-component~="ui-text"][data-ui-text-state~="tone=success"][data-v-2c821f7e] {
8206
8290
  color: var(--ui-success-subtle-text);
8207
8291
  }
8208
- [data-component~="ui-text"][data-ui-text-state~="tone=info"][data-v-d830471c] {
8292
+ [data-component~="ui-text"][data-ui-text-state~="tone=info"][data-v-2c821f7e] {
8209
8293
  color: var(--ui-info-subtle-text);
8210
8294
  }
8211
- [data-component~="ui-text"][data-ui-text-state~="tone=warning"][data-v-d830471c] {
8295
+ [data-component~="ui-text"][data-ui-text-state~="tone=warning"][data-v-2c821f7e] {
8212
8296
  color: var(--ui-warning-subtle-text);
8213
8297
  }
8214
- [data-component~="ui-text"][data-ui-text-state~="weight=normal"][data-v-d830471c] {
8298
+ [data-component~="ui-text"][data-ui-text-state~="weight=normal"][data-v-2c821f7e] {
8215
8299
  font-weight: var(--ui-font-normal);
8216
8300
  }
8217
- [data-component~="ui-text"][data-ui-text-state~="weight=medium"][data-v-d830471c] {
8301
+ [data-component~="ui-text"][data-ui-text-state~="weight=medium"][data-v-2c821f7e] {
8218
8302
  font-weight: var(--ui-font-medium);
8219
8303
  }
8220
- [data-component~="ui-text"][data-ui-text-state~="weight=semibold"][data-v-d830471c] {
8304
+ [data-component~="ui-text"][data-ui-text-state~="weight=semibold"][data-v-2c821f7e] {
8221
8305
  font-weight: var(--ui-font-semibold);
8222
8306
  }
8223
- [data-component~="ui-text"][data-ui-text-state~="variant=eyebrow"][data-v-d830471c] {
8307
+ [data-component~="ui-text"][data-ui-text-state~="variant=eyebrow"][data-v-2c821f7e] {
8224
8308
  font-size: var(--ui-font-size-xs);
8225
8309
  font-weight: var(--ui-font-semibold);
8226
8310
  letter-spacing: 0.06em;
8227
8311
  text-transform: uppercase;
8228
8312
  }
8229
- [data-component~="ui-text"][data-ui-text-state~="variant=code"][data-v-d830471c] {
8313
+ [data-component~="ui-text"][data-ui-text-state~="variant=code"][data-v-2c821f7e] {
8230
8314
  font-family: var(--ui-font-family-mono);
8231
8315
  }
8232
8316
 
8233
8317
  /* A link in running text is underlined, so it stands apart from the words around it by more than
8234
8318
  colour. */
8235
- [data-component~="ui-text"] a[data-v-d830471c-s] {
8319
+ [data-component~="ui-text"] a[data-v-2c821f7e-s] {
8236
8320
  color: var(--ui-accent-active);
8237
8321
  text-decoration: underline;
8238
8322
  text-decoration-thickness: 0.06em;
8239
8323
  text-underline-offset: 0.18em;
8240
8324
  }
8241
- [data-component~="ui-text"][data-ui-text-state~="truncate"][data-v-d830471c] {
8325
+ [data-component~="ui-text"][data-ui-text-state~="truncate"][data-v-2c821f7e] {
8242
8326
  overflow: hidden;
8243
8327
  text-overflow: ellipsis;
8244
8328
  white-space: nowrap;
8245
8329
  }
8246
- [data-component~="ui-text"][data-ui-text-state~="align=center"][data-v-d830471c] {
8330
+ [data-component~="ui-text"][data-ui-text-state~="align=center"][data-v-2c821f7e] {
8247
8331
  text-align: center;
8248
8332
  }
8249
- [data-component~="ui-text"][data-ui-text-state~="font=sans"][data-v-d830471c] {
8333
+ [data-component~="ui-text"][data-ui-text-state~="font=sans"][data-v-2c821f7e] {
8250
8334
  font-family: var(--ui-font-family-sans, sans-serif);
8251
8335
  }
8252
- [data-component~="ui-text"][data-ui-text-state~="wrap=anywhere"][data-v-d830471c] {
8336
+ [data-component~="ui-text"][data-ui-text-state~="wrap=anywhere"][data-v-2c821f7e] {
8253
8337
  overflow-wrap: anywhere;
8254
8338
  }
8255
8339
 
8256
8340
  /* A component that sets its display still honours the hidden attribute on its root. */
8257
- [data-component~="ui-text"][hidden][data-v-d830471c] {
8341
+ [data-component~="ui-text"][hidden][data-v-2c821f7e] {
8258
8342
  display: none;
8259
8343
  }
8260
8344
 
@@ -8307,7 +8391,7 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8307
8391
  syntax: "*";
8308
8392
  inherits: false;
8309
8393
  }
8310
- [data-component~="ui-textarea"][data-v-f5b6ae17] {
8394
+ [data-component~="ui-textarea"][data-v-4fc6e397] {
8311
8395
  box-sizing: border-box;
8312
8396
  display: inline-block;
8313
8397
  inline-size: 100%;
@@ -8352,15 +8436,15 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8352
8436
  }
8353
8437
 
8354
8438
  /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
8355
- [data-component~="ui-textarea"][data-v-f5b6ae17]::selection {
8439
+ [data-component~="ui-textarea"][data-v-4fc6e397]::selection {
8356
8440
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
8357
8441
  color: inherit;
8358
8442
  }
8359
- [data-component~="ui-textarea"][data-v-f5b6ae17]::placeholder {
8443
+ [data-component~="ui-textarea"][data-v-4fc6e397]::placeholder {
8360
8444
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
8361
8445
  opacity: 1;
8362
8446
  }
8363
- [data-component~="ui-textarea"][data-v-f5b6ae17]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
8447
+ [data-component~="ui-textarea"][data-v-4fc6e397]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
8364
8448
  border-color: var(
8365
8449
  --ui-textarea-border-hover,
8366
8450
  var(
@@ -8369,7 +8453,7 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8369
8453
  )
8370
8454
  );
8371
8455
  }
8372
- [data-component~="ui-textarea"][data-v-f5b6ae17]:focus-visible {
8456
+ [data-component~="ui-textarea"][data-v-4fc6e397]:focus-visible {
8373
8457
  border-color: var(
8374
8458
  --ui-textarea-focus-border,
8375
8459
  var(--_ui-default-textarea-focus-border, var(--ui-control-focus, var(--ui-accent-solid)))
@@ -8386,14 +8470,14 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8386
8470
  }
8387
8471
 
8388
8472
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
8389
- [data-component~="ui-textarea"][aria-invalid="true"][data-v-f5b6ae17],
8390
- [data-component~="ui-textarea"][data-v-f5b6ae17]:is(:user-invalid, [data-user-invalid]) {
8473
+ [data-component~="ui-textarea"][aria-invalid="true"][data-v-4fc6e397],
8474
+ [data-component~="ui-textarea"][data-v-4fc6e397]:is(:user-invalid, [data-user-invalid]) {
8391
8475
  border-color: var(
8392
8476
  --ui-textarea-invalid-border,
8393
8477
  var(--_ui-default-textarea-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)))
8394
8478
  );
8395
8479
  }
8396
- [data-component~="ui-textarea"][data-v-f5b6ae17]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
8480
+ [data-component~="ui-textarea"][data-v-4fc6e397]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
8397
8481
  box-shadow: var(
8398
8482
  --ui-textarea-invalid-focus-shadow,
8399
8483
  var(
@@ -8410,13 +8494,13 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8410
8494
  )
8411
8495
  );
8412
8496
  }
8413
- [data-component~="ui-textarea"][data-v-f5b6ae17]:disabled {
8497
+ [data-component~="ui-textarea"][data-v-4fc6e397]:disabled {
8414
8498
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
8415
8499
  color: var(--ui-disabled-text);
8416
8500
  box-shadow: none;
8417
8501
  cursor: not-allowed;
8418
8502
  }
8419
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-f5b6ae17] {
8503
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-4fc6e397] {
8420
8504
  --_padding-block: var(--ui-space-1);
8421
8505
  padding: var(--ui-space-1) var(--ui-space-2);
8422
8506
  padding-inline-end: var(
@@ -8425,7 +8509,7 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8425
8509
  );
8426
8510
  font-size: var(--ui-font-size-sm);
8427
8511
  }
8428
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=lg"][data-v-f5b6ae17] {
8512
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=lg"][data-v-4fc6e397] {
8429
8513
  --_padding-block: var(--ui-space-3);
8430
8514
  padding: var(--ui-space-3) var(--ui-space-4);
8431
8515
  padding-inline-end: var(
@@ -8434,8 +8518,13 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8434
8518
  );
8435
8519
  font-size: var(--ui-font-size-md);
8436
8520
  }
8521
+ [data-component~="ui-textarea"][data-ui-textarea-state~="maxRows"][data-v-4fc6e397] {
8522
+ max-block-size: calc(
8523
+ max(var(--_rows), var(--_max-rows)) * 1lh + var(--_padding-block) + var(--_padding-block) + 2px
8524
+ );
8525
+ }
8437
8526
  @supports (field-sizing: content) {
8438
- [data-component~="ui-textarea"][data-ui-textarea-state~="autosize"][data-v-f5b6ae17] {
8527
+ [data-component~="ui-textarea"][data-ui-textarea-state~="autosize"][data-v-4fc6e397] {
8439
8528
  field-sizing: content;
8440
8529
  min-block-size: calc(var(--_rows) * 1lh + var(--_padding-block) + var(--_padding-block) + 2px);
8441
8530
  }
@@ -8443,13 +8532,13 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8443
8532
 
8444
8533
  /* Below 16px, iOS zooms the page into the focused field, so touch keeps body-size text. */
8445
8534
  @media (pointer: coarse) {
8446
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-f5b6ae17] {
8535
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-4fc6e397] {
8447
8536
  font-size: inherit;
8448
8537
  }
8449
8538
  }
8450
8539
 
8451
8540
  /* A component that sets its display still honours the hidden attribute on its root. */
8452
- [data-component~="ui-textarea"][hidden][data-v-f5b6ae17] {
8541
+ [data-component~="ui-textarea"][hidden][data-v-4fc6e397] {
8453
8542
  display: none;
8454
8543
  }
8455
8544
 
@@ -9410,24 +9499,12 @@ html[data-ui-input-modality="touch"]
9410
9499
  [data-component~="ui-tree-item"][hidden][data-v-f2ec0a81] {
9411
9500
  display: none;
9412
9501
  }
9413
- /**
9414
- * Looma editor styles (tokens-based).
9415
- * Tables, context menu, insert-table grid, slash menu. Use with ProseMirror/Tiptap content.
9416
- */
9417
-
9418
- /* Turnkey editor */
9419
- .looma-editor {
9420
- position: relative;
9421
- min-width: 0;
9422
- color: var(--ui-text-primary);
9423
- font-family: var(--ui-font-family-sans);
9424
- }
9425
-
9426
- .looma-editor .ProseMirror {
9427
- min-height: var(--ui-editor-content-min-height, 300px);
9502
+ /* The editor surface owns its renderer canvas. Existing hooks retain their defaults. */
9503
+ [data-component~="ui-editor-surface"] .ProseMirror {
9504
+ min-height: var(--ui-editor-content-min-height, var(--_ui-editor-content-min-height, 300px));
9428
9505
  padding:
9429
- var(--ui-editor-content-padding-block, var(--ui-space-4))
9430
- var(--ui-editor-content-padding-inline, var(--ui-space-6));
9506
+ var(--ui-editor-content-padding-block, var(--_ui-editor-content-padding-block, var(--ui-space-4)))
9507
+ var(--ui-editor-content-padding-inline, var(--_ui-editor-content-padding-inline, var(--ui-space-6)));
9431
9508
  outline: none;
9432
9509
  color: var(--ui-editor-content-color, var(--ui-text-primary));
9433
9510
  caret-color: var(--ui-editor-caret-color, var(--ui-accent-solid));
@@ -9437,11 +9514,27 @@ html[data-ui-input-modality="touch"]
9437
9514
  }
9438
9515
 
9439
9516
  @media (max-width: 767px) {
9440
- .looma-editor .ProseMirror {
9441
- padding-bottom: var(--ui-editor-mobile-bottom-space, 80px);
9517
+ [data-component~="ui-editor-surface"] .ProseMirror {
9518
+ padding-bottom: var(--ui-editor-mobile-bottom-space, var(--_ui-editor-mobile-bottom-space, 80px));
9442
9519
  }
9443
9520
  }
9444
9521
 
9522
+
9523
+ [data-component~="ui-editor-surface"][data-density="compact"] .ProseMirror > :first-child { margin-block-start: 0; }
9524
+ [data-component~="ui-editor-surface"][data-density="compact"] .ProseMirror > :last-child { margin-block-end: 0; }
9525
+ /**
9526
+ * Looma editor styles (tokens-based).
9527
+ * Tables, context menu, insert-table grid, slash menu. Use with ProseMirror/Tiptap content.
9528
+ */
9529
+
9530
+ /* Turnkey editor */
9531
+ .looma-editor {
9532
+ position: relative;
9533
+ min-width: 0;
9534
+ color: var(--ui-text-primary);
9535
+ font-family: var(--ui-font-family-sans);
9536
+ }
9537
+
9445
9538
  /*
9446
9539
  * Marker for the block being edited, drawn in the gutter beside the text rather
9447
9540
  * than around it: a border or fill on the reading column reads as a form field.