@crewlethq/ui 0.76.1 → 0.78.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 (139) hide show
  1. package/README.md +18 -0
  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 +8 -8
  6. package/dist/ArtifactCard/index.js +6 -6
  7. package/dist/ArtifactPanel/index.js +1 -1
  8. package/dist/AvatarPicker/index.js +7 -7
  9. package/dist/Canvas/index.js +3 -3
  10. package/dist/CanvasBoard/index.js +5 -5
  11. package/dist/CanvasToolbar/index.js +4 -4
  12. package/dist/CheckGrid/CheckGrid.d.ts +62 -0
  13. package/dist/CheckGrid/index.d.ts +3 -0
  14. package/dist/CheckGrid/index.js +11 -0
  15. package/dist/CheckGrid-B3SRTHOJ.css +287 -0
  16. package/dist/Checkbox/index.js +3 -3
  17. package/dist/ChoiceCards/ChoiceCards.d.ts +20 -6
  18. package/dist/ChoiceCards/index.d.ts +1 -1
  19. package/dist/ChoiceCards/index.js +1 -1
  20. package/dist/{ChoiceCards-HAGJMK6Q.css → ChoiceCards-TVMBO3HZ.css} +60 -5
  21. package/dist/ColorField/index.js +3 -3
  22. package/dist/Combobox/index.js +3 -3
  23. package/dist/CommandPalette/index.js +4 -4
  24. package/dist/CommentThread/index.js +6 -6
  25. package/dist/Composer/index.js +3 -3
  26. package/dist/ConfirmField/index.js +3 -3
  27. package/dist/ContrastBadge/index.js +2 -2
  28. package/dist/ContrastHelp/index.js +4 -4
  29. package/dist/DataGrid/index.js +4 -4
  30. package/dist/DataTable/index.js +6 -6
  31. package/dist/DataView/index.js +8 -8
  32. package/dist/DateTimePicker/index.js +3 -3
  33. package/dist/DescriptionList/DescriptionList.d.ts +8 -1
  34. package/dist/DescriptionList/index.js +1 -1
  35. package/dist/{DescriptionList-DEZISDLQ.css → DescriptionList-VF7NIBXA.css} +6 -0
  36. package/dist/DocTabsEditor/index.js +5 -5
  37. package/dist/{Editor-BXOWAV46.js → Editor-QO2GRTMK.js} +4 -4
  38. package/dist/FollowBanner/index.js +1 -1
  39. package/dist/HuePicker/index.js +6 -6
  40. package/dist/InlineEditor/index.js +1 -1
  41. package/dist/Input/index.js +2 -2
  42. package/dist/LinkInterstitial/index.js +2 -2
  43. package/dist/ListInput/index.js +4 -4
  44. package/dist/LogoSlot/index.js +3 -3
  45. package/dist/MarkdownEditor/index.js +7 -7
  46. package/dist/Menu/index.js +3 -3
  47. package/dist/MergeConflicts/index.js +7 -7
  48. package/dist/Modal/index.js +2 -2
  49. package/dist/ObjectHeader/index.js +1 -1
  50. package/dist/{ObjectHeader-7BGA56VQ.css → ObjectHeader-VKQSEJDN.css} +3 -2
  51. package/dist/OrgTable/index.js +1 -1
  52. package/dist/PeekRail/index.js +1 -1
  53. package/dist/PresenterView/index.js +2 -2
  54. package/dist/PrincipalPicker/index.js +4 -4
  55. package/dist/PropertyList/index.js +3 -3
  56. package/dist/ProposalCard/index.js +4 -4
  57. package/dist/RichEditor/index.js +1 -1
  58. package/dist/SegmentedControl/index.js +6 -6
  59. package/dist/SelectionBar/index.js +1 -1
  60. package/dist/ShareDialog/index.js +2 -2
  61. package/dist/SheetColumnEditor/index.js +9 -9
  62. package/dist/SheetGrid/index.js +5 -5
  63. package/dist/SidePanel/index.js +1 -1
  64. package/dist/SlideCompare/index.js +1 -1
  65. package/dist/SlideFilmstrip/index.js +4 -4
  66. package/dist/Switcher/index.js +4 -4
  67. package/dist/Tabs/Tabs.d.ts +20 -2
  68. package/dist/Tabs/fold.d.ts +3 -1
  69. package/dist/Tabs/index.js +4 -4
  70. package/dist/{Tabs-7ZK2UF75.css → Tabs-M2ELSU3V.css} +68 -0
  71. package/dist/TagsInput/index.js +2 -2
  72. package/dist/ThemeSwitcher/index.js +7 -7
  73. package/dist/TileGrid/index.js +1 -1
  74. package/dist/{TileGrid-UYMVVVJK.css → TileGrid-XOEJ4P52.css} +3 -1
  75. package/dist/TimeRangePicker/index.js +8 -8
  76. package/dist/TimeWindowPicker/index.js +4 -4
  77. package/dist/TreeCanvas/index.js +4 -4
  78. package/dist/TreeGrid/index.js +1 -1
  79. package/dist/ValueField/index.js +4 -4
  80. package/dist/VersionCompare/index.js +7 -7
  81. package/dist/{chunk-TKUAGWNR.js → chunk-2GBG7KPK.js} +1 -1
  82. package/dist/{chunk-25AZQ3GZ.js → chunk-36WK24AI.js} +1 -1
  83. package/dist/{chunk-5CEQ3HLH.js → chunk-3NYVPLPW.js} +1 -1
  84. package/dist/{chunk-HQOEAUDJ.js → chunk-4O5XNGDC.js} +1 -1
  85. package/dist/{chunk-45M73G5A.js → chunk-4Y7PLU4I.js} +1 -1
  86. package/dist/{chunk-2STOSJT3.js → chunk-5N3MF7O2.js} +2 -2
  87. package/dist/{chunk-YQDRJZ5J.js → chunk-62GVKZJI.js} +1 -1
  88. package/dist/{chunk-RIAPCEB5.js → chunk-72Y5DBSY.js} +2 -2
  89. package/dist/{chunk-57AKYFML.js → chunk-A6NUAQFW.js} +1 -1
  90. package/dist/{chunk-S7WG53JB.js → chunk-AXEXOAZQ.js} +1 -1
  91. package/dist/{chunk-MKFEVHSR.js → chunk-B7NX425Z.js} +16 -3
  92. package/dist/{chunk-GHQG4VZA.js → chunk-BRFIUUXX.js} +2 -2
  93. package/dist/{chunk-E35HYQMK.js → chunk-CZUIPICC.js} +1 -1
  94. package/dist/{chunk-DSMQTED5.js → chunk-DCAT5OAX.js} +1 -1
  95. package/dist/{chunk-HWPP22XG.js → chunk-E6ETTJWX.js} +4 -4
  96. package/dist/{chunk-TJIBTHWJ.js → chunk-EVOGHRFN.js} +2 -2
  97. package/dist/{chunk-6EWNMSS4.js → chunk-FRLUJAFK.js} +1 -1
  98. package/dist/{chunk-LMQG3VPG.js → chunk-GKWZTTFV.js} +1 -1
  99. package/dist/{chunk-UY3FWQWG.js → chunk-HDLUG3MA.js} +2 -2
  100. package/dist/{chunk-TPCBPGSB.js → chunk-HMOGLAXY.js} +1 -1
  101. package/dist/chunk-HUIYSNBS.js +65 -0
  102. package/dist/{chunk-ZKLEAK7M.js → chunk-HZHFXKVP.js} +2 -2
  103. package/dist/{chunk-OCGIQGYJ.js → chunk-JIBZ5SF5.js} +2 -2
  104. package/dist/{chunk-ZMIVQGAB.js → chunk-KP5DDOMF.js} +4 -4
  105. package/dist/{chunk-PMBJMNBX.js → chunk-L5PK2MXF.js} +1 -1
  106. package/dist/{chunk-SK5SLGZH.js → chunk-LE6K34SN.js} +1 -1
  107. package/dist/{chunk-MFS6F2P7.js → chunk-LH4OF7FI.js} +3 -1
  108. package/dist/{chunk-TPIMOGOZ.js → chunk-LJSQT5NJ.js} +1 -1
  109. package/dist/{chunk-6THG44LI.js → chunk-LPN3RHMA.js} +42 -19
  110. package/dist/{chunk-OWHETZIU.js → chunk-LWKMJMVC.js} +1 -1
  111. package/dist/{chunk-HZDI2CCS.js → chunk-LXB4CABM.js} +2 -2
  112. package/dist/{chunk-LCZULGMB.js → chunk-MKWURHR5.js} +1 -1
  113. package/dist/{chunk-FQI62PIZ.js → chunk-ODAZIKZF.js} +2 -2
  114. package/dist/{chunk-HIWPPWNY.js → chunk-OPVTNHPH.js} +2 -2
  115. package/dist/{chunk-ZW5SRQ5M.js → chunk-PP5E3FGY.js} +1 -1
  116. package/dist/{chunk-BKXUZCZX.js → chunk-PQDQTK64.js} +1 -1
  117. package/dist/{chunk-IPBSCJIZ.js → chunk-QEVYTXCY.js} +3 -3
  118. package/dist/{chunk-KL6A7JGH.js → chunk-SQ7GYC4K.js} +1 -1
  119. package/dist/{chunk-MP7DGKB6.js → chunk-SZ75VYRX.js} +1 -1
  120. package/dist/{chunk-T24HBEU6.js → chunk-TL74TBDR.js} +1 -1
  121. package/dist/{chunk-IQMWMT4V.js → chunk-TNU6U7C5.js} +2 -2
  122. package/dist/{chunk-ADGNISEI.js → chunk-U4ICCJJP.js} +2 -2
  123. package/dist/{chunk-Q6CQMS6R.js → chunk-UFID3DSP.js} +1 -1
  124. package/dist/{chunk-OOLMTUCO.js → chunk-UQHTHOSZ.js} +1 -1
  125. package/dist/{chunk-JQEXAH7G.js → chunk-VDIKDCNE.js} +1 -1
  126. package/dist/{chunk-CFTBESST.js → chunk-WM3U4ARK.js} +1 -1
  127. package/dist/{chunk-I3G5FJ54.js → chunk-Y7OXW5SB.js} +1 -1
  128. package/dist/generated/index.d.ts +1 -0
  129. package/dist/generated/index.js +90 -89
  130. package/dist/index.js +90 -89
  131. package/dist/styles.css +435 -13
  132. package/package.json +3 -3
  133. package/dist/{chunk-FB3TCNQP.js → chunk-6Q7RW2JJ.js} +1 -1
  134. package/dist/{chunk-PCBPDMNU.js → chunk-CDFQ7MQK.js} +0 -0
  135. package/dist/{chunk-OBPINJNO.js → chunk-EMCVX5FY.js} +1 -1
  136. package/dist/{chunk-OQG4P5KU.js → chunk-KNAHKQD4.js} +1 -1
  137. package/dist/{chunk-7PJFUQMY.js → chunk-MGWFVAPN.js} +1 -1
  138. package/dist/{chunk-HPI5J6AR.js → chunk-SWLVR54P.js} +1 -1
  139. package/dist/{chunk-WK4FQPYW.js → chunk-TD6LHL7M.js} +1 -1
