@crewlethq/ui 0.71.0 → 0.73.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 (87) hide show
  1. package/README.md +19 -1
  2. package/dist/AgentHandoffPanel/index.js +4 -4
  3. package/dist/ArrangeFrame/index.js +2 -2
  4. package/dist/ArrangeList/index.js +4 -4
  5. package/dist/ArtifactCard/index.js +4 -4
  6. package/dist/BriefCard/BriefCard.d.ts +48 -35
  7. package/dist/BriefCard/index.d.ts +2 -2
  8. package/dist/BriefCard/index.js +1 -1
  9. package/dist/{BriefCard-L66R5U32.css → BriefCard-VKTH3BSW.css} +33 -45
  10. package/dist/Checkbox/index.js +3 -3
  11. package/dist/ColorField/index.js +3 -3
  12. package/dist/Combobox/index.js +3 -3
  13. package/dist/CommandPalette/index.js +3 -3
  14. package/dist/CommentThread/index.js +4 -4
  15. package/dist/Composer/index.js +3 -3
  16. package/dist/ConfirmField/index.js +3 -3
  17. package/dist/DataGrid/index.js +4 -4
  18. package/dist/DataTable/index.js +4 -4
  19. package/dist/DataView/index.js +5 -5
  20. package/dist/DeepWorkCard/index.js +2 -2
  21. package/dist/DocTabsEditor/index.js +3 -3
  22. package/dist/{Editor-NNQEALNT.js → Editor-6PBP444G.js} +2 -2
  23. package/dist/Input/index.js +2 -2
  24. package/dist/ListInput/index.js +3 -3
  25. package/dist/PresenterView/index.js +2 -2
  26. package/dist/PrincipalPicker/index.js +4 -4
  27. package/dist/ProposalCard/index.js +4 -4
  28. package/dist/RecordChip/RecordChip.d.ts +46 -0
  29. package/dist/RecordChip/RecordChipList.d.ts +17 -0
  30. package/dist/RecordChip/index.d.ts +5 -0
  31. package/dist/RecordChip/index.js +6 -0
  32. package/dist/RecordChip-53J66RA6.css +184 -0
  33. package/dist/ResultTableCard/index.js +2 -2
  34. package/dist/RichEditor/index.js +1 -1
  35. package/dist/SelectionBar/index.js +2 -2
  36. package/dist/SheetColumnEditor/index.js +4 -4
  37. package/dist/SheetGrid/index.js +1 -1
  38. package/dist/SlideFilmstrip/index.js +1 -1
  39. package/dist/Switcher/index.js +3 -3
  40. package/dist/Table/Table.d.ts +29 -2
  41. package/dist/Table/index.js +1 -1
  42. package/dist/{Table-RUYMMWXT.css → Table-MN3FIA2O.css} +28 -0
  43. package/dist/TagsInput/index.js +2 -2
  44. package/dist/TimeRangePicker/index.js +3 -3
  45. package/dist/TimeWindowPicker/index.js +3 -3
  46. package/dist/ValueField/index.js +4 -4
  47. package/dist/{chunk-3EETQFAM.js → chunk-4HCYBQ6B.js} +1 -1
  48. package/dist/chunk-4KSCGXLJ.js +106 -0
  49. package/dist/{chunk-H32JW6CZ.js → chunk-52D5EFHL.js} +2 -2
  50. package/dist/chunk-75NQV4R4.js +72 -0
  51. package/dist/{chunk-J5WWMC35.js → chunk-AMYU5W2H.js} +2 -2
  52. package/dist/{chunk-KAA3GFTP.js → chunk-AWQQ5I34.js} +2 -2
  53. package/dist/chunk-BFM5G2Z6.js +60 -0
  54. package/dist/{chunk-3LP3VPLT.js → chunk-BW6MQO2B.js} +1 -1
  55. package/dist/{chunk-6C6YK75K.js → chunk-EKZFB34W.js} +1 -1
  56. package/dist/{chunk-LQWORB5B.js → chunk-F5QBQP63.js} +2 -2
  57. package/dist/{chunk-PBCNINMB.js → chunk-FFWMTIMH.js} +1 -1
  58. package/dist/{chunk-YGWIWDXE.js → chunk-FX7FDPCM.js} +1 -1
  59. package/dist/{chunk-4MVLED6E.js → chunk-H6S6NRZL.js} +1 -1
  60. package/dist/{chunk-BWFJB5JD.js → chunk-HGWHIUZ5.js} +1 -1
  61. package/dist/{chunk-ADSOY7UM.js → chunk-I7YQNRTQ.js} +1 -1
  62. package/dist/{chunk-MFQPGMJT.js → chunk-IXPC5D36.js} +1 -1
  63. package/dist/{chunk-7LSSYHOT.js → chunk-J7INWERB.js} +1 -1
  64. package/dist/{chunk-SO5SXSTP.js → chunk-JXJNX7QQ.js} +1 -1
  65. package/dist/{chunk-FURJVZCT.js → chunk-LEM3ZY35.js} +1 -1
  66. package/dist/{chunk-JVII5264.js → chunk-LQXYAB2Q.js} +1 -1
  67. package/dist/{chunk-5OFRDX66.js → chunk-NATDVYEY.js} +1 -1
  68. package/dist/{chunk-W5AXJWOW.js → chunk-O4NQVNO5.js} +1 -1
  69. package/dist/{chunk-ZUBFVK6B.js → chunk-OFARYSWS.js} +1 -1
  70. package/dist/{chunk-3EY5SEGH.js → chunk-OSMR6TSC.js} +1 -1
  71. package/dist/{chunk-NXNLAZPK.js → chunk-SPWBT7FE.js} +1 -1
  72. package/dist/{chunk-BWAUL5MB.js → chunk-YAL6VBRK.js} +2 -2
  73. package/dist/{chunk-TWJERLT3.js → chunk-YZSG3JIY.js} +1 -1
  74. package/dist/generated/index.d.ts +1 -0
  75. package/dist/generated/index.js +64 -63
  76. package/dist/index.js +64 -63
  77. package/dist/styles.css +250 -47
  78. package/package.json +3 -3
  79. package/dist/chunk-5DJMFRSZ.js +0 -58
  80. package/dist/chunk-VBA5FSWV.js +0 -87
  81. package/dist/{chunk-HEIOLITO.js → chunk-5VMAJAVF.js} +1 -1
  82. package/dist/{chunk-ABZC3NLM.js → chunk-ABGLGAFJ.js} +0 -0
  83. package/dist/{chunk-PLNJEDGI.js → chunk-I4IO56EY.js} +1 -1
  84. package/dist/{chunk-P64MIA7C.js → chunk-JKMBC4NB.js} +1 -1
  85. package/dist/{chunk-V6X3DJ2G.js → chunk-PRN5IP2R.js} +1 -1
  86. package/dist/{chunk-L4HHWG4V.js → chunk-V2EV56MY.js} +1 -1
  87. package/dist/{chunk-ETSF7SU6.js → chunk-ZMML6NRS.js} +1 -1
