@crewlethq/ui 0.19.0 → 0.21.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 +32 -3
- package/dist/AppShell/AccountRow.d.ts +24 -2
- package/dist/AppShell/index.d.ts +1 -1
- package/dist/AppShell/index.js +3 -1
- package/dist/{AppShell-RUNVM4WH.css → AppShell-APHZKJYH.css} +25 -3
- package/dist/CommandPalette/index.js +3 -3
- package/dist/CommentThread/CommentThread.d.ts +85 -0
- package/dist/CommentThread/index.d.ts +3 -0
- package/dist/CommentThread/index.js +16 -0
- package/dist/CommentThread-7VXOFTZO.css +90 -0
- package/dist/ConflictNote/ConflictNote.d.ts +42 -0
- package/dist/ConflictNote/index.d.ts +3 -0
- package/dist/ConflictNote/index.js +4 -0
- package/dist/ConflictNote-DH77PYF7.css +27 -0
- package/dist/DataTable/index.js +4 -4
- package/dist/DataView/index.js +6 -6
- package/dist/DateTimePicker/index.js +2 -2
- package/dist/DiffView/DiffView.d.ts +59 -0
- package/dist/DiffView/diff.d.ts +97 -0
- package/dist/DiffView/index.d.ts +5 -0
- package/dist/DiffView/index.js +3 -0
- package/dist/DiffView-RVLIHTKG.css +91 -0
- package/dist/LinkInterstitial/index.js +3 -3
- package/dist/Menu/Menu.d.ts +28 -2
- package/dist/Menu/index.d.ts +1 -1
- package/dist/Menu/index.js +1 -1
- package/dist/{Menu-BT5PMFJI.css → Menu-XIJ4LQUT.css} +15 -0
- package/dist/Modal/index.js +2 -2
- package/dist/PeopleRail/PeopleRail.d.ts +52 -0
- package/dist/PeopleRail/index.d.ts +3 -0
- package/dist/PeopleRail/index.js +11 -0
- package/dist/PeopleRail-R64WVOSH.css +75 -0
- package/dist/ShareDialog/index.js +3 -3
- package/dist/SheetGrid/index.js +3 -3
- package/dist/Switcher/index.js +3 -3
- package/dist/TableCells/TableCells.d.ts +153 -0
- package/dist/TableCells/index.d.ts +3 -0
- package/dist/TableCells/index.js +10 -0
- package/dist/TableCells-3VN5N2M3.css +104 -0
- package/dist/TimeWindowPicker/index.js +2 -2
- package/dist/VersionCompare/VersionCompare.d.ts +70 -0
- package/dist/VersionCompare/index.d.ts +3 -0
- package/dist/VersionCompare/index.js +11 -0
- package/dist/VersionCompare-UUZOPTQO.css +68 -0
- package/dist/VersionTimeline/index.js +2 -2
- package/dist/{chunk-UXELEORU.js → chunk-4HRB62EA.js} +1 -1
- package/dist/{chunk-JULMZNGT.js → chunk-4MIM356A.js} +18 -7
- package/dist/chunk-73QBUUYX.js +102 -0
- package/dist/{chunk-7FQEUNHX.js → chunk-7X5WOECO.js} +1 -1
- package/dist/{chunk-OIMAK5AE.js → chunk-AV6YX4GZ.js} +4 -4
- package/dist/chunk-BVWSLXTY.js +187 -0
- package/dist/{chunk-EDGCPVVD.js → chunk-G5TAKMEA.js} +27 -3
- package/dist/chunk-IC64IWOO.js +176 -0
- package/dist/chunk-J4OKGJQ6.js +96 -0
- package/dist/{chunk-AJESMWJS.js → chunk-LG244LY7.js} +3 -3
- package/dist/chunk-MUGM7SEG.js +88 -0
- package/dist/chunk-UO7JZVCO.js +35 -0
- package/dist/{chunk-HTCJSUIZ.js → chunk-XMGB3ZAT.js} +2 -2
- package/dist/{chunk-RT323I4I.js → chunk-ZM7HLFOA.js} +1 -1
- package/dist/generated/index.d.ts +6 -0
- package/dist/generated/index.js +52 -46
- package/dist/index.js +52 -46
- package/dist/styles.css +515 -5
- package/package.json +3 -3
- package/dist/{chunk-PUQY4WXR.js → chunk-36CWC2NH.js} +1 -1
- package/dist/{chunk-7IJARUIF.js → chunk-F4DPAJCN.js} +1 -1
- package/dist/{chunk-4Z7PW3L6.js → chunk-MSSZHDZI.js} +0 -0
- package/dist/{chunk-EIGEIT4O.js → chunk-NUZC6PJX.js} +1 -1
- package/dist/{chunk-L4H7SSWF.js → chunk-RE6ED5TO.js} +1 -1
- package/dist/{chunk-WXAULPBH.js → chunk-UNZ7TVV5.js} +1 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What changed between two versions of a document, by line.
|
|
3
|
+
*
|
|
4
|
+
* OVER LINES, by the classic longest-common-subsequence table. The shape is
|
|
5
|
+
* the one a prose document wants: a paragraph somebody rewrote is a line
|
|
6
|
+
* replaced, not thirty character edits scattered through it. Word-level
|
|
7
|
+
* refinement inside a changed line is deliberately absent: it makes a small
|
|
8
|
+
* edit prettier and a large one unreadable, and documents are rewritten in
|
|
9
|
+
* paragraphs.
|
|
10
|
+
*
|
|
11
|
+
* THE TABLE RATHER THAN MYERS, and [MAX_DIFF_LINES] is what pays for that
|
|
12
|
+
* choice. The table is quadratic on every input, but it is a dozen lines
|
|
13
|
+
* anybody can check by reading; the cap keeps the quadratic term small, and a
|
|
14
|
+
* document past it is reported as a whole replacement rather than freezing the
|
|
15
|
+
* tab.
|
|
16
|
+
*
|
|
17
|
+
* FRAMEWORK FREE. Nothing here imports React, so a host can compute a diff in
|
|
18
|
+
* a worker or a test and hand the sections to [DiffView].
|
|
19
|
+
*/
|
|
20
|
+
/** One line of the result. `same` lines carry both numbers. */
|
|
21
|
+
export interface DiffLine {
|
|
22
|
+
kind: 'same' | 'add' | 'remove';
|
|
23
|
+
text: string;
|
|
24
|
+
/** 1-based line number in the OLD document, or null on an addition. */
|
|
25
|
+
before: number | null;
|
|
26
|
+
/** 1-based line number in the NEW document, or null on a removal. */
|
|
27
|
+
after: number | null;
|
|
28
|
+
}
|
|
29
|
+
/** What a diff amounts to, for a one-line summary above it. */
|
|
30
|
+
export interface DiffStat {
|
|
31
|
+
added: number;
|
|
32
|
+
removed: number;
|
|
33
|
+
/** True when the two documents are identical, which is a real outcome. */
|
|
34
|
+
identical: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A run of lines kept for display, and how many unchanged lines were dropped
|
|
38
|
+
* before it. The gap is a count rather than a marker line, so the renderer
|
|
39
|
+
* decides what a gap looks like.
|
|
40
|
+
*/
|
|
41
|
+
export interface DiffSection {
|
|
42
|
+
/** The lines of this section, in order. */
|
|
43
|
+
lines: DiffLine[];
|
|
44
|
+
/** How many unchanged lines were dropped BEFORE this section. */
|
|
45
|
+
skipped: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The size past which the table is not worth building.
|
|
49
|
+
*
|
|
50
|
+
* SIZED FROM THE TABLE'S MEMORY, because that is the quantity that binds and
|
|
51
|
+
* it is paid on every input: `(N+1)` rows of `(M+1)` `Uint32` entries, every
|
|
52
|
+
* cell filled. At two thousand lines that is about 16 MB and 60 ms, which a
|
|
53
|
+
* tab holds without noticing; at ten thousand it is hundreds of megabytes and
|
|
54
|
+
* seconds on the main thread. Raising it means replacing the table with Myers
|
|
55
|
+
* or Hirschberg first.
|
|
56
|
+
*/
|
|
57
|
+
export declare const MAX_DIFF_LINES = 2000;
|
|
58
|
+
/**
|
|
59
|
+
* Split a document into the lines a diff compares.
|
|
60
|
+
*
|
|
61
|
+
* A trailing newline is not a line. Every file that ends properly has one, so
|
|
62
|
+
* counting it would report an added last line on every document that gained
|
|
63
|
+
* one. Both line endings read as one.
|
|
64
|
+
*/
|
|
65
|
+
export declare function splitLines(text: string): string[];
|
|
66
|
+
/**
|
|
67
|
+
* The line diff of two documents: every line of the result in order, context
|
|
68
|
+
* included, because a document diff is read as a document rather than as a
|
|
69
|
+
* patch.
|
|
70
|
+
*/
|
|
71
|
+
export declare function diffLines(before: string, after: string): DiffLine[];
|
|
72
|
+
/**
|
|
73
|
+
* Count the additions and removals, and say when there are none: identical is
|
|
74
|
+
* its own answer, not "0 added, 0 removed".
|
|
75
|
+
*/
|
|
76
|
+
export declare function diffStat(diff: readonly DiffLine[]): DiffStat;
|
|
77
|
+
/**
|
|
78
|
+
* Drop the runs of unchanged lines a reader does not need, keeping `context`
|
|
79
|
+
* lines either side of every change.
|
|
80
|
+
*
|
|
81
|
+
* A HOLE IS REPORTED, never silently closed: each section carries how many
|
|
82
|
+
* lines were dropped before it, so a reader can tell a document with two edits
|
|
83
|
+
* at its ends from one rewritten in the middle.
|
|
84
|
+
*/
|
|
85
|
+
export declare function collapseDiff(diff: readonly DiffLine[], context?: number): DiffSection[];
|
|
86
|
+
/**
|
|
87
|
+
* The first `max` changed lines of a collapsed diff, and how many changed
|
|
88
|
+
* lines are left out: what a preview of a save shows, with the count that says
|
|
89
|
+
* it is one. An unchanged context line is drawn and not counted.
|
|
90
|
+
*
|
|
91
|
+
* A COUNT, never a quiet cut: a preview ending at its sixth line reads as a
|
|
92
|
+
* save that changed six lines.
|
|
93
|
+
*/
|
|
94
|
+
export declare function firstChangedLines(sections: readonly DiffSection[], max: number): {
|
|
95
|
+
sections: DiffSection[];
|
|
96
|
+
more: number;
|
|
97
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import './DiffView.css';
|
|
2
|
+
export { DiffView, DiffSummary, DIFF_VIEW_LABELS, DIFF_SUMMARY_LABELS } from './DiffView.js';
|
|
3
|
+
export type { DiffViewLabels, DiffViewProps, DiffSummaryLabels, DiffSummaryProps } from './DiffView.js';
|
|
4
|
+
export { MAX_DIFF_LINES, collapseDiff, diffLines, diffStat, firstChangedLines, splitLines } from './diff.js';
|
|
5
|
+
export type { DiffLine, DiffSection, DiffStat } from './diff.js';
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/* DiffView: a line diff, monospace and line-numbered on both sides.
|
|
2
|
+
|
|
3
|
+
A changed line is marked three ways, a tint, a drawn mark and a word read
|
|
4
|
+
in its place, because colour alone is not a signal and a printed or
|
|
5
|
+
forced-colours render loses the tint entirely. The tint is the soft step of
|
|
6
|
+
the state and the mark the matching ink step, the pairing the palette suite
|
|
7
|
+
measures. */
|
|
8
|
+
.crewlet-diff-view {
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
border: 1px solid var(--color-border-default);
|
|
11
|
+
border-radius: var(--radius-sm);
|
|
12
|
+
font-family: var(--font-family-mono);
|
|
13
|
+
font-size: var(--font-size-xs);
|
|
14
|
+
line-height: var(--font-line-height-normal);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.crewlet-diff-view__section + .crewlet-diff-view__section,
|
|
18
|
+
.crewlet-diff-view__skip + .crewlet-diff-view__line {
|
|
19
|
+
border-top: 1px solid var(--color-border-default);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* A GAP SAYS WHAT IT STANDS FOR. Silently closed, a document edited at both
|
|
23
|
+
ends looks like one rewritten in the middle. */
|
|
24
|
+
.crewlet-diff-view__skip {
|
|
25
|
+
padding: var(--spacing-1) var(--spacing-3);
|
|
26
|
+
background: var(--color-surface-elevated);
|
|
27
|
+
color: var(--color-text-tertiary);
|
|
28
|
+
font-family: var(--font-family-sans);
|
|
29
|
+
font-size: var(--font-size-xs);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.crewlet-diff-view__line {
|
|
33
|
+
display: grid;
|
|
34
|
+
grid-template-columns: 3.5ch 3.5ch 2ch minmax(0, 1fr);
|
|
35
|
+
gap: var(--spacing-2);
|
|
36
|
+
padding: calc(var(--spacing-1) / 4) var(--spacing-3) calc(var(--spacing-1) / 4) var(--spacing-2);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.crewlet-diff-view__number {
|
|
40
|
+
color: var(--color-text-tertiary);
|
|
41
|
+
text-align: right;
|
|
42
|
+
user-select: none;
|
|
43
|
+
font-variant-numeric: tabular-nums;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.crewlet-diff-view__mark {
|
|
47
|
+
text-align: center;
|
|
48
|
+
user-select: none;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.crewlet-diff-view__text {
|
|
52
|
+
white-space: pre-wrap;
|
|
53
|
+
overflow-wrap: anywhere;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.crewlet-diff-view__line--add {
|
|
57
|
+
background: var(--color-feedback-success-soft);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.crewlet-diff-view__line--add .crewlet-diff-view__mark {
|
|
61
|
+
color: var(--color-feedback-success-ink);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.crewlet-diff-view__line--remove {
|
|
65
|
+
background: var(--color-feedback-danger-soft);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.crewlet-diff-view__line--remove .crewlet-diff-view__mark {
|
|
69
|
+
color: var(--color-feedback-danger-ink);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* DiffSummary: the size of the change, in the same inks as its lines. */
|
|
73
|
+
.crewlet-diff-summary {
|
|
74
|
+
margin: 0;
|
|
75
|
+
color: var(--color-text-secondary);
|
|
76
|
+
font-size: var(--font-size-compact);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.crewlet-diff-summary__added,
|
|
80
|
+
.crewlet-diff-summary__removed {
|
|
81
|
+
font-family: var(--font-family-mono);
|
|
82
|
+
font-variant-numeric: tabular-nums;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.crewlet-diff-summary__added {
|
|
86
|
+
color: var(--color-feedback-success-ink);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.crewlet-diff-summary__removed {
|
|
90
|
+
color: var(--color-feedback-danger-ink);
|
|
91
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { LinkInterstitial, openExternal } from '../chunk-
|
|
2
|
-
import '../chunk-7IJARUIF.js';
|
|
1
|
+
export { LinkInterstitial, openExternal } from '../chunk-ZM7HLFOA.js';
|
|
3
2
|
import '../chunk-5CLW2CXT.js';
|
|
3
|
+
import '../chunk-F4DPAJCN.js';
|
|
4
4
|
import '../chunk-SVSCLHHI.js';
|
|
5
|
-
import '../chunk-OG6CL3EB.js';
|
|
6
5
|
import '../chunk-PQADV6P6.js';
|
|
6
|
+
import '../chunk-OG6CL3EB.js';
|
|
7
7
|
import '../chunk-HMPFGIWM.js';
|
|
8
8
|
import '../chunk-R25RGPUB.js';
|
|
9
9
|
import '../chunk-4FQT6ZAY.js';
|
package/dist/Menu/Menu.d.ts
CHANGED
|
@@ -53,10 +53,19 @@
|
|
|
53
53
|
* - IT CAN BE OPENED FROM OUTSIDE (`open`, `onOpenChange`), because a tree item
|
|
54
54
|
* that holds focus opens its card's menu from the keyboard while the trigger
|
|
55
55
|
* itself is out of the tab order (`triggerTabIndex={-1}`).
|
|
56
|
+
* - ITS TRIGGER CAN BE THE CALLER'S OWN (`renderTrigger`): a row that IS the
|
|
57
|
+
* way in, such as the signed-in reader at the foot of the rail, opens the
|
|
58
|
+
* menu itself rather than sitting beside a second button that does. The
|
|
59
|
+
* caller spreads the props it is handed on its element, which keeps every
|
|
60
|
+
* rule above, the focus coming back included.
|
|
61
|
+
* - A HEADER SAYS WHAT THE ACTIONS ARE ABOUT (`header`): a line of facts
|
|
62
|
+
* above the items, such as the access a signed-in reader carries. It is
|
|
63
|
+
* not an item, so the arrows never stop on it, and the menu is described by
|
|
64
|
+
* it, so a screen reader hears it when the menu opens.
|
|
56
65
|
*
|
|
57
66
|
* Ported from the engine dashboard's `ui/Menu.tsx`, with its suite.
|
|
58
67
|
*/
|
|
59
|
-
import { type ReactNode } from 'react';
|
|
68
|
+
import { type KeyboardEvent, type ReactNode } from 'react';
|
|
60
69
|
import { type ButtonVariant } from '../Button/index.js';
|
|
61
70
|
export interface MenuItem {
|
|
62
71
|
kind?: 'item';
|
|
@@ -97,6 +106,16 @@ type Run = {
|
|
|
97
106
|
};
|
|
98
107
|
/** Gathers each run of consecutive answers (items given `checked`) into one group. */
|
|
99
108
|
export declare function runs(entries: readonly MenuEntry[]): Run[];
|
|
109
|
+
/** What a caller's own trigger spreads on its element (`renderTrigger`). */
|
|
110
|
+
export interface MenuTriggerProps {
|
|
111
|
+
ref: (el: HTMLElement | null) => void;
|
|
112
|
+
'aria-haspopup': 'menu';
|
|
113
|
+
'aria-expanded': boolean;
|
|
114
|
+
'aria-controls': string | undefined;
|
|
115
|
+
tabIndex: number | undefined;
|
|
116
|
+
onClick: () => void;
|
|
117
|
+
onKeyDown: (event: KeyboardEvent<HTMLElement>) => void;
|
|
118
|
+
}
|
|
100
119
|
export interface MenuProps {
|
|
101
120
|
/** The trigger's accessible name, such as "Actions for Software Engineer". */
|
|
102
121
|
label: string;
|
|
@@ -112,7 +131,14 @@ export interface MenuProps {
|
|
|
112
131
|
onOpenChange?: ((open: boolean) => void) | undefined;
|
|
113
132
|
/** Which edge of the trigger the menu lines up with. */
|
|
114
133
|
align?: 'start' | 'end' | undefined;
|
|
134
|
+
/**
|
|
135
|
+
* The caller's own trigger, in place of the menu's button: an element given
|
|
136
|
+
* these props. `label` still names the menu; the trigger names itself.
|
|
137
|
+
*/
|
|
138
|
+
renderTrigger?: ((props: MenuTriggerProps) => ReactNode) | undefined;
|
|
139
|
+
/** Facts above the items: what the actions are about. Never an item. */
|
|
140
|
+
header?: ReactNode;
|
|
115
141
|
className?: string | undefined;
|
|
116
142
|
}
|
|
117
|
-
export declare function Menu({ label, items, icon, trigger, triggerVariant, triggerTabIndex, open: controlled, onOpenChange, align, className, }: MenuProps): import("react").JSX.Element;
|
|
143
|
+
export declare function Menu({ label, items, icon, trigger, triggerVariant, triggerTabIndex, open: controlled, onOpenChange, align, renderTrigger, header, className, }: MenuProps): import("react").JSX.Element;
|
|
118
144
|
export {};
|
package/dist/Menu/index.d.ts
CHANGED
package/dist/Menu/index.js
CHANGED
|
@@ -219,6 +219,21 @@
|
|
|
219
219
|
font-size: var(--font-size-xs);
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
+
/*
|
|
223
|
+
* Facts above the items, across the panel's full width with a hairline under
|
|
224
|
+
* them: what the actions below are about, read rather than pressed.
|
|
225
|
+
*/
|
|
226
|
+
.crewlet-menu__header {
|
|
227
|
+
display: flex;
|
|
228
|
+
flex-direction: column;
|
|
229
|
+
gap: var(--spacing-1);
|
|
230
|
+
margin: calc(var(--spacing-1) * -1) calc(var(--spacing-1) * -1) var(--spacing-1);
|
|
231
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
232
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
233
|
+
font-size: var(--font-size-xs);
|
|
234
|
+
color: var(--color-text-secondary);
|
|
235
|
+
}
|
|
236
|
+
|
|
222
237
|
.crewlet-menu__separator {
|
|
223
238
|
height: 1px;
|
|
224
239
|
margin: var(--spacing-1) 0;
|
package/dist/Modal/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ConfirmModal, Modal } from '../chunk-
|
|
2
|
-
import '../chunk-OG6CL3EB.js';
|
|
1
|
+
export { ConfirmModal, Modal } from '../chunk-F4DPAJCN.js';
|
|
3
2
|
import '../chunk-PQADV6P6.js';
|
|
3
|
+
import '../chunk-OG6CL3EB.js';
|
|
4
4
|
import '../chunk-HMPFGIWM.js';
|
|
5
5
|
import '../chunk-R25RGPUB.js';
|
|
6
6
|
import '../chunk-4FQT6ZAY.js';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type PresenceLabels, type PresenceMember } from '../PresenceModel/index.js';
|
|
3
|
+
/** The reader, drawn first as "You". */
|
|
4
|
+
export type PeopleRailSelf = Pick<PresenceMember, 'name' | 'kind' | 'character' | 'hue' | 'src'>;
|
|
5
|
+
export interface PeopleRailLabels {
|
|
6
|
+
title: string;
|
|
7
|
+
close: string;
|
|
8
|
+
you: string;
|
|
9
|
+
nobody: string;
|
|
10
|
+
follow: string;
|
|
11
|
+
following: string;
|
|
12
|
+
/** The Follow control's accessible name, which names whom it follows. */
|
|
13
|
+
followName: (name: string) => string;
|
|
14
|
+
stopFollowingName: (name: string) => string;
|
|
15
|
+
/** The activity word under a name with no location: "Editing", "Reading". */
|
|
16
|
+
activity: PresenceLabels['activity'];
|
|
17
|
+
}
|
|
18
|
+
export declare const PEOPLE_RAIL_LABELS: PeopleRailLabels;
|
|
19
|
+
export interface PeopleRailProps {
|
|
20
|
+
/** Everybody present but the reader. Two tabs of one seat are listed once, the most active. */
|
|
21
|
+
members: readonly PresenceMember[];
|
|
22
|
+
/** The reader, listed first as "You". */
|
|
23
|
+
self?: PeopleRailSelf | undefined;
|
|
24
|
+
/** The key of the followed member: its `seat`, or its `id` where it has none. */
|
|
25
|
+
following?: string | undefined;
|
|
26
|
+
/** Follow a member, or `null` to stop. Without it the rail offers no Follow controls. */
|
|
27
|
+
onFollow?: ((member: PresenceMember | null) => void) | undefined;
|
|
28
|
+
/** Close the rail. Without it the rail draws no close control. */
|
|
29
|
+
onClose?: (() => void) | undefined;
|
|
30
|
+
/** Further controls for one member, before Follow: "Open turn" for an agent at work. */
|
|
31
|
+
actions?: ((member: PresenceMember) => ReactNode) | undefined;
|
|
32
|
+
labels?: Partial<PeopleRailLabels> | undefined;
|
|
33
|
+
className?: string | undefined;
|
|
34
|
+
}
|
|
35
|
+
/** What identifies a member for following: the seat, so a second tab of the same person stays followed. */
|
|
36
|
+
export declare function peopleRailKey(member: Pick<PresenceMember, 'id' | 'seat'>): string;
|
|
37
|
+
/**
|
|
38
|
+
* Who is in a shared document now, what each is doing and where, with Follow
|
|
39
|
+
* beside everybody but the reader.
|
|
40
|
+
*
|
|
41
|
+
* THE SAME FACTS AS THE PRESENCE STACK, IN WORDS. A ring, a cursor and a cell
|
|
42
|
+
* outline are decorative to assistive technology, so this list is where a
|
|
43
|
+
* screen reader user learns who is here and where. It is ordered the way the
|
|
44
|
+
* stack is (people editing, agents editing, people viewing, agents reading,
|
|
45
|
+
* anybody idle last), so the two never disagree about who comes first.
|
|
46
|
+
*
|
|
47
|
+
* FOLLOW IS A TOGGLE, pressed while following, and its name says whom it
|
|
48
|
+
* follows or stops following, because a column of buttons all called "Follow"
|
|
49
|
+
* is a column of identical controls to a screen reader. The strip that says
|
|
50
|
+
* the reader is following is `FollowBanner`, which the host draws.
|
|
51
|
+
*/
|
|
52
|
+
export declare function PeopleRail({ members, self, following, onFollow, onClose, actions, labels: overrides, className, }: PeopleRailProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { PEOPLE_RAIL_LABELS, PeopleRail, peopleRailKey } from '../chunk-J4OKGJQ6.js';
|
|
2
|
+
import '../chunk-CENOOTAV.js';
|
|
3
|
+
import '../chunk-S35G6PNC.js';
|
|
4
|
+
import '../chunk-UAN5NE7M.js';
|
|
5
|
+
import '../chunk-AYKXMIOR.js';
|
|
6
|
+
import '../chunk-5OM447RW.js';
|
|
7
|
+
import '../chunk-PQADV6P6.js';
|
|
8
|
+
import '../chunk-OG6CL3EB.js';
|
|
9
|
+
import '../chunk-4FQT6ZAY.js';
|
|
10
|
+
import '../chunk-BZFWDIV6.js';
|
|
11
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* PeopleRail: a raised column of everybody present, one row a person, the
|
|
2
|
+
name over what they are doing and the controls at the row's end. */
|
|
3
|
+
.crewlet-people-rail {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
gap: var(--spacing-3);
|
|
7
|
+
min-width: 0;
|
|
8
|
+
padding: var(--spacing-3);
|
|
9
|
+
border: 1px solid var(--color-border-default);
|
|
10
|
+
border-radius: var(--radius-md);
|
|
11
|
+
background: var(--color-surface-elevated);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.crewlet-people-rail__head {
|
|
15
|
+
display: flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
justify-content: space-between;
|
|
18
|
+
gap: var(--spacing-2);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.crewlet-people-rail__title {
|
|
22
|
+
margin: 0;
|
|
23
|
+
color: var(--color-text-primary);
|
|
24
|
+
font-size: var(--font-size-sm);
|
|
25
|
+
font-weight: var(--font-weight-semibold);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.crewlet-people-rail__list {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
gap: var(--spacing-2);
|
|
32
|
+
margin: 0;
|
|
33
|
+
padding: 0;
|
|
34
|
+
list-style: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.crewlet-people-rail__person {
|
|
38
|
+
display: flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
gap: var(--spacing-2);
|
|
41
|
+
min-width: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.crewlet-people-rail__text {
|
|
45
|
+
display: flex;
|
|
46
|
+
flex: 1;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
min-width: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.crewlet-people-rail__name {
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
color: var(--color-text-primary);
|
|
54
|
+
text-overflow: ellipsis;
|
|
55
|
+
white-space: nowrap;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.crewlet-people-rail__where {
|
|
59
|
+
color: var(--color-text-tertiary);
|
|
60
|
+
font-size: var(--font-size-compact);
|
|
61
|
+
overflow-wrap: anywhere;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.crewlet-people-rail__actions {
|
|
65
|
+
display: flex;
|
|
66
|
+
flex-wrap: wrap;
|
|
67
|
+
justify-content: flex-end;
|
|
68
|
+
gap: var(--spacing-1);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.crewlet-people-rail__note {
|
|
72
|
+
margin: 0;
|
|
73
|
+
color: var(--color-text-tertiary);
|
|
74
|
+
font-size: var(--font-size-compact);
|
|
75
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-
|
|
1
|
+
export { ARTIFACT_ROLES, SHAREABLE_ROLES, ShareDialog, roleAtLeast } from '../chunk-XMGB3ZAT.js';
|
|
2
2
|
import '../chunk-FC4YTTFJ.js';
|
|
3
3
|
import '../chunk-W46LPU4R.js';
|
|
4
4
|
import '../chunk-STJ7QBC3.js';
|
|
5
5
|
import '../chunk-DTIW4CHZ.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-F4DPAJCN.js';
|
|
7
7
|
import '../chunk-F73MC7EZ.js';
|
|
8
8
|
import '../chunk-SVSCLHHI.js';
|
|
9
|
-
import '../chunk-OG6CL3EB.js';
|
|
10
9
|
import '../chunk-4KP4RC3O.js';
|
|
11
10
|
import '../chunk-UAN5NE7M.js';
|
|
12
11
|
import '../chunk-5OM447RW.js';
|
|
13
12
|
import '../chunk-PQADV6P6.js';
|
|
14
13
|
import '../chunk-IG75YMUN.js';
|
|
14
|
+
import '../chunk-OG6CL3EB.js';
|
|
15
15
|
import '../chunk-HMPFGIWM.js';
|
|
16
16
|
import '../chunk-R25RGPUB.js';
|
|
17
17
|
import '../chunk-4FQT6ZAY.js';
|
package/dist/SheetGrid/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-
|
|
1
|
+
export { CellDisplay, CellEditor, CheckboxCell, DateCell, LongTextCell, MultiSelectCell, NumberCell, PersonCell, RatingCell, SelectCell, SheetCell, SheetGrid, StatusCell, TextCell, UrlCell } from '../chunk-36CWC2NH.js';
|
|
2
|
+
import '../chunk-CENOOTAV.js';
|
|
2
3
|
import '../chunk-GFV4LJHH.js';
|
|
3
4
|
import '../chunk-WIATRXEJ.js';
|
|
4
|
-
import '../chunk-CENOOTAV.js';
|
|
5
5
|
import '../chunk-3BYIWOTV.js';
|
|
6
6
|
import '../chunk-I6POAB4V.js';
|
|
7
|
-
import '../chunk-OG6CL3EB.js';
|
|
8
7
|
import '../chunk-PPAQFGS2.js';
|
|
9
8
|
import '../chunk-YYZRLLLY.js';
|
|
10
9
|
import '../chunk-S35G6PNC.js';
|
|
@@ -12,6 +11,7 @@ import '../chunk-QWOPX2MN.js';
|
|
|
12
11
|
import '../chunk-UAN5NE7M.js';
|
|
13
12
|
import '../chunk-AYKXMIOR.js';
|
|
14
13
|
import '../chunk-5OM447RW.js';
|
|
14
|
+
import '../chunk-OG6CL3EB.js';
|
|
15
15
|
import '../chunk-HMPFGIWM.js';
|
|
16
16
|
import '../chunk-R25RGPUB.js';
|
|
17
17
|
import '../chunk-BZFWDIV6.js';
|
package/dist/Switcher/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { Switcher } from '../chunk-
|
|
1
|
+
export { Switcher } from '../chunk-7X5WOECO.js';
|
|
2
2
|
import '../chunk-W5J7R5EB.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-F4DPAJCN.js';
|
|
4
4
|
import '../chunk-F73MC7EZ.js';
|
|
5
|
-
import '../chunk-OG6CL3EB.js';
|
|
6
5
|
import '../chunk-Q55TXPA3.js';
|
|
7
6
|
import '../chunk-BWRGFKJP.js';
|
|
8
7
|
import '../chunk-FYTIJM2T.js';
|
|
9
8
|
import '../chunk-PQADV6P6.js';
|
|
10
9
|
import '../chunk-IG75YMUN.js';
|
|
10
|
+
import '../chunk-OG6CL3EB.js';
|
|
11
11
|
import '../chunk-HMPFGIWM.js';
|
|
12
12
|
import '../chunk-R25RGPUB.js';
|
|
13
13
|
import '../chunk-RSAQOKH3.js';
|