@crewlethq/ui 0.48.2 → 0.49.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 (190) hide show
  1. package/README.md +60 -0
  2. package/dist/AgentHandoffPanel/index.js +4 -4
  3. package/dist/AppShell/index.js +4 -4
  4. package/dist/{AppShell-5P575KYA.css → AppShell-BIUFNT3J.css} +30 -11
  5. package/dist/ArrangeList/index.js +4 -4
  6. package/dist/ArtifactBar/index.js +9 -9
  7. package/dist/{ArtifactBar-6PGWGKN2.css → ArtifactBar-UMZCTARR.css} +9 -0
  8. package/dist/ArtifactCard/ArtifactCard.d.ts +30 -1
  9. package/dist/ArtifactCard/index.js +12 -5
  10. package/dist/{ArtifactCard-OGTMO2KI.css → ArtifactCard-SOB63NV5.css} +72 -1
  11. package/dist/ArtifactCover/index.js +2 -2
  12. package/dist/ArtifactIcon/index.js +2 -2
  13. package/dist/ArtifactKindGlyph/ArtifactKindGlyph.d.ts +7 -3
  14. package/dist/ArtifactKindGlyph/index.js +1 -1
  15. package/dist/ArtifactKindIllustration/ArtifactKindIllustration.d.ts +4 -3
  16. package/dist/ArtifactKindIllustration/index.js +1 -1
  17. package/dist/{ArtifactKinds-CVD3FCYO.css → ArtifactKinds-O3CALPVX.css} +1 -0
  18. package/dist/ArtifactMakeRow/index.js +2 -2
  19. package/dist/ArtifactNameCell/ArtifactNameCell.d.ts +14 -1
  20. package/dist/ArtifactNameCell/index.d.ts +1 -1
  21. package/dist/ArtifactNameCell/index.js +2 -2
  22. package/dist/{ArtifactNameCell-RTVP4LO4.css → ArtifactNameCell-3AHLUSE5.css} +12 -0
  23. package/dist/AvatarPicker/index.js +7 -7
  24. package/dist/BrandChip/BrandChip.d.ts +26 -0
  25. package/dist/BrandChip/index.d.ts +3 -0
  26. package/dist/BrandChip/index.js +2 -0
  27. package/dist/BrandChip-SQWBC2WU.css +81 -0
  28. package/dist/BrandSample/BrandSample.d.ts +75 -0
  29. package/dist/BrandSample/index.d.ts +3 -0
  30. package/dist/BrandSample/index.js +5 -0
  31. package/dist/BrandSample-G5V7GKR2.css +185 -0
  32. package/dist/BrandScope/BrandScope.d.ts +61 -0
  33. package/dist/BrandScope/index.d.ts +4 -0
  34. package/dist/BrandScope/index.js +4 -0
  35. package/dist/BrandScope-H2KZHGT7.css +29 -0
  36. package/dist/Canvas/index.js +2 -2
  37. package/dist/CanvasBoard/index.js +4 -4
  38. package/dist/CanvasToolbar/index.js +3 -3
  39. package/dist/Checkbox/Checkbox.d.ts +8 -0
  40. package/dist/Checkbox/index.js +3 -3
  41. package/dist/{Checkbox-ALWG3WV2.css → Checkbox-MB22OW6P.css} +18 -0
  42. package/dist/ColorField/ColorField.d.ts +63 -0
  43. package/dist/ColorField/index.d.ts +3 -0
  44. package/dist/ColorField/index.js +11 -0
  45. package/dist/ColorField-2OIOWT3Z.css +68 -0
  46. package/dist/ColorSwatch/ColorSwatch.d.ts +43 -0
  47. package/dist/ColorSwatch/index.d.ts +3 -0
  48. package/dist/ColorSwatch/index.js +9 -0
  49. package/dist/ColorSwatch-DNMUFHNS.css +83 -0
  50. package/dist/Combobox/Combobox.d.ts +45 -4
  51. package/dist/Combobox/index.d.ts +1 -1
  52. package/dist/Combobox/index.js +3 -3
  53. package/dist/Combobox-GBCWXWEB.css +163 -0
  54. package/dist/CommandPalette/index.js +5 -5
  55. package/dist/CommentThread/index.js +5 -5
  56. package/dist/Composer/index.js +3 -3
  57. package/dist/ConfirmField/index.js +3 -3
  58. package/dist/ContrastBadge/ContrastBadge.d.ts +63 -0
  59. package/dist/ContrastBadge/index.d.ts +3 -0
  60. package/dist/ContrastBadge/index.js +6 -0
  61. package/dist/ContrastBadge-CBZPGG3G.css +47 -0
  62. package/dist/DataGrid/DataGrid.d.ts +28 -1
  63. package/dist/DataGrid/index.js +8 -1
  64. package/dist/{DataGrid-AQKPJD7W.css → DataGrid-VNGQESJA.css} +15 -0
  65. package/dist/DataTable/index.js +6 -6
  66. package/dist/DataView/index.js +10 -10
  67. package/dist/DateTimePicker/index.js +3 -3
  68. package/dist/DocTabsEditor/index.js +4 -4
  69. package/dist/{Editor-6U4BJ25W.js → Editor-MLGK3KOG.js} +3 -3
  70. package/dist/FolderTile/FolderTile.d.ts +91 -0
  71. package/dist/FolderTile/index.d.ts +3 -0
  72. package/dist/FolderTile/index.js +7 -0
  73. package/dist/FolderTile-FDT5Y63Z.css +231 -0
  74. package/dist/HuePicker/index.js +6 -6
  75. package/dist/Input/index.js +2 -2
  76. package/dist/LinkInterstitial/index.js +3 -3
  77. package/dist/ListInput/index.js +3 -3
  78. package/dist/LogoSlot/LogoSlot.d.ts +84 -0
  79. package/dist/LogoSlot/index.d.ts +3 -0
  80. package/dist/LogoSlot/index.js +9 -0
  81. package/dist/LogoSlot-T2UFOJXU.css +159 -0
  82. package/dist/MarkdownEditor/index.js +6 -6
  83. package/dist/Menu/index.js +2 -2
  84. package/dist/MergeConflicts/index.js +6 -6
  85. package/dist/Modal/Modal.d.ts +13 -0
  86. package/dist/Modal/index.js +2 -2
  87. package/dist/{Modal-TOEWHDCQ.css → Modal-3HMP7WAZ.css} +30 -0
  88. package/dist/OrgTable/index.js +1 -1
  89. package/dist/PresenterView/index.js +3 -3
  90. package/dist/PrincipalPicker/index.js +4 -4
  91. package/dist/RichEditor/index.js +1 -1
  92. package/dist/SegmentedControl/index.js +5 -5
  93. package/dist/Select/index.js +2 -2
  94. package/dist/SelectionBar/SelectionBar.d.ts +50 -0
  95. package/dist/SelectionBar/index.d.ts +3 -0
  96. package/dist/SelectionBar/index.js +9 -0
  97. package/dist/SelectionBar-XPWKUOSC.css +61 -0
  98. package/dist/ShareDialog/index.js +6 -6
  99. package/dist/SheetColumnEditor/index.js +10 -10
  100. package/dist/SheetGrid/index.js +4 -4
  101. package/dist/SlideFilmstrip/index.js +3 -3
  102. package/dist/Switcher/index.js +4 -4
  103. package/dist/Tabs/index.js +4 -4
  104. package/dist/TagsInput/index.js +2 -2
  105. package/dist/ThemeGallery/ThemeGallery.d.ts +13 -2
  106. package/dist/ThemeGallery/index.js +3 -1
  107. package/dist/{ThemeGallery-X35Y25EX.css → ThemeGallery-UEFZRT6W.css} +21 -0
  108. package/dist/ThemeSwitcher/index.js +6 -6
  109. package/dist/TimeWindowPicker/index.js +6 -6
  110. package/dist/TreeCanvas/index.js +3 -3
  111. package/dist/TreeGrid/index.js +1 -1
  112. package/dist/TypeSpecimen/TypeSpecimen.d.ts +49 -0
  113. package/dist/TypeSpecimen/index.d.ts +3 -0
  114. package/dist/TypeSpecimen/index.js +3 -0
  115. package/dist/TypeSpecimen-WK6YNHL7.css +96 -0
  116. package/dist/VersionCompare/index.js +6 -6
  117. package/dist/{chunk-RBUA7ZNK.js → chunk-34RMTXDZ.js} +1 -1
  118. package/dist/{chunk-YFUG6ARA.js → chunk-3QSKDZR5.js} +1 -1
  119. package/dist/chunk-5SGHW42B.js +23 -0
  120. package/dist/{chunk-R2EOET5Q.js → chunk-627KFRON.js} +2 -2
  121. package/dist/{chunk-SMVWDO72.js → chunk-6FVGSWLS.js} +1 -1
  122. package/dist/{chunk-ILDNJHRU.js → chunk-AVL52EME.js} +1 -1
  123. package/dist/chunk-B235ANDO.js +66 -0
  124. package/dist/{chunk-MZ3QFQDL.js → chunk-CAVWDJF4.js} +1 -1
  125. package/dist/{chunk-BLQRC7QR.js → chunk-D6MTBXAJ.js} +2 -2
  126. package/dist/{chunk-2MYSESZF.js → chunk-FB5CFQTG.js} +82 -12
  127. package/dist/{chunk-KNMQS3JY.js → chunk-GHY63X4C.js} +1 -1
  128. package/dist/{chunk-DY4DQ7EB.js → chunk-GP4YWZFO.js} +1 -1
  129. package/dist/{chunk-NRWJUGNA.js → chunk-H55D66IK.js} +1 -1
  130. package/dist/{chunk-JNFTFAPN.js → chunk-H7NMJ5AI.js} +2 -2
  131. package/dist/{chunk-GKRPPSWY.js → chunk-ILFEWRLG.js} +1 -1
  132. package/dist/chunk-ITI2Z44C.js +139 -0
  133. package/dist/{chunk-P5VGSVWG.js → chunk-J24Q4HTD.js} +17 -8
  134. package/dist/{chunk-2FDTSARB.js → chunk-JFDIMO3A.js} +2 -2
  135. package/dist/chunk-JKAFEFFC.js +44 -0
  136. package/dist/{chunk-6HYPQ5PY.js → chunk-JWNYI7UD.js} +1 -1
  137. package/dist/{chunk-WT5UPL6P.js → chunk-KHZYAEGZ.js} +1 -1
  138. package/dist/chunk-M4QM477B.js +80 -0
  139. package/dist/{chunk-YUDUYMZB.js → chunk-MIEBOO7Y.js} +2 -2
  140. package/dist/{chunk-IVA7ZWDS.js → chunk-NAWUXCBC.js} +5 -5
  141. package/dist/{chunk-YUAQSWNW.js → chunk-NCHKKYPQ.js} +6 -3
  142. package/dist/chunk-OCRVY42T.js +50 -0
  143. package/dist/chunk-OEEYL2CM.js +73 -0
  144. package/dist/chunk-P3OIM6OC.js +38 -0
  145. package/dist/{chunk-FWBKMPNR.js → chunk-P3QWT5VR.js} +1 -1
  146. package/dist/chunk-P5JBDHWC.js +206 -0
  147. package/dist/{chunk-WQJSOTEO.js → chunk-PGR2PKH6.js} +1 -1
  148. package/dist/{chunk-U2XAJONO.js → chunk-Q44X36QC.js} +80 -36
  149. package/dist/{chunk-R2IBCEU6.js → chunk-R3BA3C4Y.js} +2 -2
  150. package/dist/{chunk-HDMLHJFI.js → chunk-R6R2UHVG.js} +4 -4
  151. package/dist/{chunk-VBEMIZIJ.js → chunk-RFPCHMSX.js} +1 -1
  152. package/dist/{chunk-CE2THTQR.js → chunk-RSKW25Y5.js} +4 -3
  153. package/dist/{chunk-UBZDYOCA.js → chunk-RV6XB5UV.js} +12 -1
  154. package/dist/{chunk-LXCRHVMZ.js → chunk-SEPSXOGJ.js} +1 -1
  155. package/dist/{chunk-K2FNW3MK.js → chunk-SQ4JFHO7.js} +1 -1
  156. package/dist/{chunk-F45VSK2M.js → chunk-SS4XCUUJ.js} +2 -2
  157. package/dist/{chunk-E4BOVKNJ.js → chunk-UTESMBPL.js} +5 -3
  158. package/dist/chunk-UZMNR366.js +9 -0
  159. package/dist/{chunk-GQXVLFQB.js → chunk-V7GOOXPK.js} +1 -1
  160. package/dist/{chunk-KMNY3KEB.js → chunk-VBIM6HFC.js} +2 -2
  161. package/dist/{chunk-Z5RZXVQ7.js → chunk-VN47PYUF.js} +7 -7
  162. package/dist/{chunk-CNTBUK24.js → chunk-VP2ODUCC.js} +2 -2
  163. package/dist/{chunk-VIAQW6RK.js → chunk-VTSJMDGP.js} +5 -5
  164. package/dist/chunk-W6FOEBIL.js +119 -0
  165. package/dist/chunk-WLSEAIVC.js +48 -0
  166. package/dist/{chunk-DETVVKAH.js → chunk-WQ7S7CKZ.js} +3 -3
  167. package/dist/{chunk-OKUULQ22.js → chunk-WXOYHVWG.js} +2 -2
  168. package/dist/{chunk-NILOJV62.js → chunk-X4NIE7CI.js} +1 -1
  169. package/dist/{chunk-PZZHO6OS.js → chunk-XS2FJVMT.js} +1 -1
  170. package/dist/{chunk-6AKG2VLR.js → chunk-YCC2S7DF.js} +4 -1
  171. package/dist/{chunk-5CLWBPB5.js → chunk-ZCIL5IHU.js} +1 -1
  172. package/dist/chunk-ZH77BXMA.js +14 -0
  173. package/dist/generated/index.d.ts +10 -0
  174. package/dist/generated/index.js +101 -89
  175. package/dist/index.js +101 -89
  176. package/dist/styles.css +1370 -22
  177. package/dist/utils/fontFamily.d.ts +29 -0
  178. package/dist/utils/hexColour.d.ts +12 -0
  179. package/package.json +3 -3
  180. package/scripts/check-css-variables.mjs +18 -2
  181. package/dist/Combobox-YDONYDTM.css +0 -81
  182. package/dist/chunk-LOBV4QON.js +0 -137
  183. package/dist/{chunk-245IXG5P.js → chunk-3WMOEGEL.js} +0 -0
  184. package/dist/{chunk-ICPQIAD6.js → chunk-D7Q5MQRF.js} +1 -1
  185. package/dist/{chunk-ISDEXIXH.js → chunk-E6HXFFWO.js} +1 -1
  186. package/dist/{chunk-D4EOPIFL.js → chunk-EXRRTKWT.js} +1 -1
  187. package/dist/{chunk-S6J3EWDP.js → chunk-SXBJMBSV.js} +1 -1
  188. package/dist/{chunk-3JIZ2A6K.js → chunk-TMM32U7D.js} +1 -1
  189. package/dist/{chunk-LD3GEVQU.js → chunk-XQZ6EWOE.js} +1 -1
  190. package/dist/{chunk-K77LKW3X.js → chunk-ZFM5L7M4.js} +2 -2
