@crewlethq/ui 0.4.4 → 0.5.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 +888 -24
- package/dist/Accordion/index.js +2 -2
- package/dist/AddPill/index.js +1 -1
- package/dist/{AddPill-DFWXYLIQ.css → AddPill-IJQYCY6C.css} +9 -0
- package/dist/AppShell/AppShell.d.ts +26 -5
- package/dist/AppShell/index.js +3 -3
- package/dist/{AppShell-NVE6LHNI.css → AppShell-XARELGIH.css} +178 -25
- package/dist/Avatar/Avatar.d.ts +85 -40
- package/dist/Avatar/AvatarStack.d.ts +76 -0
- package/dist/Avatar/index.d.ts +5 -2
- package/dist/Avatar/index.js +1 -1
- package/dist/Avatar-XID7Z74C.css +200 -0
- package/dist/AvatarStack-GEJBNV7E.css +72 -0
- package/dist/BrandLockup/index.js +1 -1
- package/dist/{BrandLockup-6ISDEHPJ.css → BrandLockup-JKGXFCZF.css} +25 -19
- package/dist/Button/Button.d.ts +7 -2
- package/dist/Button/index.js +1 -1
- package/dist/{Button-D4J6B4MA.css → Button-X4B2TJAQ.css} +50 -19
- package/dist/Callout/index.js +1 -1
- package/dist/Canvas/index.js +4 -4
- package/dist/Card/Card.d.ts +9 -5
- package/dist/Card/index.js +1 -1
- package/dist/{Card-RLR254LD.css → Card-GLP7SUV6.css} +25 -18
- package/dist/Charts/BarList.d.ts +18 -1
- package/dist/Charts/ChartTooltip.d.ts +68 -0
- package/dist/Charts/StackedBar.d.ts +25 -7
- package/dist/Charts/StackedColumns.d.ts +112 -0
- package/dist/Charts/TimeSeries.d.ts +33 -2
- package/dist/Charts/dataColor.d.ts +22 -14
- package/dist/Charts/index.d.ts +6 -0
- package/dist/Charts/index.js +1 -1
- package/dist/Charts/useChartHover.d.ts +56 -0
- package/dist/Charts-B3YEF7R4.css +742 -0
- package/dist/Checkbox/index.js +1 -1
- package/dist/{Checkbox-VGW26YLQ.css → Checkbox-BOXQ747I.css} +2 -2
- package/dist/CodeBlock/index.js +4 -4
- package/dist/Combobox/index.js +5 -5
- package/dist/CommandPalette/CommandPalette.d.ts +97 -6
- package/dist/CommandPalette/index.d.ts +1 -1
- package/dist/CommandPalette/index.js +9 -7
- package/dist/CommandPalette-C5AMKGN2.css +259 -0
- package/dist/Copyable/index.js +3 -3
- package/dist/DataTable/index.js +7 -7
- package/dist/{DataTable-37UWTRN6.css → DataTable-OLHPF7D4.css} +35 -38
- package/dist/DataView/index.js +15 -15
- package/dist/{DataView-256YF32J.css → DataView-N6JX464S.css} +5 -4
- package/dist/DateTimePicker/index.js +5 -5
- package/dist/DiffList/index.js +1 -1
- package/dist/Disclosure/index.js +2 -2
- package/dist/EntityChip/EntityChip.d.ts +9 -12
- package/dist/EntityChip/index.d.ts +1 -1
- package/dist/EntityChip/index.js +2 -2
- package/dist/ErrorBoundary/index.js +2 -2
- package/dist/{ErrorBoundary-ME36CQTA.css → ErrorBoundary-U2PA3LY2.css} +4 -4
- package/dist/IconButton/index.js +1 -1
- package/dist/{IconButton-VQGNMJDI.css → IconButton-TVEUWK6L.css} +2 -2
- package/dist/ImageUpload/ImageUpload.d.ts +10 -7
- package/dist/ImageUpload/index.js +2 -2
- package/dist/{ImageUpload-HKFIZR6D.css → ImageUpload-YCHJMUGX.css} +24 -10
- package/dist/Input/index.js +2 -2
- package/dist/Kbd/Kbd.d.ts +14 -4
- package/dist/Kbd/index.js +1 -1
- package/dist/Kbd-JPLDVJIP.css +71 -0
- package/dist/Layer/index.js +1 -1
- package/dist/Link/index.js +1 -1
- package/dist/List/index.js +1 -1
- package/dist/{List-XTHESXLR.css → List-MYJIV6MP.css} +12 -2
- package/dist/ListInput/index.js +6 -6
- package/dist/Listbox/index.js +2 -2
- package/dist/Listbox/useListbox.d.ts +2 -0
- package/dist/{Listbox-ZXYYNN6U.css → Listbox-6WJNJQVQ.css} +32 -7
- package/dist/Menu/index.js +4 -4
- package/dist/Meter/Meter.d.ts +103 -16
- package/dist/Meter/index.d.ts +2 -2
- package/dist/Meter/index.js +1 -1
- package/dist/{Meter-SKOOXQBC.css → Meter-5VCSFMZW.css} +46 -7
- package/dist/Modal/index.js +4 -4
- package/dist/{Modal-XYQJ4BL6.css → Modal-JAYBS2KS.css} +13 -4
- package/dist/OrgLabel/OrgLabel.d.ts +60 -24
- package/dist/OrgLabel/index.d.ts +1 -1
- package/dist/OrgLabel/index.js +2 -1
- package/dist/{OrgLabel-D7U6QJZD.css → OrgLabel-CR233G34.css} +9 -18
- package/dist/OrgNode/index.js +3 -2
- package/dist/OrgTable/OrgTable.d.ts +2 -2
- package/dist/OrgTable/index.js +8 -7
- package/dist/Popover/index.js +2 -2
- package/dist/PricingCard/index.js +3 -3
- package/dist/{PricingCard-JFI7RYXP.css → PricingCard-7EFXRSD2.css} +4 -5
- package/dist/SearchTrigger/SearchTrigger.d.ts +23 -4
- package/dist/SearchTrigger/index.d.ts +1 -1
- package/dist/SearchTrigger/index.js +1 -1
- package/dist/SearchTrigger-Z5D4AAY7.css +112 -0
- package/dist/SegmentedControl/index.js +2 -2
- package/dist/SegmentedMeter/SegmentedMeter.d.ts +107 -0
- package/dist/SegmentedMeter/index.d.ts +3 -0
- package/dist/SegmentedMeter/index.js +2 -0
- package/dist/SegmentedMeter-KQNML2TW.css +109 -0
- package/dist/Select/index.js +3 -3
- package/dist/Shortcut/index.js +2 -2
- package/dist/SidebarNav/SidebarNav.d.ts +85 -25
- package/dist/SidebarNav/index.d.ts +1 -1
- package/dist/SidebarNav/index.js +1 -1
- package/dist/SidebarNav-X5NLZNWA.css +424 -0
- package/dist/StatCard/StatCard.d.ts +59 -12
- package/dist/StatCard/index.d.ts +1 -1
- package/dist/StatCard/index.js +1 -1
- package/dist/StatCard-KPAFD4E2.css +204 -0
- package/dist/StatGroup/index.js +1 -1
- package/dist/{StatGroup-TGB6AEKM.css → StatGroup-HVG6O62W.css} +8 -9
- package/dist/StatusDot/StatusDot.d.ts +24 -6
- package/dist/StatusDot/index.js +1 -1
- package/dist/StatusDot-7OMCQCZF.css +186 -0
- package/dist/Stepper/Stepper.d.ts +78 -0
- package/dist/Stepper/index.d.ts +3 -0
- package/dist/Stepper/index.js +4 -0
- package/dist/Stepper-HW4JM3YH.css +176 -0
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-MJ2E3VPK.css → Tabs-XCNPHA7B.css} +46 -26
- package/dist/Tag/Tag.d.ts +29 -22
- package/dist/Tag/index.js +2 -2
- package/dist/{Tag-VNZEYLB6.css → Tag-GBE7LQJP.css} +82 -83
- package/dist/TagsInput/index.js +7 -7
- package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +53 -21
- package/dist/ThemeSwitcher/index.d.ts +3 -3
- package/dist/ThemeSwitcher/index.js +4 -3
- package/dist/ThemeSwitcher/preferences.d.ts +19 -5
- package/dist/ThemeToggle/ThemeToggle.d.ts +40 -0
- package/dist/ThemeToggle/index.d.ts +2 -0
- package/dist/ThemeToggle/index.js +5 -0
- package/dist/TimeWindowPicker/index.js +8 -8
- package/dist/Toaster/index.js +2 -2
- package/dist/Toolbar/index.js +2 -2
- package/dist/{Toolbar-IP6LXN45.css → Toolbar-HUOSMNTH.css} +3 -1
- package/dist/Tooltip/index.js +2 -2
- package/dist/Tree/index.d.ts +2 -2
- package/dist/Tree/index.js +1 -1
- package/dist/Tree/layout.d.ts +103 -28
- package/dist/TreeCanvas/TreeCanvas.d.ts +60 -14
- package/dist/TreeCanvas/index.d.ts +1 -1
- package/dist/TreeCanvas/index.js +6 -6
- package/dist/TreeCanvas/motion.d.ts +3 -2
- package/dist/{TreeCanvas-WBNQPHC7.css → TreeCanvas-HVOV4SQN.css} +154 -30
- package/dist/TreeGrid/index.js +4 -4
- package/dist/{chunk-F6OE5FH3.js → chunk-2FPENTCF.js} +1 -1
- package/dist/chunk-4AK52VHB.js +88 -0
- package/dist/{chunk-7EM5T4ME.js → chunk-4IQD3HUQ.js} +2 -2
- package/dist/{chunk-YODNNSZL.js → chunk-4PZ6FJKW.js} +43 -13
- package/dist/{chunk-F27EPQ7D.js → chunk-4UQ7SMPK.js} +1 -1
- package/dist/chunk-5QWIJSQM.js +73 -0
- package/dist/{chunk-KIC7BZYJ.js → chunk-6MU7HNB4.js} +6 -5
- package/dist/{chunk-S2XHHEW4.js → chunk-74KMX7YH.js} +4 -4
- package/dist/{chunk-WNI2WSJF.js → chunk-7KBNFFM3.js} +1 -1
- package/dist/{chunk-EFSG7HNU.js → chunk-AUS5FNQE.js} +1 -1
- package/dist/{chunk-CMEE37QJ.js → chunk-BMYPGGPV.js} +4 -4
- package/dist/{chunk-H4FBTAYS.js → chunk-BNCCEER3.js} +8 -8
- package/dist/chunk-C5WJUZVR.js +56 -0
- package/dist/{chunk-5WS6L6FA.js → chunk-CAIHUYXV.js} +9 -9
- package/dist/{chunk-5KSRXHOW.js → chunk-CQY5NTRS.js} +1 -1
- package/dist/{chunk-MW356IVK.js → chunk-D6EVJUGU.js} +2 -2
- package/dist/{chunk-7PEFUMQJ.js → chunk-DHPUMOTX.js} +2 -2
- package/dist/{chunk-HZ5XZNPS.js → chunk-DS2C73RJ.js} +3 -3
- package/dist/{chunk-GKHAKGOF.js → chunk-DSUY5F4E.js} +3 -3
- package/dist/{chunk-Q4ZPPART.js → chunk-EFYPAJT3.js} +3 -3
- package/dist/{chunk-PATXSJGR.js → chunk-ERVO6OUF.js} +17 -17
- package/dist/{chunk-BZYDZBAN.js → chunk-ETYEBKR4.js} +3 -3
- package/dist/{chunk-CC67MUUO.js → chunk-FD5UEN6X.js} +30 -30
- package/dist/{chunk-5SDBMKUO.js → chunk-FIFNP6PL.js} +3 -3
- package/dist/{chunk-7HPRF5XN.js → chunk-FUF52K7E.js} +98 -16
- package/dist/{chunk-5KPQ6D7N.js → chunk-FZVJDJFN.js} +2 -2
- package/dist/chunk-IA232OTU.js +156 -0
- package/dist/{chunk-2EOKFKHX.js → chunk-IG27QX7Q.js} +7 -7
- package/dist/chunk-IKB6HFGK.js +55 -0
- package/dist/{chunk-T43A26SD.js → chunk-IPVQKAHO.js} +6 -6
- package/dist/{chunk-3EYF6HKB.js → chunk-IVFJD7WY.js} +28 -9
- package/dist/{chunk-XJWXPRSK.js → chunk-JGRNTBF2.js} +11 -11
- package/dist/chunk-K3OWD7BJ.js +121 -0
- package/dist/{chunk-6KCO2D5C.js → chunk-KD4H66L6.js} +7 -20
- package/dist/{chunk-SFZOKW2G.js → chunk-KJ34ZBBI.js} +8 -3
- package/dist/{chunk-AQTBF4EB.js → chunk-LFHCXZO5.js} +5 -5
- package/dist/{chunk-LWKJQTOM.js → chunk-MICH6QSJ.js} +1 -1
- package/dist/chunk-N3DPO6HG.js +226 -0
- package/dist/{chunk-S4GZWSKR.js → chunk-OM5E3TTK.js} +1 -1
- package/dist/{chunk-3QRYCPXQ.js → chunk-OPKIKM35.js} +6 -6
- package/dist/{chunk-5EKIWVOR.js → chunk-PGRPNDWM.js} +2 -2
- package/dist/{chunk-FSOW3ARP.js → chunk-PQNILU27.js} +9 -9
- package/dist/{chunk-QNCVHRZL.js → chunk-QVAFL2LE.js} +1 -1
- package/dist/{chunk-Q3B66TJM.js → chunk-QY7UU5ZB.js} +1 -1
- package/dist/{chunk-ITHXJHBB.js → chunk-R25RGPUB.js} +1 -0
- package/dist/{chunk-KLJCCMF3.js → chunk-R6735B37.js} +2 -2
- package/dist/{chunk-3ZP55QZE.js → chunk-R6FBDTP3.js} +4 -4
- package/dist/{chunk-7FZ53WDJ.js → chunk-RIAZM6L3.js} +1 -1
- package/dist/chunk-RJM4QCGG.js +550 -0
- package/dist/{chunk-NTRZGNEX.js → chunk-S3BCVWTU.js} +215 -46
- package/dist/chunk-S7KW47IQ.js +121 -0
- package/dist/{chunk-KNYYCWMK.js → chunk-SJQ546ID.js} +4 -4
- package/dist/{chunk-D35VTV2Z.js → chunk-SV7QAONL.js} +1 -1
- package/dist/{chunk-IAJLHVUA.js → chunk-TIWAHZZ6.js} +1 -1
- package/dist/{chunk-2PRH365R.js → chunk-UA7O3KKJ.js} +1 -1
- package/dist/{chunk-NPZY6YYL.js → chunk-UG5ZMAXW.js} +6 -6
- package/dist/{chunk-NDCATSW7.js → chunk-V34H2YCY.js} +1 -1
- package/dist/chunk-WIATRXEJ.js +22 -0
- package/dist/{chunk-5C5YMZQU.js → chunk-WOFOMTGB.js} +16 -10
- package/dist/{chunk-QYOFACSP.js → chunk-WSOFKOLP.js} +3 -3
- package/dist/{chunk-MNAXYY3R.js → chunk-WUVZDFHS.js} +31 -11
- package/dist/{chunk-DB2VDLVR.js → chunk-YIMOT5OO.js} +10 -10
- package/dist/{chunk-2ZQMA2WB.js → chunk-ZPSOF6VL.js} +2 -2
- package/dist/generated/index.d.ts +3 -0
- package/dist/generated/index.js +69 -65
- package/dist/index.js +69 -65
- package/dist/styles.css +2538 -741
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/tone.d.ts +7 -12
- package/package.json +4 -4
- package/scripts/check-css-literals.mjs +159 -23
- package/scripts/check-css-variables.mjs +5 -3
- package/scripts/css-source.mjs +97 -5
- package/dist/Avatar-P2KRQM2B.css +0 -156
- package/dist/Charts-D7G2BSXH.css +0 -277
- package/dist/CommandPalette-CSJDUCQA.css +0 -115
- package/dist/Kbd-W66MXQI5.css +0 -61
- package/dist/SearchTrigger-QXOYAUUY.css +0 -79
- package/dist/SidebarNav-QGSFKZYA.css +0 -319
- package/dist/StatCard-KYPKZUWX.css +0 -111
- package/dist/StatusDot-HA2L2FSX.css +0 -84
- package/dist/chunk-22O7LAW2.js +0 -41
- package/dist/chunk-AJNCATWZ.js +0 -144
- package/dist/chunk-F4PJZ4ED.js +0 -245
- package/dist/chunk-PNFASD6F.js +0 -98
- package/dist/chunk-PZSWF74H.js +0 -15
- package/dist/chunk-R66KLW7S.js +0 -143
- /package/dist/{chunk-ZCR6YGQ4.js → chunk-PKIN4IMB.js} +0 -0
|
@@ -31,7 +31,10 @@
|
|
|
31
31
|
.crewlet-tree-canvas__card,
|
|
32
32
|
.crewlet-tree-canvas__links,
|
|
33
33
|
.crewlet-tree-canvas__gap,
|
|
34
|
-
.crewlet-tree-canvas__margin
|
|
34
|
+
.crewlet-tree-canvas__margin,
|
|
35
|
+
.crewlet-tree-canvas__group,
|
|
36
|
+
.crewlet-tree-canvas__group-head,
|
|
37
|
+
.crewlet-tree-canvas__group-pad {
|
|
35
38
|
position: absolute;
|
|
36
39
|
top: 0;
|
|
37
40
|
left: 0;
|
|
@@ -170,15 +173,6 @@
|
|
|
170
173
|
--crewlet-tree-canvas-card-accent: var(--color-node-blue);
|
|
171
174
|
}
|
|
172
175
|
|
|
173
|
-
/*
|
|
174
|
-
* A card that stands for somebody outside the system takes the dashed edge
|
|
175
|
-
* every such seat wears. The BOUNDARY says it rather than a hue, so it reads
|
|
176
|
-
* to somebody who cannot separate the hue at all.
|
|
177
|
-
*/
|
|
178
|
-
.crewlet-tree-canvas__card--outline {
|
|
179
|
-
border-style: dashed;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
176
|
/*
|
|
183
177
|
* THE NODES INSIDE THE CARD. `role="treeitem"` is this component's own
|
|
184
178
|
* contract, handed to the caller by `ctx.item(id)`, so the inset a node sits
|
|
@@ -338,13 +332,13 @@
|
|
|
338
332
|
/*
|
|
339
333
|
* A reveal is a state change rather than an entrance, so under reduced motion
|
|
340
334
|
* it simply happens. The control is still shown and still reached the same way.
|
|
335
|
+
* The `node` appearance's own quiet controls are stopped in its own section,
|
|
336
|
+
* below the rules that start them: named here, above those rules, the stops
|
|
337
|
+
* tied with them on specificity and lost on source order.
|
|
341
338
|
*/
|
|
342
339
|
@media (prefers-reduced-motion: reduce) {
|
|
343
340
|
.crewlet-tree-canvas__actions,
|
|
344
|
-
.crewlet-tree-canvas__under
|
|
345
|
-
.crewlet-tree-canvas--node .crewlet-tree-canvas__under > :not(.crewlet-add-pill),
|
|
346
|
-
.crewlet-tree-canvas--node .crewlet-org-node__leading,
|
|
347
|
-
.crewlet-tree-canvas--node .crewlet-org-node-lead__clear {
|
|
341
|
+
.crewlet-tree-canvas__under {
|
|
348
342
|
transition: none;
|
|
349
343
|
}
|
|
350
344
|
}
|
|
@@ -376,6 +370,92 @@
|
|
|
376
370
|
pointer-events: none;
|
|
377
371
|
}
|
|
378
372
|
|
|
373
|
+
/* ---------------------------------------------------------------------------
|
|
374
|
+
* A GROUP: a box round a run of sibling cards, with a label along its top.
|
|
375
|
+
*
|
|
376
|
+
* The approved design's unit box: a hairline on the card rung with the unit's
|
|
377
|
+
* name in the tertiary ink at 12px, and the project key chip at the end of
|
|
378
|
+
* that line. The hairline is `--color-border-default` over
|
|
379
|
+
* `--color-surface-subtle` standing on the canvas's own ground, which is the
|
|
380
|
+
* pair the palette suite already holds to a visible step (the card hairline
|
|
381
|
+
* rule); a card inside the box is the same rung and is found by its own
|
|
382
|
+
* hairline, exactly as a card on a sheet is.
|
|
383
|
+
*
|
|
384
|
+
* THE ROOM IS THE LAYOUT'S. The padding round the members is the probe below,
|
|
385
|
+
* and the room above them is the header's own measured height, so the box is
|
|
386
|
+
* never drawn over a card it does not hold and a branch is never run through
|
|
387
|
+
* it: both are reserved by `layoutForest` before anything is placed.
|
|
388
|
+
* ------------------------------------------------------------------------- */
|
|
389
|
+
|
|
390
|
+
/*
|
|
391
|
+
* The room beside and below a group's members, as a token: `--spacing-3`,
|
|
392
|
+
* which is also the label's own inset, so the label starts on the line the
|
|
393
|
+
* first member's edge does.
|
|
394
|
+
*/
|
|
395
|
+
.crewlet-tree-canvas__group-pad {
|
|
396
|
+
width: var(--spacing-3);
|
|
397
|
+
height: var(--spacing-3);
|
|
398
|
+
visibility: hidden;
|
|
399
|
+
pointer-events: none;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/*
|
|
403
|
+
* THE BOX IS DASHED, as the approved org chart draws a unit: a card's own
|
|
404
|
+
* edge is solid, and a box round several cards drawn the same way read as one
|
|
405
|
+
* more, larger card. A dash says the edge is a grouping rather than a thing.
|
|
406
|
+
* It is the STRONG border step, the artboard's, because a dash spends half its
|
|
407
|
+
* length on gaps: at the plain hairline's step the edge all but disappeared
|
|
408
|
+
* against the box's own fill.
|
|
409
|
+
*/
|
|
410
|
+
.crewlet-tree-canvas__group {
|
|
411
|
+
box-sizing: border-box;
|
|
412
|
+
background: var(--color-surface-subtle);
|
|
413
|
+
border: 1px dashed var(--color-border-strong);
|
|
414
|
+
border-radius: var(--radius-xl);
|
|
415
|
+
pointer-events: none;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/*
|
|
419
|
+
* THE LABEL'S LINE, and what the room above the members is measured from: one
|
|
420
|
+
* line, at the box's width, truncated rather than wrapped, because a label
|
|
421
|
+
* that wrapped would move every rank below it.
|
|
422
|
+
*/
|
|
423
|
+
.crewlet-tree-canvas__group-head {
|
|
424
|
+
box-sizing: border-box;
|
|
425
|
+
display: flex;
|
|
426
|
+
align-items: center;
|
|
427
|
+
gap: var(--spacing-2);
|
|
428
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
429
|
+
font-size: var(--font-size-xs);
|
|
430
|
+
line-height: var(--font-line-height-snug);
|
|
431
|
+
color: var(--color-text-tertiary);
|
|
432
|
+
white-space: nowrap;
|
|
433
|
+
pointer-events: none;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/*
|
|
437
|
+
* ON THE BOX'S OWN FILL, over the branches: a branch dropping into a member
|
|
438
|
+
* passes behind the words rather than striking through them, and the fill is
|
|
439
|
+
* the box's, so nothing about the label reads as a second surface.
|
|
440
|
+
*/
|
|
441
|
+
.crewlet-tree-canvas__group-label,
|
|
442
|
+
.crewlet-tree-canvas__group-lead {
|
|
443
|
+
background: var(--color-surface-subtle);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.crewlet-tree-canvas__group-label {
|
|
447
|
+
min-width: 0;
|
|
448
|
+
overflow: hidden;
|
|
449
|
+
text-overflow: ellipsis;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/* The key AHEAD of the name, a project key chip, never cut: the name after
|
|
453
|
+
it is what gives way when the line is short. */
|
|
454
|
+
.crewlet-tree-canvas__group-lead {
|
|
455
|
+
display: inline-flex;
|
|
456
|
+
flex: none;
|
|
457
|
+
}
|
|
458
|
+
|
|
379
459
|
/* ---------------------------------------------------------------------------
|
|
380
460
|
* THE CHART ARRIVING, AND REARRANGING.
|
|
381
461
|
*
|
|
@@ -392,11 +472,16 @@
|
|
|
392
472
|
* ------------------------------------------------------------------------- */
|
|
393
473
|
|
|
394
474
|
.crewlet-tree-canvas__card[data-enter='waiting'],
|
|
395
|
-
.crewlet-tree-canvas__links path[data-enter='waiting']
|
|
475
|
+
.crewlet-tree-canvas__links path[data-enter='waiting'],
|
|
476
|
+
.crewlet-tree-canvas__group[data-enter='waiting'],
|
|
477
|
+
.crewlet-tree-canvas__group-head[data-enter='waiting'] {
|
|
396
478
|
opacity: 0;
|
|
397
479
|
}
|
|
398
480
|
|
|
399
|
-
|
|
481
|
+
/* A group arrives with its first member, at the card's pace. */
|
|
482
|
+
.crewlet-tree-canvas__card[data-enter='shown'],
|
|
483
|
+
.crewlet-tree-canvas__group[data-enter='shown'],
|
|
484
|
+
.crewlet-tree-canvas__group-head[data-enter='shown'] {
|
|
400
485
|
animation: crewlet-tree-canvas-arrive var(--motion-duration-slow) var(--motion-easing-default) both;
|
|
401
486
|
}
|
|
402
487
|
|
|
@@ -422,9 +507,20 @@
|
|
|
422
507
|
* when the setting changed.
|
|
423
508
|
*/
|
|
424
509
|
@media (prefers-reduced-motion: reduce) {
|
|
510
|
+
/* Drawn, whatever step of the entrance it had reached: a card still WAITING
|
|
511
|
+
is otherwise held at nothing. */
|
|
425
512
|
.crewlet-tree-canvas__card[data-enter],
|
|
426
|
-
.crewlet-tree-canvas__links path[data-enter]
|
|
513
|
+
.crewlet-tree-canvas__links path[data-enter],
|
|
514
|
+
.crewlet-tree-canvas__group[data-enter],
|
|
515
|
+
.crewlet-tree-canvas__group-head[data-enter] {
|
|
427
516
|
opacity: 1;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/* And the entrance stopped by the selectors that start it. */
|
|
520
|
+
.crewlet-tree-canvas__card[data-enter='shown'],
|
|
521
|
+
.crewlet-tree-canvas__links path[data-enter='shown'],
|
|
522
|
+
.crewlet-tree-canvas__group[data-enter='shown'],
|
|
523
|
+
.crewlet-tree-canvas__group-head[data-enter='shown'] {
|
|
428
524
|
animation: none;
|
|
429
525
|
}
|
|
430
526
|
}
|
|
@@ -436,10 +532,11 @@
|
|
|
436
532
|
|
|
437
533
|
/*
|
|
438
534
|
* THE CONNECTORS ARE THE CONTENT, and they take the step that is measured to
|
|
439
|
-
* be resolvable. The SHAPE is `layoutConnectors`, which draws
|
|
440
|
-
* from each parent's bottom into each child's top
|
|
441
|
-
*
|
|
442
|
-
*
|
|
535
|
+
* be resolvable. The SHAPE is `layoutConnectors`, which draws an orthogonal
|
|
536
|
+
* elbow from each parent's bottom into each child's top, in SVG attributes
|
|
537
|
+
* the layout computes rather than in a style a policy has to allow; what is
|
|
538
|
+
* decided here is only how dark and how heavy it is, and that the joins are
|
|
539
|
+
* round so a corner reads as a turn rather than as two lines meeting.
|
|
443
540
|
*
|
|
444
541
|
* A connector is the only thing on the chart that says who reports to whom:
|
|
445
542
|
* remove it and the picture is a scatter of cards. That makes it a graphical
|
|
@@ -450,11 +547,22 @@
|
|
|
450
547
|
* boundary step, which the palette suite already holds at 3:1 on every ground,
|
|
451
548
|
* measures 4.83:1 and 4.78:1. Darker than the chart this is drawn from, and
|
|
452
549
|
* deliberately: there the hierarchy was a line a reader had to hunt for.
|
|
550
|
+
*
|
|
551
|
+
* THE APPROVED DESIGN DRAWS IT IN `--color-border-strong`, AND THE FLOOR WINS.
|
|
552
|
+
* The artboard's connector is the strong border step at 1.5px, and on the
|
|
553
|
+
* canvas's ground that step measures 1.45:1 in dark and 1.43:1 in light (1.40
|
|
554
|
+
* and 1.50 on a group box's card rung): a line a reader cannot make out, for
|
|
555
|
+
* the one mark that says who reports to whom. The palette suite's data-mark
|
|
556
|
+
* table holds a chart's connector to 3:1 on `--color-border-control`, so the
|
|
557
|
+
* value moves up the border family to the first step that clears it, 4.40:1
|
|
558
|
+
* and 4.04:1 (4.25 and 4.26 on the card rung). The WEIGHT is the design's:
|
|
559
|
+
* 1.5px, heavier than the hairline this used to be, so a branch between two
|
|
560
|
+
* ranks of 90px cards reads as a line of the chart rather than as a seam.
|
|
453
561
|
*/
|
|
454
562
|
.crewlet-tree-canvas__links path {
|
|
455
563
|
fill: none;
|
|
456
564
|
stroke: var(--color-border-control);
|
|
457
|
-
stroke-width: 1;
|
|
565
|
+
stroke-width: 1.5;
|
|
458
566
|
stroke-linecap: round;
|
|
459
567
|
stroke-linejoin: round;
|
|
460
568
|
}
|
|
@@ -829,6 +937,20 @@
|
|
|
829
937
|
pointer-events: auto;
|
|
830
938
|
}
|
|
831
939
|
|
|
940
|
+
/*
|
|
941
|
+
* The node's quiet controls arrive as a state change too, so under reduced
|
|
942
|
+
* motion they simply appear. Stopped HERE, after the rules that start their
|
|
943
|
+
* fades: the three selectors tie with those rules on specificity, so the stop
|
|
944
|
+
* has to come later in the file to win.
|
|
945
|
+
*/
|
|
946
|
+
@media (prefers-reduced-motion: reduce) {
|
|
947
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__under > :not(.crewlet-add-pill),
|
|
948
|
+
.crewlet-tree-canvas--node .crewlet-org-node__leading,
|
|
949
|
+
.crewlet-tree-canvas--node .crewlet-org-node-lead__clear {
|
|
950
|
+
transition: none;
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
|
|
832
954
|
/*
|
|
833
955
|
* THE BRANCHES ARE HEAVIER HERE. A node is half the height of a card, so a
|
|
834
956
|
* hairline between two ranks of them is a thread; this is the console chart's
|
|
@@ -929,12 +1051,11 @@
|
|
|
929
1051
|
* chart this package is drawn to match does exactly this, and every step below
|
|
930
1052
|
* is its step.
|
|
931
1053
|
*
|
|
932
|
-
* IT IS THE ONLY DASHED
|
|
933
|
-
*
|
|
934
|
-
* node
|
|
935
|
-
* is
|
|
936
|
-
*
|
|
937
|
-
* that pulses for as long as the form is open.
|
|
1054
|
+
* IT IS THE ONLY DASHED CARD ON THE CHART, because a dashed edge marks a
|
|
1055
|
+
* place nothing fills yet and this is the one card that is not a node of the
|
|
1056
|
+
* data. Every node's card is solid, a person's seat included: who holds a seat
|
|
1057
|
+
* is its badge's outline, never the card's frame, which is why the chart has
|
|
1058
|
+
* no second dashed card for a person to be confused with this one.
|
|
938
1059
|
*
|
|
939
1060
|
* ITS GROUND IS EVERY OTHER CARD'S. The ghost holds a real form with real
|
|
940
1061
|
* labels, helps and refusals in it, so it is NOT tinted: every contrast
|
|
@@ -1078,8 +1199,11 @@
|
|
|
1078
1199
|
@media (prefers-reduced-motion: reduce) {
|
|
1079
1200
|
/* NOT `transform` on the card itself: its transform is where the layout
|
|
1080
1201
|
put it, written as an inline style, and a rule here saying `none` would
|
|
1081
|
-
be a rule that only ever fires when something else drops that style.
|
|
1082
|
-
|
|
1202
|
+
be a rule that only ever fires when something else drops that style.
|
|
1203
|
+
Named with the chart's class, as the rule that starts its arrival names
|
|
1204
|
+
it: by its own class alone the stop was one class short of that rule,
|
|
1205
|
+
and the arrival played for a reader who had asked for none. */
|
|
1206
|
+
.crewlet-tree-canvas .crewlet-tree-canvas__card--composing,
|
|
1083
1207
|
.crewlet-tree-canvas__links path[data-composing='true'] {
|
|
1084
1208
|
opacity: 1;
|
|
1085
1209
|
animation: none;
|
package/dist/TreeGrid/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { TreeGrid } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { TreeGrid } from '../chunk-FIFNP6PL.js';
|
|
2
|
+
import '../chunk-S3BCVWTU.js';
|
|
3
3
|
import '../chunk-53DVJCVW.js';
|
|
4
4
|
import '../chunk-7RPGY3JE.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-R25RGPUB.js';
|
|
6
|
+
import '../chunk-4UQ7SMPK.js';
|
|
7
7
|
import '../chunk-BZFWDIV6.js';
|
|
8
8
|
import '../chunk-ODEQTPFM.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isComposing, isModalLayerOpen } from './chunk-
|
|
1
|
+
import { isComposing, isModalLayerOpen } from './chunk-R25RGPUB.js';
|
|
2
2
|
import { useRef, useEffect } from 'react';
|
|
3
3
|
|
|
4
4
|
var TYPING_ROLES = /* @__PURE__ */ new Set(["combobox", "listbox", "textbox", "searchbox", "spinbutton"]);
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
2
|
+
import './SegmentedMeter-KQNML2TW.css';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
function settle(difference, scale) {
|
|
6
|
+
if (Math.abs(difference) <= scale * 1e-12) return 0;
|
|
7
|
+
return Number(difference.toPrecision(12));
|
|
8
|
+
}
|
|
9
|
+
function checked(segments, total) {
|
|
10
|
+
const seen = /* @__PURE__ */ new Set();
|
|
11
|
+
for (const segment of segments) {
|
|
12
|
+
if (seen.has(segment.id)) {
|
|
13
|
+
throw new RangeError(`SegmentedMeter segment ids must be unique; "${segment.id}" is used twice`);
|
|
14
|
+
}
|
|
15
|
+
seen.add(segment.id);
|
|
16
|
+
if (!Number.isFinite(segment.value) || segment.value < 0) {
|
|
17
|
+
throw new RangeError(
|
|
18
|
+
`SegmentedMeter segment "${segment.id}" must be a finite count of at least 0; it was ${segment.value}`
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (total !== void 0 && (!Number.isFinite(total) || total < 0)) {
|
|
23
|
+
throw new RangeError(`SegmentedMeter total must be a finite count of at least 0; it was ${total}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function measure(segments, total) {
|
|
27
|
+
const sum = segments.reduce((running, segment) => running + segment.value, 0);
|
|
28
|
+
const whole = total ?? sum;
|
|
29
|
+
const scale = Math.max(whole, sum);
|
|
30
|
+
const remainder = Math.max(0, settle(whole - sum, scale));
|
|
31
|
+
return { whole, scale, remainder };
|
|
32
|
+
}
|
|
33
|
+
function segmentedMeterLabel(segments, total, remainderLabel) {
|
|
34
|
+
checked(segments, total);
|
|
35
|
+
const { whole, remainder } = measure(segments, total);
|
|
36
|
+
const words = segments.filter((segment) => segment.value > 0).map((segment) => `${segment.value} ${segment.label}`);
|
|
37
|
+
if (remainder > 0 && remainderLabel !== void 0) words.push(`${remainder} ${remainderLabel}`);
|
|
38
|
+
return `${words.length === 0 ? "0" : words.join(", ")} of ${whole}`;
|
|
39
|
+
}
|
|
40
|
+
function SegmentedMeter({
|
|
41
|
+
segments,
|
|
42
|
+
total,
|
|
43
|
+
remainderLabel,
|
|
44
|
+
size = "default",
|
|
45
|
+
label,
|
|
46
|
+
decorative = false,
|
|
47
|
+
className,
|
|
48
|
+
style,
|
|
49
|
+
...rest
|
|
50
|
+
}) {
|
|
51
|
+
checked(segments, total);
|
|
52
|
+
const { scale, remainder } = measure(segments, total);
|
|
53
|
+
const parts = segments.filter((segment) => segment.value > 0);
|
|
54
|
+
const share = (value) => `${value / scale * 100}%`;
|
|
55
|
+
const leftover = scale === 0 ? "100%" : remainder > 0 ? share(remainder) : null;
|
|
56
|
+
const drawn = parts.length + (leftover === null ? 0 : 1);
|
|
57
|
+
return /* @__PURE__ */ jsxs(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
...rest,
|
|
61
|
+
className: cx("crewlet-segmented-meter", `crewlet-segmented-meter--${size}`, className),
|
|
62
|
+
style: { "--crewlet-segmented-meter-count": drawn, ...style },
|
|
63
|
+
role: decorative ? void 0 : "img",
|
|
64
|
+
"aria-label": decorative ? void 0 : label ?? segmentedMeterLabel(segments, total, remainderLabel),
|
|
65
|
+
"aria-hidden": decorative ? true : void 0,
|
|
66
|
+
children: [
|
|
67
|
+
parts.map((segment) => /* @__PURE__ */ jsx(
|
|
68
|
+
"span",
|
|
69
|
+
{
|
|
70
|
+
className: "crewlet-segmented-meter__segment",
|
|
71
|
+
"data-tone": segment.tone,
|
|
72
|
+
style: { flexBasis: share(segment.value) }
|
|
73
|
+
},
|
|
74
|
+
segment.id
|
|
75
|
+
)),
|
|
76
|
+
leftover === null ? null : /* @__PURE__ */ jsx(
|
|
77
|
+
"span",
|
|
78
|
+
{
|
|
79
|
+
className: "crewlet-segmented-meter__segment crewlet-segmented-meter__remainder",
|
|
80
|
+
style: { flexBasis: leftover }
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export { SegmentedMeter, segmentedMeterLabel };
|
|
@@ -1,29 +1,58 @@
|
|
|
1
1
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
2
2
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
3
|
-
import './Meter-
|
|
3
|
+
import './Meter-5VCSFMZW.css';
|
|
4
4
|
import { useId } from 'react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
|
+
var METER_STATES = Object.freeze(["ok", "near", "refusing"]);
|
|
8
|
+
var DEFAULT_METER_THRESHOLDS = Object.freeze({ near: 0.75 });
|
|
9
|
+
var STATE_TONES = {
|
|
10
|
+
ok: "quantity",
|
|
11
|
+
near: "warning",
|
|
12
|
+
refusing: "danger"
|
|
13
|
+
};
|
|
14
|
+
function meterStateTone(state) {
|
|
15
|
+
if (!Object.hasOwn(STATE_TONES, state)) {
|
|
16
|
+
throw new RangeError(`Meter state must be one of ${METER_STATES.join(", ")}; it was ${String(state)}`);
|
|
17
|
+
}
|
|
18
|
+
return STATE_TONES[state];
|
|
19
|
+
}
|
|
20
|
+
function meterState(fraction, thresholds = DEFAULT_METER_THRESHOLDS) {
|
|
21
|
+
const { near } = thresholds;
|
|
22
|
+
if (!Number.isFinite(near) || near <= 0 || near > 1) {
|
|
23
|
+
throw new RangeError(`Meter thresholds.near must be a fraction of the limit above 0 and at most 1; it was ${near}`);
|
|
24
|
+
}
|
|
25
|
+
if (fraction >= 1) return "refusing";
|
|
26
|
+
if (fraction >= near) return "near";
|
|
27
|
+
return "ok";
|
|
28
|
+
}
|
|
7
29
|
function meterTone(percent) {
|
|
8
|
-
|
|
9
|
-
if (percent >= 75) return "warning";
|
|
10
|
-
return "brand";
|
|
30
|
+
return meterStateTone(meterState(percent / 100));
|
|
11
31
|
}
|
|
12
32
|
function progressTone(percent) {
|
|
13
|
-
return percent >= 100 ? "success" : "
|
|
33
|
+
return percent >= 100 ? "success" : "quantity";
|
|
34
|
+
}
|
|
35
|
+
function drawnTone({
|
|
36
|
+
state,
|
|
37
|
+
tone,
|
|
38
|
+
polarity = "spent",
|
|
39
|
+
thresholds
|
|
40
|
+
}, fraction, percent) {
|
|
41
|
+
if (state !== void 0) return meterStateTone(state);
|
|
42
|
+
if (tone !== void 0) return tone;
|
|
43
|
+
if (polarity === "progress") return progressTone(percent);
|
|
44
|
+
return meterStateTone(meterState(fraction, thresholds));
|
|
14
45
|
}
|
|
15
|
-
var RAMPS = {
|
|
16
|
-
spent: meterTone,
|
|
17
|
-
progress: progressTone
|
|
18
|
-
};
|
|
19
46
|
function Meter({
|
|
20
47
|
value,
|
|
21
48
|
max,
|
|
22
49
|
label,
|
|
23
50
|
valueText,
|
|
24
51
|
hint,
|
|
52
|
+
state,
|
|
25
53
|
tone,
|
|
26
|
-
polarity
|
|
54
|
+
polarity,
|
|
55
|
+
thresholds,
|
|
27
56
|
size = "default",
|
|
28
57
|
hideLabel = false,
|
|
29
58
|
className,
|
|
@@ -31,8 +60,9 @@ function Meter({
|
|
|
31
60
|
}) {
|
|
32
61
|
const labelId = useId();
|
|
33
62
|
const bounded = max > 0;
|
|
34
|
-
const
|
|
35
|
-
const
|
|
63
|
+
const fraction = bounded ? value / max : 0;
|
|
64
|
+
const percent = bounded ? Math.min(100, Math.max(0, fraction * 100)) : 0;
|
|
65
|
+
const drawn = drawnTone({ state, tone, polarity, thresholds }, fraction, percent);
|
|
36
66
|
const trailing = hint ?? valueText;
|
|
37
67
|
const reported = bounded ? Math.min(max, Math.max(0, value)) : value;
|
|
38
68
|
const spoken = bounded ? valueText ?? (reported === value ? void 0 : `${value} of ${max}`) : void 0;
|
|
@@ -60,4 +90,4 @@ function Meter({
|
|
|
60
90
|
] });
|
|
61
91
|
}
|
|
62
92
|
|
|
63
|
-
export { Meter, meterTone, progressTone };
|
|
93
|
+
export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone };
|
|
@@ -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-TVEUWK6L.css';
|
|
4
4
|
import { forwardRef, useId, Children, isValidElement, cloneElement } from 'react';
|
|
5
5
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { StatusDot } from './chunk-WIATRXEJ.js';
|
|
2
|
+
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
3
|
+
import { cx } from './chunk-ODEQTPFM.js';
|
|
4
|
+
import './Stepper-HW4JM3YH.css';
|
|
5
|
+
import { CheckGlyph } from '@crewlethq/icons/glyphs';
|
|
6
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
|
+
|
|
8
|
+
function Stepper({
|
|
9
|
+
steps,
|
|
10
|
+
current,
|
|
11
|
+
label,
|
|
12
|
+
tone = "info",
|
|
13
|
+
pulse = false,
|
|
14
|
+
doneLabel = "Done",
|
|
15
|
+
className,
|
|
16
|
+
...rest
|
|
17
|
+
}) {
|
|
18
|
+
const seen = /* @__PURE__ */ new Set();
|
|
19
|
+
for (const step of steps) {
|
|
20
|
+
if (seen.has(step.id)) throw new RangeError(`Stepper step ids must be unique; "${step.id}" is used twice`);
|
|
21
|
+
seen.add(step.id);
|
|
22
|
+
}
|
|
23
|
+
const at = current === null ? steps.length : steps.findIndex((step) => step.id === current);
|
|
24
|
+
if (at < 0) {
|
|
25
|
+
throw new RangeError(
|
|
26
|
+
`Stepper current must be the id of one of its steps, or null once every step is done; "${current}" is not one of ${steps.map((step) => `"${step.id}"`).join(", ")}`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
if (steps.length === 0) return null;
|
|
30
|
+
const stateOf = (index) => index < at ? "done" : index === at ? "current" : "later";
|
|
31
|
+
return (
|
|
32
|
+
/*
|
|
33
|
+
* `role="list"` although an `ol` already has one, which is why the lint
|
|
34
|
+
* rule that calls it redundant is silenced here rather than obeyed, as
|
|
35
|
+
* `Legend` and `DiffList` silence it: the stylesheet takes the markers off,
|
|
36
|
+
* and WebKit answers a marker-less list as a group of paragraphs, so a
|
|
37
|
+
* reader would no longer be told how many steps there are before hearing
|
|
38
|
+
* them. The role puts that back.
|
|
39
|
+
*/
|
|
40
|
+
// eslint-disable-next-line jsx-a11y/no-redundant-roles
|
|
41
|
+
/* @__PURE__ */ jsx(
|
|
42
|
+
"ol",
|
|
43
|
+
{
|
|
44
|
+
...rest,
|
|
45
|
+
role: "list",
|
|
46
|
+
className: cx("crewlet-stepper", `crewlet-stepper--${tone}`, className),
|
|
47
|
+
"aria-label": label,
|
|
48
|
+
children: steps.map((step, index) => {
|
|
49
|
+
const state = stateOf(index);
|
|
50
|
+
return /* @__PURE__ */ jsx(
|
|
51
|
+
"li",
|
|
52
|
+
{
|
|
53
|
+
className: cx("crewlet-stepper__step", `crewlet-stepper__step--${state}`),
|
|
54
|
+
"aria-current": state === "current" ? "step" : void 0,
|
|
55
|
+
children: /* @__PURE__ */ jsxs("span", { className: "crewlet-stepper__chip", children: [
|
|
56
|
+
state === "done" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
57
|
+
/* @__PURE__ */ jsx(CheckGlyph, { size: "xs", className: "crewlet-stepper__check" }),
|
|
58
|
+
/* @__PURE__ */ jsx(VisuallyHidden, { children: doneLabel }),
|
|
59
|
+
" "
|
|
60
|
+
] }) : null,
|
|
61
|
+
state === "current" ? /* @__PURE__ */ jsx(StatusDot, { tone, pulse, className: "crewlet-stepper__dot" }) : null,
|
|
62
|
+
/* @__PURE__ */ jsx("span", { className: "crewlet-stepper__label", children: step.label })
|
|
63
|
+
] })
|
|
64
|
+
},
|
|
65
|
+
step.id
|
|
66
|
+
);
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { Stepper };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { usePopupLayer, isComposing } from './chunk-
|
|
2
|
-
import './Listbox-
|
|
1
|
+
import { usePopupLayer, isComposing } from './chunk-R25RGPUB.js';
|
|
2
|
+
import './Listbox-6WJNJQVQ.css';
|
|
3
3
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
4
4
|
|
|
5
5
|
function useListbox({
|
|
@@ -25,13 +25,13 @@ function useListbox({
|
|
|
25
25
|
);
|
|
26
26
|
useEffect(() => {
|
|
27
27
|
const box = list.current;
|
|
28
|
-
const row =
|
|
29
|
-
if (!box || !row) return;
|
|
28
|
+
const row = active >= 0 ? document.getElementById(`${listId}-${active}`) : null;
|
|
29
|
+
if (!box || !row || !box.contains(row)) return;
|
|
30
30
|
const bounds = box.getBoundingClientRect();
|
|
31
31
|
const spot = row.getBoundingClientRect();
|
|
32
32
|
if (spot.top < bounds.top) box.scrollTop -= bounds.top - spot.top;
|
|
33
33
|
else if (spot.bottom > bounds.bottom) box.scrollTop += spot.bottom - bounds.bottom;
|
|
34
|
-
}, [active, count, open]);
|
|
34
|
+
}, [active, count, open, listId]);
|
|
35
35
|
function onKeyDown(event) {
|
|
36
36
|
if (!open || isComposing(event)) return false;
|
|
37
37
|
if (event.key === "Escape") {
|
|
@@ -52,6 +52,7 @@ function useListbox({
|
|
|
52
52
|
setAt((active - 1 + count) % count);
|
|
53
53
|
return true;
|
|
54
54
|
case "Enter":
|
|
55
|
+
if (event.metaKey || event.ctrlKey || event.altKey) return false;
|
|
55
56
|
event.preventDefault();
|
|
56
57
|
onCommit(active);
|
|
57
58
|
return true;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { StatusDot } from './chunk-
|
|
1
|
+
import { StatusDot } from './chunk-WIATRXEJ.js';
|
|
2
2
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
3
|
-
import './Tag-
|
|
4
|
-
import {
|
|
3
|
+
import './Tag-GBE7LQJP.css';
|
|
4
|
+
import { XGlyph } from '@crewlethq/icons/glyphs';
|
|
5
5
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
function Tag(props) {
|
|
@@ -63,7 +63,7 @@ function Tag(props) {
|
|
|
63
63
|
onRemove();
|
|
64
64
|
},
|
|
65
65
|
"aria-label": removeAriaLabel,
|
|
66
|
-
children: /* @__PURE__ */ jsx(
|
|
66
|
+
children: /* @__PURE__ */ jsx(XGlyph, { size: "xs" })
|
|
67
67
|
}
|
|
68
68
|
);
|
|
69
69
|
if (split) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useLayerContainer, viewportBounds, LAYER_GAP, outsideBounds, placePopup, LAYER_REPOSITION_EVENT } from './chunk-7RPGY3JE.js';
|
|
2
|
-
import { usePopupLayer, focusables } from './chunk-
|
|
2
|
+
import { usePopupLayer, focusables } from './chunk-R25RGPUB.js';
|
|
3
3
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
4
4
|
import './Popover-WJGCF3ZQ.css';
|
|
5
5
|
import { useId, useState, useRef, useCallback, useLayoutEffect, useEffect, cloneElement } from 'react';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { LayerNodeBridge } from './chunk-53DVJCVW.js';
|
|
2
2
|
import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-7RPGY3JE.js';
|
|
3
|
-
import { IconButton } from './chunk-
|
|
4
|
-
import { Button } from './chunk-
|
|
3
|
+
import { IconButton } from './chunk-4UQ7SMPK.js';
|
|
4
|
+
import { Button } from './chunk-ETYEBKR4.js';
|
|
5
5
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
6
6
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
7
7
|
import './Canvas-Q6JETCWR.css';
|
|
8
8
|
import { useId, useRef, useState, useCallback, useLayoutEffect, useImperativeHandle, useEffect } from 'react';
|
|
9
|
-
import { ZoomOutGlyph, ZoomInGlyph,
|
|
9
|
+
import { ZoomOutGlyph, ZoomInGlyph, FullscreenGlyph } from '@crewlethq/icons/glyphs';
|
|
10
10
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
11
11
|
|
|
12
12
|
// src/Canvas/geometry.ts
|
|
@@ -528,7 +528,7 @@ function Canvas({
|
|
|
528
528
|
{
|
|
529
529
|
size: "sm",
|
|
530
530
|
label: text.fit,
|
|
531
|
-
icon: /* @__PURE__ */ jsx(
|
|
531
|
+
icon: /* @__PURE__ */ jsx(FullscreenGlyph, {}),
|
|
532
532
|
onClick: () => content && apply(fitView(content, sizeNow.current), "near"),
|
|
533
533
|
disabled: !ready
|
|
534
534
|
}
|