@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
@@ -33,6 +33,63 @@
33
33
  line-height: var(--font-line-height-snug);
34
34
  }
35
35
 
36
+ /* The count after a label, in the quiet ink and the label's own register. */
37
+ .crewlet-inbox-list__count {
38
+ margin-inline-start: var(--spacing-1);
39
+ font-size: var(--font-size-2xs);
40
+ font-variant-numeric: tabular-nums;
41
+ color: var(--color-text-tertiary);
42
+ }
43
+
44
+ /*
45
+ * A collapsible group's label is a button the width of the column, so the
46
+ * whole line is the target, with the chevron turned a quarter while closed.
47
+ */
48
+ .crewlet-inbox-list__disclosure {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: var(--spacing-1);
52
+ width: 100%;
53
+ min-height: var(--size-target-min);
54
+ margin: calc(var(--spacing-1) * -1) 0;
55
+ padding: 0;
56
+ border: 0;
57
+ border-radius: var(--radius-xs);
58
+ background: none;
59
+ color: inherit;
60
+ font: inherit;
61
+ text-align: left;
62
+ cursor: pointer;
63
+ }
64
+
65
+ .crewlet-inbox-list__disclosure:focus-visible {
66
+ outline: 2px solid var(--color-focus);
67
+ outline-offset: var(--size-focus-ring-inset-offset);
68
+ }
69
+
70
+ .crewlet-inbox-list__chevron {
71
+ flex: none;
72
+ color: var(--color-text-tertiary);
73
+ transform: rotate(-90deg);
74
+ transition: transform var(--motion-duration-fast) var(--motion-easing-default);
75
+ }
76
+
77
+ .crewlet-inbox-list__disclosure[aria-expanded='true'] .crewlet-inbox-list__chevron {
78
+ transform: rotate(0deg);
79
+ }
80
+
81
+ .crewlet-inbox-list__disclosure:hover .crewlet-inbox-list__chevron {
82
+ color: var(--color-text-primary);
83
+ }
84
+
85
+ .crewlet-inbox-list__disclosure .crewlet-inbox-list__count {
86
+ margin-inline-start: 0;
87
+ }
88
+
89
+ .crewlet-inbox-list__rows[hidden] {
90
+ display: none;
91
+ }
92
+
36
93
  .crewlet-inbox-list__rows {
37
94
  display: grid;
38
95
  grid-template-columns: minmax(0, 1fr);
@@ -194,16 +251,89 @@
194
251
  }
195
252
 
196
253
  /*
197
- * Settled. The strike is drawn in the strong hairline rather than the text's
198
- * own ink, so the words under it stay legible; the state is also read out,
199
- * because a line through a word says nothing to somebody listening.
254
+ * Settled. The name drops to the regular weight and the words to the
255
+ * secondary ink, which still reads at body contrast: a settled row is read
256
+ * again, to see what came of it. No strike, which says "cancelled" and cuts
257
+ * through the letters a reader is trying to read; the state is read out, and
258
+ * the outcome line and any status say it in words.
200
259
  */
