@crewlethq/ui 0.18.0 → 0.20.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 +40 -4
- package/dist/AccessDeniedCard/index.js +2 -2
- package/dist/AppShell/index.js +2 -2
- package/dist/ArrangeBoard/ArrangeBoard.d.ts +32 -0
- package/dist/ArrangeBoard/index.d.ts +3 -0
- package/dist/ArrangeBoard/index.js +2 -0
- package/dist/ArrangeBoard-MQE35P6Z.css +80 -0
- package/dist/ArrangeFrame/ArrangeFrame.d.ts +82 -0
- package/dist/ArrangeFrame/index.d.ts +5 -0
- package/dist/ArrangeFrame/index.js +5 -0
- package/dist/ArrangeFrame/useGridResize.d.ts +66 -0
- package/dist/ArrangeFrame-3PLZAG22.css +329 -0
- package/dist/ArrangeGroup/ArrangeGroup.d.ts +42 -0
- package/dist/ArrangeGroup/index.d.ts +3 -0
- package/dist/ArrangeGroup/index.js +4 -0
- package/dist/ArrangeGroup-SHFHA7BE.css +170 -0
- package/dist/ArrangeList/ArrangeList.d.ts +64 -0
- package/dist/ArrangeList/index.d.ts +3 -0
- package/dist/ArrangeList/index.js +10 -0
- package/dist/ArrangeList-NNRTDFI5.css +94 -0
- package/dist/ArtifactCard/index.js +2 -2
- package/dist/AuthLayout/index.js +2 -2
- package/dist/AvatarPicker/index.js +4 -4
- package/dist/Canvas/index.js +2 -2
- package/dist/Card/index.js +1 -1
- package/dist/Checkbox/index.js +3 -3
- package/dist/Combobox/index.js +4 -4
- package/dist/CommandPalette/index.js +6 -6
- 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/Composer/index.js +3 -3
- package/dist/ConfirmField/index.js +3 -3
- 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 +8 -8
- package/dist/DataView/index.js +13 -13
- package/dist/DateTimePicker/index.js +3 -3
- 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/Divider/Divider.d.ts +15 -0
- package/dist/Divider/index.d.ts +3 -0
- package/dist/Divider/index.js +2 -0
- package/dist/Divider-3Z77ZAJH.css +37 -0
- package/dist/HuePicker/HuePicker.d.ts +16 -4
- package/dist/HuePicker/index.js +2 -2
- package/dist/{HuePicker-5QIUR6L7.css → HuePicker-PAIGH6LR.css} +6 -0
- package/dist/IconTile/IconTile.d.ts +23 -0
- package/dist/IconTile/index.d.ts +3 -0
- package/dist/IconTile/index.js +2 -0
- package/dist/IconTile-4GNWTLAW.css +30 -0
- package/dist/Input/index.js +2 -2
- package/dist/LinkInterstitial/index.js +4 -4
- package/dist/ListInput/index.js +5 -5
- package/dist/MarkdownEditor/index.js +2 -2
- package/dist/Menu/index.js +2 -2
- package/dist/Modal/Modal.d.ts +20 -0
- package/dist/Modal/index.js +3 -3
- package/dist/{Modal-RQAYGG4L.css → Modal-XOSV6FAH.css} +14 -0
- package/dist/Note/Note.d.ts +23 -0
- package/dist/Note/index.d.ts +3 -0
- package/dist/Note/index.js +2 -0
- package/dist/Note-RT4L6VUT.css +58 -0
- package/dist/OrgTable/index.js +5 -5
- 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/PinTile/PinTile.d.ts +37 -0
- package/dist/PinTile/index.d.ts +3 -0
- package/dist/PinTile/index.js +4 -0
- package/dist/PinTile-IIA25MNZ.css +141 -0
- package/dist/PresenceStack/index.js +1 -1
- package/dist/PrincipalPicker/index.js +5 -5
- package/dist/Reorder/index.d.ts +2 -0
- package/dist/Reorder/index.js +4 -0
- package/dist/Reorder/useReorder.d.ts +138 -0
- package/dist/ShareDialog/index.js +7 -7
- package/dist/SheetGrid/index.js +5 -5
- package/dist/StatGroup/StatGroup.d.ts +7 -1
- package/dist/StatGroup/index.js +1 -1
- package/dist/{StatGroup-HVG6O62W.css → StatGroup-PADTJCUQ.css} +7 -0
- package/dist/Switcher/index.js +8 -8
- 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/TagsInput/index.js +3 -3
- package/dist/TimeWindowPicker/index.js +5 -5
- package/dist/TreeCanvas/index.js +3 -3
- package/dist/TreeGrid/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/chunk-35XVR5JQ.js +81 -0
- package/dist/chunk-63WJLRB2.js +24 -0
- package/dist/{chunk-L4ZLXYPO.js → chunk-6A7P6II6.js} +1 -1
- package/dist/chunk-6KWNXIDE.js +18 -0
- package/dist/chunk-6MIXD6IW.js +49 -0
- package/dist/chunk-73QBUUYX.js +102 -0
- package/dist/{chunk-NZY77ZDU.js → chunk-7FQEUNHX.js} +4 -4
- package/dist/{chunk-2TZATTIU.js → chunk-7IJARUIF.js} +18 -5
- package/dist/{chunk-A7EBCHEG.js → chunk-A4VMJMXJ.js} +1 -1
- package/dist/chunk-AIVZVKYZ.js +126 -0
- package/dist/{chunk-76FXDZAZ.js → chunk-AJESMWJS.js} +4 -4
- package/dist/chunk-BVWSLXTY.js +187 -0
- package/dist/chunk-DEJHAOC5.js +279 -0
- package/dist/{chunk-ERV5BUS3.js → chunk-EIGEIT4O.js} +3 -3
- package/dist/chunk-EZBLOUWX.js +176 -0
- package/dist/chunk-FFMCMSJB.js +1 -0
- package/dist/{chunk-LFZ45HV2.js → chunk-G3EEUNZQ.js} +1 -1
- package/dist/{chunk-2YR5ZPQ3.js → chunk-HTCJSUIZ.js} +3 -3
- package/dist/{chunk-75CLJNDQ.js → chunk-I6NZKJGK.js} +1 -1
- package/dist/chunk-IXJHTFXG.js +17 -0
- package/dist/{chunk-3UAA4IWJ.js → chunk-JEDWC3GI.js} +1 -1
- package/dist/{chunk-QVAFL2LE.js → chunk-JXRI5YD2.js} +3 -3
- package/dist/{chunk-ZFH7H7GS.js → chunk-LOLELDBW.js} +1 -1
- package/dist/chunk-MUGM7SEG.js +88 -0
- package/dist/chunk-N4GFRW5C.js +96 -0
- package/dist/{chunk-KVT3TJVG.js → chunk-OIMAK5AE.js} +6 -6
- package/dist/chunk-QO7QEQKV.js +24 -0
- package/dist/{chunk-BOW2VUCH.js → chunk-T7ICFXEC.js} +1 -1
- package/dist/{chunk-2OLCUNG7.js → chunk-TBIZSQHB.js} +1 -1
- package/dist/{chunk-4U3GQ7D2.js → chunk-TODND5AD.js} +1 -1
- package/dist/chunk-UO7JZVCO.js +35 -0
- package/dist/{chunk-IFKBDRNJ.js → chunk-UXELEORU.js} +3 -3
- package/dist/{chunk-6NIMZ5XC.js → chunk-VJLYGPPE.js} +1 -1
- package/dist/{chunk-7QFAORCY.js → chunk-WHZFDS62.js} +1 -1
- package/dist/chunk-XJ2QEBMM.js +277 -0
- package/dist/{chunk-PA4CYTBY.js → chunk-XU4ZUGLE.js} +19 -4
- package/dist/{chunk-T3ZWBZ65.js → chunk-YSJYWQSP.js} +2 -2
- package/dist/{chunk-CXBAIVYZ.js → chunk-YSY6UJ4F.js} +1 -1
- package/dist/{chunk-EG6NYWVK.js → chunk-YZCJ63JF.js} +1 -1
- package/dist/generated/index.d.ts +15 -0
- package/dist/generated/index.js +89 -74
- package/dist/index.js +89 -74
- package/dist/styles.css +1533 -70
- package/package.json +3 -3
- package/dist/chunk-EXHQ2QVW.js +0 -1
- package/dist/{chunk-AQCV62K6.js → chunk-7ZNKEPLN.js} +1 -1
- package/dist/{chunk-OYOQU7O5.js → chunk-EDGCPVVD.js} +1 -1
- package/dist/{chunk-FYXRWBJJ.js → chunk-J2G4HGQM.js} +1 -1
- package/dist/{chunk-NS7BVLL3.js → chunk-JULMZNGT.js} +1 -1
- package/dist/{chunk-5NVKTB6E.js → chunk-L4H7SSWF.js} +1 -1
- package/dist/{chunk-ESKP3TXM.js → chunk-MSSZHDZI.js} +0 -0
- package/dist/{chunk-4GB57WIT.js → chunk-Q55TXPA3.js} +1 -1
- package/dist/{chunk-B2Z2CDM5.js → chunk-T5TFZ2JB.js} +1 -1
- package/dist/{chunk-AMH67MLM.js → chunk-TXAFKH2A.js} +1 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { type AvatarKind, type AvatarSizeStep } from '../Avatar/index.js';
|
|
3
|
+
import { type TimeValue } from '../RelativeTime/index.js';
|
|
4
|
+
import type { Tone } from '../utils/tone.js';
|
|
5
|
+
export interface TableKeyCellProps {
|
|
6
|
+
/** The identifier: a key, a handle, an id. Its whole value is the cell's title. */
|
|
7
|
+
value: string | null | undefined;
|
|
8
|
+
/** What the cell prints where that is shorter than the value: an id cut to its head. */
|
|
9
|
+
text?: string | undefined;
|
|
10
|
+
/** Where the identifier goes. Without it the cell is plain text. */
|
|
11
|
+
href?: string | undefined;
|
|
12
|
+
/** What an absent identifier means, read in place of the dash. */
|
|
13
|
+
emptyLabel?: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* An identifier, monospaced, on ONE line, cut with its whole value on the
|
|
17
|
+
* title. An identifier is one token with no space to break at, so wrapping it
|
|
18
|
+
* at whatever character the column ran out on stood the row two lines tall and
|
|
19
|
+
* printed a key nobody could search for.
|
|
20
|
+
*/
|
|
21
|
+
export declare function TableKeyCell({ value, text, href, emptyLabel }: TableKeyCellProps): import("react").JSX.Element;
|
|
22
|
+
export interface TableNumberCellProps {
|
|
23
|
+
value: number | null | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* How the figure is spelled. The host's own formatter, so a cell never
|
|
26
|
+
* spells a figure differently from the rest of the screen. Defaults to the
|
|
27
|
+
* locale's grouping.
|
|
28
|
+
*/
|
|
29
|
+
format?: ((value: number) => string) | undefined;
|
|
30
|
+
/** Printed after the figure: " ms", "%". */
|
|
31
|
+
suffix?: string | undefined;
|
|
32
|
+
title?: string | undefined;
|
|
33
|
+
/** What an absent figure means. Absent is not zero. */
|
|
34
|
+
emptyLabel?: string | undefined;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A figure, tabular, and a marked absence when there is none.
|
|
38
|
+
*
|
|
39
|
+
* ABSENT IS NOT ZERO, which is the whole reason the cell exists: "nothing is
|
|
40
|
+
* recorded" and "nothing was spent" are different facts, and a column that
|
|
41
|
+
* draws both as `0` makes the first invisible. A duration or a token count is
|
|
42
|
+
* this cell with the host's formatter.
|
|
43
|
+
*/
|
|
44
|
+
export declare function TableNumberCell({ value, format, suffix, title, emptyLabel, }: TableNumberCellProps): import("react").JSX.Element;
|
|
45
|
+
export interface TableDateCellProps {
|
|
46
|
+
value: TimeValue | null | undefined;
|
|
47
|
+
/** Overrides the shared clock, for a story or a suite. */
|
|
48
|
+
now?: number | undefined;
|
|
49
|
+
/** What an absent instant means: "Never", "Not scheduled". */
|
|
50
|
+
emptyLabel?: string | undefined;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* An instant, relative in the cell and exact on hover: a table scanned for
|
|
54
|
+
* "what moved today" is read in relative time, and the exact instant is what
|
|
55
|
+
* somebody needs once they have found the row. It is [RelativeTime], kept on
|
|
56
|
+
* one line in the quiet ink a date column takes.
|
|
57
|
+
*/
|
|
58
|
+
export declare function TableDateCell({ value, now, emptyLabel }: TableDateCellProps): import("react").JSX.Element;
|
|
59
|
+
export interface TableEntityCellProps {
|
|
60
|
+
/** Who or what the row names. Absent, the cell is a marked absence. */
|
|
61
|
+
name: string | null | undefined;
|
|
62
|
+
/** Drawn as `Avatar` draws it: a squircle for an agent, a circle for a person. */
|
|
63
|
+
kind?: AvatarKind | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* A badge of the host's own in place of the initials badge, such as a
|
|
66
|
+
* `PrincipalAvatar` carrying an agent's character. It is drawn as
|
|
67
|
+
* decoration, because the name is printed beside it.
|
|
68
|
+
*/
|
|
69
|
+
badge?: ReactNode;
|
|
70
|
+
/**
|
|
71
|
+
* Where the name goes. Leave it out inside a row that is itself a link: an
|
|
72
|
+
* anchor inside an anchor is markup no browser agrees about.
|
|
73
|
+
*/
|
|
74
|
+
href?: string | undefined;
|
|
75
|
+
/** The hover text, where the name is not the whole story. */
|
|
76
|
+
title?: string | undefined;
|
|
77
|
+
size?: AvatarSizeStep | undefined;
|
|
78
|
+
emptyLabel?: string | undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A seat, a person or a team: the identity badge and the name, optionally a
|
|
82
|
+
* link to its page.
|
|
83
|
+
*
|
|
84
|
+
* ONE BADGE FOR ONE IDENTITY, the kit's `Avatar`, so the same person reads the
|
|
85
|
+
* same in every table. The badge is decorative, because the name is printed
|
|
86
|
+
* beside it: without that the row reads "Ada Lovelace avatar, Ada Lovelace".
|
|
87
|
+
*/
|
|
88
|
+
export declare function TableEntityCell({ name, kind, badge, href, title, size, emptyLabel, }: TableEntityCellProps): import("react").JSX.Element;
|
|
89
|
+
export interface TableStatusCellProps {
|
|
90
|
+
/** The state's word, always printed: a glyph is never the only carrier. */
|
|
91
|
+
label: string;
|
|
92
|
+
/**
|
|
93
|
+
* The state's mark: a character such as a filled or a hollow circle, or a
|
|
94
|
+
* glyph. Hidden from assistive technology, since the word says it.
|
|
95
|
+
*/
|
|
96
|
+
glyph: ReactNode;
|
|
97
|
+
tone?: Tone | undefined;
|
|
98
|
+
title?: string | undefined;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* A state's mark with its word, never colour alone.
|
|
102
|
+
*
|
|
103
|
+
* THE MARK IS THE CALLER'S, which is what sets it apart from `StatusDot`: half
|
|
104
|
+
* of what a status column says is a HOLLOW counterpart (filled against hollow
|
|
105
|
+
* for "running the active revision" against "nothing reported"), and a filled
|
|
106
|
+
* dot has no unfilled state. The tone colours the mark and never the word.
|
|
107
|
+
*/
|
|
108
|
+
export declare function TableStatusCell({ label, glyph, tone, title }: TableStatusCellProps): import("react").JSX.Element;
|
|
109
|
+
export interface TableTagsCellLabels {
|
|
110
|
+
/** The count of tags past `max`, read in full: "2 more tags". */
|
|
111
|
+
more: (count: number) => string;
|
|
112
|
+
}
|
|
113
|
+
export declare const TABLE_TAGS_CELL_LABELS: TableTagsCellLabels;
|
|
114
|
+
export interface TableTagsCellProps {
|
|
115
|
+
tags: readonly string[] | null | undefined;
|
|
116
|
+
/** How many tags are drawn before the rest are counted. Three by default. */
|
|
117
|
+
max?: number | undefined;
|
|
118
|
+
emptyLabel?: string | undefined;
|
|
119
|
+
labels?: Partial<TableTagsCellLabels> | undefined;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Tags, capped with a count rather than wrapping a row to three lines. Neutral
|
|
123
|
+
* and outlined: a tag names a thing, and identity takes no colour. The tags
|
|
124
|
+
* past the cap are named on the count's title and counted in words for a
|
|
125
|
+
* screen reader.
|
|
126
|
+
*/
|
|
127
|
+
export declare function TableTagsCell({ tags, max, emptyLabel, labels: overrides }: TableTagsCellProps): import("react").JSX.Element;
|
|
128
|
+
export type TableTextCellProps = {
|
|
129
|
+
children: ReactNode;
|
|
130
|
+
} & ({
|
|
131
|
+
/**
|
|
132
|
+
* A mark every row of the column wears, such as the column's own glyph.
|
|
133
|
+
* The header carries the meaning, so it is drawn as decoration.
|
|
134
|
+
*/
|
|
135
|
+
icon?: ReactNode;
|
|
136
|
+
mark?: never;
|
|
137
|
+
} | {
|
|
138
|
+
icon?: never;
|
|
139
|
+
/**
|
|
140
|
+
* A mark that varies per row and states a fact of its own (a bug, an
|
|
141
|
+
* epic), so it brings its own accessible name and is read.
|
|
142
|
+
*/
|
|
143
|
+
mark: ReactNode;
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* Plain text with an optional leading mark, cut on one line.
|
|
147
|
+
*
|
|
148
|
+
* TWO SPELLINGS OF ONE SLOT, because a column's mark and a row's mark are
|
|
149
|
+
* different facts: `icon` is the column's and is hidden, `mark` is the row's
|
|
150
|
+
* and is read. Exactly one of the two, enforced by the type: a cell given both
|
|
151
|
+
* would draw the column's answer over the row's.
|
|
152
|
+
*/
|
|
153
|
+
export declare function TableTextCell({ children, icon, mark }: TableTextCellProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import './TableCells.css';
|
|
2
|
+
export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell, } from './TableCells.js';
|
|
3
|
+
export type { TableDateCellProps, TableEntityCellProps, TableKeyCellProps, TableNumberCellProps, TableStatusCellProps, TableTagsCellLabels, TableTagsCellProps, TableTextCellProps, } from './TableCells.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { TABLE_TAGS_CELL_LABELS, TableDateCell, TableEntityCell, TableKeyCell, TableNumberCell, TableStatusCell, TableTagsCell, TableTextCell } from '../chunk-MUGM7SEG.js';
|
|
2
|
+
import '../chunk-GFV4LJHH.js';
|
|
3
|
+
import '../chunk-WIATRXEJ.js';
|
|
4
|
+
import '../chunk-FBSEJO2C.js';
|
|
5
|
+
import '../chunk-3CZ7XAVY.js';
|
|
6
|
+
import '../chunk-EUCC37WY.js';
|
|
7
|
+
import '../chunk-UAN5NE7M.js';
|
|
8
|
+
import '../chunk-5OM447RW.js';
|
|
9
|
+
import '../chunk-BZFWDIV6.js';
|
|
10
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/* The read-only table cells. Each one holds a single line and shrinks inside
|
|
2
|
+
its column (`min-width: 0`), so a long value is cut with an ellipsis and
|
|
3
|
+
its whole text on the title rather than standing the row two lines tall. */
|
|
4
|
+
|
|
5
|
+
.crewlet-table-cell__truncate {
|
|
6
|
+
min-width: 0;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
text-overflow: ellipsis;
|
|
9
|
+
white-space: nowrap;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* AN IDENTIFIER IS ONE LINE, cut with its value on the title rather than
|
|
13
|
+
broken at whichever character the column ran out on. Named with the link's
|
|
14
|
+
class as well, so a linked identifier keeps the block box whatever order
|
|
15
|
+
the two stylesheets load in. */
|
|
16
|
+
.crewlet-table-cell__key,
|
|
17
|
+
.crewlet-link.crewlet-table-cell__key {
|
|
18
|
+
display: block;
|
|
19
|
+
min-width: 0;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
text-overflow: ellipsis;
|
|
22
|
+
white-space: nowrap;
|
|
23
|
+
font-family: var(--font-family-mono);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.crewlet-table-cell__number {
|
|
27
|
+
font-variant-numeric: tabular-nums;
|
|
28
|
+
white-space: nowrap;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.crewlet-table-cell__date {
|
|
32
|
+
color: var(--color-text-tertiary);
|
|
33
|
+
white-space: nowrap;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.crewlet-table-cell__entity,
|
|
37
|
+
.crewlet-link.crewlet-table-cell__entity,
|
|
38
|
+
.crewlet-table-cell__status,
|
|
39
|
+
.crewlet-table-cell__text {
|
|
40
|
+
display: inline-flex;
|
|
41
|
+
align-items: center;
|
|
42
|
+
gap: var(--spacing-2);
|
|
43
|
+
min-width: 0;
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.crewlet-table-cell__status,
|
|
48
|
+
.crewlet-table-cell__text {
|
|
49
|
+
gap: calc(var(--spacing-1) * 1.5);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.crewlet-table-cell__badge,
|
|
53
|
+
.crewlet-table-cell__icon {
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
flex: none;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.crewlet-table-cell__icon {
|
|
59
|
+
color: var(--color-text-tertiary);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.crewlet-table-cell__glyph {
|
|
63
|
+
display: inline-flex;
|
|
64
|
+
flex: none;
|
|
65
|
+
font-size: var(--font-size-xs);
|
|
66
|
+
line-height: 1;
|
|
67
|
+
/* The quiet state is still a mark, so it takes the tertiary step: the
|
|
68
|
+
decoration step does not clear 3:1 on every ground. */
|
|
69
|
+
color: var(--color-text-tertiary);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.crewlet-table-cell__status--info .crewlet-table-cell__glyph {
|
|
73
|
+
color: var(--color-feedback-info);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.crewlet-table-cell__status--success .crewlet-table-cell__glyph {
|
|
77
|
+
color: var(--color-feedback-success);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.crewlet-table-cell__status--warning .crewlet-table-cell__glyph {
|
|
81
|
+
color: var(--color-feedback-warning);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.crewlet-table-cell__status--danger .crewlet-table-cell__glyph {
|
|
85
|
+
color: var(--color-feedback-danger);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.crewlet-table-cell__status--brand .crewlet-table-cell__glyph {
|
|
89
|
+
color: var(--color-brand-accent);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.crewlet-table-cell__tags {
|
|
93
|
+
display: inline-flex;
|
|
94
|
+
flex-wrap: wrap;
|
|
95
|
+
align-items: center;
|
|
96
|
+
gap: var(--spacing-1);
|
|
97
|
+
min-width: 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.crewlet-table-cell__more {
|
|
101
|
+
color: var(--color-text-secondary);
|
|
102
|
+
font-size: var(--font-size-xs);
|
|
103
|
+
font-variant-numeric: tabular-nums;
|
|
104
|
+
}
|
package/dist/TagsInput/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { TagsInput } from '../chunk-
|
|
1
|
+
export { TagsInput } from '../chunk-7ZNKEPLN.js';
|
|
2
2
|
import '../chunk-GFV4LJHH.js';
|
|
3
3
|
import '../chunk-WIATRXEJ.js';
|
|
4
4
|
import '../chunk-F73MC7EZ.js';
|
|
5
|
-
import '../chunk-RSAQOKH3.js';
|
|
6
|
-
import '../chunk-4FQT6ZAY.js';
|
|
7
5
|
import '../chunk-HMPFGIWM.js';
|
|
8
6
|
import '../chunk-R25RGPUB.js';
|
|
7
|
+
import '../chunk-RSAQOKH3.js';
|
|
8
|
+
import '../chunk-4FQT6ZAY.js';
|
|
9
9
|
import '../chunk-BZFWDIV6.js';
|
|
10
10
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-
|
|
1
|
+
export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-EIGEIT4O.js';
|
|
2
2
|
import '../chunk-FC4YTTFJ.js';
|
|
3
3
|
import '../chunk-F73MC7EZ.js';
|
|
4
|
-
import '../chunk-4GB57WIT.js';
|
|
5
|
-
import '../chunk-BWRGFKJP.js';
|
|
6
4
|
import '../chunk-GXQ3B46I.js';
|
|
7
5
|
import '../chunk-OG6CL3EB.js';
|
|
8
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-Q55TXPA3.js';
|
|
7
|
+
import '../chunk-BWRGFKJP.js';
|
|
8
|
+
import '../chunk-PQADV6P6.js';
|
|
9
9
|
import '../chunk-HMPFGIWM.js';
|
|
10
10
|
import '../chunk-R25RGPUB.js';
|
|
11
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-4FQT6ZAY.js';
|
|
12
12
|
import '../chunk-BZFWDIV6.js';
|
|
13
13
|
import '../chunk-ODEQTPFM.js';
|
package/dist/TreeCanvas/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { TreeCanvas } from '../chunk-
|
|
1
|
+
export { TreeCanvas } from '../chunk-TBIZSQHB.js';
|
|
2
2
|
import '../chunk-MY374UUD.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-TXAFKH2A.js';
|
|
4
4
|
import '../chunk-VYOKRN2I.js';
|
|
5
5
|
import '../chunk-OG6CL3EB.js';
|
|
6
|
-
import '../chunk-4FQT6ZAY.js';
|
|
7
6
|
import '../chunk-HMPFGIWM.js';
|
|
8
7
|
import '../chunk-R25RGPUB.js';
|
|
8
|
+
import '../chunk-4FQT6ZAY.js';
|
|
9
9
|
import '../chunk-BZFWDIV6.js';
|
|
10
10
|
import '../chunk-ODEQTPFM.js';
|
package/dist/TreeGrid/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { TreeGrid } from '../chunk-
|
|
1
|
+
export { TreeGrid } from '../chunk-T5TFZ2JB.js';
|
|
2
2
|
import '../chunk-MY374UUD.js';
|
|
3
3
|
import '../chunk-VYOKRN2I.js';
|
|
4
|
-
import '../chunk-4FQT6ZAY.js';
|
|
5
4
|
import '../chunk-HMPFGIWM.js';
|
|
6
5
|
import '../chunk-R25RGPUB.js';
|
|
6
|
+
import '../chunk-4FQT6ZAY.js';
|
|
7
7
|
import '../chunk-BZFWDIV6.js';
|
|
8
8
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/** How two versions are compared: what changed between them, or the versions themselves. */
|
|
3
|
+
export type VersionCompareLens = 'changes' | 'versions';
|
|
4
|
+
export declare const VERSION_COMPARE_LENSES: readonly ["changes", "versions"];
|
|
5
|
+
export interface VersionCompareLabels {
|
|
6
|
+
/** The heading when the host gives no title: "Version 3 and version 5". */
|
|
7
|
+
title: (from: string, to: string) => string;
|
|
8
|
+
/** Names the lens switch. */
|
|
9
|
+
lens: string;
|
|
10
|
+
changes: string;
|
|
11
|
+
versions: string;
|
|
12
|
+
/** The changes region's accessible name. */
|
|
13
|
+
region: (from: string, to: string) => string;
|
|
14
|
+
identicalTitle: string;
|
|
15
|
+
identicalDescription: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const VERSION_COMPARE_LABELS: VersionCompareLabels;
|
|
18
|
+
export interface VersionCompareProps {
|
|
19
|
+
/** The older version, named the way the reader knows it: "Version 3", "rev 12". */
|
|
20
|
+
fromLabel: string;
|
|
21
|
+
/** The newer version. */
|
|
22
|
+
toLabel: string;
|
|
23
|
+
/** The heading. Defaults to naming both versions. */
|
|
24
|
+
title?: ReactNode;
|
|
25
|
+
/** A sentence beside the heading: "What changed between them". */
|
|
26
|
+
description?: ReactNode;
|
|
27
|
+
/** The lens on show. A lens with nothing to draw falls back to the other. */
|
|
28
|
+
lens: VersionCompareLens;
|
|
29
|
+
/** Switches the lens. Without it, or with only one lens to draw, no switch is drawn. */
|
|
30
|
+
onLensChange?: ((lens: VersionCompareLens) => void) | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* The older text, compared line by line with `after` for the changes lens.
|
|
33
|
+
* Leave both out and pass `changes` for a comparison the host draws itself,
|
|
34
|
+
* such as a list of changed files.
|
|
35
|
+
*/
|
|
36
|
+
before?: string | undefined;
|
|
37
|
+
after?: string | undefined;
|
|
38
|
+
/** The changes lens, drawn by the host in place of the line diff of `before` and `after`. */
|
|
39
|
+
changes?: ReactNode;
|
|
40
|
+
/** Unchanged lines kept either side of a change in the line diff. Three by default. */
|
|
41
|
+
context?: number | undefined;
|
|
42
|
+
/** The older version, drawn for the versions lens. */
|
|
43
|
+
from?: ReactNode;
|
|
44
|
+
/** The newer version, drawn for the versions lens. With `from` left out it is drawn alone. */
|
|
45
|
+
to?: ReactNode;
|
|
46
|
+
/** A sentence over the versions lens: "Both versions show today's data." */
|
|
47
|
+
note?: ReactNode;
|
|
48
|
+
/** Controls at the end of the head, after the lens switch: "Back to the page". */
|
|
49
|
+
actions?: ReactNode;
|
|
50
|
+
labels?: Partial<VersionCompareLabels> | undefined;
|
|
51
|
+
className?: string | undefined;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Two versions of a document, compared: what changed between them, or the two
|
|
55
|
+
* drawn side by side.
|
|
56
|
+
*
|
|
57
|
+
* THE OLDER VERSION IS ALWAYS THE "FROM" SIDE and the left pane, whichever the
|
|
58
|
+
* reader picked first, so a comparison reads forward in time. The host orders
|
|
59
|
+
* the two before it hands them over.
|
|
60
|
+
*
|
|
61
|
+
* THE CHANGES LENS IS A [DiffView] when the host hands over two texts, with
|
|
62
|
+
* the [DiffSummary] above it; two identical texts are said in words ("Nothing
|
|
63
|
+
* changed") rather than drawn as a pane of unmarked lines that reads as one
|
|
64
|
+
* that failed to load. A comparison that is not two texts, such as the files
|
|
65
|
+
* of two releases, is drawn by the host in `changes`.
|
|
66
|
+
*
|
|
67
|
+
* A LENS THAT CANNOT BE DRAWN IS ABSENT, not offered and then empty: a first
|
|
68
|
+
* version has nothing to compare with, and a sheet has no side by side.
|
|
69
|
+
*/
|
|
70
|
+
export declare function VersionCompare({ fromLabel, toLabel, title, description, lens, onLensChange, before, after, changes, context, from, to, note, actions, labels: overrides, className, }: VersionCompareProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { VERSION_COMPARE_LABELS, VERSION_COMPARE_LENSES, VersionCompare } from '../chunk-73QBUUYX.js';
|
|
2
|
+
import '../chunk-VYY56AMX.js';
|
|
3
|
+
import '../chunk-BVWSLXTY.js';
|
|
4
|
+
import '../chunk-26PEPONN.js';
|
|
5
|
+
import '../chunk-4LDTQWS7.js';
|
|
6
|
+
import '../chunk-CBOICT64.js';
|
|
7
|
+
import '../chunk-RA2ULG6H.js';
|
|
8
|
+
import '../chunk-PQADV6P6.js';
|
|
9
|
+
import '../chunk-BHHIIK3M.js';
|
|
10
|
+
import '../chunk-BZFWDIV6.js';
|
|
11
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* VersionCompare: a head naming the two versions with the lens switch at its
|
|
2
|
+
end, then the changes or the two versions. */
|
|
3
|
+
.crewlet-version-compare {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
gap: var(--spacing-3);
|
|
7
|
+
min-width: 0;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.crewlet-version-compare__head {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-wrap: wrap;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: var(--spacing-2) var(--spacing-3);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.crewlet-version-compare__titles {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex: 1 1 16rem;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
gap: var(--spacing-1);
|
|
22
|
+
min-width: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.crewlet-version-compare__title {
|
|
26
|
+
margin: 0;
|
|
27
|
+
color: var(--color-text-primary);
|
|
28
|
+
font-size: var(--font-size-sm);
|
|
29
|
+
font-weight: var(--font-weight-semibold);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.crewlet-version-compare__description,
|
|
33
|
+
.crewlet-version-compare__note {
|
|
34
|
+
margin: 0;
|
|
35
|
+
color: var(--color-text-tertiary);
|
|
36
|
+
font-size: var(--font-size-compact);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.crewlet-version-compare__changes,
|
|
40
|
+
.crewlet-version-compare__versions {
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-direction: column;
|
|
43
|
+
gap: var(--spacing-3);
|
|
44
|
+
min-width: 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* SIDE BY SIDE where there is room for two readable columns, and one above
|
|
48
|
+
the other where there is not, decided by the width the panes are given
|
|
49
|
+
rather than by the viewport, so a comparison in a side pane stacks too. */
|
|
50
|
+
.crewlet-version-compare__panes {
|
|
51
|
+
display: grid;
|
|
52
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
|
|
53
|
+
gap: var(--spacing-4);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.crewlet-version-compare__pane {
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-direction: column;
|
|
59
|
+
gap: var(--spacing-2);
|
|
60
|
+
min-width: 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.crewlet-version-compare__pane-title {
|
|
64
|
+
margin: 0;
|
|
65
|
+
color: var(--color-text-primary);
|
|
66
|
+
font-size: var(--font-size-sm);
|
|
67
|
+
font-weight: var(--font-weight-semibold);
|
|
68
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Count } from './chunk-BHHIIK3M.js';
|
|
2
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
3
|
+
import './ArrangeGroup-SHFHA7BE.css';
|
|
4
|
+
import { useId } from 'react';
|
|
5
|
+
import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
|
|
6
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
var PLACEHOLDER = "Name this group";
|
|
9
|
+
function ArrangeGroup({
|
|
10
|
+
title,
|
|
11
|
+
tone = "none",
|
|
12
|
+
collapsed,
|
|
13
|
+
onCollapsedChange,
|
|
14
|
+
count,
|
|
15
|
+
onTitleChange,
|
|
16
|
+
bodyProps,
|
|
17
|
+
empty,
|
|
18
|
+
columns = 12,
|
|
19
|
+
actions,
|
|
20
|
+
className,
|
|
21
|
+
children,
|
|
22
|
+
...rest
|
|
23
|
+
}) {
|
|
24
|
+
const bodyId = `${useId()}-body`;
|
|
25
|
+
const { className: bodyClass, style: bodyStyle, ...body } = bodyProps ?? {};
|
|
26
|
+
const hasChildren = Array.isArray(children) ? children.some(Boolean) : Boolean(children);
|
|
27
|
+
return /* @__PURE__ */ jsxs(
|
|
28
|
+
"section",
|
|
29
|
+
{
|
|
30
|
+
className: cx("crewlet-arrange-group", `crewlet-arrange-group--${tone}`, collapsed && "is-collapsed", className),
|
|
31
|
+
"aria-label": title || "Untitled group",
|
|
32
|
+
...rest,
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ jsxs("header", { className: "crewlet-arrange-group__head", children: [
|
|
35
|
+
/* @__PURE__ */ jsxs(
|
|
36
|
+
"button",
|
|
37
|
+
{
|
|
38
|
+
type: "button",
|
|
39
|
+
className: cx("crewlet-arrange-group__toggle", onTitleChange && "is-icon"),
|
|
40
|
+
"aria-expanded": !collapsed,
|
|
41
|
+
"aria-controls": bodyId,
|
|
42
|
+
"aria-label": onTitleChange ? `${collapsed ? "Expand" : "Collapse"} ${title || "group"}` : void 0,
|
|
43
|
+
onClick: () => onCollapsedChange(!collapsed),
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ jsx(ChevronDownGlyph, { size: "sm", className: "crewlet-arrange-group__chevron" }),
|
|
46
|
+
onTitleChange ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-arrange-group__title", children: title || "Untitled group" })
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
onTitleChange ? /* @__PURE__ */ jsx(
|
|
51
|
+
"input",
|
|
52
|
+
{
|
|
53
|
+
className: "crewlet-arrange-group__title-field",
|
|
54
|
+
"aria-label": "Group name",
|
|
55
|
+
value: title,
|
|
56
|
+
maxLength: 60,
|
|
57
|
+
placeholder: PLACEHOLDER,
|
|
58
|
+
size: Math.max(3, (title || PLACEHOLDER).length),
|
|
59
|
+
onChange: (e) => onTitleChange(e.target.value)
|
|
60
|
+
}
|
|
61
|
+
) : null,
|
|
62
|
+
count !== void 0 ? /* @__PURE__ */ jsx(Count, { value: count, className: "crewlet-arrange-group__count" }) : null,
|
|
63
|
+
actions ? /* @__PURE__ */ jsx("span", { className: "crewlet-arrange-group__actions", children: actions }) : null
|
|
64
|
+
] }),
|
|
65
|
+
/* @__PURE__ */ jsx(
|
|
66
|
+
"div",
|
|
67
|
+
{
|
|
68
|
+
id: bodyId,
|
|
69
|
+
className: cx("crewlet-arrange-group__body", bodyClass),
|
|
70
|
+
style: { ...bodyStyle, ["--crewlet-arrange-columns"]: columns },
|
|
71
|
+
hidden: collapsed,
|
|
72
|
+
...body,
|
|
73
|
+
children: hasChildren ? children : empty ? /* @__PURE__ */ jsx("div", { className: "crewlet-arrange-group__empty", children: empty }) : null
|
|
74
|
+
}
|
|
75
|
+
)
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export { ArrangeGroup };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
2
|
+
import './Note-RT4L6VUT.css';
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var Note = forwardRef(function Note2({ tone = "amber", align = "start", size = "md", className, children, ...rest }, ref) {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
className: cx(
|
|
12
|
+
"crewlet-note",
|
|
13
|
+
`crewlet-note--${tone}`,
|
|
14
|
+
align === "center" && "crewlet-note--center",
|
|
15
|
+
size === "lg" && "crewlet-note--lg",
|
|
16
|
+
className
|
|
17
|
+
),
|
|
18
|
+
...rest,
|
|
19
|
+
children
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export { Note };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
2
|
+
import './Divider-3Z77ZAJH.css';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function Divider({ label, align = "start", className, ...rest }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(
|
|
7
|
+
"div",
|
|
8
|
+
{
|
|
9
|
+
role: "separator",
|
|
10
|
+
"aria-label": label || void 0,
|
|
11
|
+
className: cx("crewlet-divider", label && "crewlet-divider--labelled", label && align === "center" && "crewlet-divider--center", className),
|
|
12
|
+
...rest,
|
|
13
|
+
children: label ? /* @__PURE__ */ jsx("span", { className: "crewlet-divider__label", children: label }) : null
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { Divider };
|