package/dist/styles.css CHANGED
@@ -9908,6 +9908,296 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
9908
9908
  }
9909
9909
 
9910
9910
 
9911
+ /* CheckGrid-B3SRTHOJ.css */
9912
+ /*
9913
+ * CheckGrid: checkboxes where rows meet columns.
9914
+ *
9915
+ * WIDE, every column stands side by side under a header row: the row names'
9916
+ * track (at least 10rem) and one equal track per column (7.5rem), so the
9917
+ * columns of every row line up without a subgrid. A column's name beside each
9918
+ * box is said and not drawn, since the header draws it once.
9919
+ *
9920
+ * NARROW, each row stacks: its name on a line of its own, then its boxes
9921
+ * wrapping, each with its column's name drawn beside it; the header row is
9922
+ * gone. No column is cut off behind a sideways scroll. WHERE IS NARROW is the
9923
+ * grid's own width, by a container query, so a narrow column on a wide screen
9924
+ * stacks too: under the width every column needs, the name's track plus each
9925
+ * column's track and gap. A container query cannot read a custom property in
9926
+ * its condition, so that width is written once per column count below, up to
9927
+ * the six the grid stands side by side for (`MOST_COLUMNS`); a grid of more
9928
+ * always stacks.
9929
+ */
9930
+ .crewlet-check-grid {
9931
+ --crewlet-check-grid-name: 10rem;
9932
+ --crewlet-check-grid-column: 7.5rem;
9933
+ container: crewlet-check-grid / inline-size;
9934
+ display: flex;
9935
+ flex-direction: column;
9936
+ gap: var(--spacing-2);
9937
+ min-width: 0;
9938
+ }
9939
+
9940
+ .crewlet-check-grid__table {
9941
+ display: flex;
9942
+ flex-direction: column;
9943
+ gap: var(--spacing-1);
9944
+ }
9945
+
9946
+ .crewlet-check-grid__head,
9947
+ .crewlet-check-grid__row {
9948
+ display: grid;
9949
+ grid-template-columns:
9950
+ minmax(var(--crewlet-check-grid-name), 1fr)
9951
+ repeat(var(--crewlet-check-grid-columns, 3), var(--crewlet-check-grid-column));
9952
+ column-gap: var(--spacing-3);
9953
+ align-items: center;
9954
+ }
9955
+
9956
+ /* A column's name over its boxes: its glyph and its word, wrapping inside its track. */
9957
+ .crewlet-check-grid__column {
9958
+ display: inline-flex;
9959
+ align-items: center;
9960
+ justify-content: center;
9961
+ gap: var(--spacing-1);
9962
+ color: var(--color-text-secondary);
9963
+ font-size: var(--font-size-xs);
9964
+ text-align: center;
9965
+ }
9966
+
9967
+ /* A row's name: its picture and its words, at the start. */
9968
+ .crewlet-check-grid__name {
9969
+ display: inline-flex;
9970
+ align-items: center;
9971
+ gap: var(--spacing-2);
9972
+ min-width: 0;
9973
+ color: var(--color-text-primary);
9974
+ font-size: var(--font-size-sm);
9975
+ }
9976
+
9977
+ .crewlet-check-grid__media {
9978
+ display: inline-flex;
9979
+ flex: none;
9980
+ }
9981
+
9982
+ /* Each box's cell stands centred under its column's name. */
9983
+ .crewlet-check-grid__row > .crewlet-check-grid__cell {
9984
+ display: inline-flex;
9985
+ justify-self: center;
9986
+ }
9987
+
9988
+ /* WIDE: the column's name beside a box is said (it names the box) and not drawn. */
9989
+ .crewlet-check-grid__box .crewlet-checkbox__text {
9990
+ position: absolute;
9991
+ width: 1px;
9992
+ height: 1px;
9993
+ margin: -1px;
9994
+ overflow: hidden;
9995
+ clip-path: inset(50%);
9996
+ white-space: nowrap;
9997
+ }
9998
+
9999
+ /* Why a column refuses a box, once, under the grid. */
10000
+ .crewlet-check-grid__notes {
10001
+ display: flex;
10002
+ flex-direction: column;
10003
+ gap: var(--spacing-1);
10004
+ margin: 0;
10005
+ padding: 0;
10006
+ color: var(--color-text-secondary);
10007
+ font-size: var(--font-size-xs);
10008
+ list-style: none;
10009
+ }
10010
+
10011
+ /* NARROW, by column count: under the name's track plus each column's track and gap. */
10012
+ @container crewlet-check-grid (width < 18.25rem) {
10013
+ .crewlet-check-grid--1 .crewlet-check-grid__head {
10014
+ display: none;
10015
+ }
10016
+
10017
+ .crewlet-check-grid--1 .crewlet-check-grid__row {
10018
+ display: flex;
10019
+ flex-wrap: wrap;
10020
+ column-gap: var(--spacing-3);
10021
+ padding-block: var(--spacing-1);
10022
+ }
10023
+
10024
+ .crewlet-check-grid--1 .crewlet-check-grid__name {
10025
+ flex-basis: 100%;
10026
+ }
10027
+
10028
+ .crewlet-check-grid--1 .crewlet-check-grid__box .crewlet-checkbox__text {
10029
+ position: static;
10030
+ width: auto;
10031
+ height: auto;
10032
+ margin: 0;
10033
+ overflow: visible;
10034
+ clip-path: none;
10035
+ white-space: normal;
10036
+ }
10037
+ }
10038
+
10039
+ @container crewlet-check-grid (width < 26.5rem) {
10040
+ .crewlet-check-grid--2 .crewlet-check-grid__head {
10041
+ display: none;
10042
+ }
10043
+
10044
+ .crewlet-check-grid--2 .crewlet-check-grid__row {
10045
+ display: flex;
10046
+ flex-wrap: wrap;
10047
+ column-gap: var(--spacing-3);
10048
+ padding-block: var(--spacing-1);
10049
+ }
10050
+
10051
+ .crewlet-check-grid--2 .crewlet-check-grid__name {
10052
+ flex-basis: 100%;
10053
+ }
10054
+
10055
+ .crewlet-check-grid--2 .crewlet-check-grid__box .crewlet-checkbox__text {
10056
+ position: static;
10057
+ width: auto;
10058
+ height: auto;
10059
+ margin: 0;
10060
+ overflow: visible;
10061
+ clip-path: none;
10062
+ white-space: normal;
10063
+ }
10064
+ }
10065
+
10066
+ @container crewlet-check-grid (width < 34.75rem) {
10067
+ .crewlet-check-grid--3 .crewlet-check-grid__head {
10068
+ display: none;
10069
+ }
10070
+
10071
+ .crewlet-check-grid--3 .crewlet-check-grid__row {
10072
+ display: flex;
10073
+ flex-wrap: wrap;
10074
+ column-gap: var(--spacing-3);
10075
+ padding-block: var(--spacing-1);
10076
+ }
10077
+
10078
+ .crewlet-check-grid--3 .crewlet-check-grid__name {
10079
+ flex-basis: 100%;
10080
+ }
10081
+
10082
+ .crewlet-check-grid--3 .crewlet-check-grid__box .crewlet-checkbox__text {
10083
+ position: static;
10084
+ width: auto;
10085
+ height: auto;
10086
+ margin: 0;
10087
+ overflow: visible;
10088
+ clip-path: none;
10089
+ white-space: normal;
10090
+ }
10091
+ }
10092
+
10093
+ @container crewlet-check-grid (width < 43rem) {
10094
+ .crewlet-check-grid--4 .crewlet-check-grid__head {
10095
+ display: none;
10096
+ }
10097
+
10098
+ .crewlet-check-grid--4 .crewlet-check-grid__row {
10099
+ display: flex;
10100
+ flex-wrap: wrap;
10101
+ column-gap: var(--spacing-3);
10102
+ padding-block: var(--spacing-1);
10103
+ }
10104
+
10105
+ .crewlet-check-grid--4 .crewlet-check-grid__name {
10106
+ flex-basis: 100%;
10107
+ }
10108
+
10109
+ .crewlet-check-grid--4 .crewlet-check-grid__box .crewlet-checkbox__text {
10110
+ position: static;
10111
+ width: auto;
10112
+ height: auto;
10113
+ margin: 0;
10114
+ overflow: visible;
10115
+ clip-path: none;
10116
+ white-space: normal;
10117
+ }
10118
+ }
10119
+
10120
+ @container crewlet-check-grid (width < 51.25rem) {
10121
+ .crewlet-check-grid--5 .crewlet-check-grid__head {
10122
+ display: none;
10123
+ }
10124
+
10125
+ .crewlet-check-grid--5 .crewlet-check-grid__row {
10126
+ display: flex;
10127
+ flex-wrap: wrap;
10128
+ column-gap: var(--spacing-3);
10129
+ padding-block: var(--spacing-1);
10130
+ }
10131
+
10132
+ .crewlet-check-grid--5 .crewlet-check-grid__name {
10133
+ flex-basis: 100%;
10134
+ }
10135
+
10136
+ .crewlet-check-grid--5 .crewlet-check-grid__box .crewlet-checkbox__text {
10137
+ position: static;
10138
+ width: auto;
10139
+ height: auto;
10140
+ margin: 0;
10141
+ overflow: visible;
10142
+ clip-path: none;
10143
+ white-space: normal;
10144
+ }
10145
+ }
10146
+
10147
+ @container crewlet-check-grid (width < 59.5rem) {
10148
+ .crewlet-check-grid--6 .crewlet-check-grid__head {
10149
+ display: none;
10150
+ }
10151
+
10152
+ .crewlet-check-grid--6 .crewlet-check-grid__row {
10153
+ display: flex;
10154
+ flex-wrap: wrap;
10155
+ column-gap: var(--spacing-3);
10156
+ padding-block: var(--spacing-1);
10157
+ }
10158
+
10159
+ .crewlet-check-grid--6 .crewlet-check-grid__name {
10160
+ flex-basis: 100%;
10161
+ }
10162
+
10163
+ .crewlet-check-grid--6 .crewlet-check-grid__box .crewlet-checkbox__text {
10164
+ position: static;
10165
+ width: auto;
10166
+ height: auto;
10167
+ margin: 0;
10168
+ overflow: visible;
10169
+ clip-path: none;
10170
+ white-space: normal;
10171
+ }
10172
+ }
10173
+
10174
+ /* More columns than the grid stands side by side for: always stacked. */
10175
+ .crewlet-check-grid--many .crewlet-check-grid__head {
10176
+ display: none;
10177
+ }
10178
+
10179
+ .crewlet-check-grid--many .crewlet-check-grid__row {
10180
+ display: flex;
10181
+ flex-wrap: wrap;
10182
+ column-gap: var(--spacing-3);
10183
+ padding-block: var(--spacing-1);
10184
+ }
10185
+
10186
+ .crewlet-check-grid--many .crewlet-check-grid__name {
10187
+ flex-basis: 100%;
10188
+ }
10189
+
10190
+ .crewlet-check-grid--many .crewlet-check-grid__box .crewlet-checkbox__text {
10191
+ position: static;
10192
+ width: auto;
10193
+ height: auto;
10194
+ margin: 0;
10195
+ overflow: visible;
10196
+ clip-path: none;
10197
+ white-space: normal;
10198
+ }
10199
+
10200
+
9911
10201
  /* Checkbox-GAMV2XD7.css */