260
+ .crewlet-inbox-row__control--done .crewlet-inbox-row__title {
261
+ font-weight: var(--font-weight-regular);
262
+ color: var(--color-text-secondary);
263
+ }
264
+
201
265
  .crewlet-inbox-row__control--done .crewlet-inbox-row__text {
202
- text-decoration: line-through;
203
- text-decoration-color: var(--color-border-strong);
266
+ color: var(--color-text-secondary);
267
+ }
268
+
269
+ .crewlet-inbox-row__status {
270
+ display: inline-flex;
271
+ flex: none;
272
+ align-items: center;
273
+ }
274
+
275
+ /* With a status, the time stays at the end and the status sits beside it. */
276
+ .crewlet-inbox-row__status + .crewlet-inbox-row__meta {
277
+ margin-inline-start: 0;
278
+ }
279
+
280
+ .crewlet-inbox-row__head > .crewlet-inbox-row__status {
281
+ margin-inline-start: auto;
282
+ }
283
+
284
+ /*
285
+ * What came of the row: a glyph in the tone's ink, then words in the
286
+ * secondary ink, on one line that wraps rather than cuts.
287
+ */
288
+ .crewlet-inbox-row__outcome {
289
+ display: flex;
290
+ align-items: flex-start;
291
+ gap: var(--spacing-1);
292
+ min-width: 0;
293
+ padding-top: 2px;
294
+ font-size: var(--font-size-xs);
295
+ line-height: var(--font-line-height-snug);
296
+ color: var(--color-text-secondary);
297
+ overflow-wrap: anywhere;
298
+ }
299
+
300
+ .crewlet-inbox-row__outcome-icon {
301
+ display: inline-flex;
302
+ flex: none;
303
+ align-items: center;
304
+ height: 1lh;
204
305
  color: var(--color-text-tertiary);
205
306
  }
206
307
 
