@crewlethq/ui 0.76.0 → 0.77.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 (117) hide show
  1. package/README.md +14 -0
  2. package/dist/AgentHandoffPanel/index.js +4 -4
  3. package/dist/AppShell/index.js +3 -3
  4. package/dist/ArrangeList/index.js +4 -4
  5. package/dist/ArtifactBar/index.js +6 -6
  6. package/dist/ArtifactCard/index.js +4 -4
  7. package/dist/ArtifactPanel/index.js +1 -1
  8. package/dist/AvatarPicker/index.js +6 -6
  9. package/dist/Canvas/index.js +2 -2
  10. package/dist/CanvasBoard/index.js +4 -4
  11. package/dist/CanvasToolbar/index.js +3 -3
  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 +3 -3
  24. package/dist/CommentThread/index.js +5 -5
  25. package/dist/Composer/index.js +3 -3
  26. package/dist/ConfirmField/index.js +3 -3
  27. package/dist/ContrastHelp/index.js +1 -1
  28. package/dist/DataGrid/index.js +4 -4
  29. package/dist/DataTable/index.js +5 -5
  30. package/dist/DataView/index.js +7 -7
  31. package/dist/DateTimePicker/index.js +2 -2
  32. package/dist/DocTabsEditor/index.js +4 -4
  33. package/dist/{Editor-BXOWAV46.js → Editor-MPNGVAWD.js} +3 -3
  34. package/dist/HuePicker/index.js +5 -5
  35. package/dist/Input/index.js +2 -2
  36. package/dist/LinkInterstitial/index.js +1 -1
  37. package/dist/ListInput/index.js +3 -3
  38. package/dist/MarkdownEditor/index.js +5 -5
  39. package/dist/Menu/index.js +2 -2
  40. package/dist/MergeConflicts/index.js +5 -5
  41. package/dist/Modal/index.js +1 -1
  42. package/dist/OrgTable/index.js +1 -1
  43. package/dist/PresenterView/index.js +1 -1
  44. package/dist/PrincipalPicker/index.js +4 -4
  45. package/dist/ProposalCard/index.js +4 -4
  46. package/dist/RichEditor/index.js +1 -1
  47. package/dist/SegmentedControl/index.js +4 -4
  48. package/dist/SetupWizard/SetupWizard.d.ts +7 -0
  49. package/dist/SetupWizard/index.js +2 -2
  50. package/dist/{SetupWizard-2SUMQEWU.css → SetupWizard-Y2PFPBCZ.css} +27 -2
  51. package/dist/ShareDialog/index.js +1 -1
  52. package/dist/SheetColumnEditor/index.js +8 -8
  53. package/dist/SheetGrid/index.js +3 -3
  54. package/dist/SidePanel/index.js +1 -1
  55. package/dist/SlideFilmstrip/index.js +3 -3
  56. package/dist/Switcher/index.js +3 -3
  57. package/dist/Tabs/index.js +3 -3
  58. package/dist/TagsInput/index.js +2 -2
  59. package/dist/ThemeSwitcher/index.js +5 -5
  60. package/dist/TimeRangePicker/index.js +6 -6
  61. package/dist/TimeWindowPicker/index.js +3 -3
  62. package/dist/TreeCanvas/index.js +3 -3
  63. package/dist/TreeGrid/index.js +1 -1
  64. package/dist/ValueField/index.js +4 -4
  65. package/dist/VersionCompare/index.js +5 -5
  66. package/dist/{chunk-TKUAGWNR.js → chunk-2GBG7KPK.js} +1 -1
  67. package/dist/{chunk-IPBSCJIZ.js → chunk-2LIGIIE2.js} +3 -3
  68. package/dist/{chunk-5CEQ3HLH.js → chunk-3NYVPLPW.js} +1 -1
  69. package/dist/{chunk-SK5SLGZH.js → chunk-4HO3NX3B.js} +1 -1
  70. package/dist/{chunk-45M73G5A.js → chunk-4Y7PLU4I.js} +1 -1
  71. package/dist/{chunk-YQDRJZ5J.js → chunk-62GVKZJI.js} +1 -1
  72. package/dist/{chunk-RIAPCEB5.js → chunk-72Y5DBSY.js} +2 -2
  73. package/dist/{chunk-ZW5SRQ5M.js → chunk-A5HENOP2.js} +1 -1
  74. package/dist/{chunk-57AKYFML.js → chunk-A6NUAQFW.js} +1 -1
  75. package/dist/{chunk-MKFEVHSR.js → chunk-B7NX425Z.js} +16 -3
  76. package/dist/{chunk-GHQG4VZA.js → chunk-BRFIUUXX.js} +2 -2
  77. package/dist/{chunk-E35HYQMK.js → chunk-CZUIPICC.js} +1 -1
  78. package/dist/{chunk-DSMQTED5.js → chunk-DCAT5OAX.js} +1 -1
  79. package/dist/{chunk-HWPP22XG.js → chunk-E6ETTJWX.js} +4 -4
  80. package/dist/{chunk-ZMIVQGAB.js → chunk-ELNUZDFK.js} +4 -4
  81. package/dist/{chunk-TJIBTHWJ.js → chunk-EVOGHRFN.js} +2 -2
  82. package/dist/{chunk-6EWNMSS4.js → chunk-FRLUJAFK.js} +1 -1
  83. package/dist/{chunk-LMQG3VPG.js → chunk-GKWZTTFV.js} +1 -1
  84. package/dist/{chunk-UY3FWQWG.js → chunk-HDLUG3MA.js} +2 -2
  85. package/dist/{chunk-TPCBPGSB.js → chunk-HMOGLAXY.js} +1 -1
  86. package/dist/chunk-HUIYSNBS.js +65 -0
  87. package/dist/{chunk-2STOSJT3.js → chunk-HYGCGN37.js} +1 -1
  88. package/dist/{chunk-6THG44LI.js → chunk-KQQWGWCC.js} +1 -1
  89. package/dist/{chunk-OCGIQGYJ.js → chunk-KXYZ5XS2.js} +2 -2
  90. package/dist/{chunk-TPIMOGOZ.js → chunk-LJSQT5NJ.js} +1 -1
  91. package/dist/{chunk-HZDI2CCS.js → chunk-LXB4CABM.js} +2 -2
  92. package/dist/{chunk-LCZULGMB.js → chunk-MKWURHR5.js} +1 -1
  93. package/dist/{chunk-FQI62PIZ.js → chunk-ODAZIKZF.js} +2 -2
  94. package/dist/{chunk-I3G5FJ54.js → chunk-P34YWECQ.js} +1 -1
  95. package/dist/{chunk-X5FKORDM.js → chunk-PD2GOJ5V.js} +25 -7
  96. package/dist/{chunk-OOLMTUCO.js → chunk-SOERZJVJ.js} +1 -1
  97. package/dist/{chunk-KL6A7JGH.js → chunk-SQ7GYC4K.js} +1 -1
  98. package/dist/{chunk-T24HBEU6.js → chunk-TL74TBDR.js} +1 -1
  99. package/dist/{chunk-ADGNISEI.js → chunk-U4ICCJJP.js} +2 -2
  100. package/dist/{chunk-IQMWMT4V.js → chunk-UEEWK7SO.js} +2 -2
  101. package/dist/{chunk-JQEXAH7G.js → chunk-VDIKDCNE.js} +1 -1
  102. package/dist/{chunk-MP7DGKB6.js → chunk-VJ6SSEMG.js} +1 -1
  103. package/dist/{chunk-CFTBESST.js → chunk-WM3U4ARK.js} +1 -1
  104. package/dist/{chunk-BKXUZCZX.js → chunk-WOTGQVHZ.js} +1 -1
  105. package/dist/{chunk-ZKLEAK7M.js → chunk-XL2RXAPT.js} +1 -1
  106. package/dist/{chunk-PMBJMNBX.js → chunk-YLYIVN72.js} +1 -1
  107. package/dist/generated/index.d.ts +1 -0
  108. package/dist/generated/index.js +79 -78
  109. package/dist/index.js +79 -78
  110. package/dist/styles.css +379 -9
  111. package/package.json +3 -3
  112. package/dist/{chunk-FB3TCNQP.js → chunk-6Q7RW2JJ.js} +1 -1
  113. package/dist/{chunk-PCBPDMNU.js → chunk-CDFQ7MQK.js} +0 -0
  114. package/dist/{chunk-OBPINJNO.js → chunk-EMCVX5FY.js} +1 -1
  115. package/dist/{chunk-OQG4P5KU.js → chunk-KNAHKQD4.js} +1 -1
  116. package/dist/{chunk-HPI5J6AR.js → chunk-SWLVR54P.js} +1 -1
  117. 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
