@crewlethq/ui 0.37.1 → 0.38.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 (60) hide show
  1. package/README.md +34 -0
  2. package/dist/Accordion/index.js +1 -1
  3. package/dist/AgentHandoffPanel/index.js +4 -4
  4. package/dist/AppShell/index.js +1 -1
  5. package/dist/{AppShell-JBCZSSX3.css → AppShell-NDU4XMGF.css} +39 -6
  6. package/dist/ArtifactCard/index.js +2 -2
  7. package/dist/ArtifactMakeRow/ArtifactMakeRow.d.ts +3 -1
  8. package/dist/ArtifactMakeRow/index.js +1 -1
  9. package/dist/{ArtifactMakeRow-W3RD5YWZ.css → ArtifactMakeRow-6UX2LTF7.css} +43 -5
  10. package/dist/AuthLayout/index.js +2 -2
  11. package/dist/Card/index.js +1 -1
  12. package/dist/{Card-QOVASQNU.css → Card-G2ZGT5Z6.css} +43 -0
  13. package/dist/CommandPalette/index.js +2 -2
  14. package/dist/CommentThread/index.js +3 -3
  15. package/dist/Composer/index.js +2 -2
  16. package/dist/DataView/index.js +2 -2
  17. package/dist/DatasetSource/index.js +2 -2
  18. package/dist/DescriptionList/DescriptionList.d.ts +12 -1
  19. package/dist/DescriptionList/index.js +1 -1
  20. package/dist/{DescriptionList-IXMRCSMK.css → DescriptionList-DEZISDLQ.css} +8 -1
  21. package/dist/Disclosure/index.js +1 -1
  22. package/dist/{Disclosure-VKBJJIZ7.css → Disclosure-P4FH3C35.css} +28 -2
  23. package/dist/ListInput/index.js +2 -2
  24. package/dist/PricingCard/index.js +2 -2
  25. package/dist/SheetColumnEditor/index.js +3 -3
  26. package/dist/SheetGrid/index.js +2 -2
  27. package/dist/StatGroup/StatGroup.d.ts +11 -7
  28. package/dist/StatGroup/index.js +1 -1
  29. package/dist/StatGroup-DOFHX5QJ.css +168 -0
  30. package/dist/TableCells/index.js +2 -2
  31. package/dist/Tag/index.js +1 -1
  32. package/dist/{Tag-SRGTK5KI.css → Tag-2DQOVE6W.css} +15 -5
  33. package/dist/TagsInput/index.js +2 -2
  34. package/dist/{chunk-K4VP6ZKE.js → chunk-4BJK7FE5.js} +1 -1
  35. package/dist/{chunk-3SBM4DGI.js → chunk-BH52LIY6.js} +1 -1
  36. package/dist/{chunk-WX2NIG4G.js → chunk-BJI3RFXG.js} +1 -1
  37. package/dist/{chunk-JXRI5YD2.js → chunk-BT5H2THK.js} +2 -1
  38. package/dist/{chunk-HDHZWIFL.js → chunk-DYB66CNM.js} +16 -2
  39. package/dist/{chunk-HMLAWVG6.js → chunk-IPWU6ERC.js} +1 -1
  40. package/dist/{chunk-DZSBFITC.js → chunk-JZPK4IXR.js} +1 -1
  41. package/dist/{chunk-GFV4LJHH.js → chunk-KYIAFNU7.js} +1 -1
  42. package/dist/{chunk-F2XSYBKH.js → chunk-MFS6F2P7.js} +4 -1
  43. package/dist/{chunk-MICH6QSJ.js → chunk-OGXHZHRX.js} +1 -1
  44. package/dist/{chunk-OHA6WSAG.js → chunk-OTCXRJ7D.js} +1 -1
  45. package/dist/{chunk-MMPKN7WV.js → chunk-PT6WKXKW.js} +1 -1
  46. package/dist/{chunk-NS4NSHVX.js → chunk-R2IBCEU6.js} +12 -2
  47. package/dist/{chunk-DQSXWQMJ.js → chunk-U3ILLCR2.js} +1 -1
  48. package/dist/{chunk-YSG3DW7W.js → chunk-XBURIXHO.js} +2 -2
  49. package/dist/{chunk-5QXRI35B.js → chunk-ZK3VYY7L.js} +1 -1
  50. package/dist/{chunk-RIAZM6L3.js → chunk-ZNOXQACX.js} +1 -1
  51. package/dist/generated/index.js +42 -42
  52. package/dist/index.js +42 -42
  53. package/dist/styles.css +285 -46
  54. package/package.json +3 -3
  55. package/dist/StatGroup-PADTJCUQ.css +0 -86
  56. package/dist/{chunk-DOLATMGF.js → chunk-3ZUINC7C.js} +1 -1
  57. package/dist/{chunk-F3WZ5AKM.js → chunk-4L2BWSHR.js} +1 -1
  58. package/dist/{chunk-ISA2O2BK.js → chunk-ETVEGR2Y.js} +1 -1
  59. package/dist/{chunk-A72JPXIV.js → chunk-PAQXOP2M.js} +1 -1
  60. package/dist/{chunk-MG3HTY6F.js → chunk-YQG4PZGC.js} +1 -1