@@ -0,0 +1,50 @@
1
+ import { Toolbar } from './chunk-NR4CPM4T.js';
2
+ import { announce } from './chunk-RSAQOKH3.js';
3
+ import { Button } from './chunk-OG6CL3EB.js';
4
+ import { returnFocus } from './chunk-NUZHC6MM.js';
5
+ import { cx } from './chunk-ODEQTPFM.js';
6
+ import './SelectionBar-XPWKUOSC.css';
7
+ import { useRef, useEffect } from 'react';
8
+ import { XGlyph } from '@crewlethq/icons/glyphs';
9
+ import { jsxs, jsx } from 'react/jsx-runtime';
10
+
11
+ var LABELS = {
12
+ count: (count) => `${count} selected`,
13
+ cleared: "Selection cleared",
14
+ clear: "Clear",
15
+ label: "Selection"
16
+ };
17
+ function SelectionBar({ count, onClear, children, returnFocusRef, className, labels }) {
18
+ const text = { ...LABELS, ...labels };
19
+ const said = useRef(0);
20
+ const countWords = text.count(count);
21
+ const clearedWords = text.cleared;
22
+ useEffect(() => {
23
+ if (count === said.current) return;
24
+ const before = said.current;
25
+ said.current = count;
26
+ if (count > 0) announce(countWords);
27
+ else if (before > 0) announce(clearedWords);
28
+ }, [count, countWords, clearedWords]);
29
+ if (count <= 0) return null;
30
+ return /* @__PURE__ */ jsxs(Toolbar, { label: text.label, className: cx("crewlet-selection-bar", className), children: [
31
+ /* @__PURE__ */ jsx("span", { className: "crewlet-selection-bar__count", children: countWords }),
32
+ children ? /* @__PURE__ */ jsx("span", { className: "crewlet-selection-bar__actions", children }) : null,
33
+ /* @__PURE__ */ jsx("span", { className: "crewlet-selection-bar__spacer", "aria-hidden": "true" }),
34
+ /* @__PURE__ */ jsx(
35
+ Button,
36
+ {
37
+ variant: "ghost",
38
+ size: "small",
39
+ leadingIcon: /* @__PURE__ */ jsx(XGlyph, { size: "sm" }),
40
+ onClick: () => {
41
+ onClear();
42
+ returnFocus(returnFocusRef?.current);
43
+ },
44
+ children: text.clear
45
+ }
46
+ )
47
+ ] });
48
+ }
49
+
50
+ export { SelectionBar };
@@ -0,0 +1,73 @@
1
+ import { BrandScope } from './chunk-P3OIM6OC.js';
2
+ import { normalizeHex } from './chunk-UZMNR366.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import './BrandSample-G5V7GKR2.css';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var LABELS = {
8
+ heading: "Quarterly review",
9
+ body: "Every team finished the quarter on plan.",
10
+ link: "See the breakdown",
11
+ byline: "Prepared by an agent",
12
+ slideHeading: "The year ahead",
13
+ slideFooter: "Company review",
14
+ label: (name, kind, mode) => `A ${kind === "doc" ? "doc" : "slide"} in the ${name} brand, ${mode} mode`
15
+ };
16
+ function BrandSample({
17
+ kind,
18
+ mode,
19
+ name,
20
+ colors,
21
+ logo,
22
+ logoOnDark,
23
+ mark,
24
+ headingFamily,
25
+ bodyFamily,
26
+ className,
27
+ labels
28
+ }) {
29
+ const text = { ...LABELS, ...labels };
30
+ const modeLogo = (mode === "dark" ? logoOnDark || logo : logo) || null;
31
+ const secondary = normalizeHex(colors.secondary) !== null;
32
+ return /* @__PURE__ */ jsx(
33
+ BrandScope,
34
+ {
35
+ colors,
36
+ headingFamily,
37
+ bodyFamily,
38
+ mode,
39
+ role: "img",
40
+ "aria-label": text.label(name, kind, mode),
41
+ className: cx("crewlet-brand-sample", `crewlet-brand-sample--${kind}`, `crewlet-brand-sample--${mode}`, className),
42
+ children: kind === "doc" ? /* @__PURE__ */ jsxs("div", { className: "crewlet-brand-sample__page", children: [
43
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__brand", children: modeLogo ? /* @__PURE__ */ jsx("img", { src: modeLogo, alt: "", className: "crewlet-brand-sample__logo", draggable: false }) : /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__wordmark", children: name }) }),
44
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__heading", children: text.heading }),
45
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__rule" }),
46
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-brand-sample__body", children: [
47
+ text.body,
48
+ " ",
49
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__link", children: text.link })
50
+ ] }),
51
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__byline", children: text.byline })
52
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "crewlet-brand-sample__slide", children: [
53
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__brand", children: mark || modeLogo ? /* @__PURE__ */ jsx(
54
+ "img",
55
+ {
56
+ src: (mark || modeLogo) ?? void 0,
57
+ alt: "",
58
+ className: cx("crewlet-brand-sample__logo", mark ? "crewlet-brand-sample__logo--mark" : null),
59
+ draggable: false
60
+ }
61
+ ) : /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__wordmark", children: name }) }),
62
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-brand-sample__bar", children: [
63
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__bar-primary" }),
64
+ secondary ? /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__bar-secondary" }) : null
65
+ ] }),
66
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__heading crewlet-brand-sample__heading--slide", children: text.slideHeading }),
67
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brand-sample__footer", children: `${name} \xB7 ${text.slideFooter}` })
68
+ ] })
69
+ }
70
+ );
71
+ }
72
+
73
+ export { BrandSample };
@@ -0,0 +1,38 @@
1
+ import { safeFontFamily, fontStack } from './chunk-5SGHW42B.js';
2
+ import { normalizeHex } from './chunk-UZMNR366.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import '@crewlethq/tokens/css/brand-scope';
5
+ import './BrandScope-H2KZHGT7.css';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ var COLOR_INPUTS = {
9
+ primary: "--brand-primary",
10
+ primary_on_dark: "--brand-primary-on-dark",
11
+ secondary: "--brand-secondary",
12
+ text: "--brand-text",
13
+ light_ground: "--brand-light-ground",
14
+ dark_ground: "--brand-dark-ground"
15
+ };
16
+ function brandScopeInputs(colors, headingFamily, bodyFamily) {
17
+ const inputs = {};
18
+ for (const [role, input] of Object.entries(COLOR_INPUTS)) {
19
+ const value = normalizeHex(colors[role]);
20
+ if (value !== null) inputs[input] = value;
21
+ }
22
+ if (safeFontFamily(headingFamily)) inputs["--brand-font-heading"] = fontStack(headingFamily, "var(--font-family-display)");
23
+ if (safeFontFamily(bodyFamily)) inputs["--brand-font-body"] = fontStack(bodyFamily, "var(--font-family-sans)");
24
+ return inputs;
25
+ }
26
+ function BrandScope({ colors, headingFamily, bodyFamily, mode, className, children, ...rest }) {
27
+ return /* @__PURE__ */ jsx(
28
+ "div",
29
+ {
30
+ className: "crewlet-brand-scope",
31
+ "data-mode": mode,
32
+ style: brandScopeInputs(colors, headingFamily, bodyFamily),
33
+ children: /* @__PURE__ */ jsx("div", { ...rest, className: cx("crewlet-brand-scope__layer", className), children })
34
+ }
35
+ );
36
+ }
37
+
38
+ export { BrandScope, brandScopeInputs };
@@ -1,5 +1,5 @@
1
1
  import { Document } from './chunk-PWG3VHRQ.js';
