@crewlethq/ui 0.45.0 → 0.47.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 (123) hide show
  1. package/README.md +28 -0
  2. package/dist/AgentHandoffPanel/index.js +6 -3
  3. package/dist/AppShell/index.js +3 -3
  4. package/dist/ArrangeList/index.js +5 -3
  5. package/dist/ArtifactBar/index.js +5 -5
  6. package/dist/AvatarPicker/index.js +6 -6
  7. package/dist/Canvas/index.js +1 -1
  8. package/dist/CanvasBoard/index.js +1 -1
  9. package/dist/CanvasToolbar/index.js +1 -1
  10. package/dist/CatalogTile/index.js +1 -1
  11. package/dist/{CatalogTile-VPSLCKJE.css → CatalogTile-26XN7L2A.css} +13 -7
  12. package/dist/CharacterCount/CharacterCount.d.ts +63 -0
  13. package/dist/CharacterCount/index.d.ts +3 -0
  14. package/dist/CharacterCount/index.js +4 -0
  15. package/dist/CharacterCount-S735DICR.css +29 -0
  16. package/dist/Checkbox/index.js +5 -2
  17. package/dist/Combobox/index.js +5 -3
  18. package/dist/CommandPalette/index.js +6 -4
  19. package/dist/CommentThread/index.js +6 -3
  20. package/dist/Composer/index.js +5 -2
  21. package/dist/ConfirmField/index.js +5 -2
  22. package/dist/DataTable/index.js +8 -6
  23. package/dist/DataView/index.js +9 -7
  24. package/dist/DateTimePicker/index.js +1 -1
  25. package/dist/DocTabsEditor/index.js +5 -4
  26. package/dist/EditingStatus/index.js +2 -1
  27. package/dist/{Editor-AMO2B54T.js → Editor-MLGK3KOG.js} +6 -4
  28. package/dist/FollowBanner/index.js +2 -2
  29. package/dist/HuePicker/index.js +5 -5
  30. package/dist/InlineEditor/InlineEditor.d.ts +86 -0
  31. package/dist/InlineEditor/index.d.ts +3 -0
  32. package/dist/InlineEditor/index.js +9 -0
  33. package/dist/InlineEditor-W55DDKML.css +72 -0
  34. package/dist/Input/FormField.d.ts +27 -1
  35. package/dist/Input/Textarea.d.ts +16 -0
  36. package/dist/Input/index.d.ts +3 -2
  37. package/dist/Input/index.js +4 -1
  38. package/dist/{Input-OQZBCRX5.css → Input-VDSV7VWJ.css} +19 -0
  39. package/dist/LinkInterstitial/index.js +3 -3
  40. package/dist/List/List.d.ts +16 -1
  41. package/dist/List/index.js +1 -1
  42. package/dist/{List-YHLIZFK4.css → List-XY445TKY.css} +31 -0
  43. package/dist/ListInput/ListInput.d.ts +87 -2
  44. package/dist/ListInput/index.d.ts +2 -2
  45. package/dist/ListInput/index.js +5 -2
  46. package/dist/{ListInput-O7LJKOIG.css → ListInput-WUP2YITQ.css} +147 -2
  47. package/dist/MarkdownEditor/index.js +5 -5
  48. package/dist/Menu/index.js +2 -2
  49. package/dist/MergeConflicts/index.js +5 -5
  50. package/dist/Modal/index.js +2 -2
  51. package/dist/PresenterView/index.js +3 -3
  52. package/dist/PrincipalPicker/index.js +6 -4
  53. package/dist/RelatedRow/index.js +2 -2
  54. package/dist/RichEditor/index.js +1 -1
  55. package/dist/SegmentedControl/index.js +4 -4
  56. package/dist/Select/index.js +1 -1
  57. package/dist/ShareDialog/index.js +3 -3
  58. package/dist/SheetColumnEditor/index.js +10 -8
  59. package/dist/SheetGrid/index.js +3 -3
  60. package/dist/SlideCompare/index.js +1 -1
  61. package/dist/SlideFilmstrip/index.js +3 -3
  62. package/dist/Switcher/index.js +5 -4
  63. package/dist/Tabs/index.js +3 -3
  64. package/dist/Text/Text.d.ts +8 -0
  65. package/dist/Text/index.js +1 -1
  66. package/dist/{Text-S3Q4O3IG.css → Text-XOCOU34C.css} +9 -0
  67. package/dist/ThemeSwitcher/index.js +5 -5
  68. package/dist/TileGrid/index.js +1 -1
  69. package/dist/{TileGrid-I6LNYD2H.css → TileGrid-UYMVVVJK.css} +30 -0
  70. package/dist/TimeWindowPicker/index.js +5 -3
  71. package/dist/TreeCanvas/index.js +1 -1
  72. package/dist/VersionCompare/index.js +5 -5
  73. package/dist/{chunk-5AHDGYKN.js → chunk-2KQR6JKE.js} +2 -2
  74. package/dist/{chunk-4DIKLY53.js → chunk-32TGEMQQ.js} +1 -1
  75. package/dist/{chunk-QOP7QYUW.js → chunk-34RMTXDZ.js} +1 -1
  76. package/dist/{chunk-Q7HLZH32.js → chunk-3QSKDZR5.js} +1 -1
  77. package/dist/{chunk-BVFMLSE3.js → chunk-5EBDOE3C.js} +1 -1
  78. package/dist/{chunk-W53CWWX3.js → chunk-627KFRON.js} +2 -2
  79. package/dist/{chunk-AGNZIT3Z.js → chunk-6EBGPCAW.js} +1 -1
  80. package/dist/{chunk-BF5WV7NM.js → chunk-6FVGSWLS.js} +1 -1
  81. package/dist/{chunk-7CXGSS7D.js → chunk-6R5BSA36.js} +1 -1
  82. package/dist/{chunk-NF6SWHQI.js → chunk-7JED2NYP.js} +2 -2
  83. package/dist/chunk-7P336RA5.js +147 -0
  84. package/dist/{chunk-GI3S6RMM.js → chunk-AS2BMY3E.js} +3 -3
  85. package/dist/{chunk-N3SHQ3VU.js → chunk-CWKWMIIJ.js} +1 -1
  86. package/dist/{chunk-KKUJSMLF.js → chunk-DY4DQ7EB.js} +1 -1
  87. package/dist/{chunk-ZI5G5RS7.js → chunk-EXRRTKWT.js} +59 -9
  88. package/dist/{chunk-EY7LACIR.js → chunk-F57N6ZJG.js} +1 -1
  89. package/dist/chunk-ICVS3U4S.js +436 -0
  90. package/dist/{chunk-KA75QPFM.js → chunk-ILFEWRLG.js} +1 -1
  91. package/dist/{chunk-JF3TJUBU.js → chunk-JWNYI7UD.js} +1 -1
  92. package/dist/{chunk-GPIRKHGS.js → chunk-LIJQT74Y.js} +1 -1
  93. package/dist/{chunk-TC7DJTXI.js → chunk-MULOZYHL.js} +2 -0
  94. package/dist/{chunk-FV6H7H5I.js → chunk-MUQJCH2Y.js} +4 -4
  95. package/dist/{chunk-ZUTUI27P.js → chunk-N4GBDK4L.js} +1 -1
  96. package/dist/{chunk-Y4GXCKOC.js → chunk-OHJ2R2X4.js} +3 -3
  97. package/dist/{chunk-OWIGEE2Y.js → chunk-OO7QJCJQ.js} +2 -2
  98. package/dist/{chunk-MVGCZ655.js → chunk-OOJTPR7N.js} +1 -1
  99. package/dist/{chunk-NNTO3TNC.js → chunk-Q6CQMS6R.js} +1 -1
  100. package/dist/{chunk-IKBK4A5O.js → chunk-QP2P6GDQ.js} +1 -1
  101. package/dist/{chunk-U44WGRFW.js → chunk-RFPCHMSX.js} +1 -1
  102. package/dist/{chunk-LSRQJDGR.js → chunk-SEPSXOGJ.js} +1 -1
  103. package/dist/{chunk-MCOC3KQA.js → chunk-SQ4JFHO7.js} +1 -1
  104. package/dist/{chunk-DL5ERIFF.js → chunk-SS4XCUUJ.js} +2 -2
  105. package/dist/{chunk-NZWX27J7.js → chunk-TDQ262TB.js} +19 -3
  106. package/dist/{chunk-5GNA4RKP.js → chunk-TGSIVB6H.js} +1 -1
  107. package/dist/{chunk-6MAQ2SVP.js → chunk-TWZEWXNW.js} +3 -3
  108. package/dist/{chunk-UO5VJHWP.js → chunk-U4HOKU6P.js} +2 -2
  109. package/dist/{chunk-X6IJ7DAX.js → chunk-VKFG4FLE.js} +2 -2
  110. package/dist/chunk-XCUUI7E7.js +62 -0
  111. package/dist/{chunk-ENHLVF6Q.js → chunk-XS2FJVMT.js} +1 -1
  112. package/dist/{chunk-FG243QHY.js → chunk-ZCIL5IHU.js} +1 -1
  113. package/dist/generated/index.d.ts +2 -0
  114. package/dist/generated/index.js +76 -74
  115. package/dist/index.js +76 -74
  116. package/dist/styles.css +362 -15
  117. package/package.json +3 -3
  118. package/dist/chunk-NMYGJJJK.js +0 -263
  119. package/dist/{chunk-6IPEPSB5.js → chunk-245IXG5P.js} +0 -0
  120. package/dist/{chunk-OED6LUWE.js → chunk-4A4QG6UC.js} +1 -1
  121. package/dist/{chunk-FYINAYAJ.js → chunk-6AKG2VLR.js} +1 -1
  122. package/dist/{chunk-E6HXFFWO.js → chunk-ISDEXIXH.js} +1 -1
  123. package/dist/{chunk-PCI7ZJ6Z.js → chunk-TMM32U7D.js} +1 -1
