@crewlethq/ui 0.68.0 → 0.70.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 (174) hide show
  1. package/README.md +24 -2
  2. package/dist/AgentHandoffPanel/index.js +5 -5
  3. package/dist/AppShell/index.js +4 -4
  4. package/dist/ArrangeList/index.js +4 -4
  5. package/dist/ArtifactBar/index.js +7 -7
  6. package/dist/ArtifactCard/index.js +4 -4
  7. package/dist/ArtifactPanel/index.js +1 -1
  8. package/dist/AvatarPicker/index.js +7 -7
  9. package/dist/BriefCard/BriefCard.d.ts +80 -0
  10. package/dist/BriefCard/index.d.ts +3 -0
  11. package/dist/BriefCard/index.js +13 -0
  12. package/dist/BriefCard-L66R5U32.css +127 -0
  13. package/dist/Button/Button.d.ts +10 -0
  14. package/dist/Button/index.js +1 -1
  15. package/dist/{Button-VRRYSXFN.css → Button-GDEBGBX6.css} +30 -3
  16. package/dist/Canvas/index.js +3 -3
  17. package/dist/CanvasBoard/index.js +5 -5
  18. package/dist/CanvasToolbar/index.js +4 -4
  19. package/dist/ChatThread/index.js +2 -2
  20. package/dist/Checkbox/index.js +3 -3
  21. package/dist/CodeBlock/index.js +3 -3
  22. package/dist/ColorField/index.js +3 -3
  23. package/dist/ColorSwatch/index.js +3 -3
  24. package/dist/Combobox/index.js +3 -3
  25. package/dist/CommandPalette/index.js +5 -5
  26. package/dist/CommentThread/index.js +6 -6
  27. package/dist/Composer/index.js +3 -3
  28. package/dist/ConfirmField/index.js +3 -3
  29. package/dist/ConflictNote/index.js +2 -2
  30. package/dist/ContrastHelp/index.js +1 -1
  31. package/dist/Copyable/index.js +2 -2
  32. package/dist/DataGrid/DataGrid.d.ts +50 -4
  33. package/dist/DataGrid/index.d.ts +2 -2
  34. package/dist/DataGrid/index.js +5 -5
  35. package/dist/{DataGrid-NHIN2I42.css → DataGrid-Q26F2V5Q.css} +145 -24
  36. package/dist/DataTable/index.js +7 -7
  37. package/dist/DataView/index.js +10 -9
  38. package/dist/{DataView-RH5UDA5F.css → DataView-L7HLNW7C.css} +1 -112
  39. package/dist/DateTimePicker/index.js +3 -3
  40. package/dist/DeepWorkCard/index.js +3 -3
  41. package/dist/DocTabsEditor/index.js +5 -5
  42. package/dist/DownloadButton/index.js +2 -2
  43. package/dist/{Editor-2MZDDSJF.js → Editor-NNQEALNT.js} +4 -4
  44. package/dist/ErrorBoundary/index.js +2 -2
  45. package/dist/FileDrop/index.js +2 -2
  46. package/dist/FilterPill/FilterPill.d.ts +63 -0
  47. package/dist/FilterPill/index.d.ts +3 -0
  48. package/dist/FilterPill/index.js +4 -0
  49. package/dist/FilterPill-4GMNFZND.css +134 -0
  50. package/dist/FollowBanner/index.js +2 -2
  51. package/dist/HuePicker/index.js +6 -6
  52. package/dist/InlineEditor/index.js +2 -2
  53. package/dist/Input/index.js +2 -2
  54. package/dist/LinkInterstitial/index.js +4 -4
  55. package/dist/ListInput/index.js +4 -4
  56. package/dist/LogoSlot/index.js +3 -3
  57. package/dist/MarkdownEditor/index.js +6 -6
  58. package/dist/Menu/Menu.d.ts +10 -1
  59. package/dist/Menu/index.js +3 -3
  60. package/dist/{Menu-OLUGHX56.css → Menu-I4SNXHOT.css} +12 -0
  61. package/dist/MergeConflicts/index.js +6 -6
  62. package/dist/Modal/index.js +3 -3
  63. package/dist/OpenInAppCard/index.js +3 -3
  64. package/dist/OrgTable/index.js +1 -1
  65. package/dist/PeekRail/index.js +2 -2
  66. package/dist/PeopleRail/index.js +2 -2
  67. package/dist/PresenterView/index.js +3 -3
  68. package/dist/PrincipalPicker/index.js +4 -4
  69. package/dist/ProposalCard/index.js +7 -7
  70. package/dist/ReceiptStrip/index.js +2 -2
  71. package/dist/ResultTableCard/index.js +4 -4
  72. package/dist/RichEditor/index.js +2 -2
  73. package/dist/SandboxedFrame/index.js +2 -2
  74. package/dist/SegmentedControl/index.js +5 -5
  75. package/dist/SelectionBar/index.js +2 -2
  76. package/dist/SetupWizard/index.js +2 -2
  77. package/dist/ShareDialog/index.js +5 -5
  78. package/dist/SheetColumnEditor/index.js +9 -9
  79. package/dist/SheetGrid/index.js +4 -4
  80. package/dist/SidePanel/index.js +1 -1
  81. package/dist/SlideCompare/index.js +2 -2
  82. package/dist/SlideFilmstrip/index.js +4 -4
  83. package/dist/Switcher/index.js +5 -5
  84. package/dist/TableCells/index.js +1 -1
  85. package/dist/{TableCells-F6MUV572.css → TableCells-TKSNLRK3.css} +1 -0
  86. package/dist/Tabs/index.js +4 -4
  87. package/dist/TagsInput/index.js +2 -2
  88. package/dist/ThemeSwitcher/index.js +6 -6
  89. package/dist/TimeRangePicker/index.js +8 -8
  90. package/dist/TimeWindowPicker/index.js +4 -4
  91. package/dist/TreeCanvas/index.js +4 -4
  92. package/dist/TreeGrid/index.js +1 -1
  93. package/dist/ValueField/index.js +4 -4
  94. package/dist/VersionCompare/index.js +6 -6
  95. package/dist/VersionTimeline/index.js +2 -2
  96. package/dist/{chunk-XI56IJGI.js → chunk-3EETQFAM.js} +1 -1
  97. package/dist/{chunk-5FFZED4X.js → chunk-3EY5SEGH.js} +4 -4
  98. package/dist/{chunk-2QMUOUXN.js → chunk-3LP3VPLT.js} +2 -2
  99. package/dist/{chunk-DGG2A6XG.js → chunk-3WN5HUAK.js} +2 -2
  100. package/dist/{chunk-QBWNGNF7.js → chunk-4DL2BQJE.js} +1 -1
  101. package/dist/{chunk-XNYMMLCY.js → chunk-4MVLED6E.js} +4 -4
  102. package/dist/{chunk-OXEWUAND.js → chunk-5OFRDX66.js} +1 -1
  103. package/dist/{chunk-QRKDP7RQ.js → chunk-6C6YK75K.js} +2 -2
  104. package/dist/{chunk-2A6DL3K5.js → chunk-6FBPFG3C.js} +1 -1
  105. package/dist/{chunk-WWXIGN4O.js → chunk-73SAOOR5.js} +3 -3
  106. package/dist/{chunk-CMTLQOJY.js → chunk-7LSSYHOT.js} +1 -1
  107. package/dist/{chunk-COAK5MIF.js → chunk-ADSOY7UM.js} +3 -3
  108. package/dist/{chunk-GNDKUSCG.js → chunk-AGLONIVV.js} +1 -1
  109. package/dist/{chunk-YDXX5UB7.js → chunk-AQIFKLXY.js} +1 -1
  110. package/dist/{chunk-SUJO3AHN.js → chunk-B3PK2LND.js} +1 -1
  111. package/dist/{chunk-IU5J6BY5.js → chunk-BWAUL5MB.js} +2 -2
  112. package/dist/{chunk-ZFFQMRPJ.js → chunk-BWFJB5JD.js} +4 -4
  113. package/dist/{chunk-I24FI46B.js → chunk-C667GCU7.js} +1 -1
  114. package/dist/{chunk-CWYU7DNT.js → chunk-CDNZTCP2.js} +1 -1
  115. package/dist/{chunk-MVQSTBLQ.js → chunk-DB7UVFOY.js} +1 -1
  116. package/dist/{chunk-OJGI4XJH.js → chunk-DGSK4LLS.js} +1 -1
  117. package/dist/{chunk-7QTPJDRF.js → chunk-DGXZ635L.js} +7 -4
  118. package/dist/{chunk-2SU735S3.js → chunk-DV5L2GRY.js} +1 -1
  119. package/dist/{chunk-NSCYGUDG.js → chunk-EHFQMY3B.js} +1 -1
  120. package/dist/{chunk-FPTJMNI3.js → chunk-EN4UJQ63.js} +2 -2
  121. package/dist/{chunk-O3WH7OJE.js → chunk-EOXI3CRG.js} +1 -1
  122. package/dist/{chunk-LUSRKTX6.js → chunk-ERFXYGRF.js} +2 -2
  123. package/dist/{chunk-MCMPQBEV.js → chunk-FQI62PIZ.js} +2 -2
  124. package/dist/{chunk-CLJHQHPS.js → chunk-FURJVZCT.js} +73 -27
  125. package/dist/{chunk-5K7GGQNX.js → chunk-G4QZWVAB.js} +2 -2
  126. package/dist/{chunk-KZ3UXNN7.js → chunk-H32JW6CZ.js} +2 -2
  127. package/dist/{chunk-7DD2GR7I.js → chunk-HPI5J6AR.js} +2 -2
  128. package/dist/{chunk-ZEPUKRO7.js → chunk-IJ7KLXUZ.js} +1 -1
  129. package/dist/{chunk-MVQLCSAC.js → chunk-IPUEVTRJ.js} +1 -1
  130. package/dist/{chunk-4VPDY7AD.js → chunk-J5WWMC35.js} +45 -46
  131. package/dist/{chunk-KQGOVBGF.js → chunk-JD7P2GJP.js} +1 -1
  132. package/dist/{chunk-VMEUY672.js → chunk-JQEXAH7G.js} +1 -1
  133. package/dist/{chunk-K4IVKHKU.js → chunk-JT7WRPZ6.js} +1 -1
  134. package/dist/{chunk-CFXDWGQI.js → chunk-JVII5264.js} +1 -1
  135. package/dist/chunk-K4LZXSKZ.js +62 -0
  136. package/dist/{chunk-JII74OTJ.js → chunk-KAA3GFTP.js} +5 -5
  137. package/dist/{chunk-WYXUDDTY.js → chunk-KL6A7JGH.js} +1 -1
  138. package/dist/{chunk-2JHGPXYG.js → chunk-KQWJWTED.js} +1 -1
  139. package/dist/{chunk-WU5JDEEY.js → chunk-L4HHWG4V.js} +1 -1
  140. package/dist/{chunk-RCHJBKD3.js → chunk-LQWORB5B.js} +2 -2
  141. package/dist/{chunk-2DSHMV6B.js → chunk-MFQPGMJT.js} +1 -1
  142. package/dist/{chunk-XDVQ72BE.js → chunk-NXNLAZPK.js} +2 -2
  143. package/dist/{chunk-WPMZKZUH.js → chunk-O3HCFM3D.js} +1 -1
  144. package/dist/{chunk-NBOFBSVD.js → chunk-OBPINJNO.js} +2 -2
  145. package/dist/{chunk-2566PSQ3.js → chunk-OQG4P5KU.js} +18 -4
  146. package/dist/{chunk-UWOYDHVW.js → chunk-P64MIA7C.js} +1 -1
  147. package/dist/{chunk-EAR2F5OA.js → chunk-PBCNINMB.js} +1 -1
  148. package/dist/{chunk-KHHDCNYM.js → chunk-PRN5IP2R.js} +1 -1
  149. package/dist/{chunk-DMK2A4IK.js → chunk-QSWQJX27.js} +1 -1
  150. package/dist/{chunk-D2ZXIQ23.js → chunk-R5OATXWU.js} +1 -1
  151. package/dist/{chunk-OFABBAUR.js → chunk-SMZPUHBL.js} +1 -1
  152. package/dist/{chunk-7QTJO3PV.js → chunk-SO5SXSTP.js} +1 -1
  153. package/dist/{chunk-IYG4ETAQ.js → chunk-T5GBTXNC.js} +1 -1
  154. package/dist/{chunk-DMY4XEDS.js → chunk-TKBFRGUV.js} +4 -4
  155. package/dist/{chunk-DFU6JGJV.js → chunk-TPCBPGSB.js} +1 -1
  156. package/dist/{chunk-GAUBP247.js → chunk-TWJERLT3.js} +1 -1
  157. package/dist/{chunk-MJTBINIY.js → chunk-TYIHFDMP.js} +1 -1
  158. package/dist/{chunk-PHBMSXVE.js → chunk-UY3FWQWG.js} +2 -2
  159. package/dist/chunk-VBA5FSWV.js +87 -0
  160. package/dist/{chunk-SZEKOW2X.js → chunk-VWMB3CJN.js} +1 -1
  161. package/dist/{chunk-UKYVLQAE.js → chunk-W5AXJWOW.js} +2 -2
  162. package/dist/{chunk-HHZ5ZXYO.js → chunk-YGWIWDXE.js} +3 -3
  163. package/dist/{chunk-2T32N2WD.js → chunk-YUHKRRWO.js} +2 -2
  164. package/dist/{chunk-IQQSMK4E.js → chunk-ZUBFVK6B.js} +1 -1
  165. package/dist/{chunk-M25IV5MH.js → chunk-ZWCK4N4L.js} +1 -1
  166. package/dist/generated/index.d.ts +2 -0
  167. package/dist/generated/index.js +104 -102
  168. package/dist/index.js +104 -102
  169. package/dist/styles.css +463 -146
  170. package/package.json +3 -3
  171. package/dist/{chunk-TXQNWGUD.js → chunk-ABZC3NLM.js} +0 -0
  172. package/dist/{chunk-DCQ2VTBB.js → chunk-ETSF7SU6.js} +1 -1
  173. package/dist/{chunk-BAHLBMCH.js → chunk-HEIOLITO.js} +1 -1
  174. package/dist/{chunk-R2YHKVWN.js → chunk-SBHAKX2T.js} +1 -1
