@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
package/dist/styles.css CHANGED
@@ -5757,11 +5757,12 @@ a.crewlet-breadcrumb__crumb:focus-visible {
5757
5757
  }
5758
5758
 
5759
5759
 
5760
- /* BriefCard-L66R5U32.css */
5760
+ /* BriefCard-VKTH3BSW.css */
5761
5761
  /*
5762
- * A brief inside the product's status card: one sentence, the rows that wait
5763
- * on the reader, one recommendation and the questions to ask next, each block
5764
- * under a quiet label so a reader scans straight to the part they need.
5762
+ * A brief inside the product's status card: the verdict in the head, then one
5763
+ * line on what the page is about, the ranked rows that wait on the reader, a
5764
+ * quiet line of context and the questions to ask next. No block carries a
5765
+ * label: the verdict already says what the rows are.
5765
5766
  */
5766
5767
  .crewlet-brief-card__where {
5767
5768
  display: inline-flex;
@@ -5776,35 +5777,19 @@ a.crewlet-breadcrumb__crumb:focus-visible {
5776
5777
  .crewlet-brief-card__body {
5777
5778
  display: flex;
5778
5779
  flex-direction: column;
5779
- gap: var(--spacing-4);
5780
+ gap: var(--spacing-3);
5780
5781
  min-width: 0;
5781
5782
  }
5782
5783
 
5783
- .crewlet-brief-card__summary {
5784
+ .crewlet-brief-card__about {
5784
5785
  margin: 0;
5786
+ overflow-wrap: anywhere;
5785
5787
  font-size: var(--font-size-md);
5786
5788
  font-weight: var(--font-weight-medium);
5787
5789
  line-height: var(--font-line-height-snug);
5788
5790
  text-wrap: pretty;
5789
5791
  }
5790
5792
 
5791
- .crewlet-brief-card__block {
5792
- display: flex;
5793
- flex-direction: column;
5794
- gap: var(--spacing-2);
5795
- min-width: 0;
5796
- }
5797
-
5798
- .crewlet-brief-card__label {
5799
- margin: 0;
5800
- font-size: var(--font-size-2xs);
5801
- font-weight: var(--font-weight-medium);
5802
- letter-spacing: var(--font-letter-spacing-wide);
5803
- text-transform: uppercase;
5804
- line-height: var(--font-line-height-snug);
5805
- color: var(--color-text-tertiary);
5806
- }
5807
-
5808
5793
  .crewlet-brief-card__needs {
5809
5794
  display: flex;
5810
5795
  flex-direction: column;
@@ -5816,7 +5801,8 @@ a.crewlet-breadcrumb__crumb:focus-visible {
5816
5801
  /*
5817
5802
  * A ROW IS THE LIST ROW'S GRAMMAR: the dot on the first line, the words and
5818
5803
  * their one fact, and the action centred at the end, so a column of rows reads
5819
- * down the dots and across to the presses.
5804
+ * down the dots and across to the presses. The first row, the one the brief
5805
+ * recommends, stands on the accent's softest ground.
5820
5806
  */
5821
5807
  .crewlet-brief-card__need {
5822
5808
  display: grid;
@@ -5830,6 +5816,26 @@ a.crewlet-breadcrumb__crumb:focus-visible {
5830
5816
  border-top: 1px solid var(--color-border-default);
5831
5817
  }
5832
5818
 
5819
+ .crewlet-brief-card__need--first {
5820
+ padding-inline: var(--spacing-3);
5821
+ margin-inline: calc(-1 * var(--spacing-3));
5822
+ border-radius: var(--radius-md);
5823
+ background: var(--color-brand-accent-soft);
5824
+ }
5825
+
5826
+ .crewlet-brief-card__need--first + .crewlet-brief-card__need {
5827
+ border-top: 0;
5828
+ }
5829
+
5830
+ .crewlet-brief-card__first {
5831
+ font-size: var(--font-size-2xs);
5832
+ font-weight: var(--font-weight-medium);
5833
+ letter-spacing: var(--font-letter-spacing-wide);
5834
+ text-transform: uppercase;
5835
+ line-height: var(--font-line-height-snug);
5836
+ color: var(--color-brand-accent-ink);
5837
+ }
5838
+
5833
5839
  .crewlet-brief-card__need > .crewlet-button {
5834
5840
  align-self: center;
5835
5841
  }
@@ -5855,30 +5861,12 @@ a.crewlet-breadcrumb__crumb:focus-visible {
5855
5861
  color: var(--color-text-tertiary);
5856
5862
  }
5857
5863
 
5858
- .crewlet-brief-card__clear {
5859
- display: inline-flex;
5860
- align-items: center;
5861
- gap: var(--spacing-2);
5864
+ .crewlet-brief-card__context {
5862
5865
  margin: 0;
5863
- font-size: var(--font-size-compact);
5864
- color: var(--color-feedback-success-ink);
5865
- }
5866
-
5867
- /* The recommendation: one step, on the accent's softest ground. */
5868
- .crewlet-brief-card__next {
5869
- display: grid;
5870
- grid-template-columns: auto minmax(0, 1fr) auto;
5871
- align-items: center;
5872
- gap: var(--spacing-3);
5873
- padding: var(--spacing-2) var(--spacing-3);
5874
- border-radius: var(--radius-md);
5875
- background: var(--color-brand-accent-soft);
5866
+ font-size: var(--font-size-xs);
5867
+ line-height: var(--font-line-height-snug);
5868
+ color: var(--color-text-tertiary);
5876
5869
  overflow-wrap: anywhere;
5877
- font-size: var(--font-size-compact);
5878
- }
5879
-
5880
- .crewlet-brief-card__arrow {
5881
- color: var(--color-brand-accent-ink);
5882
5870
  }
5883
5871
 
5884
5872
  /* The questions to ask next sit on the card's text edge: each row's own inset is pulled out. */
@@ -28052,6 +28040,193 @@ button.crewlet-presence-stack__member:focus-visible {
28052
28040
  }
28053
28041
 
28054
28042
 
28043
+ /* RecordChip-53J66RA6.css */
28044
+ /*
28045
+ * A record inside a sentence. The text's own size on the text's own
28046
+ * baseline, so a line holding one is no taller than a line without: a quiet
28047
+ * hairline, the inset ground, and the key in mono.
28048
+ */
28049
+ .crewlet-record-chip {
28050
+ display: inline-flex;
28051
+ align-items: center;
28052
+ gap: var(--spacing-1);
28053
+ max-width: 100%;
28054
+ margin: 0 1px;
28055
+ padding: 0 var(--spacing-1);
28056
+ border: 1px solid var(--color-border-default);
28057
+ border-radius: var(--radius-xs);
28058
+ background: var(--color-surface-inset);
28059
+ color: var(--color-text-primary);
28060
+ font: inherit;
28061
+ font-weight: var(--font-weight-medium);
28062
+ /*
28063
+ * EXACTLY ONE OF THE LINE'S OWN LINES, hairline included: `1lh` is the
28064
+ * line-height the chip inherits, and the two pixels are its top and bottom
28065
+ * border. At the snug step a label chip stood 20.2px in a 19.5px line and
28066
+ * moved every line it sat on by a pixel.
28067
+ */
28068
+ line-height: calc(1lh - 2px);
28069
+ /*
28070
+ * TOP, NOT BASELINE: a key chip's text is mono at the micro step under the
28071
+ * parent's absolute leading, and on the baseline it sat about a pixel off
28072
+ * its neighbours' and pushed its line to 20.5px. At the line's top it is
28073
+ * the line's own height (19.5px in a 19.5px line) with the key within half
28074
+ * a pixel of the surrounding baseline.
28075
+ */
28076
+ vertical-align: top;
28077
+ cursor: pointer;
28078
+ transition:
28079
+ background var(--motion-duration-fast) var(--motion-easing-default),
28080
+ border-color var(--motion-duration-fast) var(--motion-easing-default);
28081
+ }
28082
+
28083
+ .crewlet-record-chip:hover,
28084
+ .crewlet-record-chip[data-open] {
28085
+ border-color: var(--color-border-hover);
28086
+ background: var(--color-surface-hover);
28087
+ }
28088
+
28089
+ /* The chip draws its own hairline, so the ring lands on it rather than standing off it. */
28090
+ .crewlet-record-chip:focus-visible {
28091
+ outline: 2px solid var(--color-focus);
28092
+ outline-offset: var(--size-focus-ring-inset-offset);
28093
+ }
28094
+
28095
+ .crewlet-record-chip--code .crewlet-record-chip__text {
28096
+ font-family: var(--font-family-mono);
28097
+ font-size: var(--font-size-xs);
28098
+ }
28099
+
28100
+ .crewlet-record-chip__text {
28101
+ min-width: 0;
28102
+ overflow: hidden;
28103
+ text-overflow: ellipsis;
28104
+ white-space: nowrap;
28105
+ }
28106
+
28107
+ .crewlet-record-chip__glyph {
28108
+ display: inline-flex;
28109
+ flex: none;
28110
+ color: var(--color-text-tertiary);
28111
+ }
28112
+
28113
+ /* THE PEEK: a name, a few facts and the way to it, at the panel's own inset. */
28114
+ .crewlet-popover.crewlet-record-chip__peek {
28115
+ display: flex;
28116
+ flex-direction: column;
28117
+ gap: var(--spacing-2);
28118
+ max-height: min(420px, 70vh);
28119
+ padding: var(--spacing-3);
28120
+ font-size: var(--font-size-compact);
28121
+ color: var(--color-text-primary);
28122
+ }
28123
+
28124
+ .crewlet-record-chip__head {
28125
+ display: flex;
28126
+ align-items: flex-start;
28127
+ gap: var(--spacing-2);
28128
+ }
28129
+
28130
+ .crewlet-record-chip__head-glyph {
28131
+ display: inline-flex;
28132
+ flex: none;
28133
+ align-items: center;
28134
+ height: 1lh;
28135
+ color: var(--color-text-tertiary);
28136
+ }
28137
+
28138
+ .crewlet-record-chip__head-words {
28139
+ display: flex;
28140
+ flex-direction: column;
28141
+ gap: 2px;
28142
+ min-width: 0;
28143
+ }
28144
+
28145
+ .crewlet-record-chip__name {
28146
+ margin: 0;
28147
+ font-weight: var(--font-weight-medium);
28148
+ line-height: var(--font-line-height-normal);
28149
+ }
28150
+
28151
+ .crewlet-record-chip__name-code {
28152
+ font-family: var(--font-family-mono);
28153
+ font-size: var(--font-size-xs);
28154
+ font-weight: var(--font-weight-regular);
28155
+ color: var(--color-text-secondary);
28156
+ }
28157
+
28158
+ .crewlet-record-chip__meta {
28159
+ margin: 0;
28160
+ font-size: var(--font-size-xs);
28161
+ color: var(--color-text-tertiary);
28162
+ }
28163
+
28164
+ .crewlet-record-chip__body {
28165
+ display: flex;
28166
+ flex-direction: column;
28167
+ gap: var(--spacing-2);
28168
+ min-width: 0;
28169
+ }
28170
+
28171
+ /* Utilities start on the text edge, a ghost button's padding pulled into the gutter. */
28172
+ .crewlet-record-chip__actions {
28173
+ display: flex;
28174
+ flex-wrap: wrap;
28175
+ align-items: center;
28176
+ gap: var(--spacing-1);
28177
+ margin-inline-start: calc(-1 * (var(--spacing-2) + 1px));
28178
+ }
28179
+
28180
+ @media (prefers-reduced-motion: reduce) {
28181
+ .crewlet-record-chip {
28182
+ transition: none;
28183
+ }
28184
+ }
28185
+
28186
+ /* THE ALSO READ LINE: a caption-register lead and the chips after it, wrapping. */
28187
+ .crewlet-record-chip-list {
28188
+ display: flex;
28189
+ flex-wrap: wrap;
28190
+ align-items: baseline;
28191
+ gap: var(--spacing-1) var(--spacing-2);
28192
+ min-width: 0;
28193
+ font-size: var(--font-size-xs);
28194
+ line-height: var(--font-line-height-normal);
28195
+ color: var(--color-text-secondary);
28196
+ }
28197
+
28198
+ .crewlet-record-chip-list__label {
28199
+ flex: none;
28200
+ }
28201
+
28202
+ /*
28203
+ * THE LIST IS THE WRAPPING ROW. Not `display: contents`, which older WebKit
28204
+ * and Chromium drop from the accessibility tree along with the list's name,
28205
+ * so "Also read, list, 3 items" was never said.
28206
+ */
28207
+ .crewlet-record-chip-list__items {
28208
+ display: flex;
28209
+ flex: 1 1 auto;
28210
+ flex-wrap: wrap;
28211
+ align-items: baseline;
28212
+ gap: var(--spacing-1) var(--spacing-2);
28213
+ min-width: 0;
28214
+ margin: 0;
28215
+ padding: 0;
28216
+ list-style: none;
28217
+ }
28218
+
28219
+ .crewlet-record-chip-list__item {
28220
+ display: inline-flex;
28221
+ min-width: 0;
28222
+ max-width: 100%;
28223
+ }
28224
+
28225
+ .crewlet-record-chip-list .crewlet-record-chip {
28226
+ margin: 0;
28227
+ }
28228
+
28229
+
28055
28230
  /* RefusalCard-UM67F5HB.css */
28056
28231
  /* The first sentence carries the weight; "Nothing changed." closes in the secondary ink. */
28057
28232
  .crewlet-refusal-card__heading {
@@ -36315,7 +36490,7 @@ b.crewlet-switcher__match {
36315
36490
  }
36316
36491
 
36317
36492
 
36318
- /* Table-RUYMMWXT.css */
36493
+ /* Table-MN3FIA2O.css */
36319
36494
  /*
36320
36495
  * Table: the operator's table, on the elements a table is made of.
36321
36496
  *
@@ -36535,6 +36710,34 @@ b.crewlet-switcher__match {
36535
36710
  }
36536
36711
  }
36537
36712
 
36713
+ /*
36714
+ * COLUMNS SIZED BY THEIR WORDS (`columns="content"`), for a result read
36715
+ * beside an answer. Each column takes the room its words ask for, so a short
36716
+ * key keeps its line and the longest text takes the most and wraps between
36717
+ * words. A token longer than the table (a digest, a URL) wraps ANYWHERE: with
36718
+ * `break-word` it did not, because under an auto layout a word's whole width
36719
+ * is the column's minimum, and a sha256 in a 350px table pushed it to 606px.
36720
+ * `anywhere` lets the minimum shrink to a character. The figures (`end`
36721
+ * columns) and the nowrap columns never wrap, and the figures stay tabular.
36722
+ */
36723
+ .crewlet-table--content .crewlet-table__table {
36724
+ table-layout: auto;
36725
+ font-variant-numeric: tabular-nums;
36726
+ }
36727
+
36728
+ .crewlet-table--content td:not(.crewlet-table__cell--nowrap, .crewlet-table__cell--end) {
36729
+ overflow-wrap: anywhere;
36730
+ }
36731
+
36732
+ .crewlet-table--content .crewlet-table__cell--end {
36733
+ white-space: nowrap;
36734
+ }
36735
+
36736
+ /* A column of short tokens (a task's key) keeps each on one line; only content columns offer it. */
36737
+ .crewlet-table--content .crewlet-table__cell--nowrap {
36738
+ white-space: nowrap;
36739
+ }
36740
+
36538
36741
 
36539
36742
  /* TableCells-TKSNLRK3.css */
36540
36743
  /* The read-only table cells. Each one holds a single line and shrinks inside
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.71.0",
3
+ "version": "0.73.0",
4
4
  "description": "Crewlet shared React components built on @crewlethq/tokens and @crewlethq/icons.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -42,8 +42,8 @@
42
42
  "clean": "rm -rf dist src/generated"
43
43
  },
44
44
  "dependencies": {
45
- "@crewlethq/icons": "0.71.0",
46
- "@crewlethq/tokens": "0.71.0",
45
+ "@crewlethq/icons": "0.73.0",
46
+ "@crewlethq/tokens": "0.73.0",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",
@@ -1,58 +0,0 @@
1
- import { VisuallyHidden } from './chunk-UT6CW3C7.js';
2
- import { cx } from './chunk-ODEQTPFM.js';
3
- import './Table-RUYMMWXT.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
- className = ""
18
- }) => {
19
- const columnCount = Math.max(1, headers.length);
20
- const edge = (index) => align?.[index] === "end" ? "crewlet-table__cell--end" : void 0;
21
- return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-table", !framed && "crewlet-table--flush", className), children: [
22
- /* @__PURE__ */ jsx(
23
- "div",
24
- {
25
- className: "crewlet-table__container",
26
- style: (
27
- // Only the height: the stylesheet scrolls both axes unconditionally,
28
- // because with `overflow-x: auto` declared beside it a `visible`
29
- // vertical axis was never reachable. See Table.css.
30
- maxHeight ? { "--crewlet-table-max-height": maxHeight } : void 0
31
- ),
32
- children: /* @__PURE__ */ jsxs("table", { className: "crewlet-table__table", children: [
33
- caption != null && (captionHidden ? /* @__PURE__ */ jsx("caption", { children: /* @__PURE__ */ jsx(VisuallyHidden, { children: caption }) }) : /* @__PURE__ */ jsx("caption", { className: "crewlet-table__caption", children: caption })),
34
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { className: "crewlet-table__header", children: headers.map((header, index) => (
35
- // The index is the key because a header is a position: the
36
- // columns of one table do not reorder between renders.
37
- /* @__PURE__ */ jsx("th", { scope: "col", className: edge(index), children: header }, index)
38
- )) }) }),
39
- /* @__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 }) }) }),
40
- footer && footer.length > 0 ? /* @__PURE__ */ jsx("tfoot", { children: /* @__PURE__ */ jsx("tr", { className: "crewlet-table__footer", children: footer.map(
41
- (cell, index) => index === 0 ? /* @__PURE__ */ jsx("th", { scope: "row", className: edge(index), children: cell }, index) : /* @__PURE__ */ jsx("td", { className: edge(index), children: cell }, index)
42
- ) }) }) : null
43
- ] })
44
- }
45
- ),
46
- actionButton && /* @__PURE__ */ jsx(
47
- "button",
48
- {
49
- type: "button",
50
- className: "crewlet-table__action-btn",
51
- onClick: actionButton.onClick,
52
- children: /* @__PURE__ */ jsx("span", { className: "crewlet-table__action-text", children: actionButton.label })
53
- }
54
- )
55
- ] });
56
- };
57
-
58
- export { Table };
@@ -1,87 +0,0 @@
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-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,9 +1,9 @@
1
1
  import { useListbox } from './chunk-7KHM2FZH.js';
2
2
  import { Tag } from './chunk-I5OIKDX2.js';
3
- import { announce } from './chunk-2G355KDJ.js';
4
3
  import { isComposing } from './chunk-H5XTJ7GJ.js';
5
4
  import { IconButton } from './chunk-UAUP6XGK.js';
6
5
  import { useFocusModality } from './chunk-NUZHC6MM.js';
6
+ import { announce } from './chunk-2G355KDJ.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './TagsInput-MZXEHKJD.css';
9
9
  import { forwardRef, useState, useRef, useId, useImperativeHandle, useEffect, useMemo, useLayoutEffect } from 'react';
File without changes
@@ -1,5 +1,5 @@
1
- import { announce } from './chunk-2G355KDJ.js';
2
1
  import { IconButton } from './chunk-UAUP6XGK.js';
2
+ import { announce } from './chunk-2G355KDJ.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './ArrangeFrame-QCQZ5RF6.css';
5
5
  import { forwardRef, useRef, useCallback, useState, useEffect } from 'react';
@@ -1,6 +1,6 @@
1
1
  import { StepList } from './chunk-HJBHP66O.js';
2
- import { ReceiptStrip } from './chunk-ZWCK4N4L.js';
3
2
  import { Meter } from './chunk-RQFRRPV6.js';
3
+ import { ReceiptStrip } from './chunk-ZWCK4N4L.js';
4
4
  import { StatusCard } from './chunk-NTQPJJAN.js';
5
5
  import { Disclosure } from './chunk-222VILSP.js';
6
6
  import { Spinner } from './chunk-XSPCITPN.js';
@@ -1,5 +1,5 @@
1
- import { SlideStage, SLIDE_WIDTH, SLIDE_HEIGHT } from './chunk-RMEBFYL7.js';
2
1
  import { SlideNav } from './chunk-5AJR6X75.js';
2
+ import { SlideStage, SLIDE_WIDTH, SLIDE_HEIGHT } from './chunk-RMEBFYL7.js';
3
3
  import { Eyebrow } from './chunk-RK4XPHVG.js';
4
4
  import { Button } from './chunk-DGXZ635L.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
1
  import { Toolbar } from './chunk-NR4CPM4T.js';
2
- import { announce } from './chunk-2G355KDJ.js';
3
2
  import { Button } from './chunk-DGXZ635L.js';
4
3
  import { returnFocus } from './chunk-NUZHC6MM.js';
4
+ import { announce } from './chunk-2G355KDJ.js';
5
5
  import { cx } from './chunk-ODEQTPFM.js';
6
6
  import './SelectionBar-SCAU6EBY.css';
7
7
  import { useRef, useEffect } from 'react';
@@ -1,9 +1,9 @@
1
1
  import { characterCountState, CharacterCount } from './chunk-PGCLHYVP.js';
2
2
  import { useHeadingLevel, headingTag, HeadingLevelProvider, nextHeadingLevel } from './chunk-PQADV6P6.js';
3
- import { announce } from './chunk-2G355KDJ.js';
4
3
  import { isComposing } from './chunk-H5XTJ7GJ.js';
5
4
  import { IconButton } from './chunk-UAUP6XGK.js';
6
5
  import { useFocusModality } from './chunk-NUZHC6MM.js';
6
+ import { announce } from './chunk-2G355KDJ.js';
7
7
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
9
9
  import './Input-GEFFMKBS.css';