2
- import { ArtifactKindGlyph } from './chunk-CE2THTQR.js';
2
+ import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './ArtifactCover-D4MBEJ5H.css';
5
5
  import './DashboardCover-KYGYMRKW.css';
@@ -0,0 +1,206 @@
1
+ import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
2
+ import { Input } from './chunk-EXRRTKWT.js';
3
+ import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
+ import { cx } from './chunk-ODEQTPFM.js';
5
+ import './HitArea-QUOS6ZDJ.css';
6
+ import './Combobox-GBCWXWEB.css';
7
+ import { forwardRef, useCallback, useId, useMemo, useRef, useEffect } from 'react';
8
+ import { CheckGlyph } from '@crewlethq/icons/glyphs';
9
+ import { jsxs, jsx } from 'react/jsx-runtime';
10
+
11
+ var INLINE_ROWS = 6;
12
+ var Combobox = forwardRef(function Combobox2({
13
+ value,
14
+ onValueChange,
15
+ options,
16
+ renderList,
17
+ onCommit,
18
+ label,
19
+ tabCommits = false,
20
+ commitOn = "mousedown",
21
+ mono = false,
22
+ emptyMessage,
23
+ id,
24
+ className,
25
+ containerClassName,
26
+ ...props
27
+ }, ref) {
28
+ const { inline = false, open: openProp, onOpenChange: onOpenChangeProp, rows: rowsProp, chosen, ...rest } = props;
29
+ const open = inline ? true : Boolean(openProp);
30
+ const onOpenChange = useCallback(
31
+ (next) => {
32
+ if (!inline) onOpenChangeProp?.(next);
33
+ },
34
+ [inline, onOpenChangeProp]
35
+ );
36
+ const rows = Math.max(1, Math.round(rowsProp ?? INLINE_ROWS));
37
+ const generatedId = useId();
38
+ const fieldId = id ?? generatedId;
39
+ const offered = useMemo(() => options ?? [], [options]);
40
+ const showing = open && (offered.length > 0 || renderList !== void 0 || emptyMessage !== void 0);
41
+ const lists = open && (offered.length > 0 || renderList !== void 0);
42
+ const box = useRef(null);
43
+ const commit = useCallback(
44
+ (index) => {
45
+ const option = offered[index];
46
+ if (!option || option.disabled) return;
47
+ if (onCommit) onCommit(option, index);
48
+ else onValueChange(option.value);
49
+ onOpenChange(false);
50
+ },
51
+ [offered, onCommit, onOpenChange, onValueChange]
52
+ );
53
+ const listbox = useListbox({
54
+ id: fieldId,
55
+ // A list that is showing with nothing in it still owns Escape: the reader
56
+ // can see it, so dismissing it is what Escape means there too. An inline
57
+ // list is not a popup: it has nothing to dismiss, and Escape reaches the
58
+ // surface around it.
59
+ open: showing,
60
+ count: offered.length,
61
+ onCommit: commit,
62
+ onClose: () => onOpenChange(false),
63
+ tabCommits,
64
+ popup: !inline
65
+ });
66
+ const isDisabled = useCallback((index) => Boolean(offered[index]?.disabled), [offered]);
67
+ const optionKeys = useOptionKeys({ listbox, count: offered.length, disabled: isDisabled, ends: value === "" });
68
+ const chosenIndex = chosen === void 0 ? -1 : offered.findIndex((option) => option.value === chosen);
69
+ const { opening, step } = optionKeys;
70
+ const setActive = listbox.setActive;
71
+ const placed = useRef(false);
72
+ useEffect(() => {
73
+ if (!inline) return;
74
+ if (!placed.current) {
75
+ placed.current = true;
76
+ setActive(opening(chosenIndex));
77
+ return;
78
+ }
79
+ setActive(step(0, 1));
80
+ }, [inline, value]);
81
+ function onKeyDown(event) {
82
+ if (inline && optionKeys.onKeyDown(event)) return;
83
+ if (listbox.onKeyDown(event)) return;
84
+ if (inline) return;
85
+ if (!showing && (event.key === "ArrowDown" || event.key === "ArrowUp")) {
86
+ event.preventDefault();
87
+ onOpenChange(true);
88
+ }
89
+ }
90
+ const handlers = (index) => {
91
+ const { onMouseDown, onMouseEnter } = listbox.optionHandlers(index);
92
+ if (commitOn === "click") {
93
+ return {
94
+ onMouseEnter,
95
+ // The press is still swallowed, so the field keeps focus and the value
96
+ // being completed keeps its caret; only what TAKES the row moves.
97
+ onMouseDown: (event) => event.preventDefault(),
98
+ onClick: () => commit(index)
99
+ };
100
+ }
101
+ return { onMouseDown, onMouseEnter };
102
+ };
103
+ const fieldRef = (el) => {
104
+ box.current = el;
105
+ if (typeof ref === "function") ref(el);
106
+ else if (ref) ref.current = el;
107
+ };
108
+ const row = (option, index, picked) => /* @__PURE__ */ jsxs(
109
+ "div",
110
+ {
111
+ id: listbox.optionId(index),
112
+ role: "option",
113
+ "aria-selected": picked,
114
+ "aria-disabled": option.disabled || void 0,
115
+ className: cx(
116
+ "crewlet-listbox__option",
117
+ HIT_AREA_CLASS,
118
+ index === listbox.active && "is-highlight",
119
+ option.disabled && "is-disabled"
120
+ ),
121
+ ...option.disabled ? {} : handlers(index),
122
+ children: [
123
+ /* @__PURE__ */ jsx("span", { className: "crewlet-combobox__label", children: option.label ?? option.value }),
124
+ option.hint ? /* @__PURE__ */ jsx("span", { className: "crewlet-listbox__hint", children: option.hint }) : null,
125
+ inline && picked ? /* @__PURE__ */ jsx("span", { className: "crewlet-combobox__check", "aria-hidden": "true", children: /* @__PURE__ */ jsx(CheckGlyph, { size: "sm" }) }) : null
126
+ ]
127
+ },
128
+ option.value
129
+ );
130
+ if (inline) {
131
+ const listed = offered.length > 0 || renderList !== void 0;
132
+ return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-combobox", "crewlet-combobox--inline", containerClassName), children: [
133
+ /* @__PURE__ */ jsx(
134
+ Input,
135
+ {
136
+ ...rest,
137
+ ref: fieldRef,
138
+ id: fieldId,
139
+ className,
140
+ value,
141
+ role: "combobox",
142
+ "aria-autocomplete": "list",
143
+ "aria-expanded": listed,
144
+ "aria-controls": listed ? listbox.listId : void 0,
145
+ "aria-activedescendant": offered.length > 0 && listbox.active >= 0 ? listbox.optionId(listbox.active) : void 0,
146
+ autoComplete: "off",
147
+ spellCheck: false,
148
+ onChange: (event) => onValueChange(event.target.value),
149
+ onKeyDown
150
+ }
151
+ ),
152
+ /* @__PURE__ */ jsxs("div", { className: cx("crewlet-combobox__list", mono && "is-mono"), style: { "--crewlet-combobox-rows": rows }, children: [
153
+ listed ? /* @__PURE__ */ jsx("div", { ref: listbox.listRef, className: "crewlet-combobox__options", role: "listbox", id: listbox.listId, "aria-label": label, children: renderList ? renderList({
154
+ listId: listbox.listId,
155
+ active: listbox.active,
156
+ optionId: listbox.optionId,
157
+ optionHandlers: handlers
158
+ }) : offered.map((option, index) => row(option, index, index === chosenIndex)) }) : null,
159
+ /* @__PURE__ */ jsx("div", { className: "crewlet-combobox__empty", role: "status", children: !listed && emptyMessage ? /* @__PURE__ */ jsx("div", { className: "crewlet-listbox__empty", children: emptyMessage }) : null })
160
+ ] })
161
+ ] });
162
+ }
163
+ return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-combobox", containerClassName), ref: listbox.anchorRef, children: [
164
+ /* @__PURE__ */ jsx(
165
+ Input,
166
+ {
167
+ ...rest,
168
+ ref: fieldRef,
169
+ id: fieldId,
170
+ className,
171
+ value,
172
+ role: "combobox",
173
+ "aria-autocomplete": "list",
174
+ "aria-expanded": lists,
175
+ "aria-controls": lists ? listbox.listId : void 0,
176
+ "aria-activedescendant": lists && offered.length > 0 ? listbox.optionId(listbox.active) : void 0,
177
+ autoComplete: "off",
178
+ spellCheck: false,
179
+ onChange: (event) => onValueChange(event.target.value),
180
+ onKeyDown
181
+ }
182
+ ),
183
+ showing ? /* @__PURE__ */ jsx(
184
+ "div",
185
+ {
186
+ ref: listbox.listRef,
187
+ className: cx("crewlet-combobox__panel", mono && "is-mono"),
188
+ role: lists ? "listbox" : void 0,
189
+ id: lists ? listbox.listId : void 0,
190
+ "aria-label": lists ? label : void 0,
191
+ children: renderList ? renderList({
192
+ listId: listbox.listId,
193
+ active: listbox.active,
194
+ optionId: listbox.optionId,
195
+ optionHandlers: handlers
196
+ }) : offered.length > 0 ? (
197
+ // A completion list has no choice of its own: the row the
198
+ // arrows are on is the one announced as selected.
199
+ offered.map((option, index) => row(option, index, index === listbox.active))
200
+ ) : /* @__PURE__ */ jsx("div", { className: "crewlet-listbox__empty", children: emptyMessage })
201
+ }
202
+ ) : null
203
+ ] });
204
+ });
205
+
206
+ export { Combobox };
@@ -1,6 +1,6 @@
1
1
  import { useReorder } from './chunk-XJ2QEBMM.js';
