@crewlethq/ui 0.53.0 → 0.54.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 (113) hide show
  1. package/README.md +12 -0
  2. package/dist/AgentHandoffPanel/index.js +8 -8
  3. package/dist/AppShell/index.js +1 -1
  4. package/dist/{AppShell-BIUFNT3J.css → AppShell-5LPXYUV3.css} +19 -3
  5. package/dist/ArrangeFrame/index.js +2 -2
  6. package/dist/ArrangeList/index.js +5 -5
  7. package/dist/ArtifactBar/index.js +7 -7
  8. package/dist/ArtifactCard/index.js +6 -6
  9. package/dist/ArtifactMakeRow/index.js +2 -2
  10. package/dist/AvatarPicker/index.js +7 -7
  11. package/dist/Canvas/index.js +2 -2
  12. package/dist/CanvasBoard/index.js +4 -4
  13. package/dist/CanvasToolbar/index.js +3 -3
  14. package/dist/CharacterPicker/index.js +2 -2
  15. package/dist/Checkbox/index.js +4 -4
  16. package/dist/ColorField/index.js +4 -4
  17. package/dist/Combobox/index.js +5 -5
  18. package/dist/CommandPalette/index.js +8 -8
  19. package/dist/CommentThread/index.js +7 -7
  20. package/dist/Composer/index.js +5 -5
  21. package/dist/ConfirmField/index.js +4 -4
  22. package/dist/DataGrid/index.js +6 -6
  23. package/dist/DataTable/index.js +7 -7
  24. package/dist/DataView/index.js +10 -10
  25. package/dist/DatasetSource/index.js +1 -1
  26. package/dist/DocTabsEditor/index.js +5 -5
  27. package/dist/{Editor-RAUVEXLG.js → Editor-RMM3NQJ2.js} +5 -5
  28. package/dist/HuePicker/index.js +4 -4
  29. package/dist/InlineEditor/index.js +1 -1
  30. package/dist/Input/index.js +3 -3
  31. package/dist/LinkInterstitial/index.js +3 -3
  32. package/dist/ListInput/index.js +6 -6
  33. package/dist/MarkdownEditor/index.js +4 -4
  34. package/dist/MergeConflicts/index.js +4 -4
  35. package/dist/Modal/index.js +2 -2
  36. package/dist/OrgTable/index.js +1 -1
  37. package/dist/PeopleRail/index.js +2 -2
  38. package/dist/PrincipalPicker/index.js +6 -6
  39. package/dist/ReviewList/ReviewList.d.ts +58 -0
  40. package/dist/ReviewList/index.d.ts +3 -0
  41. package/dist/ReviewList/index.js +6 -0
  42. package/dist/ReviewList-TIN6C2JN.css +116 -0
  43. package/dist/RichEditor/index.js +1 -1
  44. package/dist/SegmentedControl/index.js +3 -3
  45. package/dist/SetupWizard/SetupWizard.d.ts +17 -11
  46. package/dist/SetupWizard/index.js +2 -2
  47. package/dist/{SetupWizard-GZK5UDKC.css → SetupWizard-Z54H6RYW.css} +86 -15
  48. package/dist/ShareDialog/index.js +3 -3
  49. package/dist/SheetColumnEditor/index.js +11 -11
  50. package/dist/SheetGrid/index.js +4 -4
  51. package/dist/SlideFilmstrip/index.js +3 -3
  52. package/dist/Switcher/index.js +6 -6
  53. package/dist/TableCells/index.js +1 -1
  54. package/dist/Tabs/index.js +2 -2
  55. package/dist/TagsInput/index.js +2 -2
  56. package/dist/ThemeSwitcher/index.js +4 -4
  57. package/dist/TimeWindowPicker/index.js +5 -5
  58. package/dist/TreeCanvas/index.js +3 -3
  59. package/dist/VersionCompare/index.js +6 -6
  60. package/dist/{chunk-M7MMWXKE.js → chunk-4QIGQC6Y.js} +1 -1
  61. package/dist/{chunk-ROXAHDMA.js → chunk-6PEALINJ.js} +3 -3
  62. package/dist/{chunk-55H7REZK.js → chunk-BR4FA2NG.js} +1 -1
  63. package/dist/{chunk-B424UBV3.js → chunk-CNTBUK24.js} +2 -2
  64. package/dist/{chunk-XSHA74LN.js → chunk-CONCQJ2X.js} +4 -4
  65. package/dist/{chunk-V3M7V5SO.js → chunk-DTCX5KCL.js} +4 -4
  66. package/dist/{chunk-LZDTH436.js → chunk-DU5AHR5B.js} +2 -2
  67. package/dist/{chunk-TNGIFWDG.js → chunk-E2X2MXVK.js} +1 -1
  68. package/dist/{chunk-ATRRLHLU.js → chunk-EMC2QD76.js} +1 -1
  69. package/dist/{chunk-Z2SK4MPL.js → chunk-F45VSK2M.js} +2 -2
  70. package/dist/{chunk-K3UA2GJF.js → chunk-GM2LN24I.js} +2 -2
  71. package/dist/{chunk-ZXQXEP2S.js → chunk-HEBW53YG.js} +2 -2
  72. package/dist/{chunk-JFKPOVDA.js → chunk-IRAS2CZ5.js} +2 -2
  73. package/dist/{chunk-WCIJW2SA.js → chunk-JM5AN3CF.js} +1 -1
  74. package/dist/{chunk-XFZ7JWBJ.js → chunk-LHKIP4ZP.js} +2 -2
  75. package/dist/{chunk-VYVW24VC.js → chunk-LVFG2RER.js} +1 -1
  76. package/dist/{chunk-HTEQFRDI.js → chunk-LXCRHVMZ.js} +1 -1
  77. package/dist/{chunk-AQCJKX5R.js → chunk-M5LON3CU.js} +2 -2
  78. package/dist/{chunk-LP6EDXO5.js → chunk-MZ3QFQDL.js} +1 -1
  79. package/dist/{chunk-UM5LMW5X.js → chunk-NILOJV62.js} +1 -1
  80. package/dist/chunk-OBUQVGEG.js +38 -0
  81. package/dist/{chunk-362TAJUQ.js → chunk-PGYIDNGG.js} +2 -2
  82. package/dist/{chunk-WO4W5FTB.js → chunk-PZQK7DWI.js} +1 -1
  83. package/dist/{chunk-JV4G7LH3.js → chunk-PZZHO6OS.js} +1 -1
  84. package/dist/{chunk-CPOD27EG.js → chunk-QEVW4DIN.js} +1 -1
  85. package/dist/{chunk-5WJAH6JG.js → chunk-QRA2GOK2.js} +1 -1
  86. package/dist/{chunk-BIRR4RKZ.js → chunk-RBUA7ZNK.js} +1 -1
  87. package/dist/{chunk-5FB6DGGC.js → chunk-SMVWDO72.js} +2 -2
  88. package/dist/{chunk-4QW6K7RK.js → chunk-U3LNU4B2.js} +1 -1
  89. package/dist/{chunk-JIMTX2X3.js → chunk-UD76FCAO.js} +1 -1
  90. package/dist/{chunk-ZZL54LEO.js → chunk-VBEMIZIJ.js} +1 -1
  91. package/dist/{chunk-FAHAJWZR.js → chunk-VEXOODVM.js} +4 -4
  92. package/dist/{chunk-4C5CZT4D.js → chunk-WXWMHYKW.js} +2 -2
  93. package/dist/{chunk-N3MM67K4.js → chunk-XNKARRTG.js} +1 -1
  94. package/dist/{chunk-WIYTIJF6.js → chunk-XS7HRQVY.js} +1 -1
  95. package/dist/{chunk-5Z4DAS53.js → chunk-ZBZUTUE7.js} +1 -1
  96. package/dist/generated/index.d.ts +1 -0
  97. package/dist/generated/index.js +94 -93
  98. package/dist/index.js +94 -93
  99. package/dist/styles.css +226 -20
  100. package/dist/utils/index.js +1 -1
  101. package/package.json +3 -3
  102. package/dist/{chunk-RRHB5WWN.js → chunk-25S5YROP.js} +1 -1
  103. package/dist/{chunk-DEBVNLFJ.js → chunk-3RCHEFIL.js} +1 -1
  104. package/dist/{chunk-P432I5DQ.js → chunk-55MPFB2U.js} +0 -0
  105. package/dist/{chunk-I4Q6PACO.js → chunk-GKRPPSWY.js} +1 -1
  106. package/dist/{chunk-MXBDOQA5.js → chunk-ICPQIAD6.js} +1 -1
  107. package/dist/{chunk-5UEANIIW.js → chunk-K2FNW3MK.js} +1 -1
  108. package/dist/{chunk-NC3Z6MM3.js → chunk-N224FUS3.js} +1 -1
  109. package/dist/{chunk-TN22R6LW.js → chunk-QLEJPU5R.js} +2 -2
  110. package/dist/{chunk-RFK4ROA7.js → chunk-R3BA3C4Y.js} +1 -1
  111. package/dist/{chunk-VZICPYGR.js → chunk-SNQRGH4A.js} +1 -1
  112. package/dist/{chunk-LKBZV5IT.js → chunk-VWYT3GVV.js} +1 -1
  113. package/dist/{chunk-SFG7TS4Q.js → chunk-YCC2S7DF.js} +1 -1