@@ -220,118 +220,7 @@
220
220
 
221
221
  /* ── One chip ─────────────────────────────────────────────────────────── */
222
222
 
223
- /*
224
- * TWO CONTROLS IN ONE PILL: pressing the chip opens its editor, pressing the
225
- * cross takes the filter off. They are drawn as one object with a divider
226
- * because they are one filter, and they are two BUTTONS because they do two
227
- * different things, which is also why the cross carries its own name rather
228
- * than relying on the chip's.
229
- */
230
- .crewlet-filter-axis-chip {
231
- display: inline-flex;
232
- align-items: stretch;
233
- height: var(--size-control-sm);
234
- background: var(--color-brand-accent-soft);
235
- border: 1px solid var(--color-brand-accent-soft-strong);
236
- border-radius: var(--radius-pill);
237
- overflow: hidden;
238
- max-width: 100%;
239
- transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
240
- }
241
-
242
- /*
243
- * THE EDGE, NOT THE FILL. `--color-surface-hover` is the overlay a row at rest
244
- * carries, and the token says a surface shows it OR a selected tint, never
245
- * both: put on a chip it REPLACED the accent fill, so the one control on screen
246
- * that means "this filter is on" went pale under the pointer and read as the
247
- * filter being switched off.
248
- *
249
- * The fill stays where it is and the boundary takes the accent itself.
250
- * Deepening the fill to the next accent step instead measures 4.48:1 under the
251
- * chip's own ink on the light ground, and 4.18:1 on a card, which is why that
252
- * step is a BORDER value in the palette and is used as one here.
253
- */
254
- .crewlet-filter-axis-chip:hover {
255
- border-color: var(--color-brand-accent);
256
- }
257
-
258
- .crewlet-filter-axis-chip__trigger {
259
- display: inline-flex;
260
- align-items: center;
261
- gap: var(--spacing-1);
262
- min-width: 0;
263
- padding: 0 var(--spacing-2) 0 var(--spacing-3);
264
- background: transparent;
265
- border: none;
266
- cursor: pointer;
267
- color: var(--color-brand-accent-ink);
268
- font-family: var(--font-family-sans);
269
- font-size: var(--font-size-xs);
270
- line-height: 1;
271
- }
272
-
273
- .crewlet-filter-axis-chip__trigger:focus-visible {
274
- outline: 2px solid var(--color-focus);
275
- outline-offset: var(--size-focus-ring-inset-offset);
276
- }
277
-
278
- /*
279
- * THE AXIS NAME IS NOT DIMMED. It read at 0.85 opacity, which takes the chip's
280
- * own ink off the step the pairing was measured at, and the name of the axis
281
- * is exactly what a reader checks before the value: "status" and "stage" narrow
282
- * a list to very different things. The value's own weight is what separates
283
- * the halves, which is a difference a reader can see at any contrast.
284
- */
285
- .crewlet-filter-axis-chip__label {
286
- white-space: nowrap;
287
- }
288
-
289
- .crewlet-filter-axis-chip__value {
290
- font-weight: var(--font-weight-semibold);
291
- overflow: hidden;
292
- text-overflow: ellipsis;
293
- white-space: nowrap;
294
- }
295
-
296
- /*
297
- * The chevron carries the chip's own ink rather than a fainter version of it,
298
- * for the reason every mark beside its words does: a grey glyph next to
299
- * coloured text reads as two things. At 0.7 it measured 3.00:1 on a card in
300
- * light, which is the 3:1 floor for a glyph to the second decimal place.
301
- */
302
- .crewlet-filter-axis-chip__chevron {
303
- flex: none;
304
- }
305
-
306
- /*
307
- * The remove control keeps the chip's own ink rather than taking the critical
308
- * hue on hover: removing a filter destroys nothing, and a row of chips that
309
- * turns red under the pointer reads as a row of dangerous things.
310
- */
311
- .crewlet-filter-axis-chip__remove {
312
- /* AS TALL AS THE PILL'S INSIDE, as the trigger beside it is. At the small
313
- control's own height it stood 2px past the pill's inner edge, cut off at
314
- the bottom, and its cross sat 1px under the chip's middle. */
315
- height: auto;
316
- border-radius: 0;
317
- border-left: 1px solid var(--color-brand-accent-soft-strong);
318
- color: var(--color-brand-accent-ink);
319
- }
320
-
321
- /*
322
- * Its ring is drawn INSIDE it, like the trigger's beside it. The pill clips to
323
- * its own radius, so the outset ring an icon button carries everywhere else is
324
- * cut off on every edge the control touches, which here is all of them.
325
- */
326
- .crewlet-filter-axis-chip__remove:focus-visible {
327
- outline-offset: var(--size-focus-ring-inset-offset);
328
- }
329
-
330
- @media (prefers-reduced-motion: reduce) {
331
- .crewlet-filter-axis-chip {
332
- transition: none;
333
- }
334
- }
223
+ /* A chip is a [FilterPill] (FilterPill.css) whose words open its editor. */
335
224
 
