@crewlethq/ui 0.67.0 → 0.69.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 (61) hide show
  1. package/README.md +6 -2
  2. package/dist/AgentHandoffPanel/index.js +3 -3
  3. package/dist/AvatarPicker/index.js +3 -3
  4. package/dist/BriefCard/BriefCard.d.ts +80 -0
  5. package/dist/BriefCard/index.d.ts +3 -0
  6. package/dist/BriefCard/index.js +13 -0
  7. package/dist/BriefCard-L66R5U32.css +127 -0
  8. package/dist/CharacterPicker/index.js +2 -2
  9. package/dist/CommandPalette/index.js +2 -2
  10. package/dist/CommentThread/index.js +3 -3
  11. package/dist/Composer/index.js +2 -2
  12. package/dist/DataTable/index.js +2 -2
  13. package/dist/DataView/index.js +4 -4
  14. package/dist/DatasetSource/index.js +1 -1
  15. package/dist/DeepWorkCard/index.js +1 -1
  16. package/dist/EditingStatus/index.js +2 -2
  17. package/dist/EntityList/index.js +1 -1
  18. package/dist/InboxList/InboxList.d.ts +45 -3
  19. package/dist/InboxList/index.js +1 -1
  20. package/dist/{InboxList-OCL2M3ZF.css → InboxList-OFGSX5IH.css} +137 -6
  21. package/dist/InlineEditor/index.js +3 -3
  22. package/dist/LinkInterstitial/index.js +2 -2
  23. package/dist/ListInput/index.js +2 -2
  24. package/dist/OpenInAppCard/index.js +1 -1
  25. package/dist/ProposalCard/index.js +3 -3
  26. package/dist/RefusalCard/index.js +1 -1
  27. package/dist/ResultTableCard/index.js +2 -2
  28. package/dist/RichEditor/index.js +1 -1
  29. package/dist/SetupWizard/index.js +2 -2
  30. package/dist/ShareDialog/index.js +2 -2
  31. package/dist/SheetColumnEditor/index.js +3 -3
  32. package/dist/SheetGrid/index.js +3 -3
  33. package/dist/StatusCard/index.js +1 -1
  34. package/dist/TableCells/index.js +1 -1
  35. package/dist/{chunk-QBWNGNF7.js → chunk-4E3CE2UK.js} +1 -1
  36. package/dist/{chunk-WUQVAFTC.js → chunk-BXEKD5NU.js} +1 -1
  37. package/dist/{chunk-BVNFNFA6.js → chunk-DS5NBENV.js} +1 -1
  38. package/dist/{chunk-5OVTWY3I.js → chunk-NJYB4VJI.js} +1 -1
  39. package/dist/chunk-NTFVEOYY.js +87 -0
  40. package/dist/{chunk-UBJ32EO2.js → chunk-OWQATZGW.js} +1 -1
  41. package/dist/{chunk-62DBFNOK.js → chunk-QPHD4UUG.js} +82 -6
  42. package/dist/{chunk-J5BIKMQY.js → chunk-RLBGU35B.js} +2 -2
  43. package/dist/generated/index.d.ts +1 -0
  44. package/dist/generated/index.js +58 -57
  45. package/dist/index.js +58 -57
  46. package/dist/styles.css +268 -7
  47. package/package.json +3 -3
  48. package/dist/{Editor-URGZOK2S.js → Editor-NZRUKWB4.js} +1 -1
  49. package/dist/{chunk-VLGGLLKH.js → chunk-AIMMHN5J.js} +1 -1
  50. package/dist/{chunk-PZAOUZFZ.js → chunk-EHB4TSP2.js} +1 -1
  51. package/dist/{chunk-2AQMXGWA.js → chunk-HXJHRQDR.js} +1 -1
  52. package/dist/{chunk-MNTUIAQT.js → chunk-IABWA76I.js} +1 -1
  53. package/dist/{chunk-TXQNWGUD.js → chunk-KBXSOBLD.js} +0 -0
  54. package/dist/{chunk-WWXIGN4O.js → chunk-L4UO57YP.js} +1 -1
  55. package/dist/{chunk-KQGOVBGF.js → chunk-O3BNL4TV.js} +1 -1
  56. package/dist/{chunk-OOC6KXNL.js → chunk-S2UHV52X.js} +1 -1
  57. package/dist/{chunk-R2YHKVWN.js → chunk-SBHAKX2T.js} +1 -1
  58. package/dist/{chunk-CFY257ND.js → chunk-UYK3SGZI.js} +1 -1
  59. package/dist/{chunk-SNQRGH4A.js → chunk-VZICPYGR.js} +1 -1
  60. package/dist/{chunk-5OFRDX66.js → chunk-XWOH3UPZ.js} +1 -1
  61. package/dist/{chunk-SBOUVASH.js → chunk-ZHVLDRAT.js} +1 -1