package/dist/styles.css CHANGED
@@ -702,7 +702,7 @@
702
702
  }
703
703
 
704
704
 
705
- /* AppShell-BIUFNT3J.css */
705
+ /* AppShell-5LPXYUV3.css */
706
706
  /*
707
707
  * The application frame: a rail on the FRAME, and the screen on a SHEET that
708
708
  * floats beside it.
@@ -1316,13 +1316,25 @@
1316
1316
  programmatic focus does not match :focus-visible, so neither the browser nor
1317
1317
  the document baseline draws a ring around the whole screen. */
1318
1318
 
1319
+ /*
1320
+ * THE CONTENT'S END is room under the last line, so it never reads flush
1321
+ * against the window's edge. It is a custom property,
1322
+ * `--crewlet-app-shell-content-end`, because a screen that ends in a bar
1323
+ * docked to the bottom of the scroller (a setup's footer) IS that edge: the
1324
+ * bar takes the room back with a negative margin of the same length, and
1325
+ * sits on the scroller's bottom at the end of a scroll exactly where it stood
1326
+ * while scrolling, rather than riding the room's height above it.
1327
+ */
1319
1328
  .crewlet-app-shell__content {
1329
+ --crewlet-app-shell-content-end: var(--spacing-10);
1330
+
1320
1331
  display: flex;
1321
1332
  flex-direction: column;
1322
1333
  gap: var(--spacing-5);
1323
1334
  max-width: var(--size-content-max);
1324
1335
  margin: 0 auto;
1325
- padding: var(--spacing-5) var(--spacing-5) var(--spacing-10);
1336
+ padding: var(--spacing-5) var(--spacing-5);
1337
+ padding-bottom: var(--crewlet-app-shell-content-end);
1326
1338
  min-width: 0;
1327
1339
  }
