@crewlethq/ui 0.44.0 → 0.46.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 (143) hide show
  1. package/README.md +34 -2
  2. package/dist/AccessDeniedCard/index.js +2 -2
  3. package/dist/AgentHandoffPanel/index.js +6 -3
  4. package/dist/AppShell/index.js +3 -3
  5. package/dist/ArrangeList/index.js +5 -3
  6. package/dist/ArtifactBar/index.js +5 -5
  7. package/dist/ArtifactCard/index.js +3 -3
  8. package/dist/AsideLayout/AsideLayout.d.ts +24 -0
  9. package/dist/AsideLayout/index.d.ts +3 -0
  10. package/dist/AsideLayout/index.js +2 -0
  11. package/dist/AsideLayout-TH5SQZNK.css +45 -0
  12. package/dist/AvatarPicker/index.js +6 -6
  13. package/dist/Canvas/index.js +1 -1
  14. package/dist/CanvasBoard/index.js +1 -1
  15. package/dist/CanvasToolbar/index.js +1 -1
  16. package/dist/CatalogTile/index.js +1 -1
  17. package/dist/{CatalogTile-VPSLCKJE.css → CatalogTile-26XN7L2A.css} +13 -7
  18. package/dist/CharacterCount/CharacterCount.d.ts +63 -0
  19. package/dist/CharacterCount/index.d.ts +3 -0
  20. package/dist/CharacterCount/index.js +4 -0
  21. package/dist/CharacterCount-S735DICR.css +29 -0
  22. package/dist/Checkbox/index.js +5 -2
  23. package/dist/Combobox/index.js +5 -3
  24. package/dist/CommandPalette/index.js +6 -4
  25. package/dist/CommentThread/index.js +7 -4
  26. package/dist/Composer/index.js +5 -2
  27. package/dist/ConfirmField/index.js +5 -2
  28. package/dist/DataGrid/index.js +2 -2
  29. package/dist/DataTable/index.js +8 -6
  30. package/dist/DataView/index.js +10 -8
  31. package/dist/DateTimePicker/index.js +1 -1
  32. package/dist/DocTabsEditor/index.js +5 -4
  33. package/dist/EditingStatus/index.js +2 -1
  34. package/dist/{Editor-FXO2JVWK.js → Editor-6FXHMW64.js} +5 -3
  35. package/dist/EmptyState/EmptyState.d.ts +9 -2
  36. package/dist/EmptyState/index.js +1 -1
  37. package/dist/{EmptyState-C6HRBGT7.css → EmptyState-7L4UAQBX.css} +34 -0
  38. package/dist/FollowBanner/index.js +2 -2
  39. package/dist/HuePicker/index.js +5 -5
  40. package/dist/InlineEditor/InlineEditor.d.ts +86 -0
  41. package/dist/InlineEditor/index.d.ts +3 -0
  42. package/dist/InlineEditor/index.js +9 -0
  43. package/dist/InlineEditor-W55DDKML.css +72 -0
  44. package/dist/Input/FormField.d.ts +18 -1
  45. package/dist/Input/Textarea.d.ts +16 -0
  46. package/dist/Input/index.d.ts +2 -2
  47. package/dist/Input/index.js +4 -1
  48. package/dist/{Input-OQZBCRX5.css → Input-VDSV7VWJ.css} +19 -0
  49. package/dist/LinkInterstitial/index.js +3 -3
  50. package/dist/List/List.d.ts +16 -1
  51. package/dist/List/index.js +1 -1
  52. package/dist/{List-YHLIZFK4.css → List-XY445TKY.css} +31 -0
  53. package/dist/ListInput/ListInput.d.ts +87 -2
  54. package/dist/ListInput/index.d.ts +2 -2
  55. package/dist/ListInput/index.js +5 -2
  56. package/dist/{ListInput-O7LJKOIG.css → ListInput-DP2CSJ22.css} +118 -2
  57. package/dist/MarkdownEditor/index.js +5 -5
  58. package/dist/Menu/index.js +2 -2
  59. package/dist/MergeConflicts/index.js +5 -5
  60. package/dist/Modal/index.js +2 -2
  61. package/dist/PresenterView/index.js +3 -3
  62. package/dist/PrincipalPicker/index.js +6 -4
  63. package/dist/RelatedRow/index.js +2 -2
  64. package/dist/RichEditor/index.js +1 -1
  65. package/dist/SegmentedControl/index.js +4 -4
  66. package/dist/Select/index.js +1 -1
  67. package/dist/ShareDialog/index.js +3 -3
  68. package/dist/SheetColumnEditor/index.js +10 -8
  69. package/dist/SheetGrid/index.js +4 -4
  70. package/dist/SlideCompare/index.js +1 -1
  71. package/dist/SlideFilmstrip/index.js +3 -3
  72. package/dist/Statement/Statement.d.ts +45 -0
  73. package/dist/Statement/index.d.ts +3 -0
  74. package/dist/Statement/index.js +4 -0
  75. package/dist/Statement-M4QDXIMO.css +53 -0
  76. package/dist/Switcher/index.js +5 -4
  77. package/dist/Tabs/index.js +3 -3
  78. package/dist/Text/Text.d.ts +8 -0
  79. package/dist/Text/index.js +1 -1
  80. package/dist/{Text-S3Q4O3IG.css → Text-XOCOU34C.css} +9 -0
  81. package/dist/ThemeSwitcher/index.js +5 -5
  82. package/dist/TileGrid/index.js +1 -1
  83. package/dist/{TileGrid-I6LNYD2H.css → TileGrid-UYMVVVJK.css} +30 -0
  84. package/dist/TimeWindowPicker/index.js +5 -3
  85. package/dist/TreeCanvas/index.js +1 -1
  86. package/dist/VersionCompare/index.js +6 -6
  87. package/dist/{chunk-5AHDGYKN.js → chunk-2KQR6JKE.js} +2 -2
  88. package/dist/{chunk-NVMZQ3Y4.js → chunk-2LPNWAN6.js} +2 -2
  89. package/dist/{chunk-XIDD7PJO.js → chunk-2MYSESZF.js} +1 -1
  90. package/dist/{chunk-MVGCZ655.js → chunk-2UVMIM2J.js} +1 -1
  91. package/dist/{chunk-NF6SWHQI.js → chunk-32MTQ6DN.js} +2 -2
  92. package/dist/{chunk-QOP7QYUW.js → chunk-34RMTXDZ.js} +1 -1
  93. package/dist/{chunk-Q7HLZH32.js → chunk-3QSKDZR5.js} +1 -1
  94. package/dist/{chunk-BVFMLSE3.js → chunk-5EBDOE3C.js} +1 -1
  95. package/dist/{chunk-BF5WV7NM.js → chunk-6FVGSWLS.js} +1 -1
  96. package/dist/chunk-7P336RA5.js +147 -0
  97. package/dist/{chunk-UAGDFEBG.js → chunk-DY4DQ7EB.js} +1 -1
  98. package/dist/{chunk-4DIKLY53.js → chunk-HBSR5DL6.js} +1 -1
  99. package/dist/{chunk-KA75QPFM.js → chunk-ILFEWRLG.js} +1 -1
  100. package/dist/{chunk-AACPFUZW.js → chunk-KOJKX3U6.js} +4 -4
  101. package/dist/chunk-KY65C4XS.js +12 -0
  102. package/dist/{chunk-FG243QHY.js → chunk-KZDMAQNJ.js} +1 -1
  103. package/dist/{chunk-TC7DJTXI.js → chunk-MULOZYHL.js} +2 -0
  104. package/dist/chunk-MZJKPTA5.js +36 -0
  105. package/dist/{chunk-ZUTUI27P.js → chunk-N4GBDK4L.js} +1 -1
  106. package/dist/{chunk-7CXGSS7D.js → chunk-O6H5XXVK.js} +1 -1
  107. package/dist/{chunk-RA2ULG6H.js → chunk-PPUR46MK.js} +10 -1
  108. package/dist/{chunk-GI3S6RMM.js → chunk-PWZT6CZY.js} +3 -3
  109. package/dist/{chunk-NNTO3TNC.js → chunk-Q6CQMS6R.js} +1 -1
  110. package/dist/{chunk-IKBK4A5O.js → chunk-QP2P6GDQ.js} +1 -1
  111. package/dist/{chunk-KV3ODJXH.js → chunk-QTMUKRTN.js} +1 -1
  112. package/dist/{chunk-W53CWWX3.js → chunk-RCKRJXFV.js} +2 -2
  113. package/dist/{chunk-IUQQGIHL.js → chunk-RFPCHMSX.js} +2 -2
  114. package/dist/{chunk-X6IJ7DAX.js → chunk-RL75QTNT.js} +2 -2
  115. package/dist/{chunk-N3SHQ3VU.js → chunk-RRPQMMCZ.js} +1 -1
  116. package/dist/{chunk-EY7LACIR.js → chunk-RWET7W22.js} +1 -1
  117. package/dist/{chunk-TVSHR35W.js → chunk-RWWLVDRE.js} +1 -1
  118. package/dist/{chunk-LSRQJDGR.js → chunk-SEPSXOGJ.js} +1 -1
  119. package/dist/{chunk-MCOC3KQA.js → chunk-SQ4JFHO7.js} +1 -1
  120. package/dist/chunk-SQZEVWVC.js +436 -0
  121. package/dist/{chunk-DL5ERIFF.js → chunk-SS4XCUUJ.js} +2 -2
  122. package/dist/{chunk-GPIRKHGS.js → chunk-T7DXSFUX.js} +1 -1
  123. package/dist/{chunk-NZWX27J7.js → chunk-TDQ262TB.js} +19 -3
  124. package/dist/{chunk-5GNA4RKP.js → chunk-TGSIVB6H.js} +1 -1
  125. package/dist/{chunk-UO5VJHWP.js → chunk-U4HOKU6P.js} +2 -2
  126. package/dist/chunk-XCUUI7E7.js +62 -0
  127. package/dist/{chunk-ENHLVF6Q.js → chunk-XS2FJVMT.js} +1 -1
  128. package/dist/{chunk-FV6H7H5I.js → chunk-YBJVIY5E.js} +4 -4
  129. package/dist/{chunk-6MAQ2SVP.js → chunk-YR3ZURBM.js} +3 -3
  130. package/dist/{chunk-ZI5G5RS7.js → chunk-Z734SV4E.js} +55 -8
  131. package/dist/{chunk-OWIGEE2Y.js → chunk-ZZCCNVF3.js} +3 -3
  132. package/dist/generated/index.d.ts +4 -0
  133. package/dist/generated/index.js +95 -91
  134. package/dist/index.js +95 -91
  135. package/dist/styles.css +472 -16
  136. package/package.json +3 -3
  137. package/dist/chunk-NMYGJJJK.js +0 -263
  138. package/dist/{chunk-VXCT6L3F.js → chunk-245IXG5P.js} +0 -0
  139. package/dist/{chunk-OED6LUWE.js → chunk-4A4QG6UC.js} +1 -1
  140. package/dist/{chunk-FYINAYAJ.js → chunk-6AKG2VLR.js} +1 -1
  141. package/dist/{chunk-E6HXFFWO.js → chunk-ISDEXIXH.js} +1 -1
  142. package/dist/{chunk-U2XAJONO.js → chunk-OKE5YSLD.js} +1 -1
  143. package/dist/{chunk-PCI7ZJ6Z.js → chunk-TMM32U7D.js} +1 -1