package/dist/styles.css CHANGED
@@ -7006,7 +7006,7 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7006
7006
  }
7007
7007
 
7008
7008
 
7009
- /* CatalogTile-VPSLCKJE.css */
7009
+ /* CatalogTile-26XN7L2A.css */
7010
7010
  /*
7011
7011
  * CatalogTile: mark, name and state, one sentence, and a foot with a quiet
7012
7012
  * fact and one action.
@@ -7165,20 +7165,25 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7165
7165
  height: var(--size-row-sm);
7166
7166
  }
7167
7167
 
7168
+ /*
7169
+ * THE NAME IS NEVER CUT. It is what the tile is: "C…" names nothing. Where
7170
+ * the line is short of room the state and the fact wrap under the name rather
7171
+ * than squeezing it, and a name longer than the whole line wraps at a word.
7172
+ * The grid folds a compact tile's tracks before it comes to that (see
7173
+ * TileGrid.css), so the wrap is the fallback and not the layout.
7174
+ */
7168
7175
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__title {
7169
7176
  flex: 1 1 auto;
7170
7177
  flex-direction: row;
7178
+ flex-wrap: wrap;
7171
7179
  align-items: center;
7172
- gap: var(--spacing-2);
7180
+ gap: 0 var(--spacing-2);
7173
7181
  padding-top: 0;
7174
7182
  }
