@crewlethq/ui 0.38.0 → 0.40.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 +79 -3
- package/dist/AgentHandoffPanel/index.js +3 -3
- package/dist/AppShell/AppShell.d.ts +13 -2
- package/dist/AppShell/index.js +1 -1
- package/dist/{AppShell-NDU4XMGF.css → AppShell-NPSWZ3XW.css} +45 -4
- package/dist/ArtifactBar/index.js +6 -5
- 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/AvatarPicker/index.js +10 -6
- 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-XL4XLFUH.css +135 -0
- package/dist/CharacterPicker/index.js +2 -2
- package/dist/Charts/Histogram.d.ts +71 -0
- package/dist/Charts/index.d.ts +2 -0
- package/dist/Charts/index.js +1 -1
- package/dist/{Charts-MBJG72BS.css → Charts-TZ744HT6.css} +118 -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/DataGrid/DataGrid.d.ts +267 -0
- package/dist/DataGrid/index.d.ts +3 -0
- package/dist/DataGrid/index.js +7 -0
- package/dist/DataGrid-AQKPJD7W.css +482 -0
- 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/HuePicker/index.js +11 -4
- package/dist/LayersList/index.js +2 -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 +2 -2
- package/dist/LockedLabel/LockedLabel.d.ts +34 -0
- package/dist/LockedLabel/index.d.ts +3 -0
- package/dist/LockedLabel/index.js +3 -0
- package/dist/LockedLabel-VQEGEB7G.css +16 -0
- package/dist/MarkdownEditor/index.js +8 -5
- package/dist/MergeConflicts/index.js +11 -5
- 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/PageNote/PageNote.d.ts +14 -0
- package/dist/PageNote/index.d.ts +3 -0
- package/dist/PageNote/index.js +2 -0
- package/dist/PageNote-RHLXH3ML.css +12 -0
- package/dist/PropertyList/PropertyList.d.ts +88 -0
- package/dist/PropertyList/index.d.ts +3 -0
- package/dist/PropertyList/index.js +7 -0
- package/dist/PropertyList-SCYM66LL.css +96 -0
- package/dist/RelatedRow/RelatedRow.d.ts +27 -0
- package/dist/RelatedRow/index.d.ts +3 -0
- package/dist/RelatedRow/index.js +9 -0
- package/dist/RelatedRow-2FVS6QQA.css +6 -0
- package/dist/RichEditor/index.js +1 -1
- package/dist/SectionFrame/SectionFrame.d.ts +76 -0
- package/dist/SectionFrame/index.d.ts +3 -0
- package/dist/SectionFrame/index.js +7 -0
- package/dist/SectionFrame-M62UUVFQ.css +164 -0
- package/dist/SegmentedControl/index.js +11 -4
- 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 +7 -6
- package/dist/SheetGrid/index.js +3 -3
- package/dist/SidebarNav/SidebarNav.d.ts +35 -2
- package/dist/SidebarNav/index.js +2 -1
- package/dist/{SidebarNav-7SGUZYKK.css → SidebarNav-YI74SPDC.css} +10 -0
- 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/Tabs/Tabs.d.ts +55 -1
- package/dist/Tabs/fold.d.ts +54 -0
- package/dist/Tabs/index.d.ts +1 -1
- package/dist/Tabs/index.js +9 -2
- package/dist/Tabs/roving.d.ts +3 -3
- package/dist/{Tabs-WIF7457H.css → Tabs-S7F4RWAN.css} +77 -0
- package/dist/TagsInput/index.js +1 -1
- package/dist/ThemeGallery/index.js +2 -2
- package/dist/ThemeSwitcher/index.js +12 -5
- 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/VersionCompare/index.js +12 -5
- package/dist/{chunk-B5J23C73.js → chunk-2PEXZ7L4.js} +1 -1
- package/dist/{chunk-S27UBCVX.js → chunk-2VOHUGUA.js} +2 -2
- package/dist/{chunk-XBURIXHO.js → chunk-3TXY3PJZ.js} +1 -1
- package/dist/{chunk-2QZ2VPHR.js → chunk-4OK4DX3V.js} +2 -2
- package/dist/chunk-4RKTZSEW.js +64 -0
- package/dist/{chunk-ECGGQX2H.js → chunk-A44YHLCQ.js} +2 -2
- package/dist/{chunk-F4LPQA4E.js → chunk-BA32AVKS.js} +1 -1
- package/dist/chunk-CV4NES3P.js +9 -0
- package/dist/{chunk-PPHTIKZO.js → chunk-E4BOVKNJ.js} +1 -1
- package/dist/{chunk-W7PAIVAP.js → chunk-E7QLG3PG.js} +30 -9
- package/dist/{chunk-RKKO7QHH.js → chunk-EGMQURBR.js} +5 -4
- package/dist/{chunk-GMW4ZHST.js → chunk-EX22Q5SH.js} +2 -2
- package/dist/{chunk-A23KDROH.js → chunk-FXBGEANQ.js} +1 -1
- package/dist/{chunk-4L2BWSHR.js → chunk-GFYQKMQZ.js} +2 -2
- package/dist/{chunk-HG5VF3TZ.js → chunk-HMVQQEHW.js} +91 -2
- 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-INVSUFJK.js +71 -0
- package/dist/{chunk-6NNY5WBF.js → chunk-JKAGN4V4.js} +1 -1
- package/dist/{chunk-4LRAJXHL.js → chunk-JSWOXRRE.js} +1 -1
- package/dist/{chunk-DYB66CNM.js → chunk-KKNHMXTE.js} +6 -3
- package/dist/{chunk-UWRBD2YO.js → chunk-KNHUBHFX.js} +1 -1
- package/dist/{chunk-ZMDYQ2HH.js → chunk-KWWP3D7M.js} +1 -1
- package/dist/{chunk-46RL3E54.js → chunk-M6NQ4XGK.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-OHGH7O6T.js +19 -0
- package/dist/{chunk-4ISUIS6F.js → chunk-OOC7Q67K.js} +1 -1
- package/dist/{chunk-BT5H2THK.js → chunk-OUD75UB2.js} +1 -1
- package/dist/chunk-PCT47E7O.js +48 -0
- package/dist/{chunk-X3UYTAOG.js → chunk-PFZOFAQ6.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-YEVG2X5R.js → chunk-SNQRGH4A.js} +1 -1
- package/dist/chunk-T6MXORP5.js +116 -0
- package/dist/{chunk-OTCXRJ7D.js → chunk-U2XAJONO.js} +1 -1
- package/dist/{chunk-3ZUINC7C.js → chunk-WYYCPV46.js} +6 -1
- package/dist/chunk-X4IXXLWM.js +306 -0
- package/dist/{chunk-PAQXOP2M.js → chunk-XGBUUQDU.js} +2 -2
- package/dist/chunk-XIDD7PJO.js +416 -0
- package/dist/{chunk-XO7PUL4F.js → chunk-YPTTSJPM.js} +1 -1
- package/dist/chunk-ZUTUI27P.js +21 -0
- package/dist/generated/index.d.ts +9 -0
- package/dist/generated/index.js +83 -74
- package/dist/index.js +83 -74
- package/dist/styles.css +1627 -104
- package/package.json +3 -3
- package/dist/chunk-7SDUKCNW.js +0 -141
- package/dist/{Editor-QV4JP242.js → Editor-IRDQ3JDZ.js} +1 -1
- package/dist/{chunk-JZPK4IXR.js → chunk-3PR65I3H.js} +2 -2
- package/dist/{chunk-ETVEGR2Y.js → chunk-ISA2O2BK.js} +1 -1
- /package/dist/{chunk-4QQ3MND5.js → chunk-S3QTFUJX.js} +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface LockedLabelProps {
|
|
3
|
+
/** What the place is called: a nav row's words, a tab's. */
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
/**
|
|
6
|
+
* Why the reader cannot open it, as a sentence: "Needs Admin access". Left
|
|
7
|
+
* out, nothing is locked and the label is drawn as it is, with no mark.
|
|
8
|
+
*/
|
|
9
|
+
reason?: string | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Draws the key. Off where the place stands under a heading that already
|
|
12
|
+
* carries it (a nav group whose every row is locked): the reason is still
|
|
13
|
+
* the title and still read after the name, and the key is drawn once, on
|
|
14
|
+
* the heading, rather than down every row.
|
|
15
|
+
*/
|
|
16
|
+
mark?: boolean | undefined;
|
|
17
|
+
className?: string | undefined;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A place's name with the key after it, where the reader lacks the access it
|
|
21
|
+
* takes: the sidebar's rows, a section column's, a section tab's.
|
|
22
|
+
*
|
|
23
|
+
* LOCKED, NEVER HIDDEN. A place that vanished for a reader without its access
|
|
24
|
+
* is one they cannot know exists, and cannot ask an admin for; so the name
|
|
25
|
+
* stays, the key says it is closed, the pointer's title says why, and a
|
|
26
|
+
* screen reader hears the reason after the name (", Needs Admin access").
|
|
27
|
+
*
|
|
28
|
+
* ONE MARK WHEREVER A PLACE IS OFFERED, so a locked place reads the same in
|
|
29
|
+
* the rail, in a column of sections and in a row of tabs: a tab that drew no
|
|
30
|
+
* key looked open and then refused.
|
|
31
|
+
*
|
|
32
|
+
* Nothing but the label where nothing is missing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function LockedLabel({ children, reason, mark, className }: LockedLabelProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* LockedLabel: a place's words with the key after them. The words keep their
|
|
3
|
+
* own ink and size; the key takes the quiet step, a step closer to the words
|
|
4
|
+
* than the words are to anything else.
|
|
5
|
+
*/
|
|
6
|
+
.crewlet-locked-label {
|
|
7
|
+
display: inline-flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
gap: var(--spacing-1);
|
|
10
|
+
min-width: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.crewlet-locked-label__key {
|
|
14
|
+
flex: none;
|
|
15
|
+
color: var(--color-text-tertiary);
|
|
16
|
+
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-
|
|
1
|
+
export { MARKDOWN_FORMATS, MarkdownEditor, formatMarkdown, insertMarkdown, markdownWords } from '../chunk-EX22Q5SH.js';
|
|
2
2
|
import '../chunk-NR4CPM4T.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-OOC7Q67K.js';
|
|
4
|
+
import '../chunk-4OK4DX3V.js';
|
|
5
|
+
import '../chunk-X4IXXLWM.js';
|
|
6
|
+
import '../chunk-WIATRXEJ.js';
|
|
7
|
+
import '../chunk-EGMQURBR.js';
|
|
7
8
|
import '../chunk-BHHIIK3M.js';
|
|
9
|
+
import '../chunk-D6FEHY5G.js';
|
|
8
10
|
import '../chunk-OMV5W53A.js';
|
|
9
11
|
import '../chunk-H5XTJ7GJ.js';
|
|
10
12
|
import '../chunk-2YTOOH3A.js';
|
|
13
|
+
import '../chunk-OG6CL3EB.js';
|
|
11
14
|
import '../chunk-4FQT6ZAY.js';
|
|
12
15
|
import '../chunk-NUZHC6MM.js';
|
|
13
16
|
import '../chunk-BZFWDIV6.js';
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
1
|
+
export { MERGE_CONFLICTS_LABELS, MergeConflicts } from '../chunk-2PEXZ7L4.js';
|
|
2
|
+
import '../chunk-OOC7Q67K.js';
|
|
3
|
+
import '../chunk-4OK4DX3V.js';
|
|
4
|
+
import '../chunk-X4IXXLWM.js';
|
|
5
|
+
import '../chunk-WIATRXEJ.js';
|
|
6
|
+
import '../chunk-EGMQURBR.js';
|
|
6
7
|
import '../chunk-BHHIIK3M.js';
|
|
8
|
+
import '../chunk-D6FEHY5G.js';
|
|
9
|
+
import '../chunk-OMV5W53A.js';
|
|
10
|
+
import '../chunk-H5XTJ7GJ.js';
|
|
7
11
|
import '../chunk-2YTOOH3A.js';
|
|
8
12
|
import '../chunk-OG6CL3EB.js';
|
|
13
|
+
import '../chunk-4FQT6ZAY.js';
|
|
14
|
+
import '../chunk-NUZHC6MM.js';
|
|
9
15
|
import '../chunk-BZFWDIV6.js';
|
|
10
16
|
import '../chunk-ODEQTPFM.js';
|
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,14 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface PageNoteProps extends HTMLAttributes<HTMLParagraphElement> {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* One sentence saying what a screen answers, under the page's own title.
|
|
7
|
+
*
|
|
8
|
+
* NOT A HEADER. A page bar's breadcrumb is the title; what is left is the
|
|
9
|
+
* sentence that explains the screen, worth keeping where the screen answers a
|
|
10
|
+
* question whose shape is not obvious from its name. A quiet line rather than
|
|
11
|
+
* a panel, at the reading measure: a reader who has read it once scans past it
|
|
12
|
+
* for ever after. It keeps no margin: the page's column sets the rhythm.
|
|
13
|
+
*/
|
|
14
|
+
export declare function PageNote({ className, children, ...rest }: PageNoteProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* PageNote: the screen's one quiet sentence. No word alone on its last line
|
|
3
|
+
* (`pretty`), which reads as a sentence that stopped rather than one that
|
|
4
|
+
* ended. No margin of its own: the column it stands in sets the gap.
|
|
5
|
+
*/
|
|
6
|
+
.crewlet-page-note {
|
|
7
|
+
margin: 0;
|
|
8
|
+
max-width: var(--size-measure);
|
|
9
|
+
font-size: var(--font-size-compact);
|
|
10
|
+
color: var(--color-text-tertiary);
|
|
11
|
+
text-wrap: pretty;
|
|
12
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type SetBy } from '../ObjectHeader/index.js';
|
|
3
|
+
/** One fact about an object, as a labelled row of its properties. */
|
|
4
|
+
export interface PropertyListItem {
|
|
5
|
+
/** What the property is called. Also the row's identity within its group. */
|
|
6
|
+
label: string;
|
|
7
|
+
/**
|
|
8
|
+
* The value. Absent (null, undefined or "") draws the dash: the property
|
|
9
|
+
* exists and holds nothing. `0` and `false` are values and are drawn.
|
|
10
|
+
*/
|
|
11
|
+
value?: ReactNode;
|
|
12
|
+
/** A page the value links to. */
|
|
13
|
+
href?: string | undefined;
|
|
14
|
+
/** Who last changed it. Never drawn under an absent value, unless the change cleared it. */
|
|
15
|
+
setBy?: SetBy | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Which change set the value, where the by-line alone cannot tell two apart:
|
|
18
|
+
* one actor making two edits that both read "2h ago" are still two changes.
|
|
19
|
+
* Consecutive rows share one by-line only when their by-lines and this agree.
|
|
20
|
+
*/
|
|
21
|
+
change?: string | undefined;
|
|
22
|
+
/** Said on hover, where a label needs a sentence the list has no room for. */
|
|
23
|
+
title?: string | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* The label is an IDENTIFIER rather than a word (an environment variable's
|
|
26
|
+
* name, a tag's key), and wears the mono face. A value that is an identifier
|
|
27
|
+
* is the caller's to set.
|
|
28
|
+
*/
|
|
29
|
+
identifierLabel?: boolean | undefined;
|
|
30
|
+
}
|
|
31
|
+
/** A run of properties under one heading. */
|
|
32
|
+
export interface PropertyListGroup {
|
|
33
|
+
/** The section heading. Left out, the rows run on without one. */
|
|
34
|
+
name?: string | undefined;
|
|
35
|
+
items: readonly PropertyListItem[];
|
|
36
|
+
/**
|
|
37
|
+
* Said in place of the rows when every one of them is absent: a group nobody
|
|
38
|
+
* has filled in anywhere is one fact, not one dash per row. Set it only where
|
|
39
|
+
* the whole group genuinely means one thing when empty ("Nothing scheduled:
|
|
40
|
+
* no dates, no estimate, no size"); without it every dash stays.
|
|
41
|
+
*/
|
|
42
|
+
whenAllAbsent?: string | undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* How a group's heading is set. `eyebrow` is the small capitals of a rail
|
|
46
|
+
* beside an object; `sentence` is sentence case, for a column whose other
|
|
47
|
+
* sections are titled that way.
|
|
48
|
+
*/
|
|
49
|
+
export type PropertyListHeadings = 'eyebrow' | 'sentence';
|
|
50
|
+
export interface PropertyListProps {
|
|
51
|
+
groups: readonly PropertyListGroup[];
|
|
52
|
+
headings?: PropertyListHeadings | undefined;
|
|
53
|
+
/** What an absent value is read as, in place of the dash. */
|
|
54
|
+
emptyLabel?: string | undefined;
|
|
55
|
+
/** The word a by-line's turn link is drawn with. See `SetByLine`. */
|
|
56
|
+
turnLabel?: string | undefined;
|
|
57
|
+
/** Names the list for a screen reader, where nothing above it does. */
|
|
58
|
+
'aria-label'?: string | undefined;
|
|
59
|
+
className?: string | undefined;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* An object's own facts, as labelled rows in sections, beside or under it.
|
|
63
|
+
*
|
|
64
|
+
* ONE TERM COLUMN DOWN THE WHOLE LIST. Each group is its own description list,
|
|
65
|
+
* so a screen reader hears each section as a list named by its heading, and
|
|
66
|
+
* each is a subgrid of the one grid, so the labels of every section share a
|
|
67
|
+
* single column instead of restarting it per section. The column is the
|
|
68
|
+
* description list's own measure (`--crewlet-description-list-term`), so a
|
|
69
|
+
* page that sets it once lines this list up with every key-value card on it.
|
|
70
|
+
*
|
|
71
|
+
* AN ABSENT VALUE IS A DECISION, not a default, and the caller makes it in
|
|
72
|
+
* one of four ways that are not interchangeable:
|
|
73
|
+
*
|
|
74
|
+
* - the row is LEFT OUT: this object has no such property at all;
|
|
75
|
+
* - the row is a DASH (`value` absent): the property exists and holds nothing;
|
|
76
|
+
* - the row SAYS SOMETHING: the emptiness means something a reader should know;
|
|
77
|
+
* - the WHOLE GROUP says one thing (`whenAllAbsent`), because every property
|
|
78
|
+
* in it is absent. Its heading stays: the group exists and is empty, which
|
|
79
|
+
* is a different claim from an object that has no such group.
|
|
80
|
+
*
|
|
81
|
+
* ONE ATTRIBUTION PER CHANGE, NOT PER ROW. A create sets several fields at
|
|
82
|
+
* once, and identical by-lines under each of them are one sentence copied out
|
|
83
|
+
* several times. A run of consecutive rows set by one change draws ONE line,
|
|
84
|
+
* naming what it covers, under the last of them. AND NEVER UNDER AN ABSENCE:
|
|
85
|
+
* provenance under a dash claims somebody set nothing. The exception is a
|
|
86
|
+
* change that emptied the field, which reads "cleared by".
|
|
87
|
+
*/
|
|
88
|
+
export declare function PropertyList({ groups, headings, emptyLabel, turnLabel, 'aria-label': ariaLabel, className, }: PropertyListProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* An object's properties, in sections, on one grid.
|
|
3
|
+
*
|
|
4
|
+
* ONE TERM COLUMN DOWN THE WHOLE LIST. Every section is a description list of
|
|
5
|
+
* its own, laid out as a SUBGRID of this one, so its terms and details sit on
|
|
6
|
+
* this grid's two tracks and every section's labels start and end where the
|
|
7
|
+
* others' do. The term track is the description list's own measure,
|
|
8
|
+
* `--crewlet-description-list-term`, so a page that sets it once lines a list
|
|
9
|
+
* of properties up with every key-value card on it. Unset, it is the rail's
|
|
10
|
+
* own: as wide as the longest label, and never under 92px, which a one-word
|
|
11
|
+
* label ("Due") would otherwise shrink the column to.
|
|
12
|
+
*
|
|
13
|
+
* SIDE BY SIDE AT EVERY WIDTH. A list of properties sits in a rail or a card
|
|
14
|
+
* of its own width, so the window's width says nothing about the room it has;
|
|
15
|
+
* the description list's narrow step (term over detail) is cancelled below.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
.crewlet-property-list {
|
|
19
|
+
display: grid;
|
|
20
|
+
grid-template-columns: var(--crewlet-description-list-term, minmax(92px, max-content)) minmax(0, 1fr);
|
|
21
|
+
gap: var(--spacing-2) var(--spacing-3);
|
|
22
|
+
align-items: baseline;
|
|
23
|
+
min-width: 0;
|
|
24
|
+
font-size: var(--font-size-compact);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Two classes, so the description list's own track and narrow step (one
|
|
28
|
+
class, in a media query) give way to the subgrid at every width. */
|
|
29
|
+
.crewlet-property-list > .crewlet-property-list__group {
|
|
30
|
+
grid-column: 1 / -1;
|
|
31
|
+
grid-template-columns: subgrid;
|
|
32
|
+
gap: inherit;
|
|
33
|
+
font-size: inherit;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.crewlet-property-list .crewlet-description-list__detail {
|
|
37
|
+
margin-bottom: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* THE LABEL IS AN IDENTIFIER (an environment variable's name, a tag's key),
|
|
41
|
+
set in the mono face; a word stays in the list's own. */
|
|
42
|
+
.crewlet-property-list__identifier {
|
|
43
|
+
font-family: var(--font-family-mono);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/*
|
|
47
|
+
* A SECTION'S HEADING, with a hairline above it that separates it from the
|
|
48
|
+
* section before. The list's FIRST heading has nothing to be separated from,
|
|
49
|
+
* so it alone loses the hairline; a list that opens with rows of no section
|
|
50
|
+
* keeps it on its first heading, which has rows above it.
|
|
51
|
+
*/
|
|
52
|
+
.crewlet-property-list__heading {
|
|
53
|
+
grid-column: 1 / -1;
|
|
54
|
+
margin-top: var(--spacing-2);
|
|
55
|
+
padding-top: var(--spacing-2);
|
|
56
|
+
border-top: 1px solid var(--color-border-default);
|
|
57
|
+
color: var(--color-text-tertiary);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.crewlet-property-list__heading:first-child {
|
|
61
|
+
margin-top: 0;
|
|
62
|
+
padding-top: 0;
|
|
63
|
+
border-top: none;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.crewlet-property-list--eyebrow .crewlet-property-list__heading {
|
|
67
|
+
font-size: var(--font-size-2xs);
|
|
68
|
+
font-weight: var(--font-weight-medium);
|
|
69
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
70
|
+
text-transform: uppercase;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.crewlet-property-list--sentence .crewlet-property-list__heading {
|
|
74
|
+
font-size: var(--font-size-xs);
|
|
75
|
+
font-weight: var(--font-weight-medium);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* A SECTION NOBODY HAS FILLED IN, said once across both tracks in the words
|
|
79
|
+
its caller wrote. It is a sentence a reader has to read, so it takes the
|
|
80
|
+
tertiary rung, never the muted one (a floor for a mark). */
|
|
81
|
+
.crewlet-property-list__empty {
|
|
82
|
+
grid-column: 1 / -1;
|
|
83
|
+
margin: 0;
|
|
84
|
+
font-size: var(--font-size-xs);
|
|
85
|
+
color: var(--color-text-tertiary);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* WHO SET IT, under the value rather than beside it: the value is what the
|
|
89
|
+
reader came for. A line of its own, so a long actor name cannot push the
|
|
90
|
+
value out of its track. */
|
|
91
|
+
.crewlet-property-list__set-by {
|
|
92
|
+
display: block;
|
|
93
|
+
margin-top: 2px;
|
|
94
|
+
font-size: var(--font-size-2xs);
|
|
95
|
+
color: var(--color-text-tertiary);
|
|
96
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface RelatedRowProps {
|
|
3
|
+
/** Where the row goes. */
|
|
4
|
+
href: string;
|
|
5
|
+
/** The destination's own glyph, at the small step. */
|
|
6
|
+
icon: ReactNode;
|
|
7
|
+
/** The place, by its name. */
|
|
8
|
+
title: ReactNode;
|
|
9
|
+
/** One sentence: what is there, and where. */
|
|
10
|
+
description: ReactNode;
|
|
11
|
+
/** What the region is called for assistive technology. */
|
|
12
|
+
label?: string | undefined;
|
|
13
|
+
className?: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The one related place a page points at, as a quiet linked row under its
|
|
17
|
+
* content (Policies to the engine's limits, Nodes to its backups).
|
|
18
|
+
*
|
|
19
|
+
* A ROW, NOT A FOOTNOTE. A trailing caption ("The caps are in Settings ›
|
|
20
|
+
* Limits.") was a sentence a reader had to find the link inside. The row
|
|
21
|
+
* stands on a card's own inset, so its glyph stands under the card heads'
|
|
22
|
+
* glyphs and its words under their titles, and the whole row is the link.
|
|
23
|
+
*
|
|
24
|
+
* An application offers it only to a reader who may open the place: a link to
|
|
25
|
+
* a page that refuses them is a dead end offered as a way on.
|
|
26
|
+
*/
|
|
27
|
+
export declare function RelatedRow({ href, icon, title, description, label, className }: RelatedRowProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { RelatedRow } from '../chunk-ZUTUI27P.js';
|
|
2
|
+
import '../chunk-IKBK4A5O.js';
|
|
3
|
+
import '../chunk-ZAC7SKUN.js';
|
|
4
|
+
import '../chunk-INHXF2CL.js';
|
|
5
|
+
import '../chunk-AV2DXAEL.js';
|
|
6
|
+
import '../chunk-BHHIIK3M.js';
|
|
7
|
+
import '../chunk-PQADV6P6.js';
|
|
8
|
+
import '../chunk-BZFWDIV6.js';
|
|
9
|
+
import '../chunk-ODEQTPFM.js';
|
package/dist/RichEditor/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { RichEditor, preloadRichEditor } from '../chunk-
|
|
1
|
+
export { RichEditor, preloadRichEditor } from '../chunk-PFZOFAQ6.js';
|
|
2
2
|
export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
|
|
3
3
|
import '../chunk-BAKPMH3S.js';
|
|
4
4
|
import '../chunk-SZZRIHGT.js';
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface SectionFrameProps {
|
|
3
|
+
/**
|
|
4
|
+
* The column's width, as a CSS length: `236px`, the rail's own. Handed in
|
|
5
|
+
* rather than fixed, so the number an application counts for its own
|
|
6
|
+
* layout (a peek's threshold) and the column drawn are one value.
|
|
7
|
+
*/
|
|
8
|
+
columnWidth: string;
|
|
9
|
+
/**
|
|
10
|
+
* The column folds to a one-row picker over the body, which takes the
|
|
11
|
+
* whole width. The APPLICATION decides when, because the width at which a
|
|
12
|
+
* section beside the column becomes too narrow is its own arithmetic (its
|
|
13
|
+
* rail, its sheet, the floor its sections need), and the same answer
|
|
14
|
+
* usually decides something else too; a second measurement here would be a
|
|
15
|
+
* second answer to one question.
|
|
16
|
+
*/
|
|
17
|
+
folded?: boolean | undefined;
|
|
18
|
+
/** A `SectionFrame.Nav` and a `SectionFrame.Body`. */
|
|
19
|
+
children?: ReactNode;
|
|
20
|
+
className?: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A workspace's sections as a column beside the screen: a list of grouped
|
|
24
|
+
* sections that stays put while the section beside it scrolls, and that
|
|
25
|
+
* folds, where the window is too narrow for both, to one row naming the
|
|
26
|
+
* section the reader is on.
|
|
27
|
+
*
|
|
28
|
+
* FLUSH WITH THE SHEET. In an `AppShell` the frame takes back the content
|
|
29
|
+
* column's padding and gives it to the body, so the column runs the full
|
|
30
|
+
* height of the view with its hairline, and the section keeps the screen's
|
|
31
|
+
* own inset. The column is the view's height (`100cqb`, the shell's
|
|
32
|
+
* scroller is a size container), never the section's, so it sticks for the
|
|
33
|
+
* whole scroll and a long list scrolls inside itself.
|
|
34
|
+
*/
|
|
35
|
+
export declare function SectionFrame({ columnWidth, folded, className, children }: SectionFrameProps): import("react").JSX.Element;
|
|
36
|
+
export declare namespace SectionFrame {
|
|
37
|
+
var Nav: typeof SectionFrameNav;
|
|
38
|
+
var Body: typeof SectionFrameBody;
|
|
39
|
+
}
|
|
40
|
+
export interface SectionFrameNavProps {
|
|
41
|
+
/**
|
|
42
|
+
* The workspace the sections belong to, by its name: "Settings". The list
|
|
43
|
+
* is "Settings sections", and the folded picker reads "Settings Section:
|
|
44
|
+
* People" to a screen reader.
|
|
45
|
+
*/
|
|
46
|
+
scope: string;
|
|
47
|
+
/** The section the reader is on, for the folded picker's row. */
|
|
48
|
+
current?: {
|
|
49
|
+
label: string;
|
|
50
|
+
icon?: ReactNode;
|
|
51
|
+
} | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* The address the reader is on, as the rows' own `href`s write it. A
|
|
54
|
+
* change of it is an arrival: the picker folds again where the reader
|
|
55
|
+
* picked a row of this list, and opens where `openOnArrival` asks.
|
|
56
|
+
*/
|
|
57
|
+
location: string;
|
|
58
|
+
/**
|
|
59
|
+
* Arriving here opens the folded picker rather than folding it: the
|
|
60
|
+
* workspace's own address on a phone, which names no section anybody
|
|
61
|
+
* picked, where a folded row naming the first section hid every group
|
|
62
|
+
* under it. A deep link to a section arrives folded, so the section it
|
|
63
|
+
* named starts right under the picker.
|
|
64
|
+
*/
|
|
65
|
+
openOnArrival?: boolean | undefined;
|
|
66
|
+
/** The groups of rows: `SidebarNav.Group`s of `SidebarNav.Item`s. */
|
|
67
|
+
children?: ReactNode;
|
|
68
|
+
}
|
|
69
|
+
/** The frame's column: the sections list, and the picker it folds to. */
|
|
70
|
+
export declare function SectionFrameNav({ scope, current, location, openOnArrival, children }: SectionFrameNavProps): import("react").JSX.Element;
|
|
71
|
+
export interface SectionFrameBodyProps {
|
|
72
|
+
children?: ReactNode;
|
|
73
|
+
className?: string | undefined;
|
|
74
|
+
}
|
|
75
|
+
/** The section beside the column, on the screen's own inset. */
|
|
76
|
+
export declare function SectionFrameBody({ children, className }: SectionFrameBodyProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SectionFrame, SectionFrameBody, SectionFrameNav } from '../chunk-INVSUFJK.js';
|
|
2
|
+
import '../chunk-E7QLG3PG.js';
|
|
3
|
+
import '../chunk-OHGH7O6T.js';
|
|
4
|
+
import '../chunk-FYTIJM2T.js';
|
|
5
|
+
import '../chunk-2YTOOH3A.js';
|
|
6
|
+
import '../chunk-BZFWDIV6.js';
|
|
7
|
+
import '../chunk-ODEQTPFM.js';
|