@@ -4,7 +4,7 @@ import { RelativeTime } from './chunk-EJNJMHQG.js';
4
4
  import { Card } from './chunk-4AUTALJA.js';
5
5
  import { AvatarStack } from './chunk-BKP6XCAJ.js';
6
6
  import { ArtifactKindGround } from './chunk-NHLNHH4J.js';
7
- import { Checkbox } from './chunk-PBCNINMB.js';
7
+ import { Checkbox } from './chunk-FFWMTIMH.js';
8
8
  import { ArtifactAccessGlyph } from './chunk-DOY3KC6I.js';
9
9
  import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
10
10
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
@@ -0,0 +1,106 @@
1
+ import { SuggestionList, SuggestionRow } from './chunk-Y7PVLEZJ.js';
2
+ import { StatusCard } from './chunk-NTQPJJAN.js';
3
+ import { StatusDot } from './chunk-WIATRXEJ.js';
4
+ import { Button } from './chunk-DGXZ635L.js';
5
+ import { cx } from './chunk-ODEQTPFM.js';
6
+ import './BriefCard-VKTH3BSW.css';
7
+ import { useEffect } from 'react';
8
+ import { MessageCircleQuestionMarkGlyph, CircleCheckGlyph } from '@crewlethq/icons/glyphs';
9
+ import { jsx, jsxs } from 'react/jsx-runtime';
10
+
11
+ var BRIEF_CARD_MAX_NEEDS = 3;
12
+ var BRIEF_CARD_MAX_FOLLOW_UPS = 2;
13
+ var BRIEF_CARD_LABELS = {
14
+ heading: "Brief",
15
+ needs: "Needs you",
16
+ first: "Do first",
17
+ followUps: "Ask next",
18
+ count: (n) => n === 1 ? "1 thing needs you" : `${n} things need you`,
19
+ allClear: "Nothing needs you"
20
+ };
21
+ function BriefCard({
22
+ scope,
23
+ asOf,
24
+ about,
25
+ needs,
26
+ context,
27
+ followUps,
28
+ labels: overrides,
29
+ className,
30
+ ...rest
31
+ }) {
32
+ const labels = overrides ? { ...BRIEF_CARD_LABELS, ...overrides } : BRIEF_CARD_LABELS;
33
+ const handedNeeds = needs.length;
34
+ const handedFollowUps = followUps?.length ?? 0;
35
+ useEffect(() => {
36
+ if (!developing()) return;
37
+ if (handedNeeds > BRIEF_CARD_MAX_NEEDS) {
38
+ console.warn(
39
+ `[crewlet] BriefCard was handed ${handedNeeds} needs and draws the first ${BRIEF_CARD_MAX_NEEDS}: rank and cap them before passing them.`
40
+ );
41
+ }
42
+ if (handedFollowUps > BRIEF_CARD_MAX_FOLLOW_UPS) {
43
+ console.warn(
44
+ `[crewlet] BriefCard was handed ${handedFollowUps} follow-ups and draws the first ${BRIEF_CARD_MAX_FOLLOW_UPS}.`
45
+ );
46
+ }
47
+ }, [handedNeeds, handedFollowUps]);
48
+ const rows = needs.slice(0, BRIEF_CARD_MAX_NEEDS);
49
+ const asks = followUps ? followUps.slice(0, BRIEF_CARD_MAX_FOLLOW_UPS) : [];
50
+ const ranked = rows.length > 1;
51
+ const hasScope = !(scope === void 0 || scope === null || scope === "");
52
+ const hasAsOf = !(asOf === void 0 || asOf === null || asOf === "");
53
+ const hasContext = !(context === void 0 || context === null || context === "");
54
+ const subtitle = hasScope || hasAsOf ? /* @__PURE__ */ jsxs("span", { className: "crewlet-brief-card__where", children: [
55
+ hasScope ? /* @__PURE__ */ jsx("span", { children: scope }) : null,
56
+ hasScope && hasAsOf ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
57
+ hasAsOf ? /* @__PURE__ */ jsx("span", { className: "crewlet-brief-card__asof", children: asOf }) : null
58
+ ] }) : void 0;
59
+ return /* @__PURE__ */ jsx(
60
+ StatusCard,
61
+ {
62
+ ...rest,
63
+ title: labels.heading,
64
+ subtitle,
65
+ status: rows.length > 0 ? {
66
+ label: labels.count(rows.length),
67
+ tone: rows.some((need) => need.tone === "danger") ? "danger" : "warning"
68
+ } : { label: labels.allClear, tone: "success", icon: /* @__PURE__ */ jsx(CircleCheckGlyph, { size: "xs" }) },
69
+ className: cx("crewlet-brief-card", className),
70
+ children: /* @__PURE__ */ jsxs("div", { className: "crewlet-brief-card__body", children: [
71
+ /* @__PURE__ */ jsx("p", { className: "crewlet-brief-card__about", children: about }),
72
+ rows.length === 0 ? null : (
73
+ // A list the reader moves through by item; Safari drops the role of a list styled without markers.
74
+ // eslint-disable-next-line jsx-a11y/no-redundant-roles
75
+ /* @__PURE__ */ jsx("ol", { role: "list", "aria-label": labels.needs, className: "crewlet-brief-card__needs", children: rows.map((need, i) => /* @__PURE__ */ jsxs(
76
+ "li",
77
+ {
78
+ className: cx("crewlet-brief-card__need", i === 0 && ranked && "crewlet-brief-card__need--first"),
79
+ children: [
80
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brief-card__dot", children: /* @__PURE__ */ jsx(StatusDot, { tone: need.tone ?? "warning" }) }),
81
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-brief-card__words", children: [
82
+ i === 0 && ranked ? /* @__PURE__ */ jsx("span", { className: "crewlet-brief-card__first", children: labels.first }) : null,
83
+ /* @__PURE__ */ jsx("span", { children: need.text }),
84
+ need.detail === void 0 || need.detail === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-brief-card__detail", children: need.detail })
85
+ ] }),
86
+ need.action ? /* @__PURE__ */ jsx(Button, { size: "small", variant: i === 0 ? "primary" : "secondary", onClick: need.action.onSelect, children: need.action.label }) : null
87
+ ]
88
+ },
89
+ need.key
90
+ )) })
91
+ ),
92
+ hasContext ? /* @__PURE__ */ jsx("p", { className: "crewlet-brief-card__context", children: context }) : null,
93
+ asks.length > 0 ? /* @__PURE__ */ jsx(SuggestionList, { "aria-label": labels.followUps, className: "crewlet-brief-card__follow-ups", children: asks.map((f) => /* @__PURE__ */ jsx(SuggestionRow, { icon: /* @__PURE__ */ jsx(MessageCircleQuestionMarkGlyph, { size: "sm" }), onSelect: f.onSelect, children: f.question }, f.key)) }) : null
94
+ ] })
95
+ }
96
+ );
97
+ }
98
+ function developing() {
99
+ try {
100
+ return process.env.NODE_ENV !== "production";
101
+ } catch {
102
+ return false;
103
+ }
104
+ }
105
+
106
+ export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_FOLLOW_UPS, BRIEF_CARD_MAX_NEEDS, BriefCard };
@@ -1,11 +1,11 @@
1
1
  import { useReorder } from './chunk-MPVMB2DV.js';