package/dist/styles.css CHANGED
@@ -3986,6 +3986,54 @@ a.crewlet-make-row__item:active {
3986
3986
  }
3987
3987
 
3988
3988
 
3989
+ /* AsideLayout-TH5SQZNK.css */
3990
+ /*
3991
+ * AsideLayout: a main column with an aside beside it from 56rem of its own
3992
+ * width, and after it below that (AsideLayout.tsx).
3993
+ */
3994
+
3995
+ .crewlet-aside-layout {
3996
+ container-type: inline-size;
3997
+ min-width: 0;
3998
+ }
3999
+
4000
+ .crewlet-aside-layout__columns {
4001
+ display: grid;
4002
+ grid-template-columns: minmax(0, 1fr);
4003
+ align-items: start;
4004
+ gap: var(--spacing-7);
4005
+ }
4006
+
4007
+ /* EACH COLUMN IS A STACK one step apart, so the blocks in it stand apart
4008
+ evenly without each carrying a margin of its own. */
4009
+ .crewlet-aside-layout__main,
4010
+ .crewlet-aside-layout__aside {
4011
+ display: flex;
4012
+ flex-direction: column;
4013
+ gap: var(--spacing-6);
4014
+ min-width: 0;
4015
+ }
4016
+
4017
+ /* FOLLOWING THE MAIN COLUMN, the aside is set off by one hairline, so its
4018
+ facts read as about the page rather than as more of it. */
4019
+ .crewlet-aside-layout__aside {
4020
+ padding-top: var(--spacing-6);
4021
+ border-top: 1px solid var(--color-border-default);
4022
+ }
4023
+
4024
+ @container (min-width: 56rem) {
4025
+ .crewlet-aside-layout__columns {
4026
+ grid-template-columns: minmax(0, 1fr) var(--crewlet-aside-layout-aside, 18rem);
4027
+ gap: var(--spacing-8);
4028
+ }
4029
+
4030
+ .crewlet-aside-layout__aside {
4031
+ padding-top: 0;
4032
+ border-top: 0;
4033
+ }
4034
+ }
4035
+
4036
+
3989
4037
  /* AuthLayout-ODHBUPHQ.css */
