@crewlethq/ui 0.4.3 → 0.5.0

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 (237) hide show
  1. package/README.md +888 -24
  2. package/dist/Accordion/index.js +2 -2
  3. package/dist/AddPill/index.js +1 -1
  4. package/dist/{AddPill-DFWXYLIQ.css → AddPill-IJQYCY6C.css} +9 -0
  5. package/dist/AppShell/AppShell.d.ts +26 -5
  6. package/dist/AppShell/index.js +3 -3
  7. package/dist/{AppShell-NVE6LHNI.css → AppShell-XARELGIH.css} +178 -25
  8. package/dist/Avatar/Avatar.d.ts +85 -40
  9. package/dist/Avatar/AvatarStack.d.ts +76 -0
  10. package/dist/Avatar/index.d.ts +5 -2
  11. package/dist/Avatar/index.js +1 -1
  12. package/dist/Avatar-XID7Z74C.css +200 -0
  13. package/dist/AvatarStack-GEJBNV7E.css +72 -0
  14. package/dist/BrandLockup/index.js +1 -1
  15. package/dist/{BrandLockup-6ISDEHPJ.css → BrandLockup-JKGXFCZF.css} +25 -19
  16. package/dist/Button/Button.d.ts +7 -2
  17. package/dist/Button/index.js +1 -1
  18. package/dist/{Button-D4J6B4MA.css → Button-X4B2TJAQ.css} +50 -19
  19. package/dist/Callout/index.js +1 -1
  20. package/dist/Canvas/index.js +4 -4
  21. package/dist/Card/Card.d.ts +9 -5
  22. package/dist/Card/index.js +1 -1
  23. package/dist/{Card-RLR254LD.css → Card-GLP7SUV6.css} +25 -18
  24. package/dist/Charts/BarList.d.ts +18 -1
  25. package/dist/Charts/ChartTooltip.d.ts +68 -0
  26. package/dist/Charts/StackedBar.d.ts +25 -7
  27. package/dist/Charts/StackedColumns.d.ts +112 -0
  28. package/dist/Charts/TimeSeries.d.ts +33 -2
  29. package/dist/Charts/dataColor.d.ts +22 -14
  30. package/dist/Charts/index.d.ts +6 -0
  31. package/dist/Charts/index.js +1 -1
  32. package/dist/Charts/useChartHover.d.ts +56 -0
  33. package/dist/Charts-B3YEF7R4.css +742 -0
  34. package/dist/Checkbox/index.js +1 -1
  35. package/dist/{Checkbox-VGW26YLQ.css → Checkbox-BOXQ747I.css} +2 -2
  36. package/dist/CodeBlock/index.js +4 -4
  37. package/dist/Combobox/index.js +5 -5
  38. package/dist/CommandPalette/CommandPalette.d.ts +97 -6
  39. package/dist/CommandPalette/index.d.ts +1 -1
  40. package/dist/CommandPalette/index.js +9 -7
  41. package/dist/CommandPalette-C5AMKGN2.css +259 -0
  42. package/dist/Copyable/index.js +3 -3
  43. package/dist/DataTable/index.js +7 -7
  44. package/dist/{DataTable-ITNACQ2X.css → DataTable-OLHPF7D4.css} +44 -43
  45. package/dist/DataView/index.js +14 -14
  46. package/dist/{DataView-256YF32J.css → DataView-N6JX464S.css} +5 -4
  47. package/dist/DateTimePicker/index.js +5 -5
  48. package/dist/DiffList/index.js +1 -1
  49. package/dist/Disclosure/index.js +2 -2
  50. package/dist/EntityChip/EntityChip.d.ts +9 -12
  51. package/dist/EntityChip/index.d.ts +1 -1
  52. package/dist/EntityChip/index.js +2 -2
  53. package/dist/ErrorBoundary/index.js +2 -2
  54. package/dist/{ErrorBoundary-ME36CQTA.css → ErrorBoundary-U2PA3LY2.css} +4 -4
  55. package/dist/IconButton/index.js +1 -1
  56. package/dist/{IconButton-VQGNMJDI.css → IconButton-TVEUWK6L.css} +2 -2
  57. package/dist/ImageUpload/ImageUpload.d.ts +10 -7
  58. package/dist/ImageUpload/index.js +2 -2
  59. package/dist/{ImageUpload-HKFIZR6D.css → ImageUpload-YCHJMUGX.css} +24 -10
  60. package/dist/Input/index.js +2 -2
  61. package/dist/Kbd/Kbd.d.ts +14 -4
  62. package/dist/Kbd/index.js +1 -1
  63. package/dist/Kbd-JPLDVJIP.css +71 -0
  64. package/dist/Layer/index.js +1 -1
  65. package/dist/Link/index.js +1 -1
  66. package/dist/List/index.js +1 -1
  67. package/dist/{List-XTHESXLR.css → List-MYJIV6MP.css} +12 -2
  68. package/dist/ListInput/index.js +5 -5
  69. package/dist/Listbox/index.js +2 -2
  70. package/dist/Listbox/useListbox.d.ts +16 -0
  71. package/dist/Listbox/useOptionKeys.d.ts +12 -1
  72. package/dist/{Listbox-X2DOTSQA.css → Listbox-6WJNJQVQ.css} +60 -7
  73. package/dist/Menu/index.js +4 -4
  74. package/dist/{Menu-6DE7I66I.css → Menu-BT5PMFJI.css} +15 -0
  75. package/dist/Meter/Meter.d.ts +103 -16
  76. package/dist/Meter/index.d.ts +2 -2
  77. package/dist/Meter/index.js +1 -1
  78. package/dist/{Meter-SKOOXQBC.css → Meter-5VCSFMZW.css} +46 -7
  79. package/dist/Modal/index.js +4 -4
  80. package/dist/{Modal-XYQJ4BL6.css → Modal-JAYBS2KS.css} +13 -4
  81. package/dist/OrgLabel/OrgLabel.d.ts +60 -24
  82. package/dist/OrgLabel/index.d.ts +1 -1
  83. package/dist/OrgLabel/index.js +2 -1
  84. package/dist/{OrgLabel-D7U6QJZD.css → OrgLabel-CR233G34.css} +9 -18
  85. package/dist/OrgNode/index.js +3 -2
  86. package/dist/OrgTable/OrgTable.d.ts +2 -2
  87. package/dist/OrgTable/index.js +8 -7
  88. package/dist/Popover/index.js +2 -2
  89. package/dist/PricingCard/index.js +3 -3
  90. package/dist/{PricingCard-JFI7RYXP.css → PricingCard-7EFXRSD2.css} +4 -5
  91. package/dist/SearchTrigger/SearchTrigger.d.ts +23 -4
  92. package/dist/SearchTrigger/index.d.ts +1 -1
  93. package/dist/SearchTrigger/index.js +1 -1
  94. package/dist/SearchTrigger-Z5D4AAY7.css +112 -0
  95. package/dist/SegmentedControl/index.js +2 -2
  96. package/dist/SegmentedMeter/SegmentedMeter.d.ts +107 -0
  97. package/dist/SegmentedMeter/index.d.ts +3 -0
  98. package/dist/SegmentedMeter/index.js +2 -0
  99. package/dist/SegmentedMeter-KQNML2TW.css +109 -0
  100. package/dist/Select/index.js +3 -3
  101. package/dist/{Select-2X77FSWR.css → Select-E24U5LBC.css} +34 -0
  102. package/dist/Shortcut/index.js +2 -2
  103. package/dist/SidebarNav/SidebarNav.d.ts +85 -25
  104. package/dist/SidebarNav/index.d.ts +1 -1
  105. package/dist/SidebarNav/index.js +1 -1
  106. package/dist/SidebarNav-X5NLZNWA.css +424 -0
  107. package/dist/StatCard/StatCard.d.ts +59 -12
  108. package/dist/StatCard/index.d.ts +1 -1
  109. package/dist/StatCard/index.js +1 -1
  110. package/dist/StatCard-KPAFD4E2.css +204 -0
  111. package/dist/StatGroup/index.js +1 -1
  112. package/dist/{StatGroup-TGB6AEKM.css → StatGroup-HVG6O62W.css} +8 -9
  113. package/dist/StatusDot/StatusDot.d.ts +24 -6
  114. package/dist/StatusDot/index.js +1 -1
  115. package/dist/StatusDot-7OMCQCZF.css +186 -0
  116. package/dist/Stepper/Stepper.d.ts +78 -0
  117. package/dist/Stepper/index.d.ts +3 -0
  118. package/dist/Stepper/index.js +4 -0
  119. package/dist/Stepper-HW4JM3YH.css +176 -0
  120. package/dist/Table/index.js +1 -1
  121. package/dist/{Table-MDOLVUAW.css → Table-TGCS4C3F.css} +14 -4
  122. package/dist/Tabs/index.js +1 -1
  123. package/dist/{Tabs-VLICJFVB.css → Tabs-XCNPHA7B.css} +79 -27
  124. package/dist/Tag/Tag.d.ts +29 -22
  125. package/dist/Tag/index.js +2 -2
  126. package/dist/{Tag-VNZEYLB6.css → Tag-GBE7LQJP.css} +82 -83
  127. package/dist/TagsInput/index.js +6 -6
  128. package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +53 -21
  129. package/dist/ThemeSwitcher/index.d.ts +3 -3
  130. package/dist/ThemeSwitcher/index.js +4 -3
  131. package/dist/ThemeSwitcher/preferences.d.ts +19 -5
  132. package/dist/ThemeToggle/ThemeToggle.d.ts +40 -0
  133. package/dist/ThemeToggle/index.d.ts +2 -0
  134. package/dist/ThemeToggle/index.js +5 -0
  135. package/dist/TimeWindowPicker/index.js +8 -8
  136. package/dist/Toaster/index.js +2 -2
  137. package/dist/Toolbar/index.js +2 -2
  138. package/dist/{Toolbar-IP6LXN45.css → Toolbar-HUOSMNTH.css} +3 -1
  139. package/dist/Tooltip/index.js +2 -2
  140. package/dist/Tree/index.d.ts +2 -2
  141. package/dist/Tree/index.js +1 -1
  142. package/dist/Tree/layout.d.ts +103 -28
  143. package/dist/TreeCanvas/TreeCanvas.d.ts +60 -14
  144. package/dist/TreeCanvas/index.d.ts +1 -1
  145. package/dist/TreeCanvas/index.js +6 -6
  146. package/dist/TreeCanvas/motion.d.ts +3 -2
  147. package/dist/{TreeCanvas-WBNQPHC7.css → TreeCanvas-HVOV4SQN.css} +154 -30
  148. package/dist/TreeGrid/index.js +4 -4
  149. package/dist/{chunk-F6OE5FH3.js → chunk-2FPENTCF.js} +1 -1
  150. package/dist/chunk-4AK52VHB.js +88 -0
  151. package/dist/{chunk-7EM5T4ME.js → chunk-4IQD3HUQ.js} +2 -2
  152. package/dist/{chunk-YODNNSZL.js → chunk-4PZ6FJKW.js} +43 -13
  153. package/dist/{chunk-F27EPQ7D.js → chunk-4UQ7SMPK.js} +1 -1
  154. package/dist/chunk-5QWIJSQM.js +73 -0
  155. package/dist/{chunk-GTOUGQQK.js → chunk-6MU7HNB4.js} +13 -10
  156. package/dist/{chunk-S2XHHEW4.js → chunk-74KMX7YH.js} +4 -4
  157. package/dist/{chunk-WNI2WSJF.js → chunk-7KBNFFM3.js} +1 -1
  158. package/dist/{chunk-DD5BBGBE.js → chunk-AUS5FNQE.js} +9 -5
  159. package/dist/{chunk-CMEE37QJ.js → chunk-BMYPGGPV.js} +4 -4
  160. package/dist/{chunk-H4FBTAYS.js → chunk-BNCCEER3.js} +8 -8
  161. package/dist/chunk-C5WJUZVR.js +56 -0
  162. package/dist/{chunk-5WS6L6FA.js → chunk-CAIHUYXV.js} +9 -9
  163. package/dist/{chunk-XV6WRMBC.js → chunk-CQY5NTRS.js} +4 -1
  164. package/dist/{chunk-UOGSZKLT.js → chunk-D6EVJUGU.js} +2 -2
  165. package/dist/{chunk-6ZFVFA56.js → chunk-DHPUMOTX.js} +2 -2
  166. package/dist/{chunk-HZ5XZNPS.js → chunk-DS2C73RJ.js} +3 -3
  167. package/dist/{chunk-O6232G37.js → chunk-DSUY5F4E.js} +17 -5
  168. package/dist/{chunk-Q4ZPPART.js → chunk-EFYPAJT3.js} +3 -3
  169. package/dist/{chunk-WQX73TWF.js → chunk-ERVO6OUF.js} +18 -17
  170. package/dist/{chunk-BZYDZBAN.js → chunk-ETYEBKR4.js} +3 -3
  171. package/dist/{chunk-34VGEDVV.js → chunk-FD5UEN6X.js} +30 -30
  172. package/dist/{chunk-5SDBMKUO.js → chunk-FIFNP6PL.js} +3 -3
  173. package/dist/{chunk-7HPRF5XN.js → chunk-FUF52K7E.js} +98 -16
  174. package/dist/{chunk-5KPQ6D7N.js → chunk-FZVJDJFN.js} +2 -2
  175. package/dist/chunk-IA232OTU.js +156 -0
  176. package/dist/{chunk-2EOKFKHX.js → chunk-IG27QX7Q.js} +7 -7
  177. package/dist/chunk-IKB6HFGK.js +55 -0
  178. package/dist/{chunk-FBZAKNSX.js → chunk-IPVQKAHO.js} +10 -7
  179. package/dist/{chunk-3EYF6HKB.js → chunk-IVFJD7WY.js} +28 -9
  180. package/dist/{chunk-WOYYD2YR.js → chunk-JGRNTBF2.js} +11 -11
  181. package/dist/chunk-K3OWD7BJ.js +121 -0
  182. package/dist/{chunk-BJSKPEZI.js → chunk-KD4H66L6.js} +7 -20
  183. package/dist/{chunk-SFZOKW2G.js → chunk-KJ34ZBBI.js} +8 -3
  184. package/dist/{chunk-HQNHV7D6.js → chunk-LFHCXZO5.js} +6 -6
  185. package/dist/{chunk-LWKJQTOM.js → chunk-MICH6QSJ.js} +1 -1
  186. package/dist/chunk-N3DPO6HG.js +226 -0
  187. package/dist/{chunk-S4GZWSKR.js → chunk-OM5E3TTK.js} +1 -1
  188. package/dist/{chunk-3QRYCPXQ.js → chunk-OPKIKM35.js} +6 -6
  189. package/dist/{chunk-5EKIWVOR.js → chunk-PGRPNDWM.js} +2 -2
  190. package/dist/{chunk-LFJ6UJTI.js → chunk-PQNILU27.js} +9 -9
  191. package/dist/{chunk-QNCVHRZL.js → chunk-QVAFL2LE.js} +1 -1
  192. package/dist/{chunk-QEUY3A5P.js → chunk-QY7UU5ZB.js} +3 -2
  193. package/dist/{chunk-ITHXJHBB.js → chunk-R25RGPUB.js} +1 -0
  194. package/dist/{chunk-KLJCCMF3.js → chunk-R6735B37.js} +2 -2
  195. package/dist/{chunk-3ZP55QZE.js → chunk-R6FBDTP3.js} +4 -4
  196. package/dist/{chunk-7FZ53WDJ.js → chunk-RIAZM6L3.js} +1 -1
  197. package/dist/chunk-RJM4QCGG.js +550 -0
  198. package/dist/{chunk-NTRZGNEX.js → chunk-S3BCVWTU.js} +215 -46
  199. package/dist/chunk-S7KW47IQ.js +121 -0
  200. package/dist/{chunk-OFHBK7RI.js → chunk-SJQ546ID.js} +34 -14
  201. package/dist/{chunk-D35VTV2Z.js → chunk-SV7QAONL.js} +1 -1
  202. package/dist/{chunk-IAJLHVUA.js → chunk-TIWAHZZ6.js} +1 -1
  203. package/dist/{chunk-2PRH365R.js → chunk-UA7O3KKJ.js} +1 -1
  204. package/dist/{chunk-NPZY6YYL.js → chunk-UG5ZMAXW.js} +6 -6
  205. package/dist/{chunk-FEFTGVMF.js → chunk-V2N3BMOT.js} +7 -2
  206. package/dist/{chunk-NDCATSW7.js → chunk-V34H2YCY.js} +1 -1
  207. package/dist/chunk-WIATRXEJ.js +22 -0
  208. package/dist/{chunk-5C5YMZQU.js → chunk-WOFOMTGB.js} +16 -10
  209. package/dist/{chunk-QYOFACSP.js → chunk-WSOFKOLP.js} +3 -3
  210. package/dist/{chunk-MNAXYY3R.js → chunk-WUVZDFHS.js} +31 -11
  211. package/dist/{chunk-UG46QBLT.js → chunk-YIMOT5OO.js} +10 -10
  212. package/dist/{chunk-2ZQMA2WB.js → chunk-ZPSOF6VL.js} +2 -2
  213. package/dist/generated/index.d.ts +3 -0
  214. package/dist/generated/index.js +66 -62
  215. package/dist/index.js +66 -62
  216. package/dist/styles.css +2719 -799
  217. package/dist/utils/index.d.ts +1 -1
  218. package/dist/utils/tone.d.ts +7 -12
  219. package/package.json +4 -4
  220. package/scripts/check-css-literals.mjs +159 -23
  221. package/scripts/check-css-variables.mjs +5 -3
  222. package/scripts/css-source.mjs +97 -5
  223. package/dist/Avatar-P2KRQM2B.css +0 -156
  224. package/dist/Charts-D7G2BSXH.css +0 -277
  225. package/dist/CommandPalette-CSJDUCQA.css +0 -115
  226. package/dist/Kbd-W66MXQI5.css +0 -61
  227. package/dist/SearchTrigger-QXOYAUUY.css +0 -79
  228. package/dist/SidebarNav-QGSFKZYA.css +0 -319
  229. package/dist/StatCard-KYPKZUWX.css +0 -111
  230. package/dist/StatusDot-HA2L2FSX.css +0 -84
  231. package/dist/chunk-22O7LAW2.js +0 -41
  232. package/dist/chunk-2HQR4U4D.js +0 -143
  233. package/dist/chunk-ESCO4XYW.js +0 -144
  234. package/dist/chunk-F4PJZ4ED.js +0 -245
  235. package/dist/chunk-PNFASD6F.js +0 -98
  236. package/dist/chunk-PZSWF74H.js +0 -15
  237. /package/dist/{chunk-ZCR6YGQ4.js → chunk-PKIN4IMB.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  /*
2
- * The tag: a small pill naming a state, a phase or a value.
2
+ * The tag: a small pill naming a state, a category or a value.
3
3
  *
4
4
  * THREE VARIABLES CARRY EVERY VARIANT. A tag is its tone's `soft` tint under
5
5
  * its tone's `ink`, with the `line` step as the boundary it grows when it can
@@ -19,39 +19,49 @@
19
19
 
20
20
  .crewlet-tag {
21
21
  /*
22
- * THE ENGINE'S BADGE. Its line box is 11px at the document's 1.5 leading
23
- * plus a pixel of padding and a pixel of border on each side, which lands on
24
- * 20.5px; the step below is the whole pixel that renders, and it scales with
25
- * density the way every size token does.
22
+ * THE APPROVED DESIGN'S PILL: 22px tall with fully round ends, the caption
23
+ * step at the medium weight, and 9px of room inside each end, which is the
24
+ * step a rounded end eats before the first letter clears it.
26
25
  *
27
26
  * The height is a STEP and the floor is separate, because the two answer
28
- * different questions. A tag that only labels takes the engine's geometry
29
- * exactly. A tag that ACTS is a pointer target, and 20px fails WCAG 2.2, so
30
- * it takes the 24px floor as well: the engine draws its actionable badge at
31
- * the inert one's height, which is the one place its look and the target
32
- * rule disagree. Nothing else about the pill changes, so a row of tags still
33
- * reads as one set.
27
+ * different questions. A tag that only labels takes the design's geometry
28
+ * exactly. A tag that ACTS is a pointer target, and 22px fails WCAG 2.2, so
29
+ * it takes the 24px floor as well. Nothing else about the pill changes, so a
30
+ * row of tags still reads as one set.
31
+ *
32
+ * THE NEUTRAL PILL IS THE RAISED RUNG under the secondary ink, the design's
33
+ * quiet pill: a category, a count, a word that is not a state. Every other
34
+ * variant below is its tone's soft tint under its ink.
35
+ *
36
+ * The boundary at rest is `--crewlet-tag-edge`: transparent for a tinted
37
+ * pill, whose hue already separates it from any neutral ground, and the
38
+ * strong border step for the neutral one (see its rule below).
34
39
  */
35
- --crewlet-tag-height: calc(20px * var(--density, 1));
40
+ --crewlet-tag-height: calc(22px * var(--density, 1));
36
41
  --crewlet-tag-floor: 0px;
37
- --crewlet-tag-fill: var(--color-surface-inset);
42
+ /* The design's 9px inside each round end: two steps and a quarter, so it
43
+ follows the density with every other gap. The remove control and the
44
+ press half of a split pill read it too, to reach the pill's own ends. */
45
+ --crewlet-tag-pad: calc(var(--spacing-2) + var(--spacing-1) / 4);
46
+ --crewlet-tag-fill: var(--color-surface-elevated);
38
47
  --crewlet-tag-ink: var(--color-text-secondary);
39
48
  --crewlet-tag-line: var(--color-border-hover);
49
+ --crewlet-tag-edge: transparent;
40
50
 
41
51
  display: inline-flex;
42
52
  align-items: center;
43
- gap: var(--spacing-1);
53
+ /* The design's 6px between a dot or a glyph and the word: a step and a
54
+ half. */
55
+ gap: calc(var(--spacing-1) * 1.5);
44
56
  height: max(var(--crewlet-tag-height), var(--crewlet-tag-floor));
45
- padding: 0 var(--spacing-2);
46
- border: 1px solid transparent;
47
- border-radius: var(--radius-xs);
57
+ padding: 0 var(--crewlet-tag-pad);
58
+ border: 1px solid var(--crewlet-tag-edge);
59
+ border-radius: var(--radius-pill);
48
60
  background: var(--crewlet-tag-fill);
49
61
  color: var(--crewlet-tag-ink);
50
62
  font-family: var(--font-family-sans);
51
- font-size: var(--font-size-2xs);
63
+ font-size: var(--font-size-xs);
52
64
  font-weight: var(--font-weight-medium);
53
- /* The engine tracks the badge a hundredth of an em open, which is the
54
- normal step at this size: a hundredth of 11px is a tenth of a pixel. */
55
65
  letter-spacing: var(--font-letter-spacing-normal);
56
66
  line-height: 1;
57
67
  /* A tag is an atomic token: its label never breaks across lines inside the
@@ -104,53 +114,54 @@
104
114
  /* ── sizes ─────────────────────────────────────────────────────────────── */
105
115
 
106
116
  /*
107
- * THREE HEIGHTS OF ONE BADGE. The engine draws a single pill and spends its
117
+ * THREE HEIGHTS OF ONE PILL. The design draws a single pill and spends its
108
118
  * variation on tone rather than on size, so the steps here differ by how much
109
- * room the pill takes and not by what it is: the type, the radius, the weight
110
- * and the tracking are the engine's at every one of them.
119
+ * room the pill takes and not by what it is: the radius, the weight and the
120
+ * tracking are the design's at every one of them.
111
121
  *
112
- * xs is an 18px pill and is NON-INTERACTIVE for that reason: it is under the
113
- * 24px target floor, and the component refuses a press at this step. It is for
114
- * a mark inside a dense row, where the label is still the carrier.
122
+ * xs is the design's 18px count pill, the one a rail row carries, and is
123
+ * NON-INTERACTIVE for that reason: it is under the 24px target floor, and the
124
+ * component refuses a press at this step. It is for a mark inside a dense
125
+ * row, where the label is still the carrier, and it takes the micro step, the
126
+ * design's 10.5px at the scale's floor.
115
127
  *
116
128
  * EVERY STEP SCALES WITH DENSITY, which is not decoration: written as a flat
117
- * 18px, this one stayed put while the badge above it came down to
118
- * 20 x 0.82 = 16.4px, so the dense mark rendered TALLER than the badge it is
119
- * meant to sit inside a row of. A step that does not move with the rest of the
120
- * scale is a step that overtakes one of its neighbours at some density.
129
+ * 18px, this one stayed put while the pill above it came down with the
130
+ * density, so the dense mark rendered TALLER than the pill it is meant to sit
131
+ * inside a row of. A step that does not move with the rest of the scale is a
132
+ * step that overtakes one of its neighbours at some density.
121
133
  */
122
134
  .crewlet-tag--xs {
123
135
  --crewlet-tag-height: calc(18px * var(--density, 1));
124
- padding: 0 var(--spacing-1);
125
- gap: 3px;
136
+ --crewlet-tag-pad: calc(var(--spacing-1) * 1.5);
137
+ gap: var(--spacing-1);
138
+ font-size: var(--font-size-2xs);
126
139
  }
127
140
 
128
- /* The engine's badge, and the default. */
141
+ /* The design's pill, and the default. */
129
142
  .crewlet-tag--sm {
130
- --crewlet-tag-height: calc(20px * var(--density, 1));
143
+ --crewlet-tag-height: calc(22px * var(--density, 1));
131
144
  }
132
145
 
133
146
  /* The md step is a small control's own height, so a tag and a small button in
134
- one toolbar sit on the same baseline. One type step up with it: 11px inside
135
- a 28px pill reads as a label that lost its box. */
147
+ one toolbar sit on the same line. */
136
148
  .crewlet-tag--md {
137
149
  --crewlet-tag-height: var(--size-control-sm);
138
- font-size: var(--font-size-xs);
139
150
  }
140
151
 
141
152
  /*
142
153
  * A TAG THAT ACTS CLEARS 24px, at every density and every step. Last among the
143
154
  * steps so it is the floor whichever one is drawn, and a floor rather than a
144
- * height so the md step keeps its 28px.
155
+ * height so the md step keeps its 26px.
145
156
  */
146
157
  .crewlet-tag--acts {
147
158
  --crewlet-tag-floor: max(24px, calc(24px * var(--density, 1)));
148
159
  }
149
160
 
150
- /* One step down from the sans, where there is a step to take: a mono face
151
- draws larger than the sans at the same size, and a machine value beside a
152
- word has to read as the same line. At the two smaller steps the sans is
153
- already at the bottom of the scale and the mono stays beside it. */
161
+ /* One step down from the sans: a mono face draws larger than the sans at the
162
+ same size, and a machine value beside a word has to read as the same line.
163
+ At xs the sans is already at the bottom of the scale and the mono stays
164
+ beside it. */
154
165
  .crewlet-tag--monospace .crewlet-tag__label {
155
166
  font-family: var(--font-family-mono);
156
167
  font-size: var(--font-size-2xs);
@@ -188,43 +199,6 @@
188
199
  --crewlet-tag-line: var(--color-brand-accent-soft-strong);
189
200
  }
190
201
 
191
- /*
192
- * The phase family has a soft step and no line step, because nothing else in
193
- * the system needed a phase boundary. The ink is the boundary here: it is the
194
- * same hue at a strength a 1px rule can be seen at, and a border is not text,
195
- * so the rule that an ink step is never a BACKGROUND is untouched.
196
- *
197
- * A PHASE IS SET IN THE MICRO-LABEL REGISTER, uppercase and tracked open,
198
- * where a state is set in the badge's own. Phase is the one categorical
199
- * identity the product spends colour on outside a chart, and it is what a
200
- * reader follows across four screens; the second register is what separates it
201
- * at a glance from the state badge sitting beside it on the same row.
202
- */
203
- .crewlet-tag--phase-onboarding,
204
- .crewlet-tag--phase-execute,
205
- .crewlet-tag--phase-review {
206
- letter-spacing: var(--font-letter-spacing-wide);
207
- text-transform: uppercase;
208
- }
209
-
210
- .crewlet-tag--phase-onboarding {
211
- --crewlet-tag-fill: var(--color-phase-onboarding-soft);
212
- --crewlet-tag-ink: var(--color-phase-onboarding-ink);
213
- --crewlet-tag-line: var(--color-phase-onboarding-ink);
214
- }
215
-
216
- .crewlet-tag--phase-execute {
217
- --crewlet-tag-fill: var(--color-phase-execute-soft);
218
- --crewlet-tag-ink: var(--color-phase-execute-ink);
219
- --crewlet-tag-line: var(--color-phase-execute-ink);
220
- }
221
-
222
- .crewlet-tag--phase-review {
223
- --crewlet-tag-fill: var(--color-phase-review-soft);
224
- --crewlet-tag-ink: var(--color-phase-review-ink);
225
- --crewlet-tag-line: var(--color-phase-review-ink);
226
- }
227
-
228
202
  /* ── appearance ────────────────────────────────────────────────────────── */
229
203
 
230
204
  /*
@@ -237,6 +211,31 @@
237
211
  border-color: var(--crewlet-tag-line);
238
212
  }
239
213
 
214
+ /*
215
+ * THE NEUTRAL PILL CARRIES A BOUNDARY, because its fill IS a surface. The
216
+ * raised rung is also the ground of a palette's lead block, a raised card and
217
+ * the rail's current row, and on any of them a raised pill with a transparent
218
+ * boundary was the colour of what it stood on: the pill vanished and its words
219
+ * read as loose text with odd gaps between them.
220
+ *
221
+ * THE STRONG STEP, NOT THE DEFAULT ONE. The design's own chip is found by 1px
222
+ * of its line step (`.chip`), which is the default border here, and that
223
+ * measured under the hairline dE of 3 on five grounds a pill lands on: 2.76 on
224
+ * the light frame, 2.86 on a pressed row over a light card, 2.77 and 2.71 on an
225
+ * inset well inside a raised surface, and 2.08 on a hovered row over the dark
226
+ * sheet. The strong step is the design's line-2, the boundary it draws round a
227
+ * key cap (`.kbd`), and it clears 3 on every rung and every overlay in both
228
+ * themes. The suite measures all of them.
229
+ *
230
+ * The hover takes the strong step once more, because the press line a tinted
231
+ * pill moves to on hover IS the strong step in both themes, and a hover that
232
+ * lands on the resting boundary draws no hover at all.
233
+ */
234
+ .crewlet-tag--neutral.crewlet-tag--soft {
235
+ --crewlet-tag-edge: var(--color-border-strong);
236
+ --crewlet-tag-line: var(--color-border-strong-hover);
237
+ }
238
+
240
239
  /* The neutral outline is the engine's `.badge.outline`: the hairline step as
241
240
  the boundary, and the tertiary ink, which is a quieter register than the
242
241
  tinted outlines keep. It is the appearance for a value that is not a state
@@ -295,9 +294,9 @@
295
294
  align-self: stretch;
296
295
  gap: inherit;
297
296
  min-width: 0;
298
- padding: 0 var(--spacing-2);
297
+ padding: 0 var(--crewlet-tag-pad);
299
298
  border: 0;
300
- border-radius: var(--radius-xs) 0 0 var(--radius-xs);
299
+ border-radius: var(--radius-pill) 0 0 var(--radius-pill);
301
300
  background: transparent;
302
301
  /* A button inherits none of these. */
303
302
  color: inherit;
@@ -354,10 +353,10 @@
354
353
  min-width: 24px;
355
354
  margin-block-start: -1px;
356
355
  margin-block-end: -1px;
357
- margin-right: calc(var(--spacing-2) * -1);
356
+ margin-right: calc(var(--crewlet-tag-pad) * -1);
358
357
  padding: 0 var(--spacing-1);
359
358
  border: 0;
360
- border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
359
+ border-radius: 0 var(--radius-pill) var(--radius-pill) 0;
361
360
  background: transparent;
362
361
  color: inherit;
363
362
  cursor: pointer;
@@ -1,10 +1,10 @@
1
- export { TagsInput } from '../chunk-BJSKPEZI.js';
2
- import '../chunk-S2XHHEW4.js';
3
- import '../chunk-PZSWF74H.js';
4
- import '../chunk-GTOUGQQK.js';
1
+ export { TagsInput } from '../chunk-KD4H66L6.js';
2
+ import '../chunk-74KMX7YH.js';
3
+ import '../chunk-WIATRXEJ.js';
4
+ import '../chunk-6MU7HNB4.js';
5
5
  import '../chunk-RSAQOKH3.js';
6
6
  import '../chunk-7RPGY3JE.js';
7
- import '../chunk-ITHXJHBB.js';
8
- import '../chunk-F27EPQ7D.js';
7
+ import '../chunk-R25RGPUB.js';
8
+ import '../chunk-4UQ7SMPK.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,15 +1,46 @@
1
- export interface ThemeSwitcherProps {
1
+ import { type DensityPreference, type ThemePreference } from './preferences.js';
2
+ /**
3
+ * Who holds a preference: the control, or the application around it.
4
+ *
5
+ * STORED, the default: the control reads the choice kept under `storageKey`,
6
+ * writes the root attribute and storage when it changes, and tells `onChange`
7
+ * afterwards. Every stored control on one key reads one value, so two of them
8
+ * on a page agree.
9
+ *
10
+ * CONTROLLED, with `value`: the control draws `value`, calls `onChange` with
11
+ * the reader's pick and WRITES NOTHING, neither the root attribute nor
12
+ * storage. The application owns the preference (normally one
13
+ * `useThemePreference` it hands to every control that shows it), so a second
14
+ * writer here would be a second opinion about which theme is on. A
15
+ * `storageKey` has nothing to name in that mode, and the types refuse one.
16
+ *
17
+ * A control is one or the other for its whole life: the two are different
18
+ * components underneath, so switching remounts it.
19
+ */
20
+ export type PreferenceControl<T extends string> = {
21
+ value?: undefined;
22
+ /** Told after a pick is applied and stored. */
23
+ onChange?: ((next: T) => void) | undefined;
2
24
  /** Where the choice is kept. */
3
- storageKey?: string;
25
+ storageKey?: string | undefined;
26
+ } | {
27
+ /** The choice to draw. The control writes nothing of its own. */
28
+ value: T;
29
+ /** The reader's pick. Nothing changes until `value` does. */
30
+ onChange: (next: T) => void;
31
+ storageKey?: undefined;
32
+ };
33
+ interface ThemeRowProps {
4
34
  /** Names the group. */
5
- label?: string;
35
+ label?: string | undefined;
6
36
  /** What each choice is called out loud. The glyphs say nothing on their own. */
7
- lightLabel?: string;
8
- systemLabel?: string;
9
- darkLabel?: string;
10
- size?: 'sm' | 'md';
11
- className?: string;
37
+ lightLabel?: string | undefined;
38
+ systemLabel?: string | undefined;
39
+ darkLabel?: string | undefined;
40
+ size?: 'sm' | 'md' | undefined;
41
+ className?: string | undefined;
12
42
  }
43
+ export type ThemeSwitcherProps = ThemeRowProps & PreferenceControl<ThemePreference>;
13
44
  /**
14
45
  * Light, the system's, or dark.
15
46
  *
@@ -21,21 +52,21 @@ export interface ThemeSwitcherProps {
21
52
  * EACH OPTION IS A WORD, not a picture of one. The glyphs are the whole of
22
53
  * what is drawn, so without a spoken name the row is three unnamed buttons.
23
54
  */
24
- export declare function ThemeSwitcher({ storageKey, label, lightLabel, systemLabel, darkLabel, size, className, }: ThemeSwitcherProps): import("react").JSX.Element;
25
- export interface DensitySwitcherProps {
26
- storageKey?: string;
27
- label?: string;
55
+ export declare function ThemeSwitcher(props: ThemeSwitcherProps): import("react").JSX.Element;
56
+ interface DensityRowProps {
57
+ label?: string | undefined;
28
58
  /** What each choice is called out loud. */
29
- compactLabel?: string;
30
- normalLabel?: string;
31
- comfortableLabel?: string;
59
+ compactLabel?: string | undefined;
60
+ normalLabel?: string | undefined;
61
+ comfortableLabel?: string | undefined;
32
62
  /** What each choice is drawn as. One letter, which is a picture of a size. */
33
- compactMark?: string;
34
- normalMark?: string;
35
- comfortableMark?: string;
36
- size?: 'sm' | 'md';
37
- className?: string;
63
+ compactMark?: string | undefined;
64
+ normalMark?: string | undefined;
65
+ comfortableMark?: string | undefined;
66
+ size?: 'sm' | 'md' | undefined;
67
+ className?: string | undefined;
38
68
  }
69
+ export type DensitySwitcherProps = DensityRowProps & PreferenceControl<DensityPreference>;
39
70
  /**
40
71
  * How much room the interface gives itself.
41
72
  *
@@ -44,4 +75,5 @@ export interface DensitySwitcherProps {
44
75
  * nothing: a reader was offered "S" and left to guess. The mark stays, and
45
76
  * each option is called Compact, Normal or Comfortable.
46
77
  */
47
- export declare function DensitySwitcher({ storageKey, label, compactLabel, normalLabel, comfortableLabel, compactMark, normalMark, comfortableMark, size, className, }: DensitySwitcherProps): import("react").JSX.Element;
78
+ export declare function DensitySwitcher(props: DensitySwitcherProps): import("react").JSX.Element;
79
+ export {};
@@ -1,4 +1,4 @@
1
1
  export { DensitySwitcher, ThemeSwitcher } from './ThemeSwitcher.js';
2
- export type { DensitySwitcherProps, ThemeSwitcherProps } from './ThemeSwitcher.js';
3
- export { applyDensity, applyStoredPreferences, applyTheme, useDensityPreference, useThemePreference, } from './preferences.js';
4
- export type { DensityPreference, PreferenceOptions, StoredPreferences, ThemePreference, } from './preferences.js';
2
+ export type { DensitySwitcherProps, PreferenceControl, ThemeSwitcherProps } from './ThemeSwitcher.js';
3
+ export { applyDensity, applyStoredPreferences, applyTheme, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference, } from './preferences.js';
4
+ export type { DensityPreference, PreferenceOptions, ResolvedTheme, StoredPreferences, ThemePreference, } from './preferences.js';
@@ -1,6 +1,7 @@
1
- export { DensitySwitcher, ThemeSwitcher, applyDensity, applyStoredPreferences, applyTheme, useDensityPreference, useThemePreference } from '../chunk-2HQR4U4D.js';
2
- import '../chunk-6ZFVFA56.js';
3
- import '../chunk-QEUY3A5P.js';
1
+ export { DensitySwitcher, ThemeSwitcher } from '../chunk-S7KW47IQ.js';
2
+ export { applyDensity, applyStoredPreferences, applyTheme, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-K3OWD7BJ.js';
3
+ import '../chunk-DHPUMOTX.js';
4
+ import '../chunk-QY7UU5ZB.js';
4
5
  import '../chunk-BHHIIK3M.js';
5
6
  import '../chunk-BZFWDIV6.js';
6
7
  import '../chunk-ODEQTPFM.js';
@@ -6,10 +6,13 @@ export type DensityPreference = 'normal' | 'compact' | 'comfortable';
6
6
  * Puts the theme on the root element.
7
7
  *
8
8
  * `system` REMOVES the attribute rather than writing a third value, because
9
- * the stylesheet's own default is the system's: a document with no attribute
10
- * is light, or dark where the platform asks for dark. A `data-theme="system"`
11
- * would match neither selector and paint the light palette on a reader who
12
- * asked for dark.
9
+ * following the system IS the absence of a choice, and the stylesheet's own
10
+ * default is the system's: a document with no attribute is dark, or light
11
+ * where the platform asks for light. What beats the system is an explicit
12
+ * value, in both directions: `light` by a block of its own, `dark` by keeping
13
+ * the light media block from matching. A `data-theme="system"` names no
14
+ * palette, so it would be a choice only to the code that asks whether the
15
+ * attribute is there at all, which is the wrong answer to give it.
13
16
  */
14
17
  export declare function applyTheme(theme: ThemePreference): void;
15
18
  /** Puts the density on the root element. `normal` removes the attribute. */
@@ -24,11 +27,22 @@ export interface PreferenceOptions {
24
27
  * WHY IT IS A HOOK RATHER THAN A CONTEXT. Nothing renders differently by
25
28
  * theme: the palette is CSS custom properties on the root, so the only state
26
29
  * is which attribute is set, and a context would make every component that
27
- * reads it re-render for a change none of them draw.
30
+ * reads it re-render for a change none of them draw. Two calls with one
31
+ * `storageKey` read one value, so a toggle and a row on the same page agree.
28
32
  */
29
33
  export declare function useThemePreference({ storageKey, }: PreferenceOptions): [ThemePreference, (next: ThemePreference) => void];
30
34
  /** The reader's density, kept on the root element and in storage. */
31
35
  export declare function useDensityPreference({ storageKey, }: PreferenceOptions): [DensityPreference, (next: DensityPreference) => void];
36
+ /** The palette the root actually paints: a choice, or the system's answer. */
37
+ export type ResolvedTheme = 'light' | 'dark';
38
+ /**
39
+ * The palette the platform asks for, now and whenever it changes. A server,
40
+ * and a browser that cannot be asked, are answered dark, which is what the
41
+ * theme layer paints for them.
42
+ */
43
+ export declare function useSystemTheme(): ResolvedTheme;
44
+ /** What a preference paints on a platform that asks for `system`. */
45
+ export declare function resolveTheme(preference: ThemePreference, system: ResolvedTheme): ResolvedTheme;
32
46
  export interface StoredPreferences {
33
47
  themeKey?: string | undefined;
34
48
  densityKey?: string | undefined;
@@ -0,0 +1,40 @@
1
+ import { type IconButtonSize, type IconButtonVariant } from '../IconButton/index.js';
2
+ import type { PreferenceControl } from '../ThemeSwitcher/ThemeSwitcher.js';
3
+ import { type ThemePreference } from '../ThemeSwitcher/preferences.js';
4
+ interface ToggleButtonProps {
5
+ /** Named for what a press does, while the page is dark. */
6
+ toLightLabel?: string | undefined;
7
+ /** Named for what a press does, while the page is light. */
8
+ toDarkLabel?: string | undefined;
9
+ /** The rail's foot wears `sm`, the quiet step beside the identity row. */
10
+ size?: IconButtonSize | undefined;
11
+ variant?: IconButtonVariant | undefined;
12
+ className?: string | undefined;
13
+ }
14
+ /**
15
+ * `onChange` receives `light` or `dark`, never `system`: a press is a choice.
16
+ * Stored (the default) or controlled by `value`, as `ThemeSwitcher` is, and a
17
+ * controlled toggle writes nothing of its own.
18
+ */
19
+ export type ThemeToggleProps = ToggleButtonProps & PreferenceControl<ThemePreference>;
20
+ /**
21
+ * One press from the palette on the screen to the other one.
22
+ *
23
+ * IT FLIPS WHAT IS PAINTED, NOT WHAT WAS CHOSEN. A reader following a dark
24
+ * system has the preference `system`; toggling that preference has no
25
+ * opposite to go to, and cycling light, system, dark would spend a press on
26
+ * `system`, which repaints nothing and reads as a button that did not work.
27
+ * So the toggle RESOLVES the preference against the platform (the query the
28
+ * theme layer itself answers) and writes the explicit opposite, which beats
29
+ * the system in both directions. Following the system again is a choice in the
30
+ * full `ThemeSwitcher`, which is where a settings screen offers it.
31
+ *
32
+ * NAMED FOR THE ACTION, drawn as the destination. The name changes with the
33
+ * palette ("Switch to the light theme" on a dark page), so a screen reader
34
+ * hears what a press will do, and the glyph is the palette it goes to: a sun
35
+ * on a dark page, a moon on a light one. It is NOT `aria-pressed`, because
36
+ * neither palette is the "on" state of the other, and a pressed state beside a
37
+ * changing name would announce the change twice in two contradicting ways.
38
+ */
39
+ export declare function ThemeToggle(props: ThemeToggleProps): import("react").JSX.Element;
40
+ export {};
@@ -0,0 +1,2 @@
1
+ export { ThemeToggle } from './ThemeToggle.js';
2
+ export type { ThemeToggleProps } from './ThemeToggle.js';
@@ -0,0 +1,5 @@
1
+ export { ThemeToggle } from '../chunk-C5WJUZVR.js';
2
+ import '../chunk-K3OWD7BJ.js';
3
+ import '../chunk-4UQ7SMPK.js';
4
+ import '../chunk-BZFWDIV6.js';
5
+ import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
- export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-WOYYD2YR.js';
2
- import '../chunk-OFHBK7RI.js';
3
- import '../chunk-DD5BBGBE.js';
1
+ export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-JGRNTBF2.js';
2
+ import '../chunk-SJQ546ID.js';
3
+ import '../chunk-AUS5FNQE.js';
4
4
  import '../chunk-GXQ3B46I.js';
5
- import '../chunk-GTOUGQQK.js';
6
- import '../chunk-O6232G37.js';
5
+ import '../chunk-6MU7HNB4.js';
6
+ import '../chunk-DSUY5F4E.js';
7
7
  import '../chunk-PQADV6P6.js';
8
8
  import '../chunk-7RPGY3JE.js';
9
- import '../chunk-ITHXJHBB.js';
10
- import '../chunk-F27EPQ7D.js';
11
- import '../chunk-BZYDZBAN.js';
9
+ import '../chunk-R25RGPUB.js';
10
+ import '../chunk-4UQ7SMPK.js';
11
+ import '../chunk-ETYEBKR4.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
- export { ToastProvider, Toaster, useToast } from '../chunk-NPZY6YYL.js';
1
+ export { ToastProvider, Toaster, useToast } from '../chunk-UG5ZMAXW.js';
2
2
  import '../chunk-7RPGY3JE.js';
3
- import '../chunk-ITHXJHBB.js';
3
+ import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-BZFWDIV6.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { Toolbar, ToolbarOverflow, ToolbarWide } from '../chunk-5EKIWVOR.js';
1
+ export { Toolbar, ToolbarOverflow, ToolbarWide } from '../chunk-PGRPNDWM.js';
2
2
  import '../chunk-7RPGY3JE.js';
3
- import '../chunk-ITHXJHBB.js';
3
+ import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -37,7 +37,9 @@
37
37
  display: none;
38
38
  }
39
39
 
40
- @media (max-width: 900px) {
40
+ /* Under the shell's breakpoint, strictly, as the shell switches: the wide
41
+ controls fold into the overflow where the rail becomes a drawer. */
42
+ @media (width < 1024px) {
41
43
  .crewlet-toolbar__wide {
42
44
  display: none;
43
45
  }
@@ -1,4 +1,4 @@
1
- export { Tooltip } from '../chunk-XV6WRMBC.js';
1
+ export { Tooltip } from '../chunk-CQY5NTRS.js';
2
2
  import '../chunk-7RPGY3JE.js';
3
- import '../chunk-ITHXJHBB.js';
3
+ import '../chunk-R25RGPUB.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
1
  export { createTreeModel, isTypeAheadKey, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeTypeAhead, treeVisible, typeAheadBuffer, TYPE_AHEAD_RESET_MS, } from './model.js';
2
2
  export type { TreeInput, TreeModel, TypeAheadState } from './model.js';
3
- export { layoutConnectors, layoutForest } from './layout.js';
4
- export type { ForestLayout, LayoutGaps, LayoutNode, LayoutRanks, PlacedNode, TreeConnector, TreeConnectorShape, } from './layout.js';
3
+ export { layoutConnectors, layoutForest, placeGroups } from './layout.js';
4
+ export type { ForestLayout, LayoutGaps, LayoutGroup, LayoutGroupInset, LayoutNode, LayoutRanks, PlacedGroup, PlacedNode, TreeConnector, TreeConnectorShape, } from './layout.js';
5
5
  export { treeItemAction, treeStep, useTreeState } from './useTreeState.js';
6
6
  export type { TreeItemAction, TreeKeyEvent, TreeState, TreeStep, TreeViewHandle } from './useTreeState.js';
7
7
  export { SIZE_EPSILON, useLayoutAnchor, useMeasuredSizes } from './useMeasuredSizes.js';
@@ -1 +1 @@
1
- export { SIZE_EPSILON, TYPE_AHEAD_RESET_MS, createTreeModel, isTypeAheadKey, layoutConnectors, layoutForest, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeItemAction, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeStep, treeTypeAhead, treeVisible, typeAheadBuffer, useLayoutAnchor, useMeasuredSizes, useTreeState } from '../chunk-NTRZGNEX.js';
1
+ export { SIZE_EPSILON, TYPE_AHEAD_RESET_MS, createTreeModel, isTypeAheadKey, layoutConnectors, layoutForest, placeGroups, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeItemAction, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeStep, treeTypeAhead, treeVisible, typeAheadBuffer, useLayoutAnchor, useMeasuredSizes, useTreeState } from '../chunk-S3BCVWTU.js';