2
2
  import { Kbd } from './chunk-ANTAQAR4.js';
3
- import { FormField, Textarea } from './chunk-ETSF7SU6.js';
3
+ import { FormField, Textarea } from './chunk-ZMML6NRS.js';
4
4
  import { characterCountState, CharacterCount, countCharacters } from './chunk-PGCLHYVP.js';
5
- import { announce } from './chunk-2G355KDJ.js';
6
5
  import { Button } from './chunk-DGXZ635L.js';
7
6
  import { isComposing } from './chunk-H5XTJ7GJ.js';
8
7
  import { IconButton } from './chunk-UAUP6XGK.js';
8
+ import { announce } from './chunk-2G355KDJ.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
10
  import './ListInput-4ISMGZDQ.css';
11
11
  import { forwardRef, useState, useRef, useImperativeHandle, useLayoutEffect, useId } from 'react';
@@ -0,0 +1,72 @@
1
+ import { VisuallyHidden } from './chunk-UT6CW3C7.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './Table-MN3FIA2O.css';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var Table = ({
7
+ headers,
8
+ data,
9
+ caption,
10
+ captionHidden = false,
11
+ emptyMessage = "No data available",
12
+ actionButton,
13
+ maxHeight,
14
+ align,
15
+ footer,
16
+ framed = true,
17
+ columns = "even",
18
+ nowrap,
19
+ className = ""
20
+ }) => {
21
+ const columnCount = Math.max(1, headers.length);
22
+ const held = columns === "content" ? nowrap : void 0;
23
+ const edge = (index) => cx(align?.[index] === "end" && "crewlet-table__cell--end", held?.[index] === true && "crewlet-table__cell--nowrap") || void 0;
24
+ return /* @__PURE__ */ jsxs(
25
+ "div",
26
+ {
27
+ className: cx(
28
+ "crewlet-table",
29
+ !framed && "crewlet-table--flush",
30
+ columns === "content" && "crewlet-table--content",
31
+ className
32
+ ),
33
+ children: [
34
+ /* @__PURE__ */ jsx(
35
+ "div",
36
+ {
37
+ className: "crewlet-table__container",
38
+ style: (
39
+ // Only the height: the stylesheet scrolls both axes unconditionally,
40
+ // because with `overflow-x: auto` declared beside it a `visible`
41
+ // vertical axis was never reachable. See Table.css.
42
+ maxHeight ? { "--crewlet-table-max-height": maxHeight } : void 0
43
+ ),
44
+ children: /* @__PURE__ */ jsxs("table", { className: "crewlet-table__table", children: [
45
+ caption != null && (captionHidden ? /* @__PURE__ */ jsx("caption", { children: /* @__PURE__ */ jsx(VisuallyHidden, { children: caption }) }) : /* @__PURE__ */ jsx("caption", { className: "crewlet-table__caption", children: caption })),
46
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { className: "crewlet-table__header", children: headers.map((header, index) => (
47
+ // The index is the key because a header is a position: the
48
+ // columns of one table do not reorder between renders.
49
+ /* @__PURE__ */ jsx("th", { scope: "col", className: edge(index), children: header }, index)
50
+ )) }) }),
51
+ /* @__PURE__ */ jsx("tbody", { children: data && data.length > 0 ? data.map((row, rowIndex) => /* @__PURE__ */ jsx("tr", { className: "crewlet-table__row", children: row.map((cell, cellIndex) => /* @__PURE__ */ jsx("td", { className: edge(cellIndex), children: cell }, cellIndex)) }, rowIndex)) : /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { className: "crewlet-table__empty", colSpan: columnCount, children: emptyMessage }) }) }),
52
+ footer && footer.length > 0 ? /* @__PURE__ */ jsx("tfoot", { children: /* @__PURE__ */ jsx("tr", { className: "crewlet-table__footer", children: footer.map(
53
+ (cell, index) => index === 0 ? /* @__PURE__ */ jsx("th", { scope: "row", className: edge(index), children: cell }, index) : /* @__PURE__ */ jsx("td", { className: edge(index), children: cell }, index)
54
+ ) }) }) : null
55
+ ] })
56
+ }
57
+ ),
58
+ actionButton && /* @__PURE__ */ jsx(
59
+ "button",
60
+ {
61
+ type: "button",
62
+ className: "crewlet-table__action-btn",
63
+ onClick: actionButton.onClick,
64
+ children: /* @__PURE__ */ jsx("span", { className: "crewlet-table__action-text", children: actionButton.label })
65
+ }
66
+ )
67
+ ]
68
+ }
69
+ );
70
+ };
71
+
72
+ export { Table };
@@ -1,13 +1,13 @@
1
1
  import { PageHeader } from './chunk-FPDIHEM4.js';