3990
4038
  /*
3991
4039
  * The sign-in page: one narrow column near the top of the window.
@@ -6958,7 +7006,7 @@ a.crewlet-breadcrumb__crumb:focus-visible {
6958
7006
  }
6959
7007
 
6960
7008
 
6961
- /* CatalogTile-VPSLCKJE.css */
7009
+ /* CatalogTile-26XN7L2A.css */
6962
7010
  /*
6963
7011
  * CatalogTile: mark, name and state, one sentence, and a foot with a quiet
6964
7012
  * fact and one action.
@@ -7117,20 +7165,25 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7117
7165
  height: var(--size-row-sm);
7118
7166
  }
7119
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
+ */
7120
7175
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__title {
7121
7176
  flex: 1 1 auto;
7122
7177
  flex-direction: row;
7178
+ flex-wrap: wrap;
7123
7179
  align-items: center;
7124
- gap: var(--spacing-2);
7180
+ gap: 0 var(--spacing-2);
7125
7181
  padding-top: 0;
7126
7182
  }
7127
7183
 
7128
7184
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__name {
7129
- flex: 0 1 auto;
7130
- min-width: 0;
7131
- overflow: hidden;
7132
- text-overflow: ellipsis;
7133
- white-space: nowrap;
7185
+ flex: 0 0 auto;
7186
+ max-width: 100%;
7134
7187
  }
