@crewlethq/ui 0.37.1 → 0.39.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 (101) hide show
  1. package/README.md +70 -2
  2. package/dist/Accordion/index.js +1 -1
  3. package/dist/AgentHandoffPanel/index.js +2 -2
  4. package/dist/AppShell/index.js +1 -1
  5. package/dist/{AppShell-JBCZSSX3.css → AppShell-NDU4XMGF.css} +39 -6
  6. package/dist/ArtifactBar/index.js +1 -1
  7. package/dist/{ArtifactBar-FWPBBKQ5.css → ArtifactBar-6PGWGKN2.css} +13 -1
  8. package/dist/ArtifactCard/index.js +2 -2
  9. package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +3 -1
  10. package/dist/ArtifactMakeRow/index.js +1 -1
  11. package/dist/{ArtifactMakeRow-W3RD5YWZ.css → ArtifactMakeRow-6UX2LTF7.css} +43 -5
  12. package/dist/AuthLayout/index.js +2 -2
  13. package/dist/Card/Card.d.ts +14 -2
  14. package/dist/Card/index.js +1 -1
  15. package/dist/{Card-QOVASQNU.css → Card-JR2UPQH7.css} +63 -0
  16. package/dist/CatalogTile/CatalogTile.d.ts +47 -0
  17. package/dist/CatalogTile/index.d.ts +3 -0
  18. package/dist/CatalogTile/index.js +3 -0
  19. package/dist/CatalogTile-TGR2ZZVQ.css +131 -0
  20. package/dist/CodeBlock/index.js +1 -1
  21. package/dist/{CodeBlock-GYNJ2HI6.css → CodeBlock-N5ETJF24.css} +13 -0
  22. package/dist/CommandPalette/index.js +2 -2
  23. package/dist/DataTable/index.js +2 -2
  24. package/dist/DataView/index.js +3 -3
  25. package/dist/DatasetSource/DatasetSource.d.ts +7 -1
  26. package/dist/DatasetSource/index.js +2 -2
  27. package/dist/DescriptionList/DescriptionList.d.ts +12 -1
  28. package/dist/DescriptionList/index.js +1 -1
  29. package/dist/{DescriptionList-IXMRCSMK.css → DescriptionList-DEZISDLQ.css} +8 -1
  30. package/dist/Disclosure/index.js +1 -1
  31. package/dist/{Disclosure-VKBJJIZ7.css → Disclosure-P4FH3C35.css} +28 -2
  32. package/dist/LinkInterstitial/index.js +2 -2
  33. package/dist/List/List.d.ts +8 -0
  34. package/dist/List/index.js +1 -1
  35. package/dist/{List-MYJIV6MP.css → List-YHLIZFK4.css} +46 -0
  36. package/dist/ListInput/ListInput.d.ts +9 -1
  37. package/dist/ListInput/index.js +1 -1
  38. package/dist/Modal/index.js +1 -1
  39. package/dist/{Modal-7MWRCWAI.css → Modal-TOEWHDCQ.css} +5 -0
  40. package/dist/ObjectHeader/index.js +1 -1
  41. package/dist/{ObjectHeader-D7GU7QNI.css → ObjectHeader-ZOS22FKX.css} +7 -8
  42. package/dist/PricingCard/index.js +2 -2
  43. package/dist/SettingsTable/SettingsTable.d.ts +66 -0
  44. package/dist/SettingsTable/index.d.ts +3 -0
  45. package/dist/SettingsTable/index.js +3 -0
  46. package/dist/SettingsTable-6DUFAFXG.css +160 -0
  47. package/dist/ShareDialog/index.js +2 -2
  48. package/dist/SheetGrid/index.js +2 -2
  49. package/dist/StatCard/index.js +1 -1
  50. package/dist/{StatCard-4T7TMWMN.css → StatCard-HAA3F5GX.css} +8 -3
  51. package/dist/StatGroup/StatGroup.d.ts +11 -7
  52. package/dist/StatGroup/index.js +1 -1
  53. package/dist/StatGroup-ZMW7VQWP.css +195 -0
  54. package/dist/Switcher/index.js +2 -2
  55. package/dist/TableCells/index.js +2 -2
  56. package/dist/Tag/index.js +1 -1
  57. package/dist/{Tag-SRGTK5KI.css → Tag-2DQOVE6W.css} +15 -5
  58. package/dist/TagsInput/index.js +2 -2
  59. package/dist/TileGrid/TileGrid.d.ts +33 -0
  60. package/dist/TileGrid/index.d.ts +3 -0
  61. package/dist/TileGrid/index.js +2 -0
  62. package/dist/TileGrid-I6LNYD2H.css +52 -0
  63. package/dist/{chunk-YSG3DW7W.js → chunk-3TXY3PJZ.js} +1 -1
  64. package/dist/{chunk-K4VP6ZKE.js → chunk-4BJK7FE5.js} +1 -1
  65. package/dist/chunk-4RKTZSEW.js +64 -0
  66. package/dist/{chunk-3SBM4DGI.js → chunk-BH52LIY6.js} +1 -1
  67. package/dist/{chunk-HDHZWIFL.js → chunk-DYB66CNM.js} +16 -2
  68. package/dist/{chunk-A23KDROH.js → chunk-FXBGEANQ.js} +1 -1
  69. package/dist/{chunk-HMLAWVG6.js → chunk-HQJ24WPM.js} +5 -3
  70. package/dist/{chunk-SVGARBDY.js → chunk-IAGYPTEJ.js} +2 -2
  71. package/dist/{chunk-5QXRI35B.js → chunk-INHXF2CL.js} +24 -11
  72. package/dist/{chunk-6NNY5WBF.js → chunk-JKAGN4V4.js} +1 -1
  73. package/dist/{chunk-DZSBFITC.js → chunk-JZPK4IXR.js} +1 -1
  74. package/dist/{chunk-UWRBD2YO.js → chunk-KNHUBHFX.js} +1 -1
  75. package/dist/{chunk-GFV4LJHH.js → chunk-KYIAFNU7.js} +1 -1
  76. package/dist/{chunk-F2XSYBKH.js → chunk-MFS6F2P7.js} +4 -1
  77. package/dist/{chunk-NRBAXRWE.js → chunk-N3TFYBN3.js} +1 -1
  78. package/dist/chunk-NNTO3TNC.js +9 -0
  79. package/dist/{chunk-DS2C73RJ.js → chunk-NZWX27J7.js} +2 -2
  80. package/dist/{chunk-VGE3G3T4.js → chunk-ODOJJGXH.js} +1 -1
  81. package/dist/{chunk-MICH6QSJ.js → chunk-OGXHZHRX.js} +1 -1
  82. package/dist/{chunk-JXRI5YD2.js → chunk-OUD75UB2.js} +2 -1
  83. package/dist/{chunk-MG3HTY6F.js → chunk-QRKT4XTT.js} +1 -1
  84. package/dist/{chunk-NS4NSHVX.js → chunk-R2IBCEU6.js} +12 -2
  85. package/dist/{chunk-WX2NIG4G.js → chunk-S4DREXGM.js} +1 -1
  86. package/dist/{chunk-GDDE4UM7.js → chunk-SEC2GR2V.js} +1 -1
  87. package/dist/{chunk-S27UBCVX.js → chunk-TZYFTC4M.js} +1 -1
  88. package/dist/{chunk-OHA6WSAG.js → chunk-U2XAJONO.js} +1 -1
  89. package/dist/{chunk-DQSXWQMJ.js → chunk-U3ILLCR2.js} +1 -1
  90. package/dist/{chunk-DOLATMGF.js → chunk-WYYCPV46.js} +5 -0
  91. package/dist/{chunk-A72JPXIV.js → chunk-XGBUUQDU.js} +1 -1
  92. package/dist/chunk-XNXK5MA4.js +48 -0
  93. package/dist/{chunk-XO7PUL4F.js → chunk-YPTTSJPM.js} +1 -1
  94. package/dist/{chunk-RIAZM6L3.js → chunk-ZNOXQACX.js} +1 -1
  95. package/dist/generated/index.d.ts +3 -0
  96. package/dist/generated/index.js +56 -53
  97. package/dist/index.js +56 -53
  98. package/dist/styles.css +782 -64
  99. package/package.json +3 -3
  100. package/dist/StatGroup-PADTJCUQ.css +0 -86
  101. /package/dist/{chunk-4QQ3MND5.js → chunk-QRLIWCLX.js} +0 -0