9912
10202
  /*
9913
10203
  * Checkbox: a box, its label and its consequence as one target.
@@ -10353,7 +10643,7 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
10353
10643
  }
10354
10644
 
10355
10645
 
10356
- /* ChoiceCards-HAGJMK6Q.css */
10646
+ /* ChoiceCards-TVMBO3HZ.css */
10357
10647
  /*
10358
10648
  * Choices a person compares, as cards in a grid that wraps. The chosen card
10359
10649
  * takes the selected fill and the strong boundary, as a chosen ChoiceList row
@@ -10369,9 +10659,9 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
10369
10659
  * with Runs. Facts run together as one line of meta wrapped differently in
10370
10660
  * each card, and three cards read as three different shapes.
10371
10661
  *
10372
- * A card is at least 20rem (24rem at `lg`), the width a fact's name and a
10373
- * short value keep to one line in: a form's column holds one to a row, and a
10374
- * wider surface two or three, aligned.
10662
+ * A card is at least 20rem (15rem at `sm`, 24rem at `lg`), the width a fact's
10663
+ * name and a short value keep to one line in: a form's column holds one to a
10664
+ * row, and a wider surface two or three, aligned.
10375
10665
  */
10376
10666
  .crewlet-choice-cards {
10377
10667
  --crewlet-choice-cards-min: 20rem;
@@ -10388,6 +10678,10 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
10388
10678
  row-gap: 0;
10389
10679
  }