308
+ .crewlet-inbox-row__outcome--success .crewlet-inbox-row__outcome-icon {
309
+ color: var(--color-feedback-success-ink);
310
+ }
311
+
312
+ .crewlet-inbox-row__outcome--info .crewlet-inbox-row__outcome-icon {
313
+ color: var(--color-feedback-info-ink);
314
+ }
315
+
316
+ .crewlet-inbox-row__outcome--warning .crewlet-inbox-row__outcome-icon {
317
+ color: var(--color-feedback-warning-ink);
318
+ }
319
+
320
+ .crewlet-inbox-row__outcome--danger .crewlet-inbox-row__outcome-icon {
321
+ color: var(--color-feedback-danger-ink);
322
+ }
323
+
324
+ .crewlet-inbox-row__outcome--brand .crewlet-inbox-row__outcome-icon {
325
+ color: var(--color-brand-accent);
326
+ }
327
+
328
+ .crewlet-inbox-row__outcome-text {
329
+ min-width: 0;
330
+ }
331
+
332
+ .crewlet-inbox-row__outcome-text strong {
333
+ font-weight: var(--font-weight-medium);
334
+ color: var(--color-text-primary);
335
+ }
336
+
207
337
  /*
208
338
  * The task, under the words and lined up with them: the control's start pad,
209
339
  * the leading slot and the gap after it.
@@ -259,7 +389,8 @@
259
389
  transition: none;
260
390
  }
261
391
 
262
- .crewlet-inbox-list__toggle {
392
+ .crewlet-inbox-list__toggle,
393
+ .crewlet-inbox-list__chevron {
263
394
  transition: none;
264
395
  }
265
396
  }
@@ -1,8 +1,8 @@
1
- export { INLINE_EDITOR_LABELS, InlineEditor } from '../chunk-QBWNGNF7.js';
2
- import '../chunk-VLGGLLKH.js';
3
- import '../chunk-WIATRXEJ.js';
1
+ export { INLINE_EDITOR_LABELS, InlineEditor } from '../chunk-4E3CE2UK.js';
2
+ import '../chunk-AIMMHN5J.js';
4
3
  import '../chunk-EJNJMHQG.js';
5
4
  import '../chunk-RE3FBGQQ.js';
5
+ import '../chunk-WIATRXEJ.js';
6
6
  import '../chunk-ANTAQAR4.js';
7
7
  import '../chunk-7QTPJDRF.js';
8
8
  import '../chunk-OMV5W53A.js';
@@ -1,6 +1,6 @@
1
- export { LinkInterstitial, openExternal } from '../chunk-KQGOVBGF.js';
2
- import '../chunk-PLL7ZJHY.js';
1
+ export { LinkInterstitial, openExternal } from '../chunk-O3BNL4TV.js';
3
2
  import '../chunk-I24FI46B.js';
3
+ import '../chunk-PLL7ZJHY.js';
4
4
  import '../chunk-BPCY7ZID.js';
5
5
  import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-7QTPJDRF.js';
@@ -1,8 +1,8 @@
1
- export { ListInput, withDraft } from '../chunk-MNTUIAQT.js';
1
+ export { ListInput, withDraft } from '../chunk-IABWA76I.js';
2
2
  import '../chunk-MPVMB2DV.js';
3
- import '../chunk-ANTAQAR4.js';
4
3
  import '../chunk-ETSF7SU6.js';
5
4
  import '../chunk-PGCLHYVP.js';
5
+ import '../chunk-ANTAQAR4.js';
6
6
  import '../chunk-PQADV6P6.js';
7
7
  import '../chunk-2G355KDJ.js';
8
8
  import '../chunk-7QTPJDRF.js';
@@ -4,9 +4,9 @@ import '../chunk-3LI4TRUR.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-MLDTLZAO.js';
11
11
  import '../chunk-PQADV6P6.js';
12
12
  import '../chunk-7QTPJDRF.js';
@@ -1,13 +1,13 @@
1
- export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, PROPOSAL_TONES, ProposalCard } from '../chunk-2AQMXGWA.js';
1
+ export { PROPOSAL_CARD_LABELS, PROPOSAL_FAILURE_OUTCOMES, PROPOSAL_STATES, PROPOSAL_TONES, ProposalCard } from '../chunk-HXJHRQDR.js';
2
2
  import '../chunk-M25IV5MH.js';
3
- import '../chunk-NTQPJJAN.js';
4
3
  import '../chunk-WQRSZMN4.js';
5
4
  import '../chunk-LR4IWUWQ.js';
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';
10
9
  import '../chunk-PBCNINMB.js';
10
+ import '../chunk-WIATRXEJ.js';
11
11
  import '../chunk-222VILSP.js';
12
12
  import '../chunk-ETSF7SU6.js';
13
13
  import '../chunk-PGCLHYVP.js';
@@ -1,9 +1,9 @@
1
1
  export { REFUSAL_CARD_LABELS, RefusalCard } from '../chunk-RQHN4J5P.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';
@@ -2,12 +2,12 @@ export { RESULT_TABLE_CARD_LABELS, RESULT_TABLE_COLLAPSED_ROWS, RESULT_TABLE_MAX
2
2
  import '../chunk-5DJMFRSZ.js';
3
3
  import '../chunk-NSCYGUDG.js';
4
4
  import '../chunk-YNRKVY7X.js';
5
- import '../chunk-NTQPJJAN.js';
6
5
  import '../chunk-DTIW4CHZ.js';
6
+ import '../chunk-NTQPJJAN.js';
7
7
  import '../chunk-I5OIKDX2.js';
8
- import '../chunk-WIATRXEJ.js';
9
8
  import '../chunk-4AUTALJA.js';
10
9
  import '../chunk-AV2DXAEL.js';
10
+ import '../chunk-WIATRXEJ.js';
11
11
  import '../chunk-MLDTLZAO.js';
12
12
  import '../chunk-PQADV6P6.js';
13
13
  import '../chunk-7QTPJDRF.js';
@@ -1,4 +1,4 @@
1
- export { RichEditor, preloadRichEditor } from '../chunk-BVNFNFA6.js';
1
+ export { RichEditor, preloadRichEditor } from '../chunk-DS5NBENV.js';
2
2
  export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
3
3
  import '../chunk-BAKPMH3S.js';
4
4
  import '../chunk-BPCY7ZID.js';
@@ -1,6 +1,6 @@
1
- export { SetupWizard } from '../chunk-R2YHKVWN.js';
2
- import '../chunk-FPDIHEM4.js';
1
+ export { SetupWizard } from '../chunk-SBHAKX2T.js';
3
2
  import '../chunk-HJBHP66O.js';
3
+ import '../chunk-FPDIHEM4.js';
4
4
  import '../chunk-WIATRXEJ.js';
5
5
  import '../chunk-222VILSP.js';
6
6
  import '../chunk-IVTQWOXV.js';
@@ -1,9 +1,9 @@
1
- export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-WWXIGN4O.js';
1
+ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-L4UO57YP.js';
2
2
  import '../chunk-VK45YJLH.js';
3
+ import '../chunk-I24FI46B.js';
3
4
  import '../chunk-IYG4ETAQ.js';
4
5
  import '../chunk-STJ7QBC3.js';
5
6
  import '../chunk-DTIW4CHZ.js';
6
- import '../chunk-I24FI46B.js';
7
7
  import '../chunk-7KHM2FZH.js';
8
8
  import '../chunk-BPCY7ZID.js';
9
9
  import '../chunk-CI3VPIJN.js';
@@ -1,4 +1,4 @@
1
- export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-SBOUVASH.js';
1
+ export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-ZHVLDRAT.js';
2
2
  import '../chunk-VK45YJLH.js';
3
3
  import '../chunk-FFMCMSJB.js';
4
4
  import '../chunk-7KHM2FZH.js';
@@ -6,14 +6,14 @@ import '../chunk-LFSIKGRQ.js';
6
6
  import '../chunk-Z7JYG5TF.js';
7
7
  import '../chunk-2EA2GSA2.js';
8
8
  import '../chunk-AYKXMIOR.js';
9
+ import '../chunk-PBCNINMB.js';
9
10
  import '../chunk-W6UVBBNH.js';
10
11
  import '../chunk-PVZOP3QK.js';
11
12
  import '../chunk-EGMQURBR.js';
12
13
  import '../chunk-WIATRXEJ.js';
13
- import '../chunk-PBCNINMB.js';
14
- import '../chunk-ANTAQAR4.js';
15
14
  import '../chunk-ETSF7SU6.js';
16
15
  import '../chunk-PGCLHYVP.js';
16
+ import '../chunk-ANTAQAR4.js';
17
17
  import '../chunk-MLDTLZAO.js';
18
18
  import '../chunk-PQADV6P6.js';
19
19
  import '../chunk-2G355KDJ.js';
@@ -1,4 +1,4 @@
1
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-OOC6KXNL.js';
1
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-S2UHV52X.js';
2
2
  import '../chunk-UEOEBOBR.js';
3
3
  import '../chunk-CENOOTAV.js';
4
4
  import '../chunk-MMCYH5LB.js';
@@ -9,10 +9,10 @@ import '../chunk-Z7JYG5TF.js';
9
9
  import '../chunk-KHJIEPZV.js';
10
10
  import '../chunk-AYKXMIOR.js';
11
11
  import '../chunk-I5OIKDX2.js';
12
- import '../chunk-I33UIUZD.js';
13
- import '../chunk-WIATRXEJ.js';
14
12
  import '../chunk-BKP6XCAJ.js';
15
13
  import '../chunk-PZKHBB7D.js';
14
+ import '../chunk-I33UIUZD.js';
15
+ import '../chunk-WIATRXEJ.js';
16
16
  import '../chunk-2G355KDJ.js';
17
17
  import '../chunk-T73DMDU4.js';
18
18
  import '../chunk-7QTPJDRF.js';
@@ -1,8 +1,8 @@
1
1
  export { StatusCard } from '../chunk-NTQPJJAN.js';
2
2
  import '../chunk-I5OIKDX2.js';
3
- import '../chunk-WIATRXEJ.js';
4
3
  import '../chunk-4AUTALJA.js';
5
4
  import '../chunk-AV2DXAEL.js';
5
+ import '../chunk-WIATRXEJ.js';
6
6
  import '../chunk-MLDTLZAO.js';
7
7
  import '../chunk-PQADV6P6.js';
8
8
  import '../chunk-UT6CW3C7.js';
@@ -1,10 +1,10 @@
1
1
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-GNDKUSCG.js';
2
2
  import '../chunk-QF5UNP4T.js';
3
3
  import '../chunk-I5OIKDX2.js';
4
- import '../chunk-WIATRXEJ.js';
5
4
  import '../chunk-EJNJMHQG.js';
6
5
  import '../chunk-RE3FBGQQ.js';
7
6
  import '../chunk-BKP6XCAJ.js';
8
7
  import '../chunk-PZKHBB7D.js';
8
+ import '../chunk-WIATRXEJ.js';
9
9
  import '../chunk-UT6CW3C7.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- import { EditingStatus } from './chunk-VLGGLLKH.js';
1
+ import { EditingStatus } from './chunk-AIMMHN5J.js';
2
2
  import { Kbd } from './chunk-ANTAQAR4.js';
3
3
  import { Button } from './chunk-7QTPJDRF.js';
4
4
  import { isComposing } from './chunk-H5XTJ7GJ.js';
@@ -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-XWOH3UPZ.js';
4
4
  import { Disclosure } from './chunk-222VILSP.js';
5
5
  import { ArtifactPanel } from './chunk-FFGEJUAP.js';
6
6
  import { Button } from './chunk-7QTPJDRF.js';
@@ -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-URGZOK2S.js').then(
12
+ loading ??= import('./Editor-NZRUKWB4.js').then(
13
13
  (module) => {
14
14
  engine = module.Editor;
15
15
  return engine;
@@ -1,7 +1,7 @@
1
1
  import { HuePicker } from './chunk-2EA2GSA2.js';
2
2
  import { Popover } from './chunk-KHJIEPZV.js';
3
3
  import { NODE_HUE_NAMES } from './chunk-AYKXMIOR.js';
4
- import { CharacterPicker } from './chunk-SNQRGH4A.js';
4
+ import { CharacterPicker } from './chunk-VZICPYGR.js';
5
5
  import { Avatar } from './chunk-PZKHBB7D.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './AvatarPicker-POOJUOKC.css';
@@ -0,0 +1,87 @@
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-7QTPJDRF.js';
5
+ import { cx } from './chunk-ODEQTPFM.js';
6
+ import './BriefCard-L66R5U32.css';
7
+ import { useId } from 'react';
8
+ import { CircleCheckGlyph, ArrowRightGlyph, MessageCircleQuestionMarkGlyph } from '@crewlethq/icons/glyphs';
9
+ import { jsx, jsxs } from 'react/jsx-runtime';
10
+
11
+ var BRIEF_CARD_MAX_NEEDS = 3;
12
+ var BRIEF_CARD_LABELS = {
13
+ heading: "Brief",
14
+ needs: "Needs you",
15
+ clear: "Nothing needs you.",
16
+ recommended: "Recommended",
17
+ followUps: "Ask next",
18
+ count: (n) => n === 1 ? "1 needs you" : `${n} need you`,
19
+ allClear: "All clear"
20
+ };
21
+ function BriefCard({
22
+ scope,
23
+ asOf,
24
+ summary,
25
+ needs,
26
+ recommended,
27
+ followUps,
28
+ labels: overrides,
29
+ className,
30
+ ...rest
31
+ }) {
32
+ const labels = overrides ? { ...BRIEF_CARD_LABELS, ...overrides } : BRIEF_CARD_LABELS;
33
+ const id = useId();
34
+ const rows = needs.slice(0, BRIEF_CARD_MAX_NEEDS);
35
+ const hasScope = !(scope === void 0 || scope === null || scope === "");
36
+ const hasAsOf = !(asOf === void 0 || asOf === null || asOf === "");
37
+ const subtitle = hasScope || hasAsOf ? /* @__PURE__ */ jsxs("span", { className: "crewlet-brief-card__where", children: [
38
+ hasScope ? /* @__PURE__ */ jsx("span", { children: scope }) : null,
39
+ hasScope && hasAsOf ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }) : null,
40
+ hasAsOf ? /* @__PURE__ */ jsx("span", { className: "crewlet-brief-card__asof", children: asOf }) : null
41
+ ] }) : void 0;
42
+ return /* @__PURE__ */ jsx(
43
+ StatusCard,
44
+ {
45
+ ...rest,
46
+ title: labels.heading,
47
+ subtitle,
48
+ status: rows.length > 0 ? { label: labels.count(rows.length), tone: "warning" } : { label: labels.allClear, tone: "success", icon: /* @__PURE__ */ jsx(CircleCheckGlyph, { size: "xs" }) },
49
+ className: cx("crewlet-brief-card", className),
50
+ children: /* @__PURE__ */ jsxs("div", { className: "crewlet-brief-card__body", children: [
51
+ /* @__PURE__ */ jsx("p", { className: "crewlet-brief-card__summary", children: summary }),
52
+ /* @__PURE__ */ jsxs("section", { className: "crewlet-brief-card__block", "aria-labelledby": `${id}-needs`, children: [
53
+ /* @__PURE__ */ jsx("h4", { className: "crewlet-brief-card__label", id: `${id}-needs`, children: labels.needs }),
54
+ rows.length === 0 ? /* @__PURE__ */ jsxs("p", { className: "crewlet-brief-card__clear", children: [
55
+ /* @__PURE__ */ jsx(CircleCheckGlyph, { size: "sm", "aria-hidden": "true" }),
56
+ labels.clear
57
+ ] }) : (
58
+ // A list the reader moves through by item; Safari drops the role of a list styled without markers.
59
+ // eslint-disable-next-line jsx-a11y/no-redundant-roles
60
+ /* @__PURE__ */ jsx("ul", { role: "list", className: "crewlet-brief-card__needs", children: rows.map((need) => /* @__PURE__ */ jsxs("li", { className: "crewlet-brief-card__need", children: [
61
+ /* @__PURE__ */ jsx("span", { className: "crewlet-brief-card__dot", children: /* @__PURE__ */ jsx(StatusDot, { tone: need.tone ?? "warning" }) }),
62
+ /* @__PURE__ */ jsxs("span", { className: "crewlet-brief-card__words", children: [
63
+ /* @__PURE__ */ jsx("span", { children: need.text }),
64
+ need.detail === void 0 || need.detail === null ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-brief-card__detail", children: need.detail })
65
+ ] }),
66
+ need.action ? /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", onClick: need.action.onSelect, children: need.action.label }) : null
67
+ ] }, need.key)) })
68
+ )
69
+ ] }),
70
+ recommended === null ? null : /* @__PURE__ */ jsxs("section", { className: "crewlet-brief-card__block", "aria-labelledby": `${id}-next`, children: [
71
+ /* @__PURE__ */ jsx("h4", { className: "crewlet-brief-card__label", id: `${id}-next`, children: labels.recommended }),
72
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-brief-card__next", children: [
73
+ /* @__PURE__ */ jsx(ArrowRightGlyph, { size: "sm", "aria-hidden": "true", className: "crewlet-brief-card__arrow" }),
74
+ /* @__PURE__ */ jsx("span", { children: recommended.text }),
75
+ recommended.action ? /* @__PURE__ */ jsx(Button, { size: "small", variant: "primary", onClick: recommended.action.onSelect, children: recommended.action.label }) : null
76
+ ] })
77
+ ] }),
78
+ followUps && followUps.length > 0 ? /* @__PURE__ */ jsxs("section", { className: "crewlet-brief-card__block", "aria-labelledby": `${id}-ask`, children: [
79
+ /* @__PURE__ */ jsx("h4", { className: "crewlet-brief-card__label", id: `${id}-ask`, children: labels.followUps }),
80
+ /* @__PURE__ */ jsx(SuggestionList, { className: "crewlet-brief-card__follow-ups", children: followUps.map((f) => /* @__PURE__ */ jsx(SuggestionRow, { icon: /* @__PURE__ */ jsx(MessageCircleQuestionMarkGlyph, { size: "sm" }), onSelect: f.onSelect, children: f.question }, f.key)) })
81
+ ] }) : null
82
+ ] })
83
+ }
84
+ );
85
+ }
86
+
87
+ export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_NEEDS, BriefCard };
@@ -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-XWOH3UPZ.js';
5
5
  import { Count } from './chunk-MLDTLZAO.js';