@@ -0,0 +1,64 @@
1
+ import { StatusDot } from './chunk-WIATRXEJ.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './SettingsTable-6DUFAFXG.css';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var COLUMNS = { setting: "Setting", value: "Value", source: "Source" };
7
+ function SettingsTable({ header = false, columns, className, children, ...rest }) {
8
+ const names = { ...COLUMNS, ...columns };
9
+ return /* @__PURE__ */ jsxs("div", { ...rest, role: "table", className: cx("crewlet-settings-table", className), children: [
10
+ /* @__PURE__ */ jsx(
11
+ "div",
12
+ {
13
+ role: "rowgroup",
14
+ className: cx("crewlet-settings-table__head", !header && "crewlet-settings-table__head--hidden"),
15
+ children: /* @__PURE__ */ jsxs("div", { role: "row", className: "crewlet-settings-table__row", children: [
16
+ /* @__PURE__ */ jsx("span", { role: "columnheader", className: "crewlet-settings-table__name", children: names.setting }),
17
+ /* @__PURE__ */ jsx("span", { role: "columnheader", className: "crewlet-settings-table__name", children: names.value }),
18
+ /* @__PURE__ */ jsx("span", { role: "columnheader", className: "crewlet-settings-table__name", children: names.source })
19
+ ] })
20
+ }
21
+ ),
22
+ /* @__PURE__ */ jsx("div", { role: "rowgroup", className: "crewlet-settings-table__body", children })
23
+ ] });
24
+ }
25
+ function SettingsTableRow({
26
+ label,
27
+ settingKey,
28
+ source,
29
+ changed = false,
30
+ className,
31
+ children,
32
+ ...rest
33
+ }) {
34
+ return /* @__PURE__ */ jsxs(
35
+ "div",
36
+ {
37
+ ...rest,
38
+ role: "row",
39
+ "data-changed": changed ? "" : void 0,
40
+ className: cx("crewlet-settings-table__row", className),
41
+ children: [
42
+ /* @__PURE__ */ jsxs("span", { role: "rowheader", className: "crewlet-settings-table__setting", children: [
43
+ /* @__PURE__ */ jsx("span", { className: "crewlet-settings-table__label", children: label }),
44
+ settingKey === void 0 ? null : /* @__PURE__ */ jsx("code", { className: "crewlet-settings-table__key", children: settingKey })
45
+ ] }),
46
+ /* @__PURE__ */ jsx("span", { role: "cell", className: "crewlet-settings-table__value", children }),
47
+ /* @__PURE__ */ jsxs(
48
+ "span",
49
+ {
50
+ role: "cell",
51
+ className: cx("crewlet-settings-table__source", changed && "crewlet-settings-table__source--changed"),
52
+ children: [
53
+ changed ? /* @__PURE__ */ jsx(StatusDot, { tone: "brand" }) : null,
54
+ source
55
+ ]
56
+ }
57
+ )
58
+ ]
59
+ }
60
+ );
61
+ }
62
+ SettingsTable.Row = SettingsTableRow;
63
+
64
+ export { SettingsTable, SettingsTableRow };
@@ -1,4 +1,4 @@
1
- import { Tag } from './chunk-GFV4LJHH.js';
1
+ import { Tag } from './chunk-KYIAFNU7.js';
2
2
  import { useListbox } from './chunk-7KHM2FZH.js';
