@crewlethq/ui 0.42.0 → 0.43.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.
Files changed (47) hide show
  1. package/README.md +14 -2
  2. package/dist/ArrangeFrame/index.js +2 -2
  3. package/dist/ArrangeList/index.js +1 -1
  4. package/dist/AvatarPicker/index.js +3 -3
  5. package/dist/CharacterPicker/index.js +2 -2
  6. package/dist/DataView/index.js +2 -2
  7. package/dist/DatasetSource/index.js +1 -1
  8. package/dist/DirectoryList/DirectoryList.d.ts +55 -0
  9. package/dist/DirectoryList/index.d.ts +3 -0
  10. package/dist/DirectoryList/index.js +3 -0
  11. package/dist/DirectoryList-EESYMH2U.css +126 -0
  12. package/dist/DocTabsEditor/index.js +1 -1
  13. package/dist/ListDetail/ListDetail.d.ts +27 -0
  14. package/dist/ListDetail/index.d.ts +3 -0
  15. package/dist/ListDetail/index.js +2 -0
  16. package/dist/ListDetail-ALKU5VJW.css +53 -0
  17. package/dist/ListInput/index.js +2 -2
  18. package/dist/ObjectHeader/ObjectHeader.d.ts +7 -1
  19. package/dist/ObjectHeader/index.js +1 -1
  20. package/dist/{ObjectHeader-ZOS22FKX.css → ObjectHeader-DNQWRGUK.css} +50 -0
  21. package/dist/PropertyList/index.js +2 -2
  22. package/dist/RichEditor/index.js +1 -1
  23. package/dist/SheetGrid/index.js +5 -5
  24. package/dist/SlideFilmstrip/index.js +1 -1
  25. package/dist/Switcher/index.js +2 -2
  26. package/dist/TableCells/index.js +1 -1
  27. package/dist/TagsInput/index.js +2 -2
  28. package/dist/{chunk-ODOJJGXH.js → chunk-HFQBMEEH.js} +18 -2
  29. package/dist/{chunk-TVSHR35W.js → chunk-JF3TJUBU.js} +1 -1
  30. package/dist/{chunk-T6MXORP5.js → chunk-JGCDFMXN.js} +1 -1
  31. package/dist/{chunk-Q7HLZH32.js → chunk-PLLYOPS4.js} +1 -1
  32. package/dist/chunk-R5RCGD7N.js +12 -0
  33. package/dist/chunk-SJ6DMG4R.js +39 -0
  34. package/dist/generated/index.d.ts +2 -0
  35. package/dist/generated/index.js +49 -47
  36. package/dist/index.js +49 -47
  37. package/dist/styles.css +236 -1
  38. package/package.json +3 -3
  39. package/dist/{Editor-FXO2JVWK.js → Editor-AMO2B54T.js} +1 -1
  40. package/dist/{chunk-NF6SWHQI.js → chunk-524GGA67.js} +1 -1
  41. package/dist/{chunk-SXBJMBSV.js → chunk-IVAR7NRW.js} +1 -1
  42. package/dist/{chunk-VWYT3GVV.js → chunk-LKBZV5IT.js} +1 -1
  43. package/dist/{chunk-AACPFUZW.js → chunk-NCM73C34.js} +1 -1
  44. package/dist/{chunk-OWIGEE2Y.js → chunk-OVHJTOKW.js} +2 -2
  45. package/dist/{chunk-S3QTFUJX.js → chunk-VXCT6L3F.js} +0 -0
  46. package/dist/{chunk-SNQRGH4A.js → chunk-VZICPYGR.js} +1 -1
  47. package/dist/{chunk-NMYGJJJK.js → chunk-Z5WMCBHR.js} +1 -1