7175
7183
 
7176
7184
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__name {
7177
- flex: 0 1 auto;
7178
- min-width: 0;
7179
- overflow: hidden;
7180
- text-overflow: ellipsis;
7181
- white-space: nowrap;
7185
+ flex: 0 0 auto;
7186
+ max-width: 100%;
7182
7187
  }
7183
7188
 
7184
7189
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__status {
@@ -7186,7 +7191,8 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7186
7191
  }
7187
7192
 
7188
7193
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__meta {
7189
- flex: 0 1 auto;
7194
+ flex: none;
7195
+ max-width: 100%;
7190
7196
  }
7191
7197
 
7192
7198
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__description {
@@ -7224,6 +7230,38 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7224
7230
  }
7225
7231
 
7226
7232
 
7233
+ /* CharacterCount-S735DICR.css */
7234
+ /*
7235
+ * The count of a limited field (CharacterCount.tsx): the help line's own small
7236
+ * step, in its quiet ink until the limit is close.
7237
+ */
7238
+
7239
+ .crewlet-character-count {
7240
+ flex: none;
7241
+ font-size: var(--font-size-xs);
7242
+ line-height: var(--font-line-height-normal);
7243
+ /* Figures of one width, so the count does not shift as a digit changes. */
7244
+ font-variant-numeric: tabular-nums;
7245
+ color: var(--color-text-tertiary);
7246
+ white-space: nowrap;
7247
+ }
7248
+
7249
+ .crewlet-character-count__of {
7250
+ margin-inline: 0.15em;
7251
+ }
7252
+
7253
+ .crewlet-character-count--near {
7254
+ color: var(--color-feedback-warning-ink);
7255
+ }
7256
+
7257
+ /* Past the limit the count is the refusal's ink and weight, so the number
7258
+ that says what to fix is the loudest thing on the line. */
7259
+ .crewlet-character-count--over {
7260
+ color: var(--color-feedback-danger-ink);
7261
+ font-weight: var(--font-weight-medium);
7262
+ }
7263
+
7264
+
7227
7265
  /* CharacterPicker-ZEYIKUNQ.css */