10390
10680
 
10681
+ .crewlet-choice-cards--sm {
10682
+ --crewlet-choice-cards-min: 15rem;
10683
+ }
10684
+
10391
10685
  .crewlet-choice-cards--lg {
10392
10686
  --crewlet-choice-cards-min: 24rem;
10393
10687
  }
@@ -10507,11 +10801,19 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
10507
10801
  outline: 2px solid transparent;
10508
10802
  }
10509
10803
 
10510
- /* The first line: the picture, the name and its tag, stopping short of the radio. */
10804
+ /*
10805
+ * The first line: the picture, the name and its tag, stopping short of the
10806
+ * radio. Where the name and the tag do not fit side by side, the tag moves to
10807
+ * a line of its own rather than breaking the name mid-phrase. The lines stand
10808
+ * at the row's top, so where a card beside it takes two, the name stays level
10809
+ * with its radio.
10810
+ */
10511
10811
  .crewlet-choice-cards__title {
10512
10812
  display: flex;
10813
+ flex-wrap: wrap;
10814
+ align-content: flex-start;
10513
10815
  align-items: center;
10514
- gap: var(--spacing-2);
10816
+ gap: var(--spacing-1) var(--spacing-2);
10515
10817
  grid-row: 1;
10516
10818
  min-width: 0;
10517
10819
  min-height: var(--crewlet-choice-cards-title);
@@ -10538,7 +10840,17 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
10538
10840
  border-color: var(--color-border-strong);
10539
10841
  }