336
225
  /* ── A chip's editor ──────────────────────────────────────────────────── */
337
226
 
@@ -1,11 +1,11 @@
1
- export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-7DD2GR7I.js';
1
+ export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-HPI5J6AR.js';
2
2
  import '../chunk-EE3DJMSQ.js';
3
3
  import '../chunk-KHJIEPZV.js';
4
- import '../chunk-7QTPJDRF.js';
4
+ import '../chunk-DGXZ635L.js';
5
5
  import '../chunk-OMV5W53A.js';
6
6
  import '../chunk-XSPCITPN.js';
7
7
  import '../chunk-H5XTJ7GJ.js';
8
- import '../chunk-NUZHC6MM.js';
9
8
  import '../chunk-UAUP6XGK.js';
9
+ import '../chunk-NUZHC6MM.js';
10
10
  import '../chunk-UT6CW3C7.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-UWOYDHVW.js';
1
+ export { DEEP_WORK_CARD_LABELS, DEEP_WORK_STATES, DEEP_WORK_STATE_LABELS, DeepWorkCard } from '../chunk-P64MIA7C.js';
2
2
  import '../chunk-HJBHP66O.js';
3
+ import '../chunk-ZWCK4N4L.js';
3
4
  import '../chunk-RQFRRPV6.js';
