@crewlethq/ui 0.6.3 → 0.8.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 +109 -0
- package/dist/AddPill/index.js +1 -1
- package/dist/{AddPill-IJQYCY6C.css → AddPill-V4TQXJ53.css} +23 -22
- package/dist/AppShell/index.js +2 -2
- package/dist/{AppShell-XARELGIH.css → AppShell-CEVLW4QG.css} +3 -1
- package/dist/Button/index.js +1 -1
- package/dist/{Button-EXU36DEH.css → Button-UWKBTKYD.css} +18 -0
- package/dist/Canvas/Canvas.d.ts +16 -1
- package/dist/Canvas/index.d.ts +1 -1
- package/dist/Canvas/index.js +3 -3
- package/dist/{Canvas-Q6JETCWR.css → Canvas-YVXHMWLN.css} +13 -0
- package/dist/Card/index.js +1 -1
- package/dist/{Card-GLP7SUV6.css → Card-KJOYHDTJ.css} +5 -1
- package/dist/Charts/BarList.d.ts +23 -0
- package/dist/Charts/index.d.ts +1 -1
- package/dist/Charts/index.js +1 -1
- package/dist/{Charts-B3YEF7R4.css → Charts-THPA5BWV.css} +40 -0
- package/dist/Checkbox/index.js +1 -1
- package/dist/{Checkbox-BOXQ747I.css → Checkbox-UE7TEPAM.css} +9 -1
- package/dist/CodeBlock/index.js +4 -4
- package/dist/Combobox/index.js +3 -3
- package/dist/CommandPalette/index.js +6 -6
- package/dist/Copyable/index.js +3 -3
- package/dist/DataTable/index.js +6 -6
- package/dist/{DataTable-OLHPF7D4.css → DataTable-WZK3V62B.css} +11 -0
- package/dist/DataView/index.js +11 -11
- package/dist/DateTimePicker/index.js +4 -4
- package/dist/{DateTimePicker-22VNXRWC.css → DateTimePicker-4AZBTODT.css} +11 -6
- package/dist/ErrorBoundary/index.js +2 -2
- package/dist/FilterChip/index.js +1 -1
- package/dist/{FilterChip-GTGLLOXE.css → FilterChip-EZ4QMW4E.css} +4 -1
- package/dist/IconButton/index.js +1 -1
- package/dist/{IconButton-TVEUWK6L.css → IconButton-VYWP6SGW.css} +15 -0
- package/dist/ImageUpload/index.js +1 -1
- package/dist/{ImageUpload-YCHJMUGX.css → ImageUpload-L2GE4JUM.css} +5 -1
- package/dist/Input/index.js +2 -2
- package/dist/{Input-2PU5CPKK.css → Input-DRFNI26F.css} +40 -10
- package/dist/Kbd/index.js +1 -1
- package/dist/{Kbd-JPLDVJIP.css → Kbd-MCWJTRTT.css} +11 -0
- package/dist/ListInput/index.js +4 -4
- package/dist/Menu/index.js +3 -3
- package/dist/Modal/index.js +3 -3
- package/dist/NewItemsNotice/index.js +1 -1
- package/dist/{NewItemsNotice-T4DSSPVV.css → NewItemsNotice-Q5ED73BQ.css} +3 -1
- package/dist/OrgLabel/OrgLabel.d.ts +12 -3
- package/dist/OrgLabel/index.js +1 -1
- package/dist/{OrgLabel-CR233G34.css → OrgLabel-6WSKJQOT.css} +38 -0
- package/dist/OrgNode/OrgNode.d.ts +7 -4
- package/dist/OrgNode/index.js +2 -2
- package/dist/{OrgNode-BT7T2Q2X.css → OrgNode-TCHJH5FO.css} +89 -45
- package/dist/OrgTable/index.js +5 -5
- package/dist/{OrgTable-VWMFC3TB.css → OrgTable-JZSYTUIK.css} +28 -4
- package/dist/Popover/index.js +1 -1
- package/dist/{Popover-WJGCF3ZQ.css → Popover-QCINR7WG.css} +5 -2
- package/dist/PricingCard/index.js +2 -2
- package/dist/{PricingCard-7EFXRSD2.css → PricingCard-HTAHG4ST.css} +5 -1
- package/dist/SearchTrigger/index.js +1 -1
- package/dist/{SearchTrigger-Z5D4AAY7.css → SearchTrigger-KIZLWBEH.css} +4 -1
- package/dist/SegmentedControl/SegmentedControl.d.ts +19 -1
- package/dist/SegmentedControl/index.d.ts +1 -1
- package/dist/SegmentedControl/index.js +2 -2
- package/dist/SegmentedControl-76HODRBT.css +160 -0
- package/dist/Select/index.js +1 -1
- package/dist/{Select-E24U5LBC.css → Select-4ANVLHUY.css} +4 -4
- package/dist/Switch/index.js +1 -1
- package/dist/{Switch-U4OWK4CL.css → Switch-66RAQCRE.css} +8 -5
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-XCNPHA7B.css → Tabs-BWFQSWY3.css} +12 -0
- package/dist/Tag/index.js +1 -1
- package/dist/{Tag-4OXGO2DU.css → Tag-4BRQS6GN.css} +28 -1
- package/dist/TagGroup/index.js +1 -1
- package/dist/{TagGroup-APC2EFH4.css → TagGroup-BCQZD7ZD.css} +4 -1
- package/dist/TagsInput/index.js +3 -3
- package/dist/{TagsInput-W4P36PRJ.css → TagsInput-P2HS5QL4.css} +2 -2
- package/dist/ThemeSwitcher/index.js +3 -3
- package/dist/ThemeToggle/index.js +2 -2
- package/dist/TimeWindowPicker/index.js +6 -6
- package/dist/{TimeWindowPicker-7I7KWCMU.css → TimeWindowPicker-GBF4JDFI.css} +21 -8
- package/dist/Tree/layout.d.ts +3 -3
- package/dist/TreeCanvas/TreeCanvas.d.ts +7 -5
- package/dist/TreeCanvas/index.js +4 -4
- package/dist/{TreeCanvas-HVOV4SQN.css → TreeCanvas-L2XYONWL.css} +80 -74
- package/dist/TreeGrid/index.js +2 -2
- package/dist/{chunk-SVNXOK25.js → chunk-26SCUACK.js} +2 -2
- package/dist/{chunk-4UQ7SMPK.js → chunk-4FQT6ZAY.js} +1 -1
- package/dist/{chunk-IBYO2IJN.js → chunk-5I56UXBJ.js} +4 -4
- package/dist/{chunk-ZFATEERP.js → chunk-5YLON2PW.js} +1 -1
- package/dist/{chunk-EFYPAJT3.js → chunk-6DRDCT22.js} +1 -1
- package/dist/{chunk-PQNILU27.js → chunk-6HXH57BL.js} +3 -3
- package/dist/{chunk-BNCCEER3.js → chunk-6SIG5I72.js} +22 -11
- package/dist/{chunk-RJM4QCGG.js → chunk-6VL4LGWC.js} +36 -13
- package/dist/{chunk-OM5E3TTK.js → chunk-74WGARJE.js} +5 -2
- package/dist/{chunk-EV6IMYJ6.js → chunk-A722MUNR.js} +1 -1
- package/dist/{chunk-WOFOMTGB.js → chunk-B47YUQGM.js} +6 -2
- package/dist/{chunk-MV2E3QZM.js → chunk-BTHX2FS3.js} +2 -2
- package/dist/{chunk-2QLOH454.js → chunk-BXPLX7YU.js} +3 -3
- package/dist/{chunk-V34H2YCY.js → chunk-CEOXFO3E.js} +1 -1
- package/dist/{chunk-KKLITCMF.js → chunk-CHG7VT2M.js} +8 -8
- package/dist/{chunk-QY7UU5ZB.js → chunk-DRHXRGB6.js} +1 -1
- package/dist/{chunk-V2XMNLMS.js → chunk-E6UWRXNM.js} +1 -1
- package/dist/{chunk-NQ2HQ6P5.js → chunk-HVPC2GHY.js} +6 -6
- package/dist/{chunk-FFKYL7Z3.js → chunk-L7THQMFB.js} +4 -2
- package/dist/{chunk-PAWGBSHU.js → chunk-LOECRMHA.js} +1 -1
- package/dist/{chunk-LSJZUA5V.js → chunk-LSB3EHBW.js} +2 -2
- package/dist/{chunk-ERHSECG2.js → chunk-MORLKUGM.js} +1 -1
- package/dist/{chunk-UWQWTGQH.js → chunk-MPXI6FM6.js} +3 -3
- package/dist/{chunk-DHPUMOTX.js → chunk-N5KCGFWI.js} +8 -4
- package/dist/{chunk-ZAO4HHXI.js → chunk-OG6CL3EB.js} +1 -1
- package/dist/{chunk-C5WJUZVR.js → chunk-ORNOOMVY.js} +1 -1
- package/dist/{chunk-WUVZDFHS.js → chunk-OVLJEVQS.js} +2 -2
- package/dist/{chunk-AUS5FNQE.js → chunk-PDUZO35I.js} +1 -1
- package/dist/{chunk-YLYOWZ4V.js → chunk-PXU6HOZB.js} +1 -1
- package/dist/{chunk-AGQ3YLA5.js → chunk-QJZ3Y6WW.js} +6 -6
- package/dist/{chunk-S7KW47IQ.js → chunk-RHHGLTXJ.js} +1 -1
- package/dist/{chunk-SJQ546ID.js → chunk-SEFMO2EV.js} +1 -1
- package/dist/{chunk-KJ34ZBBI.js → chunk-SMBKXWML.js} +1 -1
- package/dist/{chunk-FIFNP6PL.js → chunk-SX2DFTQV.js} +1 -1
- package/dist/{chunk-L6XZOCP4.js → chunk-UCYIRDND.js} +2 -2
- package/dist/{chunk-D6EVJUGU.js → chunk-UYK72NOS.js} +1 -1
- package/dist/{chunk-TIWAHZZ6.js → chunk-VCOELPCT.js} +2 -2
- package/dist/{chunk-2HY7I3NT.js → chunk-VE6LD3KM.js} +5 -3
- package/dist/{chunk-CAIHUYXV.js → chunk-W4GQWFRX.js} +1 -1
- package/dist/{chunk-BWIPKSWA.js → chunk-XX2VQE55.js} +1 -1
- package/dist/{chunk-UA7O3KKJ.js → chunk-YCTMKKRA.js} +1 -1
- package/dist/{chunk-DSUY5F4E.js → chunk-ZGX2DP7F.js} +2 -2
- package/dist/generated/index.js +44 -44
- package/dist/index.js +44 -44
- package/dist/styles.css +662 -223
- package/package.json +3 -3
- package/dist/SegmentedControl-X3BI3XU4.css +0 -68
|
@@ -264,11 +264,38 @@
|
|
|
264
264
|
box-shadow: inset 0 0 0 1px var(--crewlet-tag-ink);
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
/*
|
|
268
|
+
* ONE RING, ON THE PILL'S OWN EDGE, never off it. A pill draws a border
|
|
269
|
+
* whenever it is neutral, pointed at or pressed, and a ring standing off that
|
|
270
|
+
* border is two edges with a gap between them, which reads as a second
|
|
271
|
+
* outline rather than as focus. So every control here rings over the pill's
|
|
272
|
+
* border, and the offset that puts it there is each control's own, because
|
|
273
|
+
* the three boxes meet that border in different places:
|
|
274
|
+
*
|
|
275
|
+
* - a whole actionable tag IS the pill, so -1px covers the border and one
|
|
276
|
+
* pixel outside it;
|
|
277
|
+
* - the press half of a split pill stops at the border's inside edge, so 0
|
|
278
|
+
* puts its ring on the same two pixels;
|
|
279
|
+
* - the remove reaches over the border at the top and the bottom (see its
|
|
280
|
+
* rule below), so -1px puts its ring there as well.
|
|
281
|
+
*
|
|
282
|
+
* ONE PIXEL INTO THE PILL AT MOST, not a field's two, because a pressed tag
|
|
283
|
+
* says so in an ink line just inside its border: a ring two pixels deep would
|
|
284
|
+
* cover the one change that pressing it makes.
|
|
285
|
+
*/
|
|
267
286
|
.crewlet-tag--actionable:focus-visible,
|
|
268
287
|
.crewlet-tag__press:focus-visible,
|
|
269
288
|
.crewlet-tag__remove:focus-visible {
|
|
270
289
|
outline: 2px solid var(--color-focus);
|
|
271
|
-
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.crewlet-tag--actionable:focus-visible,
|
|
293
|
+
.crewlet-tag__remove:focus-visible {
|
|
294
|
+
outline-offset: -1px;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.crewlet-tag__press:focus-visible {
|
|
298
|
+
outline-offset: 0;
|
|
272
299
|
}
|
|
273
300
|
|
|
274
301
|
/* ── the pill that holds two controls ──────────────────────────────────── */
|
package/dist/TagGroup/index.js
CHANGED
|
@@ -63,9 +63,12 @@
|
|
|
63
63
|
color: var(--color-text-primary);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
/* One ring, over the dashed boundary rather than 2px off it, which is two
|
|
67
|
+
edges with a gap between them: the rule every field keeps (see Input.css).
|
|
68
|
+
The list above has no edge of its own, so its ring stays outset. */
|
|
66
69
|
.crewlet-tag-group__more:focus-visible {
|
|
67
70
|
outline: 2px solid var(--color-focus);
|
|
68
|
-
outline-offset:
|
|
71
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
@media (prefers-reduced-motion: reduce) {
|
package/dist/TagsInput/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { TagsInput } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { TagsInput } from '../chunk-MPXI6FM6.js';
|
|
2
|
+
import '../chunk-LOECRMHA.js';
|
|
3
3
|
import '../chunk-WIATRXEJ.js';
|
|
4
4
|
import '../chunk-6MU7HNB4.js';
|
|
5
5
|
import '../chunk-RSAQOKH3.js';
|
|
6
6
|
import '../chunk-7RPGY3JE.js';
|
|
7
7
|
import '../chunk-R25RGPUB.js';
|
|
8
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-4FQT6ZAY.js';
|
|
9
9
|
import '../chunk-BZFWDIV6.js';
|
|
10
10
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -72,8 +72,8 @@
|
|
|
72
72
|
* the whole reason they sit above the field instead of inside it.
|
|
73
73
|
*/
|
|
74
74
|
.crewlet-tags-input__box:focus-visible {
|
|
75
|
-
outline:
|
|
76
|
-
outline-offset:
|
|
75
|
+
outline: 1px solid var(--color-focus);
|
|
76
|
+
outline-offset: -1px;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.crewlet-tags-input.is-disabled {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { DensitySwitcher, ThemeSwitcher } from '../chunk-
|
|
1
|
+
export { DensitySwitcher, ThemeSwitcher } from '../chunk-RHHGLTXJ.js';
|
|
2
2
|
export { applyDensity, applyStoredPreferences, applyTheme, resolveTheme, useDensityPreference, useSystemTheme, useThemePreference } from '../chunk-K3OWD7BJ.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-N5KCGFWI.js';
|
|
4
|
+
import '../chunk-DRHXRGB6.js';
|
|
5
5
|
import '../chunk-BHHIIK3M.js';
|
|
6
6
|
import '../chunk-BZFWDIV6.js';
|
|
7
7
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ThemeToggle } from '../chunk-
|
|
1
|
+
export { ThemeToggle } from '../chunk-ORNOOMVY.js';
|
|
2
2
|
import '../chunk-K3OWD7BJ.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-4FQT6ZAY.js';
|
|
4
4
|
import '../chunk-BZFWDIV6.js';
|
|
5
5
|
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-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { DEFAULT_TIME_WINDOW_LABELS, TIME_WINDOW_SPANS, TimeWindowPicker, describeTimeWindow, isTimeWindowSet, parseTimeWindowDuration, resolveTimeWindow, timeWindowMatchesPreset } from '../chunk-HVPC2GHY.js';
|
|
2
|
+
import '../chunk-SEFMO2EV.js';
|
|
3
|
+
import '../chunk-PDUZO35I.js';
|
|
4
4
|
import '../chunk-GXQ3B46I.js';
|
|
5
5
|
import '../chunk-6MU7HNB4.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-ZGX2DP7F.js';
|
|
7
7
|
import '../chunk-PQADV6P6.js';
|
|
8
8
|
import '../chunk-7RPGY3JE.js';
|
|
9
9
|
import '../chunk-R25RGPUB.js';
|
|
10
|
-
import '../chunk-
|
|
11
|
-
import '../chunk-
|
|
10
|
+
import '../chunk-4FQT6ZAY.js';
|
|
11
|
+
import '../chunk-OG6CL3EB.js';
|
|
12
12
|
import '../chunk-BZFWDIV6.js';
|
|
13
13
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -37,11 +37,17 @@
|
|
|
37
37
|
border-color: var(--color-border-hover);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
/*
|
|
41
|
+
* ONE RING, OVER THE BOUNDARY, for focus and for open alike. It stood 2px off
|
|
42
|
+
* the box with the border recoloured to the focus colour as well, which is an
|
|
43
|
+
* accent hairline, a gap and an accent band: two rings from one state. On the
|
|
44
|
+
* inset offset the ring covers the border, and the border keeps its own colour
|
|
45
|
+
* under it, the rule every field keeps (see Input.css).
|
|
46
|
+
*/
|
|
40
47
|
.crewlet-time-window:focus-visible,
|
|
41
48
|
.crewlet-time-window.is-open {
|
|
42
|
-
outline:
|
|
43
|
-
outline-offset:
|
|
44
|
-
border-color: var(--color-focus);
|
|
49
|
+
outline: 1px solid var(--color-focus);
|
|
50
|
+
outline-offset: -1px;
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
.crewlet-time-window.is-disabled,
|
|
@@ -301,11 +307,18 @@ svg.crewlet-time-window__tick {
|
|
|
301
307
|
transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
302
308
|
}
|
|
303
309
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
310
|
+
/*
|
|
311
|
+
* THE BOX RINGS ONCE, AS A FIELD DOES. It drew the field register's old
|
|
312
|
+
* indicator: the border recoloured to the focus colour AND --shadow-focus,
|
|
313
|
+
* which is itself a ring (a background-coloured gap, then a band), so a
|
|
314
|
+
* focused box showed two accent edges with a gap between them, and the
|
|
315
|
+
* transparent outline under them was a third that forced-colors mode paints.
|
|
316
|
+
* What is left is the field's one outline on the inset offset, over the box's
|
|
317
|
+
* own boundary (see Input.css), keyed on the box's own input.
|
|
318
|
+
*/
|
|
319
|
+
.crewlet-time-window__masked:has(.crewlet-time-window__masked-input:focus-visible) {
|
|
320
|
+
outline: 1px solid var(--color-focus);
|
|
321
|
+
outline-offset: -1px;
|
|
309
322
|
}
|
|
310
323
|
|
|
311
324
|
.crewlet-time-window__masked-input {
|
package/dist/Tree/layout.d.ts
CHANGED
|
@@ -96,9 +96,9 @@ export interface LayoutGaps {
|
|
|
96
96
|
*
|
|
97
97
|
* IT IS PART OF THE LAYOUT rather than padding on whatever draws it, because
|
|
98
98
|
* the canvas scrolls and CLIPS: a margin drawn as padding is outside the
|
|
99
|
-
* scrollable content, so the
|
|
100
|
-
*
|
|
101
|
-
*
|
|
99
|
+
* scrollable content, so the control hanging under the outermost card is cut
|
|
100
|
+
* off at the frame at exactly the moment a reader has panned to that card.
|
|
101
|
+
* Unset, none.
|
|
102
102
|
*/
|
|
103
103
|
margin?: number | undefined;
|
|
104
104
|
}
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
* of its suite.
|
|
77
77
|
*/
|
|
78
78
|
import { type KeyboardEvent, type MouseEvent, type ReactNode, type Ref } from 'react';
|
|
79
|
-
import { type CanvasLabels } from '../Canvas/index.js';
|
|
79
|
+
import { type CanvasGround, type CanvasLabels } from '../Canvas/index.js';
|
|
80
80
|
import { type TreeConnectorShape, type TreeInput, type TreeItemAction, type LayoutRanks, type TreeModel, type TreeViewHandle } from '../Tree/index.js';
|
|
81
81
|
/** A card of the layout: its id and the cards nested under it. */
|
|
82
82
|
export interface TreeCardInput {
|
|
@@ -93,9 +93,9 @@ export interface TreeCardInput {
|
|
|
93
93
|
* with no such choice derives from a stable identity.
|
|
94
94
|
*
|
|
95
95
|
* A NAMED SET RATHER THAN A COLOUR. A caller that could hand in any colour
|
|
96
|
-
* would hand in a literal, and the fill, the border
|
|
97
|
-
*
|
|
98
|
-
*
|
|
96
|
+
* would hand in a literal, and the fill, the border and the ink of a tinted
|
|
97
|
+
* card are measured steps of one hue rather than one value with alphas applied
|
|
98
|
+
* by whoever drew it last.
|
|
99
99
|
*/
|
|
100
100
|
export type TreeCardTone = 'purple' | 'cyan' | 'green' | 'amber' | 'rose' | 'blue';
|
|
101
101
|
/**
|
|
@@ -417,6 +417,8 @@ export interface TreeCanvasProps {
|
|
|
417
417
|
* which says WHICH node the surface is about.
|
|
418
418
|
*/
|
|
419
419
|
dimmed?: boolean | undefined;
|
|
420
|
+
/** What the field under the chart is drawn as: see [CanvasProps.ground]. */
|
|
421
|
+
ground?: CanvasGround | undefined;
|
|
420
422
|
/**
|
|
421
423
|
* A node being composed in the chart rather than in a surface over it: see
|
|
422
424
|
* [TreeComposing]. Null, and the chart is the data and nothing else.
|
|
@@ -427,4 +429,4 @@ export interface TreeCanvasProps {
|
|
|
427
429
|
ref?: Ref<TreeCanvasHandle> | undefined;
|
|
428
430
|
className?: string | undefined;
|
|
429
431
|
}
|
|
430
|
-
export declare function TreeCanvas({ label, nodes, cards, cardOf, renderCard, renderUnder, cardTone, appearance, ranks, connector, groups, onNodeKey, onNodeKeyDown, hasNodeMenu, selectedId, onSelect, anchorNode, overlay, controlsPlacement, controlsExtra, controlsBelow, hint, dimmed, composing, labels, ref, className, }: TreeCanvasProps): import("react").JSX.Element;
|
|
432
|
+
export declare function TreeCanvas({ label, nodes, cards, cardOf, renderCard, renderUnder, cardTone, appearance, ranks, connector, groups, onNodeKey, onNodeKeyDown, hasNodeMenu, selectedId, onSelect, anchorNode, overlay, controlsPlacement, controlsExtra, controlsBelow, hint, dimmed, ground, composing, labels, ref, className, }: TreeCanvasProps): import("react").JSX.Element;
|
package/dist/TreeCanvas/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { TreeCanvas } from '../chunk-
|
|
1
|
+
export { TreeCanvas } from '../chunk-L7THQMFB.js';
|
|
2
2
|
import '../chunk-S3BCVWTU.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-VE6LD3KM.js';
|
|
4
4
|
import '../chunk-53DVJCVW.js';
|
|
5
5
|
import '../chunk-7RPGY3JE.js';
|
|
6
6
|
import '../chunk-R25RGPUB.js';
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-4FQT6ZAY.js';
|
|
8
|
+
import '../chunk-OG6CL3EB.js';
|
|
9
9
|
import '../chunk-BZFWDIV6.js';
|
|
10
10
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -103,32 +103,21 @@
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
/*
|
|
106
|
-
*
|
|
107
|
-
* of the hue's
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
border: 1px solid var(--crewlet-tree-canvas-card-halo);
|
|
118
|
-
border-radius: var(--radius-lg);
|
|
119
|
-
pointer-events: none;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/*
|
|
123
|
-
* The six hues, each as the four steps a toned card draws: the fill it sits
|
|
124
|
-
* on, the boundary around it, the halo outside that, and the ink its name is
|
|
125
|
-
* written in. The ink is published as a variable rather than applied here
|
|
126
|
-
* because WHICH text is the name is the caller's to say.
|
|
106
|
+
* ONE BOUNDARY, AND NO HALO. A toned card used to carry a second hairline ring
|
|
107
|
+
* 3px outside its boundary, at the lightest of the hue's alphas, so a toned
|
|
108
|
+
* card was framed twice: two parallel lines round one node read as a double
|
|
109
|
+
* border, which is the one thing no box in this package draws. The fill and
|
|
110
|
+
* the boundary in the hue already say the card is toned from across a chart.
|
|
111
|
+
*
|
|
112
|
+
* The six hues, each as the steps a toned card draws: the fill it sits on, the
|
|
113
|
+
* boundary around it, the ink its name is written in and the accent its mark
|
|
114
|
+
* takes. The ink and the accent are published as variables rather than applied
|
|
115
|
+
* here because WHICH text is the name and which drawing the mark is are the
|
|
116
|
+
* caller's to say.
|
|
127
117
|
*/
|
|
128
118
|
.crewlet-tree-canvas__card[data-tone='purple'] {
|
|
129
119
|
--crewlet-tree-canvas-card-fill: var(--color-node-purple-fill);
|
|
130
120
|
--crewlet-tree-canvas-card-line: var(--color-node-purple-line);
|
|
131
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-purple-halo);
|
|
132
121
|
--crewlet-tree-canvas-card-ink: var(--color-node-purple-ink);
|
|
133
122
|
--crewlet-tree-canvas-card-accent: var(--color-node-purple);
|
|
134
123
|
}
|
|
@@ -136,7 +125,6 @@
|
|
|
136
125
|
.crewlet-tree-canvas__card[data-tone='cyan'] {
|
|
137
126
|
--crewlet-tree-canvas-card-fill: var(--color-node-cyan-fill);
|
|
138
127
|
--crewlet-tree-canvas-card-line: var(--color-node-cyan-line);
|
|
139
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-cyan-halo);
|
|
140
128
|
--crewlet-tree-canvas-card-ink: var(--color-node-cyan-ink);
|
|
141
129
|
--crewlet-tree-canvas-card-accent: var(--color-node-cyan);
|
|
142
130
|
}
|
|
@@ -144,7 +132,6 @@
|
|
|
144
132
|
.crewlet-tree-canvas__card[data-tone='green'] {
|
|
145
133
|
--crewlet-tree-canvas-card-fill: var(--color-node-green-fill);
|
|
146
134
|
--crewlet-tree-canvas-card-line: var(--color-node-green-line);
|
|
147
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-green-halo);
|
|
148
135
|
--crewlet-tree-canvas-card-ink: var(--color-node-green-ink);
|
|
149
136
|
--crewlet-tree-canvas-card-accent: var(--color-node-green);
|
|
150
137
|
}
|
|
@@ -152,7 +139,6 @@
|
|
|
152
139
|
.crewlet-tree-canvas__card[data-tone='amber'] {
|
|
153
140
|
--crewlet-tree-canvas-card-fill: var(--color-node-amber-fill);
|
|
154
141
|
--crewlet-tree-canvas-card-line: var(--color-node-amber-line);
|
|
155
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-amber-halo);
|
|
156
142
|
--crewlet-tree-canvas-card-ink: var(--color-node-amber-ink);
|
|
157
143
|
--crewlet-tree-canvas-card-accent: var(--color-node-amber);
|
|
158
144
|
}
|
|
@@ -160,7 +146,6 @@
|
|
|
160
146
|
.crewlet-tree-canvas__card[data-tone='rose'] {
|
|
161
147
|
--crewlet-tree-canvas-card-fill: var(--color-node-rose-fill);
|
|
162
148
|
--crewlet-tree-canvas-card-line: var(--color-node-rose-line);
|
|
163
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-rose-halo);
|
|
164
149
|
--crewlet-tree-canvas-card-ink: var(--color-node-rose-ink);
|
|
165
150
|
--crewlet-tree-canvas-card-accent: var(--color-node-rose);
|
|
166
151
|
}
|
|
@@ -168,7 +153,6 @@
|
|
|
168
153
|
.crewlet-tree-canvas__card[data-tone='blue'] {
|
|
169
154
|
--crewlet-tree-canvas-card-fill: var(--color-node-blue-fill);
|
|
170
155
|
--crewlet-tree-canvas-card-line: var(--color-node-blue-line);
|
|
171
|
-
--crewlet-tree-canvas-card-halo: var(--color-node-blue-halo);
|
|
172
156
|
--crewlet-tree-canvas-card-ink: var(--color-node-blue-ink);
|
|
173
157
|
--crewlet-tree-canvas-card-accent: var(--color-node-blue);
|
|
174
158
|
}
|
|
@@ -204,18 +188,43 @@
|
|
|
204
188
|
* canvas clips, so an outset ring is cut away on the cards nearest the frame.
|
|
205
189
|
* This component hands out the tab stop, so the indicator is its to draw; left
|
|
206
190
|
* to the caller it was drawn on some charts and on others not at all.
|
|
191
|
+
*
|
|
192
|
+
* A CARD'S OWN NODE RINGS THE WHOLE CARD. Where the treeitem is the card's
|
|
193
|
+
* direct child, the card's edge IS the node's edge, and a ring drawn on the
|
|
194
|
+
* treeitem did two things wrong: it stopped short of anything the card holds
|
|
195
|
+
* under the node (a unit's lead), and it stood beside the card's boundary as a
|
|
196
|
+
* second line. So the ring is drawn on the card, over its boundary, and the
|
|
197
|
+
* treeitem draws none in any state, the way a field's control leaves its ring
|
|
198
|
+
* to the field. A row deeper inside a card (`*` between the two, because a row
|
|
199
|
+
* is always inside something the caller drew) has no boundary of its own, and
|
|
200
|
+
* keeps its ring.
|
|
207
201
|
*/
|
|
208
|
-
.crewlet-tree-canvas__card [role='treeitem']:focus-visible
|
|
202
|
+
.crewlet-tree-canvas__card * [role='treeitem']:focus-visible,
|
|
203
|
+
.crewlet-tree-canvas__card:has(> [role='treeitem']:focus-visible) {
|
|
209
204
|
outline: 2px solid var(--color-focus);
|
|
210
205
|
outline-offset: var(--size-focus-ring-inset-offset);
|
|
211
206
|
}
|
|
212
207
|
|
|
208
|
+
.crewlet-tree-canvas__card > [role='treeitem'] {
|
|
209
|
+
outline: none;
|
|
210
|
+
}
|
|
211
|
+
|
|
213
212
|
/* The selection is where the reader is, so it takes the accent. Inset, for the
|
|
214
213
|
same reason the ring is. */
|
|
215
214
|
.crewlet-tree-canvas__card [role='treeitem'][aria-selected='true'] {
|
|
216
215
|
box-shadow: inset 0 0 0 1px var(--color-brand-accent);
|
|
217
216
|
}
|
|
218
217
|
|
|
218
|
+
/* On a card's own node the selection IS the card's boundary, in the accent: an
|
|
219
|
+
inset ring beside the boundary drew two lines where one says it. */
|
|
220
|
+
.crewlet-tree-canvas__card:has(> [role='treeitem'][aria-selected='true']) {
|
|
221
|
+
border-color: var(--color-brand-accent);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.crewlet-tree-canvas__card > [role='treeitem'][aria-selected='true'] {
|
|
225
|
+
box-shadow: none;
|
|
226
|
+
}
|
|
227
|
+
|
|
219
228
|
/*
|
|
220
229
|
* THE POINTER'S CONTROLS, drawn over the end of the card and quiet until it is
|
|
221
230
|
* reached.
|
|
@@ -360,8 +369,8 @@
|
|
|
360
369
|
* The space around the whole chart, as a token, for the reason the gaps are
|
|
361
370
|
* one. None by default: a chart of panels is read inside its own frame, and
|
|
362
371
|
* the space around it is the page's. The `node` appearance takes the console
|
|
363
|
-
* chart's own margin below, which is what keeps the
|
|
364
|
-
*
|
|
372
|
+
* chart's own margin below, which is what keeps the control hanging under the
|
|
373
|
+
* outermost node off the canvas's clip.
|
|
365
374
|
*/
|
|
366
375
|
.crewlet-tree-canvas__margin {
|
|
367
376
|
width: var(--spacing-0);
|
|
@@ -635,8 +644,8 @@
|
|
|
635
644
|
* drawn distance is the same number either way, and the room simply moved
|
|
636
645
|
* from the card's box into the gap with the control that needs it.
|
|
637
646
|
* - AROUND: `--spacing-8`, 40px against 36, and deliberately the step above
|
|
638
|
-
* rather than below: the canvas CLIPS, and
|
|
639
|
-
*
|
|
647
|
+
* rather than below: the canvas CLIPS, and what hangs under the outermost
|
|
648
|
+
* node has to clear the frame.
|
|
640
649
|
*/
|
|
641
650
|
.crewlet-tree-canvas--node .crewlet-tree-canvas__gap {
|
|
642
651
|
width: var(--spacing-9);
|
|
@@ -980,6 +989,27 @@
|
|
|
980
989
|
border-radius: 0;
|
|
981
990
|
}
|
|
982
991
|
|
|
992
|
+
/*
|
|
993
|
+
* AND THEY ANSWER THE POINTER WITH THEIR INK, NOT A GROUND, as the console
|
|
994
|
+
* chart's do: the edit mark turns to the accent and the trash to the critical
|
|
995
|
+
* hue, and nothing is painted under either. A cell is a whole share of the
|
|
996
|
+
* node's corner, so a ground painted over it was a square standing past the
|
|
997
|
+
* card's rounded corner, the one place on a node with no room for a square.
|
|
998
|
+
*/
|
|
999
|
+
.crewlet-tree-canvas--node
|
|
1000
|
+
.crewlet-tree-canvas__actions
|
|
1001
|
+
.crewlet-icon-btn:hover:not(:disabled):not([aria-disabled='true']) {
|
|
1002
|
+
background: none;
|
|
1003
|
+
border-color: transparent;
|
|
1004
|
+
color: var(--color-brand-accent-ink);
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
.crewlet-tree-canvas--node
|
|
1008
|
+
.crewlet-tree-canvas__actions
|
|
1009
|
+
.crewlet-icon-btn--ghost-danger:hover:not(:disabled):not([aria-disabled='true']) {
|
|
1010
|
+
color: var(--color-feedback-danger-ink);
|
|
1011
|
+
}
|
|
1012
|
+
|
|
983
1013
|
/*
|
|
984
1014
|
* A CONTROL ON AN EDGE IS A DISC: a ground of its own, so the line it sits on,
|
|
985
1015
|
* or the card it straddles, stops at its edge rather than running through it.
|
|
@@ -1081,38 +1111,29 @@
|
|
|
1081
1111
|
background-image: linear-gradient(var(--color-surface-subtle), var(--color-surface-subtle));
|
|
1082
1112
|
border: 1px dashed var(--color-brand-accent-soft-strong);
|
|
1083
1113
|
box-shadow: var(--shadow-md);
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
* over the gap the next card's controls reach into, so it takes no pointer.
|
|
1093
|
-
*/
|
|
1094
|
-
.crewlet-tree-canvas__card--composing::after {
|
|
1095
|
-
content: '';
|
|
1096
|
-
position: absolute;
|
|
1097
|
-
inset: -3px;
|
|
1098
|
-
border: 1px solid var(--color-brand-accent-soft-strong);
|
|
1099
|
-
border-radius: var(--radius-lg);
|
|
1100
|
-
pointer-events: none;
|
|
1114
|
+
/*
|
|
1115
|
+
* THE BOUNDARY BREATHES, which is what says the card is waiting for the
|
|
1116
|
+
* reader from the far end of a chart, where a dashed hairline is a few
|
|
1117
|
+
* pixels. It used to be a second ring 3px outside the boundary that
|
|
1118
|
+
* breathed instead, two lines round one card where every box in this
|
|
1119
|
+
* package draws one, so the dashed boundary itself moves between the soft
|
|
1120
|
+
* accent and the full one.
|
|
1121
|
+
*/
|
|
1101
1122
|
animation:
|
|
1102
|
-
crewlet-tree-canvas-ghost-
|
|
1103
|
-
var(--motion-duration-
|
|
1123
|
+
crewlet-tree-canvas-ghost-card var(--motion-duration-slow) var(--motion-easing-emphasized)
|
|
1124
|
+
var(--motion-duration-base) both,
|
|
1104
1125
|
/* A BREATH RATHER THAN A TRANSITION, so it is a multiple of the scale's
|
|
1105
1126
|
longest step (1.8s) rather than a number off it: the scale tops out at
|
|
1106
1127
|
one UI transition, and a pulse held there would strobe. The console
|
|
1107
|
-
chart's own is 2s. It starts where the
|
|
1128
|
+
chart's own is 2s. It starts where the card's arrival ends. */
|
|
1108
1129
|
crewlet-tree-canvas-ghost-pulse calc(var(--motion-duration-slow) * 6)
|
|
1109
|
-
var(--motion-easing-in-out)
|
|
1110
|
-
|
|
1130
|
+
var(--motion-easing-in-out) calc(var(--motion-duration-base) + var(--motion-duration-slow))
|
|
1131
|
+
infinite;
|
|
1111
1132
|
}
|
|
1112
1133
|
|
|
1113
1134
|
/*
|
|
1114
1135
|
* THE FORM ARRIVES LAST, and from slightly above and behind: the wire, then
|
|
1115
|
-
* the card, then
|
|
1136
|
+
* the card, then what is inside it, which is the order a reader
|
|
1116
1137
|
* follows from the node they pressed to the thing they have to fill in. The
|
|
1117
1138
|
* caller's own element, whatever it drew, because the ghost's contents are
|
|
1118
1139
|
* entirely the caller's.
|
|
@@ -1156,24 +1177,14 @@
|
|
|
1156
1177
|
}
|
|
1157
1178
|
}
|
|
1158
1179
|
|
|
1159
|
-
@keyframes crewlet-tree-canvas-ghost-glow {
|
|
1160
|
-
from {
|
|
1161
|
-
opacity: 0;
|
|
1162
|
-
}
|
|
1163
|
-
|
|
1164
|
-
to {
|
|
1165
|
-
opacity: 1;
|
|
1166
|
-
}
|
|
1167
|
-
}
|
|
1168
|
-
|
|
1169
1180
|
@keyframes crewlet-tree-canvas-ghost-pulse {
|
|
1170
1181
|
0%,
|
|
1171
1182
|
100% {
|
|
1172
|
-
|
|
1183
|
+
border-color: var(--color-brand-accent-soft-strong);
|
|
1173
1184
|
}
|
|
1174
1185
|
|
|
1175
1186
|
50% {
|
|
1176
|
-
|
|
1187
|
+
border-color: var(--color-brand-accent);
|
|
1177
1188
|
}
|
|
1178
1189
|
}
|
|
1179
1190
|
|
|
@@ -1193,8 +1204,8 @@
|
|
|
1193
1204
|
* A READER WHO ASKED FOR LESS gets the ghost DRAWN, in place, at once. Nothing
|
|
1194
1205
|
* about the add is behind the motion: the chart still makes room, the branch
|
|
1195
1206
|
* is still dashed, the view still moves onto it and focus still lands in the
|
|
1196
|
-
* form. Only the arrival, the breath and the rise are dropped, and the
|
|
1197
|
-
*
|
|
1207
|
+
* form. Only the arrival, the breath and the rise are dropped, and the
|
|
1208
|
+
* boundary rests at the soft step it breathes from.
|
|
1198
1209
|
*/
|
|
1199
1210
|
@media (prefers-reduced-motion: reduce) {
|
|
1200
1211
|
/* NOT `transform` on the card itself: its transform is where the layout
|
|
@@ -1214,9 +1225,4 @@
|
|
|
1214
1225
|
transform: none;
|
|
1215
1226
|
animation: none;
|
|
1216
1227
|
}
|
|
1217
|
-
|
|
1218
|
-
.crewlet-tree-canvas__card--composing::after {
|
|
1219
|
-
opacity: 1;
|
|
1220
|
-
animation: none;
|
|
1221
|
-
}
|
|
1222
1228
|
}
|
package/dist/TreeGrid/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { TreeGrid } from '../chunk-
|
|
1
|
+
export { TreeGrid } from '../chunk-SX2DFTQV.js';
|
|
2
2
|
import '../chunk-S3BCVWTU.js';
|
|
3
3
|
import '../chunk-53DVJCVW.js';
|
|
4
4
|
import '../chunk-7RPGY3JE.js';
|
|
5
5
|
import '../chunk-R25RGPUB.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-4FQT6ZAY.js';
|
|
7
7
|
import '../chunk-BZFWDIV6.js';
|
|
8
8
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useClipboard } from './chunk-5VNUYO76.js';
|
|
2
|
-
import { IconButton } from './chunk-
|
|
3
|
-
import { Button } from './chunk-
|
|
2
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
3
|
+
import { Button } from './chunk-OG6CL3EB.js';
|
|
4
4
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
5
5
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
6
|
import './Copyable-5PNRFOLS.css';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
2
2
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
3
|
-
import './IconButton-
|
|
3
|
+
import './IconButton-VYWP6SGW.css';
|
|
4
4
|
import { forwardRef, useId, Children, isValidElement, cloneElement } from 'react';
|
|
5
5
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Popover } from './chunk-
|
|
1
|
+
import { Popover } from './chunk-PDUZO35I.js';
|
|
2
2
|
import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
|
|
3
|
-
import { IconButton } from './chunk-
|
|
4
|
-
import { Button } from './chunk-
|
|
3
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
4
|
+
import { Button } from './chunk-OG6CL3EB.js';
|
|
5
5
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
|
-
import './DateTimePicker-
|
|
6
|
+
import './DateTimePicker-4AZBTODT.css';
|
|
7
7
|
import { useMemo, useState, useEffect } from 'react';
|
|
8
8
|
import { CalendarGlyph, ChevronDownGlyph, ChevronsLeftGlyph, ChevronLeftGlyph, ChevronRightGlyph, ChevronsRightGlyph } from '@crewlethq/icons/glyphs';
|
|
9
9
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
2
2
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
3
|
-
import './FilterChip-
|
|
3
|
+
import './FilterChip-EZ4QMW4E.css';
|
|
4
4
|
import { createContext, useContext, useRef, useId, useCallback, useLayoutEffect } from 'react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Kbd } from './chunk-
|
|
2
|
-
import { FormField, Textarea, Input } from './chunk-
|
|
1
|
+
import { Kbd } from './chunk-SMBKXWML.js';
|
|
2
|
+
import { FormField, Textarea, Input } from './chunk-ZGX2DP7F.js';
|
|
3
3
|
import { announce } from './chunk-RSAQOKH3.js';
|
|
4
4
|
import { isComposing } from './chunk-R25RGPUB.js';
|
|
5
|
-
import { IconButton } from './chunk-
|
|
5
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
6
6
|
import './ListInput-O7LJKOIG.css';
|
|
7
7
|
import { useState, useRef, useLayoutEffect } from 'react';
|
|
8
8
|
import { ArrowUpGlyph, ArrowDownGlyph, XGlyph, PlusGlyph } from '@crewlethq/icons/glyphs';
|