10540
10842
 
10843
+ /*
10844
+ * THE NAME IS THE TITLE LINE'S STRUT: at least the title step tall, its words
10845
+ * centred in it. The title wraps (a tag that does not fit takes a line of its
10846
+ * own) and its lines stand at the row's top, so a line is only as tall as what
10847
+ * is on it; without the strut a name in the document's 18.85px line sat 3.5px
10848
+ * above the radio, which is centred on the title step.
10849
+ */
10541
10850
  .crewlet-choice-cards__label {
10851
+ display: flex;
10852
+ align-items: center;
10853
+ min-block-size: var(--crewlet-choice-cards-title);
10542
10854
  min-width: 0;
10543
10855
  color: var(--color-text-primary);
10544
10856
  font-weight: var(--font-weight-medium);
@@ -10620,6 +10932,39 @@ button.crewlet-histogram__bar[data-empty]:focus-visible > .crewlet-histogram__fi
10620
10932
  font-size: var(--font-size-xs);
10621
10933
  }
10622
10934
 
10935
+ /*
10936
+ * COMPACT: the same lines in less room, for three cards side by side in a
10937
+ * form's wide column. The padding and the gaps between cards step down one
10938
+ * (a card's own lines already keep the smallest), the picture is capped at
10939
+ * the `lg` glyph step, and the description takes the facts' size. Every line
10940
+ * stays: a description and a disabled card's reason wrap in full, since a
10941
+ * reason cut short is a dead end with no way to read why.
10942
+ */
10943
+ .crewlet-choice-cards--compact {
10944
+ /* The largest picture a compact card draws: the icons package's `lg` glyph step (GLYPH_SIZES.lg, 20px). */
10945
+ --crewlet-choice-cards-compact-media: 1.25rem;
10946
+ column-gap: var(--spacing-2);
10947
+ }
10948
+
10949
+ .crewlet-choice-cards--compact .crewlet-choice-cards__card {
10950
+ margin-block-end: var(--spacing-2);
10951
+ padding: var(--spacing-2);
10952
+ }
10953
+
10954
+ .crewlet-choice-cards--compact .crewlet-choice-cards__radio {
10955
+ inset-block-start: calc(var(--spacing-2) + (var(--crewlet-choice-cards-title) - var(--crewlet-choice-cards-radio)) / 2);
10956
+ inset-inline-end: var(--spacing-2);
10957
+ }
10958
+
10959
+ /* The picture at most the `lg` glyph step, whatever size the caller drew it at, a wrapped mark included. */
10960
+ .crewlet-choice-cards--compact .crewlet-choice-cards__media svg {
10961
+ inline-size: var(--crewlet-choice-cards-compact-media);
10962
+ block-size: var(--crewlet-choice-cards-compact-media);
10963
+ }
10964
+
10965
+ .crewlet-choice-cards--compact .crewlet-choice-cards__description {
10966
+ font-size: var(--font-size-xs);
10967
+ }
10623
10968
 