4
- import '../chunk-M25IV5MH.js';
5
5
  import '../chunk-NTQPJJAN.js';
6
6
  import '../chunk-I5OIKDX2.js';
7
7
  import '../chunk-WIATRXEJ.js';
@@ -11,7 +11,7 @@ import '../chunk-222VILSP.js';
11
11
  import '../chunk-IVTQWOXV.js';
12
12
  import '../chunk-MLDTLZAO.js';
13
13
  import '../chunk-PQADV6P6.js';
14
- import '../chunk-7QTPJDRF.js';
14
+ import '../chunk-DGXZ635L.js';
15
15
  import '../chunk-XSPCITPN.js';
16
16
  import '../chunk-UT6CW3C7.js';
17
17
  import '../chunk-ODEQTPFM.js';
@@ -1,15 +1,15 @@
1
- export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-UKYVLQAE.js';
1
+ export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-W5AXJWOW.js';
2
2
  import '../chunk-MPVMB2DV.js';
3
- import '../chunk-DCQ2VTBB.js';
3
+ import '../chunk-ETSF7SU6.js';
4
4
  import '../chunk-PGCLHYVP.js';
5
5
  import '../chunk-PQADV6P6.js';
6
6
  import '../chunk-2G355KDJ.js';
7
- import '../chunk-2566PSQ3.js';
8
- import '../chunk-7QTPJDRF.js';
7
+ import '../chunk-OQG4P5KU.js';
8
+ import '../chunk-DGXZ635L.js';
9
9
  import '../chunk-OMV5W53A.js';
10
10
  import '../chunk-XSPCITPN.js';
11
11
  import '../chunk-H5XTJ7GJ.js';
12
- import '../chunk-NUZHC6MM.js';
13
12
  import '../chunk-UAUP6XGK.js';
13
+ import '../chunk-NUZHC6MM.js';
14
14
  import '../chunk-UT6CW3C7.js';
15
15
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
1
- export { DownloadButton } from '../chunk-NSCYGUDG.js';
1
+ export { DownloadButton } from '../chunk-EHFQMY3B.js';
2
2
  import '../chunk-YNRKVY7X.js';
3
3
  import '../chunk-DTIW4CHZ.js';
4
- import '../chunk-7QTPJDRF.js';
4
+ import '../chunk-DGXZ635L.js';
5
5
  import '../chunk-XSPCITPN.js';
6
6
  import '../chunk-UT6CW3C7.js';
7
7
  import '../chunk-ODEQTPFM.js';