2
2
  import { Kbd } from './chunk-SMBKXWML.js';
3
- import { FormField, Textarea } from './chunk-D4EOPIFL.js';
3
+ import { FormField, Textarea } from './chunk-EXRRTKWT.js';
4
4
  import { characterCountState, CharacterCount, countCharacters } from './chunk-XCUUI7E7.js';
5
5
  import { announce } from './chunk-RSAQOKH3.js';
6
6
  import { Button } from './chunk-OG6CL3EB.js';
@@ -1,31 +1,33 @@
1
1
  import { Skeleton } from './chunk-TEUQWOWZ.js';
2
2
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
3
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
4
- import { ArtifactKindGround } from './chunk-UBZDYOCA.js';
5
- import { Card } from './chunk-INHXF2CL.js';
6
4
  import { AvatarStack } from './chunk-5AQBPHZD.js';
5
+ import { ArtifactKindGround } from './chunk-RV6XB5UV.js';
6
+ import { Card } from './chunk-INHXF2CL.js';
7
+ import { Checkbox } from './chunk-NCHKKYPQ.js';
7
8
  import { ArtifactAccessGlyph } from './chunk-BGLKLXL3.js';
8
- import { ArtifactKindGlyph } from './chunk-CE2THTQR.js';
9
+ import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
9
10
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
10
11
  import { cx } from './chunk-ODEQTPFM.js';