@@ -0,0 +1,168 @@
1
+ /*
2
+ * A row of stat tiles.
3
+ *
4
+ * ITS COLUMN COUNT NEVER MOVES with its contents. A grid that reflowed as
5
+ * tiles appeared and vanished moved every number on the page for a reason that
6
+ * had nothing to do with the numbers, which is exactly what a reader watching
7
+ * a live board is trying not to have happen.
8
+ *
9
+ * IT FOLDS BY ITS OWN WIDTH, never the window's. The row used to drop to two
10
+ * columns under a 1024px viewport, but a row's width is whatever its column
11
+ * leaves it: beside the rail and a settings column at exactly 1024 a
12
+ * four-column row was 489px wide, its tiles about 120px each, and its figures
13
+ * were cut ("Not s…", "1.6 …"), while on a phone a three-column row folded to
14
+ * two and left its third tile alone on a row of its own. So the row is a size
15
+ * container, and the tiles take their place from the row's own width.
16
+ *
17
+ * TWELVE TRACKS, AND EACH TILE SPANS ITS SHARE. A container query styles what
18
+ * is inside the container, never the container itself, so the row cannot
19
+ * change its own column count by its own width. Its tiles can change how many
20
+ * of its twelve tracks they span, which is the same layout: twelve divides by
21
+ * every count a row takes (one, two, three and four a row).
22
+ *
23
+ * The row's width comes from where it stands, as a block's does: inline-size
24
+ * containment means its contents never widen it.
25
+ */
26
+
27
+ .crewlet-stat-group {
28
+ container: crewlet-stat-group / inline-size;
29
+ display: grid;
30
+ grid-template-columns: repeat(12, minmax(0, 1fr));
31
+ /* The flush-panel recipe: the card's surface, its hairline and its 12px
32
+ corner, flat as every card is, and `overflow: hidden`, which is what lets
33
+ the tiles inside sit against the corners without their own hairlines
34
+ escaping past them. */
35
+ background: var(--color-surface-subtle);
36
+ border: 1px solid var(--color-border-default);
37
+ border-radius: var(--radius-lg);
38
+ overflow: hidden;
39
+ }
40
+
41
+ /*
42
+ * Inside another card: the card's surface and edge are the row's.
43
+ *
44
+ * A ROW STANDING IN A CARD IS FLUSH WHETHER OR NOT ITS CALLER SAID SO. Six
45
+ * settings pages wrapped a row in a card without `flush`, and each drew the
46
+ * row's own edge and 12px corner one pixel inside the card's: a box inside a
47
+ * box, and inside a padded body a third frame. A row that is a card's content,
48
+ * or its body's, is that card's row; `flush` is for a host that is not a
49
+ * Card (a widget's frame, a panel of an application's own).
50
+ */
51
+ .crewlet-stat-group--flush,
52
+ .crewlet-card > .crewlet-stat-group,
53
+ .crewlet-card__body > .crewlet-stat-group {
54
+ background: transparent;
55
+ border: 0;
56
+ border-radius: var(--radius-none);
57
+ }
58
+
59
+ /*
60
+ * A tile inside the row brings no surface of its own, whether or not its
61
+ * caller remembered `flush`. The group draws one card and the hairlines
62
+ * inside it, so a tile that kept its own border and radius is a card inside
63
+ * a card: a box inside a box, which is what the reader sees.
64
+ *
65
+ * TWO CLASSES, NOT :where(). Written as `> :where(.crewlet-statcard)` this
66
+ * weighed exactly what the tile's own `.crewlet-statcard` rule weighs, so
67
+ * which one painted was settled by whichever stylesheet the bundler put
68
+ * last. It put the tile's last, and every tile in every group drew its own
69
+ * border, its own 12px corner and its own surface inside the group's.
70
+ * Naming both classes settles it by weight, which no import order can undo.
71
+ */
72
+ .crewlet-stat-group > .crewlet-statcard {
73
+ background: transparent;
74
+ border: 0;
75
+ border-radius: var(--radius-none);
76
+ }
77
+
78
+ /*
79
+ * Each tile spans its share of the twelve tracks: the row's `columns`, set on
80
+ * it as `--crewlet-stat-group-cols`, a row.
81
+ */
82
+ .crewlet-stat-group > * {
83
+ grid-column: span calc(12 / var(--crewlet-stat-group-cols, 4));
84
+ }
85
+
86
+ /*
87
+ * The hairlines between tiles: one before every tile that does not start a
88
+ * row, and one above every tile that is not on the first.
89
+ *
90
+ * NAMED TWICE, ON PURPOSE. The rule above clears the tile's own border and
91
+ * weighs two classes, so a one-class selector here loses to it and the row
92
+ * of numbers runs together with nothing between the columns. The first
93
+ * selector of each pair matches whatever a caller puts in the row; the second
94
+ * weighs at least as much as the rule it has to beat, and sits after it.
95
+ */
96
+ .crewlet-stat-group > * + *,
97
+ .crewlet-stat-group > .crewlet-statcard + .crewlet-statcard {
98
+ border-left: 1px solid var(--color-border-default);
99
+ }
100
+
101
+ .crewlet-stat-group[data-columns='2'] > :nth-child(2n + 1),
102
+ .crewlet-stat-group[data-columns='2'] > .crewlet-statcard:nth-child(2n + 1),
103
+ .crewlet-stat-group[data-columns='3'] > :nth-child(3n + 1),
104
+ .crewlet-stat-group[data-columns='3'] > .crewlet-statcard:nth-child(3n + 1),
105
+ .crewlet-stat-group[data-columns='4'] > :nth-child(4n + 1),
106
+ .crewlet-stat-group[data-columns='4'] > .crewlet-statcard:nth-child(4n + 1) {
107
+ border-left: 0;
108
+ }
109
+
110
+ .crewlet-stat-group[data-columns='2'] > :nth-child(n + 3),
111
+ .crewlet-stat-group[data-columns='2'] > .crewlet-statcard:nth-child(n + 3),
112
+ .crewlet-stat-group[data-columns='3'] > :nth-child(n + 4),
113
+ .crewlet-stat-group[data-columns='3'] > .crewlet-statcard:nth-child(n + 4),
114
+ .crewlet-stat-group[data-columns='4'] > :nth-child(n + 5),
115
+ .crewlet-stat-group[data-columns='4'] > .crewlet-statcard:nth-child(n + 5) {
116
+ border-top: 1px solid var(--color-border-default);
117
+ }
118
+
119
+ /*
120
+ * FOUR A ROW FOLD TO TWO under 640px of row (the phone breakpoint's number):
121
+ * four tiles of 160px is the narrowest at which a six-character figure and a
122
+ * two-word label still stand on one line each. Two by two keeps every row
123
+ * full.
124
+ */
125
+ @container crewlet-stat-group (width < 640px) {
126
+ .crewlet-stat-group[data-columns='4'] > *,
127
+ .crewlet-stat-group[data-columns='4'] > .crewlet-statcard {
128
+ grid-column: span 6;
129
+ }
130
+
131
+ .crewlet-stat-group[data-columns='4'] > :nth-child(odd),
132
+ .crewlet-stat-group[data-columns='4'] > .crewlet-statcard:nth-child(odd) {
133
+ border-left: 0;
134
+ }
135
+
136
+ .crewlet-stat-group[data-columns='4'] > :nth-child(even),
137
+ .crewlet-stat-group[data-columns='4'] > .crewlet-statcard:nth-child(even) {
138
+ border-left: 1px solid var(--color-border-default);
139
+ }
140
+
141
+ .crewlet-stat-group[data-columns='4'] > :nth-child(n + 3),
142
+ .crewlet-stat-group[data-columns='4'] > .crewlet-statcard:nth-child(n + 3) {
143
+ border-top: 1px solid var(--color-border-default);
144
+ }
145
+ }
146
+
147
+ /*
148
+ * THREE A ROW STACK under 480px of row (the small breakpoint's number), at the
149
+ * same 160px a tile. Folded to two, three tiles stood two and one, the last
150
+ * alone at double width and a different height, which read as a tile that had
151
+ * failed to load; one a row leaves no row short.
152
+ */
153
+ @container crewlet-stat-group (width < 480px) {
154
+ .crewlet-stat-group[data-columns='3'] > *,
155
+ .crewlet-stat-group[data-columns='3'] > .crewlet-statcard {
156
+ grid-column: span 12;
157
+ }
158
+
159
+ .crewlet-stat-group[data-columns='3'] > *,
160
+ .crewlet-stat-group[data-columns='3'] > .crewlet-statcard + .crewlet-statcard {
161
+ border-left: 0;
162
+ }
163
+
164
+ .crewlet-stat-group[data-columns='3'] > :nth-child(n + 2),
165
+ .crewlet-stat-group[data-columns='3'] > .crewlet-statcard:nth-child(n + 2) {
166
+ border-top: 1px solid var(--color-border-default);
167
+ }
168
+ }
@@ -1,6 +1,6 @@
1
- export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-K4VP6ZKE.js';
1
+ export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-4BJK7FE5.js';
2
2
  import '../chunk-FBSEJO2C.js';
