@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
@@ -1,12 +1,12 @@
1
- export { LinkInterstitial, openExternal } from '../chunk-4QW6K7RK.js';
2
- import '../chunk-SFG7TS4Q.js';
1
+ export { LinkInterstitial, openExternal } from '../chunk-U3LNU4B2.js';
2
+ import '../chunk-YCC2S7DF.js';
3
3
  import '../chunk-5CLW2CXT.js';
4
4
  import '../chunk-BPCY7ZID.js';
5
+ import '../chunk-PQADV6P6.js';
5
6
  import '../chunk-OMV5W53A.js';
6
7
  import '../chunk-OG6CL3EB.js';
7
8
  import '../chunk-H5XTJ7GJ.js';
8
9
  import '../chunk-NUZHC6MM.js';
9
- import '../chunk-PQADV6P6.js';
10
10
  import '../chunk-LACA4JGC.js';
11
11
  import '../chunk-BZFWDIV6.js';
12
12
  import '../chunk-ODEQTPFM.js';
@@ -1,14 +1,14 @@
1
- export { ListInput, withDraft } from '../chunk-ROXAHDMA.js';
1
+ export { ListInput, withDraft } from '../chunk-6PEALINJ.js';
2
2
  import '../chunk-XJ2QEBMM.js';
3
- import '../chunk-OMV5W53A.js';
4
- import '../chunk-TN22R6LW.js';
5
- import '../chunk-XCUUI7E7.js';
6
3
  import '../chunk-SMBKXWML.js';
4
+ import '../chunk-QLEJPU5R.js';
5
+ import '../chunk-XCUUI7E7.js';
6
+ import '../chunk-PQADV6P6.js';
7
+ import '../chunk-OMV5W53A.js';
7
8
  import '../chunk-OG6CL3EB.js';
8
9
  import '../chunk-H5XTJ7GJ.js';
9
10
  import '../chunk-NUZHC6MM.js';
10
- import '../chunk-PQADV6P6.js';
11
- import '../chunk-LACA4JGC.js';
12
11
  import '../chunk-RSAQOKH3.js';
12
+ import '../chunk-LACA4JGC.js';
13
13
  import '../chunk-BZFWDIV6.js';
14
14
  import '../chunk-ODEQTPFM.js';
@@ -1,17 +1,17 @@
1
- export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-Z2SK4MPL.js';
1
+ export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-F45VSK2M.js';
2
2
  import '../chunk-NR4CPM4T.js';
3
3
  import '../chunk-OOC7Q67K.js';
4
- import '../chunk-5FB6DGGC.js';
5
- import '../chunk-I4Q6PACO.js';
4
+ import '../chunk-SMVWDO72.js';
5
+ import '../chunk-GKRPPSWY.js';
6
6
  import '../chunk-WIATRXEJ.js';
7
7
  import '../chunk-EGMQURBR.js';
8
+ import '../chunk-BHHIIK3M.js';
8
9
  import '../chunk-3JIZ2A6K.js';
9
10
  import '../chunk-OMV5W53A.js';
10
11
  import '../chunk-2YTOOH3A.js';
11
12
  import '../chunk-OG6CL3EB.js';
12
13
  import '../chunk-H5XTJ7GJ.js';
13
14
  import '../chunk-NUZHC6MM.js';
14
- import '../chunk-BHHIIK3M.js';
15
15
  import '../chunk-LACA4JGC.js';
16
16
  import '../chunk-BZFWDIV6.js';
17
17
  import '../chunk-ODEQTPFM.js';
@@ -1,16 +1,16 @@
1
- export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-JV4G7LH3.js';
1
+ export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-PZZHO6OS.js';
2
2
  import '../chunk-OOC7Q67K.js';
3
- import '../chunk-5FB6DGGC.js';
4
- import '../chunk-I4Q6PACO.js';
3
+ import '../chunk-SMVWDO72.js';
4
+ import '../chunk-GKRPPSWY.js';
5
5
  import '../chunk-WIATRXEJ.js';