7135
7188
 
7136
7189
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__status {
@@ -7138,7 +7191,8 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7138
7191
  }
7139
7192
 
7140
7193
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__meta {
7141
- flex: 0 1 auto;
7194
+ flex: none;
7195
+ max-width: 100%;
7142
7196
  }
7143
7197
 
7144
7198
  .crewlet-catalog-tile--compact .crewlet-catalog-tile__description {
@@ -7176,6 +7230,38 @@ a.crewlet-breadcrumb__crumb:focus-visible {
7176
7230
  }
7177
7231
 
7178
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
+
7179
7265
  /* CharacterPicker-ZEYIKUNQ.css */
7180
7266
  /*
7181
7267
  * The grid of characters.
@@ -14926,7 +15012,7 @@ svg.crewlet-datetime__chevron {
14926
15012
  }
14927
15013
 
14928
15014
 
14929
- /* EmptyState-C6HRBGT7.css */
15015
+ /* EmptyState-7L4UAQBX.css */
14930
15016
  /*
14931
15017
  * The empty state.
14932
15018
  *
@@ -15001,6 +15087,40 @@ svg.crewlet-datetime__chevron {
15001
15087
  margin-top: var(--spacing-2);
15002
15088
  }
15003
15089
 
15090
+ /*
15091
+ * INLINE: one left-aligned row on a dashed hairline, the sentence beside its
15092
+ * action. The dash says "nothing here yet" without a glyph, and the box keeps
15093
+ * the place the content will take, so the page does not move when it is
15094
+ * filled. Narrow, the action wraps under the words.
15095
+ */
15096
+ .crewlet-empty-state--inline {
15097
+ flex-direction: row;
15098
+ flex-wrap: wrap;
15099
+ justify-content: space-between;
15100
+ gap: var(--spacing-2) var(--spacing-4);
15101
+ padding: var(--spacing-3) var(--spacing-4);
15102
+ border: 1px dashed var(--color-border-default);
15103
+ border-radius: var(--radius-md);
15104
+ text-align: start;
15105
+ }
15106
+
15107
+ .crewlet-empty-state__text {
15108
+ display: flex;
15109
+ flex: 1 1 16rem;
15110
+ flex-direction: column;
15111
+ gap: var(--spacing-1);
15112
+ min-width: 0;
15113
+ }
15114
+
15115
+ .crewlet-empty-state--inline .crewlet-empty-state__description {
15116
+ max-width: var(--size-measure);
15117
+ }
15118
+
15119
+ .crewlet-empty-state--inline .crewlet-empty-state__action {
15120
+ flex: none;
15121
+ margin-top: 0;
15122
+ }
15123
+
15004
15124
 
15005
15125
  /* EmptyValue-4B6ODXHT.css */
15006
15126
  /*
@@ -16405,7 +16525,82 @@ a.crewlet-icon-btn {
16405
16525
  }
16406
16526
 
16407
16527
 
16408
- /* 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 */
16409
16604
  /*
16410
16605
  * The form row: Input, Textarea, Label, FormField, FormRow, FormSection and
16411
16606
  * ReadOnlyField.
@@ -16969,6 +17164,25 @@ a.crewlet-icon-btn {
16969
17164
  color: var(--color-text-tertiary);
16970
17165
  }
16971
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
+
16972
17186
  /* SHOWN ONLY WHILE THE FIELD HAS FOCUS (`helperOnFocus`): a dense form reads as
16973
17187
  labels and values at rest, and the sentence appears under the field the
16974
17188
  reader is in. Still described, so a screen reader hears it on entry. */
@@ -17719,7 +17933,7 @@ a.crewlet-icon-btn {
17719
17933
  }
17720
17934
 
17721
17935
 
17722
- /* List-YHLIZFK4.css */
17936
+ /* List-XY445TKY.css */
17723
17937
  /*
17724
17938
  * The non-tabular list. One row recipe, four framings.
17725
17939
  *
@@ -17888,6 +18102,37 @@ a.crewlet-icon-btn {
17888
18102
  color: var(--color-text-tertiary);
17889
18103
  }
17890
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
+
17891
18136
  /* ---- States ------------------------------------------------------------ */
17892
18137
 
17893
18138
  /*
@@ -17995,7 +18240,7 @@ a.crewlet-icon-btn {
17995
18240
  }
17996
18241
 
17997
18242
 
17998
- /* ListInput-O7LJKOIG.css */
18243
+ /* ListInput-DP2CSJ22.css */
17999
18244
  /*
18000
18245
  * ListInput: an ordered list of sentences, written in the box at the top and
18001
18246
  * listed under it.
@@ -18011,6 +18256,7 @@ a.crewlet-icon-btn {
18011
18256
  .crewlet-list-input__add {
18012
18257
  display: flex;
18013
18258
  align-items: flex-start;
18259
+ gap: var(--spacing-2);
18014
18260
  }
18015
18261
 
18016
18262
  .crewlet-list-input__add > * {
@@ -18067,10 +18313,75 @@ a.crewlet-icon-btn {
18067
18313
  border-block-end-style: none;
18068
18314
  }
18069
18315
 
18070
- .crewlet-list-input__item > .crewlet-input,
18071
- .crewlet-list-input__item > .crewlet-textarea {
18316
+ /*
18317
+ * THE FIELD TAKES THE ROW'S WIDTH, and holds the control with whatever is
18318
+ * said under it (its count, its refusal) as one column, so a note under an
18319
+ * item sits under the item's words and not under its number or its buttons.
18320
+ */
18321
+ .crewlet-list-input__field {
18322
+ display: flex;
18072
18323
  flex: 1;
18324
+ flex-direction: column;
18325
+ min-width: 0;
18326
+ }
18327
+
18328
+ .crewlet-list-input__field > .crewlet-input,
18329
+ .crewlet-list-input__field > .crewlet-textarea,
18330
+ .crewlet-list-input__field > .crewlet-textarea-shell {
18331
+ width: 100%;
18332
+ min-width: 0;
18333
+ }
18334
+
18335
+ /* What is said under one item: its refusal at the start, its count at the end. */
18336
+ .crewlet-list-input__note {
18337
+ display: flex;
18338
+ align-items: flex-start;
18339
+ justify-content: space-between;
18340
+ gap: var(--spacing-3);
18341
+ padding-bottom: var(--spacing-1);
18342
+ }
18343
+
18344
+ .crewlet-list-input__error {
18073
18345
  min-width: 0;
18346
+ font-size: var(--font-size-xs);
18347
+ line-height: var(--font-line-height-normal);
18348
+ color: var(--color-feedback-danger-ink);
18349
+ }
18350
+
18351
+ /*
18352
+ * THE ROW A REMOVED ITEM LEAVES (`undoRemove`): the item's own place in the
18353
+ * order, at a row's height and on the row's rule, saying what happened in the
18354
+ * quiet ink with Undo beside it, so the list does not close up over the place
18355
+ * an Undo would put it back.
18356
+ */
18357
+ .crewlet-list-input__removed {
18358
+ display: flex;
18359
+ align-items: center;
18360
+ gap: var(--spacing-2);
18361
+ padding: var(--spacing-1) var(--spacing-3);
18362
+ border-block-end-width: 1px;
18363
+ border-block-end-style: solid;
18364
+ border-block-end-color: var(--color-border-default);
18365
+ background: var(--color-surface-subtle);
18366
+ }
18367
+
18368
+ .crewlet-list-input__removed:last-child {
18369
+ border-block-end-style: none;
18370
+ }
18371
+
18372
+ .crewlet-list-input__removed-text {
18373
+ flex: 1;
18374
+ min-width: 0;
18375
+ font-size: var(--font-size-compact);
18376
+ color: var(--color-text-secondary);
18377
+ }
18378
+
18379
+ /* Where the new-item box was, once the list holds all it may. */
18380
+ .crewlet-list-input__full {
18381
+ margin: 0;
18382
+ font-size: var(--font-size-xs);
18383
+ line-height: var(--font-line-height-normal);
18384
+ color: var(--color-text-tertiary);
18074
18385
  }
18075
18386
 
18076
18387
  /*
@@ -18138,10 +18449,60 @@ a.crewlet-icon-btn {
18138
18449
  opacity: 1;
18139
18450
  }
18140
18451
 
18452
+ /*
18453
+ * THE GRIP (`reorderByDrag`) waits with the move pair: the pointer's way to
18454
+ * take hold of a row, shown under the pointer and while the row holds the
18455
+ * focus, in the quiet ink so the row's number stays the first mark on it.
18456
+ */
18457
+ .crewlet-list-input__handle {
18458
+ display: inline-flex;
18459
+ flex: none;
18460
+ align-items: center;
18461
+ justify-content: center;
18462
+ margin-inline-start: calc(var(--spacing-1) * -1);
18463
+ color: var(--color-text-tertiary);
18464
+ cursor: grab;
18465
+ opacity: 0;
18466
+ transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
18467
+ }
18468
+
18469
+ .crewlet-list-input__handle:active {
18470
+ cursor: grabbing;
18471
+ }
18472
+
18473
+ .crewlet-list-input__item:hover .crewlet-list-input__handle,
18474
+ .crewlet-list-input__item:focus-within .crewlet-list-input__handle {
18475
+ opacity: 1;
18476
+ }
18477
+
18478
+ /* The row being dragged keeps its place as an outline, so the list does not
18479
+ close up under the pointer and the reader can see where it came from. */
18480
+ .crewlet-list-input__item[data-reorder='dragging'] {
18481
+ outline-width: 1px;
18482
+ outline-style: dashed;
18483
+ outline-color: var(--color-border-strong);
18484
+ outline-offset: -1px;
18485
+ }
18486
+
18487
+ .crewlet-list-input__item[data-reorder='dragging'] > * {
18488
+ opacity: 0.4;
18489
+ }
18490
+
18141
18491
  @media (prefers-reduced-motion: reduce) {
18142
18492
  .crewlet-list-input__move {
18143
18493
  transition: none;
18144
18494
  }
18495
+
18496
+ .crewlet-list-input__handle {
18497
+ transition: none;
18498
+ }
18499
+ }
18500
+
18501
+ /* With a hidden legend the add control stands at the end of the box's row. */
18502
+ .crewlet-list-input__add-control {
18503
+ display: inline-flex;
18504
+ flex: none;
18505
+ align-self: center;
18145
18506
  }
18146
18507
 
18147
18508
 
@@ -27856,6 +28217,62 @@ svg.crewlet-select__chevron {
27856
28217
  }
27857
28218
 
27858
28219
 
28220
+ /* Statement-M4QDXIMO.css */
28221
+ /*
28222
+ * Statement: a label over the words a page exists to say (Statement.tsx).
28223
+ *
28224
+ * THE LABEL IS THE MICRO REGISTER and the words are a step over the body, at
28225
+ * the reading measure, so the statement outweighs everything around it and a
28226
+ * line of it is one an eye can follow back.
28227
+ */
28228
+
28229
+ .crewlet-statement {
28230
+ display: flex;
28231
+ flex-direction: column;
28232
+ gap: var(--spacing-2);
28233
+ margin: 0;
28234
+ min-width: 0;
28235
+ }
28236
+
28237
+ .crewlet-statement__label {
28238
+ margin: 0;
28239
+ font-size: var(--font-size-2xs);
28240
+ font-weight: var(--font-weight-medium);
28241
+ letter-spacing: var(--font-letter-spacing-wide);
28242
+ line-height: var(--font-line-height-snug);
28243
+ text-transform: uppercase;
28244
+ color: var(--color-text-tertiary);
28245
+ }
28246
+
28247
+ /* THE AUTHOR'S OWN LINE BREAKS are kept, and no word stands alone on the last
28248
+ line. A long word (an address, a product name) breaks rather than widening
28249
+ the column. */
28250
+ .crewlet-statement__text {
28251
+ margin: 0;
28252
+ max-width: var(--size-measure);
28253
+ font-size: var(--font-size-lg);
28254
+ line-height: var(--font-line-height-relaxed);
28255
+ color: var(--color-text-primary);
28256
+ white-space: pre-wrap;
28257
+ overflow-wrap: anywhere;
28258
+ text-wrap: pretty;
28259
+ }
28260
+
28261
+ /* A BLOCK under the label is drawn as given: its own register, the column's
28262
+ width. */
28263
+ .crewlet-statement__body {
28264
+ min-width: 0;
28265
+ }
28266
+
28267
+ /* ON A PHONE the words step down to the body's own step over it, so a
28268
+ mission is a paragraph rather than a poster. */
28269
+ @media (width < 640px) {
28270
+ .crewlet-statement__text {
28271
+ font-size: var(--font-size-md);
28272
+ }
28273
+ }
28274
+
28275
+
27859
28276
  /* StatusDot-7OMCQCZF.css */
27860
28277
  /*
27861
28278
  * The status dot: a 7px mark in its tone's fill, beside the word it belongs
@@ -30325,7 +30742,7 @@ b.crewlet-switcher__match {
30325
30742
  }
30326
30743
 
30327
30744
 
30328
- /* Text-S3Q4O3IG.css */
30745
+ /* Text-XOCOU34C.css */
30329
30746
  /*
30330
30747
  * The type registers, one rule each.
30331
30748
  *
@@ -30394,6 +30811,15 @@ b.crewlet-switcher__match {
30394
30811
  color: var(--color-text-primary);
30395
30812
  }
30396
30813
 
30814
+ .crewlet-text--passage {
30815
+ font-size: var(--font-size-sm);
30816
+ line-height: var(--font-line-height-relaxed);
30817
+ color: var(--color-text-primary);
30818
+ white-space: pre-wrap;
30819
+ overflow-wrap: anywhere;
30820
+ text-wrap: pretty;
30821
+ }
30822
+
30397
30823
  .crewlet-text--cell {
30398
30824
  font-size: var(--font-size-compact);
30399
30825
  line-height: var(--font-line-height-snug);
@@ -30878,7 +31304,7 @@ b.crewlet-switcher__match {
30878
31304
  }
30879
31305
 
30880
31306
 
30881
- /* TileGrid-I6LNYD2H.css */
31307
+ /* TileGrid-UYMVVVJK.css */
30882
31308
  /*
30883
31309
  * TileGrid: tiles on a fixed track count that folds by the grid's own width.
30884
31310
  *
@@ -30932,6 +31358,36 @@ b.crewlet-switcher__match {
30932
31358
  }
30933
31359
  }
30934
31360
 
31361
+ /*
31362
+ * COMPACT TILES FOLD WIDER. A compact `CatalogTile` puts its mark, name,
31363
+ * state, fact and action on ONE line, which needs about 30rem; the folds above
31364
+ * are sized for a comfortable tile, whose parts stack. Measured at a 1024px
31365
+ * window, two compact tiles on 415px tracks cut the name to its first letter.
31366
+ * So a grid holding a compact tile folds where a track would be narrower than
31367
+ * 30rem, counting the gaps: two tracks need 61rem, three 92rem (folding
31368
+ * straight to one, as three always do), and four 123rem before they go to
31369
+ * two. Declared here, on the grid, because the grid chooses the track count
31370
+ * and the tile cannot.
31371
+ */
31372
+ @container crewlet-tile-grid (width < 123rem) {
31373
+ .crewlet-tile-grid[data-columns='4']:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
31374
+ --crewlet-tile-grid-tracks: 2;
31375
+ }
31376
+ }
31377
+
31378
+ @container crewlet-tile-grid (width < 92rem) {
31379
+ .crewlet-tile-grid[data-columns='3']:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
31380
+ --crewlet-tile-grid-tracks: 1;
31381
+ }
31382
+ }
31383
+
31384
+ @container crewlet-tile-grid (width < 61rem) {
31385
+ /* As specific as the two rules above and after them, so it wins at every count. */
31386
+ .crewlet-tile-grid[data-columns]:has(.crewlet-catalog-tile--compact) > .crewlet-tile-grid__track {
31387
+ --crewlet-tile-grid-tracks: 1;
31388
+ }
31389
+ }
31390
+
30935
31391
 
30936
31392
  /* TimeWindowPicker-I3HXC74I.css */
30937
31393
  /*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.44.0",
3
+ "version": "0.46.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.44.0",
46
- "@crewlethq/tokens": "0.44.0",
45
+ "@crewlethq/icons": "0.46.0",
46
+ "@crewlethq/tokens": "0.46.0",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",