@crewlethq/ui 0.4.4 → 0.5.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 (231) 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-37UWTRN6.css → DataTable-OLHPF7D4.css} +35 -38
  45. package/dist/DataView/index.js +16 -16
  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 +6 -6
  69. package/dist/Listbox/index.js +2 -2
  70. package/dist/Listbox/useListbox.d.ts +2 -0
  71. package/dist/{Listbox-ZXYYNN6U.css → Listbox-6WJNJQVQ.css} +32 -7
  72. package/dist/Menu/index.js +4 -4
  73. package/dist/Meter/Meter.d.ts +103 -16
  74. package/dist/Meter/index.d.ts +2 -2
  75. package/dist/Meter/index.js +1 -1
  76. package/dist/{Meter-SKOOXQBC.css → Meter-5VCSFMZW.css} +46 -7
  77. package/dist/Modal/index.js +4 -4
  78. package/dist/{Modal-XYQJ4BL6.css → Modal-JAYBS2KS.css} +13 -4
  79. package/dist/OrgLabel/OrgLabel.d.ts +60 -24
  80. package/dist/OrgLabel/index.d.ts +1 -1
  81. package/dist/OrgLabel/index.js +2 -1
  82. package/dist/{OrgLabel-D7U6QJZD.css → OrgLabel-CR233G34.css} +9 -18
  83. package/dist/OrgNode/index.js +3 -2
  84. package/dist/OrgTable/OrgTable.d.ts +2 -2
  85. package/dist/OrgTable/index.js +8 -7
  86. package/dist/Popover/index.js +2 -2
  87. package/dist/PricingCard/index.js +3 -3
  88. package/dist/{PricingCard-JFI7RYXP.css → PricingCard-7EFXRSD2.css} +4 -5
  89. package/dist/SearchTrigger/SearchTrigger.d.ts +23 -4
  90. package/dist/SearchTrigger/index.d.ts +1 -1
  91. package/dist/SearchTrigger/index.js +1 -1
  92. package/dist/SearchTrigger-Z5D4AAY7.css +112 -0
  93. package/dist/SegmentedControl/index.js +2 -2
  94. package/dist/SegmentedMeter/SegmentedMeter.d.ts +107 -0
  95. package/dist/SegmentedMeter/index.d.ts +3 -0
  96. package/dist/SegmentedMeter/index.js +2 -0
  97. package/dist/SegmentedMeter-KQNML2TW.css +109 -0
  98. package/dist/Select/index.js +3 -3
  99. package/dist/Shortcut/index.js +2 -2
  100. package/dist/SidebarNav/SidebarNav.d.ts +85 -25
  101. package/dist/SidebarNav/index.d.ts +1 -1
  102. package/dist/SidebarNav/index.js +1 -1
  103. package/dist/SidebarNav-X5NLZNWA.css +424 -0
  104. package/dist/StatCard/StatCard.d.ts +59 -12
  105. package/dist/StatCard/index.d.ts +1 -1
  106. package/dist/StatCard/index.js +1 -1
  107. package/dist/StatCard-KPAFD4E2.css +204 -0
  108. package/dist/StatGroup/index.js +1 -1
  109. package/dist/{StatGroup-TGB6AEKM.css → StatGroup-HVG6O62W.css} +8 -9
  110. package/dist/StatusDot/StatusDot.d.ts +24 -6
  111. package/dist/StatusDot/index.js +1 -1
  112. package/dist/StatusDot-7OMCQCZF.css +186 -0
  113. package/dist/Stepper/Stepper.d.ts +78 -0
  114. package/dist/Stepper/index.d.ts +3 -0
  115. package/dist/Stepper/index.js +4 -0
  116. package/dist/Stepper-HW4JM3YH.css +176 -0
  117. package/dist/Tabs/index.js +1 -1
  118. package/dist/{Tabs-MJ2E3VPK.css → Tabs-XCNPHA7B.css} +46 -26
  119. package/dist/Tag/Tag.d.ts +29 -22
  120. package/dist/Tag/index.js +2 -2
  121. package/dist/{Tag-VNZEYLB6.css → Tag-GBE7LQJP.css} +82 -83
  122. package/dist/TagsInput/index.js +7 -7
  123. package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +53 -21
  124. package/dist/ThemeSwitcher/index.d.ts +3 -3
  125. package/dist/ThemeSwitcher/index.js +4 -3
  126. package/dist/ThemeSwitcher/preferences.d.ts +19 -5
  127. package/dist/ThemeToggle/ThemeToggle.d.ts +40 -0
  128. package/dist/ThemeToggle/index.d.ts +2 -0
  129. package/dist/ThemeToggle/index.js +5 -0
  130. package/dist/TimeWindowPicker/index.js +8 -8
  131. package/dist/Toaster/index.js +2 -2
  132. package/dist/Toolbar/index.js +2 -2
  133. package/dist/{Toolbar-IP6LXN45.css → Toolbar-HUOSMNTH.css} +3 -1
  134. package/dist/Tooltip/index.js +2 -2
  135. package/dist/Tree/index.d.ts +2 -2
  136. package/dist/Tree/index.js +1 -1
  137. package/dist/Tree/layout.d.ts +103 -28
  138. package/dist/TreeCanvas/TreeCanvas.d.ts +60 -14
  139. package/dist/TreeCanvas/index.d.ts +1 -1
  140. package/dist/TreeCanvas/index.js +6 -6
  141. package/dist/TreeCanvas/motion.d.ts +3 -2
  142. package/dist/{TreeCanvas-WBNQPHC7.css → TreeCanvas-HVOV4SQN.css} +154 -30
  143. package/dist/TreeGrid/index.js +4 -4
  144. package/dist/{chunk-F6OE5FH3.js → chunk-2FPENTCF.js} +1 -1
  145. package/dist/chunk-4AK52VHB.js +88 -0
  146. package/dist/{chunk-7EM5T4ME.js → chunk-4IQD3HUQ.js} +2 -2
  147. package/dist/{chunk-YODNNSZL.js → chunk-4PZ6FJKW.js} +43 -13
  148. package/dist/{chunk-F27EPQ7D.js → chunk-4UQ7SMPK.js} +1 -1
  149. package/dist/chunk-5QWIJSQM.js +73 -0
  150. package/dist/{chunk-KIC7BZYJ.js → chunk-6MU7HNB4.js} +6 -5
  151. package/dist/{chunk-S2XHHEW4.js → chunk-74KMX7YH.js} +4 -4
  152. package/dist/{chunk-WNI2WSJF.js → chunk-7KBNFFM3.js} +1 -1
  153. package/dist/{chunk-EFSG7HNU.js → chunk-AUS5FNQE.js} +1 -1
  154. package/dist/{chunk-CMEE37QJ.js → chunk-BMYPGGPV.js} +4 -4
  155. package/dist/{chunk-H4FBTAYS.js → chunk-BNCCEER3.js} +8 -8
  156. package/dist/chunk-C5WJUZVR.js +56 -0
  157. package/dist/{chunk-5WS6L6FA.js → chunk-CAIHUYXV.js} +9 -9
  158. package/dist/{chunk-5KSRXHOW.js → chunk-CQY5NTRS.js} +1 -1
  159. package/dist/{chunk-MW356IVK.js → chunk-D6EVJUGU.js} +2 -2
  160. package/dist/{chunk-7PEFUMQJ.js → chunk-DHPUMOTX.js} +2 -2
  161. package/dist/{chunk-HZ5XZNPS.js → chunk-DS2C73RJ.js} +3 -3
  162. package/dist/{chunk-GKHAKGOF.js → chunk-DSUY5F4E.js} +3 -3
  163. package/dist/{chunk-Q4ZPPART.js → chunk-EFYPAJT3.js} +3 -3
  164. package/dist/{chunk-PATXSJGR.js → chunk-ERVO6OUF.js} +17 -17
  165. package/dist/{chunk-BZYDZBAN.js → chunk-ETYEBKR4.js} +3 -3
  166. package/dist/{chunk-CC67MUUO.js → chunk-FD5UEN6X.js} +30 -30
  167. package/dist/{chunk-5SDBMKUO.js → chunk-FIFNP6PL.js} +3 -3
  168. package/dist/{chunk-7HPRF5XN.js → chunk-FUF52K7E.js} +98 -16
  169. package/dist/{chunk-5KPQ6D7N.js → chunk-FZVJDJFN.js} +2 -2
  170. package/dist/chunk-IA232OTU.js +156 -0
  171. package/dist/{chunk-2EOKFKHX.js → chunk-IG27QX7Q.js} +7 -7
  172. package/dist/chunk-IKB6HFGK.js +55 -0
  173. package/dist/{chunk-T43A26SD.js → chunk-IPVQKAHO.js} +6 -6
  174. package/dist/{chunk-3EYF6HKB.js → chunk-IVFJD7WY.js} +28 -9
  175. package/dist/{chunk-XJWXPRSK.js → chunk-JGRNTBF2.js} +11 -11
  176. package/dist/chunk-K3OWD7BJ.js +121 -0
  177. package/dist/{chunk-6KCO2D5C.js → chunk-KD4H66L6.js} +7 -20
  178. package/dist/{chunk-SFZOKW2G.js → chunk-KJ34ZBBI.js} +8 -3
  179. package/dist/{chunk-AQTBF4EB.js → chunk-LFHCXZO5.js} +5 -5
  180. package/dist/{chunk-LWKJQTOM.js → chunk-MICH6QSJ.js} +1 -1
  181. package/dist/chunk-N3DPO6HG.js +226 -0
  182. package/dist/{chunk-S4GZWSKR.js → chunk-OM5E3TTK.js} +1 -1
  183. package/dist/{chunk-3QRYCPXQ.js → chunk-OPKIKM35.js} +6 -6
  184. package/dist/{chunk-5EKIWVOR.js → chunk-PGRPNDWM.js} +2 -2
  185. package/dist/{chunk-FSOW3ARP.js → chunk-PQNILU27.js} +9 -9
  186. package/dist/{chunk-QNCVHRZL.js → chunk-QVAFL2LE.js} +1 -1
  187. package/dist/{chunk-Q3B66TJM.js → chunk-QY7UU5ZB.js} +1 -1
  188. package/dist/{chunk-ITHXJHBB.js → chunk-R25RGPUB.js} +1 -0
  189. package/dist/{chunk-KLJCCMF3.js → chunk-R6735B37.js} +2 -2
  190. package/dist/{chunk-3ZP55QZE.js → chunk-R6FBDTP3.js} +4 -4
  191. package/dist/{chunk-7FZ53WDJ.js → chunk-RIAZM6L3.js} +1 -1
  192. package/dist/chunk-RJM4QCGG.js +550 -0
  193. package/dist/{chunk-NTRZGNEX.js → chunk-S3BCVWTU.js} +215 -46
  194. package/dist/chunk-S7KW47IQ.js +121 -0
  195. package/dist/{chunk-KNYYCWMK.js → chunk-SJQ546ID.js} +4 -4
  196. package/dist/{chunk-D35VTV2Z.js → chunk-SV7QAONL.js} +1 -1
  197. package/dist/{chunk-IAJLHVUA.js → chunk-TIWAHZZ6.js} +1 -1
  198. package/dist/{chunk-2PRH365R.js → chunk-UA7O3KKJ.js} +1 -1
  199. package/dist/{chunk-NPZY6YYL.js → chunk-UG5ZMAXW.js} +6 -6
  200. package/dist/{chunk-NDCATSW7.js → chunk-V34H2YCY.js} +1 -1
  201. package/dist/chunk-WIATRXEJ.js +22 -0
  202. package/dist/{chunk-5C5YMZQU.js → chunk-WOFOMTGB.js} +16 -10
  203. package/dist/{chunk-QYOFACSP.js → chunk-WSOFKOLP.js} +3 -3
  204. package/dist/{chunk-MNAXYY3R.js → chunk-WUVZDFHS.js} +31 -11
  205. package/dist/{chunk-DB2VDLVR.js → chunk-YIMOT5OO.js} +10 -10
  206. package/dist/{chunk-2ZQMA2WB.js → chunk-ZPSOF6VL.js} +2 -2
  207. package/dist/generated/index.d.ts +3 -0
  208. package/dist/generated/index.js +70 -66
  209. package/dist/index.js +70 -66
  210. package/dist/styles.css +2538 -741
  211. package/dist/utils/index.d.ts +1 -1
  212. package/dist/utils/tone.d.ts +7 -12
  213. package/package.json +4 -4
  214. package/scripts/check-css-literals.mjs +159 -23
  215. package/scripts/check-css-variables.mjs +5 -3
  216. package/scripts/css-source.mjs +97 -5
  217. package/dist/Avatar-P2KRQM2B.css +0 -156
  218. package/dist/Charts-D7G2BSXH.css +0 -277
  219. package/dist/CommandPalette-CSJDUCQA.css +0 -115
  220. package/dist/Kbd-W66MXQI5.css +0 -61
  221. package/dist/SearchTrigger-QXOYAUUY.css +0 -79
  222. package/dist/SidebarNav-QGSFKZYA.css +0 -319
  223. package/dist/StatCard-KYPKZUWX.css +0 -111
  224. package/dist/StatusDot-HA2L2FSX.css +0 -84
  225. package/dist/chunk-22O7LAW2.js +0 -41
  226. package/dist/chunk-AJNCATWZ.js +0 -144
  227. package/dist/chunk-F4PJZ4ED.js +0 -245
  228. package/dist/chunk-PNFASD6F.js +0 -98
  229. package/dist/chunk-PZSWF74H.js +0 -15
  230. package/dist/chunk-R66KLW7S.js +0 -143
  231. /package/dist/{chunk-ZCR6YGQ4.js → chunk-PKIN4IMB.js} +0 -0