10624
10969
  /*
10625
10970
  * WHERE SUBGRID IS SUPPORTED, every card spans the same rows of the group and
@@ -16647,7 +16992,7 @@ svg.crewlet-datetime__chevron {
16647
16992
  }
16648
16993
 
16649
16994
 
16650
- /* DescriptionList-DEZISDLQ.css */
16995
+ /* DescriptionList-VF7NIBXA.css */
16651
16996
  /*
16652
16997
  * Metadata pairs on one grid.
16653
16998
  *
@@ -16739,6 +17084,12 @@ svg.crewlet-datetime__chevron {
16739
17084
  margin-bottom: 0;
16740
17085
  }
16741
17086
 
17087
+ /* One type size: the terms at the details' size, in the secondary ink. */
17088
+ .crewlet-description-list--uniform .crewlet-description-list__term {
17089
+ font-size: inherit;
17090
+ color: var(--color-text-secondary);
17091
+ }
17092
+
16742
17093
 
16743
17094
  /* DiffList-3JNPLQ2E.css */
16744
17095
  /* DiffList: one path per row, with its mark, its word and its tint.
@@ -25316,7 +25667,7 @@ a.crewlet-icon-btn {
25316
25667
  }
25317
25668
 
25318
25669
 
25319
- /* ObjectHeader-7BGA56VQ.css */
25670
+ /* ObjectHeader-VKQSEJDN.css */
25320
25671
  /*
25321
25672
  * The header of an object: its eyebrow, its head row and its fact line.
25322
25673
  *
@@ -25544,10 +25895,11 @@ a.crewlet-icon-btn {
25544
25895
  }
25545
25896
 
25546
25897
  /* A footnote may not set its column's width: the track does, and the note
25547
- wraps inside it, balanced so the wrap reads as deliberate. */
25898
+ wraps inside it, balanced so the wrap reads as deliberate. It is set as
25899
+ the label is, so a fact line holds two sizes, the labels' and the values'. */
25548
25900
  .crewlet-fact-line__note,