package/README.md CHANGED
@@ -47,7 +47,7 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
47
47
  | List screens | `DataView`, and its parts on their own: `DataViewToolbar`, `FilterAxisBar`, `FilterAxisChip`, plus the filter model (`filterDefsFromColumns`, `applyColumnFilters`, `filterPredicate`, `blankFilterValue`) |
48
48
  | Feedback and overlays | `Callout`, `ConflictNote`, `EditingStatus`, `Toaster`, `Modal` (with `variant="sheet"`), `ConfirmModal`, `CommandPalette`, `Tooltip`, `Popover`, `Announcer` |
49
49
  | Documents and review | `DiffView` and `DiffSummary` with the line diff they draw (`diffLines`, `diffStat`, `collapseDiff`, `firstChangedLines`, `splitLines`, `MAX_DIFF_LINES`, with no React in it), `DiffList`, `VersionCompare`, `CommentThread` |
50
- | Conversations and the assistant | `ChatThread` (with `ChatThreadHandle`), `MessageBubble`, `RunChip`, `StepList` and `StepStateMark`, `ProposalCard`, `ChangeList` (with `shortenUnchanged`), `StatusCard`, `ReceiptStrip`, `RefusalStrip`, `ResultTableCard`, `OpenInAppCard`, `EntityList`, `RefusalCard`, `SuggestionRow` and `SuggestionList`, `SendButton` |
50
+ | Conversations and the assistant | `ChatThread` (with `ChatThreadHandle`), `MessageBubble`, `RunChip`, `StepList` and `StepStateMark`, `ProposalCard`, `ChangeList` (with `shortenUnchanged`), `StatusCard`, `ReceiptStrip`, `RefusalStrip`, `ResultTableCard`, `OpenInAppCard`, `BriefCard`, `EntityList`, `RefusalCard`, `SuggestionRow` and `SuggestionList`, `SendButton` |
51
51
  | Charts | `Legend`, `BarList`, `StackedBar`, `StackedColumns`, `ActivityStrip`, `TimeSeries`, `Sparkline`, the reading layer they share (`ChartTooltip`, `useChartHover`), and the ramp (`DATA_COLORS`, `DATA_COLOR_OTHER`, `dataColor`) |
52
52
  | Marks | `Count`, `StatusDot`, `Spinner`, `EmptyValue`, `VisuallyHidden` |
53
53
  | Hooks and seams | `useModalLayer`, `usePopupLayer`, `LayerHost`, `useListbox`, `useOptionKeys`, `useHighlightRest` and `HIGHLIGHT_REST_MS`, `useClipboard`, `useDownload`, `downloadText`, `downloadBlob`, `safeFilename`, `toCsv`, `elementToPng` and `ElementToPngError`, `useOutcome`, `useAnnouncer`, `useNow`, `formatRelative`, `HeadingLevelProvider`, `cx`, the node hues (`NODE_HUES`, `NODE_HUE_NAMES`, `isNodeHue`) |
@@ -205,6 +205,10 @@ places:
205
205
  - A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
206
206
  when the content beneath it moves, and every panel anchored inside follows.
207
207
 
208
+ ## Changes in 0.69.0
209
+
210
+ **`BriefCard`, a brief as the assistant's answer card.** One sentence on what is going on (`summary`), the rows that wait on the reader (`needs`, never more than `BRIEF_CARD_MAX_NEEDS`, three, each with its words, one `detail`, a `tone` of `warning` (the default), `danger` or `neutral` drawn as a `StatusDot`, and one `action` button), one `recommended` next step on the accent's softest ground with an optional primary action (`null` leaves the block out), and `followUps`, the questions to ask next as plain `SuggestionRow`s under an "Ask next" label. An empty `needs` says "Nothing needs you." in words. It stands in a `StatusCard` titled "Brief" with `scope` and `asOf` beside the title and a Tag in the head that counts the rows ("2 need you") or says "All clear", so the card's region name carries the count. Every action is the host's own callback: the card never decides where a row leads. `labels` replaces any of its words (`BRIEF_CARD_LABELS`); the types are `BriefCardProps`, `BriefCardNeed`, `BriefCardNeedTone`, `BriefCardAction`, `BriefCardRecommendation`, `BriefCardFollowUp` and `BriefCardLabels`.
211
+
208
212
  ## Changes in 0.67.0
209
213
 