11
- import './ArtifactKinds-CVD3FCYO.css';
12
- import './ArtifactCard-OGTMO2KI.css';
12
+ import './ArtifactKinds-O3CALPVX.css';
13
+ import './ArtifactCard-SOB63NV5.css';
13
14
  import { useId } from 'react';
14
15
  import { PinGlyph } from '@crewlethq/icons/glyphs';
15
- import { jsx, jsxs } from 'react/jsx-runtime';
16
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
16
17
 
17
18
  function ArtifactPreviewGlyph({ kind }) {
18
19
  return /* @__PURE__ */ jsx(ArtifactKindGround, { kind });
19
20
  }
20
21
  var LABELS = {
21
- kinds: { html: "HTML", doc: "Doc", slides: "Slides", design: "Design", dashboard: "Dashboard", sheet: "Sheet" },
22
+ kinds: { html: "HTML", doc: "Doc", slides: "Slides", design: "Design", dashboard: "Dashboard", sheet: "Sheet", brand: "Brand" },
22
23
  pinned: "Pinned",
23
24
  version: (version) => `v${version}`,
24
25
  changes: (count) => count === 1 ? "1 change since you looked" : `${count} changes since you looked`,
25
26
  present: (count) => count === 1 ? "1 here now" : `${count} here now`,
26
27
  updated: "Edited",
27
28
  by: (name) => `by ${name}`,
28
- access: { private: "Private", shared: "Shared", company: "Shared with the company" }
29
+ access: { private: "Private", shared: "Shared", company: "Shared with the company" },
30
+ select: (title) => `Select ${title}`
29
31
  };