6
6
  import '../chunk-EGMQURBR.js';
7
+ import '../chunk-BHHIIK3M.js';
7
8
  import '../chunk-3JIZ2A6K.js';
8
9
  import '../chunk-OMV5W53A.js';
9
10
  import '../chunk-2YTOOH3A.js';
10
11
  import '../chunk-OG6CL3EB.js';
11
12
  import '../chunk-H5XTJ7GJ.js';
12
13
  import '../chunk-NUZHC6MM.js';
13
- import '../chunk-BHHIIK3M.js';
14
14
  import '../chunk-LACA4JGC.js';
15
15
  import '../chunk-BZFWDIV6.js';
16
16
  import '../chunk-ODEQTPFM.js';
@@ -1,9 +1,9 @@
1
- export { ConfirmModal, Modal } from '../chunk-SFG7TS4Q.js';
1
+ export { ConfirmModal, Modal } from '../chunk-YCC2S7DF.js';
2
+ import '../chunk-PQADV6P6.js';
2
3
  import '../chunk-OMV5W53A.js';
3
4
  import '../chunk-OG6CL3EB.js';
4
5
  import '../chunk-H5XTJ7GJ.js';
5
6
  import '../chunk-NUZHC6MM.js';
6
- import '../chunk-PQADV6P6.js';
7
7
  import '../chunk-LACA4JGC.js';
8
8
  import '../chunk-BZFWDIV6.js';
9
9
  import '../chunk-ODEQTPFM.js';
@@ -5,8 +5,8 @@ import '../chunk-ONQKKHON.js';
5
5
  import '../chunk-LM3ISVJA.js';
6
6
  import '../chunk-5AQBPHZD.js';
7
7
  import '../chunk-PZKHBB7D.js';
8
- import '../chunk-OMV5W53A.js';
9
8
  import '../chunk-TROLVEZY.js';
9
+ import '../chunk-OMV5W53A.js';
10
10
  import '../chunk-H5XTJ7GJ.js';
11
11
  import '../chunk-NUZHC6MM.js';
12
12
  import '../chunk-LACA4JGC.js';
@@ -1,11 +1,11 @@
1
- export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-DEBVNLFJ.js';
1
+ export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-3RCHEFIL.js';
2
2
  import '../chunk-CENOOTAV.js';
3
3
  import '../chunk-Z7JYG5TF.js';
4
4
  import '../chunk-AYKXMIOR.js';
5
5
  import '../chunk-5AQBPHZD.js';
6
6
  import '../chunk-PZKHBB7D.js';
7
- import '../chunk-OG6CL3EB.js';
8
7
  import '../chunk-PQADV6P6.js';
8
+ import '../chunk-OG6CL3EB.js';
9
9
  import '../chunk-LACA4JGC.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -1,16 +1,16 @@
1
- export { PrincipalPicker } from '../chunk-ATRRLHLU.js';
2
- import '../chunk-WO4W5FTB.js';
1
+ export { PrincipalPicker } from '../chunk-EMC2QD76.js';
2
+ import '../chunk-PZQK7DWI.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-CI3VPIJN.js';
5
5
  import '../chunk-5AQBPHZD.js';
6
6
  import '../chunk-PZKHBB7D.js';
7
- import '../chunk-2YTOOH3A.js';
8
- import '../chunk-TN22R6LW.js';
7
+ import '../chunk-QLEJPU5R.js';
9
8
  import '../chunk-XCUUI7E7.js';
9
+ import '../chunk-PQADV6P6.js';
10
+ import '../chunk-2YTOOH3A.js';
10
11
  import '../chunk-H5XTJ7GJ.js';
11
12
  import '../chunk-NUZHC6MM.js';
12
- import '../chunk-PQADV6P6.js';
13
- import '../chunk-LACA4JGC.js';
14
13
  import '../chunk-RSAQOKH3.js';
14
+ import '../chunk-LACA4JGC.js';
15
15
  import '../chunk-BZFWDIV6.js';