@@ -2,17 +2,17 @@ import { richEditorLabels } from './chunk-CSQTDGTS.js';
2
2
  import { schema, readMarkdown, writeMarkdown } from './chunk-QH6VYJ3X.js';
3
3
  import { safeHref, MARKDOWN_CALLOUT_TONES } from './chunk-BAKPMH3S.js';
4
4
  import { Toolbar } from './chunk-NR4CPM4T.js';
5
- import { FormField, Input } from './chunk-DCQ2VTBB.js';
5
+ import { FormField, Input } from './chunk-ETSF7SU6.js';
6
6
  import './chunk-PGCLHYVP.js';
7
7
  import './chunk-PQADV6P6.js';
8
8
  import './chunk-2G355KDJ.js';
9
- import { Menu } from './chunk-2566PSQ3.js';
10
- import { Button } from './chunk-7QTPJDRF.js';
9
+ import { Menu } from './chunk-OQG4P5KU.js';
10
+ import { Button } from './chunk-DGXZ635L.js';
11
11
  import { placePopup, viewportBounds } from './chunk-OMV5W53A.js';
12
12
  import './chunk-XSPCITPN.js';
13
13
  import { usePopupLayer } from './chunk-H5XTJ7GJ.js';
14
- import './chunk-NUZHC6MM.js';
15
14
  import { IconButton } from './chunk-UAUP6XGK.js';
15
+ import './chunk-NUZHC6MM.js';
16
16
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
17
17
  import { cx } from './chunk-ODEQTPFM.js';
18
18
  import { forwardRef, useMemo, useRef, useState, useId, useSyncExternalStore, useCallback, useLayoutEffect, useEffect, useImperativeHandle } from 'react';
@@ -1,5 +1,5 @@
1
- export { ErrorBoundary } from '../chunk-ZEPUKRO7.js';
2
- import '../chunk-7QTPJDRF.js';
1
+ export { ErrorBoundary } from '../chunk-IJ7KLXUZ.js';
2
+ import '../chunk-DGXZ635L.js';
3
3
  import '../chunk-XSPCITPN.js';
4
4
  import '../chunk-UT6CW3C7.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -1,5 +1,5 @@
1
- export { FileDrop, FilePickButton, droppedFiles, pickedFiles } from '../chunk-2JHGPXYG.js';
2
- import '../chunk-7QTPJDRF.js';
1
+ export { FileDrop, FilePickButton, droppedFiles, pickedFiles } from '../chunk-KQWJWTED.js';
2
+ import '../chunk-DGXZ635L.js';
3
3
  import '../chunk-XSPCITPN.js';
4
4
  import '../chunk-UT6CW3C7.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,63 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ /** The words a pill says, for an application that says them otherwise. */