package/README.md CHANGED
@@ -50,9 +50,9 @@ 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`, `Tabs`, `Accordion`, `Disclosure`, `Outline` (with `useActiveHeading` and `scrollToHeading`), `TreeGrid` |
53
+ | Layout | `Container`, `Section`, `Card`, `TileGrid`, `ListDetail`, `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
- | Application shell | `AppShell` with `AppShell.Rail`, `SectionFrame` (with `SectionFrame.Nav` and `SectionFrame.Body`), `LockedLabel`, `AppShell.Topbar`, `AppShell.AccountRow` and `useAppShell`, `AuthLayout`, `SidebarNav` and `NavItem`, `BrandLockup`, `SearchTrigger`, `PageHeader`, `Toolbar`, `Stack`, `Inline`, `Spacer`, `AutoGrid`, `ErrorBoundary`, `useShortcut`, `useFullscreen`, `useIdle`, `useMediaMatch` |
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 |
57
57
  | Artifacts | `SandboxedFrame` (with `SandboxedFramePlaceholder` and `SandboxedFrameNotice`), `LinkInterstitial` and `openExternal`, `VersionTimeline`, `ShareDialog` with the role ladder (`ARTIFACT_ROLES`, `SHAREABLE_ROLES`, `roleAtLeast`), `PrincipalPicker`, `Principal` and `PrincipalAvatar`, `ArtifactCard`, `ArtifactKindGlyph` and `ArtifactPreviewGlyph` (the preview a card draws with no cover, for a cover with nothing to draw), `ArtifactBar` and `ArtifactVersionChip` (an open artifact's one slim bar), `ArtifactPanel` and `ArtifactWorkspace` (the panels it opens beside or over the artifact), `CanvasBoard` (a design's artboards and notes on a `Canvas`, with the visibility budget `liveBoards`), `CanvasToolbar` (a canvas's tool palette, with `toolForKey`), `LayersList` (the list of a canvas's items beside it, marked by the canvas's selection), `CanvasSchematic` (a design's cover, drawn from its boards' frames), `AccessDeniedCard`, `ArtifactIcon` (with `artifactIconGlyph` and `ARTIFACT_ICON_WORDS`), the native gallery covers (`DocCover`, `SheetCover`, `DashboardCover`), `MergeConflicts`, the dashboard pieces (`WidgetFrame`, `DatasetSource` and `DatasetSourceList`), and `FrameProtocol` (the wire between a host page and an embedded artifact, with no React in it), `ArtifactNameCell` and `ArtifactAccessLabel` (with `ArtifactAccessGlyph`) for a list of artifacts |
58
58
  | Sheets | `SheetGrid`, the cells on their own (`CheckboxCell`, `TextCell`, `LongTextCell`, `NumberCell`, `SelectCell`, `MultiSelectCell`, `PersonCell`, `StatusCell`, `DateCell`, `UrlCell`, `RatingCell`, and `SheetCell` for any type), `ChangeMark`, and `SheetModel` (every rule a sheet is drawn from, with no React in it: values, parsing, the keyboard model, TSV, the pending edits of D23) |
@@ -204,6 +204,18 @@ 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.43.0
208
+
209
+ The parts of the engine's Company › Integrations page, a directory of everything a company works in beside the detail of the one chosen.
210
+
211
+ **`DirectoryList` is a directory in named groups**: each line a link to the item's own page with its mark, its label, a quieter hint under it (`hint`, the app a product belongs to) and its state where it has one (`status`, a status dot or a pill), the chosen line `aria-current="page"` on the selected ground. It is a navigation landmark of lists under headings (`headingLevel`), and it fills the height it is given: the groups scroll on their own and the `foot` holds the bottom of the column, one small step under them with one hairline above it, for one fact about the whole list such as an address.
212
+
213
+ **`ListDetail` lays a list beside the detail of what is chosen in it**, each scrolling on its own in the height it is given (an application shell's `fill`), the list column `--crewlet-list-detail-list` wide (17rem by default) with a hairline between the two. Below 640px it is one pane, the one `showing` names (`list` or `detail`), on a page that scrolls as any other.
214
+
215
+ **`ObjectHeader` takes a `mark`**: the object's own mark, drawn on a plate the catalogue tile's well at one and a half rows, beside the column the rest of the header keeps (a row at `size="peek"` and on a phone). A header without one is unchanged.
216
+
217
+ **`@crewlethq/icons` adds `ProductMark`**, the marks of the services built into Crewlet (`works`, `knowledge`, `chat`) beside `VendorMark`, with `soon` for a product that has not shipped, drawn hollow rather than grey. See the icons README.
218
+
207
219
  ## Changes in 0.42.0
208
220
 
209
221
  **`IconButtonLink` is an icon-only link** drawn as an `IconButton`: a place reached by its glyph, such as Settings beside the reader's own row in a rail's foot. It is a real anchor (`href`), named and titled by its `label`, and `current` marks the page the reader is on with `aria-current="page"` and a nav row's selected treatment, the lifted ground inside the default hairline, drawn on the square's own transparent boundary so nothing moves; its ring then covers that edge.
@@ -1,5 +1,5 @@
1
- export { ArrangeFrame, useGridResize } from '../chunk-VWYT3GVV.js';
2
- import '../chunk-RSAQOKH3.js';
1
+ export { ArrangeFrame, useGridResize } from '../chunk-LKBZV5IT.js';
3
2
  import '../chunk-LACA4JGC.js';
3
+ import '../chunk-RSAQOKH3.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';
8
7
  import '../chunk-LACA4JGC.js';
9
8
  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 { AvatarPicker } from '../chunk-Q7HLZH32.js';
1
+ export { AvatarPicker } from '../chunk-PLLYOPS4.js';
2
2
  import '../chunk-QOP7QYUW.js';
3
3
  import '../chunk-KHJIEPZV.js';
4
4
  import '../chunk-AYKXMIOR.js';
5
- import '../chunk-SNQRGH4A.js';
5
+ import '../chunk-VZICPYGR.js';
6
+ import '../chunk-PZKHBB7D.js';
6
7
  import '../chunk-BF5WV7NM.js';
7
8
  import '../chunk-KA75QPFM.js';
8
9
  import '../chunk-WIATRXEJ.js';
9
10
  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,5 +1,5 @@
1
1
  import '../chunk-3L5NHASN.js';
2
- export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-SNQRGH4A.js';
3
- import '../chunk-EGMQURBR.js';
2
+ export { CHARACTER_PICKER_COLUMNS, CharacterPicker } from '../chunk-VZICPYGR.js';
4
3
  import '../chunk-PZKHBB7D.js';
4
+ import '../chunk-EGMQURBR.js';
5
5
  import '../chunk-ODEQTPFM.js';
@@ -1,7 +1,7 @@
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-AACPFUZW.js';
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-NCM73C34.js';
2
2
  import '../chunk-HOXGBLEY.js';
3
- import '../chunk-UFXLNC2N.js';
4
3
  import '../chunk-GI3S6RMM.js';
4
+ import '../chunk-UFXLNC2N.js';
5
5
  import '../chunk-STJ7QBC3.js';
6
6
  import '../chunk-DTIW4CHZ.js';
7
7
  import '../chunk-FYINAYAJ.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';
4
3
  import '../chunk-3CZ7XAVY.js';
5
4
  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';
@@ -0,0 +1,55 @@
1
+ import { type MouseEventHandler, type ReactNode } from 'react';
2
+ import { type HeadingLevel } from '../utils/headingLevel.js';
3
+ export interface DirectoryItem {
4
+ /** Unique within the list. */
5
+ key: string;
6
+ /** Where the line goes: the item's own page. */
7
+ href: string;
8
+ /** The item's mark: a vendor's, a product's. Decorative, since the label names it. */
9
+ mark?: ReactNode;
10
+ label: ReactNode;
11
+ /** A quieter line under the label: the app a product belongs to. */
12
+ hint?: ReactNode;
13
+ /** The item's state where it has one: a status dot and word, or a pill. */
14
+ status?: ReactNode;
15
+ /** The item the page is showing. */
16
+ selected?: boolean | undefined;
17
+ /** For an application that routes in place of the browser. */
18
+ onClick?: MouseEventHandler<HTMLAnchorElement> | undefined;
19
+ }
20
+ export interface DirectoryGroup {
21
+ /** Unique within the list. */
22
+ key: string;
23
+ label: ReactNode;
24
+ items: readonly DirectoryItem[];
25
+ }
26
+ export interface DirectoryListProps {
27
+ /** What the list is, for a screen reader's landmark: "Integrations". */
28
+ label: string;
29
+ groups: readonly DirectoryGroup[];
30
+ /**
31
+ * One quiet fact that belongs to the whole list, held at its foot: it stays
32
+ * at the bottom of the column while the groups scroll above it.
33
+ */
34
+ foot?: ReactNode;
35
+ /** The level of each group's heading; the level the list stands at by default. */
36
+ headingLevel?: HeadingLevel | undefined;
37
+ className?: string | undefined;
38
+ }
39
+ /**
40
+ * A directory: everything of one kind, in named groups, each line a link to
41
+ * the item's own page, beside which a page shows the one chosen.
42
+ *
43
+ * A NAVIGATION LANDMARK of lists under headings, so a screen reader can jump
44
+ * group to group and is told how many lines each holds. The chosen line is
45
+ * `aria-current="page"` and drawn on the selected ground. A line carries its
46
+ * mark, its label (and a quieter hint under it) and its state where it has
47
+ * one; a line with no state says nothing rather than "none".
48
+ *
49
+ * IT FILLS THE HEIGHT IT IS GIVEN. The groups take the room and scroll on
50
+ * their own when they outgrow it, and the foot holds the bottom, one small
51
+ * step under them, so a fact about the whole list (an address, a count) is in
52
+ * the same place however long the list is. Placed in a column of a page that
53
+ * scrolls as a whole, it is as tall as its lines and the foot ends it.
54
+ */
55
+ export declare function DirectoryList({ label, groups, foot, headingLevel, className }: DirectoryListProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './DirectoryList.css';
2
+ export { DirectoryList } from './DirectoryList.js';
3
+ export type { DirectoryGroup, DirectoryItem, DirectoryListProps } from './DirectoryList.js';
@@ -0,0 +1,3 @@
1
+ export { DirectoryList } from '../chunk-SJ6DMG4R.js';
2
+ import '../chunk-PQADV6P6.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,126 @@
1
+ /*
2
+ * DirectoryList: named groups of links, each line a mark, a label and a state,
3
+ * and one foot that holds the bottom (DirectoryList.tsx).
4
+ *
5
+ * NO FRAME OF ITS OWN. The list draws on the column it is placed in, its lines
6
+ * on the hover and selected grounds alone, so it never makes a box inside a
7
+ * box; the foot's hairline is the one rule it draws.
8
+ */
9
+
10
+ .crewlet-directory {
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: var(--spacing-2);
14
+ min-width: 0;
15
+ min-height: 0;
16
+ height: 100%;
17
+ font-family: var(--font-family-sans);
18
+ }
19
+
20
+ /* The groups take the room and scroll on their own, so the foot stays put. */
21
+ .crewlet-directory__groups {
22
+ display: flex;
23
+ flex: 1 1 auto;
24
+ flex-direction: column;
25
+ gap: var(--spacing-5);
26
+ min-height: 0;
27
+ overflow-y: auto;
28
+ }
29
+
30
+ .crewlet-directory__group {
31
+ display: flex;
32
+ flex-direction: column;
33
+ gap: var(--spacing-2);
34
+ min-width: 0;
35
+ }
36
+
37
+ .crewlet-directory__heading {
38
+ margin: 0;
39
+ padding: 0 var(--spacing-2);
40
+ font-size: var(--font-size-xs);
41
+ font-weight: var(--font-weight-semibold);
42
+ letter-spacing: 0.04em;
43
+ text-transform: uppercase;
44
+ color: var(--color-text-tertiary);
45
+ }
46
+
47
+ .crewlet-directory__items {
48
+ display: flex;
49
+ flex-direction: column;
50
+ gap: 2px;
51
+ margin: 0;
52
+ padding: 0;
53
+ list-style: none;
54
+ }
55
+
56
+ .crewlet-directory__item {
57
+ display: grid;
58
+ grid-template-columns: auto minmax(0, 1fr) auto;
59
+ align-items: center;
60
+ gap: var(--spacing-2);
61
+ min-height: var(--size-row-md);
62
+ padding: var(--spacing-1) var(--spacing-2);
63
+ border-radius: var(--radius-md);
64
+ color: var(--color-text-primary);
65
+ font-size: var(--font-size-sm);
66
+ text-decoration: none;
67
+ }
68
+
69
+ .crewlet-directory__item:hover {
70
+ background: var(--color-surface-hover);
71
+ }
72
+
73
+ .crewlet-directory__item--selected,
74
+ .crewlet-directory__item--selected:hover {
75
+ background: var(--color-surface-selected);
76
+ }
77
+
78
+ .crewlet-directory__item:focus-visible {
79
+ outline: 2px solid var(--color-focus);
80
+ outline-offset: 1px;
81
+ }
82
+
83
+ .crewlet-directory__mark {
84
+ display: inline-flex;
85
+ flex: none;
86
+ align-items: center;
87
+ justify-content: center;
88
+ width: var(--size-row-sm);
89
+ height: var(--size-row-sm);
90
+ }
91
+
92
+ .crewlet-directory__text {
93
+ display: flex;
94
+ flex-direction: column;
95
+ min-width: 0;
96
+ }
97
+
98
+ .crewlet-directory__label {
99
+ overflow: hidden;
100
+ font-weight: var(--font-weight-medium);
101
+ text-overflow: ellipsis;
102
+ white-space: nowrap;
103
+ }
104
+
105
+ .crewlet-directory__hint {
106
+ overflow: hidden;
107
+ font-size: var(--font-size-xs);
108
+ color: var(--color-text-tertiary);
109
+ text-overflow: ellipsis;
110
+ white-space: nowrap;
111
+ }
112
+
113
+ .crewlet-directory__status {
114
+ display: inline-flex;
115
+ flex: none;
116
+ font-size: var(--font-size-xs);
117
+ color: var(--color-text-secondary);
118
+ }
119
+
120
+ /* The foot: one small step under the groups, at the bottom of the column. */
121
+ .crewlet-directory__foot {
122
+ flex: none;
123
+ min-width: 0;
124
+ padding: var(--spacing-2) var(--spacing-2) 0;
125
+ border-top: 1px solid var(--color-border-default);
126
+ }
@@ -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';
6
5
  import '../chunk-PCI7ZJ6Z.js';
7
6
  import '../chunk-OMV5W53A.js';
8
7
  import '../chunk-H5XTJ7GJ.js';
9
8
  import '../chunk-OG6CL3EB.js';
10
9
  import '../chunk-LACA4JGC.js';
11
10
  import '../chunk-NUZHC6MM.js';
11
+ import '../chunk-RSAQOKH3.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,27 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export type ListDetailPane = 'list' | 'detail';
3
+ export interface ListDetailProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
4
+ /** The list column: a `DirectoryList`, an inbox. */
5
+ list: ReactNode;
6
+ /** The chosen item's detail. */
7
+ children: ReactNode;
8
+ /**
9
+ * Which pane a phone shows, where the two are one column: the list until
10
+ * something is chosen, then the detail. Wider, both are always shown.
11
+ */
12
+ showing?: ListDetailPane | undefined;
13
+ }
14
+ /**
15
+ * A list beside the detail of what is chosen in it, each scrolling on its own.
16
+ *
17
+ * IT FILLS THE HEIGHT IT IS GIVEN, so place it in a box of the window's
18
+ * height (an application shell's `fill`): the list column holds its place
19
+ * while the detail scrolls, and a list that grows scrolls inside its own
20
+ * column. The list column is `--crewlet-list-detail-list` wide (17rem by
21
+ * default), with a hairline between the two.
22
+ *
23
+ * BELOW 640px IT IS ONE PANE, the one `showing` names, as tall as its content
24
+ * on a page that scrolls as any other: a phone has no room for two columns,
25
+ * and the application gives its detail a way back to the list.
26
+ */
27
+ export declare function ListDetail({ list, children, showing, className, ...rest }: ListDetailProps): import("react").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './ListDetail.css';
2
+ export { ListDetail } from './ListDetail.js';
3
+ export type { ListDetailPane, ListDetailProps } from './ListDetail.js';
@@ -0,0 +1,2 @@
1
+ export { ListDetail } from '../chunk-R5RCGD7N.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,53 @@
1
+ /*
2
+ * ListDetail: a list beside the detail of what is chosen in it, each scrolling
3
+ * on its own in the height it is given, one pane on a phone (ListDetail.tsx).
4
+ */
5
+
6
+ .crewlet-list-detail {
7
+ display: grid;
8
+ flex: 1 1 auto;
9
+ grid-template-columns: var(--crewlet-list-detail-list, 17rem) minmax(0, 1fr);
10
+ gap: var(--spacing-8);
11
+ height: 100%;
12
+ min-width: 0;
13
+ min-height: 0;
14
+ }
15
+
16
+ .crewlet-list-detail__list {
17
+ display: flex;
18
+ flex-direction: column;
19
+ min-width: 0;
20
+ min-height: 0;
21
+ padding-right: var(--spacing-6);
22
+ border-right: 1px solid var(--color-border-default);
23
+ }
24
+
25
+ .crewlet-list-detail__detail {
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: var(--spacing-5);
29
+ min-width: 0;
30
+ min-height: 0;
31
+ overflow-y: auto;
32
+ }
33
+
34
+ @media (width < 640px) {
35
+ .crewlet-list-detail {
36
+ grid-template-columns: minmax(0, 1fr);
37
+ height: auto;
38
+ }
39
+
40
+ .crewlet-list-detail__list {
41
+ padding-right: 0;
42
+ border-right: 0;
43
+ }
44
+
45
+ .crewlet-list-detail__detail {
46
+ overflow: visible;
47
+ }
48
+
49
+ .crewlet-list-detail--showing-list .crewlet-list-detail__detail,
50
+ .crewlet-list-detail--showing-detail .crewlet-list-detail__list {
51
+ display: none;
52
+ }
53
+ }
@@ -1,11 +1,11 @@
1
- export { ListInput } from '../chunk-NMYGJJJK.js';
1
+ export { ListInput } from '../chunk-Z5WMCBHR.js';
2
2
  import '../chunk-ZI5G5RS7.js';
3
3
  import '../chunk-SMBKXWML.js';
4
4
  import '../chunk-PQADV6P6.js';
5
- import '../chunk-RSAQOKH3.js';
6
5
  import '../chunk-OMV5W53A.js';
7
6
  import '../chunk-H5XTJ7GJ.js';
8
7
  import '../chunk-LACA4JGC.js';
9
8
  import '../chunk-NUZHC6MM.js';
9
+ import '../chunk-RSAQOKH3.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';
@@ -96,6 +96,12 @@ export interface ObjectHeaderProps {
96
96
  kind: ReactNode;
97
97
  /** A glyph beside the kind. A component, not a name. */
98
98
  icon?: ReactNode;
99
+ /**
100
+ * The object's own mark, drawn large on a plate beside everything else: a
101
+ * vendor's or a product's mark on an integration's page. Decorative, since
102
+ * the title names the object; a header without one keeps its one column.
103
+ */
104
+ mark?: ReactNode;
99
105
  /** The key, handle or id, in the mono face. */
100
106
  identifier?: ReactNode;
101
107
  /**
@@ -141,4 +147,4 @@ export interface ObjectHeaderProps {
141
147
  * the actions wrap onto a line of their own instead of each giving up a few
142
148
  * characters.
143
149
  */
144
- export declare function ObjectHeader({ kind, icon, identifier, within, title, status, facts, description, actions, size, className, }: ObjectHeaderProps): import("react").JSX.Element;
150
+ export declare function ObjectHeader({ kind, icon, mark, identifier, within, title, status, facts, description, actions, size, className, }: ObjectHeaderProps): import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
- export { FactLine, ObjectHeader, SetByLine } from '../chunk-ODOJJGXH.js';
1
+ export { FactLine, ObjectHeader, SetByLine } from '../chunk-HFQBMEEH.js';
2
2
  import '../chunk-FBSEJO2C.js';
3
3
  import '../chunk-BZFWDIV6.js';
4
4
  import '../chunk-ODEQTPFM.js';
@@ -18,6 +18,56 @@
18
18
  padding: var(--spacing-3) 0 var(--spacing-2);
19
19
  }
20
20
 
21
+ /*
22
+ * A MARKED HEADER: the object's own mark on a plate, the catalogue tile's well
23
+ * at one and a half rows, beside the column the rest of the header keeps. The
24
+ * plate is the one box in the header, so the mark reads as the object's face
25
+ * rather than as one more glyph in the eyebrow.
26
+ */
27
+ .crewlet-object-header--marked {
28
+ flex-direction: row;
29
+ align-items: flex-start;
30
+ gap: var(--spacing-4);
31
+ }
32
+
33
+ .crewlet-object-header__mark {
34
+ display: inline-flex;
35
+ flex: none;
36
+ align-items: center;
37
+ justify-content: center;
38
+ width: calc(var(--size-row-lg) * 1.5);
39
+ height: calc(var(--size-row-lg) * 1.5);
40
+ border-radius: var(--radius-lg);
41
+ background: var(--color-surface-elevated);
42
+ border: 1px solid var(--color-border-default);
43
+ }
44
+
45
+ .crewlet-object-header--peek .crewlet-object-header__mark {
46
+ width: var(--size-row-lg);
47
+ height: var(--size-row-lg);
48
+ border-radius: var(--radius-md);
49
+ }
50
+
51
+ .crewlet-object-header__body {
52
+ display: flex;
53
+ flex: 1 1 auto;
54
+ flex-direction: column;
55
+ gap: var(--spacing-1);
56
+ min-width: 0;
57
+ }
58
+
59
+ @media (width < 640px) {
60
+ .crewlet-object-header--marked {
61
+ gap: var(--spacing-3);
62
+ }
63
+
64
+ .crewlet-object-header--marked .crewlet-object-header__mark {
65
+ width: var(--size-row-lg);
66
+ height: var(--size-row-lg);
67
+ border-radius: var(--radius-md);
68
+ }
69
+ }
70
+
21
71
  .crewlet-object-header__eyebrow {
22
72
  display: flex;
23
73
  align-items: center;
@@ -1,5 +1,5 @@
1
- export { PropertyList } from '../chunk-T6MXORP5.js';
2
- import '../chunk-ODOJJGXH.js';
1
+ export { PropertyList } from '../chunk-JGCDFMXN.js';
2
+ import '../chunk-HFQBMEEH.js';
3
3
  import '../chunk-FBSEJO2C.js';
4
4
  import '../chunk-MFS6F2P7.js';
5
5
  import '../chunk-EUCC37WY.js';
@@ -1,4 +1,4 @@
1
- export { RichEditor, preloadRichEditor } from '../chunk-TVSHR35W.js';
1
+ export { RichEditor, preloadRichEditor } from '../chunk-JF3TJUBU.js';
2
2
  export { RICH_EDITOR_LABELS, richEditorLabels } from '../chunk-CSQTDGTS.js';
3
3
  import '../chunk-BAKPMH3S.js';
4
4
  import '../chunk-SZZRIHGT.js';
@@ -1,24 +1,24 @@
1
- export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-OWIGEE2Y.js';
1
+ export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-OVHJTOKW.js';
2
2
  import '../chunk-O2EGEONV.js';
3
3
  import '../chunk-CENOOTAV.js';
4
- import '../chunk-KYIAFNU7.js';
5
4
  import '../chunk-3BYIWOTV.js';
6
5
  import '../chunk-I6POAB4V.js';
6
+ import '../chunk-KYIAFNU7.js';
7
7
  import '../chunk-66X5WDKE.js';
8
8
  import '../chunk-LFSIKGRQ.js';
9
9
  import '../chunk-Z7JYG5TF.js';
10
10
  import '../chunk-KHJIEPZV.js';
11
11
  import '../chunk-AYKXMIOR.js';
12
- import '../chunk-WIATRXEJ.js';
13
- import '../chunk-I33UIUZD.js';
14
12
  import '../chunk-5AQBPHZD.js';
15
13
  import '../chunk-PZKHBB7D.js';
16
- import '../chunk-RSAQOKH3.js';
14
+ import '../chunk-WIATRXEJ.js';
15
+ import '../chunk-I33UIUZD.js';
17
16
  import '../chunk-PCI7ZJ6Z.js';
18
17
  import '../chunk-OMV5W53A.js';
19
18
  import '../chunk-H5XTJ7GJ.js';
20
19
  import '../chunk-OG6CL3EB.js';
21
20
  import '../chunk-LACA4JGC.js';
22
21
  import '../chunk-NUZHC6MM.js';
22
+ import '../chunk-RSAQOKH3.js';
23
23
  import '../chunk-BZFWDIV6.js';
24
24
  import '../chunk-ODEQTPFM.js';
@@ -2,12 +2,12 @@ export { SlideFilmstrip } from '../chunk-MCOC3KQA.js';
2
2
  import '../chunk-RMEBFYL7.js';
3
3
  import '../chunk-XJ2QEBMM.js';
4
4
  import '../chunk-SMBKXWML.js';
5
- import '../chunk-RSAQOKH3.js';
6
5
  import '../chunk-PCI7ZJ6Z.js';
7
6
  import '../chunk-OMV5W53A.js';
8
7
  import '../chunk-H5XTJ7GJ.js';
9
8
  import '../chunk-OG6CL3EB.js';
10
9
  import '../chunk-LACA4JGC.js';
11
10
  import '../chunk-NUZHC6MM.js';
11
+ import '../chunk-RSAQOKH3.js';
12
12
  import '../chunk-BZFWDIV6.js';
13
13
  import '../chunk-ODEQTPFM.js';
@@ -1,4 +1,4 @@
1
- export { Switcher } from '../chunk-NF6SWHQI.js';
1
+ export { Switcher } from '../chunk-524GGA67.js';
2
2
  import '../chunk-FYINAYAJ.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-KHJIEPZV.js';
@@ -6,12 +6,12 @@ import '../chunk-FYTIJM2T.js';
6
6
  import '../chunk-TEUQWOWZ.js';
7
7
  import '../chunk-ZI5G5RS7.js';
8
8
  import '../chunk-PQADV6P6.js';
9
- import '../chunk-RSAQOKH3.js';
10
9
  import '../chunk-RTPQDNW3.js';
11
10
  import '../chunk-OMV5W53A.js';
12
11
  import '../chunk-H5XTJ7GJ.js';
13
12
  import '../chunk-OG6CL3EB.js';
14
13
  import '../chunk-LACA4JGC.js';
15
14
  import '../chunk-NUZHC6MM.js';
15
+ import '../chunk-RSAQOKH3.js';
16
16
  import '../chunk-BZFWDIV6.js';
17
17
  import '../chunk-ODEQTPFM.js';
@@ -1,10 +1,10 @@
1
1
  export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-4BJK7FE5.js';
2
2
  import '../chunk-FBSEJO2C.js';
3
3
  import '../chunk-KYIAFNU7.js';
4
- import '../chunk-WIATRXEJ.js';
5
4
  import '../chunk-3CZ7XAVY.js';
6
5
  import '../chunk-EUCC37WY.js';
7
6
  import '../chunk-5AQBPHZD.js';
8
7
  import '../chunk-PZKHBB7D.js';
8
+ import '../chunk-WIATRXEJ.js';
9
9
  import '../chunk-BZFWDIV6.js';
10
10
  import '../chunk-ODEQTPFM.js';
@@ -1,11 +1,11 @@
1
- export { TagsInput } from '../chunk-SXBJMBSV.js';
1
+ export { TagsInput } from '../chunk-IVAR7NRW.js';
2
2
  import '../chunk-KYIAFNU7.js';
3
3
  import '../chunk-7KHM2FZH.js';
4
4
  import '../chunk-WIATRXEJ.js';
5
- import '../chunk-RSAQOKH3.js';
6
5
  import '../chunk-OMV5W53A.js';
7
6
  import '../chunk-H5XTJ7GJ.js';
8
7
  import '../chunk-LACA4JGC.js';
9
8
  import '../chunk-NUZHC6MM.js';
9
+ import '../chunk-RSAQOKH3.js';
10
10
  import '../chunk-BZFWDIV6.js';
11
11
  import '../chunk-ODEQTPFM.js';