16
16
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,58 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ /** The tones a part's state is said in: done, leaning on defaults, needing a look, or holding the finish. */
3
+ export type ReviewListTone = 'success' | 'neutral' | 'warning' | 'danger';
4
+ /** A part's state, as its pill says it: "Complete", "Uses defaults", "Missing required". */
5
+ export interface ReviewListStatus {
6
+ label: string;
7
+ tone: ReviewListTone;
8
+ }
9
+ export interface ReviewListProps extends Omit<HTMLAttributes<HTMLUListElement>, 'children'> {
10
+ /** What the list reviews, for assistive technology: "Brand summary". */
11
+ label: string;
12
+ /** The parts: `ReviewList.Item` elements, in the order the setup walks them. */
13
+ children?: ReactNode;
14
+ }
15
+ export interface ReviewListItemProps extends Omit<HTMLAttributes<HTMLLIElement>, 'title' | 'children'> {
16
+ /** The part's glyph, drawn on a tile at the start of its row. Decorative: the title names the part. */
17
+ icon?: ReactNode;
18
+ /** The part's name, as a heading one level under where the list sits: "Logos". */
19
+ title: ReactNode;
20
+ /** The part's state, as a pill beside its title. */
21
+ status?: ReviewListStatus | undefined;
22
+ /** What changes the part, at the end of its row: an Edit button that names the part. */
23
+ action?: ReactNode;
24
+ /**
25
+ * What keeps the part from being finished, in one sentence, said under its
26
+ * values in the danger ink: "Add the primary logo to adopt." It is an alert,
27
+ * so it is read as it appears; show it once a finish was tried, not before.
28
+ */
29
+ error?: ReactNode;
30
+ /** The part's values, SHOWN rather than described: the logos, the swatches, the faces. */
31
+ children?: ReactNode;
32
+ }
33
+ /**
34
+ * A review of a setup's parts before it is finished: one row a part, each with
35
+ * its glyph, its name, its state and the way back to it, over the values it
36
+ * holds.
37
+ *
38
+ * ONE BOX, ONE ROW A PART. The parts share one bordered box with a hairline
39
+ * between them, so five parts read as one summary and every row starts its
40
+ * title, its state and its values on the same lines, whatever each holds. A
41
+ * card a part, laid out in a grid, gave every card the height of its own
42
+ * values: a tall row of logos beside a one-line name left holes in the grid
43
+ * and a summary that read as five scattered objects.
44
+ *
45
+ * THE VALUES UNDER THE TITLE, at the title's start, so the row's glyph stands
46
+ * alone in its column and the eye runs down the titles. Under 28rem of the
47
+ * list's own width the values take the whole row, as a phone needs.
48
+ *
49
+ * A HEADING A PART, one level under where the list sits, so a screen reader
50
+ * moves part to part by heading; the state and the action follow the heading
51
+ * in reading order, and the error closes the row it is about.
52
+ */
53
+ export declare function ReviewList({ label, className, children, ...rest }: ReviewListProps): import("react").JSX.Element;
54
+ export declare namespace ReviewList {
55
+ var Item: typeof ReviewListItem;
56
+ }
57
+ declare function ReviewListItem({ icon, title, status, action, error, className, children, ...rest }: ReviewListItemProps): import("react").JSX.Element;
58
+ export {};
@@ -0,0 +1,3 @@
1
+ import './ReviewList.css';
2
+ export { ReviewList } from './ReviewList.js';
3
+ export type { ReviewListItemProps, ReviewListProps, ReviewListStatus, ReviewListTone } from './ReviewList.js';
@@ -0,0 +1,6 @@
1
+ export { ReviewList } from '../chunk-OBUQVGEG.js';
2
+ import '../chunk-IXJHTFXG.js';
3
+ import '../chunk-KYIAFNU7.js';
4
+ import '../chunk-WIATRXEJ.js';
5
+ import '../chunk-PQADV6P6.js';
6
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,116 @@
1
+ /*
2
+ * ReviewList: a setup's parts in one bordered box, a row each, before the
3
+ * setup is finished (ReviewList.tsx).
4
+ *
5
+ * A ROW IS A GRID OF THREE COLUMNS: the glyph's tile, the part (its title and
6
+ * state over its values), and the action. The values sit under the title, at
7
+ * its start, and reach the row's end under the action, so a row of logos or
8
+ * swatches has the whole width and the titles still run down one line.
9
+ */
10
+ .crewlet-review-list {
11
+ container-type: inline-size;
12
+ display: flex;
13
+ flex-direction: column;
14
+ min-width: 0;
15
+ margin: 0;
16
+ padding: 0;
17
+ border: 1px solid var(--color-border-default);
18
+ border-radius: var(--radius-lg);
19
+ background-color: var(--color-surface-subtle);
20
+ list-style: none;
21
+ }
22
+
23
+ .crewlet-review-list__item {
24
+ display: grid;
25
+ grid-template-columns: auto minmax(0, 1fr) auto;
26
+ grid-template-areas:
27
+ 'icon head action'
28
+ '. body body'
29
+ '. error error';
30
+ align-items: center;
31
+ column-gap: var(--spacing-3);
32
+ min-width: 0;
33
+ padding: var(--spacing-4) var(--spacing-5);
34
+ }
35
+
36
+ .crewlet-review-list__item + .crewlet-review-list__item {
37
+ border-top: 1px solid var(--color-border-default);
38
+ }
39
+
40
+ .crewlet-review-list__icon {
41
+ grid-area: icon;
42
+ }
43
+
44
+ .crewlet-review-list__head {
45
+ display: flex;
46
+ flex-wrap: wrap;
47
+ align-items: center;
48
+ gap: var(--spacing-1) var(--spacing-2);
49
+ grid-area: head;
50
+ min-width: 0;
51
+ }
52
+
53
+ .crewlet-review-list__title {
54
+ margin: 0;
55
+ color: var(--color-text-primary);
56
+ font-family: var(--font-family-sans);
57
+ font-size: var(--font-size-sm);
58
+ font-weight: var(--font-weight-semibold);
59
+ line-height: var(--font-line-height-tight);
60
+ }
61
+
62
+ .crewlet-review-list__action {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: var(--spacing-1);
66
+ grid-area: action;
67
+ }
68
+
69
+ .crewlet-review-list__body {
70
+ grid-area: body;
71
+ min-width: 0;
72
+ margin-top: var(--spacing-3);
73
+ color: var(--color-text-primary);
74
+ font-size: var(--font-size-sm);
75
+ line-height: var(--font-line-height-body);
76
+ }
77
+
78
+ /* WHAT HOLDS THE FINISH, in the danger ink with its glyph, so it never rests on the hue alone. */
79
+ .crewlet-review-list__error {
80
+ display: flex;
81
+ align-items: flex-start;
82
+ gap: var(--spacing-1);
83
+ grid-area: error;
84
+ margin: var(--spacing-2) 0 0;
85
+ color: var(--color-feedback-danger-ink);
86
+ font-size: var(--font-size-xs);
87
+ line-height: var(--font-line-height-normal);
88
+ }
89
+
90
+ .crewlet-review-list__error > svg {
91
+ flex: none;
92
+ margin-top: 1px;
93
+ }
94
+
95
+ /* WITHOUT A GLYPH the part starts at the row's start, with no empty column before it. */
96
+ .crewlet-review-list__item--plain {
97
+ grid-template-columns: minmax(0, 1fr) auto;
98
+ grid-template-areas:
99
+ 'head action'
100
+ 'body body'
101
+ 'error error';
102
+ }
103
+
104
+ /* A NARROW LIST gives the values the whole row: an indent of a tile and a gap is a fifth of a phone. */
105
+ @container (width < 28rem) {
106
+ .crewlet-review-list__item {
107
+ padding: var(--spacing-3) var(--spacing-4);
108
+ }
109
+
110
+ .crewlet-review-list__item:not(.crewlet-review-list__item--plain) {
111
+ grid-template-areas:
112
+ 'icon head action'
113
+ 'body body body'
114
+ 'error error error';
115
+ }
116
+ }
@@ -1,4 +1,4 @@
1
- export { RichEditor, preloadRichEditor } from '../chunk-VYVW24VC.js';
1
+ export { RichEditor, preloadRichEditor } from '../chunk-LVFG2RER.js';
2
2
  export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