2
2
  import { FilterPill } from './chunk-K4LZXSKZ.js';
3
- import { DataTable } from './chunk-BWFJB5JD.js';
3
+ import { DataTable } from './chunk-HGWHIUZ5.js';
4
4
  import { DateTimePicker } from './chunk-HPI5J6AR.js';
5
5
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
6
6
  import { Toolbar } from './chunk-NR4CPM4T.js';
7
7
  import { Popover } from './chunk-KHJIEPZV.js';
8
8
  import { RelativeTime } from './chunk-EJNJMHQG.js';
9
9
  import { Kbd } from './chunk-ANTAQAR4.js';
10
- import { Input } from './chunk-ETSF7SU6.js';
10
+ import { Input } from './chunk-ZMML6NRS.js';
11
11
  import { Count } from './chunk-MLDTLZAO.js';
12
12
  import { Menu } from './chunk-OQG4P5KU.js';
13
13
  import { Button } from './chunk-DGXZ635L.js';
@@ -2,9 +2,9 @@ import { Select } from './chunk-VK45YJLH.js';
2
2
  import { SHEET_LABELS, SHEET_COLUMN_TYPES, optionHue, retypeColumn } from './chunk-LFSIKGRQ.js';
3
3
  import { HueSwatch } from './chunk-AQIFKLXY.js';
