@cratis/components 4.24.0 → 4.25.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 (201) hide show
  1. package/compat-manifest.json +11 -11
  2. package/dist/esm/CommandDialog/CommandDialog.d.ts.map +1 -1
  3. package/dist/esm/CommandDialog/CommandDialog.js +1 -1
  4. package/dist/esm/CommandDialog/CommandDialog.js.map +1 -1
  5. package/dist/esm/Common/CratisComponentsProvider.d.ts +2 -0
  6. package/dist/esm/Common/CratisComponentsProvider.d.ts.map +1 -1
  7. package/dist/esm/Common/CratisComponentsProvider.js.map +1 -1
  8. package/dist/esm/ConfigurationEditor/ConfigurationDestination.d.ts +13 -0
  9. package/dist/esm/ConfigurationEditor/ConfigurationDestination.d.ts.map +1 -0
  10. package/dist/esm/ConfigurationEditor/ConfigurationDestination.js +4 -0
  11. package/dist/esm/ConfigurationEditor/ConfigurationDestination.js.map +1 -0
  12. package/dist/esm/ConfigurationEditor/ConfigurationEditor.d.ts +27 -0
  13. package/dist/esm/ConfigurationEditor/ConfigurationEditor.d.ts.map +1 -0
  14. package/dist/esm/ConfigurationEditor/ConfigurationEditor.js +13 -0
  15. package/dist/esm/ConfigurationEditor/ConfigurationEditor.js.map +1 -0
  16. package/dist/esm/ConfigurationEditor/ConfigurationEditorPartAttributes.d.ts +6 -0
  17. package/dist/esm/ConfigurationEditor/ConfigurationEditorPartAttributes.d.ts.map +1 -0
  18. package/dist/esm/ConfigurationEditor/ConfigurationEditorPartAttributes.js +4 -0
  19. package/dist/esm/ConfigurationEditor/ConfigurationEditorPartAttributes.js.map +1 -0
  20. package/dist/esm/ConfigurationEditor/ConfigurationEditorProvider.d.ts +28 -0
  21. package/dist/esm/ConfigurationEditor/ConfigurationEditorProvider.d.ts.map +1 -0
  22. package/dist/esm/ConfigurationEditor/ConfigurationEditorProvider.js +16 -0
  23. package/dist/esm/ConfigurationEditor/ConfigurationEditorProvider.js.map +1 -0
  24. package/dist/esm/ConfigurationEditor/ConfigurationEditorRenderProps.d.ts +20 -0
  25. package/dist/esm/ConfigurationEditor/ConfigurationEditorRenderProps.d.ts.map +1 -0
  26. package/dist/esm/ConfigurationEditor/ConfigurationEditorRenderProps.js +4 -0
  27. package/dist/esm/ConfigurationEditor/ConfigurationEditorRenderProps.js.map +1 -0
  28. package/dist/esm/ConfigurationEditor/ConfigurationEditorRenderer.d.ts +5 -0
  29. package/dist/esm/ConfigurationEditor/ConfigurationEditorRenderer.d.ts.map +1 -0
  30. package/dist/esm/ConfigurationEditor/ConfigurationEditorRenderer.js +4 -0
  31. package/dist/esm/ConfigurationEditor/ConfigurationEditorRenderer.js.map +1 -0
  32. package/dist/esm/ConfigurationEditor/ConfigurationIconReference.d.ts +17 -0
  33. package/dist/esm/ConfigurationEditor/ConfigurationIconReference.d.ts.map +1 -0
  34. package/dist/esm/ConfigurationEditor/ConfigurationIconReference.js +4 -0
  35. package/dist/esm/ConfigurationEditor/ConfigurationIconReference.js.map +1 -0
  36. package/dist/esm/ConfigurationEditor/OrderedItem.d.ts +16 -0
  37. package/dist/esm/ConfigurationEditor/OrderedItem.d.ts.map +1 -0
  38. package/dist/esm/ConfigurationEditor/OrderedItem.js +4 -0
  39. package/dist/esm/ConfigurationEditor/OrderedItem.js.map +1 -0
  40. package/dist/esm/ConfigurationEditor/OrderedItemCapabilities.d.ts +23 -0
  41. package/dist/esm/ConfigurationEditor/OrderedItemCapabilities.d.ts.map +1 -0
  42. package/dist/esm/ConfigurationEditor/OrderedItemCapabilities.js +4 -0
  43. package/dist/esm/ConfigurationEditor/OrderedItemCapabilities.js.map +1 -0
  44. package/dist/esm/ConfigurationEditor/OrderedItemDestinationField.d.ts +22 -0
  45. package/dist/esm/ConfigurationEditor/OrderedItemDestinationField.d.ts.map +1 -0
  46. package/dist/esm/ConfigurationEditor/OrderedItemDestinationField.js +23 -0
  47. package/dist/esm/ConfigurationEditor/OrderedItemDestinationField.js.map +1 -0
  48. package/dist/esm/ConfigurationEditor/OrderedItemEditor.d.ts +74 -0
  49. package/dist/esm/ConfigurationEditor/OrderedItemEditor.d.ts.map +1 -0
  50. package/dist/esm/ConfigurationEditor/OrderedItemEditor.js +188 -0
  51. package/dist/esm/ConfigurationEditor/OrderedItemEditor.js.map +1 -0
  52. package/dist/esm/ConfigurationEditor/OrderedItemEditorParts.d.ts +43 -0
  53. package/dist/esm/ConfigurationEditor/OrderedItemEditorParts.d.ts.map +1 -0
  54. package/dist/esm/ConfigurationEditor/OrderedItemEditorParts.js +4 -0
  55. package/dist/esm/ConfigurationEditor/OrderedItemEditorParts.js.map +1 -0
  56. package/dist/esm/ConfigurationEditor/OrderedItemField.d.ts +3 -0
  57. package/dist/esm/ConfigurationEditor/OrderedItemField.d.ts.map +1 -0
  58. package/dist/esm/ConfigurationEditor/OrderedItemField.js +4 -0
  59. package/dist/esm/ConfigurationEditor/OrderedItemField.js.map +1 -0
  60. package/dist/esm/ConfigurationEditor/OrderedItemFieldAccess.d.ts +9 -0
  61. package/dist/esm/ConfigurationEditor/OrderedItemFieldAccess.d.ts.map +1 -0
  62. package/dist/esm/ConfigurationEditor/OrderedItemFieldAccess.js +4 -0
  63. package/dist/esm/ConfigurationEditor/OrderedItemFieldAccess.js.map +1 -0
  64. package/dist/esm/ConfigurationEditor/OrderedItemIconField.d.ts +32 -0
  65. package/dist/esm/ConfigurationEditor/OrderedItemIconField.d.ts.map +1 -0
  66. package/dist/esm/ConfigurationEditor/OrderedItemIconField.js +26 -0
  67. package/dist/esm/ConfigurationEditor/OrderedItemIconField.js.map +1 -0
  68. package/dist/esm/ConfigurationEditor/OrderedItemIconFieldProps.d.ts +26 -0
  69. package/dist/esm/ConfigurationEditor/OrderedItemIconFieldProps.d.ts.map +1 -0
  70. package/dist/esm/ConfigurationEditor/OrderedItemIconFieldProps.js +4 -0
  71. package/dist/esm/ConfigurationEditor/OrderedItemIconFieldProps.js.map +1 -0
  72. package/dist/esm/ConfigurationEditor/OrderedItemLabels.d.ts +47 -0
  73. package/dist/esm/ConfigurationEditor/OrderedItemLabels.d.ts.map +1 -0
  74. package/dist/esm/ConfigurationEditor/OrderedItemLabels.js +4 -0
  75. package/dist/esm/ConfigurationEditor/OrderedItemLabels.js.map +1 -0
  76. package/dist/esm/ConfigurationEditor/OrderedItemOperation.d.ts +3 -0
  77. package/dist/esm/ConfigurationEditor/OrderedItemOperation.d.ts.map +1 -0
  78. package/dist/esm/ConfigurationEditor/OrderedItemOperation.js +4 -0
  79. package/dist/esm/ConfigurationEditor/OrderedItemOperation.js.map +1 -0
  80. package/dist/esm/ConfigurationEditor/OrderedItemProposal.d.ts +45 -0
  81. package/dist/esm/ConfigurationEditor/OrderedItemProposal.d.ts.map +1 -0
  82. package/dist/esm/ConfigurationEditor/OrderedItemProposal.js +4 -0
  83. package/dist/esm/ConfigurationEditor/OrderedItemProposal.js.map +1 -0
  84. package/dist/esm/ConfigurationEditor/OrderedItemRow.d.ts +5 -0
  85. package/dist/esm/ConfigurationEditor/OrderedItemRow.d.ts.map +1 -0
  86. package/dist/esm/ConfigurationEditor/OrderedItemRow.js +59 -0
  87. package/dist/esm/ConfigurationEditor/OrderedItemRow.js.map +1 -0
  88. package/dist/esm/ConfigurationEditor/OrderedItemRowProps.d.ts +43 -0
  89. package/dist/esm/ConfigurationEditor/OrderedItemRowProps.d.ts.map +1 -0
  90. package/dist/esm/ConfigurationEditor/OrderedItemRowProps.js +4 -0
  91. package/dist/esm/ConfigurationEditor/OrderedItemRowProps.js.map +1 -0
  92. package/dist/esm/ConfigurationEditor/OrderedItemValidation.d.ts +7 -0
  93. package/dist/esm/ConfigurationEditor/OrderedItemValidation.d.ts.map +1 -0
  94. package/dist/esm/ConfigurationEditor/OrderedItemValidation.js +4 -0
  95. package/dist/esm/ConfigurationEditor/OrderedItemValidation.js.map +1 -0
  96. package/dist/esm/ConfigurationEditor/PropertyChangeProposal.d.ts +15 -0
  97. package/dist/esm/ConfigurationEditor/PropertyChangeProposal.d.ts.map +1 -0
  98. package/dist/esm/ConfigurationEditor/PropertyChangeProposal.js +4 -0
  99. package/dist/esm/ConfigurationEditor/PropertyChangeProposal.js.map +1 -0
  100. package/dist/esm/ConfigurationEditor/PropertyChoice.d.ts +8 -0
  101. package/dist/esm/ConfigurationEditor/PropertyChoice.d.ts.map +1 -0
  102. package/dist/esm/ConfigurationEditor/PropertyChoice.js +4 -0
  103. package/dist/esm/ConfigurationEditor/PropertyChoice.js.map +1 -0
  104. package/dist/esm/ConfigurationEditor/PropertyControl.d.ts +17 -0
  105. package/dist/esm/ConfigurationEditor/PropertyControl.d.ts.map +1 -0
  106. package/dist/esm/ConfigurationEditor/PropertyControl.js +88 -0
  107. package/dist/esm/ConfigurationEditor/PropertyControl.js.map +1 -0
  108. package/dist/esm/ConfigurationEditor/PropertyControls.d.ts +40 -0
  109. package/dist/esm/ConfigurationEditor/PropertyControls.d.ts.map +1 -0
  110. package/dist/esm/ConfigurationEditor/PropertyControls.js +41 -0
  111. package/dist/esm/ConfigurationEditor/PropertyControls.js.map +1 -0
  112. package/dist/esm/ConfigurationEditor/PropertyControlsLabels.d.ts +18 -0
  113. package/dist/esm/ConfigurationEditor/PropertyControlsLabels.d.ts.map +1 -0
  114. package/dist/esm/ConfigurationEditor/PropertyControlsLabels.js +4 -0
  115. package/dist/esm/ConfigurationEditor/PropertyControlsLabels.js.map +1 -0
  116. package/dist/esm/ConfigurationEditor/PropertyControlsParts.d.ts +31 -0
  117. package/dist/esm/ConfigurationEditor/PropertyControlsParts.d.ts.map +1 -0
  118. package/dist/esm/ConfigurationEditor/PropertyControlsParts.js +4 -0
  119. package/dist/esm/ConfigurationEditor/PropertyControlsParts.js.map +1 -0
  120. package/dist/esm/ConfigurationEditor/PropertyDescriptor.d.ts +55 -0
  121. package/dist/esm/ConfigurationEditor/PropertyDescriptor.d.ts.map +1 -0
  122. package/dist/esm/ConfigurationEditor/PropertyDescriptor.js +4 -0
  123. package/dist/esm/ConfigurationEditor/PropertyDescriptor.js.map +1 -0
  124. package/dist/esm/ConfigurationEditor/PropertyGroup.d.ts +16 -0
  125. package/dist/esm/ConfigurationEditor/PropertyGroup.d.ts.map +1 -0
  126. package/dist/esm/ConfigurationEditor/PropertyGroup.js +4 -0
  127. package/dist/esm/ConfigurationEditor/PropertyGroup.js.map +1 -0
  128. package/dist/esm/ConfigurationEditor/defaultOrderedItemLabels.d.ts +4 -0
  129. package/dist/esm/ConfigurationEditor/defaultOrderedItemLabels.d.ts.map +1 -0
  130. package/dist/esm/ConfigurationEditor/defaultOrderedItemLabels.js +25 -0
  131. package/dist/esm/ConfigurationEditor/defaultOrderedItemLabels.js.map +1 -0
  132. package/dist/esm/ConfigurationEditor/defaultPropertyControlsLabels.d.ts +4 -0
  133. package/dist/esm/ConfigurationEditor/defaultPropertyControlsLabels.d.ts.map +1 -0
  134. package/dist/esm/ConfigurationEditor/defaultPropertyControlsLabels.js +12 -0
  135. package/dist/esm/ConfigurationEditor/defaultPropertyControlsLabels.js.map +1 -0
  136. package/dist/esm/ConfigurationEditor/index.d.ts +32 -0
  137. package/dist/esm/ConfigurationEditor/index.d.ts.map +1 -0
  138. package/dist/esm/ConfigurationEditor/index.js +7 -0
  139. package/dist/esm/ConfigurationEditor/index.js.map +1 -0
  140. package/dist/esm/ConfigurationEditor/moveOrderedItem.d.ts +5 -0
  141. package/dist/esm/ConfigurationEditor/moveOrderedItem.d.ts.map +1 -0
  142. package/dist/esm/ConfigurationEditor/moveOrderedItem.js +9 -0
  143. package/dist/esm/ConfigurationEditor/moveOrderedItem.js.map +1 -0
  144. package/dist/esm/ConfigurationEditor/resolveOrderedItemDropIndex.d.ts +10 -0
  145. package/dist/esm/ConfigurationEditor/resolveOrderedItemDropIndex.d.ts.map +1 -0
  146. package/dist/esm/ConfigurationEditor/resolveOrderedItemDropIndex.js +7 -0
  147. package/dist/esm/ConfigurationEditor/resolveOrderedItemDropIndex.js.map +1 -0
  148. package/dist/esm/ConfigurationEditor/resolveOrderedItemFieldAccess.d.ts +6 -0
  149. package/dist/esm/ConfigurationEditor/resolveOrderedItemFieldAccess.d.ts.map +1 -0
  150. package/dist/esm/ConfigurationEditor/resolveOrderedItemFieldAccess.js +4 -0
  151. package/dist/esm/ConfigurationEditor/resolveOrderedItemFieldAccess.js.map +1 -0
  152. package/dist/esm/ConfigurationEditor/resolveOrderedItemLabels.d.ts +4 -0
  153. package/dist/esm/ConfigurationEditor/resolveOrderedItemLabels.d.ts.map +1 -0
  154. package/dist/esm/ConfigurationEditor/resolveOrderedItemLabels.js +13 -0
  155. package/dist/esm/ConfigurationEditor/resolveOrderedItemLabels.js.map +1 -0
  156. package/dist/esm/ConfigurationEditor/validateOrderedItem.d.ts +18 -0
  157. package/dist/esm/ConfigurationEditor/validateOrderedItem.d.ts.map +1 -0
  158. package/dist/esm/ConfigurationEditor/validateOrderedItem.js +21 -0
  159. package/dist/esm/ConfigurationEditor/validateOrderedItem.js.map +1 -0
  160. package/dist/esm/Toolbar/ToolbarButton.d.ts +4 -1
  161. package/dist/esm/Toolbar/ToolbarButton.d.ts.map +1 -1
  162. package/dist/esm/Toolbar/ToolbarButton.js +12 -2
  163. package/dist/esm/Toolbar/ToolbarButton.js.map +1 -1
  164. package/dist/esm/Toolbar/ToolbarDrawerContext.d.ts +13 -0
  165. package/dist/esm/Toolbar/ToolbarDrawerContext.d.ts.map +1 -0
  166. package/dist/esm/Toolbar/ToolbarDrawerContext.js +7 -0
  167. package/dist/esm/Toolbar/ToolbarDrawerContext.js.map +1 -0
  168. package/dist/esm/Toolbar/ToolbarDrawerItem.d.ts +23 -0
  169. package/dist/esm/Toolbar/ToolbarDrawerItem.d.ts.map +1 -0
  170. package/dist/esm/Toolbar/ToolbarDrawerItem.js +4 -0
  171. package/dist/esm/Toolbar/ToolbarDrawerItem.js.map +1 -0
  172. package/dist/esm/Toolbar/ToolbarDrawerPlacement.d.ts +57 -0
  173. package/dist/esm/Toolbar/ToolbarDrawerPlacement.d.ts.map +1 -0
  174. package/dist/esm/Toolbar/ToolbarDrawerPlacement.js +51 -0
  175. package/dist/esm/Toolbar/ToolbarDrawerPlacement.js.map +1 -0
  176. package/dist/esm/Toolbar/ToolbarDrawerTile.d.ts +43 -0
  177. package/dist/esm/Toolbar/ToolbarDrawerTile.d.ts.map +1 -0
  178. package/dist/esm/Toolbar/ToolbarDrawerTile.js +31 -0
  179. package/dist/esm/Toolbar/ToolbarDrawerTile.js.map +1 -0
  180. package/dist/esm/Toolbar/ToolbarFolder.d.ts +51 -5
  181. package/dist/esm/Toolbar/ToolbarFolder.d.ts.map +1 -1
  182. package/dist/esm/Toolbar/ToolbarFolder.js +109 -10
  183. package/dist/esm/Toolbar/ToolbarFolder.js.map +1 -1
  184. package/dist/esm/Toolbar/ToolbarFolderPresentation.d.ts +8 -0
  185. package/dist/esm/Toolbar/ToolbarFolderPresentation.d.ts.map +1 -0
  186. package/dist/esm/Toolbar/ToolbarFolderPresentation.js +4 -0
  187. package/dist/esm/Toolbar/ToolbarFolderPresentation.js.map +1 -0
  188. package/dist/esm/Toolbar/index.d.ts +2 -0
  189. package/dist/esm/Toolbar/index.d.ts.map +1 -1
  190. package/dist/esm/configuration/CratisComponentsDefaults.d.ts.map +1 -1
  191. package/dist/esm/configuration/CratisComponentsDefaults.js +1 -0
  192. package/dist/esm/configuration/CratisComponentsDefaults.js.map +1 -1
  193. package/dist/esm/styles.ConfigurationEditor.css +710 -0
  194. package/dist/esm/styles.IconPicker.css +5 -0
  195. package/dist/esm/styles.Toolbar.css +174 -0
  196. package/dist/esm/styles.css +425 -0
  197. package/dist/esm/types/parts.d.ts +41 -1
  198. package/dist/esm/types/parts.d.ts.map +1 -1
  199. package/dist/esm/types/parts.js +41 -1
  200. package/dist/esm/types/parts.js.map +1 -1
  201. package/package.json +6 -1