3
3
  import '../chunk-BAKPMH3S.js';
4
4
  import '../chunk-BPCY7ZID.js';
@@ -1,15 +1,15 @@
1
1
  import '../chunk-OOC7Q67K.js';
2
- export { SegmentedControl } from '../chunk-5FB6DGGC.js';
3
- import '../chunk-I4Q6PACO.js';
2
+ export { SegmentedControl } from '../chunk-SMVWDO72.js';
3
+ import '../chunk-GKRPPSWY.js';
4
4
  import '../chunk-WIATRXEJ.js';
5
5
  import '../chunk-EGMQURBR.js';
6
+ import '../chunk-BHHIIK3M.js';
6
7
  import '../chunk-3JIZ2A6K.js';
7
8
  import '../chunk-OMV5W53A.js';
8
9
  import '../chunk-2YTOOH3A.js';
9
10
  import '../chunk-OG6CL3EB.js';
10
11
  import '../chunk-H5XTJ7GJ.js';
11
12
  import '../chunk-NUZHC6MM.js';
12
- import '../chunk-BHHIIK3M.js';
13
13
  import '../chunk-LACA4JGC.js';
14
14
  import '../chunk-BZFWDIV6.js';
15
15
  import '../chunk-ODEQTPFM.js';
@@ -47,9 +47,10 @@ export interface SetupWizardProps extends Omit<HTMLAttributes<HTMLDivElement>, '
47
47
  /** What stands at the start of the footer row, apart from the step's actions: Exit. */