6
6
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
7
7
  import { Button } from './chunk-7QTPJDRF.js';
@@ -2,21 +2,82 @@ import { Eyebrow } from './chunk-RK4XPHVG.js';
2
2
  import { useHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
- import './InboxList-OCL2M3ZF.css';
6
- import { useId } from 'react';
5
+ import './InboxList-OFGSX5IH.css';
6
+ import { useId, useState } from 'react';
7
+ import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
7
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
9
 
9
10
  function InboxList({ label, className, children, ...rest }) {
10
11
  return /* @__PURE__ */ jsx("nav", { ...rest, "aria-label": label, className: cx("crewlet-inbox-list", className), children });
11
12
  }
12
- function InboxGroup({ label, hideLabel = false, headingLevel, className, children, ...rest }) {
13
+ function InboxGroup({
14
+ label,
15
+ hideLabel = false,
16
+ headingLevel,
17
+ count,
18
+ collapsible = false,
19
+ open: controlledOpen,
20
+ defaultOpen = false,
21
+ onOpenChange,
22
+ className,
23
+ children,
24
+ ...rest
25
+ }) {
13
26
  const level = useHeadingLevel();
14
27
  const Heading = headingTag(headingLevel ?? level);
15
28
  const labelId = useId();
16
- return /* @__PURE__ */ jsxs("section", { ...rest, "aria-labelledby": labelId, className: cx("crewlet-inbox-list__group", className), children: [
17
- hideLabel ? /* @__PURE__ */ jsx(VisuallyHidden, { as: Heading, id: labelId, children: label }) : /* @__PURE__ */ jsx(Heading, { id: labelId, className: "crewlet-inbox-list__label", children: /* @__PURE__ */ jsx(Eyebrow, { children: label }) }),
18
- /* @__PURE__ */ jsx("ul", { className: "crewlet-inbox-list__rows", children })
29
+ const rowsId = useId();
30
+ const [ownOpen, setOwnOpen] = useState(defaultOpen);
31
+ const collapses = collapsible && !hideLabel;
32
+ const open = !collapses || (controlledOpen ?? ownOpen);
33
+ const toggle = () => {
34
+ const next = !open;
35
+ if (controlledOpen === void 0) setOwnOpen(next);
36
+ onOpenChange?.(next);
37
+ };
38
+ const counted = count === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
39
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: "," }),
40
+ " ",
41
+ /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-list__count", children: count })
19
42
  ] });
43
+ return /* @__PURE__ */ jsxs(
44
+ "section",
45
+ {
46
+ ...rest,
47
+ "aria-labelledby": labelId,
48
+ className: cx("crewlet-inbox-list__group", collapses && "crewlet-inbox-list__group--collapsible", className),
49
+ children: [
50
+ hideLabel ? /* @__PURE__ */ jsxs(VisuallyHidden, { as: Heading, id: labelId, children: [
51
+ label,
52
+ counted
53
+ ] }) : collapses ? (
54
+ // A DISCLOSURE INSIDE THE HEADING, never a heading inside a button: a
55
+ // reader moving by heading still lands on the group, and the button
56
+ // in it says whether the rows are shown.
57
+ /* @__PURE__ */ jsx(Heading, { className: "crewlet-inbox-list__label", children: /* @__PURE__ */ jsxs(
58
+ "button",
59
+ {
60
+ type: "button",
61
+ id: labelId,
62
+ className: "crewlet-inbox-list__disclosure",
63
+ "aria-expanded": open,
64
+ "aria-controls": rowsId,
65
+ onClick: toggle,
66
+ children: [
67
+ /* @__PURE__ */ jsx(ChevronDownGlyph, { "aria-hidden": true, size: "sm", className: "crewlet-inbox-list__chevron" }),
68
+ /* @__PURE__ */ jsx(Eyebrow, { children: label }),
69
+ counted
70
+ ]
71
+ }
72
+ ) })
73
+ ) : /* @__PURE__ */ jsxs(Heading, { id: labelId, className: "crewlet-inbox-list__label", children: [
74
+ /* @__PURE__ */ jsx(Eyebrow, { children: label }),
75
+ counted
76
+ ] }),
77
+ /* @__PURE__ */ jsx("ul", { id: rowsId, className: "crewlet-inbox-list__rows", hidden: !open, children })
78
+ ]
79
+ }
80
+ );
20
81
  }