@@ -1463,6 +1463,179 @@
1463
1463
  min-width: 10rem;
1464
1464
  }
1465
1465
 
1466
+ /* ── Toolbar folder — headed drawer ──────────────────────────────────────── */
1467
+
1468
+ /*
1469
+ * The drawer is an opt-in presentation of the folder panel: a visible header with a close action,
1470
+ * followed by labeled tiles. Placement is computed at runtime and handed over through custom
1471
+ * properties (shift along the cross axis, push back over the toolbar, size limits); the data-side
1472
+ * attribute selects the side of the trigger the drawer opens towards.
1473
+ */
1474
+ .toolbar-folder-panel--drawer {
1475
+ display: flex;
1476
+ flex-direction: column;
1477
+ gap: 0.5rem;
1478
+ padding: 0.75rem;
1479
+ width: max-content;
1480
+ max-width: var(--toolbar-drawer-max-width, calc(100vw - 1rem));
1481
+ max-height: var(--toolbar-drawer-max-height, calc(100vh - 1rem));
1482
+ overflow: auto;
1483
+ overscroll-behavior: contain;
1484
+ clip-path: none;
1485
+ transform: translate(var(--toolbar-drawer-main-shift, 0), calc(-50% + var(--toolbar-drawer-shift, 0px))) scale(0.96);
1486
+ transition:
1487
+ transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
1488
+ opacity 0.2s ease;
1489
+ }
1490
+
1491
+ .toolbar-folder-panel--drawer.toolbar-folder-panel--visible {
1492
+ transform: translate(var(--toolbar-drawer-main-shift, 0), calc(-50% + var(--toolbar-drawer-shift, 0px))) scale(1);
1493
+ }
1494
+
1495
+ .toolbar-folder-panel--drawer[data-side='left'] {
1496
+ left: auto;
1497
+ right: calc(100% + 0.75rem);
1498
+ transform-origin: right center;
1499
+ }
1500
+
1501
+ .toolbar-folder-panel--drawer[data-side='right'] {
1502
+ left: calc(100% + 0.75rem);
1503
+ right: auto;
1504
+ transform-origin: left center;
1505
+ }
1506
+
1507
+ .toolbar-folder-panel--drawer[data-side='bottom'],
1508
+ .toolbar-folder-panel--drawer[data-side='top'] {
1509
+ left: 50%;
1510
+ right: auto;
1511
+ transform-origin: center top;
1512
+ transform: translate(calc(-50% + var(--toolbar-drawer-shift, 0px)), var(--toolbar-drawer-main-shift, 0)) scale(0.96);
1513
+ }
1514
+
1515
+ .toolbar-folder-panel--drawer[data-side='bottom'].toolbar-folder-panel--visible,
1516
+ .toolbar-folder-panel--drawer[data-side='top'].toolbar-folder-panel--visible {
1517
+ transform: translate(calc(-50% + var(--toolbar-drawer-shift, 0px)), var(--toolbar-drawer-main-shift, 0)) scale(1);
1518
+ }
1519
+
1520
+ .toolbar-folder-panel--drawer[data-side='bottom'] {
1521
+ top: calc(100% + 0.75rem);
1522
+ bottom: auto;
1523
+ }
1524
+
1525
+ .toolbar-folder-panel--drawer[data-side='top'] {
1526
+ top: auto;
1527
+ bottom: calc(100% + 0.75rem);
1528
+ transform-origin: center bottom;
1529
+ }
1530
+
1531
+ /* A drag is in flight: keep the drawer in place, but let the surface underneath read as the target. */
1532
+ .toolbar-folder-panel--drawer[data-dragging] {
1533
+ opacity: 0.85;
1534
+ }
1535
+
1536
+ .toolbar-drawer-header {
1537
+ display: flex;
1538
+ align-items: center;
1539
+ justify-content: space-between;
1540
+ gap: 0.75rem;
1541
+ padding: 0 0.25rem;
1542
+ }
1543
+
1544
+ .toolbar-drawer-title {
1545
+ font-size: 0.875rem;
1546
+ font-weight: 600;
1547
+ color: var(--cratis-text-color);
1548
+ overflow-wrap: anywhere;
1549
+ }
1550
+
1551
+ .toolbar-drawer-close {
1552
+ flex: 0 0 auto;
1553
+ display: flex;
1554
+ align-items: center;
1555
+ justify-content: center;
1556
+ width: 2rem;
1557
+ height: 2rem;
1558
+ border-radius: 0.5rem;
1559
+ cursor: pointer;
1560
+ }
1561
+
1562
+ /*
1563
+ * Tiles flow into as many columns as fit; the column count requested by the folder caps the width,
1564
+ * so a narrow viewport reflows the tiles instead of clipping them.
1565
+ */
1566
+ .toolbar-drawer-tiles {
1567
+ display: grid;
1568
+ grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr));
1569
+ gap: 0.5rem;
1570
+ width: calc(var(--toolbar-drawer-columns, 3) * 6.5rem + (var(--toolbar-drawer-columns, 3) - 1) * 0.5rem);
1571
+ max-width: 100%;
1572
+ }
1573
+
1574
+ .toolbar-drawer-tile {
1575
+ display: flex;
1576
+ flex-direction: column;
1577
+ align-items: center;
1578
+ justify-content: flex-start;
1579
+ gap: 0.375rem;
1580
+ min-width: 0;
1581
+ min-height: 4.5rem;
1582
+ padding: 0.625rem 0.375rem;
1583
+ border: 1px solid var(--cratis-surface-border);
1584
+ border-radius: 0.75rem;
1585
+ cursor: pointer;
1586
+ text-align: center;
1587
+ }
1588
+
1589
+ .toolbar-drawer-tile:focus-visible,
1590
+ .toolbar-drawer-close:focus-visible {
1591
+ outline: none;
1592
+ box-shadow: var(--cratis-focus-ring);
1593
+ }
1594
+
1595
+ .toolbar-drawer-tile__icon {
1596
+ display: flex;
1597
+ align-items: center;
1598
+ justify-content: center;
1599
+ line-height: 1;
1600
+ }
1601
+
1602
+ /* Long or localized titles wrap and clamp to two lines; the full title stays in the accessible name. */
1603
+ .toolbar-drawer-tile__label {
1604
+ display: -webkit-box;
1605
+ -webkit-box-orient: vertical;
1606
+ -webkit-line-clamp: 2;
1607
+ line-clamp: 2;
1608
+ max-width: 100%;
1609
+ overflow: hidden;
1610
+ overflow-wrap: anywhere;
1611
+ font-size: 0.8125rem;
1612
+ font-weight: 500;
1613
+ line-height: 1.2;
1614
+ }
1615
+
1616
+ /* A disabled tile is dimmed and says so in text for assistive technology; it is never conveyed by opacity alone. */
1617
+ .toolbar-drawer-tile[aria-disabled='true'] {
1618
+ cursor: not-allowed;
1619
+ border-style: dashed;
1620
+ }
1621
+
1622
+ .toolbar-drawer-tile[aria-disabled='true'] .toolbar-drawer-tile__icon,
1623
+ .toolbar-drawer-tile[aria-disabled='true'] .toolbar-drawer-tile__label {
1624
+ opacity: 0.6;
1625
+ }
1626
+
1627
+ .toolbar-drawer-tile__reason {
1628
+ position: absolute;
1629
+ width: 1px;
1630
+ height: 1px;
1631
+ margin: -1px;
1632
+ padding: 0;
1633
+ overflow: hidden;
1634
+ clip-path: inset(50%);
1635
+ white-space: nowrap;
1636
+ border: 0;
1637
+ }
1638
+
1466
1639
  /* ── Toolbar button — list mode ──────────────────────────────────────────── */
