@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,277 +0,0 @@
1
- /* The chart kit: a legend, a ranked bar list, a stacked bar and an activity
2
- strip. Hand-drawn rather than a charting library, for one reason that
3
- decides it: every mark here reads tokens, in two themes, at the contrast
4
- floors the palette suite measures, and a library's theming surface is a
5
- second design system to keep in step with this one. */
6
-
7
- /* ─── Legend ──────────────────────────────────────────────────── */
8
- .crewlet-legend {
9
- display: flex;
10
- flex-wrap: wrap;
11
- align-items: center;
12
- gap: var(--spacing-1) var(--spacing-3);
13
- margin: 0;
14
- padding: 0;
15
- list-style: none;
16
- font-size: var(--font-size-xs);
17
- color: var(--color-text-tertiary);
18
- }
19
-
20
- .crewlet-legend__item {
21
- display: inline-flex;
22
- align-items: center;
23
- gap: var(--spacing-1);
24
- min-width: 0;
25
- }
26
-
27
- /*
28
- * A ROUNDED SQUARE, NOT A DOT. At the smallest radius step an 8px swatch is a
29
- * circle, and a circle in this system is a StatusDot: a legend beside a chart
30
- * was reading as a row of live states. Half that step keeps the corner soft
31
- * and the shape square, and it is written as half a step rather than as 2px so
32
- * it is still a value off the scale.
33
- */
34
- .crewlet-legend__swatch {
35
- width: 8px;
36
- height: 8px;
37
- flex: none;
38
- border-radius: calc(var(--radius-xs) / 2);
39
- background: var(--crewlet-legend-swatch-color, var(--color-data-other));
40
- }
41
-
42
- .crewlet-legend__label {
43
- overflow: hidden;
44
- text-overflow: ellipsis;
45
- white-space: nowrap;
46
- }
47
-
48
- .crewlet-legend__value {
49
- color: var(--color-text-secondary);
50
- font-variant-numeric: tabular-nums;
51
- }
52
-
53
- /* ─── Bar list ────────────────────────────────────────────────── */
54
- .crewlet-bar-list {
55
- display: flex;
56
- flex-direction: column;
57
- gap: var(--spacing-2);
58
- margin: 0;
59
- padding: 0;
60
- list-style: none;
61
- }
62
-
63
- .crewlet-bar-list__item {
64
- min-width: 0;
65
- }
66
-
67
- .crewlet-bar-list__row {
68
- display: flex;
69
- flex-direction: column;
70
- gap: var(--spacing-1);
71
- width: 100%;
72
- padding: 0;
73
- border: none;
74
- background: none;
75
- color: inherit;
76
- font: inherit;
77
- text-align: left;
78
- text-decoration: none;
79
- }
80
-
81
- .crewlet-bar-list__row--pressable {
82
- cursor: pointer;
83
- }
84
-
85
- .crewlet-bar-list__row--pressable:hover .crewlet-bar-list__label {
86
- color: var(--color-text-primary);
87
- }
88
-
89
- .crewlet-bar-list__row--pressable:focus-visible {
90
- outline: 2px solid var(--color-focus);
91
- outline-offset: 2px;
92
- border-radius: var(--radius-xs);
93
- }
94
-
95
- .crewlet-bar-list__head {
96
- display: flex;
97
- align-items: baseline;
98
- gap: var(--spacing-2);
99
- min-width: 0;
100
- }
101
-
102
- .crewlet-bar-list__label {
103
- flex: 1;
104
- min-width: 0;
105
- overflow: hidden;
106
- text-overflow: ellipsis;
107
- white-space: nowrap;
108
- font-size: var(--font-size-compact);
109
- color: var(--color-text-primary);
110
- }
111
-
112
- .crewlet-bar-list__value {
113
- font-size: var(--font-size-compact);
114
- color: var(--color-text-secondary);
115
- /* Tabular, so a column of numbers lines up on its digits and a push that
116
- changes one of them does not move the rest. */
117
- font-variant-numeric: tabular-nums;
118
- }
119
-
120
- .crewlet-bar-list__track {
121
- display: block;
122
- height: 5px;
123
- border-radius: var(--radius-pill);
124
- background: var(--color-surface-inset);
125
- overflow: hidden;
126
- }
127
-
128
- .crewlet-bar-list__bar {
129
- display: block;
130
- height: 100%;
131
- border-radius: var(--radius-pill);
132
- background: var(--crewlet-bar-list-bar-color, var(--color-data-other));
133
- }
134
-
135
- /*
136
- * THE CAPTION STEP. These are sentences a reader actually reads (what a row is
137
- * besides its name, how long the tail is, that there is nothing here at all),
138
- * and the 11px step is the MICRO-LABEL register: it is for a word above a
139
- * column, not for a line of prose.
140
- */
141
- .crewlet-bar-list__sub,
142
- .crewlet-bar-list__more,
143
- .crewlet-bar-list__empty {
144
- font-size: var(--font-size-xs);
145
- color: var(--color-text-tertiary);
146
- }
147
-
148
- /*
149
- * THE SENTENCE STARTS WHERE THE BARS WOULD HAVE. It stands in for them, so it
150
- * takes the inset the panel holding it gives every other row and none of its
151
- * own.
152
- *
153
- * It carried the panel's own step for a while, which was a repair applied at
154
- * the wrong end: the sentence was landing against a card's border because the
155
- * CARD was drawing its content with no inset at all, and a padding here moved
156
- * this one line while every sibling in the same card stayed against the edge.
157
- * A card draws its own content in a body now, so a padding here is the panel's
158
- * inset a second time.
159
- */
160
- .crewlet-bar-list__empty {
161
- margin: 0;
162
- padding: 0;
163
- }
164
-
165
- .crewlet-bar-list__sub {
166
- overflow: hidden;
167
- text-overflow: ellipsis;
168
- white-space: nowrap;
169
- }
170
-
171
- /* ─── Stacked bar ─────────────────────────────────────────────── */
172
- .crewlet-stacked-bar__track {
173
- display: flex;
174
- height: 6px;
175
- border-radius: var(--radius-pill);
176
- background: var(--color-surface-inset);
177
- overflow: hidden;
178
- }
179
-
180
- .crewlet-stacked-bar__segment {
181
- height: 100%;
182
- background: var(--crewlet-stacked-bar-segment-color, var(--color-data-other));
183
- }
184
-
185
- /* ─── Activity strip ──────────────────────────────────────────── */
186
- .crewlet-activity-strip {
187
- display: flex;
188
- align-items: flex-end;
189
- gap: var(--crewlet-activity-strip-gap, 2px);
190
- height: var(--crewlet-activity-strip-height, 26px);
191
- width: 100%;
192
- }
193
-
194
- .crewlet-activity-strip__cell {
195
- flex: 1;
196
- min-width: var(--crewlet-activity-strip-cell-min-width, 2px);
197
- height: var(--crewlet-activity-strip-fill, 10%);
198
- /*
199
- * A quarter of the smallest step. A cell is two pixels wide, so at the step
200
- * itself every mark was a capsule and the strip read as a row of pills
201
- * rather than as a shape.
202
- */
203
- border-radius: calc(var(--radius-xs) / 4);
204
- /* An empty bucket is a neutral hairline: the bucket happened, and nothing
205
- happened in it. That is a different fact from a quiet one, so it takes a
206
- different colour rather than a fainter version of the same one. */
207
- background: var(--color-border-default);
208
- }
209
-
210
- .crewlet-activity-strip__cell.is-active {
211
- background: var(--color-data-1);
212
- }
213
-
214
- /* ─── Time series, and the sparkline beside a number ──────────── */
215
-
216
- /*
217
- * The plot fills the width it is given and does not clip: a line that touches
218
- * the top of its own box is a peak, and a box that clipped it would silently
219
- * flatten exactly the moment a reader is looking for.
220
- */
221
- .crewlet-time-series {
222
- margin: 0;
223
- min-width: 0;
224
- }
225
-
226
- .crewlet-chart {
227
- display: block;
228
- width: 100%;
229
- overflow: visible;
230
- }
231
-
232
- /* The baseline: a hairline, because it is where the plot sits rather than
233
- something to read. */
234
- .crewlet-chart__axis-line {
235
- stroke: var(--color-border-default);
236
- stroke-width: 1;
237
- }
238
-
239
- /*
240
- * The grid is DASHED, which is what keeps three horizontal lines from reading
241
- * as three series. They carry no values of their own: the peak under the plot
242
- * is the scale, and a chart this size cannot label four gridlines legibly.
243
- */
244
- .crewlet-chart__grid-line {
245
- stroke: var(--color-border-default);
246
- stroke-width: 1;
247
- stroke-dasharray: 2 4;
248
- }
249
-
250
- /*
251
- * The series line. It is painted with the colour passed on the element,
252
- * because a series' hue is data rather than style; the shape of the stroke is
253
- * the one thing that is the same for all of them.
254
- */
255
- .crewlet-chart__series {
256
- fill: none;
257
- stroke-width: 1.75;
258
- stroke-linejoin: round;
259
- stroke-linecap: round;
260
- }
261
-
262
- /* The window's two ends and its peak, under the plot: the scale, as words. */
263
- .crewlet-time-series__scale {
264
- display: flex;
265
- justify-content: space-between;
266
- gap: var(--spacing-2);
267
- min-width: 0;
268
- font-size: var(--font-size-xs);
269
- color: var(--color-text-tertiary);
270
- font-variant-numeric: tabular-nums;
271
- }
272
-
273
- .crewlet-spark {
274
- display: block;
275
- width: 100%;
276
- overflow: visible;
277
- }
@@ -1,115 +0,0 @@
1
- /*
2
- * The command palette: a field, a list, and a line of keyboard hints.
3
- *
4
- * It is a Modal with its body's padding dropped, so the three bands run edge to
5
- * edge and the field reads as the surface rather than as a question on a form.
6
- * The rows are the listbox register (`Listbox.css`), because a result here and
7
- * a completion in a field are the same thing to a reader and the accent that
8
- * marks the active row has to mean the same in both.
9
- *
10
- * THE TWO OVERRIDES BELOW NAME BOTH CLASSES ON PURPOSE. A single class would
11
- * tie with the rule it is overriding (`.crewlet-modal--md`,
12
- * `.crewlet-input--command`), and a tie is broken by the order the stylesheets
13
- * happen to be concatenated in, which is alphabetical over filenames.
14
- */
15
-
16
- .crewlet-modal.crewlet-palette {
17
- /* Wider than a prompt and shorter than the window: a launcher is read in one
18
- glance, and a list taller than this is a list nobody scans. */
19
- --crewlet-modal-width: 620px;
20
-
21
- max-height: min(60dvh, 520px);
22
- }
23
-
24
- /*
25
- * THE BODY LAYS THE THREE BANDS OUT, and the RESULTS are what scrolls.
26
- *
27
- * A Modal's body is a block that scrolls its whole content, which is right for
28
- * a dialog read top to bottom and wrong here: the field would ride up out of
29
- * view as the arrows walked the list, and the list, sized to its own content,
30
- * would never overflow, so the row the listbox brings into view by scrolling
31
- * that element would have nowhere to go.
32
- */
33
- .crewlet-palette .crewlet-modal__body {
34
- display: flex;
35
- flex-direction: column;
36
- overflow: hidden;
37
- }
38
-
39
- /*
40
- * The field, drawn as the surface's own top band: no box of its own, the full
41
- * height of a large row, and the question asked at the reading size rather
42
- * than at a control's. It is the first thing on the surface and the only thing
43
- * with focus, so it is the surface's headline as much as its input.
44
- */
45
- .crewlet-input.crewlet-palette__field {
46
- flex-shrink: 0;
47
- min-height: var(--size-row-lg);
48
- padding-inline: var(--spacing-4);
49
- border: none;
50
- border-bottom: 1px solid var(--color-border-default);
51
- border-radius: 0;
52
- background: transparent;
53
- }
54
-
55
- .crewlet-input.crewlet-palette__field .crewlet-input__control {
56
- font-size: var(--font-size-md);
57
- }
58
-
59
- /*
60
- * THE FOOT IS THE KEYBOARD'S OWN BAND, at the micro register rather than the
61
- * modal footer's. A modal's foot carries buttons and is sized for them; this
62
- * one carries a line of keycaps saying what the arrows, Enter and Escape do,
63
- * and at a dialog's padding that line reads as an action row nobody can press.
64
- *
65
- * Both classes are named for the same reason the two rules below are: a single
66
- * class ties with `.crewlet-modal__footer`, and a tie is broken by the order
67
- * the stylesheets are concatenated in.
68
- */
69
- .crewlet-palette .crewlet-modal__footer {
70
- gap: var(--spacing-3);
71
- padding: var(--spacing-2) var(--spacing-3);
72
- }
73
-
74
- .crewlet-palette .crewlet-modal__footer-start {
75
- gap: var(--spacing-3);
76
- font-size: var(--font-size-2xs);
77
- }
78
-
79
- .crewlet-palette__results {
80
- flex: 1 1 auto;
81
- min-height: 0;
82
- overflow-y: auto;
83
- overscroll-behavior: contain;
84
- padding: var(--spacing-1);
85
- }
86
-
87
- /*
88
- * The glyph takes the ROW'S colour rather than a quiet step of its own, so the
89
- * row under the arrows turns accent in one piece. Pinned to the tertiary step
90
- * it stayed grey inside the highlight, which read as a glyph that had failed
91
- * to load.
92
- */
93
- .crewlet-palette__icon {
94
- display: inline-flex;
95
- flex-shrink: 0;
96
- }
97
-
98
- .crewlet-palette__label {
99
- min-width: 0;
100
- overflow: hidden;
101
- text-overflow: ellipsis;
102
- white-space: nowrap;
103
- }
104
-
105
- /*
106
- * An honest empty state: it says which kind of nothing this is, and the
107
- * component takes the sentence from the caller for that reason.
108
- */
109
- .crewlet-palette__empty {
110
- margin: 0;
111
- padding: var(--spacing-5) var(--spacing-4);
112
- color: var(--color-text-tertiary);
113
- font-size: var(--font-size-compact);
114
- text-align: center;
115
- }
@@ -1,61 +0,0 @@
1
- /* A keycap: the key's name on a small raised tile. */
2
- .crewlet-kbd {
3
- display: inline-flex;
4
- align-items: center;
5
- gap: var(--spacing-1);
6
- min-width: 18px;
7
- padding: 1px var(--spacing-1);
8
- border-radius: var(--radius-xs);
9
- border: 1px solid var(--color-border-default);
10
- /* The thicker bottom edge is the whole of the "cap": one border, drawn
11
- heavier on one side, reads as a key without a shadow that forced-colors
12
- mode would drop. */
13
- border-bottom-width: 2px;
14
- background: var(--color-surface-inset);
15
- /*
16
- * The MONO face, not the surrounding one. A keycap is a literal: the reader
17
- * is being told which character is printed on a key, and a proportional face
18
- * draws `l`, `I` and `1` as three widths of the same mark.
19
- */
20
- font-family: var(--font-family-mono);
21
- font-variant-ligatures: none;
22
- font-size: var(--font-size-2xs);
23
- /* THE DOCUMENT'S OWN LEADING, because a cap is drawn INSIDE a line of text
24
- and not beside it: a hint at the end of a search field, a key named in a
25
- sentence, a shortcut in a menu row. Tightened it stood a pixel under the
26
- line it sits in and the row it was in wobbled by that pixel wherever a
27
- cap appeared and wherever one did not. */
28
- line-height: var(--font-line-height-normal);
29
- color: var(--color-text-tertiary);
30
- white-space: nowrap;
31
- vertical-align: middle;
32
- }
33
-
34
- /*
35
- * A quieter cap: FLATTER, not fainter. The opacity this replaces multiplied
36
- * the ink as well as the frame, and 0.7 of a text step measures 3.43:1 on the
37
- * panel, so a hint printing the key a reader is told to press was the one
38
- * thing on the row they could not read. The cap gives up its raised edge and
39
- * its fill instead, and keeps the tertiary ink, which is measured at 4.5:1 on
40
- * every surface the package paints on.
41
- */
42
- .crewlet-kbd--subtle {
43
- border-bottom-width: 1px;
44
- background: none;
45
- }
46
-
47
- /*
48
- * A whole shortcut: the caps drawn together, and one sentence read instead of
49
- * them. The caps are hidden from assistive technology by the component; this
50
- * only lays them out.
51
- */
52
- .crewlet-kbd-combo {
53
- display: inline-flex;
54
- align-items: center;
55
- }
56
-
57
- .crewlet-kbd-keys {
58
- display: inline-flex;
59
- align-items: center;
60
- gap: var(--spacing-1);
61
- }
@@ -1,79 +0,0 @@
1
- /*
2
- * A button drawn as the field it stands in for.
3
- *
4
- * Below the shell breakpoint it keeps the glyph and drops the label and the
5
- * hint, which is why the name lives on the button rather than in its text.
6
- */
7
-
8
- .crewlet-search-trigger {
9
- display: inline-flex;
10
- align-items: center;
11
- gap: var(--spacing-2);
12
- /* The resting width of the box. A topbar with less room sets it. */
13
- --crewlet-search-trigger-width: 220px;
14
- min-width: var(--crewlet-search-trigger-width);
15
- height: var(--size-control-md);
16
- padding: 0 var(--spacing-2) 0 var(--spacing-3);
17
- border: 1px solid var(--color-border-default);
18
- border-radius: var(--radius-md);
19
- background: var(--color-surface-subtle);
20
- color: var(--color-text-tertiary);
21
- font-family: var(--font-family-sans);
22
- font-size: var(--font-size-compact);
23
- cursor: pointer;
24
- transition:
25
- border-color var(--motion-duration-fast) var(--motion-easing-default),
26
- color var(--motion-duration-fast) var(--motion-easing-default);
27
- }
28
-
29
- .crewlet-search-trigger:hover {
30
- border-color: var(--color-border-hover);
31
- color: var(--color-text-primary);
32
- }
33
-
34
- .crewlet-search-trigger:focus-visible {
35
- outline: 2px solid var(--color-focus);
36
- outline-offset: 2px;
37
- }
38
-
39
- .crewlet-search-trigger__icon {
40
- display: inline-flex;
41
- flex: none;
42
- }
43
-
44
- /* The glyph is quieter than the word beside it, on the decoration step, which
45
- is the one thing that step is for. */
46
- .crewlet-search-trigger__icon svg {
47
- color: var(--color-text-muted);
48
- }
49
-
50
- .crewlet-search-trigger__label {
51
- overflow: hidden;
52
- text-overflow: ellipsis;
53
- white-space: nowrap;
54
- }
55
-
56
- /* The hint as a whole, so its keys stay together at the end of the box. */
57
- .crewlet-search-trigger__shortcut {
58
- display: inline-flex;
59
- align-items: center;
60
- margin-left: auto;
61
- flex: none;
62
- }
63
-
64
- @media (max-width: 900px) {
65
- .crewlet-search-trigger {
66
- min-width: 0;
67
- }
68
-
69
- .crewlet-search-trigger__label,
70
- .crewlet-search-trigger__shortcut {
71
- display: none;
72
- }
73
- }
74
-
75
- @media (prefers-reduced-motion: reduce) {
76
- .crewlet-search-trigger {
77
- transition: none;
78
- }
79
- }