210
214
  **The product marks are redrawn as one family** (`@crewlethq/icons`). Each stands on the Crewlet octagon in the brand violet with a deeper lower facet (`#6a3cff`, was `#5c24ff`) and one white figure: Worklet a tick over one open task, Doclet a page with a chamfer fold, Chat a speech bubble with the crewmate's visor, and the Assistant two sparks. The `dim` and `eye` parts are gone, and every drawing carries a hidden `keyline` part that the soon state paints. Nothing to change unless a stylesheet of your own reads those parts.
@@ -1414,7 +1418,7 @@ What to change: a test that reads a failure toast's red edge or red words, or a
1414
1418
 
1415
1419
  **`Modal` takes `placement="bottom"`**: a dialog pinned to the bottom edge at the window's width, rounded on its top corners, rising from that edge.
1416
1420
 
1417
- **`InboxList`** is an inbox's column: `InboxGroup` labels a run of rows, and each `InboxRow` is one control (a button, or a link with `href`) naming who it is from, a `qualifier` and a `meta` time, with its words in up to three lines and an `excerpt` in the quiet ink. `aside` sits under the control as a control of its own, for the task the row is about. `selected` takes the neutral pressed fill and `aria-current`; `unread`, `actionable` and `done` set the ink, and `unread` and `done` are read out. `InboxMore` and `InboxToggle` are the quiet toggles at the end of the list.
1421
+ **`InboxList`** is an inbox's column: `InboxGroup` labels a run of rows, and each `InboxRow` is one control (a button, or a link with `href`) naming who it is from, a `qualifier` and a `meta` time, with its words in up to three lines and an `excerpt` in the quiet ink. `aside` sits under the control as a control of its own, for the task the row is about. `selected` takes the neutral pressed fill and `aria-current`; `unread`, `actionable` and `done` set the ink, and `unread` and `done` are read out. A `done` row is never struck through: its words step down to the secondary ink, `outcome` says what came of it on a line of its own (with `outcomeIcon` drawn in `outcomeTone`'s ink), and `status` names a state in the head before `meta`. `InboxGroup` takes a `count` after its label, and `collapsible` makes the label a disclosure inside the heading (`open`, `defaultOpen`, `onOpenChange`) for rows a reader opens now and then. `InboxMore` and `InboxToggle` are the quiet toggles at the end of the list.
1418
1422
 
1419
1423
  **`ChoiceButtons`** sends one answer with one press: a group of buttons as tall as a touch target, the `recommended` option first, filled and marked. `pending` and `disabledReason` hold every option still without taking its focus.
1420
1424
 
@@ -1,13 +1,13 @@
1
- export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-WUQVAFTC.js';
1
+ export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-BXEKD5NU.js';
2
2
  import '../chunk-4MJN2KN6.js';
3
3
  import '../chunk-WFCWPXJN.js';
4
- import '../chunk-5OFRDX66.js';
4
+ import '../chunk-XWOH3UPZ.js';
5
5
  import '../chunk-222VILSP.js';
6
6
  import '../chunk-FFGEJUAP.js';
7
7
  import '../chunk-CLJGFOTV.js';
8
- import '../chunk-ANTAQAR4.js';
9
8
  import '../chunk-ETSF7SU6.js';
10
9
  import '../chunk-PGCLHYVP.js';
10
+ import '../chunk-ANTAQAR4.js';
11
11
  import '../chunk-IVTQWOXV.js';
12
12
  import '../chunk-MLDTLZAO.js';
13
13
  import '../chunk-PQADV6P6.js';
@@ -1,13 +1,13 @@
1
- export { AvatarPicker } from '../chunk-5OVTWY3I.js';
1
+ export { AvatarPicker } from '../chunk-NJYB4VJI.js';
2
2
  import '../chunk-2EA2GSA2.js';
3
3
  import '../chunk-KHJIEPZV.js';
4
4
  import '../chunk-AYKXMIOR.js';
5
- import '../chunk-SNQRGH4A.js';
5
+ import '../chunk-VZICPYGR.js';
6
+ import '../chunk-PZKHBB7D.js';
6
7
  import '../chunk-W6UVBBNH.js';
7
8
  import '../chunk-PVZOP3QK.js';
8
9
  import '../chunk-EGMQURBR.js';
9
10
  import '../chunk-WIATRXEJ.js';
10
- import '../chunk-PZKHBB7D.js';
11
11
  import '../chunk-MLDTLZAO.js';
12
12
  import '../chunk-T73DMDU4.js';
13
13
  import '../chunk-7QTPJDRF.js';