@@ -31431,7 +31776,7 @@ svg.crewlet-select__chevron {
31431
31776
  }
31432
31777
 
31433
31778
 
31434
- /* SetupWizard-2SUMQEWU.css */
31779
+ /* SetupWizard-Y2PFPBCZ.css */
31435
31780
  /*
31436
31781
  * SetupWizard: a setup walked step by step on a page of its own
31437
31782
  * (SetupWizard.tsx).
@@ -31743,14 +32088,27 @@ svg.crewlet-select__chevron {
31743
32088
  * THE SCROLLER SAYS IT SCROLLS: with its bar hidden, an edge that hides
31744
32089
  * steps fades out, at whichever side has steps beyond it, so a row cut at
31745
32090
  * the screen's edge reads as more to come rather than as the last step.
32091
+ *
32092
+ * THE FADE NEVER DIMS A FOCUS RING. A mask fades everything the element
32093
+ * paints, its own outline included, so the scroller's ring is drawn by the
32094
+ * frame around it, which is not masked. And a pill that takes focus is
32095
+ * scrolled clear of the faded edges, so its ring is never in the fade
32096
+ * either: `scroll-padding-inline` is the fade's own width, which the wizard
32097
+ * reads to place it (SetupWizard.tsx, `clearOfFade`).
31746
32098
  */
