@crewlethq/ui 0.83.0 → 0.84.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 +34 -0
- package/dist/ActionCard/ActionCard.d.ts +7 -7
- package/dist/ActionCard/index.js +1 -1
- package/dist/ActionCard-YZKL3CKR.css +130 -0
- package/dist/AppShell/AppShell.d.ts +14 -11
- package/dist/AppShell/index.js +1 -1
- package/dist/{AppShell-U7D2MUUF.css → AppShell-NX5HCD4O.css} +84 -44
- package/dist/ArtifactBar/index.js +1 -1
- package/dist/ArtifactCard/index.js +2 -2
- package/dist/ArtifactKindIllustration/index.js +1 -1
- package/dist/{ArtifactKinds-3EH4KR3F.css → ArtifactKinds-27TE3KJL.css} +7 -7
- package/dist/ArtifactMakeRow/index.js +1 -1
- package/dist/ArtifactNameCell/index.js +1 -1
- package/dist/BriefCard/index.js +2 -1
- package/dist/CatalogTile/CatalogTile.d.ts +23 -5
- package/dist/CatalogTile/index.d.ts +1 -1
- package/dist/CatalogTile/index.js +2 -1
- package/dist/{CatalogTile-6VF36JWA.css → CatalogTile-TMOSGSV3.css} +4 -3
- package/dist/CompactNav/CompactNav.d.ts +10 -6
- package/dist/CompactNav/index.js +1 -1
- package/dist/DataView/index.js +1 -1
- package/dist/DirectoryList/index.js +1 -1
- package/dist/{DirectoryList-XZOWYOA3.css → DirectoryList-IXQIMNFS.css} +8 -1
- package/dist/InboxList/InboxList.d.ts +28 -2
- package/dist/InboxList/index.d.ts +1 -1
- package/dist/InboxList/index.js +6 -1
- package/dist/{InboxList-OFGSX5IH.css → InboxList-X5Q5WWAI.css} +63 -2
- package/dist/ListDetail/ListDetail.d.ts +6 -0
- package/dist/ListDetail/index.js +1 -1
- package/dist/{ListDetail-N3L7PB46.css → ListDetail-JGESKTR7.css} +38 -0
- package/dist/ReadingPane/ReadingPane.d.ts +17 -1
- package/dist/ReadingPane/index.d.ts +1 -1
- package/dist/ReadingPane/index.js +2 -1
- package/dist/{ReadingPane-VLYOWMCM.css → ReadingPane-VFTRDPC5.css} +19 -0
- package/dist/RichEditor/index.js +1 -1
- package/dist/SectionFrame/index.js +2 -2
- package/dist/ShareDialog/index.js +1 -1
- package/dist/SidebarNav/SidebarNav.d.ts +18 -2
- package/dist/SidebarNav/index.d.ts +1 -1
- package/dist/SidebarNav/index.js +1 -1
- package/dist/{SidebarNav-E7PZGGA6.css → SidebarNav-IKBKGXW4.css} +20 -0
- package/dist/{chunk-AUSFKGKL.js → chunk-3AMWXJQX.js} +1 -1
- package/dist/{chunk-Q7N2ATMC.js → chunk-64JNKLLP.js} +57 -9
- package/dist/chunk-6C7GQOBV.js +10 -0
- package/dist/{chunk-YRNNUCQP.js → chunk-7BDBO2NP.js} +1 -1
- package/dist/{chunk-25JQNHTC.js → chunk-BRK3HXGZ.js} +8 -2
- package/dist/{chunk-QM3432PH.js → chunk-C4JTX25K.js} +2 -2
- package/dist/{chunk-QE4OIE3Q.js → chunk-DJIWCW5Z.js} +6 -4
- package/dist/{chunk-QPHD4UUG.js → chunk-F6ZUM66S.js} +160 -25
- package/dist/{chunk-MVMVMHYI.js → chunk-HDEKHP65.js} +1 -1
- package/dist/{chunk-BXGBGYKH.js → chunk-HKUZ2GYX.js} +1 -1
- package/dist/{chunk-ZB3E2Z4Y.js → chunk-J5T5TDM2.js} +1 -1
- package/dist/{chunk-C46DDVTK.js → chunk-LTD7KLOU.js} +1 -1
- package/dist/{chunk-YBC2CYPD.js → chunk-O4VTQMEF.js} +1 -1
- package/dist/{chunk-HTBTAIH6.js → chunk-OM2LABPS.js} +2 -2
- package/dist/{chunk-PGBKZSSQ.js → chunk-ORONAXSF.js} +10 -7
- package/dist/{chunk-ICE3D63E.js → chunk-QWRAWKB2.js} +50 -9
- package/dist/{chunk-SRDNGGZE.js → chunk-RKIJAXQA.js} +1 -1
- package/dist/{chunk-CF4M6N6A.js → chunk-XYSSFI5C.js} +1 -7
- package/dist/generated/index.js +31 -30
- package/dist/index.js +31 -30
- package/dist/styles.css +294 -88
- package/dist/utils/developing.d.ts +10 -0
- package/package.json +3 -3
- package/dist/ActionCard-47WSZ2O5.css +0 -110
- package/dist/{Editor-5D5Z3LBQ.js → Editor-VGNB35NJ.js} +1 -1
package/README.md
CHANGED
|
@@ -205,6 +205,40 @@ places:
|
|
|
205
205
|
- A surface that pans or zooms dispatches `LAYER_REPOSITION_EVENT` on its host
|
|
206
206
|
when the content beneath it moves, and every panel anchored inside follows.
|
|
207
207
|
|
|
208
|
+
## Changes in 0.84.0
|
|
209
|
+
|
|
210
|
+
### The application rail
|
|
211
|
+
|
|
212
|
+
**The fold control is a chevron again, before the brand's mark.** The plus and minus of 0.83.0 give way to the chevrons the control drew before them, pointing left to fold the rail while it is full and right to unfold it while it is compact, and the control moves from the rail's top left corner onto the head's row, just before the brand's mark. The control and the mark are one pair, a step apart (`--spacing-1`) and centred together in the compact column, so the 76px column holds both (12, 24, 4, 24, 12) and neither moves when the rail folds; the mark's inset follows from the same arithmetic. Its names, `aria-expanded`, `aria-controls`, `aria-keyshortcuts`, the keys in its tooltip, its target floor and its ring inside its own box are unchanged. In the compact rail the lockup gives up its end inset, so the mark is all the column holds. Props are unchanged.
|
|
213
|
+
|
|
214
|
+
**A badge takes a tone.** `NavItem`'s and `CompactNavItem`'s `badge` (type `NavBadge`) take `tone`, `'attention' | 'quiet'` (Count's own `CountTone`), with `attention` the default, so the inbox's accent pill is unchanged. `quiet` keeps the round pill, its size and its place on the row's end line, in the quiet count's grey: a neutral wash (`--color-fill-soft`) carrying the secondary ink, lifting to the row's ink on the reader's own row, measured on every ground a row can have in every palette. It is for work that is the reader's own and waits but does not call: My work beside the Inbox. In the compact rail a quiet badge is the tile's quiet figure, and a folded group's tile adds up only the badges that call. Story: `SidebarNav` Badge Tones.
|
|
215
|
+
|
|
216
|
+
**Choosing a place in a folded group's flyout leaves focus somewhere.** The flyout closed on every choice, by a press, by the pointer resting and by the keys, but only a choice made with the keys handed focus back to the tile; a press left focus on the place's link, which went with the flyout, so the reader's next Tab started from the top of the document. Focus now follows the navigation: the destination takes it first (the place's handler, or a router that focuses the page it lands on, in its handler or its effects, often only where nothing holds focus), and only where nothing has taken it by the next frame does it go back to the tile, by a press as by a key (without a ring for a pointer reader). A place with no `href` closes like Escape, with focus straight back on the tile.
|
|
217
|
+
|
|
218
|
+
**A choice does not reopen the flyout under a resting pointer.** Choosing a place closed the flyout with the pointer still on the tile or beside it, and resting there opened it again a moment later, over the page just chosen, so the flyout looked as if it had stayed open. After a choice, resting no longer opens it until the pointer has been somewhere other than the tile; a press and the keys still open it at once.
|
|
219
|
+
|
|
220
|
+
### Screens that fill the window
|
|
221
|
+
|
|
222
|
+
**A list's detail draws its scrollbar on the sheet's edge.** On a fill screen the scroller reserved its scrollbar's gutter and the content column padded inside it, so a `ListDetail`'s detail drew its scrollbar 31px inside the sheet beside an empty strip, and a trailing control (a header's Disconnect, a tile's Open) touched that scrollbar. A fill screen's scroller now reserves no gutter: its column pads its end by the inset plus the gutter instead, so its content stands exactly where it did, publishes that length as `--crewlet-app-shell-bleed-end`, and runs the sheet's whole width (a fill column no longer takes the `--size-content-max` measure; prose inside it keeps its own). A `ListDetail` placed directly in that column takes the length back, so its detail is the pane's outermost box and its scrollbar the sheet's last pixel. The detail reserves its gutter (`scrollbar-gutter: stable`) and keeps the screen's side inset inside itself (`--crewlet-list-detail-end`, the shell's inset by default), so its content, header actions and right-aligned section buttons end under the bar's last control whether or not it scrolls; folded to one pane, the list does the same. Only there: a `ListDetail` on a scrolling or a flush screen, or outside a shell, is as wide as its box, with nothing reserved. On a fill screen the shell reads the scrollbar's width off a hidden gauge, so the bar's controls keep their place between a fill screen and a scrolling one; a flush screen is unchanged. The bar and the column now share one inset, `--crewlet-app-shell-inset` (20px, 16px under the shell's breakpoint). Props are unchanged. Story: `ListDetail` In A Fill Screen, whose play function measures these edges.
|
|
223
|
+
|
|
224
|
+
**A directory's lines clear its scrollbar.** `DirectoryList`'s groups, which scroll on their own above the foot, now reserve their scrollbar's gutter and end their lines a step (`--spacing-2`) before it, so a line's state pill no longer touches the scrollbar and does not move when the list grows long enough to scroll. Props are unchanged.
|
|
225
|
+
|
|
226
|
+
### Catalogue tiles
|
|
227
|
+
|
|
228
|
+
**Breaking: `CatalogTile`'s `status` is a tone and a word.** It took any node, so one row of tiles drew a service's In use as a soft pill and an app's Connected as a dot and a word, at two heights. It now takes `{ tone, label }` (type `CatalogTileStatus`, `tone` from the kit's `Tone`), and the tile draws every state the same way, the tone's dot and its word, at the caption step. On a compact tile the state stands after the name and the fact after the state on the header line; on a comfortable tile the fact stays in the foot. Pass `status={{ tone: 'success', label: 'In use' }}` where a `Tag` or a `StatusDot` was passed.
|
|
229
|
+
|
|
230
|
+
### Answering in the inbox
|
|
231
|
+
|
|
232
|
+
**A row taken from a group closes its height.** An `InboxGroup` keeps a keyed row that leaves its children drawn in its place, inert (focus inside it is let go), while its one track eases from `1fr` to `0fr` and it fades, on the slow step with the emphasized curve, so the rows under it slide up rather than jump; it is drawn no more once that motion has ended. The host only removes the row, in the same commit it adds it to another group. Rows need stable keys of their own, such as their ids: a row without one is told apart by its position, so it is not kept while it leaves (it goes at once), and the group says so once in development. Any keyed component child is kept as a row, so a host that draws its rows through a wrapper of its own (a memoized item) has the wrapper forward `leaving` and `onLeft` to its `InboxRow`; a plain element such as an empty state's `li` goes at once. The host's own `onLeft` on a row still runs, once, when the row has closed, which is how a host keeps a group that has emptied drawn until its last row has gone. A list of the host's own can drive the same with `InboxRow`'s `leaving` and `onLeft`. The row's content now stands in one box (`crewlet-inbox-row__body`) so its track can close over it. The motion a suite fakes is exported as `INBOX_ROW_LEAVE` (a transition of the row's own `grid-template-rows`).
|
|
233
|
+
|
|
234
|
+
**An arrival is washed.** `InboxRow`'s `arrived` plays a brief wash of the accent that fades back to the row's own ground, and `InboxGroup`'s `arrived`, a token such as the arriving row's key, plays it over the group's label and count each time it changes, so a row that lands in a closed group is seen to land. Pass either only for a row that has just arrived.
|
|
235
|
+
|
|
236
|
+
**`ReadingPane` moves on with its item.** `contentKey` names what the pane shows: a new value draws the item afresh and plays it in (a short fade and rise on the moderate step, `READING_PANE_ENTER` on the column), and moves focus to its title, without scrolling the page, where the reader was last in the pane (focus came into it, or a press landed in it), as after the control they answered with has gone with its item. A focused body is not taken as the pane's: Safari does not focus a pressed control and a live update moves nothing, so a reader in the list, or nowhere, keeps their place. Every change plays the item in, a return to the first item included. `focusTarget` names another place for it. `ReadingPaneTitle` is now focusable from code (`tabIndex={-1}`), never a tab stop. Under reduced motion nothing moves, and focus still follows. Story: `InboxList` Answering Moves On.
|
|
237
|
+
|
|
238
|
+
### First-step cards
|
|
239
|
+
|
|
240
|
+
**`ActionCard` is calmer, in light and dark.** The cards a new room opens with ("Add people and agents", "Add a description", "Start from a template") stood on saturated slabs of the kind's hue, deep purple, navy and brown on the dark sheet, under a full-hue edge and a muddy glow. Each ground is now a calm tint: the card rung, tinted by a share of the kind's hue (`--color-artifact-kind-<kind>-ground` and its steps, derived by the tokens build at 0.42 of the hue's chroma and 0.12 of its lightness from the card's neutral, 0.6 and 0.18 under the pointer, held to a chroma ceiling and to 4.5:1 for the title in every palette). The edge is the kind's own, at 3:1: its hue stepped toward the palette's ink until it clears 3:1 on the sheet and on the card's tint (`--color-artifact-kind-<kind>-edge`, derived by the tokens build), and a step further under the pointer (`-edge-strong`, against the strong tint), where the tint deepens and a small shadow lifts the card; the ring is drawn over the card's own edge. The corner and the shadow are from the edge scale (`--radius-xl`, `--shadow-xs`, `--shadow-sm` under the pointer). Every kind's drawing takes the same box, the card's width less its inset at the drawing canvas's own shape, so a tall page and a wide slide weigh the same, set a step into the card's foot on a soft shadow of the kind's Fill, with a lower halo (the glow at 0.24, was 0.46). Props are unchanged.
|
|
241
|
+
|
|
208
242
|
## Changes in 0.83.0
|
|
209
243
|
|
|
210
244
|
### The application rail
|
|
@@ -19,14 +19,14 @@ export interface ActionCardProps extends Omit<ButtonHTMLAttributes<HTMLButtonEle
|
|
|
19
19
|
onSelect: () => void;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
* A first step offered as a picture: a tall card on
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* template) until its first message.
|
|
22
|
+
* A first step offered as a picture: a tall card on a calm tint of one of
|
|
23
|
+
* the kit's kind colours, edged in the kind's hairline, its title at the top
|
|
24
|
+
* and a drawing at its foot. A new room opens with a row of these (add
|
|
25
|
+
* people, add a description, start from a template) until its first message.
|
|
26
26
|
*
|
|
27
|
-
* A QUIET HOVER. The
|
|
28
|
-
* off the page; nothing moves, so a row of cards
|
|
29
|
-
* passing over it.
|
|
27
|
+
* A QUIET HOVER. The tint deepens a step, the edge takes the kind's hue and a
|
|
28
|
+
* small shadow lifts the card off the page; nothing moves, so a row of cards
|
|
29
|
+
* holds still under a pointer passing over it.
|
|
30
30
|
*
|
|
31
31
|
* A BUTTON NAMED BY ITS TITLE. The drawing is hidden from assistive
|
|
32
32
|
* technology, so a reader hears "Add people and agents, button" and nothing
|
package/dist/ActionCard/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from '../chunk-
|
|
1
|
+
export { ACTION_CARD_GROUND, ActionCard, ActionCardRow } from '../chunk-OM2LABPS.js';
|
|
2
2
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ActionCard: a first step offered as a picture, on a CALM TINT of an
|
|
3
|
+
* artifact kind's hue. The ground is the kind's own Ground steps
|
|
4
|
+
* (ArtifactKinds.css): the card rung tinted by a share of the hue's chroma,
|
|
5
|
+
* never a slab of it, which the palette suite holds to 4.5:1 for the primary
|
|
6
|
+
* text in every palette and both modes and to a chroma ceiling. The edge is
|
|
7
|
+
* the kind's hue stepped toward the ink until it clears 3:1, a step further
|
|
8
|
+
* under the pointer, and a soft halo of the hue stands behind the drawing.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* ONE ROW THAT SCROLLS SIDEWAYS when it runs out of width, so a phone shows
|
|
13
|
+
* two cards and part of the third (the part says there is more) instead of a
|
|
14
|
+
* tall stack. The block padding keeps the focus ring and the hover shadow
|
|
15
|
+
* inside the scroller's clip; the negative margin gives that space back to
|
|
16
|
+
* the layout. A host that runs the row to its container's edges sets the
|
|
17
|
+
* inline padding and `scroll-padding-inline` to its own inset.
|
|
18
|
+
*/
|
|
19
|
+
.crewlet-action-cards {
|
|
20
|
+
display: flex;
|
|
21
|
+
gap: var(--spacing-2);
|
|
22
|
+
overflow-x: auto;
|
|
23
|
+
margin-block: calc(var(--spacing-1) * -1) calc(var(--spacing-2) * -1);
|
|
24
|
+
padding-block: var(--spacing-1) var(--spacing-2);
|
|
25
|
+
scroll-snap-type: x mandatory;
|
|
26
|
+
overscroll-behavior-x: contain;
|
|
27
|
+
scrollbar-width: none;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.crewlet-action-cards::-webkit-scrollbar {
|
|
31
|
+
display: none;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.crewlet-action-card {
|
|
35
|
+
--crewlet-action-card-ground: var(--crewlet-kind-ground);
|
|
36
|
+
--crewlet-action-card-edge: var(--crewlet-kind-edge);
|
|
37
|
+
position: relative;
|
|
38
|
+
display: flex;
|
|
39
|
+
flex: none;
|
|
40
|
+
flex-direction: column;
|
|
41
|
+
justify-content: space-between;
|
|
42
|
+
width: 148px;
|
|
43
|
+
height: 172px;
|
|
44
|
+
box-sizing: border-box;
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
padding: var(--spacing-3) var(--spacing-3) 0;
|
|
47
|
+
/* THE KIND'S OWN EDGE: its hue stepped toward the ink until it clears 3:1
|
|
48
|
+
on the sheet and on the card's tint (`--color-artifact-kind-<kind>-edge`,
|
|
49
|
+
derived by the tokens build and held by its suite). The Line step, the
|
|
50
|
+
hue at 0.38, did not clear it, and a neutral grey outline read as a card
|
|
51
|
+
from another family. */
|
|
52
|
+
border: 1px solid var(--crewlet-action-card-edge);
|
|
53
|
+
/* The edge scale: the extra-large corner a tall card of its own takes, and
|
|
54
|
+
the smallest shadow, so the card sits on the page rather than in it. */
|
|
55
|
+
border-radius: var(--radius-xl);
|
|
56
|
+
background-color: var(--color-surface-subtle);
|
|
57
|
+
background-image:
|
|
58
|
+
radial-gradient(90% 56% at 50% 100%, var(--crewlet-kind-glow) 0%, transparent 72%),
|
|
59
|
+
linear-gradient(180deg, var(--crewlet-action-card-ground) 0%, var(--crewlet-kind-ground-end) 100%);
|
|
60
|
+
box-shadow: var(--shadow-xs);
|
|
61
|
+
color: var(--color-text-primary);
|
|
62
|
+
font: inherit;
|
|
63
|
+
text-align: left;
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
scroll-snap-align: start;
|
|
66
|
+
transition:
|
|
67
|
+
box-shadow var(--motion-duration-fast) var(--motion-easing-default),
|
|
68
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* A QUIET HOVER: the tint deepens a step, the edge takes a stronger step of
|
|
72
|
+
the hue, and a small shadow lifts the card off the page. Nothing moves, so
|
|
73
|
+
a row of cards stays still under a pointer passing over it. */
|
|
74
|
+
.crewlet-action-card:hover {
|
|
75
|
+
--crewlet-action-card-ground: var(--crewlet-kind-ground-strong);
|
|
76
|
+
--crewlet-action-card-edge: var(--crewlet-kind-edge-strong);
|
|
77
|
+
box-shadow: var(--shadow-sm);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* The card draws its own edge, so the ring is drawn over it, on the same
|
|
81
|
+
corner. */
|
|
82
|
+
.crewlet-action-card:focus-visible {
|
|
83
|
+
outline: 2px solid var(--color-focus);
|
|
84
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* The title at the medium weight, as every emphasis in a conversation is,
|
|
88
|
+
two lines at most at its width, balanced so neither line is one word. */
|
|
89
|
+
.crewlet-action-card__title {
|
|
90
|
+
max-width: 14ch;
|
|
91
|
+
font-size: var(--font-size-sm);
|
|
92
|
+
font-weight: var(--font-weight-medium);
|
|
93
|
+
line-height: var(--font-line-height-snug);
|
|
94
|
+
text-wrap: balance;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/*
|
|
98
|
+
* THE DRAWING STANDS ON THE CARD'S FOOT, still, the card's own width less its
|
|
99
|
+
* inset. Every kind's drawing is one canvas (160 by 120), so each takes the
|
|
100
|
+
* same box whatever its shape, a tall page and a wide slide alike, where a
|
|
101
|
+
* fixed width and a height cap drew a page half the size of a slide. It is
|
|
102
|
+
* set a step into the foot, so it stands on the edge rather than floating
|
|
103
|
+
* above it, on a soft shadow of the kind's Fill.
|
|
104
|
+
*/
|
|
105
|
+
.crewlet-action-card__art {
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: flex-end;
|
|
108
|
+
justify-content: center;
|
|
109
|
+
margin-bottom: calc(var(--spacing-2) * -1);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.crewlet-action-card__art .crewlet-kind-illustration {
|
|
113
|
+
width: 100%;
|
|
114
|
+
height: auto;
|
|
115
|
+
filter: drop-shadow(0 4px 10px var(--crewlet-kind-fill));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* FORCED COLORS drops the ground and the hue; the edge is drawn in the
|
|
119
|
+
system's text colour, so the card keeps its outline. */
|
|
120
|
+
@media (forced-colors: active) {
|
|
121
|
+
.crewlet-action-card {
|
|
122
|
+
border-color: CanvasText;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@media (prefers-reduced-motion: reduce) {
|
|
127
|
+
.crewlet-action-card {
|
|
128
|
+
transition: none;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -132,15 +132,18 @@ export interface AppShellProps extends Omit<HTMLAttributes<HTMLDivElement>, 'tit
|
|
|
132
132
|
/** The scroll container itself, for a router restoring a position. */
|
|
133
133
|
mainRef?: Ref<HTMLElement> | undefined;
|
|
134
134
|
/**
|
|
135
|
-
* Gives the screen the whole height left under the bar, as a flex
|
|
136
|
-
* for a canvas or a split view that draws to the bottom of the
|
|
137
|
-
* instead of scrolling.
|
|
135
|
+
* Gives the screen the whole height and width left under the bar, as a flex
|
|
136
|
+
* column, for a canvas or a split view that draws to the bottom of the
|
|
137
|
+
* window instead of scrolling. The column keeps its pad, and its end pad
|
|
138
|
+
* counts the scrollbar's width, so its content stands where a scrolling
|
|
139
|
+
* screen's does; a `ListDetail` standing in it reaches past that pad, so
|
|
140
|
+
* its detail's scrollbar is on the sheet's edge.
|
|
138
141
|
*
|
|
139
142
|
* `flush` is the same column EDGE TO EDGE: the content column gives up its
|
|
140
|
-
* pad
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
143
|
+
* pad and its gap as well, for a screen that draws its own frame to the
|
|
144
|
+
* sheet's edges (a conversation with a list and a pane either side of it).
|
|
145
|
+
* The column is positioned, so a `LayerHost` the screen keeps inside it
|
|
146
|
+
* fills exactly the screen.
|
|
144
147
|
*/
|
|
145
148
|
fill?: boolean | 'flush' | undefined;
|
|
146
149
|
/**
|
|
@@ -162,10 +165,10 @@ export interface AppShellProps extends Omit<HTMLAttributes<HTMLDivElement>, 'tit
|
|
|
162
165
|
rail?: AppShellRailShape | undefined;
|
|
163
166
|
/**
|
|
164
167
|
* Called with the other shape when the reader presses the fold control.
|
|
165
|
-
* Given, the shell draws THE fold control (never in the drawer): a
|
|
166
|
-
* the
|
|
167
|
-
* while it is compact. Keeping the choice, and binding a
|
|
168
|
-
* application's.
|
|
168
|
+
* Given, the shell draws THE fold control (never in the drawer): a chevron
|
|
169
|
+
* on the head's row, before the brand's mark, pointing left while the rail
|
|
170
|
+
* is full and right while it is compact. Keeping the choice, and binding a
|
|
171
|
+
* key to it, are the application's.
|
|
169
172
|
*/
|
|
170
173
|
onRailChange?: ((next: AppShellRailShape) => void) | undefined;
|
|
171
174
|
/**
|
package/dist/AppShell/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-
|
|
1
|
+
export { APP_SHELL_ASIDE_WIDTH, AccountRow, AppShell, AppShellRail, AppShellRailRow, AppShellRailStatus, AppShellToggle, AppShellTopbar, readStoredWidth, useAppShell, useScreenBelow, useScreenWidth, useStoredWidth } from '../chunk-ORONAXSF.js';
|
|
2
2
|
import '../chunk-PCAT2EFB.js';
|
|
3
3
|
import '../chunk-JLOESTT2.js';
|
|
4
4
|
import '../chunk-YJQXESOJ.js';
|
|
@@ -26,6 +26,11 @@
|
|
|
26
26
|
.crewlet-app-shell {
|
|
27
27
|
--crewlet-app-shell-rail: var(--size-shell-rail);
|
|
28
28
|
--crewlet-app-shell-topbar: var(--size-shell-topbar);
|
|
29
|
+
/* THE SHEET'S SIDE INSET, ONE LENGTH: the bar's, the content column's, and
|
|
30
|
+
the inset a box that reaches past the column to the sheet's edge keeps
|
|
31
|
+
inside itself (a `ListDetail` on a fill screen), one step narrower on a
|
|
32
|
+
narrow window. */
|
|
33
|
+
--crewlet-app-shell-inset: var(--spacing-5);
|
|
29
34
|
/* What stands on the frame to the sheet's left: the rail's column, or
|
|
30
35
|
nothing where there is no rail or the rail is a drawer. */
|
|
31
36
|
--crewlet-app-shell-beside: var(--crewlet-app-shell-rail);
|
|
@@ -628,7 +633,8 @@
|
|
|
628
633
|
gap: var(--spacing-3);
|
|
629
634
|
flex: none;
|
|
630
635
|
height: var(--crewlet-app-shell-topbar);
|
|
631
|
-
padding: 0 calc(var(--
|
|
636
|
+
padding: 0 calc(var(--crewlet-app-shell-inset) + var(--crewlet-app-shell-gutter, 0px)) 0
|
|
637
|
+
var(--crewlet-app-shell-inset);
|
|
632
638
|
border-bottom: 1px solid var(--color-border-default);
|
|
633
639
|
background: var(--color-surface-background);
|
|
634
640
|
}
|
|
@@ -718,46 +724,76 @@
|
|
|
718
724
|
gap: var(--spacing-5);
|
|
719
725
|
max-width: var(--size-content-max);
|
|
720
726
|
margin: 0 auto;
|
|
721
|
-
padding: var(--
|
|
727
|
+
padding: var(--crewlet-app-shell-inset);
|
|
722
728
|
padding-bottom: var(--crewlet-app-shell-content-end);
|
|
723
729
|
min-width: 0;
|
|
724
730
|
}
|
|
725
731
|
|
|
726
|
-
/*
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
732
|
+
/*
|
|
733
|
+
* A screen that draws to the bottom of the window: the scroller stops
|
|
734
|
+
* scrolling and the content column takes the height that is left, and the
|
|
735
|
+
* whole width, since a screen that fills the window is a frame for panes
|
|
736
|
+
* rather than a page of prose (prose inside it keeps its own measure).
|
|
737
|
+
*
|
|
738
|
+
* THE SCROLLER RESERVES NO GUTTER; THE COLUMN PADS BY IT INSTEAD. Nothing
|
|
739
|
+
* scrolls here, so the strip a scrolling screen keeps for its scrollbar is
|
|
740
|
+
* only there to hold the content where the bar's controls expect it (the
|
|
741
|
+
* bar's end inset counts the gutter). A reserved strip did that, and also
|
|
742
|
+
* stood between the sheet's edge and every pane that scrolls on its own: a
|
|
743
|
+
* list's detail drew its scrollbar 31px inside the sheet, beside an empty
|
|
744
|
+
* strip, and nothing in the screen could paint over a reserved gutter. The
|
|
745
|
+
* same length as padding holds the content exactly where it stood, and a box
|
|
746
|
+
* standing in the column can reach past padding: the column publishes it as
|
|
747
|
+
* `--crewlet-app-shell-bleed-end`, and a `ListDetail` takes it back so its
|
|
748
|
+
* scrollbar is the sheet's last pixel. The scrollbar's width is read off the
|
|
749
|
+
* shell's gauge here (AppShell.tsx), so the bar keeps its place between a
|
|
750
|
+
* fill screen and a scrolling one.
|
|
751
|
+
*/
|
|
736
752
|
.crewlet-app-shell--fill .crewlet-app-shell__main {
|
|
737
753
|
overflow: hidden;
|
|
754
|
+
scrollbar-gutter: auto;
|
|
738
755
|
}
|
|
739
756
|
|
|
740
757
|
.crewlet-app-shell--fill .crewlet-app-shell__content {
|
|
741
758
|
--crewlet-app-shell-content-end: var(--spacing-5);
|
|
759
|
+
--crewlet-app-shell-bleed-end: calc(var(--crewlet-app-shell-inset) + var(--crewlet-app-shell-gutter, 0px));
|
|
742
760
|
|
|
743
761
|
height: 100%;
|
|
762
|
+
max-width: none;
|
|
763
|
+
padding-right: var(--crewlet-app-shell-bleed-end);
|
|
744
764
|
}
|
|
745
765
|
|
|
746
766
|
/*
|
|
747
|
-
*
|
|
748
|
-
*
|
|
749
|
-
*
|
|
750
|
-
*
|
|
751
|
-
*
|
|
767
|
+
* THE GAUGE: an empty scroller, never seen, that always draws its scrollbar,
|
|
768
|
+
* so the shell can read the scrollbar's width on a fill screen, where the
|
|
769
|
+
* screen's own scroller reserves none. It is a row of no height in the
|
|
770
|
+
* sheet's column, clipped, so it takes no room and moves nothing; the ruler
|
|
771
|
+
* inside it has a height of its own, because a scroller of no height draws
|
|
772
|
+
* no scrollbar in Firefox and measured 0 there.
|
|
752
773
|
*/
|
|
753
|
-
.crewlet-app-
|
|
754
|
-
|
|
774
|
+
.crewlet-app-shell__gauge {
|
|
775
|
+
flex: none;
|
|
776
|
+
height: 0;
|
|
777
|
+
overflow: hidden;
|
|
778
|
+
visibility: hidden;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
.crewlet-app-shell__gauge-ruler {
|
|
782
|
+
height: var(--size-target-min);
|
|
783
|
+
overflow-y: scroll;
|
|
755
784
|
}
|
|
756
785
|
|
|
786
|
+
/*
|
|
787
|
+
* A FLUSH SCREEN draws its own frame to the sheet's edges: the column gives up
|
|
788
|
+
* its pad and its gap as well, so there is nothing for a box in it to reach
|
|
789
|
+
* past. The column is the containing block for a `LayerHost` the screen
|
|
790
|
+
* keeps, so its layers fill the screen rather than the window.
|
|
791
|
+
*/
|
|
757
792
|
.crewlet-app-shell--fill-flush .crewlet-app-shell__content {
|
|
793
|
+
--crewlet-app-shell-bleed-end: 0px;
|
|
794
|
+
|
|
758
795
|
position: relative;
|
|
759
796
|
gap: 0;
|
|
760
|
-
max-width: none;
|
|
761
797
|
padding: 0;
|
|
762
798
|
}
|
|
763
799
|
|
|
@@ -922,22 +958,26 @@
|
|
|
922
958
|
}
|
|
923
959
|
|
|
924
960
|
/*
|
|
925
|
-
* THE FOLD CONTROL stands
|
|
926
|
-
* it never moves under the pointer that pressed it:
|
|
927
|
-
*
|
|
928
|
-
*
|
|
929
|
-
*
|
|
930
|
-
*
|
|
961
|
+
* THE FOLD CONTROL stands on the head's row, before the brand's mark, in both
|
|
962
|
+
* shapes, so it never moves under the pointer that pressed it: chevrons
|
|
963
|
+
* pointing left to fold the rail and right to unfold it.
|
|
964
|
+
*
|
|
965
|
+
* THE CONTROL AND THE MARK ARE ONE PAIR: the control at the target floor
|
|
966
|
+
* (`--size-target-min`, at every density), a step (`--spacing-1`), then the
|
|
967
|
+
* mark, which is a target's size too, the pair centred in the compact column
|
|
968
|
+
* so the 76px column holds both (12 + 24 + 4 + 24 + 12). The control is
|
|
969
|
+
* centred on the bar's line as the mark is: the inset, then half of what the
|
|
970
|
+
* bar leaves round it. The mark's inset below is the same arithmetic from the
|
|
971
|
+
* other side.
|
|
931
972
|
*
|
|
932
973
|
* Quiet until the rail is pointed at: the tertiary ink, which holds 3:1 on
|
|
933
974
|
* the frame, then the secondary, and the ghost's own primary under the
|
|
934
|
-
* pointer. Its ring is drawn inside its own box,
|
|
935
|
-
* stands in is the window's, and a ring outside it would be cut there.
|
|
975
|
+
* pointer. Its ring is drawn inside its own box, clear of the mark beside it.
|
|
936
976
|
*/
|
|
937
977
|
.crewlet-app-shell__fold {
|
|
938
978
|
position: absolute;
|
|
939
|
-
top:
|
|
940
|
-
left:
|
|
979
|
+
top: calc(var(--size-shell-inset) + (var(--crewlet-app-shell-topbar) - var(--size-target-min)) / 2);
|
|
980
|
+
left: calc((var(--size-shell-rail-compact) - 2 * var(--size-target-min) - var(--spacing-1)) / 2);
|
|
941
981
|
z-index: 1;
|
|
942
982
|
display: inline-flex;
|
|
943
983
|
}
|
|
@@ -957,13 +997,20 @@
|
|
|
957
997
|
}
|
|
958
998
|
|
|
959
999
|
/*
|
|
960
|
-
* THE MARK STANDS WHERE THE COMPACT RAIL'S DOES, in both shapes
|
|
961
|
-
*
|
|
962
|
-
*
|
|
1000
|
+
* THE MARK STANDS WHERE THE COMPACT RAIL'S DOES, in both shapes. With no fold
|
|
1001
|
+
* control it is centred over the compact column; beside the fold control it
|
|
1002
|
+
* is the second of the pair (above), a step after the control, which is half
|
|
1003
|
+
* the column and half the step in. Full, the name follows it; compact, the
|
|
1004
|
+
* name is not drawn (the link keeps it as its name and title), and the
|
|
1005
|
+
* lockup's end inset is given up, so the mark is all the column holds.
|
|
963
1006
|
*/
|
|
964
|
-
.crewlet-app-shell--foldable .crewlet-app-shell__rail-head > .crewlet-brand,
|
|
965
1007
|
.crewlet-app-shell[data-rail='compact'] .crewlet-app-shell__rail-head > .crewlet-brand {
|
|
966
1008
|
padding-left: calc((var(--size-shell-rail-compact) - var(--crewlet-brand-mark)) / 2);
|
|
1009
|
+
padding-right: 0;
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
.crewlet-app-shell--foldable[data-rail] .crewlet-app-shell__rail-head > .crewlet-brand {
|
|
1013
|
+
padding-left: calc((var(--size-shell-rail-compact) + var(--spacing-1)) / 2);
|
|
967
1014
|
}
|
|
968
1015
|
|
|
969
1016
|
.crewlet-app-shell[data-rail='compact'] .crewlet-brand__name,
|
|
@@ -1087,6 +1134,9 @@
|
|
|
1087
1134
|
@media (width < 1024px) {
|
|
1088
1135
|
.crewlet-app-shell {
|
|
1089
1136
|
--crewlet-app-shell-beside: 0px;
|
|
1137
|
+
/* 16px: the content's 12px stood every page's first line 4px left of
|
|
1138
|
+
the bar's title and the controls over it. */
|
|
1139
|
+
--crewlet-app-shell-inset: var(--spacing-4);
|
|
1090
1140
|
grid-template-columns: minmax(0, 1fr);
|
|
1091
1141
|
}
|
|
1092
1142
|
|
|
@@ -1169,18 +1219,8 @@
|
|
|
1169
1219
|
display: inline-flex;
|
|
1170
1220
|
}
|
|
1171
1221
|
|
|
1172
|
-
/* THE TOP BAR'S GUTTER, 16px: the content's 12px stood every page's first
|
|
1173
|
-
line 4px left of the title and the controls over it. The bar and the
|
|
1174
|
-
content take it together. */
|
|
1175
|
-
.crewlet-app-shell__topbar {
|
|
1176
|
-
padding: 0 calc(var(--spacing-4) + var(--crewlet-app-shell-gutter, 0px)) 0 var(--spacing-4);
|
|
1177
|
-
}
|
|
1178
|
-
|
|
1179
1222
|
.crewlet-app-shell__content {
|
|
1180
1223
|
--crewlet-app-shell-content-end: var(--spacing-9);
|
|
1181
|
-
|
|
1182
|
-
padding: var(--spacing-4) var(--spacing-4);
|
|
1183
|
-
padding-bottom: var(--crewlet-app-shell-content-end);
|
|
1184
1224
|
}
|
|
1185
1225
|
}
|
|
1186
1226
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-
|
|
1
|
+
export { ARTIFACT_BAR_LABELS, ArtifactBar, ArtifactVersionChip } from '../chunk-HKUZ2GYX.js';
|
|
2
2
|
import '../chunk-36WK24AI.js';
|
|
3
3
|
import '../chunk-AZYE7NR4.js';
|
|
4
4
|
import '../chunk-MVKUE4FI.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-
|
|
1
|
+
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-C4JTX25K.js';
|
|
2
2
|
import '../chunk-I4IUX3JF.js';
|
|
3
3
|
import '../chunk-HF5L56YQ.js';
|
|
4
4
|
import '../chunk-EJNJMHQG.js';
|
|
@@ -7,7 +7,7 @@ import '../chunk-U2IQNDDR.js';
|
|
|
7
7
|
import '../chunk-AV2DXAEL.js';
|
|
8
8
|
import '../chunk-IRONPJB4.js';
|
|
9
9
|
import '../chunk-XZY6S3UC.js';
|
|
10
|
-
import '../chunk-
|
|
10
|
+
import '../chunk-J5T5TDM2.js';
|
|
11
11
|
import '../chunk-YQ7Q52XU.js';
|
|
12
12
|
import '../chunk-DOY3KC6I.js';
|
|
13
13
|
export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../chunk-RSKW25Y5.js';
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* its own, imported by each surface that tints, because the glyph's module
|
|
10
10
|
* carries no stylesheet (a frame that draws one glyph takes nothing else).
|
|
11
11
|
*/
|
|
12
|
-
.crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); --crewlet-kind-ground: var(--color-artifact-kind-doc-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-doc-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-doc-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-doc-glow); }
|
|
13
|
-
.crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); --crewlet-kind-ground: var(--color-artifact-kind-slides-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-slides-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-slides-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-slides-glow); }
|
|
14
|
-
.crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); --crewlet-kind-ground: var(--color-artifact-kind-design-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-design-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-design-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-design-glow); }
|
|
15
|
-
.crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); --crewlet-kind-ground: var(--color-artifact-kind-dashboard-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-dashboard-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-dashboard-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-dashboard-glow); }
|
|
16
|
-
.crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); --crewlet-kind-ground: var(--color-artifact-kind-html-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-html-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-html-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-html-glow); }
|
|
17
|
-
.crewlet-kind--brand { --crewlet-kind-hue: var(--color-artifact-kind-brand); --crewlet-kind-fill: var(--color-artifact-kind-brand-fill); --crewlet-kind-line: var(--color-artifact-kind-brand-line); --crewlet-kind-ink: var(--color-artifact-kind-brand-ink); --crewlet-kind-ground: var(--color-artifact-kind-brand-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-brand-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-brand-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-brand-glow); }
|
|
18
|
-
.crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); --crewlet-kind-ground: var(--color-artifact-kind-sheet-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-sheet-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-sheet-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-sheet-glow); }
|
|
12
|
+
.crewlet-kind--doc { --crewlet-kind-hue: var(--color-artifact-kind-doc); --crewlet-kind-fill: var(--color-artifact-kind-doc-fill); --crewlet-kind-line: var(--color-artifact-kind-doc-line); --crewlet-kind-ink: var(--color-artifact-kind-doc-ink); --crewlet-kind-ground: var(--color-artifact-kind-doc-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-doc-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-doc-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-doc-glow); --crewlet-kind-edge: var(--color-artifact-kind-doc-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-doc-edge-strong); }
|
|
13
|
+
.crewlet-kind--slides { --crewlet-kind-hue: var(--color-artifact-kind-slides); --crewlet-kind-fill: var(--color-artifact-kind-slides-fill); --crewlet-kind-line: var(--color-artifact-kind-slides-line); --crewlet-kind-ink: var(--color-artifact-kind-slides-ink); --crewlet-kind-ground: var(--color-artifact-kind-slides-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-slides-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-slides-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-slides-glow); --crewlet-kind-edge: var(--color-artifact-kind-slides-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-slides-edge-strong); }
|
|
14
|
+
.crewlet-kind--design { --crewlet-kind-hue: var(--color-artifact-kind-design); --crewlet-kind-fill: var(--color-artifact-kind-design-fill); --crewlet-kind-line: var(--color-artifact-kind-design-line); --crewlet-kind-ink: var(--color-artifact-kind-design-ink); --crewlet-kind-ground: var(--color-artifact-kind-design-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-design-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-design-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-design-glow); --crewlet-kind-edge: var(--color-artifact-kind-design-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-design-edge-strong); }
|
|
15
|
+
.crewlet-kind--dashboard { --crewlet-kind-hue: var(--color-artifact-kind-dashboard); --crewlet-kind-fill: var(--color-artifact-kind-dashboard-fill); --crewlet-kind-line: var(--color-artifact-kind-dashboard-line); --crewlet-kind-ink: var(--color-artifact-kind-dashboard-ink); --crewlet-kind-ground: var(--color-artifact-kind-dashboard-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-dashboard-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-dashboard-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-dashboard-glow); --crewlet-kind-edge: var(--color-artifact-kind-dashboard-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-dashboard-edge-strong); }
|
|
16
|
+
.crewlet-kind--html { --crewlet-kind-hue: var(--color-artifact-kind-html); --crewlet-kind-fill: var(--color-artifact-kind-html-fill); --crewlet-kind-line: var(--color-artifact-kind-html-line); --crewlet-kind-ink: var(--color-artifact-kind-html-ink); --crewlet-kind-ground: var(--color-artifact-kind-html-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-html-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-html-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-html-glow); --crewlet-kind-edge: var(--color-artifact-kind-html-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-html-edge-strong); }
|
|
17
|
+
.crewlet-kind--brand { --crewlet-kind-hue: var(--color-artifact-kind-brand); --crewlet-kind-fill: var(--color-artifact-kind-brand-fill); --crewlet-kind-line: var(--color-artifact-kind-brand-line); --crewlet-kind-ink: var(--color-artifact-kind-brand-ink); --crewlet-kind-ground: var(--color-artifact-kind-brand-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-brand-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-brand-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-brand-glow); --crewlet-kind-edge: var(--color-artifact-kind-brand-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-brand-edge-strong); }
|
|
18
|
+
.crewlet-kind--sheet { --crewlet-kind-hue: var(--color-artifact-kind-sheet); --crewlet-kind-fill: var(--color-artifact-kind-sheet-fill); --crewlet-kind-line: var(--color-artifact-kind-sheet-line); --crewlet-kind-ink: var(--color-artifact-kind-sheet-ink); --crewlet-kind-ground: var(--color-artifact-kind-sheet-ground); --crewlet-kind-ground-strong: var(--color-artifact-kind-sheet-ground-strong); --crewlet-kind-ground-end: var(--color-artifact-kind-sheet-ground-end); --crewlet-kind-glow: var(--color-artifact-kind-sheet-glow); --crewlet-kind-edge: var(--color-artifact-kind-sheet-edge); --crewlet-kind-edge-strong: var(--color-artifact-kind-sheet-edge-strong); }
|
package/dist/BriefCard/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_FOLLOW_UPS, BRIEF_CARD_MAX_NEEDS, BRIEF_CARD_MAX_POINTS, BriefCard } from '../chunk-
|
|
1
|
+
export { BRIEF_CARD_LABELS, BRIEF_CARD_MAX_FOLLOW_UPS, BRIEF_CARD_MAX_NEEDS, BRIEF_CARD_MAX_POINTS, BriefCard } from '../chunk-XYSSFI5C.js';
|
|
2
2
|
import '../chunk-Y7PVLEZJ.js';
|
|
3
|
+
import '../chunk-6C7GQOBV.js';
|
|
3
4
|
import '../chunk-FLW5U7YS.js';
|
|
4
5
|
import '../chunk-LBGKLYBY.js';
|
|
5
6
|
import '../chunk-U2IQNDDR.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
2
|
import { type HeadingLevel } from '../utils/headingLevel.js';
|
|
3
|
+
import type { Tone } from '../utils/tone.js';
|
|
3
4
|
export type CatalogTileElement = 'article' | 'li' | 'div';
|
|
4
5
|
/**
|
|
5
6
|
* How much room a tile takes. `comfortable` (the default) is the catalogue's
|
|
@@ -10,6 +11,23 @@ export type CatalogTileElement = 'article' | 'li' | 'div';
|
|
|
10
11
|
* already in use rather than offers a choice.
|
|
11
12
|
*/
|
|
12
13
|
export type CatalogTileDensity = 'comfortable' | 'compact';
|
|
14
|
+
/**
|
|
15
|
+
* An entry's state, as data: the tile draws it, the same way on every tile.
|
|
16
|
+
*
|
|
17
|
+
* ONE PRESENTATION, NOT A SLOT. Taken as any node, a service's In use came as
|
|
18
|
+
* a soft pill and an app's Connected as a dot and a word, so one row of tiles
|
|
19
|
+
* drew its states two ways and at two heights. A tone and a word cannot be
|
|
20
|
+
* drawn two ways.
|
|
21
|
+
*/
|
|
22
|
+
export interface CatalogTileStatus {
|
|
23
|
+
/**
|
|
24
|
+
* What the state is: `success` for in use or connected, `warning` for
|
|
25
|
+
* something owed, `danger` for broken, `neutral` for coming soon.
|
|
26
|
+
*/
|
|
27
|
+
tone: Tone;
|
|
28
|
+
/** The state in a word or two: In use, Connected, Needs attention. */
|
|
29
|
+
label: string;
|
|
30
|
+
}
|
|
13
31
|
export interface CatalogTileProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
14
32
|
/** The element the tile is: an `li` in a `TileGrid as="ul"`. */
|
|
15
33
|
as?: CatalogTileElement | undefined;
|
|
@@ -24,12 +42,12 @@ export interface CatalogTileProps extends Omit<HTMLAttributes<HTMLElement>, 'tit
|
|
|
24
42
|
/** Overrides the level the name is rendered at. */
|
|
25
43
|
headingLevel?: HeadingLevel | undefined;
|
|
26
44
|
/**
|
|
27
|
-
* The entry's state, as
|
|
28
|
-
* Connected, Needs attention, Coming soon.
|
|
29
|
-
* (available, not set up) carries none
|
|
30
|
-
*
|
|
45
|
+
* The entry's state, drawn as its tone's dot and its word, ONLY when the
|
|
46
|
+
* state is worth reading: In use, Connected, Needs attention, Coming soon.
|
|
47
|
+
* An entry in its resting state (available, not set up) carries none; a
|
|
48
|
+
* state under every name is a column a reader learns to skip.
|
|
31
49
|
*/
|
|
32
|
-
status?:
|
|
50
|
+
status?: CatalogTileStatus | undefined;
|
|
33
51
|
/** One sentence: what the entry is for, or what is owed when something is. */
|
|
34
52
|
description?: ReactNode;
|
|
35
53
|
/** A quiet fact at the foot (`2 agents · 14 deliveries`). */
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import './CatalogTile.css';
|
|
2
2
|
export { CatalogTile } from './CatalogTile.js';
|
|
3
|
-
export type { CatalogTileDensity, CatalogTileElement, CatalogTileProps } from './CatalogTile.js';
|
|
3
|
+
export type { CatalogTileDensity, CatalogTileElement, CatalogTileProps, CatalogTileStatus } from './CatalogTile.js';
|