@@ -0,0 +1,80 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ /** The most rows a brief draws: what waits on the reader is a short list or it is not a brief. */
3
+ export declare const BRIEF_CARD_MAX_NEEDS = 3;
4
+ /** The one thing a row or the recommendation lets the reader do, in one press. */
5
+ export interface BriefCardAction {
6
+ /** A verb and its object: "Answer", "Open GOP-11", "Ask why". */
7
+ label: string;
8
+ onSelect: () => void;
9
+ }
10
+ /**
11
+ * How loud a row is. `danger` is for a fact the host knows (an agent stopped,
12
+ * a failed turn), never for urgency a writer chose; most rows are `warning`.
13
+ */
14
+ export type BriefCardNeedTone = 'danger' | 'warning' | 'neutral';
15
+ /** One thing that waits on the reader, pointing at the record it is about. */
16
+ export interface BriefCardNeed {
17
+ key: string;
18
+ /** What waits, with its number and its name: "QA asks which store build to test on GOP-11". */
19
+ text: ReactNode;
20
+ /** One fact under it: "Asked 2 hours ago". */
21
+ detail?: ReactNode;
22
+ tone?: BriefCardNeedTone | undefined;
23
+ action?: BriefCardAction | undefined;
24
+ }
25
+ /** The one next step the brief recommends. */
26
+ export interface BriefCardRecommendation {
27
+ text: ReactNode;
28
+ action?: BriefCardAction | undefined;
29
+ }
30
+ /** A question the reader can ask next, in the same conversation. */
31
+ export interface BriefCardFollowUp {
32
+ key: string;
33
+ question: string;
34
+ onSelect: () => void;
35
+ }
36
+ export interface BriefCardLabels {
37
+ /** The card's title. */
38
+ heading: string;
39
+ needs: string;
40
+ /** Said in the needs block when nothing waits on the reader. */
41
+ clear: string;
42
+ recommended: string;
43
+ followUps: string;
44
+ /** The head's Tag: how many rows wait on the reader. */
45
+ count: (n: number) => string;
46
+ /** The head's Tag when nothing waits. */
47
+ allClear: string;
48
+ }
49
+ export declare const BRIEF_CARD_LABELS: BriefCardLabels;
50
+ export interface BriefCardProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
51
+ /** What the brief covers, beside the title: "Inbox", "Decision on GOP-11". */
52
+ scope?: ReactNode;
53
+ /** When the brief was written, as the reader reads a time: "Just now". */
54
+ asOf?: ReactNode;
55
+ /** What is going on, in one sentence with numbers and names. */
56
+ summary: ReactNode;
57
+ /** What waits on the reader, at most [BRIEF_CARD_MAX_NEEDS]. An empty list says `labels.clear`. */
58
+ needs: readonly BriefCardNeed[];
59
+ /** The one next step, or `null` where nothing is worth recommending. */
60
+ recommended: BriefCardRecommendation | null;
61
+ /** Questions to ask next, drawn as suggestion rows under the recommendation. */
62
+ followUps?: readonly BriefCardFollowUp[] | undefined;
63
+ labels?: Partial<BriefCardLabels> | undefined;
64
+ }
65
+ /**
66
+ * A brief, as the assistant's answer card: one sentence on what is going on,
67
+ * the rows that wait on the reader (never more than three, each pointing at
68
+ * its record with the one press that deals with it), one recommended next
69
+ * step, and the questions worth asking next.
70
+ *
71
+ * A FIXED SHAPE, NOT PROSE. A reader who asks for a brief on every page learns
72
+ * where each answer sits and reads only the part they need. Nothing waiting is
73
+ * said in words, "Nothing needs you.", rather than drawn as an empty block, and
74
+ * the head's Tag says the count before the body is read.
75
+ *
76
+ * THE CARD DRAWS, THE HOST DECIDES. Every action is the host's own callback,
77
+ * so where a row leads (a record opened, a question asked) is settled by the
78
+ * code that built the brief, never by text inside it.
79
+ */
80
+ export declare function BriefCard({ scope, asOf, summary, needs, recommended, followUps, labels: overrides, className, ...rest }: BriefCardProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './BriefCard.css';
2
+ export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_NEEDS, BriefCard } from './BriefCard.js';
3
+ export type { BriefCardAction, BriefCardFollowUp, BriefCardLabels, BriefCardNeed, BriefCardNeedTone, BriefCardProps, BriefCardRecommendation, } from './BriefCard.js';
@@ -0,0 +1,13 @@
1
+ export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_NEEDS, BriefCard } from '../chunk-NTFVEOYY.js';
2
+ import '../chunk-Y7PVLEZJ.js';
3
+ import '../chunk-NTQPJJAN.js';
4
+ import '../chunk-I5OIKDX2.js';
5
+ import '../chunk-4AUTALJA.js';
6
+ import '../chunk-AV2DXAEL.js';
7
+ import '../chunk-WIATRXEJ.js';
8
+ import '../chunk-MLDTLZAO.js';
9
+ import '../chunk-PQADV6P6.js';
10
+ import '../chunk-7QTPJDRF.js';
11
+ import '../chunk-XSPCITPN.js';
12
+ import '../chunk-UT6CW3C7.js';
13
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,127 @@
1
+ /*
2
+ * A brief inside the product's status card: one sentence, the rows that wait
3
+ * on the reader, one recommendation and the questions to ask next, each block
4
+ * under a quiet label so a reader scans straight to the part they need.
5
+ */
6
+ .crewlet-brief-card__where {
7
+ display: inline-flex;
8
+ flex-wrap: wrap;
9
+ gap: var(--spacing-1);
10
+ }
11
+
12
+ .crewlet-brief-card__asof {
13
+ white-space: nowrap;
14
+ }
15
+
16
+ .crewlet-brief-card__body {
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: var(--spacing-4);
20
+ min-width: 0;
21
+ }
22
+
23
+ .crewlet-brief-card__summary {
24
+ margin: 0;
25
+ font-size: var(--font-size-md);
26
+ font-weight: var(--font-weight-medium);
27
+ line-height: var(--font-line-height-snug);
28
+ text-wrap: pretty;
29
+ }
30
+
31
+ .crewlet-brief-card__block {
32
+ display: flex;
33
+ flex-direction: column;
34
+ gap: var(--spacing-2);
35
+ min-width: 0;
36
+ }
37
+
38
+ .crewlet-brief-card__label {
39
+ margin: 0;
40
+ font-size: var(--font-size-2xs);
41
+ font-weight: var(--font-weight-medium);
42
+ letter-spacing: var(--font-letter-spacing-wide);
43
+ text-transform: uppercase;
44
+ line-height: var(--font-line-height-snug);
45
+ color: var(--color-text-tertiary);
46
+ }
47
+
48
+ .crewlet-brief-card__needs {
49
+ display: flex;
50
+ flex-direction: column;
51
+ margin: 0;
52
+ padding: 0;
53
+ list-style: none;
54
+ }
55
+
56
+ /*
57
+ * A ROW IS THE LIST ROW'S GRAMMAR: the dot on the first line, the words and
58
+ * their one fact, and the action centred at the end, so a column of rows reads
59
+ * down the dots and across to the presses.
60
+ */
61
+ .crewlet-brief-card__need {
62
+ display: grid;
63
+ grid-template-columns: auto minmax(0, 1fr) auto;
64
+ align-items: start;
65
+ gap: var(--spacing-3);
66
+ padding-block: var(--spacing-2);
67
+ }
68
+
69
+ .crewlet-brief-card__need + .crewlet-brief-card__need {
70
+ border-top: 1px solid var(--color-border-default);
71
+ }
72
+
73
+ .crewlet-brief-card__need > .crewlet-button {
74
+ align-self: center;
75
+ }
76
+
77
+ .crewlet-brief-card__dot {
78
+ display: inline-flex;
79
+ align-items: center;
80
+ height: 1lh;
81
+ font-size: var(--font-size-compact);
82
+ }
83
+
84
+ .crewlet-brief-card__words {
85
+ display: flex;
86
+ flex-direction: column;
87
+ gap: var(--spacing-0);
88
+ min-width: 0;
89
+ overflow-wrap: anywhere;
90
+ font-size: var(--font-size-compact);
91
+ }
92
+
93
+ .crewlet-brief-card__detail {
94
+ font-size: var(--font-size-xs);
95
+ color: var(--color-text-tertiary);
96
+ }
97
+
98
+ .crewlet-brief-card__clear {
99
+ display: inline-flex;
100
+ align-items: center;
101
+ gap: var(--spacing-2);
102
+ margin: 0;
103
+ font-size: var(--font-size-compact);
104
+ color: var(--color-feedback-success-ink);
105
+ }
106
+
107
+ /* The recommendation: one step, on the accent's softest ground. */
108
+ .crewlet-brief-card__next {
109
+ display: grid;
110
+ grid-template-columns: auto minmax(0, 1fr) auto;
111
+ align-items: center;
112
+ gap: var(--spacing-3);
113
+ padding: var(--spacing-2) var(--spacing-3);
114
+ border-radius: var(--radius-md);
115
+ background: var(--color-brand-accent-soft);
116
+ overflow-wrap: anywhere;
117
+ font-size: var(--font-size-compact);
118
+ }
119
+
120
+ .crewlet-brief-card__arrow {
121
+ color: var(--color-brand-accent-ink);
122
+ }
123
+
124
+ /* The questions to ask next sit on the card's text edge: each row's own inset is pulled out. */
125
+ .crewlet-brief-card__follow-ups {
126
+ margin-inline: calc(-1 * var(--spacing-3));
127
+ }
@@ -1,5 +1,5 @@
1
1
  import '../chunk-3L5NHASN.js';