4
4
  import { NODE_HUES, NODE_HUE_NAMES } from './chunk-AYKXMIOR.js';
5
- import { Checkbox } from './chunk-PBCNINMB.js';
5
+ import { Checkbox } from './chunk-FFWMTIMH.js';
6
6
  import { Kbd } from './chunk-ANTAQAR4.js';
7
- import { FormField, Input } from './chunk-ETSF7SU6.js';
7
+ import { FormField, Input } from './chunk-ZMML6NRS.js';
8
8
  import { Menu } from './chunk-OQG4P5KU.js';
9
9
  import { Button } from './chunk-DGXZ635L.js';
10
10
  import { IconButton } from './chunk-UAUP6XGK.js';
@@ -0,0 +1,60 @@
1
+ import { Popover } from './chunk-KHJIEPZV.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './RecordChip-53J66RA6.css';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+ import { useId, Children, isValidElement } from 'react';
6
+
7
+ function RecordChip({ code, label, title, glyph, children, actions, meta, className }) {
8
+ const said = code ?? label ?? title;
9
+ const hasBody = !(children === void 0 || children === null || children === false);
10
+ const hasActions = !(actions === void 0 || actions === null || actions === false);
11
+ return /* @__PURE__ */ jsxs(
12
+ Popover,
13
+ {
14
+ label: code ? `${code} ${title}` : title,
15
+ align: "start",
16
+ className: "crewlet-record-chip__peek",
17
+ trigger: (open, toggle) => /* @__PURE__ */ jsxs(
18
+ "button",
19
+ {
20
+ type: "button",
21
+ className: cx("crewlet-record-chip", code ? "crewlet-record-chip--code" : null, className),
22
+ "data-open": open || void 0,
23
+ "aria-label": code ? `${code}, ${title}` : void 0,
24
+ title: code ? void 0 : said,
25
+ onClick: toggle,
26
+ children: [
27
+ glyph === void 0 || glyph === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-record-chip__glyph", "aria-hidden": "true", children: glyph }),
28
+ /* @__PURE__ */ jsx("span", { className: "crewlet-record-chip__text", children: said })
29
+ ]
30
+ }
31
+ ),
32
+ children: [
33
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-record-chip__head", children: [
34
+ glyph === void 0 || glyph === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-record-chip__head-glyph", "aria-hidden": "true", children: glyph }),
35
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-record-chip__head-words", children: [
36
+ /* @__PURE__ */ jsxs("p", { className: "crewlet-record-chip__name", children: [
37
+ code ? /* @__PURE__ */ jsx("span", { className: "crewlet-record-chip__name-code", children: code }) : null,
38
+ code ? " " : null,
39
+ title
40
+ ] }),
41
+ meta === void 0 || meta === null ? null : /* @__PURE__ */ jsx("p", { className: "crewlet-record-chip__meta", children: meta })
42
+ ] })
43
+ ] }),
44
+ hasBody ? /* @__PURE__ */ jsx("div", { className: "crewlet-record-chip__body", children }) : null,
45
+ hasActions ? /* @__PURE__ */ jsx("div", { className: "crewlet-record-chip__actions", children: actions }) : null
46
+ ]
47
+ }
48
+ );
49
+ }
50
+ function RecordChipList({ label, children, className, ...rest }) {
51
+ const id = useId();
52
+ const items = Children.toArray(children).filter(isValidElement);
53
+ if (items.length === 0) return null;
54
+ return /* @__PURE__ */ jsxs("div", { ...rest, className: cx("crewlet-record-chip-list", className), children: [
55
+ /* @__PURE__ */ jsx("span", { id, className: "crewlet-record-chip-list__label", children: label }),
56
+ /* @__PURE__ */ jsx("ul", { role: "list", "aria-labelledby": id, className: "crewlet-record-chip-list__items", children: items.map((item, i) => /* @__PURE__ */ jsx("li", { className: "crewlet-record-chip-list__item", children: item }, item.key ?? i)) })
57
+ ] });
58
+ }
59
+
60
+ export { RecordChip, RecordChipList };
@@ -9,7 +9,7 @@ import { jsx } from 'react/jsx-runtime';
9
9
  var engine = null;