1328
1340
 
@@ -1341,8 +1353,9 @@
1341
1353
  }
1342
1354
 
1343
1355
  .crewlet-app-shell--fill .crewlet-app-shell__content {
1356
+ --crewlet-app-shell-content-end: var(--spacing-5);
1357
+
1344
1358
  height: 100%;
1345
- padding-bottom: var(--spacing-5);
1346
1359
  }
1347
1360
 
1348
1361
  /* Hidden by default, revealed by the breakpoint below: the wide layout has the
@@ -1461,7 +1474,10 @@
1461
1474
  }
1462
1475
 
1463
1476
  .crewlet-app-shell__content {
1464
- padding: var(--spacing-4) var(--spacing-4) var(--spacing-9);
1477
+ --crewlet-app-shell-content-end: var(--spacing-9);
1478
+
1479
+ padding: var(--spacing-4) var(--spacing-4);
1480
+ padding-bottom: var(--crewlet-app-shell-content-end);
1465
1481
  }
1466
1482
  }
1467
1483
 
@@ -24857,6 +24873,125 @@ button.crewlet-presence-stack__member:focus-visible {
24857
24873
  }
24858
24874
 
24859
24875
 
24876
+ /* ReviewList-TIN6C2JN.css */
24877
+ /*
24878
+ * ReviewList: a setup's parts in one bordered box, a row each, before the
24879
+ * setup is finished (ReviewList.tsx).
24880
+ *
24881
+ * A ROW IS A GRID OF THREE COLUMNS: the glyph's tile, the part (its title and
24882
+ * state over its values), and the action. The values sit under the title, at
24883
+ * its start, and reach the row's end under the action, so a row of logos or
24884
+ * swatches has the whole width and the titles still run down one line.
24885
+ */
24886
+ .crewlet-review-list {
24887
+ container-type: inline-size;
24888
+ display: flex;
24889
+ flex-direction: column;
24890
+ min-width: 0;
24891
+ margin: 0;
24892
+ padding: 0;
24893
+ border: 1px solid var(--color-border-default);
24894
+ border-radius: var(--radius-lg);
24895
+ background-color: var(--color-surface-subtle);
24896
+ list-style: none;
24897
+ }
24898
+
24899
+ .crewlet-review-list__item {
24900
+ display: grid;
24901
+ grid-template-columns: auto minmax(0, 1fr) auto;
24902
+ grid-template-areas:
24903
+ 'icon head action'
24904
+ '. body body'
24905
+ '. error error';
24906
+ align-items: center;
24907
+ column-gap: var(--spacing-3);
24908
+ min-width: 0;
24909
+ padding: var(--spacing-4) var(--spacing-5);
24910
+ }
24911
+
24912
+ .crewlet-review-list__item + .crewlet-review-list__item {
24913
+ border-top: 1px solid var(--color-border-default);
24914
+ }
24915
+
24916
+ .crewlet-review-list__icon {
24917
+ grid-area: icon;
24918
+ }
24919
+
24920
+ .crewlet-review-list__head {
24921
+ display: flex;
24922
+ flex-wrap: wrap;
24923
+ align-items: center;
24924
+ gap: var(--spacing-1) var(--spacing-2);
24925
+ grid-area: head;
24926
+ min-width: 0;
24927
+ }
24928
+
24929
+ .crewlet-review-list__title {
24930
+ margin: 0;
24931
+ color: var(--color-text-primary);
24932
+ font-family: var(--font-family-sans);
24933
+ font-size: var(--font-size-sm);
24934
+ font-weight: var(--font-weight-semibold);
24935
+ line-height: var(--font-line-height-tight);
24936
+ }
24937
+
24938
+ .crewlet-review-list__action {
24939
+ display: flex;
24940
+ align-items: center;
24941
+ gap: var(--spacing-1);
24942
+ grid-area: action;
24943
+ }
24944
+
24945
+ .crewlet-review-list__body {
24946
+ grid-area: body;
24947
+ min-width: 0;
24948
+ margin-top: var(--spacing-3);
24949
+ color: var(--color-text-primary);
24950
+ font-size: var(--font-size-sm);
24951
+ line-height: var(--font-line-height-body);
24952
+ }
24953
+
24954
+ /* WHAT HOLDS THE FINISH, in the danger ink with its glyph, so it never rests on the hue alone. */
24955
+ .crewlet-review-list__error {
24956
+ display: flex;
24957
+ align-items: flex-start;
24958
+ gap: var(--spacing-1);
24959
+ grid-area: error;
24960
+ margin: var(--spacing-2) 0 0;
24961
+ color: var(--color-feedback-danger-ink);
24962
+ font-size: var(--font-size-xs);
24963
+ line-height: var(--font-line-height-normal);
24964
+ }
24965
+
24966
+ .crewlet-review-list__error > svg {
24967
+ flex: none;
24968
+ margin-top: 1px;
24969
+ }
24970
+
24971
+ /* WITHOUT A GLYPH the part starts at the row's start, with no empty column before it. */
24972
+ .crewlet-review-list__item--plain {
24973
+ grid-template-columns: minmax(0, 1fr) auto;
24974
+ grid-template-areas:
24975
+ 'head action'
24976
+ 'body body'
24977
+ 'error error';
24978
+ }
24979
+
24980
+ /* A NARROW LIST gives the values the whole row: an indent of a tile and a gap is a fifth of a phone. */
24981
+ @container (width < 28rem) {
24982
+ .crewlet-review-list__item {
24983
+ padding: var(--spacing-3) var(--spacing-4);
24984
+ }
24985
+
24986
+ .crewlet-review-list__item:not(.crewlet-review-list__item--plain) {
24987
+ grid-template-areas:
24988
+ 'icon head action'
24989
+ 'body body body'
24990
+ 'error error error';
24991
+ }
24992
+ }
24993
+
24994
+
24860
24995
  /* RichEditor-NPD2KAPS.css */