@@ -182,10 +182,11 @@
182
182
  * and without the boundary a reader reads them as a row of the table's own.
183
183
  *
184
184
  * A SOLID HAIRLINE. The fence was dashed, and a dashed edge MEANS SOMETHING
185
- * ELSE here: it is the mark a card or a node wears when it stands for somebody
186
- * outside the system, on the canvas and in every chart. Two meanings for one
187
- * stroke is how a reader learns neither. Every boundary in this system is the
188
- * same hairline; what differs is where it is drawn.
185
+ * ELSE here: it marks a place nothing fills yet, an empty card slot, a unit
186
+ * with no lead, the ghost of a node being added. A fence round chips that are
187
+ * there is not one of those, and two meanings for one stroke is how a reader
188
+ * learns neither. Every boundary in this system is the same hairline; what
189
+ * differs is where it is drawn.
189
190
  */
190
191
  .crewlet-filter-axis-bar {
191
192
  display: flex;
@@ -1,9 +1,9 @@
1
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-DB2VDLVR.js';
2
- import '../chunk-EFSG7HNU.js';
1
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-YIMOT5OO.js';
2
+ import '../chunk-AUS5FNQE.js';
3
3
  import '../chunk-GXQ3B46I.js';
4
4
  import '../chunk-7RPGY3JE.js';
5
- import '../chunk-ITHXJHBB.js';
6
- import '../chunk-F27EPQ7D.js';
7
- import '../chunk-BZYDZBAN.js';
5
+ import '../chunk-R25RGPUB.js';
6
+ import '../chunk-4UQ7SMPK.js';
7
+ import '../chunk-ETYEBKR4.js';
8
8
  import '../chunk-BZFWDIV6.js';
9
9
  import '../chunk-ODEQTPFM.js';
@@ -1,3 +1,3 @@
1
- export { DIFF_LIST_LABELS, DiffList } from '../chunk-AQTBF4EB.js';
1
+ export { DIFF_LIST_LABELS, DiffList } from '../chunk-LFHCXZO5.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
- export { Disclosure } from '../chunk-LWKJQTOM.js';
2
- export { DisclosureAnatomy } from '../chunk-5KPQ6D7N.js';
1
+ export { Disclosure } from '../chunk-MICH6QSJ.js';
2
+ export { DisclosureAnatomy } from '../chunk-FZVJDJFN.js';
3
3
  import '../chunk-BHHIIK3M.js';
4
4
  import '../chunk-PQADV6P6.js';
5
5
  import '../chunk-BZFWDIV6.js';
@@ -1,14 +1,5 @@
1
1
  import { type HTMLAttributes, type ReactNode } from 'react';
2
- import { type AvatarSizeStep } from '../Avatar/index.js';
3
- /**
4
- * Whether the engine runs this one.
5
- *
6
- * `human` draws the badge with a dashed edge, which is structure and not
7
- * status: a human seat is a real seat that no agent occupies. It is carried by
8
- * the edge rather than by a hue, so the status hues keep meaning only what
9
- * they mean.
10
- */
11
- export type EntityChipVariant = 'agent' | 'human';
2
+ import { type AvatarKind, type AvatarSizeStep } from '../Avatar/index.js';
12
3
  export interface EntityChipProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
13
4
  /** Who or what this is. Drawn as initials and read as the chip's own text. */
14
5
  name: string;
@@ -19,7 +10,13 @@ export interface EntityChipProps extends Omit<HTMLAttributes<HTMLElement>, 'chil
19
10
  * this look on a router's own Link while keeping its navigation.
20
11
  */
21
12
  asChild?: boolean | undefined;
22
- variant?: EntityChipVariant | undefined;
13
+ /**
14
+ * Whether the engine runs this one: an `agent` (the default) is drawn as a
15
+ * squircle, a `human` seat as a circle, which is `Avatar`'s own kind. That is
16
+ * structure rather than status, so it is carried by the outline rather than
17
+ * by a hue and the state hues keep meaning only what they mean.
18
+ */
19
+ kind?: AvatarKind | undefined;
23
20
  /** The badge's step. The name takes the surrounding text size either way. */
24
21
  size?: AvatarSizeStep | undefined;
25
22
  children?: ReactNode;
@@ -37,4 +34,4 @@ export interface EntityChipProps extends Omit<HTMLAttributes<HTMLElement>, 'chil
37
34
  * The badge is DECORATIVE here: the name is printed right beside it, and a
38
35
  * badge that was also read would make every row say the name twice.
39
36
  */
40
- export declare function EntityChip({ name, href, asChild, variant, size, className, children, ...rest }: EntityChipProps): import("react").JSX.Element;
37
+ export declare function EntityChip({ name, href, asChild, kind, size, className, children, ...rest }: EntityChipProps): import("react").JSX.Element;
@@ -1,3 +1,3 @@
1
1
  import './EntityChip.css';
2
2
  export { EntityChip } from './EntityChip.js';
3
- export type { EntityChipProps, EntityChipVariant } from './EntityChip.js';
3
+ export type { EntityChipProps } from './EntityChip.js';
@@ -1,3 +1,3 @@
1
- export { EntityChip } from '../chunk-QYOFACSP.js';
2
- import '../chunk-PNFASD6F.js';
1
+ export { EntityChip } from '../chunk-WSOFKOLP.js';
2
+ import '../chunk-IA232OTU.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { ErrorBoundary } from '../chunk-7EM5T4ME.js';
2
- import '../chunk-BZYDZBAN.js';
1
+ export { ErrorBoundary } from '../chunk-4IQD3HUQ.js';
2
+ import '../chunk-ETYEBKR4.js';
3
3
  import '../chunk-BZFWDIV6.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -10,14 +10,14 @@
10
10
  flex-direction: column;
11
11
  align-items: flex-start;
12
12
  gap: var(--spacing-3);
13
- /* The panel's own body inset and its lift: a fallback is still a panel of
14
- the product, and one drawn without the rim read as a block of unstyled
15
- text where the screen should have been. */
13
+ /* The card's own recipe and its body inset: a fallback is still a panel of
14
+ the product, and one drawn without the card's ground and hairline read as
15
+ a block of unstyled text where the screen should have been. Flat, as
16
+ every card is. */
16
17
  padding: var(--spacing-4);
17
18
  border: 1px solid var(--color-border-default);
18
19
  border-radius: var(--radius-lg);
19
20
  background: var(--color-surface-subtle);
20
- box-shadow: var(--shadow-xs), var(--shadow-hairline);
21
21
  max-width: var(--size-measure);
22
22
  }