30
32
  function ArtifactCard({
31
33
  title,
@@ -42,6 +44,10 @@ function ArtifactCard({
42
44
  project,
43
45
  access,
44
46
  actions,
47
+ selectable = false,
48
+ selected = false,
49
+ selecting = false,
50
+ onSelectedChange,
45
51
  trashed = false,
46
52
  size = "card",
47
53
  className,
@@ -56,6 +62,7 @@ function ArtifactCard({
56
62
  };
57
63
  const titleId = useId();
58
64
  const factsId = useId();
65
+ const boxId = useId();
59
66
  const present = presence && presence.length > 0 ? presence : null;
60
67
  const changedBy = updatedBy && updatedBy !== owner?.name ? updatedBy : void 0;
61
68
  const edited = /* @__PURE__ */ jsxs("span", { children: [
@@ -108,37 +115,74 @@ function ArtifactCard({
108
115
  }
109
116
  );
110
117
  }
111
- return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-artifact-card", "crewlet-artifact-card--card", trashed && "crewlet-artifact-card--trashed", className), children: [
112
- /* @__PURE__ */ jsxs("a", { href, className: "crewlet-artifact-card__link", "aria-labelledby": titleId, "aria-describedby": factsId, children: [
113
- /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__preview", "aria-hidden": true, children: preview ?? /* @__PURE__ */ jsx(ArtifactPreviewGlyph, { kind }) }),
114
- /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__body", children: [
115
- /* @__PURE__ */ jsx("span", { className: cx("crewlet-artifact-card__badge", `crewlet-kind--${kind}`), "aria-hidden": true, children: /* @__PURE__ */ jsx(ArtifactKindGlyph, { kind, size: "sm" }) }),
116
- /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__title-row", children: [
117
- /* @__PURE__ */ jsx("span", { id: titleId, className: "crewlet-artifact-card__title", title, children: title }),
118
- pinned ? /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__pin", title: text.pinned, "aria-hidden": true, children: /* @__PURE__ */ jsx(PinGlyph, { size: "sm" }) }) : null
118
+ const picking = selectable && selecting;
119
+ const bodyContent = /* @__PURE__ */ jsxs(Fragment, { children: [
120
+ /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__preview", "aria-hidden": true, children: preview ?? /* @__PURE__ */ jsx(ArtifactPreviewGlyph, { kind }) }),
121
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__body", children: [
122
+ /* @__PURE__ */ jsx("span", { className: cx("crewlet-artifact-card__badge", `crewlet-kind--${kind}`), "aria-hidden": true, children: /* @__PURE__ */ jsx(ArtifactKindGlyph, { kind, size: "sm" }) }),
123
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__title-row", children: [
124
+ /* @__PURE__ */ jsx("span", { id: titleId, className: "crewlet-artifact-card__title", title, children: title }),
125
+ pinned ? /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__pin", title: text.pinned, "aria-hidden": true, children: /* @__PURE__ */ jsx(PinGlyph, { size: "sm" }) }) : null
126
+ ] }),
127
+ /* @__PURE__ */ jsxs("span", { id: factsId, className: "crewlet-artifact-card__facts", children: [
128
+ /* @__PURE__ */ jsxs(VisuallyHidden, { children: [
129
+ text.kinds[kind],
130
+ pinned ? `, ${text.pinned}` : ""
119
131
  ] }),
120
- /* @__PURE__ */ jsxs("span", { id: factsId, className: "crewlet-artifact-card__facts", children: [
121
- /* @__PURE__ */ jsxs(VisuallyHidden, { children: [
122
- text.kinds[kind],
123
- pinned ? `, ${text.pinned}` : ""
124
- ] }),
125
- /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__line crewlet-artifact-card__meta", children: [
126
- access ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__access", title: text.access[access], children: [
127
- /* @__PURE__ */ jsx(ArtifactAccessGlyph, { access }),
128
- /* @__PURE__ */ jsx(VisuallyHidden, { children: text.access[access] })
129
- ] }) : null,
130
- owner ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__owner", children: [
131
- /* @__PURE__ */ jsx(PrincipalAvatar, { principal: owner, size: "xs" }),
132
- /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__owner-name", children: owner.name })
133
- ] }) : null,
134
- edited
135
- ] }),
136
- extra
137
- ] })
132
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__line crewlet-artifact-card__meta", children: [
133
+ access ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__access", title: text.access[access], children: [
134
+ /* @__PURE__ */ jsx(ArtifactAccessGlyph, { access }),
135
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: text.access[access] })
136
+ ] }) : null,
137
+ owner ? /* @__PURE__ */ jsxs("span", { className: "crewlet-artifact-card__owner", children: [
138
+ /* @__PURE__ */ jsx(PrincipalAvatar, { principal: owner, size: "xs" }),
139
+ /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__owner-name", children: owner.name })
140
+ ] }) : null,
141
+ edited
142
+ ] }),
143
+ extra
138
144
  ] })