2
- export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-SNQRGH4A.js';
3
- import '../chunk-EGMQURBR.js';
2
+ export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-VZICPYGR.js';
4
3
  import '../chunk-PZKHBB7D.js';
4
+ import '../chunk-EGMQURBR.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -1,9 +1,9 @@
1
- export { CommandPalette } from '../chunk-PZAOUZFZ.js';
1
+ export { CommandPalette } from '../chunk-EHB4TSP2.js';
2
2
  import '../chunk-I24FI46B.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
- import '../chunk-ANTAQAR4.js';
5
4
  import '../chunk-ETSF7SU6.js';
6
5
  import '../chunk-PGCLHYVP.js';
6
+ import '../chunk-ANTAQAR4.js';
7
7
  import '../chunk-MLDTLZAO.js';
8
8
  import '../chunk-PQADV6P6.js';
9
9
  import '../chunk-2G355KDJ.js';
@@ -1,14 +1,14 @@
1
- export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-UBJ32EO2.js';
1
+ export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-OWQATZGW.js';
2
2
  import '../chunk-CI3VPIJN.js';
3
3
  import '../chunk-EJNJMHQG.js';
4
4
  import '../chunk-RE3FBGQQ.js';
5
5
  import '../chunk-BKP6XCAJ.js';
6
6
  import '../chunk-PZKHBB7D.js';