7228
7266
  /*
7229
7267
  * The grid of characters.
@@ -16487,7 +16525,82 @@ a.crewlet-icon-btn {
16487
16525
  }
16488
16526
 
16489
16527
 
16490
- /* Input-OQZBCRX5.css */
16528
+ /* InlineEditor-W55DDKML.css */
16529
+ /*
16530
+ * InlineEditor: one record's fields, then a bar. It draws no surface of its
16531
+ * own, so it reads as the card or the section it is opened in rather than as
16532
+ * a form dropped on top of it.
16533
+ */
16534
+
16535
+ .crewlet-inline-editor {
16536
+ display: flex;
16537
+ flex-direction: column;
16538
+ gap: var(--spacing-3);
16539
+ min-width: 0;
16540
+ margin: 0;
16541
+ }
16542
+
16543
+ .crewlet-inline-editor__fields {
16544
+ display: flex;
16545
+ flex-direction: column;
16546
+ gap: var(--spacing-4);
16547
+ min-width: 0;
16548
+ }
16549
+
16550
+ .crewlet-inline-editor__error {
16551
+ font-size: var(--font-size-sm);
16552
+ line-height: var(--font-line-height-normal);
16553
+ color: var(--color-feedback-danger-ink);
16554
+ }
16555
+
16556
+ /*
16557
+ * THE BAR: the status at its start, the two controls at its end, on one line
16558
+ * where there is room. On a narrow card it wraps whole, the controls keeping
16559
+ * their order at the end, so Save is never the control that falls off.
16560
+ */
16561
+ .crewlet-inline-editor__bar {
16562
+ display: flex;
16563
+ flex-wrap: wrap;
16564
+ align-items: center;
16565
+ justify-content: space-between;
16566
+ gap: var(--spacing-2) var(--spacing-3);
16567
+ padding-top: var(--spacing-3);
16568
+ border-top-width: 1px;
16569
+ border-top-style: solid;
16570
+ border-top-color: var(--color-border-default);
16571
+ }
16572
+
16573
+ .crewlet-inline-editor__start,
16574
+ .crewlet-inline-editor__end {
16575
+ display: inline-flex;
16576
+ align-items: center;
16577
+ gap: var(--spacing-2);
16578
+ min-width: 0;
16579
+ }
16580
+
16581
+ .crewlet-inline-editor__end {
16582
+ margin-inline-start: auto;
16583
+ }
16584
+
16585
+ .crewlet-inline-editor__hint {
16586
+ display: inline-flex;
16587
+ align-items: center;
16588
+ gap: var(--spacing-1);
16589
+ font-size: var(--font-size-xs);
16590
+ color: var(--color-text-tertiary);
16591
+ white-space: nowrap;
16592
+ }
16593
+
16594
+ /* A touch screen has no Mod+Enter to press: the hint goes where no keyboard
16595
+ is the main way in. */
16596
+ @media (hover: none) and (pointer: coarse) {
16597
+ .crewlet-inline-editor__hint {
16598
+ display: none;
16599
+ }
16600
+ }
16601
+
16602
+
16603
+ /* Input-VDSV7VWJ.css */
16491
16604
  /*
16492
16605
  * The form row: Input, Textarea, Label, FormField, FormRow, FormSection and
16493
16606
  * ReadOnlyField.
@@ -17051,6 +17164,25 @@ a.crewlet-icon-btn {
17051
17164
  color: var(--color-text-tertiary);
17052
17165
  }
17053
17166
 
17167
+ /*
17168
+ * THE HELP LINE WITH A COUNT AT ITS END (`limit`). The help wraps in the room
17169
+ * the count leaves, and the count keeps its width and its line: it is the
17170
+ * figure a writer glances at, so it does not move as the sentence beside it
17171
+ * wraps.
17172
+ */
17173
+ .crewlet-form-field__meta {
17174
+ display: flex;
17175
+ align-items: flex-start;
17176
+ justify-content: space-between;
17177
+ gap: var(--spacing-3);
17178
+ }
17179
+
17180
+ .crewlet-form-field__meta > .crewlet-form-field__helper,
17181
+ .crewlet-form-field__meta-spacer {
17182
+ flex: 1;
17183
+ min-width: 0;
17184
+ }
17185
+
17054
17186
  /* SHOWN ONLY WHILE THE FIELD HAS FOCUS (`helperOnFocus`): a dense form reads as
17055
17187
  labels and values at rest, and the sentence appears under the field the
17056
17188
  reader is in. Still described, so a screen reader hears it on entry. */