3
+ export interface FilterPillLabels {
4
+ /** The remove control's name, from the filter as a sentence: "Remove the Status is Done filter". */
5
+ remove: (sentence: string) => string;
6
+ /** Its name where the filter's parts are not words to build a sentence from. */
7
+ removeUnnamed: string;
8
+ /** What ends the field where no operator joins it to the value: "Role: Admin". */
9
+ fieldEnd: string;
10
+ }
11
+ export declare const FILTER_PILL_LABELS: FilterPillLabels;
12
+ export interface FilterPillProps {
13
+ /** What the filter is on: "Status". */
14
+ field: ReactNode;
15
+ /**
16
+ * How the value is compared: "is", "contains", "is any of". Left out, the
17
+ * field and the value are joined by a colon ("Role: Admin").
18
+ */
19
+ operator?: ReactNode;
20
+ /**
21
+ * What the filter is set to: "In progress". Left out for a filter that is a
22
+ * switch with no value ("Blocked"), which the field alone names.
23
+ */
24
+ value?: ReactNode;
25
+ /** Takes the filter off. Left out, the pill has no remove control. */
26
+ onRemove?: (() => void) | undefined;
27
+ /**
28
+ * Names the remove control. Defaults to the whole filter as a sentence
29
+ * (`labels.remove`), "Remove the Status is In progress filter", where its
30
+ * parts are words: a row of pills each announcing "Remove" names nothing.
31
+ */
32
+ removeLabel?: string | undefined;
33
+ /**
34
+ * Draws the words as a control, for a pill whose words open the filter's
35
+ * editor (a popover's trigger). Called with the words and the class the
36
+ * control takes; it returns that control, a `<button>`.
37
+ */
38
+ renderWords?: ((words: ReactNode, className: string) => ReactElement) | undefined;
39
+ labels?: Partial<FilterPillLabels> | undefined;
40
+ className?: string | undefined;
41
+ }
42
+ /** The class the words take, as text or as the control `renderWords` returns. */
43
+ export declare const FILTER_PILL_WORDS_CLASS = "crewlet-filter-pill__words";
44
+ /** The parts as one sentence, where every part is a word: "Status is In progress". */
45
+ export declare function filterPillSentence(field: ReactNode, operator?: ReactNode, value?: ReactNode): string | undefined;
46
+ /**
47
+ * One filter in force on a list: the field, how it compares, the value, and
48
+ * the control that takes it off.
49
+ *
50
+ * THREE PARTS IN THREE REGISTERS, because a filter is a sentence and a pill
51
+ * set in one register reads as a label. The field and the relation are the
52
+ * secondary ink at the regular weight; the value, the answer a reader checks,
53
+ * is the accent ink at the semibold weight. The parts are drawn a step apart
54
+ * AND separated by real spaces, so the pill reads, copies and is announced as
55
+ * the sentence it is, never as "StatusisIn progress".
56
+ *
57
+ * THE ACCENT GROUND, because a filter in force is where the reader is in the
58
+ * data: the same soft fill and edge a pressed [FilterChip] and the selected row
59
+ * carry. The remove control is a second button beside the words, behind a
60
+ * hairline, named by the whole filter; it keeps the pill's ink rather than
61
+ * turning red, because taking a filter off destroys nothing.
62
+ */
63
+ export declare function FilterPill({ field, operator, value, onRemove, removeLabel, renderWords, labels, className, }: FilterPillProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './FilterPill.css';
2
+ export { FILTER_PILL_LABELS, FILTER_PILL_WORDS_CLASS, FilterPill, filterPillSentence } from './FilterPill.js';
3
+ export type { FilterPillLabels, FilterPillProps } from './FilterPill.js';
@@ -0,0 +1,4 @@
1
+ export { FILTER_PILL_LABELS, FILTER_PILL_WORDS_CLASS, FilterPill, filterPillSentence } from '../chunk-K4LZXSKZ.js';
2
+ import '../chunk-UAUP6XGK.js';
3
+ import '../chunk-UT6CW3C7.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,134 @@
1
+ /*
2
+ * The filter pill: one filter in force, as a sentence on the accent ground.
3
+ *
4
+ * TWO CONTROLS IN ONE PILL where the words open an editor: pressing the words
5
+ * opens it, pressing the cross takes the filter off. They are drawn as one
6
+ * object with a divider because they are one filter, and they are two BUTTONS
7
+ * because they do two different things, which is also why the cross carries
8
+ * its own name rather than relying on the words'.
9
+ */
10
+ .crewlet-filter-pill {
11
+ display: inline-flex;
12
+ align-items: stretch;
13
+ height: var(--size-control-sm);
14
+ max-width: 100%;
15
+ min-width: 0;
16
+ background: var(--color-brand-accent-soft);
17
+ border: 1px solid var(--color-brand-accent-soft-strong);
18
+ border-radius: var(--radius-pill);
19
+ overflow: hidden;
20
+ box-sizing: border-box;
21
+ transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
22
+ }
23
+
24
+ /*
25
+ * THE EDGE, NOT THE FILL, under the pointer. The surface hover overlay put on
26
+ * the pill REPLACED the accent fill, so the one control on screen that means
27
+ * "this filter is on" went pale and read as the filter being switched off.
28
+ * The fill stays and the boundary takes the accent itself: the next fill step
29
+ * measures under 4.5:1 beneath the pill's own ink, which is why that step is a
30
+ * border value in the palette and is used as one here.
31
+ */
32
+ .crewlet-filter-pill:hover {
33
+ border-color: var(--color-brand-accent);
34
+ }
35
+
36
+ /*
37
+ * THE WORDS: one line, the parts a step apart. The gap draws the space; the
38
+ * space characters between the parts are still in the text, which is what a
39
+ * copy and a screen reader take, but a flex row does not draw them, so the
40
+ * step is the one spacing. A long value ends in an ellipsis at the pill's
41
+ * edge. Plain text, or the control `renderWords` makes, which gives up a
42
+ * button's chrome and keeps the same line.
43
+ */
44
+ .crewlet-filter-pill__words {
45
+ display: inline-flex;
46
+ align-items: center;
47
+ gap: var(--spacing-1);
48
+ min-width: 0;
49
+ margin: 0;
50
+ padding: 0 var(--spacing-3);
51
+ background: transparent;
52
+ border: 0;
53
+ color: var(--color-text-secondary);
54
+ font-family: var(--font-family-sans);
55
+ font-size: var(--font-size-xs);
56
+ font-weight: var(--font-weight-regular);
57
+ line-height: 1;
58
+ white-space: nowrap;
59
+ }
60
+
61
+ /* A pill with a remove control gives the words' trailing inset to the divider. */
62
+ .crewlet-filter-pill:has(> .crewlet-filter-pill__remove) > .crewlet-filter-pill__words {
63
+ padding-inline-end: var(--spacing-2);
64
+ }
65
+
66
+ button.crewlet-filter-pill__words {
67
+ cursor: pointer;
68
+ }
69
+
70
+ .crewlet-filter-pill__words:focus-visible {
71
+ outline: 2px solid var(--color-focus);
72
+ outline-offset: var(--size-focus-ring-inset-offset);
73
+ }
74
+
75
+ /*
76
+ * THREE REGISTERS. The field and the relation are what the filter is ABOUT,
77
+ * in the secondary ink at the regular weight; the value is the answer, in the
78
+ * accent ink at the semibold weight, and the only part a long filter cuts.
79
+ */
80
+ .crewlet-filter-pill__field,
81
+ .crewlet-filter-pill__operator {
82
+ flex: none;
83
+ color: var(--color-text-secondary);
84
+ }
85
+
86
+ .crewlet-filter-pill__value {
87
+ min-width: 0;
88
+ overflow: hidden;
89
+ text-overflow: ellipsis;
90
+ color: var(--color-brand-accent-ink);
91
+ font-weight: var(--font-weight-semibold);
92
+ }
93
+
94
+ /*
95
+ * A glyph after the words (a popover's chevron) carries the value's ink: a
96
+ * grey glyph next to coloured text reads as two things.
97
+ */
98
+ .crewlet-filter-pill__words > svg {
99
+ flex: none;
100
+ color: var(--color-brand-accent-ink);
101
+ }
102
+
103
+ /*
104
+ * The remove control: as tall as the pill's inside, behind a hairline, in the
105
+ * pill's own ink. At the small control's own height it stood past the pill's
106
+ * inner edge and was cut off at the bottom.
107
+ *
108
+ * RAISED OVER ICONBUTTON'S OWN RULES (`.crewlet-icon-btn`, `--sm`), which
109
+ * carry the same weight as one class and can load after this sheet in a
110
+ * bundle: at equal weight the control kept its 26px height and its corner
111
+ * radius in a 26px pill with a 1px edge, overran the pill by a pixel and lost
112
+ * the bottom of its focus ring. The child combinator is the extra weight, and
113
+ * a test holds it above every IconButton rule.
114
+ */
115
+ .crewlet-filter-pill > .crewlet-filter-pill__remove {
116
+ height: auto;
117
+ border-radius: 0;
118
+ border-inline-start: 1px solid var(--color-brand-accent-soft-strong);
119
+ color: var(--color-brand-accent-ink);
120
+ }
121
+
122
+ /*
123
+ * Its ring is drawn INSIDE it, like the words'. The pill clips to its own
124
+ * radius, so an outset ring is cut off on every edge the control touches.
125
+ */
126
+ .crewlet-filter-pill > .crewlet-filter-pill__remove:focus-visible {
127
+ outline-offset: var(--size-focus-ring-inset-offset);
128
+ }
129
+
130
+ @media (prefers-reduced-motion: reduce) {
131
+ .crewlet-filter-pill {
132
+ transition: none;
133
+ }
134
+ }
@@ -1,6 +1,6 @@
1
- export { FollowBanner } from '../chunk-K4IVKHKU.js';
1
+ export { FollowBanner } from '../chunk-JT7WRPZ6.js';
2
2
  import '../chunk-BPCY7ZID.js';
3
- import '../chunk-7QTPJDRF.js';
3
+ import '../chunk-DGXZ635L.js';
4
4
  import '../chunk-OMV5W53A.js';
5
5
  import '../chunk-XSPCITPN.js';
6
6
  import '../chunk-H5XTJ7GJ.js';
@@ -1,18 +1,18 @@
1
1
  import '../chunk-FFMCMSJB.js';
2
- export { HuePicker, HueSwatch } from '../chunk-YDXX5UB7.js';
2
+ export { HuePicker, HueSwatch } from '../chunk-AQIFKLXY.js';
3
3
  import '../chunk-AYKXMIOR.js';
4
- import '../chunk-MJTBINIY.js';
5
- import '../chunk-MVQLCSAC.js';
4
+ import '../chunk-TYIHFDMP.js';
5
+ import '../chunk-IPUEVTRJ.js';
6
6
  import '../chunk-EGMQURBR.js';
7
7
  import '../chunk-WIATRXEJ.js';
8
8
  import '../chunk-MLDTLZAO.js';
9
- import '../chunk-2566PSQ3.js';
10
- import '../chunk-7QTPJDRF.js';
9
+ import '../chunk-OQG4P5KU.js';
10
+ import '../chunk-DGXZ635L.js';
11
11
  import '../chunk-OMV5W53A.js';
12
12
  import '../chunk-2YTOOH3A.js';
13
13
  import '../chunk-XSPCITPN.js';
14
14
  import '../chunk-H5XTJ7GJ.js';
15
- import '../chunk-NUZHC6MM.js';
16
15
  import '../chunk-UAUP6XGK.js';
16
+ import '../chunk-NUZHC6MM.js';
17
17
  import '../chunk-UT6CW3C7.js';
18
18
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { INLINE_EDITOR_LABELS, InlineEditor } from '../chunk-QBWNGNF7.js';
1
+ export { INLINE_EDITOR_LABELS, InlineEditor } from '../chunk-4DL2BQJE.js';
2
2
  import '../chunk-VLGGLLKH.js';
3
3
  import '../chunk-WIATRXEJ.js';
4
4
  import '../chunk-EJNJMHQG.js';
5
5
  import '../chunk-RE3FBGQQ.js';
6
6
  import '../chunk-ANTAQAR4.js';
7
- import '../chunk-7QTPJDRF.js';
7
+ import '../chunk-DGXZ635L.js';
8
8
  import '../chunk-OMV5W53A.js';
9
9
  import '../chunk-XSPCITPN.js';
10
10
  import '../chunk-H5XTJ7GJ.js';
@@ -1,9 +1,9 @@
1
- export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea, foldLineBreaks } from '../chunk-DCQ2VTBB.js';
1
+ export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea, foldLineBreaks } from '../chunk-ETSF7SU6.js';
2
2
  import '../chunk-PGCLHYVP.js';