25549
25901
  .crewlet-fact-line__set-by {
25550
- font-size: var(--font-size-2xs);
25902
+ font-size: var(--font-size-xs);
25551
25903
  color: var(--color-text-tertiary);
25552
25904
  text-wrap: balance;
25553
25905
  }
@@ -37642,7 +37994,7 @@ b.crewlet-switcher__match {
37642
37994
  }
37643
37995
 
37644
37996
 
37645
- /* Tabs-7ZK2UF75.css */
37997
+ /* Tabs-M2ELSU3V.css */
37646
37998
  /*
37647
37999
  * The pill register: Tabs and SegmentedControl.
37648
38000
  *
@@ -38123,6 +38475,74 @@ b.crewlet-switcher__match {
38123
38475
  box-shadow: inset 0 -1px 0 var(--color-border-default);
38124
38476
  }
38125
38477
 
38478
+ /*
38479
+ * THE BAR: a row and its actions. The row (or the box holding the row and
38480
+ * "More") takes the room the actions leave and gives way first: it shrinks
38481
+ * before an action does, scrolling or folding its tabs inside that room. An
38482
+ * underline row fills the bar, so its rule and its fold are measured in the
38483
+ * space the actions leave; a pill or chip row keeps its own width while it
38484
+ * fits and scrolls once it does not, so a tab never paints under an action.
38485
+ */
38486
+ .crewlet-tabs-host {
38487
+ display: contents;
38488
+ }
38489
+
38490
+ .crewlet-tabs-bar {
38491
+ display: flex;
38492
+ align-items: center;
38493
+ gap: var(--spacing-3);
38494
+ min-width: 0;
38495
+ }
38496
+
38497
+ .crewlet-tabs-bar > .crewlet-tabs {
38498
+ flex: 0 1 auto;
38499
+ min-width: 0;
38500
+ }
38501
+
38502
+ .crewlet-tabs-bar > .crewlet-tabs--underline,
38503
+ .crewlet-tabs-bar > .crewlet-tabs-fold {
38504
+ flex: 1 1 auto;
38505
+ min-width: 0;
38506
+ }
38507
+
38508
+ /* The scroll contract an underline row has on its own, for a pill or chip
38509
+ row that must shrink beside its actions. Its ring is drawn inside the tab,
38510
+ as the underline's is, because the scroller clips an outset one. */
38511
+ .crewlet-tabs-bar > .crewlet-tabs--pill,
38512
+ .crewlet-tabs-bar > .crewlet-tabs--chip {
38513
+ overflow-x: auto;
38514
+ scrollbar-width: none;
38515
+ }
38516
+
38517
+ .crewlet-tabs-bar > .crewlet-tabs--pill::-webkit-scrollbar,
38518
+ .crewlet-tabs-bar > .crewlet-tabs--chip::-webkit-scrollbar {
38519
+ display: none;
38520
+ }
38521
+
38522
+ .crewlet-tabs-bar > .crewlet-tabs--pill .crewlet-tabs__tab:focus-visible,
38523
+ .crewlet-tabs-bar > .crewlet-tabs--chip .crewlet-tabs__tab:focus-visible {
38524
+ outline-offset: var(--size-focus-ring-inset-offset);
38525
+ }
38526
+
38527
+ .crewlet-tabs__actions {
38528
+ display: inline-flex;
38529
+ flex: none;
38530
+ align-items: center;
38531
+ gap: var(--spacing-2);
38532
+ margin-inline-start: auto;
38533
+ }
38534
+
38535
+ /* The underline's rule runs on under the actions to the bar's edge, painted
38536
+ on the same last pixel row the row's own border sits on. */
38537
+ .crewlet-tabs-bar--underline {
38538
+ align-items: stretch;
38539
+ box-shadow: inset 0 -1px 0 var(--color-border-default);
38540
+ }
38541
+
38542
+ .crewlet-tabs-bar--underline > .crewlet-tabs__actions {
38543
+ align-self: center;
38544
+ }
38545
+
38126
38546
  /*
38127
38547
  * The slider ARRIVES rather than travels, and a chip changes without a fade.
38128
38548
  * The indicator still moves; what stops is the animation between the two
@@ -39802,7 +40222,7 @@ b.crewlet-switcher__match {
39802
40222
  }
39803
40223
 
39804
40224
 
39805
- /* TileGrid-UYMVVVJK.css */
40225
+ /* TileGrid-XOEJ4P52.css */
39806
40226
  /*
39807
40227
  * TileGrid: tiles on a fixed track count that folds by the grid's own width.
39808
40228
  *
@@ -39851,7 +40271,9 @@ b.crewlet-switcher__match {
39851
40271
  }
39852
40272
 
39853
40273
  @container crewlet-tile-grid (width < 28rem) {
39854
- .crewlet-tile-grid > .crewlet-tile-grid__track {
40274
+ /* As specific as the per-count rules above and after them, so a grid of two
40275
+ or four folds to one here too, not only a grid of three. */
40276
+ .crewlet-tile-grid[data-columns] > .crewlet-tile-grid__track {
39855
40277
  --crewlet-tile-grid-tracks: 1;
39856
40278
  }