48
48
  footerStart?: ReactNode;
49
49
  /**
50
- * The content takes the whole width beside the rail rather than one 640px
51
- * column, for a step that lays out columns of its own (a review of every
52
- * step beside a preview). Meant for a step with no `aside`.
50
+ * The content takes the content's and the aside's columns together (1000px
51
+ * at most) rather than one 640px column, for a step that lays out columns
52
+ * of its own (a review of every step beside a preview). Its footer ends
53
+ * where every other step's does. Meant for a step with no `aside`.
53
54
  */
54
55
  wide?: boolean | undefined;
55
56
  labels?: Partial<SetupWizardLabels> | undefined;
@@ -66,17 +67,22 @@ export interface SetupWizardProps extends Omit<HTMLAttributes<HTMLDivElement>, '
66
67
  * most 640px. The aside is a complementary landmark named by `asideLabel`,
67
68
  * held in view beside the content. The footer holds the step's actions at the
68
69
  * end of its row (and `footerStart`, the way out, at its start) at the bottom
69
- * of the view, above the device's safe area. A step that lays out columns of
70
- * its own takes the whole width beside the rail with `wide`.
70
+ * of the view, above the device's safe area, and at the end of a scroll rests
71
+ * on the scroller's bottom edge rather than above the shell's room under the
72
+ * content (`--crewlet-app-shell-content-end`). A step that lays out columns
73
+ * of its own takes the content's and the aside's columns with `wide`.
71
74
  *
72
75
  * THREE SHAPES. On a wide page the rail, the content and the aside stand side
73
- * by side (240px, the content, 320px). Where the wizard has under 70rem of its
74
- * own width, which is a 1024px window beside the application's rail, the aside
75
- * moves under the content and the rail stays: a container query, because the
76
- * room is the page's and not the window's, as in `AsideLayout`. Under the
76
+ * by side (240px, the content up to 640px, 320px), the aside right beside the
77
+ * content however wide the window, and the header and the footer ending where
78
+ * the parts do. Where the wizard has under 70rem of its own width, which is a
79
+ * 1024px window beside the application's rail, the aside moves under the
80
+ * content and the rail stays: a container query, because the room is the
81
+ * page's and not the window's, as in `AsideLayout`. Under the
77
82
  * phone breakpoint the rail becomes a row of steps above the content, under a