21
82
  function InboxRow({
22
83
  title,
@@ -32,6 +93,10 @@ function InboxRow({
32
93
  actionable = false,
33
94
  done = false,
34
95
  doneLabel = "Done",
96
+ status,
97
+ outcome,
98
+ outcomeIcon,
99
+ outcomeTone = "neutral",
35
100
  href,
36
101
  onClick,
37
102
  className,
@@ -50,6 +115,10 @@ function InboxRow({
50
115
  " ",
51
116
  /* @__PURE__ */ jsx("span", { className: cx("crewlet-inbox-row__qualifier", qualifierTone === "danger" && "crewlet-inbox-row__qualifier--danger"), children: qualifier })
52
117
  ] }),
118
+ status === void 0 || status === null ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
119
+ " ",
120
+ /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__status", children: status })
121
+ ] }),
53
122
  meta === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
54
123
  " ",
55
124
  /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__meta", children: meta })
@@ -63,6 +132,13 @@ function InboxRow({
63
132
  /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__excerpt", children: excerpt })
64
133
  ] })
65
134
  ] }),
135
+ outcome === void 0 || outcome === null ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
136
+ " ",
137
+ /* @__PURE__ */ jsxs("span", { className: cx("crewlet-inbox-row__outcome", `crewlet-inbox-row__outcome--${outcomeTone}`), children: [
138
+ outcomeIcon === void 0 ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "crewlet-inbox-row__outcome-icon", children: outcomeIcon }),
139
+ /* @__PURE__ */ jsx("span", { className: "crewlet-inbox-row__outcome-text", children: outcome })
140
+ ] })
141
+ ] }),
66
142
  unread ? /* @__PURE__ */ jsxs(Fragment, { children: [
67
143
  " ",
68
144
  /* @__PURE__ */ jsx(VisuallyHidden, { children: unreadLabel })
@@ -1,12 +1,12 @@
1
1
  import { PageHeader } from './chunk-FPDIHEM4.js';
2
- import { DataTable } from './chunk-CFY257ND.js';
2
+ import { DataTable } from './chunk-UYK3SGZI.js';
3
3
  import { DateTimePicker } from './chunk-PX54PALQ.js';
4
4
  import { useListbox, useOptionKeys } from './chunk-7KHM2FZH.js';
5
5
  import { Toolbar } from './chunk-NR4CPM4T.js';
6
6
  import { Popover } from './chunk-KHJIEPZV.js';
7
7
  import { RelativeTime } from './chunk-EJNJMHQG.js';
8
- import { Kbd } from './chunk-ANTAQAR4.js';
9
8
  import { Input } from './chunk-ETSF7SU6.js';
9
+ import { Kbd } from './chunk-ANTAQAR4.js';
10
10
  import { Count } from './chunk-MLDTLZAO.js';
11
11
  import { Menu } from './chunk-T73DMDU4.js';
12
12
  import { Button } from './chunk-7QTPJDRF.js';
@@ -29,6 +29,7 @@ export * from '../BrandLockup/index.js';
29
29
  export * from '../BrandSample/index.js';
30
30
  export * from '../BrandScope/index.js';
31
31
  export * from '../Breadcrumb/index.js';
32
+ export * from '../BriefCard/index.js';
32
33
  export * from '../Button/index.js';
33
34
  export * from '../CalendarGrid/index.js';
34
35
  export * from '../Callout/index.js';