3
- import '../chunk-GFV4LJHH.js';
3
+ import '../chunk-KYIAFNU7.js';
4
4
  import '../chunk-WIATRXEJ.js';
5
5
  import '../chunk-3CZ7XAVY.js';
6
6
  import '../chunk-EUCC37WY.js';
package/dist/Tag/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Tag } from '../chunk-GFV4LJHH.js';
1
+ export { Tag } from '../chunk-KYIAFNU7.js';
2
2
  import '../chunk-WIATRXEJ.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -277,12 +277,22 @@
277
277
  --crewlet-tag-line: var(--color-border-strong-hover);
278
278
  }
279
279
 
280
- /* The neutral outline is the engine's `.badge.outline`: the hairline step as
281
- the boundary, and the tertiary ink, which is a quieter register than the
282
- tinted outlines keep. It is the appearance for a value that is not a state
283
- at all, so it says less than its neighbours on purpose. */
280
+ /*
281
+ * The neutral outline: the neutral pill's own boundary with no fill, and the
282
+ * tertiary ink, which is a quieter register than the tinted outlines keep. It
283
+ * is the appearance for a value that is not a state at all, so it says less
284
+ * than its neighbours on purpose, by its ink and its empty ground.
285
+ *
286
+ * NOT BY A FAINTER EDGE. It used to take the plain hairline, the line that
287
+ * finds a card, and on the card it so often stands on that line measured
288
+ * 1.07:1 in dark: Limits' "Off" beside a filled "Default", an audit row's
289
+ * machine and open, a tool's "builtin", all read as loose words rather than
290
+ * as pills. The strong step is the edge the neutral soft pill already draws
291
+ * (1.49:1 dark, 1.52:1 light on the card), so the two neutral pills differ by
292
+ * their fill alone and both read as pills.
293
+ */
284
294
  .crewlet-tag--neutral.crewlet-tag--outline {
285
- border-color: var(--color-border-default);
295
+ border-color: var(--color-border-strong);
286
296
  --crewlet-tag-ink: var(--color-text-tertiary);
287
297
  }