24861
24996
  /*
24862
24997
  * The rich editor (RichEditor.tsx).
@@ -26834,7 +26969,7 @@ svg.crewlet-select__chevron {
26834
26969
  }
26835
26970
 
26836
26971
 
26837
- /* SetupWizard-GZK5UDKC.css */
26972
+ /* SetupWizard-Z54H6RYW.css */
26838
26973
  /*
26839
26974
  * SetupWizard: a setup walked step by step on a page of its own
26840
26975
  * (SetupWizard.tsx).
@@ -26844,27 +26979,58 @@ svg.crewlet-select__chevron {
26844
26979
  * from 70rem of the wizard's own width, the aside (320px). Under 70rem the
26845
26980
  * aside takes the row under the content and the rail runs down beside both.
26846
26981
  * Under the phone breakpoint every part is one column, in reading order.
26982
+ *
26983
+ * THE TRACKS ARE THE MEASURE, NOT THE WINDOW. The content's track is at most
26984
+ * its column, so on a window wider than the parts the aside stands right
26985
+ * beside the content and the header and the footer end where the parts do.
26986
+ * A track of 1fr with the content held to 640px inside it left the preview
26987
+ * stranded at the window's far edge with a void between, and Continue a
26988
+ * window's width from the fields it continues. A wide step (`wide`) takes
26989
+ * the content and the aside's columns together, so its footer ends where
26990
+ * every other step's does.
26847
26991
  */
