@crewlethq/ui 0.38.0 → 0.39.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.
- package/README.md +36 -2
- package/dist/AgentHandoffPanel/index.js +3 -3
- package/dist/ArtifactBar/index.js +1 -1
- package/dist/{ArtifactBar-FWPBBKQ5.css → ArtifactBar-6PGWGKN2.css} +13 -1
- package/dist/ArtifactCard/index.js +2 -2
- package/dist/AuthLayout/index.js +2 -2
- package/dist/Card/Card.d.ts +14 -2
- package/dist/Card/index.js +1 -1
- package/dist/{Card-G2ZGT5Z6.css → Card-JR2UPQH7.css} +20 -0
- package/dist/CatalogTile/CatalogTile.d.ts +47 -0
- package/dist/CatalogTile/index.d.ts +3 -0
- package/dist/CatalogTile/index.js +3 -0
- package/dist/CatalogTile-TGR2ZZVQ.css +131 -0
- package/dist/CodeBlock/index.js +1 -1
- package/dist/{CodeBlock-GYNJ2HI6.css → CodeBlock-N5ETJF24.css} +13 -0
- package/dist/CommandPalette/index.js +3 -3
- package/dist/CommentThread/index.js +3 -3
- package/dist/Composer/index.js +2 -2
- package/dist/DataTable/index.js +2 -2
- package/dist/DataView/index.js +4 -4
- package/dist/DatasetSource/DatasetSource.d.ts +7 -1
- package/dist/DatasetSource/index.js +1 -1
- package/dist/LinkInterstitial/index.js +2 -2
- package/dist/List/List.d.ts +8 -0
- package/dist/List/index.js +1 -1
- package/dist/{List-MYJIV6MP.css → List-YHLIZFK4.css} +46 -0
- package/dist/ListInput/ListInput.d.ts +9 -1
- package/dist/ListInput/index.js +2 -2
- package/dist/Modal/index.js +1 -1
- package/dist/{Modal-7MWRCWAI.css → Modal-TOEWHDCQ.css} +5 -0
- package/dist/ObjectHeader/index.js +1 -1
- package/dist/{ObjectHeader-D7GU7QNI.css → ObjectHeader-ZOS22FKX.css} +7 -8
- package/dist/SettingsTable/SettingsTable.d.ts +66 -0
- package/dist/SettingsTable/index.d.ts +3 -0
- package/dist/SettingsTable/index.js +3 -0
- package/dist/SettingsTable-6DUFAFXG.css +160 -0
- package/dist/ShareDialog/index.js +2 -2
- package/dist/SheetColumnEditor/index.js +3 -3
- package/dist/StatCard/index.js +1 -1
- package/dist/{StatCard-4T7TMWMN.css → StatCard-HAA3F5GX.css} +8 -3
- package/dist/StatGroup/index.js +1 -1
- package/dist/{StatGroup-DOFHX5QJ.css → StatGroup-ZMW7VQWP.css} +27 -0
- package/dist/Switcher/index.js +2 -2
- package/dist/TileGrid/TileGrid.d.ts +33 -0
- package/dist/TileGrid/index.d.ts +3 -0
- package/dist/TileGrid/index.js +2 -0
- package/dist/TileGrid-I6LNYD2H.css +52 -0
- package/dist/{chunk-XBURIXHO.js → chunk-3TXY3PJZ.js} +1 -1
- package/dist/chunk-4RKTZSEW.js +64 -0
- package/dist/{chunk-A23KDROH.js → chunk-FXBGEANQ.js} +1 -1
- package/dist/{chunk-IPWU6ERC.js → chunk-HQJ24WPM.js} +4 -2
- package/dist/{chunk-SVGARBDY.js → chunk-IAGYPTEJ.js} +2 -2
- package/dist/{chunk-ZK3VYY7L.js → chunk-INHXF2CL.js} +24 -11
- package/dist/{chunk-6NNY5WBF.js → chunk-JKAGN4V4.js} +1 -1
- package/dist/{chunk-UWRBD2YO.js → chunk-KNHUBHFX.js} +1 -1
- package/dist/{chunk-PT6WKXKW.js → chunk-MMPKN7WV.js} +1 -1
- package/dist/{chunk-NRBAXRWE.js → chunk-N3TFYBN3.js} +1 -1
- package/dist/chunk-NNTO3TNC.js +9 -0
- package/dist/{chunk-DS2C73RJ.js → chunk-NZWX27J7.js} +2 -2
- package/dist/{chunk-VGE3G3T4.js → chunk-ODOJJGXH.js} +1 -1
- package/dist/{chunk-BT5H2THK.js → chunk-OUD75UB2.js} +1 -1
- package/dist/{chunk-YQG4PZGC.js → chunk-QRKT4XTT.js} +2 -2
- package/dist/{chunk-BJI3RFXG.js → chunk-S4DREXGM.js} +1 -1
- package/dist/{chunk-GDDE4UM7.js → chunk-SEC2GR2V.js} +1 -1
- package/dist/{chunk-S27UBCVX.js → chunk-TZYFTC4M.js} +1 -1
- package/dist/{chunk-OTCXRJ7D.js → chunk-U2XAJONO.js} +1 -1
- package/dist/{chunk-3ZUINC7C.js → chunk-WYYCPV46.js} +6 -1
- package/dist/{chunk-PAQXOP2M.js → chunk-XGBUUQDU.js} +2 -2
- package/dist/chunk-XNXK5MA4.js +48 -0
- package/dist/{chunk-XO7PUL4F.js → chunk-YPTTSJPM.js} +1 -1
- package/dist/generated/index.d.ts +3 -0
- package/dist/generated/index.js +60 -57
- package/dist/index.js +60 -57
- package/dist/styles.css +499 -20
- package/package.json +3 -3
- package/dist/{chunk-4L2BWSHR.js → chunk-F3WZ5AKM.js} +1 -1
- package/dist/{chunk-ETVEGR2Y.js → chunk-ISA2O2BK.js} +1 -1
- /package/dist/{chunk-4QQ3MND5.js → chunk-QRLIWCLX.js} +0 -0
package/dist/Modal/index.js
CHANGED
|
@@ -379,6 +379,11 @@
|
|
|
379
379
|
*/
|
|
380
380
|
.crewlet-modal__title {
|
|
381
381
|
margin: 0;
|
|
382
|
+
/* The text face at its own tracking, never the display face every heading
|
|
383
|
+
element takes from the baseline: the title is an h1 for the outline, at
|
|
384
|
+
the dialog's own register. */
|
|
385
|
+
font-family: var(--font-family-sans);
|
|
386
|
+
letter-spacing: var(--font-letter-spacing-normal);
|
|
382
387
|
font-size: var(--font-size-sm);
|
|
383
388
|
font-weight: var(--font-weight-semibold);
|
|
384
389
|
line-height: var(--font-line-height-tight);
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* The header of an object: its eyebrow, its head row and its fact line.
|
|
3
|
+
*
|
|
4
|
+
* SENTENCE CASE, both the eyebrow and the fact labels, as `StatCard`'s label
|
|
5
|
+
* is: the uppercase, tracked-open micro-caps are a table's column head, and
|
|
6
|
+
* over an object's name ("UNIT", then TYPE, LEAD and SEATS under it) they put
|
|
7
|
+
* a heading on every fact and read as a form rather than a record.
|
|
3
8
|
*/
|
|
4
9
|
.crewlet-object-header {
|
|
5
10
|
display: flex;
|
|
@@ -18,9 +23,7 @@
|
|
|
18
23
|
align-items: center;
|
|
19
24
|
gap: var(--spacing-2);
|
|
20
25
|
min-width: 0;
|
|
21
|
-
font-size: var(--font-size-
|
|
22
|
-
letter-spacing: var(--font-letter-spacing-wide);
|
|
23
|
-
text-transform: uppercase;
|
|
26
|
+
font-size: var(--font-size-xs);
|
|
24
27
|
color: var(--color-text-tertiary);
|
|
25
28
|
}
|
|
26
29
|
|
|
@@ -35,8 +38,6 @@
|
|
|
35
38
|
overflow: hidden;
|
|
36
39
|
text-overflow: ellipsis;
|
|
37
40
|
white-space: nowrap;
|
|
38
|
-
letter-spacing: normal;
|
|
39
|
-
text-transform: none;
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
.crewlet-object-header__id--mono {
|
|
@@ -138,9 +139,7 @@
|
|
|
138
139
|
}
|
|
139
140
|
|
|
140
141
|
.crewlet-fact-line__label {
|
|
141
|
-
font-size: var(--font-size-
|
|
142
|
-
letter-spacing: var(--font-letter-spacing-wide);
|
|
143
|
-
text-transform: uppercase;
|
|
142
|
+
font-size: var(--font-size-xs);
|
|
144
143
|
color: var(--color-text-tertiary);
|
|
145
144
|
}
|
|
146
145
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
/** The words the three columns are named by, for assistive technology and the optional header row. */
|
|
3
|
+
export interface SettingsTableColumns {
|
|
4
|
+
setting?: string | undefined;
|
|
5
|
+
value?: string | undefined;
|
|
6
|
+
source?: string | undefined;
|
|
7
|
+
}
|
|
8
|
+
export interface SettingsTableProps extends HTMLAttributes<HTMLDivElement> {
|
|
9
|
+
/**
|
|
10
|
+
* Draws the column names as a header row. Off by default: a page that
|
|
11
|
+
* stacks one table per group (a card each) would repeat the same three
|
|
12
|
+
* words over every card. The names are always exposed to assistive
|
|
13
|
+
* technology, drawn or not.
|
|
14
|
+
*/
|
|
15
|
+
header?: boolean | undefined;
|
|
16
|
+
/** The column names. Defaults to Setting, Value and Source. */
|
|
17
|
+
columns?: SettingsTableColumns | undefined;
|
|
18
|
+
children?: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A read-only table of settings: what each is called, the value in force and
|
|
22
|
+
* where that value comes from.
|
|
23
|
+
*
|
|
24
|
+
* ONE COLUMN GRID FOR EVERY TABLE ON A PAGE. The tracks are fractions of the
|
|
25
|
+
* table's own width (`--crewlet-settings-table-columns`), never the width of
|
|
26
|
+
* the longest label, so a page that stacks a table per group in cards of one
|
|
27
|
+
* width puts every value and every source on one vertical line down the page.
|
|
28
|
+
* A term column sized to its own longest term started the values at a
|
|
29
|
+
* different place in every card, and a fixed one left them floating a third
|
|
30
|
+
* of the way across a wide card with the rest of the row empty.
|
|
31
|
+
*
|
|
32
|
+
* THE SOURCE IS QUIET UNLESS IT IS NEWS. A value that is the default says so
|
|
33
|
+
* in the tertiary ink, as a word rather than a tag: a tag on every row is
|
|
34
|
+
* noise that teaches a reader to skip the column. A value that differs from
|
|
35
|
+
* its default (`changed`) carries a mark before its source, which is the one
|
|
36
|
+
* row in the table a reader scanning it came to find.
|
|
37
|
+
*
|
|
38
|
+
* A TABLE, BECAUSE IT IS ONE. Every row carries the same three fields, so it
|
|
39
|
+
* is announced as a table with its column names, and each setting's name is
|
|
40
|
+
* the row's header. The roles are written out rather than taken from table
|
|
41
|
+
* elements because the row folds into two lines on a narrow table, and a
|
|
42
|
+
* table element that changes its display loses its semantics in some
|
|
43
|
+
* browsers.
|
|
44
|
+
*/
|
|
45
|
+
export declare function SettingsTable({ header, columns, className, children, ...rest }: SettingsTableProps): import("react").JSX.Element;
|
|
46
|
+
export declare namespace SettingsTable {
|
|
47
|
+
var Row: typeof SettingsTableRow;
|
|
48
|
+
}
|
|
49
|
+
export interface SettingsTableRowProps extends HTMLAttributes<HTMLDivElement> {
|
|
50
|
+
/** What the setting is called, in a reader's words. */
|
|
51
|
+
label: ReactNode;
|
|
52
|
+
/**
|
|
53
|
+
* The setting's address in the document it is written in
|
|
54
|
+
* (`turn_engine.max_iterations`), drawn quietly under its name in the
|
|
55
|
+
* monospace face. For the reader who will go and change it there.
|
|
56
|
+
*/
|
|
57
|
+
settingKey?: string | undefined;
|
|
58
|
+
/** The value in force, in its own unit. Drawn in tabular figures. */
|
|
59
|
+
children?: ReactNode;
|
|
60
|
+
/** Where the value comes from: "Default", "Set in the company document". */
|
|
61
|
+
source?: ReactNode;
|
|
62
|
+
/** The value differs from its default: the source carries a mark. */
|
|
63
|
+
changed?: boolean | undefined;
|
|
64
|
+
}
|
|
65
|
+
/** One setting: its name (and key), its value and its source. */
|
|
66
|
+
export declare function SettingsTableRow({ label, settingKey, source, changed, className, children, ...rest }: SettingsTableRowProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SettingsTable: a read-only table of settings, one row each, on one grid.
|
|
3
|
+
*
|
|
4
|
+
* THE TRACKS ARE FRACTIONS OF THE TABLE, so every table of one width shares
|
|
5
|
+
* them: a page that stacks a table per group puts each column on one line
|
|
6
|
+
* down the page with nothing to coordinate. `--crewlet-settings-table-columns`
|
|
7
|
+
* is inherited, so a page that wants other proportions sets it once.
|
|
8
|
+
*
|
|
9
|
+
* Each row is its own grid on those tracks rather than a subgrid of the
|
|
10
|
+
* table's, because the tracks are fractions: one row's long label can never
|
|
11
|
+
* move another row's value, which is what a content-sized track would do.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
.crewlet-settings-table {
|
|
15
|
+
container: crewlet-settings-table / inline-size;
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
min-width: 0;
|
|
19
|
+
font-size: var(--font-size-compact);
|
|
20
|
+
/* The flush-panel recipe, standing on its own: the card's surface, its
|
|
21
|
+
hairline and its corner. Inside a card it gives them up (below). */
|
|
22
|
+
background: var(--color-surface-subtle);
|
|
23
|
+
border: 1px solid var(--color-border-default);
|
|
24
|
+
border-radius: var(--radius-lg);
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* A TABLE THAT IS A CARD'S CONTENT IS THAT CARD'S TABLE. It draws no edge or
|
|
30
|
+
* corner of its own inside one, so a card never holds a box inside a box; its
|
|
31
|
+
* rows' hairlines run to the card's edges under the card's own head rule.
|
|
32
|
+
*/
|
|
33
|
+
.crewlet-card > .crewlet-settings-table,
|
|
34
|
+
.crewlet-card__body > .crewlet-settings-table {
|
|
35
|
+
background: transparent;
|
|
36
|
+
border: 0;
|
|
37
|
+
border-radius: var(--radius-none);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.crewlet-settings-table__row {
|
|
41
|
+
display: grid;
|
|
42
|
+
grid-template-columns: var(
|
|
43
|
+
--crewlet-settings-table-columns,
|
|
44
|
+
minmax(0, 5fr) minmax(0, 3fr) minmax(0, 2fr)
|
|
45
|
+
);
|
|
46
|
+
column-gap: var(--spacing-6);
|
|
47
|
+
/* ONE BASELINE PER ROW: the name, the value and the source sit on the
|
|
48
|
+
first line's baseline, whatever the name's key adds under it. */
|
|
49
|
+
align-items: baseline;
|
|
50
|
+
min-height: var(--size-row-md);
|
|
51
|
+
padding: var(--spacing-3) var(--spacing-4);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.crewlet-settings-table__body > .crewlet-settings-table__row + .crewlet-settings-table__row {
|
|
55
|
+
border-top: 1px solid var(--color-border-default);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/*
|
|
59
|
+
* The column names, in the micro-label register a table's header takes
|
|
60
|
+
* across the system, on the panel's own ground. Hidden by default (see the
|
|
61
|
+
* component): still the table's column headers for assistive technology.
|
|
62
|
+
*/
|
|
63
|
+
.crewlet-settings-table__head .crewlet-settings-table__row {
|
|
64
|
+
min-height: 0;
|
|
65
|
+
padding-block: var(--spacing-2);
|
|
66
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.crewlet-settings-table__name {
|
|
70
|
+
font-size: var(--font-size-2xs);
|
|
71
|
+
font-weight: var(--font-weight-medium);
|
|
72
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
73
|
+
text-transform: uppercase;
|
|
74
|
+
color: var(--color-text-tertiary);
|
|
75
|
+
white-space: nowrap;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.crewlet-settings-table__head--hidden {
|
|
79
|
+
position: absolute;
|
|
80
|
+
width: 1px;
|
|
81
|
+
height: 1px;
|
|
82
|
+
margin: -1px;
|
|
83
|
+
padding: 0;
|
|
84
|
+
border: 0;
|
|
85
|
+
overflow: hidden;
|
|
86
|
+
clip-path: inset(50%);
|
|
87
|
+
white-space: nowrap;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.crewlet-settings-table__setting {
|
|
91
|
+
display: flex;
|
|
92
|
+
flex-direction: column;
|
|
93
|
+
gap: var(--spacing-1);
|
|
94
|
+
min-width: 0;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.crewlet-settings-table__label {
|
|
98
|
+
color: var(--color-text-primary);
|
|
99
|
+
line-height: var(--font-line-height-snug);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
* THE KEY IS FOR THE READER WHO WILL GO AND CHANGE IT, so it is there and
|
|
104
|
+
* quiet: the monospace face at the smallest step, in the tertiary ink, and
|
|
105
|
+
* free to break anywhere, since a dotted path is one word to a line breaker.
|
|
106
|
+
*/
|
|
107
|
+
.crewlet-settings-table__key {
|
|
108
|
+
font-family: var(--font-family-mono);
|
|
109
|
+
font-size: var(--font-size-2xs);
|
|
110
|
+
line-height: var(--font-line-height-snug);
|
|
111
|
+
color: var(--color-text-tertiary);
|
|
112
|
+
overflow-wrap: anywhere;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* Tabular figures, so a column of numbers reads down its digits. */
|
|
116
|
+
.crewlet-settings-table__value {
|
|
117
|
+
min-width: 0;
|
|
118
|
+
color: var(--color-text-primary);
|
|
119
|
+
font-weight: var(--font-weight-medium);
|
|
120
|
+
font-variant-numeric: tabular-nums;
|
|
121
|
+
overflow-wrap: anywhere;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.crewlet-settings-table__source {
|
|
125
|
+
display: inline-flex;
|
|
126
|
+
align-items: baseline;
|
|
127
|
+
gap: var(--spacing-2);
|
|
128
|
+
min-width: 0;
|
|
129
|
+
font-size: var(--font-size-xs);
|
|
130
|
+
color: var(--color-text-tertiary);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* A value that differs from its default is the row a reader came to find. */
|
|
134
|
+
.crewlet-settings-table__source--changed {
|
|
135
|
+
color: var(--color-text-secondary);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.crewlet-settings-table__source--changed .crewlet-status-dot {
|
|
139
|
+
align-self: center;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/*
|
|
143
|
+
* NARROW: the name takes the row's first line, and the value and its source
|
|
144
|
+
* share the second. Three columns at this width leave a name column a word
|
|
145
|
+
* wide, which wraps every name into a stack of single words.
|
|
146
|
+
*/
|
|
147
|
+
@container crewlet-settings-table (width < 32rem) {
|
|
148
|
+
.crewlet-settings-table__row {
|
|
149
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
150
|
+
row-gap: var(--spacing-1);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.crewlet-settings-table__setting {
|
|
154
|
+
grid-column: 1 / -1;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.crewlet-settings-table__source {
|
|
158
|
+
justify-self: end;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-
|
|
1
|
+
export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-KNHUBHFX.js';
|
|
2
2
|
import '../chunk-XQZ6EWOE.js';
|
|
3
3
|
import '../chunk-W46LPU4R.js';
|
|
4
4
|
import '../chunk-STJ7QBC3.js';
|
|
5
5
|
import '../chunk-DTIW4CHZ.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-IAGYPTEJ.js';
|
|
7
7
|
import '../chunk-7KHM2FZH.js';
|
|
8
8
|
import '../chunk-SZZRIHGT.js';
|
|
9
9
|
import '../chunk-CI3VPIJN.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-
|
|
1
|
+
export { SHEET_COLUMN_EDITOR_LABELS, SheetColumnEditor, SheetColumnTypeGlyph } from '../chunk-F3WZ5AKM.js';
|
|
2
2
|
import '../chunk-XQZ6EWOE.js';
|
|
3
3
|
import '../chunk-FFMCMSJB.js';
|
|
4
4
|
import '../chunk-7KHM2FZH.js';
|
|
@@ -6,12 +6,12 @@ import '../chunk-LFSIKGRQ.js';
|
|
|
6
6
|
import '../chunk-Z7JYG5TF.js';
|
|
7
7
|
import '../chunk-F4LPQA4E.js';
|
|
8
8
|
import '../chunk-AYKXMIOR.js';
|
|
9
|
+
import '../chunk-AXS6MBNH.js';
|
|
9
10
|
import '../chunk-2QZ2VPHR.js';
|
|
10
11
|
import '../chunk-7SDUKCNW.js';
|
|
11
12
|
import '../chunk-RKKO7QHH.js';
|
|
12
|
-
import '../chunk-AXS6MBNH.js';
|
|
13
|
-
import '../chunk-SMBKXWML.js';
|
|
14
13
|
import '../chunk-TYONQSOK.js';
|
|
14
|
+
import '../chunk-SMBKXWML.js';
|
|
15
15
|
import '../chunk-BHHIIK3M.js';
|
|
16
16
|
import '../chunk-PQADV6P6.js';
|
|
17
17
|
import '../chunk-D6FEHY5G.js';
|
package/dist/StatCard/index.js
CHANGED
|
@@ -186,6 +186,12 @@
|
|
|
186
186
|
* tiles where only some carry one still stands at one height: its leading is
|
|
187
187
|
* set here and the reserve is exactly one line of it, where a reserve in `em`
|
|
188
188
|
* was a line shorter than the one a sub actually draws.
|
|
189
|
+
*
|
|
190
|
+
* IT WRAPS, balanced, rather than ending in an ellipsis. The line qualifies
|
|
191
|
+
* the number, so its end is the half that says what the number means, and
|
|
192
|
+
* `nowrap` cut it: "6 seats idle and waiting for ..." on a phone, a caption
|
|
193
|
+
* mid-clause at 1440. A grid of tiles (a StatGroup, or a caller's own) gives
|
|
194
|
+
* every tile in a row one height, so a second line costs no alignment.
|
|
189
195
|
*/
|
|
190
196
|
.crewlet-statcard__sub {
|
|
191
197
|
min-height: calc(1em * var(--font-line-height-body));
|
|
@@ -194,9 +200,8 @@
|
|
|
194
200
|
/* The quiet step, with the label. The line qualifies the number rather than
|
|
195
201
|
being a second one. */
|
|
196
202
|
color: var(--color-text-tertiary);
|
|
197
|
-
overflow:
|
|
198
|
-
text-
|
|
199
|
-
white-space: nowrap;
|
|
203
|
+
overflow-wrap: anywhere;
|
|
204
|
+
text-wrap: balance;
|
|
200
205
|
}
|
|
201
206
|
|
|
202
207
|
/*
|
package/dist/StatGroup/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { StatGroup } from '../chunk-
|
|
1
|
+
export { StatGroup } from '../chunk-OUD75UB2.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -75,6 +75,33 @@
|
|
|
75
75
|
border-radius: var(--radius-none);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
/*
|
|
79
|
+
* A ROW OF TILES SHARES ITS LINES. A tile stacks its label, its number and its
|
|
80
|
+
* sub in a column of its own, so a label that wrapped pushed its own number
|
|
81
|
+
* down and no other: beside a node's peek at 1440, "Behind on config" broke
|
|
82
|
+
* over two lines and its figure sat 18px below the other three. Inside a row
|
|
83
|
+
* each tile is a SUBGRID over the row's lines, one per line the tile renders
|
|
84
|
+
* (StatCard always renders three, an absent sub included), so a line is as
|
|
85
|
+
* tall as the tallest of it across the row and every figure starts together.
|
|
86
|
+
*
|
|
87
|
+
* A LABEL SITS ON ITS NUMBER: where one label in the row takes two lines, the
|
|
88
|
+
* others end at the foot of the label row, one gap above their figure, rather
|
|
89
|
+
* than floating at its top a line away from what they name.
|
|
90
|
+
*
|
|
91
|
+
* These were the engine dashboard's own rules over this component, held there
|
|
92
|
+
* with a note that the kit should carry them; they are the kit's now, with the
|
|
93
|
+
* sub's wrap (see StatCard), which the engine applied to every tile.
|
|
94
|
+
*/
|
|
95
|
+
.crewlet-stat-group > .crewlet-statcard {
|
|
96
|
+
display: grid;
|
|
97
|
+
grid-template-rows: subgrid;
|
|
98
|
+
grid-row: span 3;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.crewlet-stat-group > .crewlet-statcard > .crewlet-statcard__label {
|
|
102
|
+
align-self: end;
|
|
103
|
+
}
|
|
104
|
+
|
|
78
105
|
/*
|
|
79
106
|
* Each tile spans its share of the twelve tracks: the row's `columns`, set on
|
|
80
107
|
* it as `--crewlet-stat-group-cols`, a row.
|
package/dist/Switcher/index.js
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
/** The most tracks a grid draws; it folds to fewer by its own width. */
|
|
3
|
+
export type TileGridColumns = 2 | 3 | 4;
|
|
4
|
+
export interface TileGridProps extends HTMLAttributes<HTMLElement> {
|
|
5
|
+
/**
|
|
6
|
+
* The tracks at full width. `3` (the default) folds straight to one, never
|
|
7
|
+
* to two, so a set of three or six tiles never leaves a lone tile on a row
|
|
8
|
+
* of its own; `4` folds to two and then one; `2` folds to one.
|
|
9
|
+
*/
|
|
10
|
+
columns?: TileGridColumns | undefined;
|
|
11
|
+
/** The element the tiles stand in: a `ul` for tiles that are `li`s. */
|
|
12
|
+
as?: 'div' | 'ul' | 'ol' | undefined;
|
|
13
|
+
children?: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Tiles on a fixed number of tracks that folds by the grid's own width.
|
|
17
|
+
*
|
|
18
|
+
* GRIDS ON ONE PAGE LINE UP. Two sections of tiles (a catalogue's built-in
|
|
19
|
+
* services over its third-party apps) each laid out on a track count of its
|
|
20
|
+
* own put their tile edges in different places, and an `auto-fill` grid left
|
|
21
|
+
* a hole at the end of a short section. A tile grid's tracks are a count, the
|
|
22
|
+
* same in every grid given the same count and the same width, so every tile
|
|
23
|
+
* edge on the page lines up.
|
|
24
|
+
*
|
|
25
|
+
* IT FOLDS BY ITS OWN WIDTH, never the window's: a grid beside a rail and a
|
|
26
|
+
* settings column is as narrow as a phone's at a wide window. The outer
|
|
27
|
+
* element is the size container, and the track list inside it is the grid,
|
|
28
|
+
* because a container query styles what is inside the container and never
|
|
29
|
+
* the container itself. `className` goes on that outer box, where a page
|
|
30
|
+
* places the grid; every other attribute (an `id`, an `aria-label`) goes on
|
|
31
|
+
* the track, which is the list a `ul` grid is.
|
|
32
|
+
*/
|
|
33
|
+
export declare function TileGrid({ columns, as: Track, className, children, ...rest }: TileGridProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* TileGrid: tiles on a fixed track count that folds by the grid's own width.
|
|
3
|
+
*
|
|
4
|
+
* Equal tracks, so two grids of one count and one width put every tile edge
|
|
5
|
+
* on the same line; the tiles in a row stretch to the tallest of them. The
|
|
6
|
+
* folds are steps of the grid's own width (see the component): three tracks
|
|
7
|
+
* go straight to one, so a set of three never strands a tile.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.crewlet-tile-grid {
|
|
11
|
+
container: crewlet-tile-grid / inline-size;
|
|
12
|
+
min-width: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.crewlet-tile-grid__track {
|
|
16
|
+
--crewlet-tile-grid-tracks: 3;
|
|
17
|
+
|
|
18
|
+
display: grid;
|
|
19
|
+
grid-template-columns: repeat(var(--crewlet-tile-grid-tracks), minmax(0, 1fr));
|
|
20
|
+
gap: var(--spacing-3);
|
|
21
|
+
margin: 0;
|
|
22
|
+
padding: 0;
|
|
23
|
+
list-style: none;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.crewlet-tile-grid[data-columns='2'] > .crewlet-tile-grid__track {
|
|
27
|
+
--crewlet-tile-grid-tracks: 2;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.crewlet-tile-grid[data-columns='4'] > .crewlet-tile-grid__track {
|
|
31
|
+
--crewlet-tile-grid-tracks: 4;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Four tracks fold to two where a tile would be narrower than its content. */
|
|
35
|
+
@container crewlet-tile-grid (width < 56rem) {
|
|
36
|
+
.crewlet-tile-grid[data-columns='4'] > .crewlet-tile-grid__track {
|
|
37
|
+
--crewlet-tile-grid-tracks: 2;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Three fold to one: two up would leave the third tile alone on a row. */
|
|
42
|
+
@container crewlet-tile-grid (width < 40rem) {
|
|
43
|
+
.crewlet-tile-grid[data-columns='3'] > .crewlet-tile-grid__track {
|
|
44
|
+
--crewlet-tile-grid-tracks: 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@container crewlet-tile-grid (width < 28rem) {
|
|
49
|
+
.crewlet-tile-grid > .crewlet-tile-grid__track {
|
|
50
|
+
--crewlet-tile-grid-tracks: 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Timeline } from './chunk-AUQPBL4O.js';
|
|
2
2
|
import { Section } from './chunk-3TFDQLW3.js';
|
|
3
3
|
import { Disclosure } from './chunk-OGXHZHRX.js';
|
|
4
|
-
import { Composer } from './chunk-
|
|
4
|
+
import { Composer } from './chunk-ISA2O2BK.js';
|
|
5
5
|
import { ArtifactPanel } from './chunk-Y5BD4MTE.js';
|
|
6
6
|
import { Button } from './chunk-OG6CL3EB.js';
|
|
7
7
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { StatusDot } from './chunk-WIATRXEJ.js';
|
|
2
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
3
|
+
import './SettingsTable-6DUFAFXG.css';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var COLUMNS = { setting: "Setting", value: "Value", source: "Source" };
|
|
7
|
+
function SettingsTable({ header = false, columns, className, children, ...rest }) {
|
|
8
|
+
const names = { ...COLUMNS, ...columns };
|
|
9
|
+
return /* @__PURE__ */ jsxs("div", { ...rest, role: "table", className: cx("crewlet-settings-table", className), children: [
|
|
10
|
+
/* @__PURE__ */ jsx(
|
|
11
|
+
"div",
|
|
12
|
+
{
|
|
13
|
+
role: "rowgroup",
|
|
14
|
+
className: cx("crewlet-settings-table__head", !header && "crewlet-settings-table__head--hidden"),
|
|
15
|
+
children: /* @__PURE__ */ jsxs("div", { role: "row", className: "crewlet-settings-table__row", children: [
|
|
16
|
+
/* @__PURE__ */ jsx("span", { role: "columnheader", className: "crewlet-settings-table__name", children: names.setting }),
|
|
17
|
+
/* @__PURE__ */ jsx("span", { role: "columnheader", className: "crewlet-settings-table__name", children: names.value }),
|
|
18
|
+
/* @__PURE__ */ jsx("span", { role: "columnheader", className: "crewlet-settings-table__name", children: names.source })
|
|
19
|
+
] })
|
|
20
|
+
}
|
|
21
|
+
),
|
|
22
|
+
/* @__PURE__ */ jsx("div", { role: "rowgroup", className: "crewlet-settings-table__body", children })
|
|
23
|
+
] });
|
|
24
|
+
}
|
|
25
|
+
function SettingsTableRow({
|
|
26
|
+
label,
|
|
27
|
+
settingKey,
|
|
28
|
+
source,
|
|
29
|
+
changed = false,
|
|
30
|
+
className,
|
|
31
|
+
children,
|
|
32
|
+
...rest
|
|
33
|
+
}) {
|
|
34
|
+
return /* @__PURE__ */ jsxs(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
...rest,
|
|
38
|
+
role: "row",
|
|
39
|
+
"data-changed": changed ? "" : void 0,
|
|
40
|
+
className: cx("crewlet-settings-table__row", className),
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ jsxs("span", { role: "rowheader", className: "crewlet-settings-table__setting", children: [
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "crewlet-settings-table__label", children: label }),
|
|
44
|
+
settingKey === void 0 ? null : /* @__PURE__ */ jsx("code", { className: "crewlet-settings-table__key", children: settingKey })
|
|
45
|
+
] }),
|
|
46
|
+
/* @__PURE__ */ jsx("span", { role: "cell", className: "crewlet-settings-table__value", children }),
|
|
47
|
+
/* @__PURE__ */ jsxs(
|
|
48
|
+
"span",
|
|
49
|
+
{
|
|
50
|
+
role: "cell",
|
|
51
|
+
className: cx("crewlet-settings-table__source", changed && "crewlet-settings-table__source--changed"),
|
|
52
|
+
children: [
|
|
53
|
+
changed ? /* @__PURE__ */ jsx(StatusDot, { tone: "brand" }) : null,
|
|
54
|
+
source
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
SettingsTable.Row = SettingsTableRow;
|
|
63
|
+
|
|
64
|
+
export { SettingsTable, SettingsTableRow };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useClipboard } from './chunk-STJ7QBC3.js';
|
|
2
|
-
import { Modal } from './chunk-
|
|
2
|
+
import { Modal } from './chunk-IAGYPTEJ.js';
|
|
3
3
|
import { Checkbox } from './chunk-AXS6MBNH.js';
|
|
4
4
|
import { EmptyValue } from './chunk-EUCC37WY.js';
|
|
5
5
|
import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
|
|
@@ -58,8 +58,10 @@ function DatasetSource({
|
|
|
58
58
|
const summary = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
59
59
|
/* @__PURE__ */ jsxs("span", { className: "crewlet-dataset-source__head", children: [
|
|
60
60
|
/* @__PURE__ */ jsx("span", { id: titleId, className: "crewlet-dataset-source__title", children: title }),
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
kind === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
62
|
+
" ",
|
|
63
|
+
/* @__PURE__ */ jsx(Tag, { size: "xs", appearance: "outline", className: "crewlet-dataset-source__kind", children: text.kinds[kind] })
|
|
64
|
+
] })
|
|
63
65
|
] }),
|
|
64
66
|
" ",
|
|
65
67
|
/* @__PURE__ */ jsx("span", { className: "crewlet-dataset-source__definition", children: definition }),
|
|
@@ -4,7 +4,7 @@ import { focusables, useModalLayer, useBodyScrollLock } from './chunk-H5XTJ7GJ.j
|
|
|
4
4
|
import { Button } from './chunk-OG6CL3EB.js';
|
|
5
5
|
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
6
6
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
7
|
-
import './Modal-
|
|
7
|
+
import './Modal-TOEWHDCQ.css';
|
|
8
8
|
import { useId, useRef, useCallback } from 'react';
|
|
9
9
|
import { createPortal } from 'react-dom';
|
|
10
10
|
import { ChevronLeftGlyph, XGlyph } from '@crewlethq/icons/glyphs';
|
|
@@ -124,7 +124,7 @@ function ModalFrame({
|
|
|
124
124
|
given(icon) ? /* @__PURE__ */ jsx("span", { className: "crewlet-modal__icon", "aria-hidden": "true", children: icon }) : null,
|
|
125
125
|
/* @__PURE__ */ jsxs("div", { className: "crewlet-modal__heading", children: [
|
|
126
126
|
given(title) ? /* @__PURE__ */ jsx(
|
|
127
|
-
"
|
|
127
|
+
"h1",
|
|
128
128
|
{
|
|
129
129
|
className: cx("crewlet-modal__title", sheet ? "crewlet-modal__title--sheet" : void 0),
|
|
130
130
|
id: titleId,
|