78
- * line that says "Step 3 of 6 · Colours", and the aside folds into a
79
- * disclosure, so the fields come first. Which element a phone draws is decided
83
+ * line that says "Step 3 of 6 · Colours", the aside folds into a
84
+ * disclosure, so the fields come first, and the footer's actions share two
85
+ * rows with the last of them, the primary, the whole width. Which element a phone draws is decided
80
86
  * in `useMediaMatch`, the one subscription for that question; how it is laid
81
87
  * out is decided in the stylesheet, at the same breakpoint token.
82
88
  *
@@ -1,11 +1,11 @@
1
- export { SetupWizard } from '../chunk-4C5CZT4D.js';
1
+ export { SetupWizard } from '../chunk-WXWMHYKW.js';
2
2
  import '../chunk-LDGQIDIZ.js';
3
3
  import '../chunk-DKB73KZI.js';
4
- import '../chunk-RTPQDNW3.js';
5
4
  import '../chunk-WIATRXEJ.js';
6
5
  import '../chunk-OGXHZHRX.js';
7
6
  import '../chunk-FZVJDJFN.js';
8
7
  import '../chunk-BHHIIK3M.js';
9
8
  import '../chunk-PQADV6P6.js';
9
+ import '../chunk-RTPQDNW3.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -7,27 +7,58 @@
7
7
  * from 70rem of the wizard's own width, the aside (320px). Under 70rem the
8
8
  * aside takes the row under the content and the rail runs down beside both.
9
9
  * Under the phone breakpoint every part is one column, in reading order.
10
+ *
11
+ * THE TRACKS ARE THE MEASURE, NOT THE WINDOW. The content's track is at most
12
+ * its column, so on a window wider than the parts the aside stands right
13
+ * beside the content and the header and the footer end where the parts do.
14
+ * A track of 1fr with the content held to 640px inside it left the preview
15
+ * stranded at the window's far edge with a void between, and Continue a
16
+ * window's width from the fields it continues. A wide step (`wide`) takes
17
+ * the content and the aside's columns together, so its footer ends where
18
+ * every other step's does.
10
19
  */
11
20
 
12
21
  .crewlet-setup-wizard {
22
+ --crewlet-setup-wizard-rail: 240px;
23
+ --crewlet-setup-wizard-column: 640px;
24
+ --crewlet-setup-wizard-aside: 320px;
25
+ --crewlet-setup-wizard-gap: var(--spacing-8);
26
+ --crewlet-setup-wizard-wide: calc(
27
+ var(--crewlet-setup-wizard-column) + var(--crewlet-setup-wizard-gap) + var(--crewlet-setup-wizard-aside)
28
+ );
29
+
13
30
  container-type: inline-size;
14
31
  min-width: 0;
15
32
  }
16
33
 
17
34
  .crewlet-setup-wizard__frame {
18
35
  display: grid;
19
- grid-template-columns: 240px minmax(0, 1fr);
36
+ grid-template-columns: var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-column));
20
37
  grid-template-areas:
21
38
  'head head'
22
39
  'rail content'
23
40
  'rail aside'
24
41
  'foot foot';
25
42
  grid-template-rows: auto auto 1fr auto;
26
- column-gap: var(--spacing-8);
43
+ column-gap: var(--crewlet-setup-wizard-gap);
27
44
  row-gap: var(--spacing-6);
28
45
  min-width: 0;
29
46
  }
30
47
 