@@ -17801,7 +17933,7 @@ a.crewlet-icon-btn {
17801
17933
  }
17802
17934
 
17803
17935
 
17804
- /* List-YHLIZFK4.css */
17936
+ /* List-XY445TKY.css */
17805
17937
  /*
17806
17938
  * The non-tabular list. One row recipe, four framings.
17807
17939
  *
@@ -17970,6 +18102,37 @@ a.crewlet-icon-btn {
17970
18102
  color: var(--color-text-tertiary);
17971
18103
  }
17972
18104
 
18105
+ /*
18106
+ * COMPACT: a row a small step tall, in the body's size at its normal leading,
18107
+ * so a list of statements that each run to two lines still stands on one
18108
+ * screen. Only the rhythm changes; the number column, the rule between rows
18109
+ * and the inset a card gives them stay where they were.
18110
+ */
18111
+ .crewlet-list--compact .crewlet-list__row {
18112
+ min-height: 0;
18113
+ padding-block: var(--spacing-1);
18114
+ }
18115
+
18116
+ .crewlet-list--compact.crewlet-list--numbered-divided .crewlet-list__row {
18117
+ padding-block: var(--spacing-2);
18118
+ font-size: var(--font-size-sm);
18119
+ line-height: var(--font-line-height-normal);
18120
+ text-wrap: pretty;
18121
+ }
18122
+
18123
+ /*
18124
+ * THE WORDS AT A READING MEASURE (`measure`), while the row and its rule
18125
+ * still span the list. In a card the width of the page a policy otherwise
18126
+ * runs to some 150 characters a line. A maximum, never a width.
18127
+ */
18128
+ .crewlet-list--measure-normal .crewlet-list__content {
18129
+ max-inline-size: var(--size-measure);
18130
+ }
18131
+
18132
+ .crewlet-list--measure-wide .crewlet-list__content {
18133
+ max-inline-size: var(--size-measure-wide);
18134
+ }
18135
+
17973
18136
  /* ---- States ------------------------------------------------------------ */