23
23
 
@@ -1,3 +1,3 @@
1
- export { IconButton } from '../chunk-F27EPQ7D.js';
1
+ export { IconButton } from '../chunk-4UQ7SMPK.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -88,13 +88,13 @@
88
88
  */
89
89
  .crewlet-icon-btn--secondary {
90
90
  background: var(--color-surface-subtle);
91
- border-color: var(--color-border-default);
91
+ border-color: var(--color-border-strong);
92
92
  color: var(--color-text-primary);
93
93
  }
94
94
 
95
95
  .crewlet-icon-btn--secondary:hover:not(:disabled):not([aria-disabled='true']) {
96
96
  background: var(--color-surface-elevated);
97
- border-color: var(--color-border-hover);
97
+ border-color: var(--color-border-strong-hover);
98
98
  }
99
99
 
100
100
  .crewlet-icon-btn--secondary:active:not(:disabled):not([aria-disabled='true']) {
@@ -1,5 +1,5 @@
1
1
  import { type HTMLAttributes } from 'react';
2
- import { type AvatarShape } from '../Avatar/index.js';
2
+ import { type AvatarKind } from '../Avatar/index.js';
3
3
  export interface ImageUploadProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {
4
4
  /** Current image source. When set, the control shows the image and the overlay label reads "Change". */
5
5
  src?: string | undefined;
@@ -8,11 +8,14 @@ export interface ImageUploadProps extends Omit<HTMLAttributes<HTMLDivElement>, '
8
8
  /** Rendered width and height in pixels. */
9
9
  size?: number | undefined;
10
10
  /**
11
- * Outline shape passed through to the preview and fallback. Defaults to
12
- * "square", as Avatar does: what this control takes is normally a company
13
- * logo, and a wide mark cropped into a circle loses its ends.
11
+ * The picture is an Avatar, so it takes the Avatar's kind, and with it the
12
+ * outline the preview, the fallback, the trigger and the overlay are all
13
+ * drawn in. `agent`, the default as it is Avatar's, is the squircle, which
14
+ * is also the outline for a mark that is not a person, a company's logo
15
+ * among them: a wide mark cropped into a circle loses its ends. `human` is
16
+ * a person's round picture.
14
17
  */
15
- shape?: AvatarShape | undefined;
18
+ kind?: AvatarKind | undefined;
16
19
  /** When true, the control is display only: no overlay, no remove button, no file picker. */
17
20
  readOnly?: boolean | undefined;
18
21
  /** When true, the control shows a spinner and ignores interaction while an upload is in flight. */
@@ -29,9 +32,9 @@ export interface ImageUploadProps extends Omit<HTMLAttributes<HTMLDivElement>, '
29
32
  * current image (or an initials fallback), an overlay with a camera icon and
30
33
  * an "Upload" or "Change" label (shown on hover, or always while no image is
31
34
  * set), a hidden file input, a remove button, and an uploading state. One
32
- * primitive covers both square logos and round profile pictures.
35
+ * primitive covers both a logo in the squircle and a person's round picture.
33
36
  *
34
37
  * The selection callback hands back the raw File rather than a data URL because
35
38
  * the upload now happens over the network.
36
39
  */
37
- export declare const ImageUpload: ({ src, name, size, shape, readOnly, uploading, accept, onSelect, onRemove, className, style, ...rest }: ImageUploadProps) => import("react").JSX.Element;
40
+ export declare const ImageUpload: ({ src, name, size, kind, readOnly, uploading, accept, onSelect, onRemove, className, style, ...rest }: ImageUploadProps) => import("react").JSX.Element;
@@ -1,3 +1,3 @@
1
- export { ImageUpload } from '../chunk-5WS6L6FA.js';
2
- import '../chunk-PNFASD6F.js';
1
+ export { ImageUpload } from '../chunk-CAIHUYXV.js';
2
+ import '../chunk-IA232OTU.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -17,10 +17,11 @@
17
17
  of the six places that read it: a fallback repeated six times is six
18
18
  places for the default to drift apart. */
19
19
  --crewlet-image-upload-size: 64px;
20
- /* The corner that box takes, set per instance beside the size. Declared here
21
- for the same reason the size is: a default repeated as a var() fallback at
22
- each place that reads it is several places for one default to drift. */
23
- --crewlet-image-upload-corner: var(--radius-lg);
20
+ /* The corner that box takes, set per instance beside the size from Avatar's
21
+ own `avatarCorner`, which is the one statement of the ladder a script can
22
+ read. There is deliberately NO default here: the only right value is a
23
+ proportion of the size, and a stylesheet can only restate that proportion,
24
+ which is how the trigger and the picture under it came apart before. */
24
25
  position: relative;
25
26
  display: inline-flex;
26
27
  flex-shrink: 0;
@@ -40,21 +41,34 @@
40
41
  cursor: pointer;
41
42
  }
42
43
 
43
- /* Shape modifiers keep the trigger, the overlay and the Avatar corners in step. */
44
- .crewlet-image-upload--circle .crewlet-image-upload__trigger,
45
- .crewlet-image-upload--circle .crewlet-image-upload__overlay {
44
+ /* The kind modifiers keep the trigger, the overlay and the Avatar outlines in
45
+ step. A person's picture is a circle. */
46
+ .crewlet-image-upload--human .crewlet-image-upload__trigger,
47
+ .crewlet-image-upload--human .crewlet-image-upload__overlay {
46
48
  border-radius: var(--radius-circle);
47
49
  }
48
50
 
49
51
  /* THE SAME CORNER THE PICTURE INSIDE TAKES, which is why it is a variable
50
- rather than a step: Avatar moves a square badge's radius with its box, so a
52
+ rather than a step: Avatar moves an agent badge's corner with its box, so a
51
53
  trigger pinned to one step is rounder or squarer than the badge under it at
52
54
  every size but one, and the badge's corners show through the overlay. */
53
- .crewlet-image-upload--square .crewlet-image-upload__trigger,
54
- .crewlet-image-upload--square .crewlet-image-upload__overlay {
55
+ .crewlet-image-upload--agent .crewlet-image-upload__trigger,
56
+ .crewlet-image-upload--agent .crewlet-image-upload__overlay {
55
57
  border-radius: var(--crewlet-image-upload-corner);
56
58
  }
57
59
 
60
+ /* AND THE SAME SQUIRCLE, where the browser draws one, for the same reason:
61
+ Avatar.css states why its squircle is a whole one at the circle token, and
62
+ this is that rule for the two frames over the picture. The suite holds the
63
+ two blocks to one declaration list. */
64
+ @supports (corner-shape: squircle) {
65
+ .crewlet-image-upload--agent .crewlet-image-upload__trigger,
66
+ .crewlet-image-upload--agent .crewlet-image-upload__overlay {
67
+ corner-shape: squircle;
68
+ border-radius: var(--radius-circle);
69
+ }
70
+ }
71
+
58
72
  .crewlet-image-upload__trigger:disabled {
59
73
  cursor: default;
60
74
  }
@@ -1,5 +1,5 @@
1
- export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-GKHAKGOF.js';
1
+ export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-DSUY5F4E.js';
2
2
  import '../chunk-PQADV6P6.js';
3
- import '../chunk-F27EPQ7D.js';
3
+ import '../chunk-4UQ7SMPK.js';
4
4
  import '../chunk-BZFWDIV6.js';
5
5
  import '../chunk-ODEQTPFM.js';
package/dist/Kbd/Kbd.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { HTMLAttributes, ReactNode } from 'react';
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
2
  /**
3
3
  * Whether the reader is on an Apple platform, where Command is the command key.
4
4
  *
@@ -19,9 +19,12 @@ export interface KbdProps extends HTMLAttributes<HTMLElement> {
19
19
  * A shortcut as the keys it is pressed with, in order: `['Mod', 'Shift',
20
20
  * 'z']`. `Mod` is the platform's command key, so one hint is right on both.
21
21
  *
22
- * With `keys`, the caps are drawn hidden and ONE SENTENCE is read instead:
23
- * "Command plus Shift plus Z". A screen reader given the glyphs reads
24
- * "place of interest sign Z", which names nothing anybody presses.
22
+ * The chord is drawn as ONE cap, in the platform's own notation: `⌘⇧Z` on
23
+ * an Apple platform, where the menus print a chord's symbols run together,
24
+ * and `Ctrl+Shift+Z` everywhere else, where they print them joined by a
25
+ * plus. The cap is drawn hidden and ONE SENTENCE is read instead: "Command
26
+ * plus Shift plus Z". A screen reader given the glyphs reads "place of
27
+ * interest sign Z", which names nothing anybody presses.
25
28
  */
26
29
  keys?: readonly string[] | undefined;
27
30
  /** Overrides platform detection, for a suite or a screenshot. */
@@ -36,5 +39,12 @@ export interface KbdProps extends HTMLAttributes<HTMLElement> {
36
39
  * `keys` is a whole shortcut, which needs the platform mapping and the spoken
37
40
  * sentence. A hint that says Ctrl+Z to somebody on a Mac names a key they do
38
41
  * not press.
42
+ *
43
+ * A CHORD IS ONE CAP. The keys of a shortcut are pressed together, so they
44
+ * are printed together, `⌘K` as the approved design draws every shortcut it
45
+ * shows; a cap per key read as a sequence to press one after another. Each
46
+ * key is still its own `kbd` inside the cap, which is how a key combination
47
+ * is marked up. Two shortcuts are two `Kbd`s: `↑` and `↓` beside "to move" are
48
+ * two keys that each do it, not a chord.
39
49
  */
40
50
  export declare const Kbd: ({ subtle, keys, apple, className, children, ...rest }: KbdProps) => import("react").JSX.Element;
package/dist/Kbd/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Kbd, isApplePlatform, keyGlyph } from '../chunk-SFZOKW2G.js';
1
+ export { Kbd, isApplePlatform, keyGlyph } from '../chunk-KJ34ZBBI.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,71 @@
1
+ /*
2
+ * A keycap: the key's name on a small raised tile.
3
+ *
4
+ * THE APPROVED DESIGN'S CAP: the raised rung inside the strong hairline, at
5
+ * the smallest radius, in the mono face at the micro step and the tertiary
6
+ * ink. The raised fill is what makes it a KEY rather than a word in a box, so
7
+ * the cap is flat on every side: the heavier bottom edge it used to carry was
8
+ * a second way of saying "raised" that the fill now says, and it stood the
9
+ * cap a pixel taller than the line it sits in.
10
+ */
11
+ .crewlet-kbd {
12
+ display: inline-flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ min-width: 18px;
16
+ padding: 0 var(--spacing-1);
17
+ border-radius: var(--radius-xs);
18
+ border: 1px solid var(--color-border-strong);
19
+ background: var(--color-surface-elevated);
20
+ /*
21
+ * The MONO face, not the surrounding one. A keycap is a literal: the reader
22
+ * is being told which character is printed on a key, and a proportional face
23
+ * draws `l`, `I` and `1` as three widths of the same mark.
24
+ */
25
+ font-family: var(--font-family-mono);
26
+ font-variant-ligatures: none;
27
+ font-size: var(--font-size-2xs);
28
+ /* THE DOCUMENT'S OWN LEADING, because a cap is drawn INSIDE a line of text
29
+ and not beside it: a hint at the end of a search field, a key named in a
30
+ sentence, a shortcut in a menu row. Tightened it stood a pixel under the
31
+ line it sits in and the row it was in wobbled by that pixel wherever a
32
+ cap appeared and wherever one did not. */
33
+ line-height: var(--font-line-height-body);
34
+ color: var(--color-text-tertiary);
35
+ white-space: nowrap;
36
+ vertical-align: middle;
37
+ }
38
+
39
+ /*
40
+ * A key inside a CHORD's cap. The whole chord is one cap, so each key in it
41
+ * is text on that cap and nothing more, run together with the next as the
42
+ * platform prints a chord. It is a `kbd` of its own because that is what a key
43
+ * inside a key combination is, and a user agent's `kbd` rule would otherwise
44
+ * set its own face and size on it.
45
+ */
46
+ .crewlet-kbd__key {
47
+ font: inherit;
48
+ }
49
+
50
+ /*
51
+ * A quieter cap: FLATTER, not fainter. The opacity this replaces multiplied
52
+ * the ink as well as the frame, and 0.7 of a text step measures 3.43:1 on the
53
+ * panel, so a hint printing the key a reader is told to press was the one
54
+ * thing on the row they could not read. The cap gives up its raised fill and
55
+ * takes the plain hairline instead, and keeps the tertiary ink, which is
56
+ * measured at 4.5:1 on every surface the package paints on.
57
+ */
58
+ .crewlet-kbd--subtle {
59
+ border-color: var(--color-border-default);
60
+ background: none;
61
+ }
62
+
63
+ /*
64
+ * A whole shortcut: the cap drawn, and one sentence read instead of it. The
65
+ * cap is hidden from assistive technology by the component; this only lays
66
+ * it out.
67
+ */
68
+ .crewlet-kbd-combo {
69
+ display: inline-flex;
70
+ align-items: center;
71
+ }
@@ -1,3 +1,3 @@
1
1
  export { LAYER_GAP, LAYER_REPOSITION_EVENT, LayerHost, outsideBounds, placePopup, useLayerContainer, viewportBounds } from '../chunk-7RPGY3JE.js';
2
- export { focusables, isComposing, isModalLayerOpen, layerCount, useBodyScrollLock, useModalLayer, usePopupLayer } from '../chunk-ITHXJHBB.js';
2
+ export { focusables, isComposing, isModalLayerOpen, layerCount, useBodyScrollLock, useModalLayer, usePopupLayer } from '../chunk-R25RGPUB.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,3 +1,3 @@
1
- export { Link } from '../chunk-2ZQMA2WB.js';
1
+ export { Link } from '../chunk-ZPSOF6VL.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -1,3 +1,3 @@
1
- export { List, ListItem } from '../chunk-HZ5XZNPS.js';
1
+ export { List, ListItem } from '../chunk-DS2C73RJ.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -144,14 +144,24 @@
144
144
  * A row that failed. The rail is the scannable half and the glyph beside it is
145
145
  * the honest one: a reader who cannot tell the rail's hue from the row above
146
146
  * still meets a mark and a word.
147
+ *
148
+ * Both take the danger INK step, not the fill, because both are drawn on the
149
+ * row, and the row is sometimes the accent tint: a failed row can also be the
150
+ * one the reader is on. The fill is measured to 3:1 on the opaque surfaces and
151
+ * no further, so a fill rail on a selected or hovered row clears it only by
152
+ * the luck of the current palette (the red this list drew measured 3.00:1 on
153
+ * a hovered row inside a raised surface in dark); the ink clears 4.5:1 on
154
+ * every row ground, the accent tint included, which is where the palette
155
+ * suite holds a row's state rail (DATA_MARKS) and where the DataTable suite's
156
+ * sheet scan now holds this one.
147
157
  */
148
158
  .crewlet-list__item--danger > .crewlet-list__row {
149
- box-shadow: inset 2px 0 0 var(--color-feedback-danger);
159
+ box-shadow: inset 2px 0 0 var(--color-feedback-danger-ink);
150
160
  }
151
161
 
152
162
  .crewlet-list__danger-mark {
153
163
  flex: none;
154
- color: var(--color-feedback-danger);
164
+ color: var(--color-feedback-danger-ink);
155
165
  }
156
166
 
157
167
  @media (prefers-reduced-motion: reduce) {
@@ -1,10 +1,10 @@
1
- export { ListInput } from '../chunk-FSOW3ARP.js';
2
- import '../chunk-SFZOKW2G.js';
3
- import '../chunk-GKHAKGOF.js';
1
+ export { ListInput } from '../chunk-PQNILU27.js';
2
+ import '../chunk-KJ34ZBBI.js';
3
+ import '../chunk-DSUY5F4E.js';
4
4
  import '../chunk-PQADV6P6.js';
5
- import '../chunk-7RPGY3JE.js';
6
- import '../chunk-ITHXJHBB.js';
7
- import '../chunk-F27EPQ7D.js';
8
5
  import '../chunk-RSAQOKH3.js';
6
+ import '../chunk-7RPGY3JE.js';
7
+ import '../chunk-R25RGPUB.js';
8
+ import '../chunk-4UQ7SMPK.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,2 +1,2 @@
1
- export { TYPE_AHEAD_WINDOW, useListbox, useOptionKeys } from '../chunk-KIC7BZYJ.js';
2
- import '../chunk-ITHXJHBB.js';
1
+ export { TYPE_AHEAD_WINDOW, useListbox, useOptionKeys } from '../chunk-6MU7HNB4.js';
2
+ import '../chunk-R25RGPUB.js';
@@ -17,6 +17,8 @@
17
17
  * so the highlight stays on a row that exists instead of jumping to the top.
18
18
  * - ENTER TAKES THE HIGHLIGHTED OPTION and is prevented, because the field is
19
19
  * usually inside a form that submits on Enter, and choosing is not saving.
20
+ * Enter held with Command, Control or Option is not Enter: it is left to
21
+ * whatever owns that chord.
20
22
  * Tab takes it too where the list is a completion (`tabCommits`); a
21
23
  * multi-select leaves Tab to move focus, as every form control does.
22
24
  * - ESCAPE CLOSES THE LIST AND NOTHING ELSE. It stops there, so the dialog or
@@ -62,8 +62,8 @@
62
62
  * The SECONDARY step, not the primary one. A list of candidates is read by
63
63
  * running the eye down it for the one that matches, and rows drawn at full
64
64
  * strength all shout at once; the row the reader is actually on is the one
65
- * that takes the accent and its ink. The step is held at 4.5:1 on every
66
- * ground a row can sit on, so quieter is not fainter.
65
+ * that lifts to the primary ink. The step is held at 4.5:1 on every ground a
66
+ * row can sit on, so quieter is not fainter.
67
67
  */
68
68
  color: var(--color-text-secondary);
69
69
  font-size: var(--font-size-compact);
@@ -75,14 +75,39 @@
75
75
  }
76
76
 
77
77
  /*
78
- * The active row, whether the arrows put it there or a hover did. The accent
79
- * is what means "here", and it is a tint plus its ink step rather than a fill
80
- * with a label on it.
78
+ * The active row, whether the arrows put it there or a hover did: the RAISED
79
+ * rung with the label lifted to the primary ink, as the approved palette draws
80
+ * it. Every list here opens on a card (a popover, a dialog), and raised is held
81
+ * dE 3 off the card by @crewlethq/tokens because a chip or a well has no border
82
+ * of its own, which is what this row is; every text step clears 4.5:1 on it.
83
+ *
84
+ * It used to be the accent's soft tint with the accent ink. The accent is the
85
+ * primary action's fill and the focus ring, so a violet row under the arrows
86
+ * read as a second primary on every surface that offers a list, the same
87
+ * reason the rail's current row stopped wearing it. What the accent still
88
+ * marks in a list is a CHOICE made (a multi-select's tick), not where the
89
+ * arrows are.
81
90
  */
82
91
  .crewlet-listbox__option[aria-selected='true'],
83
92
  .crewlet-listbox__option:hover {
84
- background: var(--color-brand-accent-soft);
85
- color: var(--color-brand-accent-ink);
93
+ background: var(--color-surface-elevated);
94
+ color: var(--color-text-primary);
95
+ }
96
+
97
+ /*
98
+ * FORCED COLORS repaints every author background to Canvas, which took the
99
+ * highlight with it: the arrows moved through a list in which no row looked
100
+ * any different, in every Select, Combobox and command palette. An outline is
101
+ * the one mark the mode keeps, drawn inside the row so the list's own clip
102
+ * does not cut it, in the system's colour for exactly this.
103
+ */
104
+ @media (forced-colors: active) {
105
+ .crewlet-listbox__option[aria-selected='true'] {
106
+ outline-style: solid;
107
+ outline-width: 2px;
108
+ outline-color: Highlight;
109
+ outline-offset: -2px;
110
+ }
86
111
  }
87
112
 
88
113
  .crewlet-listbox__option[aria-disabled='true'] {
@@ -1,7 +1,7 @@
1
- export { Menu } from '../chunk-T43A26SD.js';
1
+ export { Menu } from '../chunk-IPVQKAHO.js';
2
2
  import '../chunk-7RPGY3JE.js';
3
- import '../chunk-ITHXJHBB.js';
4
- import '../chunk-F27EPQ7D.js';
5
- import '../chunk-BZYDZBAN.js';
3
+ import '../chunk-R25RGPUB.js';
4
+ import '../chunk-4UQ7SMPK.js';
5
+ import '../chunk-ETYEBKR4.js';
6
6
  import '../chunk-BZFWDIV6.js';
7
7
  import '../chunk-ODEQTPFM.js';