48
+ /* With no aside there is no row for one, and no second gap above the footer. */
49
+ .crewlet-setup-wizard--no-aside .crewlet-setup-wizard__frame {
50
+ grid-template-areas:
51
+ 'head head'
52
+ 'rail content'
53
+ 'foot foot';
54
+ grid-template-rows: auto 1fr auto;
55
+ }
56
+
57
+ /* A WIDE STEP lays out columns of its own across the content's and the aside's columns together. */
58
+ .crewlet-setup-wizard--wide .crewlet-setup-wizard__frame {
59
+ grid-template-columns: var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-wide));
60
+ }
61
+
31
62
  .crewlet-setup-wizard__head {
32
63
  display: flex;
33
64
  flex-direction: column;
@@ -59,7 +90,6 @@
59
90
  grid-area: content;
60
91
  box-sizing: border-box;
61
92
  width: 100%;
62
- max-width: 640px;
63
93
  min-width: 0;
64
94
  }
65
95
 
@@ -102,7 +132,6 @@
102
132
  gap: var(--spacing-4);
103
133
  grid-area: aside;
104
134
  box-sizing: border-box;
105
- max-width: 640px;
106
135
  min-width: 0;
107
136
  padding-top: var(--spacing-6);
108
137
  border-top: 1px solid var(--color-border-default);
@@ -112,6 +141,14 @@
112
141
  * THE FOOTER holds the step's actions at the bottom of the view while the
113
142
  * content scrolls under it, on the sheet's own ground with a hairline above,
114
143
  * and clears the device's safe area where it has one.
144
+ *
145
+ * IT ENDS THE SCREEN. Inside an `AppShell` the content column keeps room
146
+ * under its last line (`--crewlet-app-shell-content-end`, 64px wide), and a
147
+ * docked bar is that last line: the footer takes the room back, so at the end
148
+ * of a scroll it rests on the scroller's bottom edge, where it stood while
149
+ * scrolling, rather than rising 64px with a strip of empty sheet under it.
150
+ * Outside a shell there is no room to take back and the margin is zero. The
151
+ * wizard is the screen's last element for the same reason.
115
152
  */
116
153
  .crewlet-setup-wizard__footer {
117
154
  position: sticky;
@@ -122,6 +159,7 @@
122
159
  align-items: center;
123
160
  gap: var(--spacing-2);
124
161
  grid-area: foot;
162
+ margin-bottom: calc(-1 * var(--crewlet-app-shell-content-end, 0px));
125
163
  padding: var(--spacing-3) 0 calc(var(--spacing-3) + env(safe-area-inset-bottom, var(--spacing-0)));
126
164
  border-top: 1px solid var(--color-border-default);
127
165
  background: var(--color-surface-background);
@@ -140,15 +178,16 @@
140
178
  margin-inline-start: auto;
141
179
  }
142
180
 
143
- /* A WIDE STEP lays out columns of its own across the whole width beside the rail. */
144
- .crewlet-setup-wizard--wide .crewlet-setup-wizard__content {
145
- max-width: none;
146
- }
147
-
148
- /* BESIDE THE CONTENT, from 70rem of the wizard's own width: the aside holds in view. */
181
+ /*
182
+ * BESIDE THE CONTENT, from 70rem of the wizard's own width: the aside holds in
183
+ * view. Written at the specificity of the wide and no-aside rules above, and
184
+ * after them, so the three shapes are decided by source order alone.
185
+ */
149
186
  @container (min-width: 70rem) {
150
- .crewlet-setup-wizard__frame {
151
- grid-template-columns: 240px minmax(0, 1fr) 320px;
187
+ .crewlet-setup-wizard .crewlet-setup-wizard__frame {
188
+ grid-template-columns:
189
+ var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-column))
190
+ var(--crewlet-setup-wizard-aside);
152
191
  grid-template-areas:
153
192
  'head head head'
154
193
  'rail content aside'
@@ -156,15 +195,19 @@
156
195
  grid-template-rows: auto 1fr auto;
157
196
  }
158
197
 
159
- /* With no aside, nothing is held for one: the content takes its column too. */
198
+ /* With no aside, nothing is held for one. */
160
199
  .crewlet-setup-wizard--no-aside .crewlet-setup-wizard__frame {
161
- grid-template-columns: 240px minmax(0, 1fr);
200
+ grid-template-columns: var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-column));
162
201
  grid-template-areas:
163
202
  'head head'
164
203
  'rail content'
165
204
  'foot foot';
166
205
  }
167
206
 
207
+ .crewlet-setup-wizard--wide.crewlet-setup-wizard--no-aside .crewlet-setup-wizard__frame {
208
+ grid-template-columns: var(--crewlet-setup-wizard-rail) minmax(0, var(--crewlet-setup-wizard-wide));
209
+ }
210
+
168
211
  .crewlet-setup-wizard__aside {
169
212
  position: sticky;
170
213
  top: var(--spacing-5);
@@ -180,7 +223,7 @@
180
223
  * position line, and scrolls away with the page rather than covering it.
181
224
  */
182
225
  @media (width < 640px) {
183
- .crewlet-setup-wizard__frame {
226
+ .crewlet-setup-wizard .crewlet-setup-wizard__frame {
184
227
  grid-template-columns: minmax(0, 1fr);
185
228
  grid-template-areas:
186
229
  'head'
@@ -192,6 +235,14 @@
192
235
  row-gap: var(--spacing-5);
193
236
  }
194
237
 
238
+ .crewlet-setup-wizard--no-aside .crewlet-setup-wizard__frame {
239
+ grid-template-areas:
240
+ 'head'
241
+ 'rail'
242
+ 'content'
243
+ 'foot';
244
+ }
245
+
195
246
  .crewlet-setup-wizard__rail {
196
247
  position: static;
197
248
  display: flex;
@@ -208,6 +259,26 @@
208
259
  padding-top: 0;
209
260
  border-top: 0;
210
261
  }
262
+
263
+ /*
264
+ * THE ACTIONS SHARE TWO ROWS: the way out and the step's other actions on
265
+ * the first, the step's last action, its primary, the whole width on the
266
+ * second, under the thumb. The two groups give their buttons to the
267
+ * footer's own row, so three short buttons no longer take three lines of a
268
+ * footer held over the content.
269
+ */
270
+ .crewlet-setup-wizard__footer-start,
271
+ .crewlet-setup-wizard__footer-end {
272
+ display: contents;
273
+ }
274
+
275
+ .crewlet-setup-wizard__footer-end > :first-child {
276
+ margin-inline-start: auto;
277
+ }
278
+
279
+ .crewlet-setup-wizard__footer-end > :last-child {
280
+ flex: 1 1 100%;
281
+ }
211
282
  }
212
283
 
213
284
  .crewlet-setup-wizard__position {
@@ -1,6 +1,6 @@
1
- export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-362TAJUQ.js';
1
+ export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-PGYIDNGG.js';
2
2
  import '../chunk-XQZ6EWOE.js';
3
- import '../chunk-SFG7TS4Q.js';
3
+ import '../chunk-YCC2S7DF.js';
4
4
  import '../chunk-7KHM2FZH.js';
5
5
  import '../chunk-7SHAFLEX.js';
6
6
  import '../chunk-STJ7QBC3.js';
@@ -9,13 +9,13 @@ import '../chunk-BPCY7ZID.js';
9
9
  import '../chunk-CI3VPIJN.js';
10
10
  import '../chunk-5AQBPHZD.js';
11
11
  import '../chunk-PZKHBB7D.js';
12
+ import '../chunk-PQADV6P6.js';
12
13
  import '../chunk-RTPQDNW3.js';
13
14
  import '../chunk-OMV5W53A.js';
14
15
  import '../chunk-2YTOOH3A.js';
15
16
  import '../chunk-OG6CL3EB.js';
16
17
  import '../chunk-H5XTJ7GJ.js';
17
18
  import '../chunk-NUZHC6MM.js';
18
- import '../chunk-PQADV6P6.js';
19
19
  import '../chunk-LACA4JGC.js';
20
20
  import '../chunk-BZFWDIV6.js';
21
21
  import '../chunk-ODEQTPFM.js';