3
3
  import { announce } from './chunk-RSAQOKH3.js';
4
4
  import { isComposing } from './chunk-H5XTJ7GJ.js';
@@ -6,7 +6,7 @@ import { IconButton } from './chunk-4FQT6ZAY.js';
6
6
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './HitArea-QUOS6ZDJ.css';
9
- import './AppShell-JBCZSSX3.css';
9
+ import './AppShell-NDU4XMGF.css';
10
10
  import { createContext, forwardRef, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
11
11
  import { breakpoint } from '@crewlethq/tokens';
12
12
  import { ChevronUpGlyph, ChevronsUpDownGlyph, ChevronRightGlyph, MenuGlyph } from '@crewlethq/icons/glyphs';
@@ -122,6 +122,16 @@ function AppShell({
122
122
  },
123
123
  [mainRef]
124
124
  );
125
+ const [gutter, setGutter] = useState(0);
126
+ useLayoutEffect(() => {
127
+ if (!scroller) return void 0;
128
+ const measure = () => setGutter(Math.max(0, scroller.offsetWidth - scroller.clientWidth));
129
+ measure();
130
+ if (typeof ResizeObserver === "undefined") return void 0;
131
+ const observer = new ResizeObserver(measure);
132
+ observer.observe(scroller);
133
+ return () => observer.disconnect();
134
+ }, [scroller]);
125
135
  const shell = {
126
136
  narrow,
127
137
  drawerOpen,
@@ -145,7 +155,11 @@ function AppShell({
145
155
  !shell.hasRail && "crewlet-app-shell--no-rail",
146
156
  className
147
157
  ),
148
- style: drawerZ === null ? style : { ...style, ["--crewlet-app-shell-drawer-z"]: String(drawerZ) },
158
+ style: {
159
+ ...style,
160
+ ["--crewlet-app-shell-gutter"]: `${gutter}px`,
161
+ ...drawerZ === null ? null : { ["--crewlet-app-shell-drawer-z"]: String(drawerZ) }
162
+ },
149
163
  children: [
150
164
  /* @__PURE__ */ jsx(
151
165
  "a",
@@ -1,5 +1,5 @@
1
1
  import { useClipboard } from './chunk-STJ7QBC3.js';
2
- import { Modal } from './chunk-SVGARBDY.js';
2
+ import { Modal } from './chunk-IAGYPTEJ.js';
3
3
  import { Checkbox } from './chunk-AXS6MBNH.js';
4
4
  import { EmptyValue } from './chunk-EUCC37WY.js';
5
5
  import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
@@ -1,4 +1,4 @@
1
- import { Tag } from './chunk-GFV4LJHH.js';
1
+ import { Tag } from './chunk-KYIAFNU7.js';
2
2
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
3
3
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
4
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
@@ -58,8 +58,10 @@ function DatasetSource({
58
58
  const summary = /* @__PURE__ */ jsxs(Fragment, { children: [
59
59
  /* @__PURE__ */ jsxs("span", { className: "crewlet-dataset-source__head", children: [
60
60
  /* @__PURE__ */ jsx("span", { id: titleId, className: "crewlet-dataset-source__title", children: title }),
61
- " ",
62
- /* @__PURE__ */ jsx(Tag, { size: "xs", appearance: "outline", className: "crewlet-dataset-source__kind", children: text.kinds[kind] })
61
+ kind === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
62
+ " ",
63
+ /* @__PURE__ */ jsx(Tag, { size: "xs", appearance: "outline", className: "crewlet-dataset-source__kind", children: text.kinds[kind] })
64
+ ] })
63
65
  ] }),
64
66
  " ",
65
67
  /* @__PURE__ */ jsx("span", { className: "crewlet-dataset-source__definition", children: definition }),
@@ -4,7 +4,7 @@ import { focusables, useModalLayer, useBodyScrollLock } from './chunk-H5XTJ7GJ.j
4
4
  import { Button } from './chunk-OG6CL3EB.js';
5
5
  import { IconButton } from './chunk-4FQT6ZAY.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
- import './Modal-7MWRCWAI.css';
7
+ import './Modal-TOEWHDCQ.css';
8
8
  import { useId, useRef, useCallback } from 'react';
9
9
  import { createPortal } from 'react-dom';
10
10
  import { ChevronLeftGlyph, XGlyph } from '@crewlethq/icons/glyphs';
@@ -124,7 +124,7 @@ function ModalFrame({
124
124
  given(icon) ? /* @__PURE__ */ jsx("span", { className: "crewlet-modal__icon", "aria-hidden": "true", children: icon }) : null,
125
125
  /* @__PURE__ */ jsxs("div", { className: "crewlet-modal__heading", children: [
126
126
  given(title) ? /* @__PURE__ */ jsx(
127
- "p",
127
+ "h1",
128
128
  {
129
129
  className: cx("crewlet-modal__title", sheet ? "crewlet-modal__title--sheet" : void 0),
130
130
  id: titleId,
@@ -2,7 +2,7 @@ import { CardHeaderSlotContext } from './chunk-AV2DXAEL.js';
2
2
  import { Count } from './chunk-BHHIIK3M.js';
3
3
  import { useHeadingLevel, HeadingLevelProvider, nextHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './Card-QOVASQNU.css';
5
+ import './Card-JR2UPQH7.css';
6
6
  import { createContext, useId, useState, isValidElement, useRef, useCallback, useMemo, Children, cloneElement, useContext, useEffect, Fragment } from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';
8
8
 
@@ -160,6 +160,7 @@ var CardHeader = ({
160
160
  icon,
161
161
  count,
162
162
  subtitle,
163
+ subtitlePlacement = "beside",
163
164
  actions,
164
165
  className,
165
166
  children,
@@ -173,16 +174,28 @@ var CardHeader = ({
173
174
  },
174
175
  [host]
175
176
  );
176
- return /* @__PURE__ */ jsxs("div", { ...rest, className: cx("crewlet-card__header", !divided && "crewlet-card__header--plain", className), children: [
177
- /* @__PURE__ */ jsxs("div", { className: "crewlet-card__header-main", children: [
178
- icon === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-card__header-icon", "aria-hidden": true, children: icon }),
179
- children,
180
- count === void 0 ? null : /* @__PURE__ */ jsx(Count, { value: count })
181
- ] }),
182
- subtitle === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-card__subtitle", children: subtitle }),
183
- actions === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-card__header-actions", children: actions }),
184
- card === null ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-card__header-chrome", ref: chromeRef })
185
- ] });
177
+ return /* @__PURE__ */ jsxs(
178
+ "div",
179
+ {
180
+ ...rest,
181
+ className: cx(
182
+ "crewlet-card__header",
183
+ !divided && "crewlet-card__header--plain",
184
+ subtitle !== void 0 && subtitlePlacement === "below" && "crewlet-card__header--stacked",
185
+ className
186
+ ),
187
+ children: [
188
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-card__header-main", children: [
189
+ icon === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-card__header-icon", "aria-hidden": true, children: icon }),
190
+ typeof children === "string" || typeof children === "number" ? /* @__PURE__ */ jsx(CardTitle, { children }) : children,
191
+ count === void 0 || count === 0 || count === "0" ? null : /* @__PURE__ */ jsx(Count, { value: count })
192
+ ] }),
193
+ subtitle === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-card__subtitle", children: subtitle }),
194
+ actions === void 0 ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-card__header-actions", children: actions }),
195
+ card === null ? null : /* @__PURE__ */ jsx("div", { className: "crewlet-card__header-chrome", ref: chromeRef })
196
+ ]
197
+ }
198
+ );
186
199
  };
187
200
  var CardBody = ({ padding = "md", className, children, ...rest }) => /* @__PURE__ */ jsx("div", { ...rest, className: cx("crewlet-card__body", `crewlet-card__body--p-${padding}`, className), children });
188
201
  var CardFooter = ({ variant = "actions", padding = "sm", className, children, ...rest }) => /* @__PURE__ */ jsx(
@@ -1,4 +1,4 @@
1
- import { Modal } from './chunk-SVGARBDY.js';
1
+ import { Modal } from './chunk-IAGYPTEJ.js';
2
2
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
3
3
  import { Popover } from './chunk-KHJIEPZV.js';
4
4
  import { KeyChip, highlightMatch } from './chunk-FYTIJM2T.js';
@@ -1,7 +1,7 @@
1
1
  import { TagGroup } from './chunk-O2EGEONV.js';
2
2
  import { CursorFlag } from './chunk-3BYIWOTV.js';
3
3
  import { presenceHueClass } from './chunk-I6POAB4V.js';
4
- import { Tag } from './chunk-GFV4LJHH.js';
4
+ import { Tag } from './chunk-KYIAFNU7.js';
5
5
  import { StatusDot } from './chunk-WIATRXEJ.js';
6
6
  import { ChangeMark } from './chunk-66X5WDKE.js';
7
7
  import { isEmptyValue, displayText, ratingMax, findPerson, findOption, statusTone, editText, textMax, sheetLabels, normalizeValue, sameValue, spokenText, drawnColumns, fitSamples, fittedWidth, columnWidth, SHEET_COLUMN_BOUNDS, sortRows, SHEET_ROW_HEIGHT, cellKey, columnOffsets, SHEET_ROW_NUMBER_WIDTH, rangeOf, presenceByCell, presenceByRow, presenceByColumn, scrollToRow, planClear, visibleRows, cellDescription, nextSort, rowName, inRange, hasPrevious, flagText, toTSV, planPaste, parseTSV, isMod, moveFrom, isTypingKey, editorSide, optionHue, parseText, liveOptions, checkValue } from './chunk-LFSIKGRQ.js';
@@ -1,6 +1,6 @@
1
1
  import { Select } from './chunk-XQZ6EWOE.js';
2
2
  import { CopyButton } from './chunk-W46LPU4R.js';
3
- import { Modal } from './chunk-SVGARBDY.js';
3
+ import { Modal } from './chunk-IAGYPTEJ.js';
4
4
  import { Callout } from './chunk-SZZRIHGT.js';
5
5
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
6
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
@@ -1,6 +1,6 @@
1
1
  import { StatusDot } from './chunk-WIATRXEJ.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './Tag-SRGTK5KI.css';
3
+ import './Tag-2DQOVE6W.css';
4
4
  import { XGlyph } from '@crewlethq/icons/glyphs';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
6
 
@@ -1,12 +1,14 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './DescriptionList-IXMRCSMK.css';
2
+ import './DescriptionList-DEZISDLQ.css';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
5
5
  function DescriptionList({
6
6
  dense = false,
7
7
  fit = false,
8
+ termWidth,
8
9
  items,
9
10
  className,
11
+ style,
10
12
  children,
11
13
  ...rest
12
14
  }) {
@@ -14,6 +16,7 @@ function DescriptionList({
14
16
  "dl",
15
17
  {
16
18
  ...rest,
19
+ style: termWidth === void 0 ? style : { ...style, "--crewlet-description-list-term": termWidth },
17
20
  className: cx(
18
21
  "crewlet-description-list",
19
22
  dense && "crewlet-description-list--dense",
@@ -1,4 +1,4 @@
1
- import { ConfirmModal } from './chunk-SVGARBDY.js';
1
+ import { ConfirmModal } from './chunk-IAGYPTEJ.js';
2
2
  import { InlineCode } from './chunk-5CLW2CXT.js';
3
3
  import { Callout } from './chunk-SZZRIHGT.js';
4
4
  import './LinkInterstitial-ET4MSVSV.css';
@@ -0,0 +1,9 @@
1
+ import { cx } from './chunk-ODEQTPFM.js';
2
+ import './TileGrid-I6LNYD2H.css';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function TileGrid({ columns = 3, as: Track = "div", className, children, ...rest }) {
6
+ return /* @__PURE__ */ jsx("div", { className: cx("crewlet-tile-grid", className), "data-columns": columns, children: /* @__PURE__ */ jsx(Track, { ...rest, className: "crewlet-tile-grid__track", children }) });
7
+ }
8
+
9
+ export { TileGrid };
@@ -1,13 +1,13 @@
1
1
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './List-MYJIV6MP.css';
3
+ import './List-YHLIZFK4.css';
4
4
  import { createContext, useContext, Children, isValidElement, cloneElement } from 'react';
5
5
  import { CircleAlertGlyph } from '@crewlethq/icons/glyphs';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
 
8
8
  var ListContext = createContext({ variant: "divided", templated: false });
9
9
  function List({ variant = "divided", template, className, style, children, ...rest }) {
10
- const Tag = variant === "numbered" ? "ol" : "ul";
10
+ const Tag = variant === "numbered" || variant === "numbered-divided" ? "ol" : "ul";
11
11
  const templated = template !== void 0;
12
12
  return /* @__PURE__ */ jsx(ListContext.Provider, { value: { variant, templated }, children: /* @__PURE__ */ jsx(
13
13
  Tag,
@@ -1,6 +1,6 @@
1
1
  import { Link } from './chunk-FBSEJO2C.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './ObjectHeader-D7GU7QNI.css';
3
+ import './ObjectHeader-ZOS22FKX.css';
4
4
  import { ArrowUpRightGlyph } from '@crewlethq/icons/glyphs';
5
5
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
6
6
 
@@ -1,7 +1,7 @@
1
1
  import { DisclosureAnatomy } from './chunk-FZVJDJFN.js';
2
2
  import { useHeadingLevel } from './chunk-PQADV6P6.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
- import './Disclosure-VKBJJIZ7.css';
4
+ import './Disclosure-P4FH3C35.css';
5
5
  import { useState, useId, useCallback } from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
7
7
 
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './StatGroup-PADTJCUQ.css';
2
+ import './StatGroup-ZMW7VQWP.css';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
5
5
  function StatGroup({ columns = 4, flush = false, className, children, ...rest }) {
@@ -8,6 +8,7 @@ function StatGroup({ columns = 4, flush = false, className, children, ...rest })
8
8
  {
9
9
  ...rest,
10
10
  className: cx("crewlet-stat-group", flush && "crewlet-stat-group--flush", className),
11
+ "data-columns": columns,
11
12
  style: { "--crewlet-stat-group-cols": columns, ...rest.style },
12
13
  children
13
14
  }
@@ -1,6 +1,6 @@
1
1
  import { PageHeader } from './chunk-HOXGBLEY.js';
2
- import { DataTable } from './chunk-A23KDROH.js';
3
2
  import { DateTimePicker } from './chunk-UB6MLXUL.js';
3
+ import { DataTable } from './chunk-FXBGEANQ.js';
4
4
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
5
5
  import { Popover } from './chunk-KHJIEPZV.js';
6
6
  import { Toolbar } from './chunk-NR4CPM4T.js';
@@ -4,7 +4,7 @@ import { VisuallyHidden } from './chunk-BZFWDIV6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './HitArea-QUOS6ZDJ.css';
6
6
  import './ArtifactKinds-CVD3FCYO.css';
7
- import './ArtifactMakeRow-W3RD5YWZ.css';
7
+ import './ArtifactMakeRow-6UX2LTF7.css';
8
8
  import { useId } from 'react';
9
9
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
10
10
 
@@ -14,7 +14,17 @@ function ArtifactMakeRow({
14
14
  "aria-labelledby": ariaLabelledBy,
15
15
  className
16
16
  }) {
17
- return /* @__PURE__ */ jsx("div", { className: cx("crewlet-make-row", className), children: /* @__PURE__ */ jsx("ul", { className: "crewlet-make-row__list", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, children: items.map((item) => /* @__PURE__ */ jsx("li", { className: "crewlet-make-row__cell", children: /* @__PURE__ */ jsx(MakeItem, { item }) }, item.kind)) }) });
17
+ return /* @__PURE__ */ jsx("div", { className: cx("crewlet-make-row", className), children: /* @__PURE__ */ jsx(
18
+ "ul",
19
+ {
20
+ className: "crewlet-make-row__list",
21
+ "aria-label": ariaLabel,
22
+ "aria-labelledby": ariaLabelledBy,
23
+ "data-count": items.length,
24
+ style: { "--crewlet-make-row-count": items.length },
25
+ children: items.map((item) => /* @__PURE__ */ jsx("li", { className: "crewlet-make-row__cell", children: /* @__PURE__ */ jsx(MakeItem, { item }) }, item.kind))
26
+ }
27
+ ) });
18
28
  }
19
29
  function MakeItem({ item }) {
20
30
  const { kind, label, detail, href, disabledReason } = item;
@@ -1,5 +1,5 @@
1
1
  import { BrandLockup } from './chunk-7KBNFFM3.js';
2
- import { Card } from './chunk-5QXRI35B.js';
2
+ import { Card } from './chunk-INHXF2CL.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './AuthLayout-ODHBUPHQ.css';
5
5
  import { useId } from 'react';
@@ -1,6 +1,6 @@
1
1
  import { CopyButton } from './chunk-W46LPU4R.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './CodeBlock-GYNJ2HI6.css';
3
+ import './CodeBlock-N5ETJF24.css';
4
4
  import { forwardRef, useRef, useState, useLayoutEffect } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -8,7 +8,7 @@ import { IconButton } from './chunk-4FQT6ZAY.js';
8
8
  import { returnFocus } from './chunk-NUZHC6MM.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
10
  import './ArtifactKinds-CVD3FCYO.css';
11
- import './ArtifactBar-FWPBBKQ5.css';
11
+ import './ArtifactBar-6PGWGKN2.css';
12
12
  import { useId, useState, useRef, useEffect } from 'react';
13
13
  import { ChevronLeftGlyph, EllipsisGlyph, ChevronDownGlyph } from '@crewlethq/icons/glyphs';
14
14
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -2,7 +2,7 @@ import { Skeleton } from './chunk-TEUQWOWZ.js';
2
2
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
3
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
4
4
  import { ArtifactKindGround } from './chunk-UBZDYOCA.js';
5
- import { Card } from './chunk-5QXRI35B.js';
5
+ import { Card } from './chunk-INHXF2CL.js';
6
6
  import { AvatarStack } from './chunk-5AQBPHZD.js';
7
7
  import { ArtifactAccessGlyph } from './chunk-BGLKLXL3.js';
8
8
  import { ArtifactKindGlyph } from './chunk-CE2THTQR.js';
@@ -1,4 +1,4 @@
1
- import { Tag } from './chunk-GFV4LJHH.js';
1
+ import { Tag } from './chunk-KYIAFNU7.js';
2
2
  import './PricingCard-HTAHG4ST.css';
3
3
  import { forwardRef } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -24,6 +24,7 @@ function ListInput({
24
24
  disabled = false,
25
25
  optional,
26
26
  enterHint = true,
27
+ focusOnMount = false,
27
28
  addLabel = (name) => `Add ${name}`,
28
29
  itemLabel = (name, position) => `${name} ${position}`,
29
30
  newItemLabel = (name) => `New ${name}`,
@@ -45,6 +46,10 @@ function ListInput({
45
46
  const downs = useRef(/* @__PURE__ */ new Map());
46
47
  const addBox = useRef(null);
47
48
  const focusNext = useRef(null);
49
+ const focusAtMount = useRef(focusOnMount);
50
+ useLayoutEffect(() => {
51
+ if (focusAtMount.current) addBox.current?.focus();
52
+ }, []);
48
53
  useLayoutEffect(() => {
49
54
  const want = focusNext.current;
50
55
  if (!want) return;
@@ -1,4 +1,4 @@
1
- import { Modal } from './chunk-SVGARBDY.js';
1
+ import { Modal } from './chunk-IAGYPTEJ.js';
2
2
  import { useListbox, useHighlightRest } from './chunk-7KHM2FZH.js';
3
3
  import { Input } from './chunk-TYONQSOK.js';
4
4
  import { Kbd } from './chunk-SMBKXWML.js';
@@ -0,0 +1,48 @@
1
+ import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './CatalogTile-TGR2ZZVQ.css';
4
+ import { useId } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ function CatalogTile({
8
+ as: Element = "article",
9
+ mark,
10
+ title,
11
+ headingLevel,
12
+ status,
13
+ description,
14
+ meta,
15
+ action,
16
+ quiet = false,
17
+ className,
18
+ ...rest
19
+ }) {
20
+ const level = useHeadingLevel();
21
+ const Heading = headingTag(headingLevel ?? level);
22
+ const titleId = useId();
23
+ const foot = meta !== void 0 || action !== void 0;
24
+ return /* @__PURE__ */ jsxs(
25
+ Element,
26
+ {
27
+ "aria-labelledby": Element === "article" ? titleId : void 0,
28
+ ...rest,
29
+ className: cx("crewlet-catalog-tile", quiet && "crewlet-catalog-tile--quiet", className),
30
+ children: [
31
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-catalog-tile__head", children: [
32
+ /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__mark", "aria-hidden": "true", children: mark }),
33
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-catalog-tile__title", children: [
34
+ /* @__PURE__ */ jsx(Heading, { id: titleId, className: "crewlet-catalog-tile__name", children: title }),
35
+ status === void 0 || status === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__status", children: status })
36
+ ] })
37
+ ] }),
38
+ description === void 0 ? null : /* @__PURE__ */ jsx("p", { className: "crewlet-catalog-tile__description", children: description }),
39
+ foot ? /* @__PURE__ */ jsxs("div", { className: "crewlet-catalog-tile__foot", children: [
40
+ /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__meta", children: meta }),
41
+ action === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-catalog-tile__action", children: action })
42
+ ] }) : null
43
+ ]
44
+ }
45
+ );
46
+ }
47
+
48
+ export { CatalogTile };
@@ -1,6 +1,6 @@
1
1
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './StatCard-4T7TMWMN.css';
3
+ import './StatCard-HAA3F5GX.css';
4
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
5
 
6
6
  var StatCard = ({
@@ -1,7 +1,7 @@
1
1
  import { DisclosureAnatomy } from './chunk-FZVJDJFN.js';
2
2
  import { useHeadingLevel } from './chunk-PQADV6P6.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
- import './Disclosure-VKBJJIZ7.css';
4
+ import './Disclosure-P4FH3C35.css';
5
5
  import './Accordion-ZI2WLD5C.css';
6
6
  import { createContext, useState, useCallback, useMemo, useContext, useId } from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -32,6 +32,7 @@ export * from '../CanvasBoard/index.js';
32
32
  export * from '../CanvasSchematic/index.js';
33
33
  export * from '../CanvasToolbar/index.js';
34
34
  export * from '../Card/index.js';
35
+ export * from '../CatalogTile/index.js';
35
36
  export * from '../ChangeMark/index.js';
36
37
  export * from '../CharacterPicker/index.js';
37
38
  export * from '../Charts/index.js';
@@ -133,6 +134,7 @@ export * from '../Section/index.js';
133
134
  export * from '../SegmentedControl/index.js';
134
135
  export * from '../SegmentedMeter/index.js';
135
136
  export * from '../Select/index.js';
137
+ export * from '../SettingsTable/index.js';
136
138
  export * from '../ShareDialog/index.js';
137
139
  export * from '../SheetColumnEditor/index.js';
138
140
  export * from '../SheetGrid/index.js';
@@ -163,6 +165,7 @@ export * from '../ThemeGallery/index.js';
163
165
  export * from '../ThemeSwatch/index.js';
164
166
  export * from '../ThemeSwitcher/index.js';
165
167
  export * from '../ThemeToggle/index.js';
168
+ export * from '../TileGrid/index.js';
166
169
  export * from '../TimeWindowPicker/index.js';
167
170
  export * from '../Timeline/index.js';
168
171
  export * from '../Toaster/index.js';