31747
- .crewlet-setup-wizard__steps {
32099
+ .crewlet-setup-wizard__steps-frame {
31748
32100
  --crewlet-setup-wizard-fade: var(--spacing-6);
32101
+
32102
+ min-width: 0;
32103
+ }
32104
+
32105
+ .crewlet-setup-wizard__steps {
31749
32106
  --crewlet-setup-wizard-fade-left: 0px;
31750
32107
  --crewlet-setup-wizard-fade-right: 0px;
31751
32108
 
31752
32109
  min-width: 0;
31753
32110
  overflow-x: auto;
32111
+ scroll-padding-inline: var(--crewlet-setup-wizard-fade);
31754
32112
  overscroll-behavior-x: contain;
31755
32113
  scrollbar-width: none;
31756
32114
  -webkit-mask-image: linear-gradient(
@@ -31781,8 +32139,20 @@ svg.crewlet-select__chevron {
31781
32139
  --crewlet-setup-wizard-fade-right: var(--crewlet-setup-wizard-fade);
31782
32140
  }
31783
32141
 
31784
- /* A row that overflows takes the keyboard, so it can be scrolled without a pointer; it draws no edge, so the ring sits inside it. */
32142
+ /*
32143
+ * A row that overflows takes the keyboard, so it can be scrolled without a
32144
+ * pointer. Its ring is the frame's, unmasked, inside the frame's edge, and
32145
+ * the frame's ring is the one that carries the focus in a forced-colours
32146
+ * mode too. The scroller's own outline is transparent only to turn off the
32147
+ * browser's default ring, which would sit under the mask, dimmed, beside
32148
+ * the frame's (transparent rather than none, as the kit's focus check asks
32149
+ * of every focus style).
32150
+ */
31785
32151
  .crewlet-setup-wizard__steps:focus-visible {
32152
+ outline: 2px solid transparent;
32153
+ }
32154
+
32155
+ .crewlet-setup-wizard__steps-frame:has(> .crewlet-setup-wizard__steps:focus-visible) {
31786
32156
  outline: 2px solid var(--color-focus);
31787
32157
  outline-offset: var(--size-focus-ring-inset-offset);
31788
32158
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.76.0",
3
+ "version": "0.77.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.0",
46
- "@crewlethq/tokens": "0.76.0",
45
+ "@crewlethq/icons": "0.77.0",
46
+ "@crewlethq/tokens": "0.77.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,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';