288
298
 
@@ -1,5 +1,5 @@
1
- export { TagsInput } from '../chunk-3SBM4DGI.js';
2
- import '../chunk-GFV4LJHH.js';
1
+ export { TagsInput } from '../chunk-BH52LIY6.js';
2
+ import '../chunk-KYIAFNU7.js';
3
3
  import '../chunk-WIATRXEJ.js';
4
4
  import '../chunk-7KHM2FZH.js';
5
5
  import '../chunk-RSAQOKH3.js';
@@ -1,5 +1,5 @@
1
1
  import { Link } from './chunk-FBSEJO2C.js';
2
- import { Tag } from './chunk-GFV4LJHH.js';
2
+ import { Tag } from './chunk-KYIAFNU7.js';
3
3
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
4
4
  import { EmptyValue } from './chunk-EUCC37WY.js';
5
5
  import { Avatar } from './chunk-PZKHBB7D.js';
@@ -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';
@@ -1,5 +1,5 @@
1
1
  import { BrandLockup } from './chunk-7KBNFFM3.js';
2
- import { Card } from './chunk-5QXRI35B.js';
2
+ import { Card } from './chunk-ZK3VYY7L.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './AuthLayout-ODHBUPHQ.css';
5
5
  import { useId } from 'react';
@@ -1,5 +1,5 @@
1
1
  import { cx } from './chunk-ODEQTPFM.js';