3
3
  import '../chunk-PQADV6P6.js';
4
4
  import '../chunk-2G355KDJ.js';
5
5
  import '../chunk-H5XTJ7GJ.js';
6
- import '../chunk-NUZHC6MM.js';
7
6
  import '../chunk-UAUP6XGK.js';
7
+ import '../chunk-NUZHC6MM.js';
8
8
  import '../chunk-UT6CW3C7.js';
9
9
  import '../chunk-ODEQTPFM.js';
@@ -1,13 +1,13 @@
1
- export { LinkInterstitial, openExternal } from '../chunk-KQGOVBGF.js';
1
+ export { LinkInterstitial, openExternal } from '../chunk-JD7P2GJP.js';
2
+ import '../chunk-C667GCU7.js';
2
3
  import '../chunk-PLL7ZJHY.js';
3
- import '../chunk-I24FI46B.js';
4
4
  import '../chunk-BPCY7ZID.js';
5
5
  import '../chunk-PQADV6P6.js';
6
- import '../chunk-7QTPJDRF.js';
6
+ import '../chunk-DGXZ635L.js';
7
7
  import '../chunk-OMV5W53A.js';
8
8
  import '../chunk-XSPCITPN.js';
9
9
  import '../chunk-H5XTJ7GJ.js';
10
- import '../chunk-NUZHC6MM.js';
11
10
  import '../chunk-UAUP6XGK.js';
11
+ import '../chunk-NUZHC6MM.js';
12
12
  import '../chunk-UT6CW3C7.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -1,15 +1,15 @@
1
- export { ListInput, withDraft } from '../chunk-KZ3UXNN7.js';
1
+ export { ListInput, withDraft } from '../chunk-H32JW6CZ.js';
2
2
  import '../chunk-MPVMB2DV.js';
3
3
  import '../chunk-ANTAQAR4.js';
4
- import '../chunk-DCQ2VTBB.js';
4
+ import '../chunk-ETSF7SU6.js';
5
5
  import '../chunk-PGCLHYVP.js';