1467
1640
 
1468
1641
  /*
@@ -1545,6 +1718,7 @@
1545
1718
  .toolbar-context,
1546
1719
  .toolbar-fanout-panel,
1547
1720
  .toolbar-folder-panel,
1721
+ .toolbar-drawer-tile,
1548
1722
  .toolbar-slot-section,
1549
1723
  .toolbar-slot-incoming,
1550
1724
  .toolbar-slot-outgoing {
@@ -3803,6 +3803,252 @@
3803
3803
  z-index: var(--cratis-z-index-tooltip);
3804
3804
  }
3805
3805
 
3806
+ /* ── ./ConfigurationEditor/ConfigurationEditor.css ─────────────────────────────────────── */
3807
+ /* Copyright (c) Cratis. All rights reserved. */
3808
+ /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
3809
+
3810
+ .cratis-ordered-item-editor,
3811
+ .cratis-property-controls {
3812
+ display: flex;
3813
+ flex-direction: column;
3814
+ gap: 1rem;
3815
+ min-width: 0;
3816
+ color: var(--cratis-text-color);
3817
+ }
3818
+
3819
+ .cratis-ordered-item-editor__section,
3820
+ .cratis-property-controls__group {
3821
+ display: flex;
3822
+ flex-direction: column;
3823
+ gap: 0.5rem;
3824
+ min-width: 0;
3825
+ }
3826
+
3827
+ .cratis-ordered-item-editor__title,
3828
+ .cratis-property-controls__title {
3829
+ margin: 0;
3830
+ font-size: 0.875rem;
3831
+ font-weight: 600;
3832
+ }
3833
+
3834
+ .cratis-ordered-item-editor__list {
3835
+ display: flex;
3836
+ flex-direction: column;
3837
+ gap: 0.5rem;
3838
+ margin: 0;
3839
+ padding: 0;
3840
+ list-style: none;
3841
+ }
3842
+
3843
+ .cratis-ordered-item-editor__empty,
3844
+ .cratis-property-controls__description {
3845
+ margin: 0;
3846
+ color: var(--cratis-text-color-secondary);
3847
+ font-size: 0.875rem;
3848
+ }
3849
+
3850
+ /* ── Items ───────────────────────────────────────────────────────────────── */
3851
+
3852
+ .cratis-ordered-item {
3853
+ position: relative;
3854
+ display: flex;
3855
+ flex-wrap: wrap;
3856
+ align-items: flex-start;
3857
+ gap: 0.5rem;
3858
+ padding: 0.5rem 0.75rem;
3859
+ border: 1px solid var(--cratis-surface-border);
3860
+ border-radius: var(--cratis-border-radius);
3861
+ background: var(--cratis-surface-card);
3862
+ }
3863
+
3864
+ .cratis-ordered-item:focus-visible {
3865
+ outline: none;
3866
+ box-shadow: var(--cratis-focus-ring);
3867
+ }
3868
+
3869
+ /* A locked item is told apart by its dashed border and its "Locked" text, never by opacity. */
3870
+ .cratis-ordered-item[data-locked] {
3871
+ border-style: dashed;
3872
+ background: var(--cratis-surface-100);
3873
+ }
3874
+
3875
+ .cratis-ordered-item[data-dragging] {
3876
+ border-color: var(--cratis-primary-color);
3877
+ }
3878
+
3879
+ .cratis-ordered-item[data-drop-position='before'] {
3880
+ box-shadow: 0 -2px 0 0 var(--cratis-primary-color);
3881
+ }
3882
+
3883
+ .cratis-ordered-item[data-drop-position='after'] {
3884
+ box-shadow: 0 2px 0 0 var(--cratis-primary-color);
3885
+ }
3886
+
3887
+ .cratis-ordered-item__reorder {
3888
+ display: flex;
3889
+ gap: 0.25rem;
3890
+ }
3891
+
3892
+ .cratis-ordered-item__fields {
3893
+ display: flex;
3894
+ flex: 1 1 14rem;
3895
+ flex-direction: column;
3896
+ gap: 0.5rem;
3897
+ min-width: 0;
3898
+ }
3899
+
3900
+ .cratis-ordered-item__text {
3901
+ min-width: 0;
3902
+ overflow-wrap: anywhere;
3903
+ font-size: 0.875rem;
3904
+ }
3905
+
3906
+ .cratis-ordered-item__state {
3907
+ flex: none;
3908
+ padding: 0.125rem 0.5rem;
3909
+ border: 1px solid var(--cratis-surface-border);
3910
+ border-radius: 999px;
3911
+ color: var(--cratis-text-color);
3912
+ font-size: 0.75rem;
3913
+ font-weight: 600;
3914
+ }
3915
+
3916
+ .cratis-ordered-item__input,
3917
+ .cratis-property__input:not([type='checkbox']) {
3918
+ box-sizing: border-box;
3919
+ width: 100%;
3920
+ min-height: var(--cratis-control-height);
3921
+ padding: 0.375rem 0.75rem;
3922
+ border: 1px solid var(--cratis-control-border);
3923
+ border-radius: var(--cratis-border-radius);
3924
+ background: var(--cratis-control-background);
3925
+ color: inherit;
3926
+ font: inherit;
3927
+ }
3928
+
3929
+ .cratis-ordered-item__input:focus-visible,
3930
+ .cratis-property__input:focus-visible {
3931
+ outline: none;
3932
+ box-shadow: var(--cratis-focus-ring);
3933
+ }
3934
+
3935
+ .cratis-ordered-item__input[data-invalid],
3936
+ .cratis-property__input[data-invalid] {
3937
+ border-color: var(--cratis-red-500);
3938
+ border-style: dashed;
3939
+ }
3940
+
3941
+ .cratis-ordered-item__button {
3942
+ display: inline-flex;
3943
+ align-items: center;
3944
+ justify-content: center;
3945
+ min-width: var(--cratis-control-height);
3946
+ min-height: var(--cratis-control-height);
3947
+ padding: 0 0.5rem;
3948
+ border: 1px solid var(--cratis-control-border);
3949
+ border-radius: var(--cratis-border-radius);
3950
+ background: var(--cratis-control-background);
3951
+ color: inherit;
3952
+ font: inherit;
3953
+ cursor: pointer;
3954
+ }
3955
+
3956
+ .cratis-ordered-item__button:hover {
3957
+ background: var(--cratis-surface-hover);
3958
+ }
3959
+
3960
+ .cratis-ordered-item__button:focus-visible {
3961
+ outline: none;
3962
+ box-shadow: var(--cratis-focus-ring);
3963
+ }
3964
+
3965
+ .cratis-ordered-item__button[aria-disabled='true'] {
3966
+ border-style: dashed;
3967
+ color: var(--cratis-text-color-secondary);
3968
+ cursor: not-allowed;
3969
+ }
3970
+
3971
+ .cratis-ordered-item__handle {
3972
+ cursor: grab;
3973
+ }
3974
+
3975
+ .cratis-ordered-item__handle:active {
3976
+ cursor: grabbing;
3977
+ }
3978
+
3979
+ .cratis-ordered-item-editor__add {
3980
+ align-self: flex-start;
3981
+ }
3982
+
3983
+ .cratis-ordered-item__message,
3984
+ .cratis-property__message {
3985
+ margin: 0;
3986
+ font-size: 0.8125rem;
3987
+ color: var(--cratis-red-500);
3988
+ }
3989
+
3990
+ /* A restriction note reads as information, not as an error. */
3991
+ .cratis-ordered-item__message--note,
3992
+ .cratis-property__message--note {
3993
+ color: var(--cratis-text-color-secondary);
3994
+ }
3995
+
3996
+ .cratis-ordered-item__hidden {
3997
+ position: absolute;
3998
+ width: 1px;
3999
+ height: 1px;
4000
+ margin: -1px;
4001
+ padding: 0;
4002
+ overflow: hidden;
4003
+ clip-path: inset(50%);
4004
+ white-space: nowrap;
4005
+ border: 0;
4006
+ }
4007
+
4008
+ /* ── Property controls ───────────────────────────────────────────────────── */
4009
+
4010
+ .cratis-property {
4011
+ display: grid;
4012
+ grid-template-columns: minmax(6rem, 1fr) minmax(0, 2fr) auto;
4013
+ align-items: center;
4014
+ gap: 0.25rem 0.75rem;
4015
+ }
4016
+
4017
+ .cratis-property > .cratis-property__message {
4018
+ grid-column: 2 / -1;
4019
+ }
4020
+
4021
+ .cratis-property__label {
4022
+ font-size: 0.875rem;
4023
+ overflow-wrap: anywhere;
4024
+ }
4025
+
4026
+ .cratis-property__value {
4027
+ font-size: 0.875rem;
4028
+ font-weight: 500;
4029
+ }
4030
+
4031
+ .cratis-property__unit {
4032
+ color: var(--cratis-text-color-secondary);
4033
+ font-size: 0.8125rem;
4034
+ }
4035
+
4036
+ /* Narrow panels: stack the label above its control. */
4037
+ @container (max-width: 22rem) {
4038
+ .cratis-property {
4039
+ grid-template-columns: minmax(0, 1fr);
4040
+ }
4041
+
4042
+ .cratis-property > .cratis-property__message {
4043
+ grid-column: 1;
4044
+ }
4045
+ }
4046
+
4047
+ .cratis-ordered-item-editor,
4048
+ .cratis-property-controls {
4049
+ container-type: inline-size;
4050
+ }
4051
+
3806
4052
  /* ── ./DataTables/ColumnFilterMenu.css ─────────────────────────────────────── */