7
7
  import '../chunk-BXCL6P5Z.js';
8
- import '../chunk-5OFRDX66.js';
9
- import '../chunk-ANTAQAR4.js';
8
+ import '../chunk-XWOH3UPZ.js';
10
9
  import '../chunk-ETSF7SU6.js';
11
10
  import '../chunk-PGCLHYVP.js';
11
+ import '../chunk-ANTAQAR4.js';
12
12
  import '../chunk-MLDTLZAO.js';
13
13
  import '../chunk-PQADV6P6.js';
14
14
  import '../chunk-2G355KDJ.js';
@@ -1,7 +1,7 @@
1
- export { COMPOSER_COUNTER_AT, Composer } from '../chunk-5OFRDX66.js';
2
- import '../chunk-ANTAQAR4.js';
1
+ export { COMPOSER_COUNTER_AT, Composer } from '../chunk-XWOH3UPZ.js';
3
2
  import '../chunk-ETSF7SU6.js';
4
3
  import '../chunk-PGCLHYVP.js';
4
+ import '../chunk-ANTAQAR4.js';
5
5
  import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-2G355KDJ.js';
7
7
  import '../chunk-OMV5W53A.js';
@@ -1,7 +1,7 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-CFY257ND.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-UYK3SGZI.js';
2
+ import '../chunk-I24FI46B.js';
2
3
  import '../chunk-STJ7QBC3.js';
3
4
  import '../chunk-DTIW4CHZ.js';
4
- import '../chunk-I24FI46B.js';
5
5
  import '../chunk-RE3FBGQQ.js';
6
6
  import '../chunk-AV2DXAEL.js';
7
7
  import '../chunk-PBCNINMB.js';
@@ -1,10 +1,10 @@
1
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-J5BIKMQY.js';
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-RLBGU35B.js';
2
2
  import '../chunk-FPDIHEM4.js';
3
- import '../chunk-CFY257ND.js';
3
+ import '../chunk-UYK3SGZI.js';
4
4
  import '../chunk-PX54PALQ.js';
5
+ import '../chunk-I24FI46B.js';
5
6
  import '../chunk-STJ7QBC3.js';
6
7
  import '../chunk-DTIW4CHZ.js';
7
- import '../chunk-I24FI46B.js';
8
8
  import '../chunk-7KHM2FZH.js';
9
9
  import '../chunk-EE3DJMSQ.js';
10
10
  import '../chunk-NR4CPM4T.js';
@@ -13,9 +13,9 @@ import '../chunk-EJNJMHQG.js';
13
13
  import '../chunk-RE3FBGQQ.js';
