@crewlethq/ui 0.37.1 → 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 +70 -2
- package/dist/Accordion/index.js +1 -1
- package/dist/AgentHandoffPanel/index.js +2 -2
- package/dist/AppShell/index.js +1 -1
- package/dist/{AppShell-JBCZSSX3.css → AppShell-NDU4XMGF.css} +39 -6
- 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/ArtifactMakeRow/ArtifactMakeRow.d.ts +3 -1
- package/dist/ArtifactMakeRow/index.js +1 -1
- package/dist/{ArtifactMakeRow-W3RD5YWZ.css → ArtifactMakeRow-6UX2LTF7.css} +43 -5
- 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-QOVASQNU.css → Card-JR2UPQH7.css} +63 -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 +2 -2
- package/dist/DataTable/index.js +2 -2
- package/dist/DataView/index.js +3 -3
- package/dist/DatasetSource/DatasetSource.d.ts +7 -1
- package/dist/DatasetSource/index.js +2 -2
- package/dist/DescriptionList/DescriptionList.d.ts +12 -1
- package/dist/DescriptionList/index.js +1 -1
- package/dist/{DescriptionList-IXMRCSMK.css → DescriptionList-DEZISDLQ.css} +8 -1
- package/dist/Disclosure/index.js +1 -1
- package/dist/{Disclosure-VKBJJIZ7.css → Disclosure-P4FH3C35.css} +28 -2
- 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 +1 -1
- 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/PricingCard/index.js +2 -2
- 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/SheetGrid/index.js +2 -2
- package/dist/StatCard/index.js +1 -1
- package/dist/{StatCard-4T7TMWMN.css → StatCard-HAA3F5GX.css} +8 -3
- package/dist/StatGroup/StatGroup.d.ts +11 -7
- package/dist/StatGroup/index.js +1 -1
- package/dist/StatGroup-ZMW7VQWP.css +195 -0
- package/dist/Switcher/index.js +2 -2
- package/dist/TableCells/index.js +2 -2
- package/dist/Tag/index.js +1 -1
- package/dist/{Tag-SRGTK5KI.css → Tag-2DQOVE6W.css} +15 -5
- package/dist/TagsInput/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-YSG3DW7W.js → chunk-3TXY3PJZ.js} +1 -1
- package/dist/{chunk-K4VP6ZKE.js → chunk-4BJK7FE5.js} +1 -1
- package/dist/chunk-4RKTZSEW.js +64 -0
- package/dist/{chunk-3SBM4DGI.js → chunk-BH52LIY6.js} +1 -1
- package/dist/{chunk-HDHZWIFL.js → chunk-DYB66CNM.js} +16 -2
- package/dist/{chunk-A23KDROH.js → chunk-FXBGEANQ.js} +1 -1
- package/dist/{chunk-HMLAWVG6.js → chunk-HQJ24WPM.js} +5 -3
- package/dist/{chunk-SVGARBDY.js → chunk-IAGYPTEJ.js} +2 -2
- package/dist/{chunk-5QXRI35B.js → chunk-INHXF2CL.js} +24 -11
- package/dist/{chunk-6NNY5WBF.js → chunk-JKAGN4V4.js} +1 -1
- package/dist/{chunk-DZSBFITC.js → chunk-JZPK4IXR.js} +1 -1
- package/dist/{chunk-UWRBD2YO.js → chunk-KNHUBHFX.js} +1 -1
- package/dist/{chunk-GFV4LJHH.js → chunk-KYIAFNU7.js} +1 -1
- package/dist/{chunk-F2XSYBKH.js → chunk-MFS6F2P7.js} +4 -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-MICH6QSJ.js → chunk-OGXHZHRX.js} +1 -1
- package/dist/{chunk-JXRI5YD2.js → chunk-OUD75UB2.js} +2 -1
- package/dist/{chunk-MG3HTY6F.js → chunk-QRKT4XTT.js} +1 -1
- package/dist/{chunk-NS4NSHVX.js → chunk-R2IBCEU6.js} +12 -2
- package/dist/{chunk-WX2NIG4G.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-OHA6WSAG.js → chunk-U2XAJONO.js} +1 -1
- package/dist/{chunk-DQSXWQMJ.js → chunk-U3ILLCR2.js} +1 -1
- package/dist/{chunk-DOLATMGF.js → chunk-WYYCPV46.js} +5 -0
- package/dist/{chunk-A72JPXIV.js → chunk-XGBUUQDU.js} +1 -1
- package/dist/chunk-XNXK5MA4.js +48 -0
- package/dist/{chunk-XO7PUL4F.js → chunk-YPTTSJPM.js} +1 -1
- package/dist/{chunk-RIAZM6L3.js → chunk-ZNOXQACX.js} +1 -1
- package/dist/generated/index.d.ts +3 -0
- package/dist/generated/index.js +56 -53
- package/dist/index.js +56 -53
- package/dist/styles.css +782 -64
- package/package.json +3 -3
- package/dist/StatGroup-PADTJCUQ.css +0 -86
- /package/dist/{chunk-4QQ3MND5.js → chunk-QRLIWCLX.js} +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* CatalogTile: mark, name and state, one sentence, and a foot with a quiet
|
|
3
|
+
* fact and one action.
|
|
4
|
+
*
|
|
5
|
+
* ONE WELL FOR EVERY MARK. A vendor's mark is drawn in the vendor's colours,
|
|
6
|
+
* so the box it stands in is the one thing a catalogue can hold constant: the
|
|
7
|
+
* same size, the same raised ground and the same hairline for every tile,
|
|
8
|
+
* set up or not. A drained mark on a grey box read as a placeholder image
|
|
9
|
+
* (a white plate on grey is not a logo), so a tile not yet set up says so by
|
|
10
|
+
* its ground, never by its mark.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
.crewlet-catalog-tile {
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
gap: var(--spacing-3);
|
|
17
|
+
min-width: 0;
|
|
18
|
+
padding: var(--spacing-4);
|
|
19
|
+
background: var(--color-surface-subtle);
|
|
20
|
+
border: 1px solid var(--color-border-default);
|
|
21
|
+
border-radius: var(--radius-lg);
|
|
22
|
+
color: var(--color-text-primary);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.crewlet-catalog-tile--quiet {
|
|
26
|
+
background: var(--color-surface-background);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.crewlet-catalog-tile__head {
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
gap: var(--spacing-3);
|
|
33
|
+
min-width: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.crewlet-catalog-tile__mark {
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
flex: none;
|
|
39
|
+
align-items: center;
|
|
40
|
+
justify-content: center;
|
|
41
|
+
width: var(--size-row-lg);
|
|
42
|
+
height: var(--size-row-lg);
|
|
43
|
+
border-radius: var(--radius-md);
|
|
44
|
+
background: var(--color-surface-elevated);
|
|
45
|
+
border: 1px solid var(--color-border-default);
|
|
46
|
+
color: var(--color-text-primary);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* The name, and under it the state when there is one; centred on the mark
|
|
50
|
+
either way, so a tile with no state is not a tile with a hole in it. */
|
|
51
|
+
.crewlet-catalog-tile__title {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
align-items: flex-start;
|
|
55
|
+
justify-content: center;
|
|
56
|
+
gap: var(--spacing-1);
|
|
57
|
+
min-width: 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.crewlet-catalog-tile__name {
|
|
61
|
+
margin: 0;
|
|
62
|
+
font-family: var(--font-family-sans);
|
|
63
|
+
font-size: var(--font-size-sm);
|
|
64
|
+
font-weight: var(--font-weight-semibold);
|
|
65
|
+
line-height: var(--font-line-height-snug);
|
|
66
|
+
color: var(--color-text-primary);
|
|
67
|
+
overflow-wrap: anywhere;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.crewlet-catalog-tile__status {
|
|
71
|
+
display: inline-flex;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.crewlet-catalog-tile__description {
|
|
75
|
+
flex: 1;
|
|
76
|
+
margin: 0;
|
|
77
|
+
/* Two lines reserved, so a tile saying what it is for and one saying what
|
|
78
|
+
is owed keep their feet on one line in a row. */
|
|
79
|
+
min-height: calc(2em * var(--font-line-height-body));
|
|
80
|
+
font-size: var(--font-size-compact);
|
|
81
|
+
line-height: var(--font-line-height-body);
|
|
82
|
+
color: var(--color-text-secondary);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.crewlet-catalog-tile__foot {
|
|
86
|
+
display: flex;
|
|
87
|
+
align-items: center;
|
|
88
|
+
gap: var(--spacing-2);
|
|
89
|
+
/* A SMALL CONTROL'S HEIGHT OF CONTENT, under the rule and the padding: a
|
|
90
|
+
foot holding only a fact stands as tall as one holding a button, so the
|
|
91
|
+
rules of every foot in a row sit on one line. Measured on the content
|
|
92
|
+
box, since under border-box sizing the padding spent the floor and a
|
|
93
|
+
fact-only foot stood 8px shorter. */
|
|
94
|
+
box-sizing: content-box;
|
|
95
|
+
min-height: var(--size-control-sm);
|
|
96
|
+
padding-top: var(--spacing-3);
|
|
97
|
+
border-top: 1px solid var(--color-border-default);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.crewlet-catalog-tile__meta {
|
|
101
|
+
flex: 1;
|
|
102
|
+
min-width: 0;
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
text-overflow: ellipsis;
|
|
105
|
+
white-space: nowrap;
|
|
106
|
+
font-size: var(--font-size-xs);
|
|
107
|
+
color: var(--color-text-tertiary);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.crewlet-catalog-tile__action {
|
|
111
|
+
display: inline-flex;
|
|
112
|
+
flex: none;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/*
|
|
116
|
+
* ONE TILE A ROW RESERVES NOTHING. The two reserved lines exist to keep the
|
|
117
|
+
* feet of tiles side by side on one line; a grid folded to one track has no
|
|
118
|
+
* neighbours to line up with, and on a phone the reserve was a blank line in
|
|
119
|
+
* every short tile.
|
|
120
|
+
*/
|
|
121
|
+
@container crewlet-tile-grid (width < 40rem) {
|
|
122
|
+
.crewlet-tile-grid[data-columns='3'] .crewlet-catalog-tile__description {
|
|
123
|
+
min-height: 0;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@container crewlet-tile-grid (width < 28rem) {
|
|
128
|
+
.crewlet-tile-grid .crewlet-catalog-tile__description {
|
|
129
|
+
min-height: 0;
|
|
130
|
+
}
|
|
131
|
+
}
|
package/dist/CodeBlock/index.js
CHANGED
|
@@ -16,6 +16,19 @@
|
|
|
16
16
|
min-width: 0;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/*
|
|
20
|
+
* A BLOCK THAT IS A CARD'S CONTENT IS THAT CARD'S SURFACE. Placed straight in
|
|
21
|
+
* a card (with `padding="none"`), it gives up its own edge, corner and ground,
|
|
22
|
+
* so the card's head rule is the only line over the code and there is no box
|
|
23
|
+
* inside a box. In a padded body it stays a well, which is what tells code
|
|
24
|
+
* from the prose beside it.
|
|
25
|
+
*/
|
|
26
|
+
.crewlet-card > .crewlet-codeblock {
|
|
27
|
+
border: 0;
|
|
28
|
+
border-radius: var(--radius-none);
|
|
29
|
+
background: transparent;
|
|
30
|
+
}
|
|
31
|
+
|
|
19
32
|
.crewlet-codeblock__header {
|
|
20
33
|
display: flex;
|
|
21
34
|
align-items: center;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { CommandPalette } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { CommandPalette } from '../chunk-XGBUUQDU.js';
|
|
2
|
+
import '../chunk-IAGYPTEJ.js';
|
|
3
3
|
import '../chunk-7KHM2FZH.js';
|
|
4
4
|
import '../chunk-TYONQSOK.js';
|
|
5
5
|
import '../chunk-SMBKXWML.js';
|
package/dist/DataTable/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-
|
|
1
|
+
export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-FXBGEANQ.js';
|
|
2
2
|
import '../chunk-STJ7QBC3.js';
|
|
3
3
|
import '../chunk-DTIW4CHZ.js';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-IAGYPTEJ.js';
|
|
5
5
|
import '../chunk-AXS6MBNH.js';
|
|
6
6
|
import '../chunk-EUCC37WY.js';
|
|
7
7
|
import '../chunk-AV2DXAEL.js';
|
package/dist/DataView/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-
|
|
1
|
+
export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-QRKT4XTT.js';
|
|
2
2
|
import '../chunk-HOXGBLEY.js';
|
|
3
|
-
import '../chunk-A23KDROH.js';
|
|
4
3
|
import '../chunk-UB6MLXUL.js';
|
|
4
|
+
import '../chunk-FXBGEANQ.js';
|
|
5
5
|
import '../chunk-STJ7QBC3.js';
|
|
6
6
|
import '../chunk-DTIW4CHZ.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-IAGYPTEJ.js';
|
|
8
8
|
import '../chunk-7KHM2FZH.js';
|
|
9
9
|
import '../chunk-KHJIEPZV.js';
|
|
10
10
|
import '../chunk-GXQ3B46I.js';
|
|
@@ -26,7 +26,13 @@ export interface DatasetSourceLabels {
|
|
|
26
26
|
export interface DatasetSourceProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children' | 'onSelect'> {
|
|
27
27
|
/** The dataset's title, which every figure drawn from it cites. */
|
|
28
28
|
title: string;
|
|
29
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Where the dataset reads from, drawn as a tag beside the title. Left out
|
|
31
|
+
* where every entry of a list reads from one place (a picker of the
|
|
32
|
+
* engine's own sources, grouped under headings of their own), since the
|
|
33
|
+
* same tag on every row is a column a reader learns to skip.
|
|
34
|
+
*/
|
|
35
|
+
kind?: DatasetSourceKind | undefined;
|
|
30
36
|
/** What the dataset reads, in the author's terms: "tracker.items, scope mine". */
|
|
31
37
|
definition: ReactNode;
|
|
32
38
|
/** How it is kept current, in words: "Live", "Every 2 min", "On change". */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-HQJ24WPM.js';
|
|
2
|
+
import '../chunk-KYIAFNU7.js';
|
|
3
3
|
import '../chunk-WIATRXEJ.js';
|
|
4
4
|
import '../chunk-3CZ7XAVY.js';
|
|
5
5
|
import '../chunk-EUCC37WY.js';
|
|
@@ -12,6 +12,17 @@ export interface DescriptionListProps extends HTMLAttributes<HTMLDListElement> {
|
|
|
12
12
|
* space after "Up" and stacks a list the panel had room to lay side by side.
|
|
13
13
|
*/
|
|
14
14
|
fit?: boolean | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* The term column's width, as a CSS track: `12rem`, or
|
|
17
|
+
* `minmax(120px, 14rem)`. For lists that have to line up with each other,
|
|
18
|
+
* stacked cards of settings on one page, where each list sizing the column
|
|
19
|
+
* to its own longest term starts its values somewhere else. The same track
|
|
20
|
+
* can be set once for a whole page as `--crewlet-description-list-term`,
|
|
21
|
+
* which every list under it inherits. Ignored with `fit`, whose column is
|
|
22
|
+
* its own longest term by definition, and under the narrow step, where a
|
|
23
|
+
* term stands over its detail.
|
|
24
|
+
*/
|
|
25
|
+
termWidth?: string | undefined;
|
|
15
26
|
/**
|
|
16
27
|
* The pairs. Given as tuples so a caller can build them from a record
|
|
17
28
|
* without inventing a key for each one; `DescriptionList.Item` children are
|
|
@@ -32,7 +43,7 @@ export interface DescriptionListProps extends HTMLAttributes<HTMLDListElement> {
|
|
|
32
43
|
* Each pair is wrapped in a `div`, which HTML allows inside a `dl` and which
|
|
33
44
|
* is what lets one pair be one grid row.
|
|
34
45
|
*/
|
|
35
|
-
export declare function DescriptionList({ dense, fit, items, className, children, ...rest }: DescriptionListProps): import("react").JSX.Element;
|
|
46
|
+
export declare function DescriptionList({ dense, fit, termWidth, items, className, style, children, ...rest }: DescriptionListProps): import("react").JSX.Element;
|
|
36
47
|
export declare namespace DescriptionList {
|
|
37
48
|
var Item: typeof DescriptionListItem;
|
|
38
49
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { DescriptionList, DescriptionListItem } from '../chunk-
|
|
1
|
+
export { DescriptionList, DescriptionListItem } from '../chunk-MFS6F2P7.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -4,11 +4,18 @@
|
|
|
4
4
|
* The term track is `minmax(120px, max-content)`: wide enough that short terms
|
|
5
5
|
* line up with each other, and free to grow for a long one rather than
|
|
6
6
|
* wrapping it into two lines beside a one-word value.
|
|
7
|
+
*
|
|
8
|
+
* ONE LIST'S TRACK IS ITS OWN, which is wrong for a page of them. Four cards
|
|
9
|
+
* of limits stacked on one page each sized the column to their own longest
|
|
10
|
+
* term, so their values started at four different places and the cards did
|
|
11
|
+
* not read as one table. `--crewlet-description-list-term` names the track
|
|
12
|
+
* instead, and it is inherited: set once on the page (or passed to each list
|
|
13
|
+
* as `termWidth`), every list under it shares one column.
|
|
7
14
|
*/
|
|
8
15
|
|
|
9
16
|
.crewlet-description-list {
|
|
10
17
|
display: grid;
|
|
11
|
-
grid-template-columns: minmax(120px, max-content) 1fr;
|
|
18
|
+
grid-template-columns: var(--crewlet-description-list-term, minmax(120px, max-content)) 1fr;
|
|
12
19
|
gap: var(--spacing-2) var(--spacing-4);
|
|
13
20
|
margin: 0;
|
|
14
21
|
font-size: var(--font-size-compact);
|
package/dist/Disclosure/index.js
CHANGED
|
@@ -115,9 +115,35 @@
|
|
|
115
115
|
font-variant-ligatures: none;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
/*
|
|
118
|
+
/*
|
|
119
|
+
* A fact inside the button: quieter than the title it belongs to, and the
|
|
120
|
+
* first thing to give up room when the row runs short.
|
|
121
|
+
*
|
|
122
|
+
* IT USED TO TAKE NONE. `flex: none` held a fact at its full width while the
|
|
123
|
+
* title, which may shrink, was the only thing that could, so a long fact (a
|
|
124
|
+
* log's replay mode, generation, range and size, beside a status badge in the
|
|
125
|
+
* actions) took the whole trigger: the title shrank to nothing, so a row no
|
|
126
|
+
* longer said which log it was, and the fact ran out of the button and under
|
|
127
|
+
* the badge beside it.
|
|
128
|
+
*
|
|
129
|
+
* A HUNDRED TO THE TITLE'S ONE, as a card's subtitle gives way to its title:
|
|
130
|
+
* two items that may shrink give up space in proportion to their widths, so
|
|
131
|
+
* at that ratio the fact absorbs effectively all of it, and ends in an
|
|
132
|
+
* ellipsis, before the title gives up a pixel. The fact is still the button's
|
|
133
|
+
* name in full; only its drawing is cut.
|
|
134
|
+
*
|
|
135
|
+
* NEVER TO NOTHING. The floor is one glyph wide, because a fact is often a
|
|
136
|
+
* mark (a failed call's glyph beside a tool's name), and a mark that shrank
|
|
137
|
+
* to nothing would say nothing at all. A long fact keeps an ellipsis there,
|
|
138
|
+
* which says a fact was cut. Once the fact is at its floor the title shrinks
|
|
139
|
+
* and ends in its own ellipsis.
|
|
140
|
+
*/
|
|
119
141
|
.crewlet-disclosure__meta {
|
|
120
|
-
flex:
|
|
142
|
+
flex: 0 100 auto;
|
|
143
|
+
min-width: 1.5em;
|
|
144
|
+
overflow: hidden;
|
|
145
|
+
text-overflow: ellipsis;
|
|
146
|
+
white-space: nowrap;
|
|
121
147
|
color: var(--color-text-tertiary);
|
|
122
148
|
font-size: var(--font-size-xs);
|
|
123
149
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { LinkInterstitial, openExternal } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { LinkInterstitial, openExternal } from '../chunk-N3TFYBN3.js';
|
|
2
|
+
import '../chunk-IAGYPTEJ.js';
|
|
3
3
|
import '../chunk-5CLW2CXT.js';
|
|
4
4
|
import '../chunk-SZZRIHGT.js';
|
|
5
5
|
import '../chunk-PQADV6P6.js';
|
package/dist/List/List.d.ts
CHANGED
|
@@ -9,6 +9,14 @@ export type ListVariant =
|
|
|
9
9
|
| 'bulleted'
|
|
10
10
|
/** A number per row: an order somebody follows. */
|
|
11
11
|
| 'numbered'
|
|
12
|
+
/**
|
|
13
|
+
* A number per row in a column of its own, with a hairline between rows:
|
|
14
|
+
* statements a reader counts and cites by number (a company's standing
|
|
15
|
+
* policies), each of which may run to several lines. The numbers are the
|
|
16
|
+
* list's own (an `ol`), drawn in tabular figures so a tenth row's number
|
|
17
|
+
* stands where the first one's does.
|
|
18
|
+
*/
|
|
19
|
+
| 'numbered-divided'
|
|
12
20
|
/**
|
|
13
21
|
* A hairline between rows: a feed, a set of results, a conversation. THE
|
|
14
22
|
* DEFAULT, because it is the list every screen in the product draws: rows a
|
package/dist/List/index.js
CHANGED
|
@@ -120,6 +120,52 @@
|
|
|
120
120
|
padding-inline: 0;
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
/*
|
|
124
|
+
* NUMBERED AND DIVIDED: the divided list's hairlines, with the number in a
|
|
125
|
+
* column of its own rather than in the margin, so a statement that runs to a
|
|
126
|
+
* second line wraps under its own first word and not under its number. The
|
|
127
|
+
* row grows with its text (no row height), at the body's leading, and the
|
|
128
|
+
* number stands on the first line's baseline.
|
|
129
|
+
*
|
|
130
|
+
* The number is the list's counter, drawn by the row. The `ol` already
|
|
131
|
+
* announces each item's position, so the drawn figure is given empty
|
|
132
|
+
* alternative text and is not read a second time.
|
|
133
|
+
*/
|
|
134
|
+
.crewlet-list--numbered-divided {
|
|
135
|
+
counter-reset: crewlet-list-item;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.crewlet-list--numbered-divided .crewlet-list__item {
|
|
139
|
+
counter-increment: crewlet-list-item;
|
|
140
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.crewlet-list--numbered-divided .crewlet-list__item:last-child {
|
|
144
|
+
border-bottom: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.crewlet-list--numbered-divided .crewlet-list__row {
|
|
148
|
+
align-items: baseline;
|
|
149
|
+
min-height: 0;
|
|
150
|
+
/* At a card's own inset, since a card is where these stand: the numbers
|
|
151
|
+
line up under the card head's glyph rather than 4px left of it. */
|
|
152
|
+
padding: var(--spacing-3) var(--spacing-4);
|
|
153
|
+
border-radius: 0;
|
|
154
|
+
line-height: var(--font-line-height-body);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.crewlet-list--numbered-divided .crewlet-list__row::before {
|
|
158
|
+
content: counter(crewlet-list-item);
|
|
159
|
+
content: counter(crewlet-list-item) / '';
|
|
160
|
+
flex: none;
|
|
161
|
+
min-width: 2ch;
|
|
162
|
+
text-align: end;
|
|
163
|
+
font-size: var(--font-size-xs);
|
|
164
|
+
font-weight: var(--font-weight-medium);
|
|
165
|
+
font-variant-numeric: tabular-nums;
|
|
166
|
+
color: var(--color-text-tertiary);
|
|
167
|
+
}
|
|
168
|
+
|
|
123
169
|
/* ---- States ------------------------------------------------------------ */
|
|
124
170
|
|
|
125
171
|
/*
|
|
@@ -21,6 +21,14 @@ export interface ListInputProps {
|
|
|
21
21
|
optional?: boolean | undefined;
|
|
22
22
|
/** Draws the Enter keycap inside the new-item box, which is what adds one. */
|
|
23
23
|
enterHint?: boolean | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Puts the focus in the new-item box when the list mounts, for a form
|
|
26
|
+
* opened to change THIS list ("Edit policies"): the reader lands where the
|
|
27
|
+
* next item is written rather than on the form's first field. It is taken
|
|
28
|
+
* during mount, so a dialog the list opens in keeps it rather than moving
|
|
29
|
+
* focus to its own first control. Named as `TagsInput`'s is.
|
|
30
|
+
*/
|
|
31
|
+
focusOnMount?: boolean | undefined;
|
|
24
32
|
/** The name of the control beside the legend that appends what the box holds. */
|
|
25
33
|
addLabel?: ((itemName: string) => string) | undefined;
|
|
26
34
|
itemLabel?: ((name: string, position: string) => string) | undefined;
|
|
@@ -67,4 +75,4 @@ export interface ListInputProps {
|
|
|
67
75
|
*
|
|
68
76
|
* Ported from the engine dashboard's `ui/ListField.tsx`.
|
|
69
77
|
*/
|
|
70
|
-
export declare function ListInput({ label, itemName, value, onChange, multiline, helper, helperOnFocus, error, placeholder, disabled, optional, enterHint, addLabel, itemLabel, newItemLabel, moveUpLabel, moveDownLabel, removeLabel, addedMessage, removedMessage, movedMessage, }: ListInputProps): import("react").JSX.Element;
|
|
78
|
+
export declare function ListInput({ label, itemName, value, onChange, multiline, helper, helperOnFocus, error, placeholder, disabled, optional, enterHint, focusOnMount, addLabel, itemLabel, newItemLabel, moveUpLabel, moveDownLabel, removeLabel, addedMessage, removedMessage, movedMessage, }: ListInputProps): import("react").JSX.Element;
|
package/dist/ListInput/index.js
CHANGED
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;
|