3807
4053
  /* Copyright (c) Cratis. All rights reserved. */
3808
4054
  /* Licensed under the MIT license. See LICENSE file in the project root for full license information. */
@@ -5702,6 +5948,11 @@
5702
5948
  line-height: 1.2;
5703
5949
  }
5704
5950
 
5951
+ /* The selected tile's highlight background is darker than the surface, so secondary text on it falls short of 4.5:1. */
5952
+ .cratis-icon-picker__tile[data-selected] .cratis-icon-picker__provider {
5953
+ color: var(--cratis-highlight-text-color);
5954
+ }
5955
+
5705
5956
  .cratis-icon-picker__tile .cratis-icon-picker__provider {
5706
5957
  max-width: 100%;
5707
5958
  white-space: normal;
@@ -8386,6 +8637,179 @@
8386
8637
  min-width: 10rem;
8387
8638
  }
8388
8639
 
8640
+ /* ── Toolbar folder — headed drawer ──────────────────────────────────────── */
8641
+
8642
+ /*
8643
+ * The drawer is an opt-in presentation of the folder panel: a visible header with a close action,
8644
+ * followed by labeled tiles. Placement is computed at runtime and handed over through custom
8645
+ * properties (shift along the cross axis, push back over the toolbar, size limits); the data-side
8646
+ * attribute selects the side of the trigger the drawer opens towards.
8647
+ */
8648
+ .toolbar-folder-panel--drawer {
8649
+ display: flex;
8650
+ flex-direction: column;
8651
+ gap: 0.5rem;
8652
+ padding: 0.75rem;
8653
+ width: max-content;
8654
+ max-width: var(--toolbar-drawer-max-width, calc(100vw - 1rem));
8655
+ max-height: var(--toolbar-drawer-max-height, calc(100vh - 1rem));
8656
+ overflow: auto;
8657
+ overscroll-behavior: contain;
8658
+ clip-path: none;
8659
+ transform: translate(var(--toolbar-drawer-main-shift, 0), calc(-50% + var(--toolbar-drawer-shift, 0px))) scale(0.96);
8660
+ transition:
8661
+ transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
8662
+ opacity 0.2s ease;
8663
+ }
8664
+
8665
+ .toolbar-folder-panel--drawer.toolbar-folder-panel--visible {
8666
+ transform: translate(var(--toolbar-drawer-main-shift, 0), calc(-50% + var(--toolbar-drawer-shift, 0px))) scale(1);
8667
+ }
8668
+
8669
+ .toolbar-folder-panel--drawer[data-side='left'] {
8670
+ left: auto;
8671
+ right: calc(100% + 0.75rem);
8672
+ transform-origin: right center;
8673
+ }
8674
+
8675
+ .toolbar-folder-panel--drawer[data-side='right'] {
8676
+ left: calc(100% + 0.75rem);
8677
+ right: auto;
8678
+ transform-origin: left center;
8679
+ }
8680
+
8681
+ .toolbar-folder-panel--drawer[data-side='bottom'],
8682
+ .toolbar-folder-panel--drawer[data-side='top'] {
8683
+ left: 50%;
8684
+ right: auto;
8685
+ transform-origin: center top;
8686
+ transform: translate(calc(-50% + var(--toolbar-drawer-shift, 0px)), var(--toolbar-drawer-main-shift, 0)) scale(0.96);
8687
+ }
8688
+
8689
+ .toolbar-folder-panel--drawer[data-side='bottom'].toolbar-folder-panel--visible,
8690
+ .toolbar-folder-panel--drawer[data-side='top'].toolbar-folder-panel--visible {
8691
+ transform: translate(calc(-50% + var(--toolbar-drawer-shift, 0px)), var(--toolbar-drawer-main-shift, 0)) scale(1);
8692
+ }
8693
+
8694
+ .toolbar-folder-panel--drawer[data-side='bottom'] {
8695
+ top: calc(100% + 0.75rem);
8696
+ bottom: auto;
8697
+ }
8698
+
8699
+ .toolbar-folder-panel--drawer[data-side='top'] {
8700
+ top: auto;
8701
+ bottom: calc(100% + 0.75rem);
8702
+ transform-origin: center bottom;
8703
+ }
8704
+
8705
+ /* A drag is in flight: keep the drawer in place, but let the surface underneath read as the target. */
8706
+ .toolbar-folder-panel--drawer[data-dragging] {
8707
+ opacity: 0.85;
8708
+ }
8709
+
8710
+ .toolbar-drawer-header {
8711
+ display: flex;
8712
+ align-items: center;
8713
+ justify-content: space-between;
8714
+ gap: 0.75rem;
8715
+ padding: 0 0.25rem;
8716
+ }
8717
+
8718
+ .toolbar-drawer-title {
8719
+ font-size: 0.875rem;
8720
+ font-weight: 600;
8721
+ color: var(--cratis-text-color);
8722
+ overflow-wrap: anywhere;
8723
+ }
8724
+
8725
+ .toolbar-drawer-close {
8726
+ flex: 0 0 auto;
8727
+ display: flex;
8728
+ align-items: center;
8729
+ justify-content: center;
8730
+ width: 2rem;
8731
+ height: 2rem;
8732
+ border-radius: 0.5rem;
8733
+ cursor: pointer;
8734
+ }
8735
+
8736
+ /*
8737
+ * Tiles flow into as many columns as fit; the column count requested by the folder caps the width,
8738
+ * so a narrow viewport reflows the tiles instead of clipping them.
8739
+ */
8740
+ .toolbar-drawer-tiles {
8741
+ display: grid;
8742
+ grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr));
8743
+ gap: 0.5rem;
8744
+ width: calc(var(--toolbar-drawer-columns, 3) * 6.5rem + (var(--toolbar-drawer-columns, 3) - 1) * 0.5rem);
8745
+ max-width: 100%;
8746
+ }
8747
+
8748
+ .toolbar-drawer-tile {
8749
+ display: flex;
8750
+ flex-direction: column;
8751
+ align-items: center;
8752
+ justify-content: flex-start;
8753
+ gap: 0.375rem;
8754
+ min-width: 0;
8755
+ min-height: 4.5rem;
8756
+ padding: 0.625rem 0.375rem;
8757
+ border: 1px solid var(--cratis-surface-border);
8758
+ border-radius: 0.75rem;
8759
+ cursor: pointer;
8760
+ text-align: center;
8761
+ }
8762
+
8763
+ .toolbar-drawer-tile:focus-visible,
8764
+ .toolbar-drawer-close:focus-visible {
8765
+ outline: none;
8766
+ box-shadow: var(--cratis-focus-ring);
8767
+ }
8768
+
8769
+ .toolbar-drawer-tile__icon {
8770
+ display: flex;
8771
+ align-items: center;
8772
+ justify-content: center;
8773
+ line-height: 1;
8774
+ }
8775
+
8776
+ /* Long or localized titles wrap and clamp to two lines; the full title stays in the accessible name. */
8777
+ .toolbar-drawer-tile__label {
8778
+ display: -webkit-box;
8779
+ -webkit-box-orient: vertical;
8780
+ -webkit-line-clamp: 2;
8781
+ line-clamp: 2;
8782
+ max-width: 100%;
8783
+ overflow: hidden;
8784
+ overflow-wrap: anywhere;
8785
+ font-size: 0.8125rem;
8786
+ font-weight: 500;
8787
+ line-height: 1.2;
8788
+ }
8789
+
8790
+ /* A disabled tile is dimmed and says so in text for assistive technology; it is never conveyed by opacity alone. */
8791
+ .toolbar-drawer-tile[aria-disabled='true'] {
8792
+ cursor: not-allowed;
8793
+ border-style: dashed;
8794
+ }
8795
+
8796
+ .toolbar-drawer-tile[aria-disabled='true'] .toolbar-drawer-tile__icon,
8797
+ .toolbar-drawer-tile[aria-disabled='true'] .toolbar-drawer-tile__label {
8798
+ opacity: 0.6;
8799
+ }
8800
+
8801
+ .toolbar-drawer-tile__reason {
8802
+ position: absolute;
8803
+ width: 1px;
8804
+ height: 1px;
8805
+ margin: -1px;
8806
+ padding: 0;
8807
+ overflow: hidden;
8808
+ clip-path: inset(50%);
8809
+ white-space: nowrap;
8810
+ border: 0;
8811
+ }
8812
+
8389
8813
  /* ── Toolbar button — list mode ──────────────────────────────────────────── */