139
- ] }),
140
- actions ? /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__actions", children: actions }) : null
145
+ ] })
141
146
  ] });
147
+ return /* @__PURE__ */ jsxs(
148
+ "div",
149
+ {
150
+ className: cx(
151
+ "crewlet-artifact-card",
152
+ "crewlet-artifact-card--card",
153
+ trashed && "crewlet-artifact-card--trashed",
154
+ selectable && selected && "is-selected",
155
+ picking && "crewlet-artifact-card--selecting",
156
+ className
157
+ ),
158
+ children: [
159
+ picking ? (
160
+ // WHILE CHOOSING, THE BODY IS THE BOX'S LABEL: one press anywhere
161
+ // ticks it. It is not a stop of its own; the box is, named for the
162
+ // card, so a keyboard meets one control per card.
163
+ /* @__PURE__ */ jsx("label", { htmlFor: boxId, className: "crewlet-artifact-card__link", children: bodyContent })
164
+ ) : /* @__PURE__ */ jsx("a", { href, className: "crewlet-artifact-card__link", "aria-labelledby": titleId, "aria-describedby": factsId, children: bodyContent }),
165
+ selectable ? (
166
+ // THE BOX STANDS ON THE PREVIEW'S FOOT, not over its top: a cover's
167
+ // own title starts at its top corner, and a box there hid its first
168
+ // words. The anchor has the preview's shape, so the box sits on the
169
+ // seam opposite the kind's badge whatever the card's width.
170
+ /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__select-anchor", children: /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__select", children: /* @__PURE__ */ jsx(
171
+ Checkbox,
172
+ {
173
+ id: boxId,
174
+ hideLabel: true,
175
+ label: text.select(title),
176
+ checked: selected,
177
+ "aria-describedby": factsId,
178
+ onChange: (event) => onSelectedChange?.(event.target.checked, { range: event.nativeEvent.shiftKey === true })
179
+ }
180
+ ) }) })
181
+ ) : null,
182
+ actions ? /* @__PURE__ */ jsx("span", { className: "crewlet-artifact-card__actions", children: actions }) : null
183
+ ]
184
+ }
185
+ );
142
186
  }