26848
26992
 
26849
26993
  .crewlet-setup-wizard {
26994
+ --crewlet-setup-wizard-rail: 240px;
26995
+ --crewlet-setup-wizard-column: 640px;
26996
+ --crewlet-setup-wizard-aside: 320px;
26997
+ --crewlet-setup-wizard-gap: var(--spacing-8);
26998
+ --crewlet-setup-wizard-wide: calc(
26999
+ var(--crewlet-setup-wizard-column) + var(--crewlet-setup-wizard-gap) + var(--crewlet-setup-wizard-aside)
27000
+ );
27001
+
26850
27002
  container-type: inline-size;
26851
27003
  min-width: 0;
26852
27004
  }
26853
27005
 
26854
27006
  .crewlet-setup-wizard__frame {
26855
27007
  display: grid;
26856
- grid-template-columns: 240px minmax(0, 1fr);
27008
+ grid-template-columns: var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-column));
26857
27009
  grid-template-areas:
26858
27010
  'head head'
26859
27011
  'rail content'
26860
27012
  'rail aside'
26861
27013
  'foot foot';
26862
27014
  grid-template-rows: auto auto 1fr auto;
26863
- column-gap: var(--spacing-8);
27015
+ column-gap: var(--crewlet-setup-wizard-gap);
26864
27016
  row-gap: var(--spacing-6);
26865
27017
  min-width: 0;
26866
27018
  }
26867
27019
 