8390
8814
 
8391
8815
  /*
@@ -8468,6 +8892,7 @@
8468
8892
  .toolbar-context,
8469
8893
  .toolbar-fanout-panel,
8470
8894
  .toolbar-folder-panel,
8895
+ .toolbar-drawer-tile,
8471
8896
  .toolbar-slot-section,
8472
8897
  .toolbar-slot-incoming,
8473
8898
  .toolbar-slot-outgoing {
@@ -47,12 +47,14 @@ export declare const cratisParts: {
47
47
  readonly ChatSidebar: readonly ['backdrop', 'root', 'header', 'back', 'title', 'close', 'content'];
48
48
  readonly Toolbar: readonly ['root'];
49
49
  readonly ToolbarButton: readonly ['button', 'icon', 'label'];
50
- readonly ToolbarFolder: readonly ['toolbar-folder', 'toolbar-folder-trigger', 'toolbar-folder-panel'];
50
+ readonly ToolbarFolder: readonly ['toolbar-folder', 'toolbar-folder-trigger', 'toolbar-folder-panel', 'toolbar-folder-header', 'toolbar-folder-title', 'toolbar-folder-close', 'toolbar-folder-tile', 'toolbar-folder-tile-icon', 'toolbar-folder-tile-label'];
51
51
  readonly ToolbarFanOutItem: readonly ['fanout-root', 'fanout-trigger', 'fanout-panel'];
52
52
  readonly ToolbarSeparator: readonly ['toolbar-separator'];
53
53
  readonly ToolbarSection: readonly ['toolbar-section', 'toolbar-context'];
54
54
  readonly ToolbarGroup: readonly ['toolbar-group', 'toolbar-slot', 'toolbar-slot-incoming', 'toolbar-slot-outgoing'];
55
55
  readonly ToolbarLayout: readonly ['toolbar-layout', 'toolbar-slot', 'toolbar-slot-incoming', 'toolbar-slot-outgoing'];
56
+ readonly OrderedItemEditor: readonly ['root', 'section', 'sectionTitle', 'list', 'item', 'handle', 'moveUp', 'moveDown', 'label', 'icon', 'destination', 'remove', 'add', 'message', 'state', 'empty', 'status'];
57
+ readonly PropertyControls: readonly ['root', 'group', 'groupTitle', 'groupDescription', 'property', 'label', 'value', 'input', 'select', 'unit', 'message'];
56
58
  readonly Skeleton: readonly ['root'];
57
59
  readonly Message: readonly ['root', 'icon', 'text'];
58
60
  readonly Badge: readonly ['root'];
@@ -483,6 +485,12 @@ export declare const cratisPartStates: {
483
485
  readonly 'toolbar-folder': readonly ["open"];
484
486
  readonly 'toolbar-folder-trigger': readonly ["open"];
485
487
  readonly 'toolbar-folder-panel': readonly ["open"];
488
+ readonly 'toolbar-folder-header': readonly [];
489
+ readonly 'toolbar-folder-title': readonly [];
490
+ readonly 'toolbar-folder-close': readonly [];
491
+ readonly 'toolbar-folder-tile': readonly ["disabled", "selected"];
492
+ readonly 'toolbar-folder-tile-icon': readonly [];
493
+ readonly 'toolbar-folder-tile-label': readonly [];
486
494
  };
487
495
  readonly ToolbarFanOutItem: {
488
496
  readonly 'fanout-root': readonly ["open"];
@@ -508,6 +516,38 @@ export declare const cratisPartStates: {
508
516
  readonly 'toolbar-slot-incoming': readonly [];
509
517
  readonly 'toolbar-slot-outgoing': readonly [];
510
518
  };
519
+ readonly OrderedItemEditor: {
520
+ readonly root: readonly [];
521
+ readonly section: readonly [];
522
+ readonly sectionTitle: readonly [];
523
+ readonly list: readonly [];
524
+ readonly item: readonly [];
525
+ readonly handle: readonly [];
526
+ readonly moveUp: readonly [];
527
+ readonly moveDown: readonly [];
528
+ readonly label: readonly ["invalid"];
529
+ readonly icon: readonly [];
530
+ readonly destination: readonly ["invalid"];
531
+ readonly remove: readonly [];
532
+ readonly add: readonly [];
533
+ readonly message: readonly ["invalid"];
534
+ readonly state: readonly [];
535
+ readonly empty: readonly [];
536
+ readonly status: readonly [];
537
+ };
538
+ readonly PropertyControls: {
539
+ readonly root: readonly [];
540
+ readonly group: readonly [];
541
+ readonly groupTitle: readonly [];
542
+ readonly groupDescription: readonly [];
543
+ readonly property: readonly ["readonly"];
544
+ readonly label: readonly [];
545
+ readonly value: readonly [];
546
+ readonly input: readonly ["invalid"];
547
+ readonly select: readonly ["invalid"];
548
+ readonly unit: readonly [];
549
+ readonly message: readonly ["invalid"];
550
+ };
511
551
  readonly Skeleton: {
512
552
  readonly root: readonly [];
513
553
  };