39857
40279
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.76.1",
3
+ "version": "0.78.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.76.1",
46
- "@crewlethq/tokens": "0.76.1",
45
+ "@crewlethq/icons": "0.78.0",
46
+ "@crewlethq/tokens": "0.78.0",
47
47
  "prosemirror-commands": "1.7.2",
48
48
  "prosemirror-gapcursor": "1.4.1",
49
49
  "prosemirror-history": "1.5.1",
@@ -2,8 +2,8 @@ import { characterCountState, CharacterCount } from './chunk-PGCLHYVP.js';
2
2
  import { useHeadingLevel, headingTag, HeadingLevelProvider, nextHeadingLevel } from './chunk-PQADV6P6.js';
3
3
  import { announce } from './chunk-2G355KDJ.js';
4
4
  import { isComposing } from './chunk-H5XTJ7GJ.js';
5
- import { IconButton } from './chunk-UAUP6XGK.js';
6
5
  import { useFocusModality } from './chunk-NUZHC6MM.js';
6
+ import { IconButton } from './chunk-UAUP6XGK.js';
7
7
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
9
9
  import './Input-WSMB7JG2.css';
File without changes
@@ -3,8 +3,8 @@ import { Tooltip } from './chunk-I33UIUZD.js';
3
3
  import { Kbd } from './chunk-ANTAQAR4.js';
4
4
  import { Button } from './chunk-DGXZ635L.js';
5
5
  import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-OMV5W53A.js';
6
- import { IconButton } from './chunk-UAUP6XGK.js';
7
6
  import { returnFocus } from './chunk-NUZHC6MM.js';
7
+ import { IconButton } from './chunk-UAUP6XGK.js';
8
8
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
9
9
  import { cx } from './chunk-ODEQTPFM.js';
10
10
  import './Canvas-4QJHVLJ4.css';
@@ -1,8 +1,8 @@
1
1
  import { Button } from './chunk-DGXZ635L.js';
2
2
  import { useLayerContainer, viewportBounds, LAYER_GAP, anchorGone, placePopup, LAYER_REPOSITION_EVENT } from './chunk-OMV5W53A.js';
3
3
  import { usePopupLayer } from './chunk-H5XTJ7GJ.js';
4
- import { IconButton } from './chunk-UAUP6XGK.js';
5
4
  import { returnFocus } from './chunk-NUZHC6MM.js';
5
+ import { IconButton } from './chunk-UAUP6XGK.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './Menu-I4SNXHOT.css';
8
8
  import { useId, useState, useRef, useCallback, useLayoutEffect, useEffect } from 'react';
@@ -1,5 +1,5 @@
1
- import { normalizeHex } from './chunk-7W3LYIOC.js';
2
1
  import { Tag } from './chunk-VERJCAJ4.js';
2
+ import { normalizeHex } from './chunk-7W3LYIOC.js';
3
3
  import { VisuallyHidden } from './chunk-UT6CW3C7.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './ContrastBadge-CBZPGG3G.css';
@@ -1,8 +1,8 @@
1
1
  import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-EE3DJMSQ.js';
2
2
  import { Popover } from './chunk-KHJIEPZV.js';
3
3
  import { Button } from './chunk-DGXZ635L.js';
4
- import { IconButton } from './chunk-UAUP6XGK.js';
5
4
  import { useFocusModality } from './chunk-NUZHC6MM.js';
5
+ import { IconButton } from './chunk-UAUP6XGK.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './DateTimePicker-PM6TIRIX.css';
8
8
  import { useMemo, useState, useEffect } from 'react';
@@ -2,8 +2,8 @@ import { useListbox } from './chunk-7KHM2FZH.js';
2
2
  import { Tag } from './chunk-VERJCAJ4.js';
3
3
  import { announce } from './chunk-2G355KDJ.js';
4
4
  import { isComposing } from './chunk-H5XTJ7GJ.js';
5
- import { IconButton } from './chunk-UAUP6XGK.js';
6
5
  import { useFocusModality } from './chunk-NUZHC6MM.js';
6
+ import { IconButton } from './chunk-UAUP6XGK.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './TagsInput-MZXEHKJD.css';
9
9
  import { forwardRef, useState, useRef, useId, useImperativeHandle, useEffect, useMemo, useLayoutEffect } from 'react';