17974
18137
 
17975
18138
  /*
@@ -18077,7 +18240,7 @@ a.crewlet-icon-btn {
18077
18240
  }
18078
18241
 
18079
18242
 
18080
- /* ListInput-O7LJKOIG.css */
18243
+ /* ListInput-WUP2YITQ.css */
18081
18244
  /*
18082
18245
  * ListInput: an ordered list of sentences, written in the box at the top and
18083
18246
  * listed under it.
@@ -18093,6 +18256,7 @@ a.crewlet-icon-btn {
18093
18256
  .crewlet-list-input__add {
18094
18257
  display: flex;
18095
18258
  align-items: flex-start;
18259
+ gap: var(--spacing-2);
18096
18260
  }
18097
18261
 
18098
18262
  .crewlet-list-input__add > * {
@@ -18101,6 +18265,8 @@ a.crewlet-icon-btn {
18101
18265
  }
18102
18266
 
18103
18267
  .crewlet-list-input__items {
18268
+ /* The rows lay themselves out by the list's own width (see NARROW below). */
18269
+ container: crewlet-list-input / inline-size;
18104
18270
  list-style: none;
18105
18271
  margin: 0;
18106
18272
  padding: 0;
@@ -18149,10 +18315,75 @@ a.crewlet-icon-btn {
18149
18315
  border-block-end-style: none;
18150
18316
  }
18151
18317
 