2
- import './StatGroup-PADTJCUQ.css';
2
+ import './StatGroup-DOFHX5QJ.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
  }
@@ -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,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';
@@ -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 { 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,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
 
@@ -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-ZK3VYY7L.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,7 +1,7 @@
1
1
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
2
2
  import { toInstant, RelativeTime, formatExact, toISO } from './chunk-3CZ7XAVY.js';
3
3
  import { Document } from './chunk-PWG3VHRQ.js';
4
- import { Composer } from './chunk-ISA2O2BK.js';
4
+ import { Composer } from './chunk-ETVEGR2Y.js';
5
5
  import { Count } from './chunk-BHHIIK3M.js';
6
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
7
7
  import { Button } from './chunk-OG6CL3EB.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,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';
@@ -1,7 +1,7 @@
1
1
  import { Timeline } from './chunk-AUQPBL4O.js';
2
2
  import { Section } from './chunk-3TFDQLW3.js';
3
- import { Disclosure } from './chunk-MICH6QSJ.js';
4
- import { Composer } from './chunk-ISA2O2BK.js';
3
+ import { Disclosure } from './chunk-OGXHZHRX.js';
4
+ import { Composer } from './chunk-ETVEGR2Y.js';
5
5
  import { ArtifactPanel } from './chunk-Y5BD4MTE.js';
6
6
  import { Button } from './chunk-OG6CL3EB.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
@@ -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-G2ZGT5Z6.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
 
@@ -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';