6
6
  import '../chunk-PQADV6P6.js';
7
7
  import '../chunk-2G355KDJ.js';
8
- import '../chunk-7QTPJDRF.js';
8
+ import '../chunk-DGXZ635L.js';
9
9
  import '../chunk-OMV5W53A.js';
10
10
  import '../chunk-XSPCITPN.js';
11
11
  import '../chunk-H5XTJ7GJ.js';
12
- import '../chunk-NUZHC6MM.js';
13
12
  import '../chunk-UAUP6XGK.js';
13
+ import '../chunk-NUZHC6MM.js';
14
14
  import '../chunk-UT6CW3C7.js';
15
15
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
- export { LogoSlot, LogoSlotGroup } from '../chunk-2T32N2WD.js';
2
- import '../chunk-2JHGPXYG.js';
1
+ export { LogoSlot, LogoSlotGroup } from '../chunk-YUHKRRWO.js';
2
+ import '../chunk-KQWJWTED.js';
3
3
  import '../chunk-KWLH45YC.js';
4
4
  import '../chunk-7W3LYIOC.js';
5
5
  import '../chunk-I5OIKDX2.js';
6
6
  import '../chunk-WIATRXEJ.js';
7
- import '../chunk-7QTPJDRF.js';
7
+ import '../chunk-DGXZ635L.js';
8
8
  import '../chunk-XSPCITPN.js';
9
9
  import '../chunk-UT6CW3C7.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,18 +1,18 @@
1
- export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-LUSRKTX6.js';
1
+ export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-ERFXYGRF.js';
2
2
  import '../chunk-NR4CPM4T.js';
3
3
  import '../chunk-25AZQ3GZ.js';
4
- import '../chunk-MJTBINIY.js';
5
- import '../chunk-MVQLCSAC.js';
4
+ import '../chunk-TYIHFDMP.js';
5
+ import '../chunk-IPUEVTRJ.js';
6
6
  import '../chunk-EGMQURBR.js';
7
7
  import '../chunk-WIATRXEJ.js';
8
8
  import '../chunk-MLDTLZAO.js';
9
- import '../chunk-2566PSQ3.js';
10
- import '../chunk-7QTPJDRF.js';
9
+ import '../chunk-OQG4P5KU.js';
10
+ import '../chunk-DGXZ635L.js';
11
11
  import '../chunk-OMV5W53A.js';
12
12
  import '../chunk-2YTOOH3A.js';
13
13
  import '../chunk-XSPCITPN.js';
14
14
  import '../chunk-H5XTJ7GJ.js';
15
- import '../chunk-NUZHC6MM.js';
16
15
  import '../chunk-UAUP6XGK.js';
16
+ import '../chunk-NUZHC6MM.js';
17
17
  import '../chunk-UT6CW3C7.js';
18
18
  import '../chunk-ODEQTPFM.js';
@@ -141,6 +141,15 @@ export interface MenuProps {
141
141
  */
142
142
  trailingIcon?: ReactNode;
143
143
  triggerVariant?: ButtonVariant | undefined;
144
+ /**
145
+ * The trigger IS THE VALUE it changes: a status chosen in place, a face
146
+ * that opens a picker, in a table cell or a properties rail. Its words
147
+ * start on its box's line ([Button]'s `flush`), so it lines up with the
148
+ * plain values beside it, and it takes the surrounding text's size, weight
149
+ * and ink rather than a button label's, so a writer's row reads as a
150
+ * reader's. Its hover ground and focus ring still say it is a control.
151
+ */
152
+ valueTrigger?: boolean | undefined;
144
153
  /** -1 for a pointer-only trigger whose actions the keyboard reaches another way. */
145
154
  triggerTabIndex?: number | undefined;
146
155
  open?: boolean | undefined;
@@ -162,5 +171,5 @@ export interface MenuProps {
162
171
  header?: ReactNode;
163
172
  className?: string | undefined;
164
173
  }
165
- export declare function Menu({ label, items, icon, trigger, trailingIcon, triggerVariant, triggerTabIndex, open: controlled, onOpenChange, align, width, renderTrigger, header, className, }: MenuProps): import("react").JSX.Element;
174
+ export declare function Menu({ label, items, icon, trigger, trailingIcon, triggerVariant, valueTrigger, triggerTabIndex, open: controlled, onOpenChange, align, width, renderTrigger, header, className, }: MenuProps): import("react").JSX.Element;
166
175
  export {};
@@ -1,9 +1,9 @@
1
- export { Menu } from '../chunk-2566PSQ3.js';
2
- import '../chunk-7QTPJDRF.js';
1
+ export { Menu } from '../chunk-OQG4P5KU.js';
2
+ import '../chunk-DGXZ635L.js';
3
3
  import '../chunk-OMV5W53A.js';
4
4
  import '../chunk-XSPCITPN.js';
5
5
  import '../chunk-H5XTJ7GJ.js';
6
- import '../chunk-NUZHC6MM.js';
7
6
  import '../chunk-UAUP6XGK.js';
7
+ import '../chunk-NUZHC6MM.js';
8
8
  import '../chunk-UT6CW3C7.js';
9
9
  import '../chunk-ODEQTPFM.js';
@@ -286,3 +286,15 @@
286
286
  animation: none;
287
287
  }
288
288
  }
289
+
290
+ /*
291
+ * A TRIGGER THAT IS THE VALUE it changes (`valueTrigger`): the surrounding
292
+ * text's size, weight and ink, not a button label's, so a writer's row reads
293
+ * as a reader's. Its start is Button's `flush`. Raised over the button's own
294
+ * size and variant rules, which carry one class each.
295
+ */
296
+ .crewlet-menu-anchor > .crewlet-btn.crewlet-menu__value-trigger {
297
+ font-size: inherit;
298
+ font-weight: inherit;
299
+ color: inherit;
300
+ }