143
187
  function ArtifactCardSkeleton({ className }) {
144
188
  return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-artifact-card", "crewlet-artifact-card--card", "crewlet-artifact-card--skeleton", className), "aria-hidden": true, children: [
@@ -1,9 +1,9 @@
1
- import { ArtifactKindGlyph } from './chunk-CE2THTQR.js';
1
+ import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
2
2
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
3
3
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './HitArea-QUOS6ZDJ.css';
6
- import './ArtifactKinds-CVD3FCYO.css';
6
+ import './ArtifactKinds-O3CALPVX.css';
7
7
  import './ArtifactMakeRow-6UX2LTF7.css';
8
8
  import { useId } from 'react';
9
9
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,11 +1,11 @@
1
- import { Select } from './chunk-LD3GEVQU.js';
2
- import { Popover } from './chunk-KHJIEPZV.js';
1
+ import { Select } from './chunk-XQZ6EWOE.js';
3
2
  import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-GXQ3B46I.js';
4
- import { Input } from './chunk-D4EOPIFL.js';
3
+ import { Popover } from './chunk-KHJIEPZV.js';
4
+ import { Input } from './chunk-EXRRTKWT.js';
5
5
  import { Button } from './chunk-OG6CL3EB.js';
6
6
  import { isComposing } from './chunk-H5XTJ7GJ.js';
7
- import { useFocusModality } from './chunk-NUZHC6MM.js';
8
7
  import { IconButton } from './chunk-LACA4JGC.js';
8
+ import { useFocusModality } from './chunk-NUZHC6MM.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
10
  import './TimeWindowPicker-I3HXC74I.css';
11
11
  import { useMemo, useState, useRef, useId, useEffect } from 'react';
@@ -1,5 +1,5 @@
1
1
  import { diffLines, diffStat, collapseDiff, DiffSummary, DiffView } from './chunk-BVWSLXTY.js';
2
- import { SegmentedControl } from './chunk-SMVWDO72.js';
2
+ import { SegmentedControl } from './chunk-6FVGSWLS.js';
3
3
  import { EmptyState } from './chunk-PPUR46MK.js';
4
4
  import { useHeadingLevel, headingTag, nextHeadingLevel, HeadingLevelProvider } from './chunk-PQADV6P6.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,15 +1,16 @@
1
- import { TableGlyph, LayoutDashboardGlyph, PaletteGlyph, PresentationGlyph, FileTextGlyph, FileCodeGlyph } from '@crewlethq/icons/glyphs';
1
+ import { SwatchBookGlyph, TableGlyph, LayoutDashboardGlyph, PaletteGlyph, PresentationGlyph, FileTextGlyph, FileCodeGlyph } from '@crewlethq/icons/glyphs';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
 
4
4
  // src/ArtifactKindGlyph/ArtifactKindGlyph.tsx
5
- var ARTIFACT_KINDS = ["html", "doc", "slides", "design", "dashboard", "sheet"];
5
+ var ARTIFACT_KINDS = ["html", "doc", "slides", "design", "dashboard", "sheet", "brand"];
6
6
  var KIND_GLYPHS = {
7
7
  html: FileCodeGlyph,
8
8
  doc: FileTextGlyph,
9
9
  slides: PresentationGlyph,
10
10
  design: PaletteGlyph,
11
11
  dashboard: LayoutDashboardGlyph,
12
- sheet: TableGlyph
12
+ sheet: TableGlyph,
13
+ brand: SwatchBookGlyph
13
14
  };
14
15
  function ArtifactKindGlyph({ kind, size = "md" }) {
15
16
  const Drawn = KIND_GLYPHS[kind];
@@ -1,6 +1,6 @@
1
1
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './ArtifactKinds-CVD3FCYO.css';
3
+ import './ArtifactKinds-O3CALPVX.css';
4
4
  import './ArtifactKindIllustration-KLFL7KBG.css';
5
5
  import { useId } from 'react';
6
6
  import { CheckGlyph } from '@crewlethq/icons/glyphs';
@@ -87,6 +87,17 @@ var DRAWINGS = {
87
87
  /* @__PURE__ */ jsx("rect", { className: "l", x: "108", y: "73", width: "22", height: "4", rx: "2" }),
88
88
  /* @__PURE__ */ jsx("rect", { className: "l", x: "30", y: "87", width: "20", height: "4", rx: "2" }),
89
89
  /* @__PURE__ */ jsx("rect", { className: "l", x: "68", y: "87", width: "14", height: "4", rx: "2" })
90
+ ] }),
91
+ brand: /* @__PURE__ */ jsxs(Fragment, { children: [
92
+ /* @__PURE__ */ jsx("rect", { className: "b", x: "30", y: "16", width: "100", height: "88", rx: "8" }),
93
+ /* @__PURE__ */ jsx("circle", { className: "m", cx: "48", cy: "36", r: "8" }),
94
+ /* @__PURE__ */ jsx("rect", { className: "l", x: "62", y: "30", width: "36", height: "5", rx: "2.5" }),
95
+ /* @__PURE__ */ jsx("rect", { className: "l", x: "62", y: "39", width: "24", height: "4", rx: "2" }),
96
+ /* @__PURE__ */ jsx("rect", { className: "m", x: "40", y: "54", width: "24", height: "24", rx: "5" }),
97
+ /* @__PURE__ */ jsx("rect", { className: "s", x: "68", y: "54", width: "24", height: "24", rx: "5" }),
98
+ /* @__PURE__ */ jsx("rect", { className: "l", x: "96", y: "54", width: "24", height: "24", rx: "5" }),
99
+ /* @__PURE__ */ jsx("rect", { className: "l", x: "40", y: "88", width: "42", height: "4", rx: "2" }),
100
+ /* @__PURE__ */ jsx("rect", { className: "l", x: "86", y: "88", width: "22", height: "4", rx: "2" })
90
101
  ] })
91
102
  };
92
103
  function ArtifactKindGround({
@@ -1,5 +1,5 @@
1
1
  import { useThemePreference, useDensityPreference } from './chunk-Z24ZUSTX.js';
2
- import { SegmentedControl } from './chunk-SMVWDO72.js';
2
+ import { SegmentedControl } from './chunk-6FVGSWLS.js';
3
3
  import { SunGlyph, MonitorGlyph, MoonGlyph } from '@crewlethq/icons/glyphs';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5