10
10
  var loading = null;
11
11
  function loadEngine() {
12
- loading ??= import('./Editor-NNQEALNT.js').then(
12
+ loading ??= import('./Editor-6PBP444G.js').then(
13
13
  (module) => {
14
14
  engine = module.Editor;
15
15
  return engine;
@@ -1,6 +1,6 @@
1
1
  import { Timeline } from './chunk-4MJN2KN6.js';
2
2
  import { Section } from './chunk-WFCWPXJN.js';
3
- import { Composer } from './chunk-5OFRDX66.js';
3
+ import { Composer } from './chunk-NATDVYEY.js';
4
4
  import { Disclosure } from './chunk-222VILSP.js';
5
5
  import { ArtifactPanel } from './chunk-FFGEJUAP.js';
6
6
  import { Button } from './chunk-DGXZ635L.js';
@@ -3,11 +3,11 @@ import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
3
3
  import { Popover } from './chunk-KHJIEPZV.js';
4
4
  import { KeyChip, highlightMatch } from './chunk-HBDA76EZ.js';
5
5
  import { Skeleton } from './chunk-BRLZXYPA.js';
6
- import { Input } from './chunk-ETSF7SU6.js';
7
- import { announce } from './chunk-2G355KDJ.js';
6
+ import { Input } from './chunk-ZMML6NRS.js';
8
7
  import { useMediaMatch } from './chunk-RTPQDNW3.js';
9
8
  import { focusables, isComposing } from './chunk-H5XTJ7GJ.js';
10
9
  import { returnFocus } from './chunk-NUZHC6MM.js';
10
+ import { announce } from './chunk-2G355KDJ.js';
11
11
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
12
12
  import { cx } from './chunk-ODEQTPFM.js';
13
13
  import './Switcher-VWQMZUTN.css';
@@ -1,4 +1,4 @@
1
- import { FormField } from './chunk-ETSF7SU6.js';
1
+ import { FormField } from './chunk-ZMML6NRS.js';
2
2
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './Checkbox-GAMV2XD7.css';
@@ -1,7 +1,7 @@
1
1
  import { PrincipalAvatar } from './chunk-CI3VPIJN.js';
2
2
  import { toInstant, RelativeTime, formatExact, toISO } from './chunk-EJNJMHQG.js';
3
3
  import { Document } from './chunk-BXCL6P5Z.js';
4
- import { Composer } from './chunk-5OFRDX66.js';
4
+ import { Composer } from './chunk-NATDVYEY.js';
5
5
  import { Count } from './chunk-MLDTLZAO.js';
6
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
7
7
  import { Button } from './chunk-DGXZ635L.js';
@@ -1,7 +1,7 @@
1
1
  import { Modal } from './chunk-C667GCU7.js';
2
2
  import { Callout } from './chunk-BPCY7ZID.js';
3
3
  import { SegmentedControl } from './chunk-TYIHFDMP.js';
4
- import { FormField, Input } from './chunk-ETSF7SU6.js';
4
+ import { FormField, Input } from './chunk-ZMML6NRS.js';
5
5
  import { Button } from './chunk-DGXZ635L.js';
6
6
  import { useState } from 'react';
7
7
  import { ClockGlyph } from '@crewlethq/icons/glyphs';
@@ -2,7 +2,7 @@ import { Modal } from './chunk-C667GCU7.js';
2
2
  import { useClipboard } from './chunk-STJ7QBC3.js';
3
3
  import { EmptyValue } from './chunk-RE3FBGQQ.js';
4
4
  import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
5
- import { Checkbox } from './chunk-PBCNINMB.js';
5
+ import { Checkbox } from './chunk-FFWMTIMH.js';
6
6
  import { Menu } from './chunk-OQG4P5KU.js';
7
7
  import { Button } from './chunk-DGXZ635L.js';
8
8
  import { IconButton } from './chunk-UAUP6XGK.js';
@@ -1,7 +1,7 @@
1
1
  import { Select } from './chunk-VK45YJLH.js';
2
2
  import { today, shiftMonth, CalendarGrid, compareDays } from './chunk-EE3DJMSQ.js';
3
3
  import { Popover } from './chunk-KHJIEPZV.js';
4
- import { Input } from './chunk-ETSF7SU6.js';
4
+ import { Input } from './chunk-ZMML6NRS.js';
5
5
  import { Button } from './chunk-DGXZ635L.js';
6
6
  import { isComposing } from './chunk-H5XTJ7GJ.js';
7
7
  import { IconButton } from './chunk-UAUP6XGK.js';
@@ -1,4 +1,4 @@
1
- import { Combobox } from './chunk-ZUBFVK6B.js';
1
+ import { Combobox } from './chunk-OFARYSWS.js';
2
2
  import { PRINCIPAL_KINDS, PrincipalAvatar } from './chunk-CI3VPIJN.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './PrincipalPicker-P6UYHDJR.css';
@@ -1,5 +1,5 @@
1
1
  import { normalizeHex, parseColourInput } from './chunk-7W3LYIOC.js';
2
- import { FormField, Input, InputAffix } from './chunk-ETSF7SU6.js';
2
+ import { FormField, Input, InputAffix } from './chunk-ZMML6NRS.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './ColorField-2OIOWT3Z.css';
5
5
  import { useId, useState } from 'react';
@@ -1,4 +1,4 @@
1
- import { Table } from './chunk-5DJMFRSZ.js';
1
+ import { Table } from './chunk-75NQV4R4.js';
2
2
  import { DownloadButton } from './chunk-EHFQMY3B.js';
3
3
  import { StatusCard } from './chunk-NTQPJJAN.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { Checkbox } from './chunk-PBCNINMB.js';
1
+ import { Checkbox } from './chunk-FFWMTIMH.js';
2
2
  import { EmptyState } from './chunk-PPUR46MK.js';
3
3
  import { useMediaMatch } from './chunk-RTPQDNW3.js';
4
4
  import { Button } from './chunk-DGXZ635L.js';
@@ -1,5 +1,5 @@
1
1
  import { InlineCode } from './chunk-PLL7ZJHY.js';
2
- import { FormField, Input } from './chunk-ETSF7SU6.js';
2
+ import { FormField, Input } from './chunk-ZMML6NRS.js';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
 
5
5
  function confirmMatches(typed, phrase) {
@@ -1,5 +1,5 @@
1
1
  import { Kbd } from './chunk-ANTAQAR4.js';
2
- import { Textarea } from './chunk-ETSF7SU6.js';
2
+ import { Textarea } from './chunk-ZMML6NRS.js';
3
3
  import { isComposing } from './chunk-H5XTJ7GJ.js';
4
4
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
1
  import { useReorder } from './chunk-MPVMB2DV.js';
2
- import { Input } from './chunk-ETSF7SU6.js';
2
+ import { Input } from './chunk-ZMML6NRS.js';
3
3
  import { Menu } from './chunk-OQG4P5KU.js';
4
4
  import { IconButton } from './chunk-UAUP6XGK.js';
5
5
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
@@ -1,5 +1,5 @@
1
1
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
2
- import { Input } from './chunk-ETSF7SU6.js';
2
+ import { Input } from './chunk-ZMML6NRS.js';
3
3
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './HitArea-QUOS6ZDJ.css';
@@ -1,7 +1,7 @@
1
1
  import { RefusalStrip, ReceiptStrip } from './chunk-ZWCK4N4L.js';
2
2
  import { ChangeList } from './chunk-WQRSZMN4.js';
3
3
  import { StatusCard } from './chunk-NTQPJJAN.js';
4
- import { Checkbox } from './chunk-PBCNINMB.js';
4
+ import { Checkbox } from './chunk-FFWMTIMH.js';
5
5
  import { Disclosure } from './chunk-222VILSP.js';
6
6
  import { Button } from './chunk-DGXZ635L.js';
7
7
  import { Spinner } from './chunk-XSPCITPN.js';
@@ -1,7 +1,7 @@
1
1
  import { Modal } from './chunk-C667GCU7.js';
2
2
  import { useListbox, useHighlightRest } from './chunk-7KHM2FZH.js';
3
3
  import { Kbd } from './chunk-ANTAQAR4.js';
4
- import { Input } from './chunk-ETSF7SU6.js';
4
+ import { Input } from './chunk-ZMML6NRS.js';
5
5
  import { Count } from './chunk-MLDTLZAO.js';
6
6
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
7
7
  import { isComposing } from './chunk-H5XTJ7GJ.js';
@@ -1,6 +1,6 @@
1
1
  import { Select } from './chunk-VK45YJLH.js';
2
- import { Combobox } from './chunk-ZUBFVK6B.js';
3
- import { FormField, Textarea, InputAffix } from './chunk-ETSF7SU6.js';
2
+ import { Combobox } from './chunk-OFARYSWS.js';
3
+ import { FormField, Textarea, InputAffix } from './chunk-ZMML6NRS.js';
4
4
  import './Input-GEFFMKBS.css';
5
5
  import './VisuallyHidden-AOEXU5EB.css';
6
6
  import './HitArea-QUOS6ZDJ.css';
@@ -1,6 +1,6 @@
1
1
  import { Switch } from './chunk-3XDT5ZWL.js';
2
2
  import { useReorder } from './chunk-MPVMB2DV.js';
3
- import { Checkbox } from './chunk-PBCNINMB.js';
3
+ import { Checkbox } from './chunk-FFWMTIMH.js';
4
4
  import { IconButton } from './chunk-UAUP6XGK.js';
5
5
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
@@ -157,6 +157,7 @@ export * from '../Prose/index.js';
157
157
  export * from '../QrCode/index.js';
158
158
  export * from '../ReadingPane/index.js';
159
159
  export * from '../ReceiptStrip/index.js';
160
+ export * from '../RecordChip/index.js';
160
161
  export * from '../RefusalCard/index.js';
161
162
  export * from '../RelatedRow/index.js';
162
163
  export * from '../RelativeTime/index.js';