@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/README.md
CHANGED
|
@@ -43,14 +43,14 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
|
|
|
43
43
|
| Actions | `Button` and `ButtonLink` (variants `primary`, `secondary`, `outline`, `ghost`, `accent`, `danger`; sizes `small`, `medium`, `large`; shapes `square`, `pill`), `IconButton`, `Menu`, `Link`, `Copyable`, `CopyButton`, `DownloadButton`, `Kbd` |
|
|
44
44
|
| Content and text | `Text` (the eight registers and `inherit`), `Prose`, `Document`, `DocumentTitle` and `DocumentTitleField`, the Markdown grammar (`parseMarkdown`, `parseMarkdownSpans`, `markdownInline`, `safeHref` and the line readers, with no React in it), `Highlight`, `InlineCode`, `List` and `ListItem`, `DescriptionList`, `Timeline`, `RelativeTime`, `Note`, `Divider` |
|
|
45
45
|
| Forms | `Input`, `Textarea`, `Label`, `FormField`, `FormRow`, `Checkbox`, `CheckboxGroup`, `ConfirmField`, `Select`, `Tag`, `TagsInput`, `DateTimePicker`, `TimeWindowPicker`, `ImageUpload`, `CharacterPicker`, `HuePicker`, `AvatarPicker`, `FactList`, `ChoiceList`, `Composer`, `MarkdownEditor`, `RichEditor` (with `preloadRichEditor`, and the round trip `roundTripMarkdown` and `canonicalMarkdown` from `@crewlethq/ui/RichEditorMarkdown`) |
|
|
46
|
-
| Data display | `DataTable`, `CopyableCell`, `Table`, the read-only table cells (`TableKeyCell`, `TableNumberCell`, `TableDateCell`, `TableEntityCell`, `TableStatusCell`, `TableTagsCell`, `TableTextCell`), `StatCard`, `Meter`, `SegmentedMeter`, `Stepper`, `PricingCard`, `Avatar`, `AvatarStack`, `EntityChip`, `CodeBlock`, `QrCode`, `ObjectHeader`, `FactLine`, `SetByLine`, `Skeleton`, `Eyebrow`, `StatGroup`, `PinTile`, `IconTile` |
|
|
46
|
+
| Data display | `DataTable`, `CopyableCell`, `Table`, the read-only table cells (`TableKeyCell`, `TableNumberCell`, `TableDateCell`, `TableEntityCell`, `TableStatusCell`, `TableTagsCell`, `TableTextCell`), `StatCard`, `Meter`, `SegmentedMeter`, `Stepper`, `PricingCard`, `Avatar`, `AvatarStack`, `EntityChip`, `CodeBlock`, `QrCode`, `ObjectHeader`, `FactLine`, `SetByLine`, `Skeleton`, `Eyebrow`, `StatGroup`, `PinTile`, `IconTile`, `SettingsTable` (with `SettingsTable.Row`), `CatalogTile` |
|
|
47
47
|
| List screens | `DataView`, and its parts on their own: `DataViewToolbar`, `FilterAxisBar`, `FilterAxisChip`, plus the filter model (`filterDefsFromColumns`, `applyColumnFilters`, `filterPredicate`, `blankFilterValue`) |
|
|
48
48
|
| Feedback and overlays | `Callout`, `ConflictNote`, `EditingStatus`, `Toaster`, `Modal` (with `variant="sheet"`), `ConfirmModal`, `CommandPalette`, `Tooltip`, `Popover`, `Announcer` |
|
|
49
49
|
| Documents and review | `DiffView` and `DiffSummary` with the line diff they draw (`diffLines`, `diffStat`, `collapseDiff`, `firstChangedLines`, `splitLines`, `MAX_DIFF_LINES`, with no React in it), `DiffList`, `VersionCompare`, `CommentThread` |
|
|
50
50
|
| Charts | `Legend`, `BarList`, `StackedBar`, `StackedColumns`, `ActivityStrip`, `TimeSeries`, `Sparkline`, the reading layer they share (`ChartTooltip`, `useChartHover`), and the ramp (`DATA_COLORS`, `DATA_COLOR_OTHER`, `dataColor`) |
|
|
51
51
|
| Marks | `Count`, `StatusDot`, `EmptyValue`, `VisuallyHidden` |
|
|
52
52
|
| Hooks and seams | `useModalLayer`, `usePopupLayer`, `LayerHost`, `useListbox`, `useOptionKeys`, `useHighlightRest` and `HIGHLIGHT_REST_MS`, `useClipboard`, `useDownload`, `downloadText`, `downloadBlob`, `safeFilename`, `toCsv`, `elementToPng` and `ElementToPngError`, `useOutcome`, `useAnnouncer`, `useNow`, `formatRelative`, `HeadingLevelProvider`, `cx`, the node hues (`NODE_HUES`, `NODE_HUE_NAMES`, `isNodeHue`) |
|
|
53
|
-
| Layout | `Container`, `Section`, `Card`, `Tabs`, `Accordion`, `Disclosure`, `Outline` (with `useActiveHeading` and `scrollToHeading`), `TreeGrid` |
|
|
53
|
+
| Layout | `Container`, `Section`, `Card`, `TileGrid`, `Tabs`, `Accordion`, `Disclosure`, `Outline` (with `useActiveHeading` and `scrollToHeading`), `TreeGrid` |
|
|
54
54
|
| Arranging a page | `ArrangeBoard`, `ArrangeGrid`, `ArrangeFrame` (with `useGridResize`), `ArrangeGroup`, `ArrangeList`, and the reorder hooks under them (`useReorder`, `useReorderLists`, `moveKey`) |
|
|
55
55
|
| Application shell | `AppShell` with `AppShell.Rail`, `AppShell.Topbar`, `AppShell.AccountRow` and `useAppShell`, `AuthLayout`, `SidebarNav` and `NavItem`, `BrandLockup`, `SearchTrigger`, `PageHeader`, `Toolbar`, `Stack`, `Inline`, `Spacer`, `AutoGrid`, `ErrorBoundary`, `useShortcut`, `useFullscreen`, `useIdle`, `useMediaMatch` |
|
|
56
56
|
| Preferences | `ThemeToggle`, `ThemeSwitcher`, `DensitySwitcher`, `ThemeGallery`, `ThemeSwatch`, `useThemePreference`, `useDensityPreference`, `useSystemTheme`, `resolveTheme`, `applyStoredPreferences`, and the framework-free `applyTheme`, `applyPalette`, `applyDensity` with `THEME_PREFERENCES`, `DENSITY_PREFERENCES` and their guards |
|
|
@@ -204,6 +204,40 @@ places:
|
|
|
204
204
|
- A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
|
|
205
205
|
when the content beneath it moves, and every panel anchored inside follows.
|
|
206
206
|
|
|
207
|
+
## Changes in 0.39.0
|
|
208
|
+
|
|
209
|
+
These come from a production polish of the engine dashboard's Settings › Limits, Company › Integrations and Company › Policies, and the same patterns everywhere else it draws them.
|
|
210
|
+
|
|
211
|
+
### New
|
|
212
|
+
|
|
213
|
+
**`SettingsTable` draws a read-only table of settings** (with `SettingsTable.Row`). Each row is the setting's name with its key in the document it is written in under it (`settingKey`, in the monospace face, quiet), the value in force in tabular figures, and where the value comes from (`source`). A value that is the default says so as a quiet word; a row marked `changed` carries a mark before its source, the one row in a table a reader scanning it came to find. The tracks are fractions of the table's width (`--crewlet-settings-table-columns`), so a page that stacks a table per group in cards of one width puts every value and every source on one line down the page, which a term column sized to its own longest term never did. It is announced as a table with Setting, Value and Source column headers (drawn with `header`, renamed with `columns`) and each setting's name as its row's header. In a `Card` (with `padding="none"`) it gives up its own edge and corner, as `StatGroup` does; under 32rem of table the name takes the row's first line and the value and its source share the second.
|
|
214
|
+
|
|
215
|
+
**`TileGrid` lays tiles out on a fixed track count that folds by its own width.** Two sections of tiles each on a track count of its own put their edges in different places, and an `auto-fill` grid left a hole at the end of a short section. `columns` is the count at full width: `3` (the default) folds straight to one under 40rem of grid, never to two, so a set of three or six never strands a tile; `4` folds to two under 56rem; every count is one track under 28rem. `as="ul"` makes the track the list.
|
|
216
|
+
|
|
217
|
+
**`CatalogTile` is one entry in a catalogue**: the mark in a well of one size and ground for every tile, the name as a heading at the level its place gives it, a `status` only when the state carries meaning (On, Connected, Needs attention, Coming soon), one sentence, and a foot with a quiet `meta` fact and one `action`, drawn only when there is something to put in it. A tile in its resting state carries no pill, and its name stands centred beside its mark; `quiet` puts a tile that is available but not set up on the page's own ground rather than draining its mark, because a drained vendor mark (Datadog's white plate on grey) read as a placeholder image. The sentence reserves two lines in a row of tiles so their feet line up, and reserves nothing once the grid is one track.
|
|
218
|
+
|
|
219
|
+
**`List` takes `variant="numbered-divided"`**: an `ol` whose numbers stand in a column of their own, in tabular figures, with a hairline between rows at a card's inset and the body's leading. For statements a reader cites by number, such as a company's standing policies, each of which may run to several lines and wraps under its own first word. The drawn number is the list's counter and is not read a second time.
|
|
220
|
+
|
|
221
|
+
**`ListInput` takes `focusOnMount`**, as `TagsInput` does: the focus goes to the new-item box when the list mounts, once, so a form opened to change that one list (an "Edit policies" link) lands where the next item is written. It is taken during mount, so a dialog the list opens in keeps it rather than moving focus to its own first control.
|
|
222
|
+
|
|
223
|
+
### Fixes
|
|
224
|
+
|
|
225
|
+
**A card header's plain words are its title** (`Card.Header`). A header given a string or a number drew it as a bare text node at the regular weight with no heading element, beside cards whose `Card.Title` was a semibold heading: two title treatments on one page (Models, People, Nodes and a dozen more beside Limits and Sign-in policy), and the plain ones missing from the document outline. Plain words are now drawn as `Card.Title`. **A count of zero is not drawn**: the card's own empty state already says there is nothing, and "Models 0" said it twice.
|
|
226
|
+
|
|
227
|
+
**A card head can stack its subtitle at every width** (`Card.Header` `subtitlePlacement="below"`), for a row of cards of different widths whose heads must stand at one height: by default a wide card keeps its subtitle beside the title while a narrow one stacks it, so one row drew heads of 48 and 68px. **A code block that is a card's content is that card's surface** (`CodeBlock`): placed straight in a `Card` with `padding="none"` it gives up its own edge, corner and ground, so there is no box inside a box; in a padded body it stays a well.
|
|
228
|
+
|
|
229
|
+
**A dataset source can leave out its kind** (`DatasetSource` `kind` is optional): a list whose every entry reads from one place, grouped under list labels of its own, draws no kind tag on every row.
|
|
230
|
+
|
|
231
|
+
**A catalogue tile's fact-only foot stands as tall as one with a button** (`CatalogTile`), so the rules of a row's feet sit on one line.
|
|
232
|
+
|
|
233
|
+
**A dialog's title is its `h1`** (`Modal`). It was a paragraph while the body's headings started at level 2, so the outline a screen reader walks had no top; it keeps its register (the text face at the dialog's size), and still names the dialog.
|
|
234
|
+
|
|
235
|
+
**An object header's eyebrow and fact labels keep the words as written** (`ObjectHeader`, `FactLine`). They were the uppercase, tracked-open micro-caps of a table's column head, so a unit's page read "UNIT" over its name and TYPE, LEAD and SEATS under it, like a form. They are sentence case at the caption step now, as `StatCard`'s label already is.
|
|
236
|
+
|
|
237
|
+
**A row of stat tiles shares its lines** (`StatGroup`). Each tile in a row is a subgrid over the row's three lines (label, number, sub), so a label that wraps no longer pushes its own figure below the others; and a label stands on its number, one gap above it, where another label in the row takes two lines. **A stat tile's sub wraps** (`StatCard`), balanced, rather than ending in an ellipsis: its end is the half that says what the number means, and a grid of tiles gives every tile in a row one height anyway. These were the engine dashboard's own rules over the components; an application that restated them drops them.
|
|
238
|
+
|
|
239
|
+
**The artifact bar takes the shell top bar's inset** (`ArtifactBar`): 20px, 16px under the shell's breakpoint, plus the scroller's gutter at its end, since it stands in that bar's place. At a 12px inset of its own a create page's controls ended past the content under them.
|
|
240
|
+
|
|
207
241
|
## Changes in 0.38.0
|
|
208
242
|
|
|
209
243
|
### Icons
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-
|
|
1
|
+
export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-3TXY3PJZ.js';
|
|
2
2
|
import '../chunk-AUQPBL4O.js';
|
|
3
3
|
import '../chunk-3TFDQLW3.js';
|
|
4
4
|
import '../chunk-OGXHZHRX.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-ISA2O2BK.js';
|
|
6
6
|
import '../chunk-Y5BD4MTE.js';
|
|
7
|
-
import '../chunk-SMBKXWML.js';
|
|
8
7
|
import '../chunk-TYONQSOK.js';
|
|
8
|
+
import '../chunk-SMBKXWML.js';
|
|
9
9
|
import '../chunk-FZVJDJFN.js';
|
|
10
10
|
import '../chunk-BHHIIK3M.js';
|
|
11
11
|
import '../chunk-PQADV6P6.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-
|
|
1
|
+
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-TZYFTC4M.js';
|
|
2
2
|
import '../chunk-4ISUIS6F.js';
|
|
3
3
|
import '../chunk-2QZ2VPHR.js';
|
|
4
4
|
import '../chunk-7SDUKCNW.js';
|
|
@@ -29,7 +29,12 @@
|
|
|
29
29
|
its place, and at a row's height of its own the line under it jumped by
|
|
30
30
|
three pixels between the gallery and the artifact opened from it. */
|
|
31
31
|
height: calc(var(--size-shell-topbar) - 1px);
|
|
32
|
-
|
|
32
|
+
/* THE SHELL TOP BAR'S INSET, the scroller's gutter at its end included: the
|
|
33
|
+
bar stands in that bar's place, and at a 12px inset of its own a create
|
|
34
|
+
page's controls ended 19px past the content under them, where every other
|
|
35
|
+
page's end over it. The same two steps as the top bar, 20px wide and 16px
|
|
36
|
+
under the shell's breakpoint (below). */
|
|
37
|
+
padding: 0 calc(var(--spacing-5) + var(--crewlet-app-shell-gutter, 0px)) 0 var(--spacing-5);
|
|
33
38
|
min-width: 0;
|
|
34
39
|
}
|
|
35
40
|
|
|
@@ -413,3 +418,10 @@
|
|
|
413
418
|
transition: none;
|
|
414
419
|
}
|
|
415
420
|
}
|
|
421
|
+
|
|
422
|
+
/* The shell's breakpoint, where its top bar and content take 16px. */
|
|
423
|
+
@media (width < 1024px) {
|
|
424
|
+
.crewlet-artifact-bar__row {
|
|
425
|
+
padding: 0 calc(var(--spacing-4) + var(--crewlet-app-shell-gutter, 0px)) 0 var(--spacing-4);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-
|
|
1
|
+
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-U2XAJONO.js';
|
|
2
2
|
import '../chunk-TEUQWOWZ.js';
|
|
3
3
|
import '../chunk-CI3VPIJN.js';
|
|
4
4
|
import '../chunk-3CZ7XAVY.js';
|
|
5
5
|
import '../chunk-EUCC37WY.js';
|
|
6
6
|
import '../chunk-UBZDYOCA.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-INHXF2CL.js';
|
|
8
8
|
import '../chunk-AV2DXAEL.js';
|
|
9
9
|
import '../chunk-5AQBPHZD.js';
|
|
10
10
|
import '../chunk-PZKHBB7D.js';
|
package/dist/AuthLayout/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { AuthLayout } from '../chunk-
|
|
1
|
+
export { AuthLayout } from '../chunk-S4DREXGM.js';
|
|
2
2
|
import '../chunk-7KBNFFM3.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-INHXF2CL.js';
|
|
4
4
|
import '../chunk-AV2DXAEL.js';
|
|
5
5
|
import '../chunk-BHHIIK3M.js';
|
|
6
6
|
import '../chunk-PQADV6P6.js';
|
package/dist/Card/Card.d.ts
CHANGED
|
@@ -105,10 +105,22 @@ export interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
105
105
|
divided?: boolean | undefined;
|
|
106
106
|
/** A glyph before the title. Decoration: the title carries the meaning. */
|
|
107
107
|
icon?: ReactNode;
|
|
108
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* How many of something the card is about. A count of zero is not drawn:
|
|
110
|
+
* the card's own empty state says there is nothing, and a "0" badge beside
|
|
111
|
+
* the title said it a second time.
|
|
112
|
+
*/
|
|
109
113
|
count?: number | string | undefined;
|
|
110
114
|
/** A second line under the title. It truncates; a title does not. */
|
|
111
115
|
subtitle?: ReactNode;
|
|
116
|
+
/**
|
|
117
|
+
* Where the subtitle stands. `beside` (the default) keeps the head one line
|
|
118
|
+
* and moves the subtitle under the title only on a card narrower than
|
|
119
|
+
* 480px; `below` always puts it under the title, for a row of cards of
|
|
120
|
+
* different widths (a wide card beside a narrow one) whose heads must stand
|
|
121
|
+
* at one height.
|
|
122
|
+
*/
|
|
123
|
+
subtitlePlacement?: 'beside' | 'below' | undefined;
|
|
112
124
|
/** The card's own controls, at the end of the header row. */
|
|
113
125
|
actions?: ReactNode;
|
|
114
126
|
}
|
|
@@ -159,7 +171,7 @@ export interface CardTitleProps extends HTMLAttributes<HTMLHeadingElement> {
|
|
|
159
171
|
truncate?: boolean | undefined;
|
|
160
172
|
}
|
|
161
173
|
export declare const Card: (({ variant, padding, interactive, rail, selected, as, href, asChild, className, children, ...rest }: CardProps) => import("react").JSX.Element) & {
|
|
162
|
-
Header: ({ divided, icon, count, subtitle, actions, className, children, ...rest }: CardHeaderProps) => import("react").JSX.Element;
|
|
174
|
+
Header: ({ divided, icon, count, subtitle, subtitlePlacement, actions, className, children, ...rest }: CardHeaderProps) => import("react").JSX.Element;
|
|
163
175
|
Body: ({ padding, className, children, ...rest }: CardSectionProps) => import("react").JSX.Element;
|
|
164
176
|
Footer: ({ variant, padding, className, children, ...rest }: CardFooterProps) => import("react").JSX.Element;
|
|
165
177
|
Title: ({ as, truncate, className, children, ...rest }: CardTitleProps) => import("react").JSX.Element;
|
package/dist/Card/index.js
CHANGED
|
@@ -495,6 +495,26 @@
|
|
|
495
495
|
}
|
|
496
496
|
}
|
|
497
497
|
|
|
498
|
+
/*
|
|
499
|
+
* STACKED, ASKED FOR: the subtitle under the title at every width, the shape
|
|
500
|
+
* the narrow step above draws, for a row of cards of different widths whose
|
|
501
|
+
* heads have to stand at one height rather than one inline and one stacked.
|
|
502
|
+
*/
|
|
503
|
+
.crewlet-card__header--stacked {
|
|
504
|
+
flex-wrap: wrap;
|
|
505
|
+
row-gap: var(--spacing-1);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
.crewlet-card__header--stacked > .crewlet-card__header-main {
|
|
509
|
+
flex: 1 1 0;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.crewlet-card__header--stacked > .crewlet-card__subtitle {
|
|
513
|
+
order: 1;
|
|
514
|
+
flex: 1 1 100%;
|
|
515
|
+
white-space: normal;
|
|
516
|
+
}
|
|
517
|
+
|
|
498
518
|
.crewlet-card__description {
|
|
499
519
|
margin: 0;
|
|
500
520
|
font-size: var(--font-size-compact);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import { type HeadingLevel } from '../utils/headingLevel.js';
|
|
3
|
+
export type CatalogTileElement = 'article' | 'li' | 'div';
|
|
4
|
+
export interface CatalogTileProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
5
|
+
/** The element the tile is: an `li` in a `TileGrid as="ul"`. */
|
|
6
|
+
as?: CatalogTileElement | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* What the entry is told apart by before its name is read: a `VendorMark`,
|
|
9
|
+
* a glyph. Drawn in the tile's mark well, at one size and on one ground for
|
|
10
|
+
* every tile, and hidden from assistive technology: the name is what is read.
|
|
11
|
+
*/
|
|
12
|
+
mark: ReactNode;
|
|
13
|
+
/** The entry's name, as the tile's heading. */
|
|
14
|
+
title: ReactNode;
|
|
15
|
+
/** Overrides the level the name is rendered at. */
|
|
16
|
+
headingLevel?: HeadingLevel | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* The entry's state, as a `Tag`, ONLY when the state is worth reading: On,
|
|
19
|
+
* Connected, Needs attention, Coming soon. An entry in its resting state
|
|
20
|
+
* (available, not set up) carries none, and its name stands centred beside
|
|
21
|
+
* its mark; a pill under every name is a column a reader learns to skip.
|
|
22
|
+
*/
|
|
23
|
+
status?: ReactNode;
|
|
24
|
+
/** One sentence: what the entry is for, or what is owed when something is. */
|
|
25
|
+
description?: ReactNode;
|
|
26
|
+
/** A quiet fact at the foot (`2 agents · 14 deliveries`). */
|
|
27
|
+
meta?: ReactNode;
|
|
28
|
+
/** The tile's one control, at the foot's end. */
|
|
29
|
+
action?: ReactNode;
|
|
30
|
+
/**
|
|
31
|
+
* Available but not set up: the tile sits one rung lower, on the page's own
|
|
32
|
+
* ground, rather than on the card's. Its text and its mark keep their
|
|
33
|
+
* strength, because a tile not yet set up is the one a reader came to set up.
|
|
34
|
+
*/
|
|
35
|
+
quiet?: boolean | undefined;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* One entry in a catalogue: its mark, its name, its state when it has one, a
|
|
39
|
+
* sentence, and a foot with a quiet fact and one action.
|
|
40
|
+
*
|
|
41
|
+
* EVERY TILE IN A ROW IS ONE SHAPE. The sentence reserves two lines and takes
|
|
42
|
+
* what is left of the tile's height, so tiles stretched to one row height in a
|
|
43
|
+
* `TileGrid` keep their feet on one line; a tile with neither a fact nor an
|
|
44
|
+
* action draws no foot at all, since a rule with nothing under it reads as a
|
|
45
|
+
* missing control.
|
|
46
|
+
*/
|
|
47
|
+
export declare function CatalogTile({ as: Element, mark, title, headingLevel, status, description, meta, action, quiet, className, ...rest }: CatalogTileProps): import("react").JSX.Element;
|
|
@@ -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,8 +1,8 @@
|
|
|
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
|
-
import '../chunk-SMBKXWML.js';
|
|
5
4
|
import '../chunk-TYONQSOK.js';
|
|
5
|
+
import '../chunk-SMBKXWML.js';
|
|
6
6
|
import '../chunk-BHHIIK3M.js';
|
|
7
7
|
import '../chunk-PQADV6P6.js';
|
|
8
8
|
import '../chunk-OMV5W53A.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-
|
|
1
|
+
export { COMMENT_THREAD_LABELS, CommentThread } from '../chunk-MMPKN7WV.js';
|
|
2
2
|
import '../chunk-CI3VPIJN.js';
|
|
3
3
|
import '../chunk-3CZ7XAVY.js';
|
|
4
4
|
import '../chunk-EUCC37WY.js';
|
|
5
5
|
import '../chunk-5AQBPHZD.js';
|
|
6
6
|
import '../chunk-PZKHBB7D.js';
|
|
7
7
|
import '../chunk-PWG3VHRQ.js';
|
|
8
|
-
import '../chunk-
|
|
9
|
-
import '../chunk-SMBKXWML.js';
|
|
8
|
+
import '../chunk-ISA2O2BK.js';
|
|
10
9
|
import '../chunk-TYONQSOK.js';
|
|
10
|
+
import '../chunk-SMBKXWML.js';
|
|
11
11
|
import '../chunk-BHHIIK3M.js';
|
|
12
12
|
import '../chunk-PQADV6P6.js';
|
|
13
13
|
import '../chunk-OG6CL3EB.js';
|
package/dist/Composer/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { COMPOSER_COUNTER_AT, Composer } from '../chunk-
|
|
2
|
-
import '../chunk-SMBKXWML.js';
|
|
1
|
+
export { COMPOSER_COUNTER_AT, Composer } from '../chunk-ISA2O2BK.js';
|
|
3
2
|
import '../chunk-TYONQSOK.js';
|
|
3
|
+
import '../chunk-SMBKXWML.js';
|
|
4
4
|
import '../chunk-PQADV6P6.js';
|
|
5
5
|
import '../chunk-4FQT6ZAY.js';
|
|
6
6
|
import '../chunk-NUZHC6MM.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';
|
|
@@ -13,8 +13,8 @@ import '../chunk-AXS6MBNH.js';
|
|
|
13
13
|
import '../chunk-3CZ7XAVY.js';
|
|
14
14
|
import '../chunk-EUCC37WY.js';
|
|
15
15
|
import '../chunk-AV2DXAEL.js';
|
|
16
|
-
import '../chunk-SMBKXWML.js';
|
|
17
16
|
import '../chunk-TYONQSOK.js';
|
|
17
|
+
import '../chunk-SMBKXWML.js';
|
|
18
18
|
import '../chunk-BHHIIK3M.js';
|
|
19
19
|
import '../chunk-PQADV6P6.js';
|
|
20
20
|
import '../chunk-D6FEHY5G.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,4 +1,4 @@
|
|
|
1
|
-
export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-
|
|
1
|
+
export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-HQJ24WPM.js';
|
|
2
2
|
import '../chunk-KYIAFNU7.js';
|
|
3
3
|
import '../chunk-WIATRXEJ.js';
|
|
4
4
|
import '../chunk-3CZ7XAVY.js';
|
|
@@ -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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ListInput } from '../chunk-
|
|
2
|
-
import '../chunk-SMBKXWML.js';
|
|
1
|
+
export { ListInput } from '../chunk-WYYCPV46.js';
|
|
3
2
|
import '../chunk-TYONQSOK.js';
|
|
3
|
+
import '../chunk-SMBKXWML.js';
|
|
4
4
|
import '../chunk-PQADV6P6.js';
|
|
5
5
|
import '../chunk-RSAQOKH3.js';
|
|
6
6
|
import '../chunk-OMV5W53A.js';
|