27020
+ /* With no aside there is no row for one, and no second gap above the footer. */
27021
+ .crewlet-setup-wizard--no-aside .crewlet-setup-wizard__frame {
27022
+ grid-template-areas:
27023
+ 'head head'
27024
+ 'rail content'
27025
+ 'foot foot';
27026
+ grid-template-rows: auto 1fr auto;
27027
+ }
27028
+
27029
+ /* A WIDE STEP lays out columns of its own across the content's and the aside's columns together. */
27030
+ .crewlet-setup-wizard--wide .crewlet-setup-wizard__frame {
27031
+ grid-template-columns: var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-wide));
27032
+ }
27033
+
26868
27034
  .crewlet-setup-wizard__head {
26869
27035
  display: flex;
26870
27036
  flex-direction: column;
@@ -26896,7 +27062,6 @@ svg.crewlet-select__chevron {
26896
27062
  grid-area: content;
26897
27063
  box-sizing: border-box;
26898
27064
  width: 100%;
26899
- max-width: 640px;
26900
27065
  min-width: 0;
26901
27066
  }
26902
27067
 
@@ -26939,7 +27104,6 @@ svg.crewlet-select__chevron {
26939
27104
  gap: var(--spacing-4);
26940
27105
  grid-area: aside;
26941
27106
  box-sizing: border-box;
26942
- max-width: 640px;
26943
27107
  min-width: 0;
26944
27108
  padding-top: var(--spacing-6);
26945
27109
  border-top: 1px solid var(--color-border-default);
@@ -26949,6 +27113,14 @@ svg.crewlet-select__chevron {
26949
27113
  * THE FOOTER holds the step's actions at the bottom of the view while the
26950
27114
  * content scrolls under it, on the sheet's own ground with a hairline above,
26951
27115
  * and clears the device's safe area where it has one.
27116
+ *
27117
+ * IT ENDS THE SCREEN. Inside an `AppShell` the content column keeps room
27118
+ * under its last line (`--crewlet-app-shell-content-end`, 64px wide), and a
27119
+ * docked bar is that last line: the footer takes the room back, so at the end
27120
+ * of a scroll it rests on the scroller's bottom edge, where it stood while
27121
+ * scrolling, rather than rising 64px with a strip of empty sheet under it.
27122
+ * Outside a shell there is no room to take back and the margin is zero. The
27123
+ * wizard is the screen's last element for the same reason.
26952
27124
  */
26953
27125
  .crewlet-setup-wizard__footer {
26954
27126
  position: sticky;
@@ -26959,6 +27131,7 @@ svg.crewlet-select__chevron {
26959
27131
  align-items: center;
26960
27132
  gap: var(--spacing-2);
26961
27133
  grid-area: foot;
27134
+ margin-bottom: calc(-1 * var(--crewlet-app-shell-content-end, 0px));
26962
27135
  padding: var(--spacing-3) 0 calc(var(--spacing-3) + env(safe-area-inset-bottom, var(--spacing-0)));
26963
27136
  border-top: 1px solid var(--color-border-default);
26964
27137
  background: var(--color-surface-background);
@@ -26977,15 +27150,16 @@ svg.crewlet-select__chevron {
26977
27150
  margin-inline-start: auto;
26978
27151
  }
26979
27152
 
26980
- /* A WIDE STEP lays out columns of its own across the whole width beside the rail. */
26981
- .crewlet-setup-wizard--wide .crewlet-setup-wizard__content {
26982
- max-width: none;
26983
- }
26984
-
26985
- /* BESIDE THE CONTENT, from 70rem of the wizard's own width: the aside holds in view. */
27153
+ /*
27154
+ * BESIDE THE CONTENT, from 70rem of the wizard's own width: the aside holds in
27155
+ * view. Written at the specificity of the wide and no-aside rules above, and
27156
+ * after them, so the three shapes are decided by source order alone.
27157
+ */
26986
27158
  @container (min-width: 70rem) {
26987
- .crewlet-setup-wizard__frame {
26988
- grid-template-columns: 240px minmax(0, 1fr) 320px;
27159
+ .crewlet-setup-wizard .crewlet-setup-wizard__frame {
27160
+ grid-template-columns:
27161
+ var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-column))
27162
+ var(--crewlet-setup-wizard-aside);
26989
27163
  grid-template-areas:
26990
27164
  'head head head'
26991
27165
  'rail content aside'
@@ -26993,15 +27167,19 @@ svg.crewlet-select__chevron {
26993
27167
  grid-template-rows: auto 1fr auto;
26994
27168
  }
26995
27169
 
26996
- /* With no aside, nothing is held for one: the content takes its column too. */
27170
+ /* With no aside, nothing is held for one. */
26997
27171
  .crewlet-setup-wizard--no-aside .crewlet-setup-wizard__frame {
26998
- grid-template-columns: 240px minmax(0, 1fr);
27172
+ grid-template-columns: var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-column));
26999
27173
  grid-template-areas:
27000
27174
  'head head'
27001
27175
  'rail content'
27002
27176
  'foot foot';
27003
27177
  }
27004
27178
 
27179
+ .crewlet-setup-wizard--wide.crewlet-setup-wizard--no-aside .crewlet-setup-wizard__frame {
27180
+ grid-template-columns: var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-wide));
27181
+ }
27182
+
27005
27183
  .crewlet-setup-wizard__aside {
27006
27184
  position: sticky;
27007
27185
  top: var(--spacing-5);
@@ -27017,7 +27195,7 @@ svg.crewlet-select__chevron {
27017
27195
  * position line, and scrolls away with the page rather than covering it.
27018
27196
  */
27019
27197
  @media (width < 640px) {
27020
- .crewlet-setup-wizard__frame {
27198
+ .crewlet-setup-wizard .crewlet-setup-wizard__frame {
27021
27199
  grid-template-columns: minmax(0, 1fr);
27022
27200
  grid-template-areas:
27023
27201
  'head'
@@ -27029,6 +27207,14 @@ svg.crewlet-select__chevron {
27029
27207
  row-gap: var(--spacing-5);
27030
27208
  }
27031
27209
 
27210
+ .crewlet-setup-wizard--no-aside .crewlet-setup-wizard__frame {
27211
+ grid-template-areas:
27212
+ 'head'
27213
+ 'rail'
27214
+ 'content'
27215
+ 'foot';
27216
+ }
27217
+
27032
27218
  .crewlet-setup-wizard__rail {
27033
27219
  position: static;
27034
27220
  display: flex;
@@ -27045,6 +27231,26 @@ svg.crewlet-select__chevron {
27045
27231
  padding-top: 0;
27046
27232
  border-top: 0;
27047
27233
  }
27234
+
27235
+ /*
27236
+ * THE ACTIONS SHARE TWO ROWS: the way out and the step's other actions on
27237
+ * the first, the step's last action, its primary, the whole width on the
27238
+ * second, under the thumb. The two groups give their buttons to the
27239
+ * footer's own row, so three short buttons no longer take three lines of a
27240
+ * footer held over the content.
27241
+ */
27242
+ .crewlet-setup-wizard__footer-start,
27243
+ .crewlet-setup-wizard__footer-end {
27244
+ display: contents;
27245
+ }
27246
+
27247
+ .crewlet-setup-wizard__footer-end > :first-child {
27248
+ margin-inline-start: auto;
27249
+ }
27250
+
27251
+ .crewlet-setup-wizard__footer-end > :last-child {
27252
+ flex: 1 1 100%;
27253
+ }
27048
27254
  }
27049
27255
 
27050
27256
  .crewlet-setup-wizard__position {
@@ -3,6 +3,6 @@ export { downloadBlob, downloadText, safeFilename, useDownload } from '../chunk-
3
3
  export { useClipboard, writeClipboard } from '../chunk-STJ7QBC3.js';
4
4
  export { useOutcome } from '../chunk-DTIW4CHZ.js';
5
5
  export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
6
- export { FOCUS_MODALITY_ATTRIBUTE, FOCUS_RETURNED_ATTRIBUTE, returnFocus, trackFocusModality, useFocusModality } from '../chunk-NUZHC6MM.js';
7
6
  export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
7
+ export { FOCUS_MODALITY_ATTRIBUTE, FOCUS_RETURNED_ATTRIBUTE, returnFocus, trackFocusModality, useFocusModality } from '../chunk-NUZHC6MM.js';
8
8
  export { cx } from '../chunk-ODEQTPFM.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.53.0",
3
+ "version": "0.54.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.53.0",
46
- "@crewlethq/tokens": "0.53.0",
45
+ "@crewlethq/icons": "0.54.0",
46
+ "@crewlethq/tokens": "0.54.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 { Tag } from './chunk-KYIAFNU7.js';
2
2
  import { useListbox } from './chunk-7KHM2FZH.js';
3
3
  import { isComposing } from './chunk-H5XTJ7GJ.js';
4
4
  import { useFocusModality } from './chunk-NUZHC6MM.js';
5
- import { IconButton } from './chunk-LACA4JGC.js';
6
5
  import { announce } from './chunk-RSAQOKH3.js';
6
+ import { IconButton } from './chunk-LACA4JGC.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './TagsInput-CLFHP6I2.css';
9
9
  import { forwardRef, useState, useRef, useId, useImperativeHandle, useEffect, useMemo, useLayoutEffect } from 'react';
@@ -1,7 +1,7 @@
1
1
  import { PRESENCE_LABELS, presenceOrder, collapseSessions } from './chunk-Z7JYG5TF.js';
2
2
  import { Avatar } from './chunk-PZKHBB7D.js';
3
- import { Button } from './chunk-OG6CL3EB.js';
4
3
  import { headingTag, useHeadingLevel } from './chunk-PQADV6P6.js';
4
+ import { Button } from './chunk-OG6CL3EB.js';
5
5
  import { IconButton } from './chunk-LACA4JGC.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './PeopleRail-SZGHZXVT.css';
File without changes
@@ -1,8 +1,8 @@
1
1
  import { StatusDot } from './chunk-WIATRXEJ.js';
2
2
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
3
+ import { Count } from './chunk-BHHIIK3M.js';
3
4
  import { Menu } from './chunk-3JIZ2A6K.js';
4
5
  import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
5
- import { Count } from './chunk-BHHIIK3M.js';
6
6
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
7
7
  import { cx } from './chunk-ODEQTPFM.js';
8
8
  import './HitArea-QUOS6ZDJ.css';
@@ -1,7 +1,7 @@
1
1
  import { LayerNodeBridge } from './chunk-LM3ISVJA.js';
2
2
  import { Tooltip } from './chunk-I33UIUZD.js';
3
- import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-OMV5W53A.js';
4
3
  import { Kbd } from './chunk-SMBKXWML.js';
4
+ import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-OMV5W53A.js';
5
5
  import { Button } from './chunk-OG6CL3EB.js';
6
6
  import { returnFocus } from './chunk-NUZHC6MM.js';
7
7
  import { IconButton } from './chunk-LACA4JGC.js';
@@ -1,7 +1,7 @@
1
1
  import { SlideStage } from './chunk-RMEBFYL7.js';
2
2
  import { useReorder } from './chunk-XJ2QEBMM.js';
3
- import { Menu } from './chunk-3JIZ2A6K.js';
4
3
  import { Kbd, isApplePlatform } from './chunk-SMBKXWML.js';
4
+ import { Menu } from './chunk-3JIZ2A6K.js';
5
5
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './SlideFilmstrip-PAT7P4OG.css';
@@ -6,9 +6,9 @@ import { ChangeMark } from './chunk-66X5WDKE.js';
6
6
  import { isEmptyValue, displayText, ratingMax, findPerson, findOption, statusTone, editText, textMax, sheetLabels, normalizeValue, sameValue, spokenText, drawnColumns, fitSamples, fittedWidth, columnWidth, SHEET_COLUMN_BOUNDS, sortRows, SHEET_ROW_HEIGHT, cellKey, columnOffsets, SHEET_ROW_NUMBER_WIDTH, rangeOf, presenceByCell, presenceByRow, presenceByColumn, scrollToRow, planClear, visibleRows, cellDescription, nextSort, rowName, inRange, hasPrevious, flagText, toTSV, planPaste, parseTSV, isMod, moveFrom, isTypingKey, editorSide, optionHue, parseText, liveOptions, checkValue } from './chunk-LFSIKGRQ.js';
7
7
  import { presenceLabels } from './chunk-Z7JYG5TF.js';
8
8
  import { Popover } from './chunk-KHJIEPZV.js';
9
- import { Avatar } from './chunk-PZKHBB7D.js';
10
9
  import { Tooltip } from './chunk-I33UIUZD.js';
11
10
  import { StatusDot } from './chunk-WIATRXEJ.js';
11
+ import { Avatar } from './chunk-PZKHBB7D.js';
12
12
  import { Menu } from './chunk-3JIZ2A6K.js';
13
13
  import { Button } from './chunk-OG6CL3EB.js';
14
14
  import { isComposing } from './chunk-H5XTJ7GJ.js';
@@ -1,9 +1,9 @@
1
1
  import { characterCountState, CharacterCount } from './chunk-XCUUI7E7.js';
2
+ import { useHeadingLevel, headingTag, HeadingLevelProvider, nextHeadingLevel } from './chunk-PQADV6P6.js';
2
3
  import { isComposing } from './chunk-H5XTJ7GJ.js';
3
4
  import { useFocusModality } from './chunk-NUZHC6MM.js';
4
- import { useHeadingLevel, headingTag, HeadingLevelProvider, nextHeadingLevel } from './chunk-PQADV6P6.js';
5
- import { IconButton } from './chunk-LACA4JGC.js';
6
5
  import { announce } from './chunk-RSAQOKH3.js';
6
+ import { IconButton } from './chunk-LACA4JGC.js';
7
7
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
8
8
  import { cx } from './chunk-ODEQTPFM.js';
9
9
  import './Input-GMOWHZRG.css';
@@ -1,5 +1,5 @@
1
- import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
2
1
  import { ArtifactKindGlyph } from './chunk-RSKW25Y5.js';
2
+ import { HIT_AREA_CLASS } from './chunk-2YTOOH3A.js';
3
3
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
4
4
  import { cx } from './chunk-ODEQTPFM.js';
5
5
  import './HitArea-QUOS6ZDJ.css';
@@ -1,5 +1,5 @@
1
- import { Avatar } from './chunk-PZKHBB7D.js';
2
1
  import { useRoving, tabStop } from './chunk-EGMQURBR.js';
2
+ import { Avatar } from './chunk-PZKHBB7D.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import { CREWLET_CHARACTERS, CREWLET_CHARACTER_GEOMETRY } from '@crewlethq/icons/characters';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
- import { IconButton } from './chunk-LACA4JGC.js';
2
1
  import { announce } from './chunk-RSAQOKH3.js';
2
+ import { IconButton } from './chunk-LACA4JGC.js';
3
3
  import { cx } from './chunk-ODEQTPFM.js';
4
4
  import './ArrangeFrame-QXOQTFAH.css';
5
5
  import { forwardRef, useRef, useCallback, useState, useEffect } from 'react';
@@ -1,7 +1,7 @@
1
+ import { HeadingLevelProvider } from './chunk-PQADV6P6.js';
1
2
  import { useLayerContainer } from './chunk-OMV5W53A.js';
2
3
  import { Button } from './chunk-OG6CL3EB.js';
3
4
  import { focusables, useModalLayer, useBodyScrollLock } from './chunk-H5XTJ7GJ.js';
4
- import { HeadingLevelProvider } from './chunk-PQADV6P6.js';
5
5
  import { IconButton } from './chunk-LACA4JGC.js';
6
6
  import { cx } from './chunk-ODEQTPFM.js';
7
7
  import './Modal-3HMP7WAZ.css';