18152
- .crewlet-list-input__item > .crewlet-input,
18153
- .crewlet-list-input__item > .crewlet-textarea {
18318
+ /*
18319
+ * THE FIELD TAKES THE ROW'S WIDTH, and holds the control with whatever is
18320
+ * said under it (its count, its refusal) as one column, so a note under an
18321
+ * item sits under the item's words and not under its number or its buttons.
18322
+ */
18323
+ .crewlet-list-input__field {
18324
+ display: flex;
18154
18325
  flex: 1;
18326
+ flex-direction: column;
18327
+ min-width: 0;
18328
+ }
18329
+
18330
+ .crewlet-list-input__field > .crewlet-input,
18331
+ .crewlet-list-input__field > .crewlet-textarea,
18332
+ .crewlet-list-input__field > .crewlet-textarea-shell {
18333
+ width: 100%;
18334
+ min-width: 0;
18335
+ }
18336
+
18337
+ /* What is said under one item: its refusal at the start, its count at the end. */
18338
+ .crewlet-list-input__note {
18339
+ display: flex;
18340
+ align-items: flex-start;
18341
+ justify-content: space-between;
18342
+ gap: var(--spacing-3);
18343
+ padding-bottom: var(--spacing-1);
18344
+ }
18345
+
18346
+ .crewlet-list-input__error {
18155
18347
  min-width: 0;
18348
+ font-size: var(--font-size-xs);
18349
+ line-height: var(--font-line-height-normal);
18350
+ color: var(--color-feedback-danger-ink);
18351
+ }
18352
+
18353
+ /*
18354
+ * THE ROW A REMOVED ITEM LEAVES (`undoRemove`): the item's own place in the
18355
+ * order, at a row's height and on the row's rule, saying what happened in the
18356
+ * quiet ink with Undo beside it, so the list does not close up over the place
18357
+ * an Undo would put it back.
18358
+ */
18359
+ .crewlet-list-input__removed {
18360
+ display: flex;
18361
+ align-items: center;
18362
+ gap: var(--spacing-2);
18363
+ padding: var(--spacing-1) var(--spacing-3);
18364
+ border-block-end-width: 1px;
18365
+ border-block-end-style: solid;
18366
+ border-block-end-color: var(--color-border-default);
18367
+ background: var(--color-surface-subtle);
18368
+ }
18369
+
18370
+ .crewlet-list-input__removed:last-child {
18371
+ border-block-end-style: none;
18372
+ }
18373
+
18374
+ .crewlet-list-input__removed-text {
18375
+ flex: 1;
18376
+ min-width: 0;
18377
+ font-size: var(--font-size-compact);
18378
+ color: var(--color-text-secondary);
18379
+ }
18380
+
18381
+ /* Where the new-item box was, once the list holds all it may. */
18382
+ .crewlet-list-input__full {
18383
+ margin: 0;
18384
+ font-size: var(--font-size-xs);
18385
+ line-height: var(--font-line-height-normal);
18386
+ color: var(--color-text-tertiary);
18156
18387
  }
18157
18388
 
18158
18389
  /*
@@ -18220,10 +18451,87 @@ a.crewlet-icon-btn {
18220
18451
  opacity: 1;
18221
18452
  }
18222
18453
 
18454
+ /*
18455
+ * THE GRIP (`reorderByDrag`) waits with the move pair: the pointer's way to
18456
+ * take hold of a row, shown under the pointer and while the row holds the
18457
+ * focus, in the quiet ink so the row's number stays the first mark on it.
18458
+ */
18459
+ .crewlet-list-input__handle {
18460
+ display: inline-flex;
18461
+ flex: none;
18462
+ align-items: center;
18463
+ justify-content: center;
18464
+ margin-inline-start: calc(var(--spacing-1) * -1);
18465
+ color: var(--color-text-tertiary);
18466
+ cursor: grab;
18467
+ opacity: 0;
18468
+ transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
18469
+ }
18470
+
18471
+ .crewlet-list-input__handle:active {
18472
+ cursor: grabbing;
18473
+ }
18474
+
18475
+ .crewlet-list-input__item:hover .crewlet-list-input__handle,
18476
+ .crewlet-list-input__item:focus-within .crewlet-list-input__handle {
18477
+ opacity: 1;
18478
+ }
18479
+
18480
+ /* The row being dragged keeps its place as an outline, so the list does not
18481
+ close up under the pointer and the reader can see where it came from. */
18482
+ .crewlet-list-input__item[data-reorder='dragging'] {
18483
+ outline-width: 1px;
18484
+ outline-style: dashed;
18485
+ outline-color: var(--color-border-strong);
18486
+ outline-offset: -1px;
18487
+ }
18488
+
18489
+ .crewlet-list-input__item[data-reorder='dragging'] > * {
18490
+ opacity: 0.4;
18491
+ }
18492
+
18223
18493
  @media (prefers-reduced-motion: reduce) {
18224
18494
  .crewlet-list-input__move {
18225
18495
  transition: none;
18226
18496
  }
18497
+
18498
+ .crewlet-list-input__handle {
18499
+ transition: none;
18500
+ }
18501
+ }
18502
+
18503
+ /* With a hidden legend the add control stands at the end of the box's row. */
18504
+ .crewlet-list-input__add-control {
18505
+ display: inline-flex;
18506
+ flex: none;
18507
+ align-self: center;
18508
+ }
18509
+
18510
+ /*
18511
+ * NARROW: THE WORDS GET THE ROW. Under 28rem a row's grip, number and three
18512
+ * buttons took half of it, so at a 390px phone each policy wrapped at some
18513
+ * twenty characters a line and eight of them stood 1500px tall. There the
18514
+ * row wraps: the number and the field share the first line, and the buttons
18515
+ * stand at the end of a second, under the words. By the list's own width,
18516
+ * not the window's, so a narrow column on a wide screen is narrow too.
18517
+ */
18518
+ @container crewlet-list-input (width < 28rem) {
18519
+ .crewlet-list-input__item {
18520
+ flex-wrap: wrap;
18521
+ row-gap: 0;
18522
+ }
18523
+
18524
+ .crewlet-list-input__item > .crewlet-list-input__field {
18525
+ flex-basis: calc(100% - var(--spacing-4) - var(--spacing-2));
18526
+ }
18527
+
18528
+ .crewlet-list-input__item--draggable > .crewlet-list-input__field {
18529
+ flex-basis: calc(100% - var(--spacing-4) * 2 - var(--spacing-2) * 2);
18530
+ }
18531
+
18532
+ .crewlet-list-input__item > .crewlet-list-input__actions {
18533
+ margin-inline-start: auto;
18534
+ }
18227
18535
  }
18228
18536
 
18229
18537
 
@@ -30463,7 +30771,7 @@ b.crewlet-switcher__match {
30463
30771
  }
30464
30772
 
30465
30773
 
30466
- /* Text-S3Q4O3IG.css */
30774
+ /* Text-XOCOU34C.css */
30467
30775
  /*
30468
30776
  * The type registers, one rule each.
30469
30777
  *
@@ -30532,6 +30840,15 @@ b.crewlet-switcher__match {
30532
30840
  color: var(--color-text-primary);
30533
30841
  }
30534
30842
 
30843
+ .crewlet-text--passage {
30844
+ font-size: var(--font-size-sm);
30845
+ line-height: var(--font-line-height-relaxed);
30846
+ color: var(--color-text-primary);
30847
+ white-space: pre-wrap;
30848
+ overflow-wrap: anywhere;
30849
+ text-wrap: pretty;
30850
+ }
30851
+
30535
30852
  .crewlet-text--cell {
30536
30853
  font-size: var(--font-size-compact);
30537
30854
  line-height: var(--font-line-height-snug);
@@ -31016,7 +31333,7 @@ b.crewlet-switcher__match {
31016
31333
  }
31017
31334
 
31018
31335
 
31019
- /* TileGrid-I6LNYD2H.css */
31336
+ /* TileGrid-UYMVVVJK.css */
31020
31337
  /*
31021
31338
  * TileGrid: tiles on a fixed track count that folds by the grid's own width.
31022
31339
  *
@@ -31070,6 +31387,36 @@ b.crewlet-switcher__match {
31070
31387
  }
31071
31388
  }
31072
31389
 
31390
+ /*
31391
+ * COMPACT TILES FOLD WIDER. A compact `CatalogTile` puts its mark, name,
31392
+ * state, fact and action on ONE line, which needs about 30rem; the folds above
31393
+ * are sized for a comfortable tile, whose parts stack. Measured at a 1024px
31394
+ * window, two compact tiles on 415px tracks cut the name to its first letter.
31395
+ * So a grid holding a compact tile folds where a track would be narrower than
31396
+ * 30rem, counting the gaps: two tracks need 61rem, three 92rem (folding
31397
+ * straight to one, as three always do), and four 123rem before they go to
31398
+ * two. Declared here, on the grid, because the grid chooses the track count
31399
+ * and the tile cannot.
31400
+ */
31401
+ @container crewlet-tile-grid (width < 123rem) {
31402
+ .crewlet-tile-grid[data-columns='4']:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
31403
+ --crewlet-tile-grid-tracks: 2;
31404
+ }
31405
+ }
31406
+
31407
+ @container crewlet-tile-grid (width < 92rem) {
31408
+ .crewlet-tile-grid[data-columns='3']:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
31409
+ --crewlet-tile-grid-tracks: 1;
31410
+ }
31411
+ }
31412
+
31413
+ @container crewlet-tile-grid (width < 61rem) {
31414
+ /* As specific as the two rules above and after them, so it wins at every count. */
31415
+ .crewlet-tile-grid[data-columns]:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
31416
+ --crewlet-tile-grid-tracks: 1;
31417
+ }
31418
+ }
31419
+
31073
31420
 
31074
31421
  /* TimeWindowPicker-I3HXC74I.css */
31075
31422
  /*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.45.0",
3
+ "version": "0.47.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.45.0",
46
- "@crewlethq/tokens": "0.45.0",
45
+ "@crewlethq/icons": "0.47.0",
46
+ "@crewlethq/tokens": "0.47.0",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",