14
14
  import '../chunk-AV2DXAEL.js';
15
15
  import '../chunk-PBCNINMB.js';
16
- import '../chunk-ANTAQAR4.js';
17
16
  import '../chunk-ETSF7SU6.js';
18
17
  import '../chunk-PGCLHYVP.js';
18
+ import '../chunk-ANTAQAR4.js';
19
19
  import '../chunk-MLDTLZAO.js';
20
20
  import '../chunk-PQADV6P6.js';
21
21
  import '../chunk-2G355KDJ.js';
@@ -1,8 +1,8 @@
1
1
  export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-R6K62EXV.js';
2
2
  import '../chunk-I5OIKDX2.js';
3
- import '../chunk-WIATRXEJ.js';
4
3
  import '../chunk-EJNJMHQG.js';
5
4
  import '../chunk-RE3FBGQQ.js';
5
+ import '../chunk-WIATRXEJ.js';
6
6
  import '../chunk-2YTOOH3A.js';
7
7
  import '../chunk-UT6CW3C7.js';
8
8
  import '../chunk-ODEQTPFM.js';
@@ -4,9 +4,9 @@ import '../chunk-RQFRRPV6.js';
4
4
  import '../chunk-M25IV5MH.js';
5
5
  import '../chunk-NTQPJJAN.js';
6
6
  import '../chunk-I5OIKDX2.js';
7
- import '../chunk-WIATRXEJ.js';
8
7
  import '../chunk-4AUTALJA.js';
9
8
  import '../chunk-AV2DXAEL.js';
9
+ import '../chunk-WIATRXEJ.js';
10
10
  import '../chunk-222VILSP.js';
11
11
  import '../chunk-IVTQWOXV.js';
12
12
  import '../chunk-MLDTLZAO.js';
@@ -1,6 +1,6 @@
1
- export { EditingStatus } from '../chunk-VLGGLLKH.js';
2
- import '../chunk-WIATRXEJ.js';
1
+ export { EditingStatus } from '../chunk-AIMMHN5J.js';
3
2
  import '../chunk-EJNJMHQG.js';
4
3
  import '../chunk-RE3FBGQQ.js';
4
+ import '../chunk-WIATRXEJ.js';
5
5
  import '../chunk-UT6CW3C7.js';
6
6
  import '../chunk-ODEQTPFM.js';
@@ -1,9 +1,9 @@
1
1
  export { EntityList } from '../chunk-7IW3P6FH.js';
2
2
  import '../chunk-NTQPJJAN.js';
3
3
  import '../chunk-I5OIKDX2.js';
4
- import '../chunk-WIATRXEJ.js';
5
4
  import '../chunk-4AUTALJA.js';
6
5
  import '../chunk-AV2DXAEL.js';
6
+ import '../chunk-WIATRXEJ.js';
7
7
  import '../chunk-MLDTLZAO.js';
8
8
  import '../chunk-PQADV6P6.js';
9
9
  import '../chunk-UT6CW3C7.js';
@@ -1,4 +1,5 @@
1
1
  import { type ButtonHTMLAttributes, type HTMLAttributes, type LiHTMLAttributes, type MouseEvent, type ReactNode } from 'react';
2
+ import type { Tone } from '../utils/tone.js';
2
3
  import { type HeadingLevel } from '../utils/headingLevel.js';
3
4
  export interface InboxListProps extends HTMLAttributes<HTMLElement> {
4
5
  /** Names the list as a landmark: "Inbox". */
@@ -29,13 +30,31 @@ export interface InboxGroupProps extends Omit<HTMLAttributes<HTMLElement>, 'titl
29
30
  hideLabel?: boolean | undefined;
30
31
  /** Overrides the level the label is rendered at. */
31
32
  headingLevel?: HeadingLevel | undefined;
33
+ /**
34
+ * How many rows the group holds, drawn after the label in the quiet ink and
35
+ * read with it ("Answered, 4"). Most useful on a collapsible group, whose
36
+ * rows are not on screen to be counted.
37
+ */
38
+ count?: number | undefined;
39
+ /**
40
+ * The label becomes a disclosure button that shows and hides the rows. For
41
+ * a group a reader opens now and then, such as what they answered already,
42
+ * kept in the list without taking its room. Ignored with `hideLabel`, which
43
+ * leaves no button to open the rows with.
44
+ */
45
+ collapsible?: boolean | undefined;
46
+ /** Whether a collapsible group's rows are shown, when the caller holds it. */
47
+ open?: boolean | undefined;
48
+ /** Whether a collapsible group starts open, when the group holds it. */
49
+ defaultOpen?: boolean | undefined;
50
+ onOpenChange?: ((open: boolean) => void) | undefined;
32
51
  }
