@crewlethq/ui 0.43.0 → 0.45.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 +22 -2
- package/dist/AccessDeniedCard/index.js +2 -2
- package/dist/AgentHandoffPanel/index.js +2 -2
- package/dist/ArrangeFrame/index.js +2 -2
- package/dist/ArrangeList/index.js +1 -1
- package/dist/ArtifactCard/index.js +3 -3
- package/dist/AsideLayout/AsideLayout.d.ts +24 -0
- package/dist/AsideLayout/index.d.ts +3 -0
- package/dist/AsideLayout/index.js +2 -0
- package/dist/AsideLayout-TH5SQZNK.css +45 -0
- package/dist/AvatarPicker/index.js +3 -3
- package/dist/CatalogTile/CatalogTile.d.ts +12 -1
- package/dist/CatalogTile/index.d.ts +1 -1
- package/dist/CatalogTile/index.js +1 -1
- package/dist/{CatalogTile-XL4XLFUH.css → CatalogTile-VPSLCKJE.css} +55 -0
- package/dist/CharacterPicker/index.js +2 -2
- package/dist/DataGrid/index.js +2 -2
- package/dist/DataView/index.js +3 -3
- package/dist/DatasetSource/index.js +1 -1
- package/dist/DirectoryList/DirectoryList.d.ts +9 -4
- package/dist/DirectoryList/index.js +1 -1
- package/dist/{DirectoryList-EESYMH2U.css → DirectoryList-7OXXN47X.css} +30 -7
- package/dist/DocTabsEditor/index.js +1 -1
- package/dist/EmptyState/EmptyState.d.ts +9 -2
- package/dist/EmptyState/index.js +1 -1
- package/dist/{EmptyState-C6HRBGT7.css → EmptyState-7L4UAQBX.css} +34 -0
- package/dist/LinkInterstitial/index.js +2 -2
- package/dist/ListInput/index.js +2 -2
- package/dist/Section/Section.d.ts +6 -0
- package/dist/Section/index.js +1 -1
- package/dist/{Section-O5AHGSOG.css → Section-M7SG6NP2.css} +14 -0
- package/dist/SheetGrid/index.js +5 -5
- package/dist/SlideFilmstrip/index.js +1 -1
- package/dist/Statement/Statement.d.ts +45 -0
- package/dist/Statement/index.d.ts +3 -0
- package/dist/Statement/index.js +4 -0
- package/dist/Statement-M4QDXIMO.css +53 -0
- package/dist/Switcher/index.js +2 -2
- package/dist/TableCells/index.js +1 -1
- package/dist/TagsInput/index.js +2 -2
- package/dist/VersionCompare/index.js +2 -2
- package/dist/{chunk-XIDD7PJO.js → chunk-2MYSESZF.js} +1 -1
- package/dist/{chunk-SJ6DMG4R.js → chunk-4AA6WPQU.js} +1 -1
- package/dist/{chunk-PCT47E7O.js → chunk-5GNA4RKP.js} +36 -1
- package/dist/{chunk-3TFDQLW3.js → chunk-JQ7IFSF6.js} +1 -1
- package/dist/chunk-KY65C4XS.js +12 -0
- package/dist/chunk-MZJKPTA5.js +36 -0
- package/dist/{chunk-BO7Q6JP6.js → chunk-N3SHQ3VU.js} +1 -1
- package/dist/{chunk-RA2ULG6H.js → chunk-PPUR46MK.js} +10 -1
- package/dist/{chunk-PLLYOPS4.js → chunk-Q7HLZH32.js} +1 -1
- package/dist/{chunk-KV3ODJXH.js → chunk-QTMUKRTN.js} +1 -1
- package/dist/{chunk-IUQQGIHL.js → chunk-U44WGRFW.js} +1 -1
- package/dist/generated/index.d.ts +2 -0
- package/dist/generated/index.js +62 -60
- package/dist/index.js +62 -60
- package/dist/styles.css +241 -11
- package/package.json +3 -3
- package/dist/{chunk-VXCT6L3F.js → chunk-6IPEPSB5.js} +0 -0
- package/dist/{chunk-UAGDFEBG.js → chunk-KKUJSMLF.js} +1 -1
- package/dist/{chunk-524GGA67.js → chunk-NF6SWHQI.js} +1 -1
- package/dist/{chunk-Z5WMCBHR.js → chunk-NMYGJJJK.js} +1 -1
- package/dist/{chunk-U2XAJONO.js → chunk-OKE5YSLD.js} +1 -1
- package/dist/{chunk-OVHJTOKW.js → chunk-OWIGEE2Y.js} +2 -2
- package/dist/{chunk-VZICPYGR.js → chunk-SNQRGH4A.js} +1 -1
- package/dist/{chunk-IVAR7NRW.js → chunk-SXBJMBSV.js} +1 -1
- package/dist/{chunk-LKBZV5IT.js → chunk-VWYT3GVV.js} +1 -1
- package/dist/{chunk-NCM73C34.js → chunk-Y4GXCKOC.js} +2 -2
package/README.md
CHANGED
|
@@ -41,7 +41,7 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
|
|
|
41
41
|
| Area | Components |
|
|
42
42
|
| ---- | ---------- |
|
|
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
|
-
| 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` |
|
|
44
|
+
| Content and text | `Text` (the eight registers and `inherit`), `Prose`, `Statement`, `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
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`) |
|
|
@@ -50,7 +50,7 @@ import { Button } from '@crewlethq/ui/Button'; // 8 KB of CSS, not 182 KB
|
|
|
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`, `TileGrid`, `ListDetail`, `Tabs`, `Accordion`, `Disclosure`, `Outline` (with `useActiveHeading` and `scrollToHeading`), `TreeGrid` |
|
|
53
|
+
| Layout | `Container`, `Section`, `Card`, `TileGrid`, `ListDetail`, `AsideLayout`, `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`, `SectionFrame` (with `SectionFrame.Nav` and `SectionFrame.Body`), `LockedLabel`, `AppShell.Topbar`, `AppShell.AccountRow` and `useAppShell`, `AuthLayout`, `SidebarNav` and `NavItem`, `DirectoryList`, `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,26 @@ 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.45.0
|
|
208
|
+
|
|
209
|
+
The pieces of the engine's Company › Principles page: a company's mission, vision and policies beside the facts about it.
|
|
210
|
+
|
|
211
|
+
**`Statement` is new**: a label over the words a page exists to say (a mission, a vision, a goal), set a step over the body (`--font-size-lg`, the body's own step over it on a phone) at the reading measure, with the author's line breaks kept. A block such as a numbered list is drawn as given under the same label, so every statement on a page heads the same way. An unwritten one says so through `empty` (`title`, `description` and an optional `action`) as an inline empty state, never as grey text in the words' place. It is a region named by its label.
|
|
212
|
+
|
|
213
|
+
**`AsideLayout` is new**: a page's main column with an aside beside it from 56rem of the layout's own width (a container query, not the window's), the aside `--crewlet-aside-layout-aside` wide (18rem by default). Narrower, the aside follows the main column past one hairline. Each column is a stack one step apart, and the aside is a complementary landmark named by `asideLabel`.
|
|
214
|
+
|
|
215
|
+
**`EmptyState` takes `size="inline"`**: one left-aligned row on a dashed hairline, the sentence beside its one action and no glyph, for a part of a page that is empty while the rest of it is not.
|
|
216
|
+
|
|
217
|
+
## Changes in 0.44.0
|
|
218
|
+
|
|
219
|
+
The pieces of the engine's Company › Integrations home, a summary of what a company has in use beside the directory of everything it could.
|
|
220
|
+
|
|
221
|
+
**`DirectoryList` lines stand at the rail's row step**: each line is exactly `--size-nav-row` (30px) in the rail's compact type, its mark at the glyph step (16px, `md`), its `hint` inline after the label in the quiet ink, giving way before the label in a narrow column, and its state held inside the row, so no line stands taller than the rest. Groups stand one small step (`--spacing-3`) apart.
|
|
222
|
+
|
|
223
|
+
**`CatalogTile` takes `density="compact"`**, a summary's tile at about half the height: the mark, the name, its state, its fact (`meta`) and the one action on the header line, and the sentence on one line under it, cut to fit with the whole of it in its title. The default, `comfortable`, is unchanged.
|
|
224
|
+
|
|
225
|
+
**`Section` takes `spacing="tight"`**: one small step (`--spacing-2`) between a heading and what it introduces, titled or not. A heading may carry the kit's `Count` of what is under it (`title={<>In use <Count value={4} /></>}`).
|
|
226
|
+
|
|
207
227
|
## Changes in 0.43.0
|
|
208
228
|
|
|
209
229
|
The parts of the engine's Company › Integrations page, a directory of everything a company works in beside the detail of the one chosen.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ACCESS_DENIED_REASONS, AccessDeniedCard } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ACCESS_DENIED_REASONS, AccessDeniedCard } from '../chunk-QTMUKRTN.js';
|
|
2
|
+
import '../chunk-PPUR46MK.js';
|
|
3
3
|
import '../chunk-PQADV6P6.js';
|
|
4
4
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-
|
|
1
|
+
export { AGENT_HANDOFF_LABELS, AgentHandoffPanel } from '../chunk-N3SHQ3VU.js';
|
|
2
2
|
import '../chunk-AUQPBL4O.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-JQ7IFSF6.js';
|
|
4
4
|
import '../chunk-OGXHZHRX.js';
|
|
5
5
|
import '../chunk-7CXGSS7D.js';
|
|
6
6
|
import '../chunk-NBDN5JZV.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ArrangeFrame, useGridResize } from '../chunk-
|
|
2
|
-
import '../chunk-LACA4JGC.js';
|
|
1
|
+
export { ArrangeFrame, useGridResize } from '../chunk-VWYT3GVV.js';
|
|
3
2
|
import '../chunk-RSAQOKH3.js';
|
|
3
|
+
import '../chunk-LACA4JGC.js';
|
|
4
4
|
import '../chunk-BZFWDIV6.js';
|
|
5
5
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -4,8 +4,8 @@ import '../chunk-XJ2QEBMM.js';
|
|
|
4
4
|
import '../chunk-EY7LACIR.js';
|
|
5
5
|
import '../chunk-ZI5G5RS7.js';
|
|
6
6
|
import '../chunk-PQADV6P6.js';
|
|
7
|
+
import '../chunk-RSAQOKH3.js';
|
|
7
8
|
import '../chunk-LACA4JGC.js';
|
|
8
9
|
import '../chunk-NUZHC6MM.js';
|
|
9
|
-
import '../chunk-RSAQOKH3.js';
|
|
10
10
|
import '../chunk-BZFWDIV6.js';
|
|
11
11
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-
|
|
1
|
+
export { ArtifactCard, ArtifactCardSkeleton, ArtifactPreviewGlyph } from '../chunk-OKE5YSLD.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
|
+
import '../chunk-5AQBPHZD.js';
|
|
7
|
+
import '../chunk-PZKHBB7D.js';
|
|
6
8
|
import '../chunk-UBZDYOCA.js';
|
|
7
9
|
import '../chunk-INHXF2CL.js';
|
|
8
10
|
import '../chunk-AV2DXAEL.js';
|
|
9
|
-
import '../chunk-5AQBPHZD.js';
|
|
10
|
-
import '../chunk-PZKHBB7D.js';
|
|
11
11
|
import '../chunk-BGLKLXL3.js';
|
|
12
12
|
export { ARTIFACT_KINDS, ArtifactKindGlyph } from '../chunk-CE2THTQR.js';
|
|
13
13
|
import '../chunk-BHHIIK3M.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface AsideLayoutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
3
|
+
/** The page's main column: what the page is about. */
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
/** The column beside it: facts about the subject, how it is used, related places. */
|
|
6
|
+
aside: ReactNode;
|
|
7
|
+
/** What the aside is, for a screen reader's landmark: "About the company". */
|
|
8
|
+
asideLabel: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A page's main column with an aside beside it, each a stack of blocks one
|
|
12
|
+
* page step apart.
|
|
13
|
+
*
|
|
14
|
+
* THE COLUMNS FOLLOW THE ROOM THE PAGE HAS, NOT THE WINDOW. It is a container
|
|
15
|
+
* query on its own width, because a page beside a navigation rail is narrow
|
|
16
|
+
* on a wide screen too: from 56rem the aside stands beside the main column at
|
|
17
|
+
* `--crewlet-aside-layout-aside` (18rem by default), and below that it
|
|
18
|
+
* follows the main column under one hairline, so a phone reads the subject
|
|
19
|
+
* first and its facts after it.
|
|
20
|
+
*
|
|
21
|
+
* THE ASIDE IS A COMPLEMENTARY LANDMARK named by `asideLabel`, so a screen
|
|
22
|
+
* reader can skip to it or past it.
|
|
23
|
+
*/
|
|
24
|
+
export declare function AsideLayout({ children, aside, asideLabel, className, ...rest }: AsideLayoutProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* AsideLayout: a main column with an aside beside it from 56rem of its own
|
|
3
|
+
* width, and after it below that (AsideLayout.tsx).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
.crewlet-aside-layout {
|
|
7
|
+
container-type: inline-size;
|
|
8
|
+
min-width: 0;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.crewlet-aside-layout__columns {
|
|
12
|
+
display: grid;
|
|
13
|
+
grid-template-columns: minmax(0, 1fr);
|
|
14
|
+
align-items: start;
|
|
15
|
+
gap: var(--spacing-7);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* EACH COLUMN IS A STACK one step apart, so the blocks in it stand apart
|
|
19
|
+
evenly without each carrying a margin of its own. */
|
|
20
|
+
.crewlet-aside-layout__main,
|
|
21
|
+
.crewlet-aside-layout__aside {
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
gap: var(--spacing-6);
|
|
25
|
+
min-width: 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* FOLLOWING THE MAIN COLUMN, the aside is set off by one hairline, so its
|
|
29
|
+
facts read as about the page rather than as more of it. */
|
|
30
|
+
.crewlet-aside-layout__aside {
|
|
31
|
+
padding-top: var(--spacing-6);
|
|
32
|
+
border-top: 1px solid var(--color-border-default);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@container (min-width: 56rem) {
|
|
36
|
+
.crewlet-aside-layout__columns {
|
|
37
|
+
grid-template-columns: minmax(0, 1fr) var(--crewlet-aside-layout-aside, 18rem);
|
|
38
|
+
gap: var(--spacing-8);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.crewlet-aside-layout__aside {
|
|
42
|
+
padding-top: 0;
|
|
43
|
+
border-top: 0;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { AvatarPicker } from '../chunk-
|
|
1
|
+
export { AvatarPicker } from '../chunk-Q7HLZH32.js';
|
|
2
2
|
import '../chunk-QOP7QYUW.js';
|
|
3
3
|
import '../chunk-KHJIEPZV.js';
|
|
4
4
|
import '../chunk-AYKXMIOR.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-PZKHBB7D.js';
|
|
5
|
+
import '../chunk-SNQRGH4A.js';
|
|
7
6
|
import '../chunk-BF5WV7NM.js';
|
|
8
7
|
import '../chunk-KA75QPFM.js';
|
|
9
8
|
import '../chunk-WIATRXEJ.js';
|
|
10
9
|
import '../chunk-EGMQURBR.js';
|
|
10
|
+
import '../chunk-PZKHBB7D.js';
|
|
11
11
|
import '../chunk-BHHIIK3M.js';
|
|
12
12
|
import '../chunk-PCI7ZJ6Z.js';
|
|
13
13
|
import '../chunk-OMV5W53A.js';
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
2
|
import { type HeadingLevel } from '../utils/headingLevel.js';
|
|
3
3
|
export type CatalogTileElement = 'article' | 'li' | 'div';
|
|
4
|
+
/**
|
|
5
|
+
* How much room a tile takes. `comfortable` (the default) is the catalogue's
|
|
6
|
+
* tile: a mark well, a name with its state under it, a reserved two-line
|
|
7
|
+
* sentence and a ruled foot. `compact` is a summary's: one header line (the
|
|
8
|
+
* mark, the name, its state and the fact, then the action at its end) over
|
|
9
|
+
* one line of sentence, about half the height, for a page that lists what is
|
|
10
|
+
* already in use rather than offers a choice.
|
|
11
|
+
*/
|
|
12
|
+
export type CatalogTileDensity = 'comfortable' | 'compact';
|
|
4
13
|
export interface CatalogTileProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
5
14
|
/** The element the tile is: an `li` in a `TileGrid as="ul"`. */
|
|
6
15
|
as?: CatalogTileElement | undefined;
|
|
@@ -33,6 +42,8 @@ export interface CatalogTileProps extends Omit<HTMLAttributes<HTMLElement>, 'tit
|
|
|
33
42
|
* strength, because a tile not yet set up is the one a reader came to set up.
|
|
34
43
|
*/
|
|
35
44
|
quiet?: boolean | undefined;
|
|
45
|
+
/** How much room the tile takes; see [CatalogTileDensity]. */
|
|
46
|
+
density?: CatalogTileDensity | undefined;
|
|
36
47
|
}
|
|
37
48
|
/**
|
|
38
49
|
* One entry in a catalogue: its mark, its name, its state when it has one, a
|
|
@@ -44,4 +55,4 @@ export interface CatalogTileProps extends Omit<HTMLAttributes<HTMLElement>, 'tit
|
|
|
44
55
|
* action draws no foot at all, since a rule with nothing under it reads as a
|
|
45
56
|
* missing control.
|
|
46
57
|
*/
|
|
47
|
-
export declare function CatalogTile({ as: Element, mark, title, headingLevel, status, description, meta, action, quiet, className, ...rest }: CatalogTileProps): import("react").JSX.Element;
|
|
58
|
+
export declare function CatalogTile({ as: Element, mark, title, headingLevel, status, description, meta, action, quiet, density, className, ...rest }: CatalogTileProps): import("react").JSX.Element;
|
|
@@ -133,3 +133,58 @@
|
|
|
133
133
|
min-height: 0;
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
+
|
|
137
|
+
/*
|
|
138
|
+
* COMPACT: a summary's tile, about half the comfortable one's height. One
|
|
139
|
+
* header line holds the mark (the row step's well, 28px), the name, its state
|
|
140
|
+
* and its fact, and the action at the end; the sentence is one line under it,
|
|
141
|
+
* aligned to the name, cut to fit. No reserve and no foot, because a summary
|
|
142
|
+
* has no row of feet to line up.
|
|
143
|
+
*/
|
|
144
|
+
.crewlet-catalog-tile--compact {
|
|
145
|
+
gap: var(--spacing-1);
|
|
146
|
+
padding: var(--spacing-3);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.crewlet-catalog-tile--compact .crewlet-catalog-tile__head {
|
|
150
|
+
align-items: center;
|
|
151
|
+
gap: var(--spacing-2);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.crewlet-catalog-tile--compact .crewlet-catalog-tile__mark {
|
|
155
|
+
width: var(--size-row-sm);
|
|
156
|
+
height: var(--size-row-sm);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.crewlet-catalog-tile--compact .crewlet-catalog-tile__title {
|
|
160
|
+
flex: 1 1 auto;
|
|
161
|
+
flex-direction: row;
|
|
162
|
+
align-items: center;
|
|
163
|
+
gap: var(--spacing-2);
|
|
164
|
+
padding-top: 0;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.crewlet-catalog-tile--compact .crewlet-catalog-tile__name {
|
|
168
|
+
flex: 0 1 auto;
|
|
169
|
+
min-width: 0;
|
|
170
|
+
overflow: hidden;
|
|
171
|
+
text-overflow: ellipsis;
|
|
172
|
+
white-space: nowrap;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.crewlet-catalog-tile--compact .crewlet-catalog-tile__status {
|
|
176
|
+
flex: none;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.crewlet-catalog-tile--compact .crewlet-catalog-tile__meta {
|
|
180
|
+
flex: 0 1 auto;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.crewlet-catalog-tile--compact .crewlet-catalog-tile__description {
|
|
184
|
+
flex: none;
|
|
185
|
+
min-height: 0;
|
|
186
|
+
padding-left: calc(var(--size-row-sm) + var(--spacing-2));
|
|
187
|
+
overflow: hidden;
|
|
188
|
+
text-overflow: ellipsis;
|
|
189
|
+
white-space: nowrap;
|
|
190
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '../chunk-3L5NHASN.js';
|
|
2
|
-
export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-
|
|
3
|
-
import '../chunk-PZKHBB7D.js';
|
|
2
|
+
export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-SNQRGH4A.js';
|
|
4
3
|
import '../chunk-EGMQURBR.js';
|
|
4
|
+
import '../chunk-PZKHBB7D.js';
|
|
5
5
|
import '../chunk-ODEQTPFM.js';
|
package/dist/DataGrid/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ChooserList, ColumnChooser, DataGrid, columnChoicesOf, fitGridColumns, parseGridSort } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ChooserList, ColumnChooser, DataGrid, columnChoicesOf, fitGridColumns, parseGridSort } from '../chunk-2MYSESZF.js';
|
|
2
|
+
import '../chunk-PPUR46MK.js';
|
|
3
3
|
import '../chunk-PQADV6P6.js';
|
|
4
4
|
import '../chunk-RTPQDNW3.js';
|
|
5
5
|
import '../chunk-OG6CL3EB.js';
|
package/dist/DataView/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
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-Y4GXCKOC.js';
|
|
2
2
|
import '../chunk-HOXGBLEY.js';
|
|
3
|
-
import '../chunk-GI3S6RMM.js';
|
|
4
3
|
import '../chunk-UFXLNC2N.js';
|
|
4
|
+
import '../chunk-GI3S6RMM.js';
|
|
5
5
|
import '../chunk-STJ7QBC3.js';
|
|
6
6
|
import '../chunk-DTIW4CHZ.js';
|
|
7
7
|
import '../chunk-FYINAYAJ.js';
|
|
8
8
|
import '../chunk-7KHM2FZH.js';
|
|
9
|
+
import '../chunk-NR4CPM4T.js';
|
|
9
10
|
import '../chunk-KHJIEPZV.js';
|
|
10
11
|
import '../chunk-GXQ3B46I.js';
|
|
11
|
-
import '../chunk-NR4CPM4T.js';
|
|
12
12
|
import '../chunk-EY7LACIR.js';
|
|
13
13
|
import '../chunk-3CZ7XAVY.js';
|
|
14
14
|
import '../chunk-EUCC37WY.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { DATASET_SOURCE_KINDS, DatasetSource, DatasetSourceList } from '../chunk-HQJ24WPM.js';
|
|
2
2
|
import '../chunk-KYIAFNU7.js';
|
|
3
|
+
import '../chunk-WIATRXEJ.js';
|
|
3
4
|
import '../chunk-3CZ7XAVY.js';
|
|
4
5
|
import '../chunk-EUCC37WY.js';
|
|
5
|
-
import '../chunk-WIATRXEJ.js';
|
|
6
6
|
import '../chunk-2YTOOH3A.js';
|
|
7
7
|
import '../chunk-BZFWDIV6.js';
|
|
8
8
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -5,10 +5,13 @@ export interface DirectoryItem {
|
|
|
5
5
|
key: string;
|
|
6
6
|
/** Where the line goes: the item's own page. */
|
|
7
7
|
href: string;
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* The item's mark: a vendor's, a product's, at the glyph step (16px, `md`).
|
|
10
|
+
* Decorative, since the label names it.
|
|
11
|
+
*/
|
|
9
12
|
mark?: ReactNode;
|
|
10
13
|
label: ReactNode;
|
|
11
|
-
/** A quieter
|
|
14
|
+
/** A quieter word after the label, on its line: the app a product belongs to. */
|
|
12
15
|
hint?: ReactNode;
|
|
13
16
|
/** The item's state where it has one: a status dot and word, or a pill. */
|
|
14
17
|
status?: ReactNode;
|
|
@@ -43,8 +46,10 @@ export interface DirectoryListProps {
|
|
|
43
46
|
* A NAVIGATION LANDMARK of lists under headings, so a screen reader can jump
|
|
44
47
|
* group to group and is told how many lines each holds. The chosen line is
|
|
45
48
|
* `aria-current="page"` and drawn on the selected ground. A line carries its
|
|
46
|
-
* mark, its label (and a quieter hint
|
|
47
|
-
* one; a line with no state says nothing rather than "none".
|
|
49
|
+
* mark, its label (and a quieter hint after it) and its state where it has
|
|
50
|
+
* one; a line with no state says nothing rather than "none". A LINE STANDS
|
|
51
|
+
* AT THE RAIL'S ROW STEP (30px), in the rail's compact type, because a
|
|
52
|
+
* directory is navigation beside the page as the rail is beside the app.
|
|
48
53
|
*
|
|
49
54
|
* IT FILLS THE HEIGHT IT IS GIVEN. The groups take the room and scroll on
|
|
50
55
|
* their own when they outgrow it, and the foot holds the bottom, one small
|
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
display: flex;
|
|
23
23
|
flex: 1 1 auto;
|
|
24
24
|
flex-direction: column;
|
|
25
|
-
|
|
25
|
+
/* One small step between groups, so a heading reads as the head of the lines
|
|
26
|
+
under it rather than a band between two runs of them. */
|
|
27
|
+
gap: var(--spacing-3);
|
|
26
28
|
min-height: 0;
|
|
27
29
|
overflow-y: auto;
|
|
28
30
|
}
|
|
@@ -53,16 +55,24 @@
|
|
|
53
55
|
list-style: none;
|
|
54
56
|
}
|
|
55
57
|
|
|
58
|
+
/*
|
|
59
|
+
* THE RAIL'S ROW STEP, 30px (--size-nav-row): a directory is navigation beside
|
|
60
|
+
* the page as the rail is beside the app, so its lines stand at the rail's
|
|
61
|
+
* height and in its compact type. Everything a line says fits that one line:
|
|
62
|
+
* a mark the size of the rail's glyph box, the hint inline after the label,
|
|
63
|
+
* and the state compact at the end.
|
|
64
|
+
*/
|
|
56
65
|
.crewlet-directory__item {
|
|
57
66
|
display: grid;
|
|
58
67
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
59
68
|
align-items: center;
|
|
60
69
|
gap: var(--spacing-2);
|
|
61
|
-
|
|
62
|
-
padding:
|
|
70
|
+
height: var(--size-nav-row);
|
|
71
|
+
padding: 0 var(--spacing-2);
|
|
63
72
|
border-radius: var(--radius-md);
|
|
64
73
|
color: var(--color-text-primary);
|
|
65
|
-
font-size: var(--font-size-
|
|
74
|
+
font-size: var(--font-size-compact);
|
|
75
|
+
line-height: var(--font-line-height-tight);
|
|
66
76
|
text-decoration: none;
|
|
67
77
|
}
|
|
68
78
|
|
|
@@ -80,22 +90,28 @@
|
|
|
80
90
|
outline-offset: 1px;
|
|
81
91
|
}
|
|
82
92
|
|
|
93
|
+
/* The box takes its mark, as the rail's glyph box does: a mark at the glyph's
|
|
94
|
+
own step (16px, `md`) sits in the row with room to spare. */
|
|
83
95
|
.crewlet-directory__mark {
|
|
84
96
|
display: inline-flex;
|
|
85
97
|
flex: none;
|
|
86
98
|
align-items: center;
|
|
87
99
|
justify-content: center;
|
|
88
|
-
width: var(--size-row-sm);
|
|
89
|
-
height: var(--size-row-sm);
|
|
90
100
|
}
|
|
91
101
|
|
|
102
|
+
/* ONE LINE: the label, then the hint after it in the quiet ink. The hint gives
|
|
103
|
+
way first, so a narrow column cuts "Atlassian" before it cuts "Confluence". */
|
|
92
104
|
.crewlet-directory__text {
|
|
93
105
|
display: flex;
|
|
94
|
-
|
|
106
|
+
align-items: baseline;
|
|
107
|
+
gap: var(--spacing-1);
|
|
95
108
|
min-width: 0;
|
|
96
109
|
}
|
|
97
110
|
|
|
98
111
|
.crewlet-directory__label {
|
|
112
|
+
flex: 0 0 auto;
|
|
113
|
+
max-width: 100%;
|
|
114
|
+
min-width: 0;
|
|
99
115
|
overflow: hidden;
|
|
100
116
|
font-weight: var(--font-weight-medium);
|
|
101
117
|
text-overflow: ellipsis;
|
|
@@ -103,6 +119,8 @@
|
|
|
103
119
|
}
|
|
104
120
|
|
|
105
121
|
.crewlet-directory__hint {
|
|
122
|
+
flex: 0 1 auto;
|
|
123
|
+
min-width: 0;
|
|
106
124
|
overflow: hidden;
|
|
107
125
|
font-size: var(--font-size-xs);
|
|
108
126
|
color: var(--color-text-tertiary);
|
|
@@ -110,10 +128,15 @@
|
|
|
110
128
|
white-space: nowrap;
|
|
111
129
|
}
|
|
112
130
|
|
|
131
|
+
/* THE STATE IS COMPACT: a pill or a dot and its word in the small step, held
|
|
132
|
+
inside the row so a state never makes one line taller than the rest. */
|
|
113
133
|
.crewlet-directory__status {
|
|
114
134
|
display: inline-flex;
|
|
115
135
|
flex: none;
|
|
136
|
+
align-items: center;
|
|
137
|
+
max-height: calc(var(--size-nav-row) - var(--spacing-2));
|
|
116
138
|
font-size: var(--font-size-xs);
|
|
139
|
+
line-height: 1;
|
|
117
140
|
color: var(--color-text-secondary);
|
|
118
141
|
}
|
|
119
142
|
|
|
@@ -2,12 +2,12 @@ export { DOC_TABS_EDITOR_LABELS, DocTabsEditor } from '../chunk-W53CWWX3.js';
|
|
|
2
2
|
import '../chunk-XJ2QEBMM.js';
|
|
3
3
|
import '../chunk-ZI5G5RS7.js';
|
|
4
4
|
import '../chunk-PQADV6P6.js';
|
|
5
|
+
import '../chunk-RSAQOKH3.js';
|
|
5
6
|
import '../chunk-PCI7ZJ6Z.js';
|
|
6
7
|
import '../chunk-OMV5W53A.js';
|
|
7
8
|
import '../chunk-H5XTJ7GJ.js';
|
|
8
9
|
import '../chunk-OG6CL3EB.js';
|
|
9
10
|
import '../chunk-LACA4JGC.js';
|
|
10
11
|
import '../chunk-NUZHC6MM.js';
|
|
11
|
-
import '../chunk-RSAQOKH3.js';
|
|
12
12
|
import '../chunk-BZFWDIV6.js';
|
|
13
13
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
2
|
import { type HeadingLevel } from '../utils/headingLevel.js';
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* `default` is a screen's, `compact` a panel's, both centred under a glyph.
|
|
5
|
+
* `inline` is a field's or a section's: one left-aligned row on a dashed
|
|
6
|
+
* hairline, the sentence beside its one action and no glyph, for a part of a
|
|
7
|
+
* page that is empty while the rest of it is not (a mission nobody has
|
|
8
|
+
* written, a list with nothing in it yet).
|
|
9
|
+
*/
|
|
10
|
+
export type EmptyStateSize = 'default' | 'compact' | 'inline';
|
|
4
11
|
export interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
5
12
|
/** A glyph, drawn large and quiet. Replaced by `illustration` when both are given. */
|
|
6
13
|
icon?: ReactNode;
|
|
@@ -17,7 +24,7 @@ export interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 't
|
|
|
17
24
|
description: ReactNode;
|
|
18
25
|
/** What would fill it, as a control: "Create the first seat", "Connect Slack". */
|
|
19
26
|
action?: ReactNode;
|
|
20
|
-
/**
|
|
27
|
+
/** How much room it takes; see [EmptyStateSize]. */
|
|
21
28
|
size?: EmptyStateSize | undefined;
|
|
22
29
|
/**
|
|
23
30
|
* The heading level of the title. Taken from where the component finds
|
package/dist/EmptyState/index.js
CHANGED
|
@@ -71,3 +71,37 @@
|
|
|
71
71
|
.crewlet-empty-state__action {
|
|
72
72
|
margin-top: var(--spacing-2);
|
|
73
73
|
}
|
|
74
|
+
|
|
75
|
+
/*
|
|
76
|
+
* INLINE: one left-aligned row on a dashed hairline, the sentence beside its
|
|
77
|
+
* action. The dash says "nothing here yet" without a glyph, and the box keeps
|
|
78
|
+
* the place the content will take, so the page does not move when it is
|
|
79
|
+
* filled. Narrow, the action wraps under the words.
|
|
80
|
+
*/
|
|
81
|
+
.crewlet-empty-state--inline {
|
|
82
|
+
flex-direction: row;
|
|
83
|
+
flex-wrap: wrap;
|
|
84
|
+
justify-content: space-between;
|
|
85
|
+
gap: var(--spacing-2) var(--spacing-4);
|
|
86
|
+
padding: var(--spacing-3) var(--spacing-4);
|
|
87
|
+
border: 1px dashed var(--color-border-default);
|
|
88
|
+
border-radius: var(--radius-md);
|
|
89
|
+
text-align: start;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.crewlet-empty-state__text {
|
|
93
|
+
display: flex;
|
|
94
|
+
flex: 1 1 16rem;
|
|
95
|
+
flex-direction: column;
|
|
96
|
+
gap: var(--spacing-1);
|
|
97
|
+
min-width: 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.crewlet-empty-state--inline .crewlet-empty-state__description {
|
|
101
|
+
max-width: var(--size-measure);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.crewlet-empty-state--inline .crewlet-empty-state__action {
|
|
105
|
+
flex: none;
|
|
106
|
+
margin-top: 0;
|
|
107
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { LinkInterstitial, openExternal } from '../chunk-
|
|
2
|
-
import '../chunk-FYINAYAJ.js';
|
|
1
|
+
export { LinkInterstitial, openExternal } from '../chunk-KKUJSMLF.js';
|
|
3
2
|
import '../chunk-5CLW2CXT.js';
|
|
3
|
+
import '../chunk-FYINAYAJ.js';
|
|
4
4
|
import '../chunk-SZZRIHGT.js';
|
|
5
5
|
import '../chunk-PQADV6P6.js';
|
|
6
6
|
import '../chunk-OMV5W53A.js';
|
package/dist/ListInput/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { ListInput } from '../chunk-
|
|
1
|
+
export { ListInput } from '../chunk-NMYGJJJK.js';
|
|
2
2
|
import '../chunk-ZI5G5RS7.js';
|
|
3
3
|
import '../chunk-SMBKXWML.js';
|
|
4
4
|
import '../chunk-PQADV6P6.js';
|
|
5
|
+
import '../chunk-RSAQOKH3.js';
|
|
5
6
|
import '../chunk-OMV5W53A.js';
|
|
6
7
|
import '../chunk-H5XTJ7GJ.js';
|
|
7
8
|
import '../chunk-LACA4JGC.js';
|
|
8
9
|
import '../chunk-NUZHC6MM.js';
|
|
9
|
-
import '../chunk-RSAQOKH3.js';
|
|
10
10
|
import '../chunk-BZFWDIV6.js';
|
|
11
11
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -9,6 +9,12 @@ export type SectionSpacing =
|
|
|
9
9
|
* marketing band between each pair of panels puts one panel per viewport.
|
|
10
10
|
*/
|
|
11
11
|
| 'compact'
|
|
12
|
+
/**
|
|
13
|
+
* The console band at its tightest: one small step between the heading and
|
|
14
|
+
* what it introduces, for a summary whose sections stand close, as a list's
|
|
15
|
+
* group headings do.
|
|
16
|
+
*/
|
|
17
|
+
| 'tight'
|
|
12
18
|
/** A marketing band. State one: a page of them is a deliberate page. */
|
|
13
19
|
| 'sm' | 'md' | 'lg';
|
|
14
20
|
export type SectionElement = 'section' | 'div' | 'header' | 'footer' | 'article';
|
package/dist/Section/index.js
CHANGED
|
@@ -23,6 +23,14 @@
|
|
|
23
23
|
padding-block: 0;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
/* The console band at its tightest: a group heading's step to what it names. */
|
|
27
|
+
.crewlet-section--tight {
|
|
28
|
+
display: flex;
|
|
29
|
+
flex-direction: column;
|
|
30
|
+
gap: var(--spacing-2);
|
|
31
|
+
padding-block: 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
26
34
|
.crewlet-section--sm {
|
|
27
35
|
padding-block: var(--spacing-9);
|
|
28
36
|
}
|
|
@@ -106,6 +114,12 @@
|
|
|
106
114
|
gap: var(--spacing-3);
|
|
107
115
|
}
|
|
108
116
|
|
|
117
|
+
/* A tight band keeps its one small step with a title too: the titled column's
|
|
118
|
+
gap would otherwise win, being later in the sheet. */
|
|
119
|
+
.crewlet-section--tight.crewlet-section--titled {
|
|
120
|
+
gap: var(--spacing-2);
|
|
121
|
+
}
|
|
122
|
+
|
|
109
123
|
@media (max-width: 768px) {
|
|
110
124
|
.crewlet-section--sm {
|
|
111
125
|
padding-block: var(--spacing-7);
|