33
52
  /**
34
53
  * A labelled run of rows. The label is a heading set in the micro-label
35
54
  * register, so a reader navigating by heading lands on each group and a
36
55
  * reader scanning sees where one ends.
37
56
  */
38
- export declare function InboxGroup({ label, hideLabel, headingLevel, className, children, ...rest }: InboxGroupProps): import("react").JSX.Element;
57
+ export declare function InboxGroup({ label, hideLabel, headingLevel, count, collapsible, open: controlledOpen, defaultOpen, onOpenChange, className, children, ...rest }: InboxGroupProps): import("react").JSX.Element;
39
58
  export type InboxRowTone = 'default' | 'danger';
40
59
  export interface InboxRowProps extends Omit<LiHTMLAttributes<HTMLLIElement>, 'onClick' | 'title'> {
41
60
  /** Who the row is from: a seat's or a person's name. */
@@ -65,10 +84,28 @@ export interface InboxRowProps extends Omit<LiHTMLAttributes<HTMLLIElement>, 'on
65
84
  unreadLabel?: string | undefined;
66
85
  /** It waits on the reader: the words take the primary ink. */
67
86
  actionable?: boolean | undefined;
68
- /** Settled: the words are struck through in the quiet ink, and the state is read out. */
87
+ /**
88
+ * Settled: the name and the words step down to the secondary ink, and the
89
+ * state is read out. Never struck through: a settled row is still read, and
90
+ * a line through its words says "cancelled" where it means "done".
91
+ */
69
92
  done?: boolean | undefined;
70
93
  /** Read after the row's words when `done`: "Answered", "Resolved". */
71
94
  doneLabel?: string | undefined;
95
+ /**
96
+ * In the head, before the time: a short state of the row's own, such as a
97
+ * Tag reading "Answered". Drawn as given, so it carries its own words.
98
+ */
99
+ status?: ReactNode;
100
+ /**
101
+ * A line under the words, inside the control: what came of the row. "You
102
+ * chose One JSON file per group", "Crewlet-PM is acting on it".
103
+ */
104
+ outcome?: ReactNode;
105
+ /** A glyph before the outcome, drawn in the tone's ink and hidden from a screen reader. */
106
+ outcomeIcon?: ReactNode;
107
+ /** The ink of the outcome's glyph. The words stay in the secondary ink, so the line is read the same in every tone. */
108
+ outcomeTone?: Tone | undefined;
72
109
  /** Opens the row as a link. */
73
110
  href?: string | undefined;
74
111
  /**
@@ -91,11 +128,16 @@ export interface InboxRowProps extends Omit<LiHTMLAttributes<HTMLLIElement>, 'on
91
128
  * pressed fill says "here" without saying "look". The control carries
92
129
  * `aria-current`, so the row is announced as the open one where focus is.
93
130
  *
131
+ * WHAT CAME OF IT IS SAID, NOT STRUCK. A settled row steps its ink down and
132
+ * says its outcome on a line of its own (`outcome`), with any state the
133
+ * caller names in the head (`status`): every word stays legible, and the
134
+ * state is never carried by a decoration alone.
135
+ *
94
136
  * NOTHING IS CUT AT THE EDGE. The name ellipsizes, the time never wraps, and
95
137
  * the words take up to three lines before they stop, so a row says what it is
96
138
  * rather than its first few words.
97
139
  */
98
- export declare function InboxRow({ title, qualifier, qualifierTone, meta, leading, excerpt, aside, selected, unread, unreadLabel, actionable, done, doneLabel, href, onClick, className, children, ...rest }: InboxRowProps): import("react").JSX.Element;
140
+ export declare function InboxRow({ title, qualifier, qualifierTone, meta, leading, excerpt, aside, selected, unread, unreadLabel, actionable, done, doneLabel, status, outcome, outcomeIcon, outcomeTone, href, onClick, className, children, ...rest }: InboxRowProps): import("react").JSX.Element;
99
141
  export type InboxMoreProps = HTMLAttributes<HTMLDivElement>;
100
142
  /**
101
143
  * The end of the list: the quiet toggles that open what is not in it by
@@ -1,4 +1,4 @@
1
- export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-62DBFNOK.js';
1
+ export { InboxGroup, InboxList, InboxMore, InboxRow, InboxToggle } from '../chunk-QPHD4UUG.js';
2
2
  import '../chunk-RK4XPHVG.js';
3
3
  import '../chunk-PQADV6P6.js';
4
4
  import '../chunk-UT6CW3C7.js';