@ceebee/ui 1.8.0 → 1.10.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/THIRD_PARTY_NOTICES.md +19 -1
- package/dist/client.css +281 -0
- package/dist/client.d.ts +447 -1
- package/dist/client.js +878 -51
- package/dist/styles.css +555 -0
- package/package.json +6 -2
package/dist/client.d.ts
CHANGED
|
@@ -377,6 +377,452 @@ declare const PanZoomCanvas: typeof PanZoomCanvasRoot & {
|
|
|
377
377
|
Skeleton: typeof PanZoomCanvasSkeleton;
|
|
378
378
|
};
|
|
379
379
|
|
|
380
|
+
interface BoardSkeletonProps {
|
|
381
|
+
/** How many columns to stand in for — the same shape the real board will draw. */
|
|
382
|
+
columns?: number;
|
|
383
|
+
/** Cards per column. */
|
|
384
|
+
cards?: number;
|
|
385
|
+
label?: string;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* The board's placeholder, built from the same geometry as the board itself, so the page does not
|
|
389
|
+
* reflow when the real columns arrive.
|
|
390
|
+
*/
|
|
391
|
+
declare function BoardSkeleton({ columns, cards, label }: BoardSkeletonProps): react.JSX.Element;
|
|
392
|
+
|
|
393
|
+
/** One card on the board. `disabled` refuses movement without hiding the card. */
|
|
394
|
+
interface BoardCard {
|
|
395
|
+
id: string;
|
|
396
|
+
title: ReactNode;
|
|
397
|
+
/**
|
|
398
|
+
* The card's name in an announcement and on the drag handle, when `title` is a node rather than a
|
|
399
|
+
* string. Without it a node-titled card is announced by its id, which is a uuid read aloud.
|
|
400
|
+
*/
|
|
401
|
+
label?: string;
|
|
402
|
+
/** Whatever a person triages by — an owner, an age, a due date, a blocked marker. */
|
|
403
|
+
meta?: ReactNode;
|
|
404
|
+
/** A card that cannot move: it stays visible, is not a drag source, and is skipped by the keyboard path. */
|
|
405
|
+
disabled?: boolean;
|
|
406
|
+
/** Why it cannot move, announced when a move is attempted on it. */
|
|
407
|
+
disabledReason?: string;
|
|
408
|
+
}
|
|
409
|
+
/** One column: a state of the workflow, not a category of thing. */
|
|
410
|
+
interface BoardColumn {
|
|
411
|
+
id: string;
|
|
412
|
+
name: ReactNode;
|
|
413
|
+
/**
|
|
414
|
+
* The column's accessible name, when `name` is a node rather than a string — a header carrying
|
|
415
|
+
* status tags still has to be nameable. Without it a node-named column has no accessible name.
|
|
416
|
+
*/
|
|
417
|
+
label?: string;
|
|
418
|
+
cards: BoardCard[];
|
|
419
|
+
/** A work-in-progress limit, shown beside the count; exceeding it marks the column, never blocks a move. */
|
|
420
|
+
limit?: number;
|
|
421
|
+
/** Shown when the column holds no cards. An empty column must still invite one. */
|
|
422
|
+
empty?: ReactNode;
|
|
423
|
+
/** A column that takes no cards — an end state, say. Dropping onto it is refused with `refusal`. */
|
|
424
|
+
accepts?: boolean;
|
|
425
|
+
/** Why this column refuses a card, announced and shown on an attempted drop. */
|
|
426
|
+
refusal?: string;
|
|
427
|
+
}
|
|
428
|
+
/** Where a card is, or is going. `index` is its position within the column, 0-based. */
|
|
429
|
+
interface BoardPosition {
|
|
430
|
+
columnId: string;
|
|
431
|
+
index: number;
|
|
432
|
+
}
|
|
433
|
+
/** A move the consumer is asked to validate and apply. */
|
|
434
|
+
interface BoardMove {
|
|
435
|
+
cardId: string;
|
|
436
|
+
from: BoardPosition;
|
|
437
|
+
to: BoardPosition;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* What the consumer answers with. Resolving accepts the move; rejecting — or resolving with a
|
|
441
|
+
* `refused` reason — rolls the board back and says why.
|
|
442
|
+
*/
|
|
443
|
+
type BoardMoveResult = void | {
|
|
444
|
+
refused: string;
|
|
445
|
+
};
|
|
446
|
+
/** The shape the pure logic needs: ids and order, no React. */
|
|
447
|
+
interface BoardShape {
|
|
448
|
+
id: string;
|
|
449
|
+
cards: {
|
|
450
|
+
id: string;
|
|
451
|
+
disabled?: boolean;
|
|
452
|
+
}[];
|
|
453
|
+
accepts?: boolean;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
interface BoardLabels {
|
|
457
|
+
pickUp: string;
|
|
458
|
+
dropped: (card: string, column: string) => string;
|
|
459
|
+
cancelled: string;
|
|
460
|
+
refused: (reason: string) => string;
|
|
461
|
+
undo: string;
|
|
462
|
+
/** The drag handle's accessible name, when cards carry their own actions. */
|
|
463
|
+
move: (card: string) => string;
|
|
464
|
+
undone: string;
|
|
465
|
+
lanes: string;
|
|
466
|
+
over: (count: number, limit: number) => string;
|
|
467
|
+
}
|
|
468
|
+
interface BoardProps {
|
|
469
|
+
columns: BoardColumn[];
|
|
470
|
+
/**
|
|
471
|
+
* The one path every move takes, from the pointer and from the keyboard alike. Return nothing to
|
|
472
|
+
* accept it; return `{ refused }` or reject to roll the board back and say why.
|
|
473
|
+
*/
|
|
474
|
+
onMove: (move: BoardMove) => BoardMoveResult | Promise<BoardMoveResult>;
|
|
475
|
+
/** `auto` switches to lanes on a narrow viewport; force either to prove one in a test. */
|
|
476
|
+
layout?: 'auto' | 'board' | 'lanes';
|
|
477
|
+
/** What `auto` calls narrow. */
|
|
478
|
+
phoneQuery?: string;
|
|
479
|
+
labels?: Partial<BoardLabels>;
|
|
480
|
+
motion?: boolean;
|
|
481
|
+
/**
|
|
482
|
+
* Put the grab on a handle instead of the whole card. Use it whenever a card carries its own
|
|
483
|
+
* buttons: a card that is itself a control has **presentational children**, so anything
|
|
484
|
+
* interactive inside it disappears from the accessibility tree. With a handle the card is plain
|
|
485
|
+
* markup, its buttons stay reachable, and the handle is the one thing that drags and takes the
|
|
486
|
+
* keyboard.
|
|
487
|
+
*/
|
|
488
|
+
handle?: boolean;
|
|
489
|
+
'aria-label'?: string;
|
|
490
|
+
}
|
|
491
|
+
declare function BoardRoot({ columns, onMove, layout, phoneQuery, labels, motion, handle, 'aria-label': ariaLabel, }: BoardProps): react.JSX.Element;
|
|
492
|
+
declare const Board: typeof BoardRoot & {
|
|
493
|
+
Skeleton: typeof BoardSkeleton;
|
|
494
|
+
};
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* What a dated series means, with no chart and no DOM in sight.
|
|
498
|
+
*
|
|
499
|
+
* Kept pure for the usual reason and one extra: these charts are drawn on a **canvas**, so nothing
|
|
500
|
+
* about them is inspectable from the outside. These functions are the only testable description of
|
|
501
|
+
* what the picture claims, and they are also what feeds the text alternative a screen reader reads
|
|
502
|
+
* and what a forced-colors viewer gets instead of the bitmap.
|
|
503
|
+
*/
|
|
504
|
+
/** One reading: a day, and a value on that day. */
|
|
505
|
+
interface SeriesPoint {
|
|
506
|
+
/** `YYYY-MM-DD`. A calendar day, not an instant. */
|
|
507
|
+
day: string;
|
|
508
|
+
value: number;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* `YYYY-MM-DD`, or null when it is not a day at all.
|
|
512
|
+
*
|
|
513
|
+
* The pattern is not the check: `2026-02-30` matches it and is not a day. The round-trip through `Date`
|
|
514
|
+
* settles that — but **an impossible month makes an Invalid Date, and `toISOString()` throws on one**
|
|
515
|
+
* rather than returning anything falsy. So the time value is tested before it is formatted; otherwise
|
|
516
|
+
* `2026-13-01` takes the whole chart down instead of being ignored.
|
|
517
|
+
*/
|
|
518
|
+
declare function asDay(value: string): string | null;
|
|
519
|
+
/**
|
|
520
|
+
* The points as the chart substrate demands them: ascending, and one per day.
|
|
521
|
+
*
|
|
522
|
+
* This is not tidying. The library **throws** on a repeated or out-of-order time rather than ignoring
|
|
523
|
+
* it, so a source that reports the same day twice — a correction, two crews reporting the same site —
|
|
524
|
+
* would take the whole screen down. The later value wins, because a correction is the point of sending
|
|
525
|
+
* the day again.
|
|
526
|
+
*/
|
|
527
|
+
declare function seriesPoints(points: readonly SeriesPoint[]): SeriesPoint[];
|
|
528
|
+
/** The value a series holds on a day: its last reading at or before it, or null before it starts. */
|
|
529
|
+
declare function valueOn(points: readonly SeriesPoint[], day: string): number | null;
|
|
530
|
+
/**
|
|
531
|
+
* Every day any series reports, with each series' value on it — the accessible rendering, not a caption.
|
|
532
|
+
*
|
|
533
|
+
* A canvas has no DOM, so this is the *only* thing a screen reader can be given, and it is what a
|
|
534
|
+
* forced-colors viewer sees in place of the bitmap. It is therefore the same data, not a summary. A
|
|
535
|
+
* value is carried forward from the last reading: a day nobody reported is not a day of nothing, and
|
|
536
|
+
* showing it as zero would say the measure collapsed.
|
|
537
|
+
*/
|
|
538
|
+
declare function alignRows(series: readonly {
|
|
539
|
+
key: string;
|
|
540
|
+
points: readonly SeriesPoint[];
|
|
541
|
+
}[]): {
|
|
542
|
+
day: string;
|
|
543
|
+
values: Record<string, number | null>;
|
|
544
|
+
}[];
|
|
545
|
+
/** The span the axis has to cover, or null when there is nothing to draw. */
|
|
546
|
+
declare function seriesSpan(series: readonly {
|
|
547
|
+
points: readonly SeriesPoint[];
|
|
548
|
+
}[]): {
|
|
549
|
+
from: string;
|
|
550
|
+
to: string;
|
|
551
|
+
} | null;
|
|
552
|
+
/**
|
|
553
|
+
* The reported day closest to a given one, or null when nothing was reported.
|
|
554
|
+
*
|
|
555
|
+
* A marker attaches to a data point — the substrate has no vertical line of its own — so anything a
|
|
556
|
+
* chart wants to mark has to land on a day some series actually reports.
|
|
557
|
+
*/
|
|
558
|
+
declare function nearestDay(days: readonly string[], day: string): string | null;
|
|
559
|
+
/** One decimal, because a figure read to four is false precision on a number somebody estimated. */
|
|
560
|
+
declare function round1(value: number): number;
|
|
561
|
+
|
|
562
|
+
/** The colours a canvas is drawn in, resolved from Tokens rather than written down. */
|
|
563
|
+
interface ChartPalette {
|
|
564
|
+
text: string;
|
|
565
|
+
muted: string;
|
|
566
|
+
grid: string;
|
|
567
|
+
background: string;
|
|
568
|
+
font: string;
|
|
569
|
+
/** One entry per series, in the order the series were given. */
|
|
570
|
+
series: string[];
|
|
571
|
+
/** Where a baseline series sits above its base, and below it. */
|
|
572
|
+
above: string;
|
|
573
|
+
below: string;
|
|
574
|
+
}
|
|
575
|
+
/** How thick, and solid or dashed. A plan reads as a reference; delivery reads as the fact. */
|
|
576
|
+
type SeriesEmphasis = 'reference' | 'primary';
|
|
577
|
+
interface SeriesSpec {
|
|
578
|
+
/** Stable key, used in the accessible table and to look a value up. */
|
|
579
|
+
key: string;
|
|
580
|
+
/** What a reader calls it. */
|
|
581
|
+
label: string;
|
|
582
|
+
points: SeriesPoint[];
|
|
583
|
+
emphasis?: SeriesEmphasis;
|
|
584
|
+
/** The Token this series takes its colour from, e.g. `--cb-tone-brand`. */
|
|
585
|
+
colorToken: string;
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* A fixed vertical range, when autoscale would lie.
|
|
589
|
+
*
|
|
590
|
+
* A percentage chart pins 0–100: autoscale stretches a job at 30% to the full height of the plot,
|
|
591
|
+
* which reads as *nearly there* — the opposite of the truth. A money chart normally does not pin,
|
|
592
|
+
* because there is no natural ceiling.
|
|
593
|
+
*/
|
|
594
|
+
interface ValueRange {
|
|
595
|
+
min: number;
|
|
596
|
+
max: number;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* A baseline: the value the series is read against, coloured differently above and below.
|
|
600
|
+
*
|
|
601
|
+
* Zero on a cash projection is the obvious one — the day the balance crosses it is the whole point of
|
|
602
|
+
* the chart — and a minimum buffer is the useful one, because a business that must keep 50 juta on hand
|
|
603
|
+
* is in trouble well before it reaches zero.
|
|
604
|
+
*/
|
|
605
|
+
interface Baseline {
|
|
606
|
+
value: number;
|
|
607
|
+
label?: string;
|
|
608
|
+
}
|
|
609
|
+
interface TimeSeriesChartProps {
|
|
610
|
+
/** Accessible name. It is the chart's title as a screen reader announces it. */
|
|
611
|
+
label: string;
|
|
612
|
+
series: SeriesSpec[];
|
|
613
|
+
/** Turns a value into the text on the price scale and in the table. */
|
|
614
|
+
format: (value: number) => string;
|
|
615
|
+
range?: ValueRange;
|
|
616
|
+
/** Draws one series against a base value, shaded above and below. Only the first series is drawn. */
|
|
617
|
+
baseline?: Baseline;
|
|
618
|
+
/** A day to mark, and what to call it. The mark lands on the nearest day any series reports. */
|
|
619
|
+
mark?: {
|
|
620
|
+
day: string;
|
|
621
|
+
label: string;
|
|
622
|
+
};
|
|
623
|
+
height?: number;
|
|
624
|
+
emptyLabel?: string;
|
|
625
|
+
tableLabel?: string;
|
|
626
|
+
dayLabel?: string;
|
|
627
|
+
loading?: boolean;
|
|
628
|
+
className?: string;
|
|
629
|
+
}
|
|
630
|
+
interface TimeSeriesChartSkeletonProps {
|
|
631
|
+
height?: number;
|
|
632
|
+
label?: string;
|
|
633
|
+
className?: string;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* A dated chart: any number of series over calendar days, or one series read against a baseline.
|
|
638
|
+
*
|
|
639
|
+
* It is drawn on a canvas, and that has one consequence which shapes this whole file: **the picture is
|
|
640
|
+
* not in the DOM.** A screen reader finds nothing, a forced-colors viewer gets a bitmap the system
|
|
641
|
+
* cannot recolour, and no test can look at it. So the table below the plot is not a caption or a
|
|
642
|
+
* fallback — it is the chart's other rendering, always present, built from the same numbers, and it is
|
|
643
|
+
* what a forced-colors viewer sees *instead of* the canvas.
|
|
644
|
+
*
|
|
645
|
+
* This is the primitive the library's dated Compositions are built from. It carries no domain meaning:
|
|
646
|
+
* it does not know what a plan is or what money is, only how to draw dated values honestly and how to
|
|
647
|
+
* say the same thing in words.
|
|
648
|
+
*/
|
|
649
|
+
declare function TimeSeriesChart({ label, series, format, range, baseline, mark, height, emptyLabel, tableLabel, dayLabel, loading, className, }: TimeSeriesChartProps): react.JSX.Element;
|
|
650
|
+
|
|
651
|
+
/** Holds the chart's geometry while the readings load, so the page does not jump when they land. */
|
|
652
|
+
declare function TimeSeriesChartSkeleton({ height, label, className, }: TimeSeriesChartSkeletonProps): react.JSX.Element;
|
|
653
|
+
|
|
654
|
+
interface BalanceCurveProps {
|
|
655
|
+
/** Accessible name. It is the chart's title as a screen reader announces it. */
|
|
656
|
+
label: string;
|
|
657
|
+
/** The running balance, by day. One point per day the balance is known for. */
|
|
658
|
+
balances: SeriesPoint[];
|
|
659
|
+
/**
|
|
660
|
+
* How a value is written. The library holds no currency: a product passes its own formatter, so the
|
|
661
|
+
* same chart serves rupiah, a percentage of a budget, or litres of diesel.
|
|
662
|
+
*/
|
|
663
|
+
format: (value: number) => string;
|
|
664
|
+
/**
|
|
665
|
+
* The line the balance is read against, and what to call it. Defaults to zero.
|
|
666
|
+
*
|
|
667
|
+
* Not always zero, and that is the point: a business that must keep a minimum on hand is in trouble
|
|
668
|
+
* well before it reaches nothing.
|
|
669
|
+
*/
|
|
670
|
+
threshold?: {
|
|
671
|
+
value: number;
|
|
672
|
+
label?: string;
|
|
673
|
+
};
|
|
674
|
+
height?: number;
|
|
675
|
+
seriesLabel?: string;
|
|
676
|
+
emptyLabel?: string;
|
|
677
|
+
tableLabel?: string;
|
|
678
|
+
/** How the reading is worded. Each takes the formatted figures the component computed. */
|
|
679
|
+
belowLabel?: (from: string, lowest: string, days: number) => string;
|
|
680
|
+
clearLabel?: (lowest: string) => string;
|
|
681
|
+
loading?: boolean;
|
|
682
|
+
className?: string;
|
|
683
|
+
}
|
|
684
|
+
interface BalanceCurveSkeletonProps {
|
|
685
|
+
height?: number;
|
|
686
|
+
label?: string;
|
|
687
|
+
className?: string;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
/** Holds the chart's geometry while the balances load, so the page does not jump when they land. */
|
|
691
|
+
declare function BalanceCurveSkeleton({ height, label, className, }: BalanceCurveSkeletonProps): react.JSX.Element;
|
|
692
|
+
|
|
693
|
+
/**
|
|
694
|
+
* A running balance over days, read against a line: a cash projection, a budget remaining, a tank.
|
|
695
|
+
*
|
|
696
|
+
* The substrate draws this as a **baseline** series rather than a line, which is not decoration: it
|
|
697
|
+
* shades above and below the threshold in the semantic colours, so the stretch that is in trouble is
|
|
698
|
+
* coloured by its own values instead of by a tag somebody has to read. Seven red tags in a row say
|
|
699
|
+
* nothing about how far down the dip goes; a shaded area says it at a glance.
|
|
700
|
+
*
|
|
701
|
+
* The sentence above the plot is the other half. A chart shows the shape; the sentence gives the two
|
|
702
|
+
* figures a decision needs — the day it goes under and the lowest it gets — so nobody has to read a
|
|
703
|
+
* position off an axis to act on it.
|
|
704
|
+
*/
|
|
705
|
+
declare function BalanceCurveRoot({ label, balances, format, threshold, height, seriesLabel, emptyLabel, tableLabel, belowLabel, clearLabel, loading, className, }: BalanceCurveProps): react.JSX.Element;
|
|
706
|
+
/** The Composition and its Skeleton, so a loading page keeps the chart's geometry. */
|
|
707
|
+
declare const BalanceCurve: typeof BalanceCurveRoot & {
|
|
708
|
+
Skeleton: typeof BalanceCurveSkeleton;
|
|
709
|
+
};
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* What a running balance says about itself.
|
|
713
|
+
*
|
|
714
|
+
* A balance chart exists to answer two questions a list of days cannot: **when does this dip below the
|
|
715
|
+
* line, and how far down does it go.** Both are computed here rather than left to the reader, because
|
|
716
|
+
* the reader's alternative is scanning thirty rows — which is exactly the thing the chart replaces.
|
|
717
|
+
*/
|
|
718
|
+
|
|
719
|
+
interface BalanceReading {
|
|
720
|
+
/** The lowest balance over the window, and the day it happens. Null when there is nothing to read. */
|
|
721
|
+
lowest: number | null;
|
|
722
|
+
lowestDay: string | null;
|
|
723
|
+
/** The first day the balance is below the threshold, or null when it never is. */
|
|
724
|
+
firstBelowDay: string | null;
|
|
725
|
+
/** How many days sit below the threshold. Zero is the answer somebody is hoping for. */
|
|
726
|
+
daysBelow: number;
|
|
727
|
+
/** The balance on the last day of the window. */
|
|
728
|
+
closing: number | null;
|
|
729
|
+
}
|
|
730
|
+
/**
|
|
731
|
+
* The reading, against a threshold.
|
|
732
|
+
*
|
|
733
|
+
* The threshold is not always zero, and that is the point of it being a parameter: a business that must
|
|
734
|
+
* keep fifty million on hand is in trouble well before it reaches nothing, and a chart drawn against
|
|
735
|
+
* zero would tell it everything is fine right up to the day it is not.
|
|
736
|
+
*
|
|
737
|
+
* "Below" is strict. A balance sitting exactly on the threshold has met it, and reporting that as a
|
|
738
|
+
* breach would cry wolf on the one day the business did precisely what it planned to.
|
|
739
|
+
*/
|
|
740
|
+
declare function balanceReading(points: readonly SeriesPoint[], threshold: number): BalanceReading;
|
|
741
|
+
|
|
742
|
+
/** One reading: a day, and the share of the work complete by then. */
|
|
743
|
+
interface CurvePoint {
|
|
744
|
+
/** `YYYY-MM-DD`. A calendar day, not an instant — progress is reported for a day's work. */
|
|
745
|
+
day: string;
|
|
746
|
+
/** 0–100. */
|
|
747
|
+
percent: number;
|
|
748
|
+
}
|
|
749
|
+
interface CurveReading {
|
|
750
|
+
plannedPercent: number | null;
|
|
751
|
+
actualPercent: number | null;
|
|
752
|
+
/** Actual minus planned, in points. Negative is behind. Null when either side is unknown. */
|
|
753
|
+
gap: number | null;
|
|
754
|
+
}
|
|
755
|
+
/** The library's generic point shape, from this Block's `percent`-named one. */
|
|
756
|
+
declare function toPoints(points: readonly CurvePoint[]): SeriesPoint[];
|
|
757
|
+
/**
|
|
758
|
+
* The reading on a given day: what was planned, what was reached, and the gap.
|
|
759
|
+
*
|
|
760
|
+
* Both sides carry the last report forward — a day nobody reported is not a day of no progress, and
|
|
761
|
+
* drawing it as zero would say the work went backwards. A plan states its shape at the points it
|
|
762
|
+
* states them, so it is read the same way.
|
|
763
|
+
*/
|
|
764
|
+
declare function readingOn(planned: readonly CurvePoint[], actual: readonly CurvePoint[], day: string): CurveReading;
|
|
765
|
+
/** Every day either series reports, with both values and the gap — what a screen reader is given. */
|
|
766
|
+
declare function curveRows(planned: readonly CurvePoint[], actual: readonly CurvePoint[]): {
|
|
767
|
+
day: string;
|
|
768
|
+
plannedPercent: number | null;
|
|
769
|
+
actualPercent: number | null;
|
|
770
|
+
gap: number | null;
|
|
771
|
+
}[];
|
|
772
|
+
|
|
773
|
+
interface ProgressCurveProps {
|
|
774
|
+
/** What the plan said would be complete, by day. */
|
|
775
|
+
planned: CurvePoint[];
|
|
776
|
+
/** What was actually reported complete, by day. */
|
|
777
|
+
actual: CurvePoint[];
|
|
778
|
+
/** Accessible name. It is the chart's title as a screen reader announces it, so name the job. */
|
|
779
|
+
label: string;
|
|
780
|
+
/**
|
|
781
|
+
* `YYYY-MM-DD`. The day the reading above the plot is taken on — both series carry their last value
|
|
782
|
+
* at or before it forward. Without it the reading is taken on the last day anything was reported.
|
|
783
|
+
*
|
|
784
|
+
* It is deliberately not drawn on the plot: a mark attaches to a data point, and today is usually not
|
|
785
|
+
* one. What is marked is the last report (see `lastReportLabel`).
|
|
786
|
+
*/
|
|
787
|
+
today?: string;
|
|
788
|
+
height?: number;
|
|
789
|
+
plannedLabel?: string;
|
|
790
|
+
actualLabel?: string;
|
|
791
|
+
/** Text on the mark sitting at the last reported day. */
|
|
792
|
+
lastReportLabel?: string;
|
|
793
|
+
/** Shown in place of the chart when neither series has a single usable day. */
|
|
794
|
+
emptyLabel?: string;
|
|
795
|
+
/** The table a screen reader reads, and what a forced-colors viewer sees instead of the canvas. */
|
|
796
|
+
tableLabel?: string;
|
|
797
|
+
aheadLabel?: string;
|
|
798
|
+
behindLabel?: string;
|
|
799
|
+
onTrackLabel?: string;
|
|
800
|
+
loading?: boolean;
|
|
801
|
+
className?: string;
|
|
802
|
+
}
|
|
803
|
+
interface ProgressCurveSkeletonProps {
|
|
804
|
+
height?: number;
|
|
805
|
+
label?: string;
|
|
806
|
+
className?: string;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/** Holds the chart's geometry while the readings load, so the page does not jump when they land. */
|
|
810
|
+
declare function ProgressCurveSkeleton({ height, label, className, }: ProgressCurveSkeletonProps): react.JSX.Element;
|
|
811
|
+
|
|
812
|
+
/**
|
|
813
|
+
* An S-curve: what the plan said would be done by each day, against what was.
|
|
814
|
+
*
|
|
815
|
+
* The canvas, the Token reading, the forced-colors path and the accessible table all belong to
|
|
816
|
+
* `TimeSeriesChart`. What is here is the part that is about *progress*: a scale pinned to 0–100%,
|
|
817
|
+
* because autoscale stretches a job at 30% to the full height of the plot and reads as "nearly
|
|
818
|
+
* there"; and the reading in words above it, which is the one number somebody opened this to find.
|
|
819
|
+
*/
|
|
820
|
+
declare function ProgressCurveRoot({ planned, actual, label, today, height, plannedLabel, actualLabel, lastReportLabel, emptyLabel, tableLabel, aheadLabel, behindLabel, onTrackLabel, loading, className, }: ProgressCurveProps): react.JSX.Element;
|
|
821
|
+
/** The Composition and its Skeleton, so a loading page keeps the chart's geometry. */
|
|
822
|
+
declare const ProgressCurve: typeof ProgressCurveRoot & {
|
|
823
|
+
Skeleton: typeof ProgressCurveSkeleton;
|
|
824
|
+
};
|
|
825
|
+
|
|
380
826
|
interface DiagramSkeletonProps {
|
|
381
827
|
label?: string;
|
|
382
828
|
}
|
|
@@ -467,4 +913,4 @@ declare const DiagramEditor: typeof DiagramEditorRoot & {
|
|
|
467
913
|
Skeleton: typeof DiagramSkeleton;
|
|
468
914
|
};
|
|
469
915
|
|
|
470
|
-
export { type CeebeeAntStyleCache, CeebeeAntStyleProvider, type CeebeeAntStyleProviderProps, Checklist, type ChecklistProps, type ChecklistTask, type Command, CommandPalette, type CommandPaletteProps, DEFAULT_LABELS, Diagram, type DiagramEdge, DiagramEditor, type DiagramEditorProps, type DiagramNode, type DiagramPosition, type DiagramProps, type DiagramRemoval, type DiagramRenameTarget, type DiagramShape, type DiagramSkeletonProps, type DurationToken, type Labels, LabelsProvider, type LabelsProviderProps, Modal, type ModalProps, type MotionHelpers, MotionProvider, type MotionProviderProps, type MotionSettings, type NavItem, type NavSection, type PaletteCommand, PanZoomCanvas, type PanZoomCanvasProps, type PanZoomCanvasSkeletonProps, type RankedCommand, Reveal, type RevealProps, Sidebar, type SidebarProps, type SpringPreset, Stagger, type StaggerProps, StickerGroup, type StickerGroupProps, type StickerGroupSkeletonProps, type StickerItem, ThemeBridge, type ThemeBridgeProps, type ThemeChoice, ThemeProvider, type ThemeProviderProps, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, TopBar, type TopBarProps, createCeebeeAntStyleCache, extractCeebeeAntStyles, filterCommands, groupCommands, rankCommand, useLabels, useMotionSettings, useTheme, useToast };
|
|
916
|
+
export { BalanceCurve, type BalanceCurveProps, BalanceCurveSkeleton, type BalanceCurveSkeletonProps, type BalanceReading, type Baseline, Board, type BoardCard, type BoardColumn, type BoardLabels, type BoardMove, type BoardMoveResult, type BoardPosition, type BoardProps, type BoardShape, type BoardSkeletonProps, type CeebeeAntStyleCache, CeebeeAntStyleProvider, type CeebeeAntStyleProviderProps, type ChartPalette, Checklist, type ChecklistProps, type ChecklistTask, type Command, CommandPalette, type CommandPaletteProps, type CurvePoint, type CurveReading, DEFAULT_LABELS, Diagram, type DiagramEdge, DiagramEditor, type DiagramEditorProps, type DiagramNode, type DiagramPosition, type DiagramProps, type DiagramRemoval, type DiagramRenameTarget, type DiagramShape, type DiagramSkeletonProps, type DurationToken, type Labels, LabelsProvider, type LabelsProviderProps, Modal, type ModalProps, type MotionHelpers, MotionProvider, type MotionProviderProps, type MotionSettings, type NavItem, type NavSection, type PaletteCommand, PanZoomCanvas, type PanZoomCanvasProps, type PanZoomCanvasSkeletonProps, ProgressCurve, type ProgressCurveProps, ProgressCurveSkeleton, type ProgressCurveSkeletonProps, type RankedCommand, Reveal, type RevealProps, type SeriesEmphasis, type SeriesPoint, type SeriesSpec, Sidebar, type SidebarProps, type SpringPreset, Stagger, type StaggerProps, StickerGroup, type StickerGroupProps, type StickerGroupSkeletonProps, type StickerItem, ThemeBridge, type ThemeBridgeProps, type ThemeChoice, ThemeProvider, type ThemeProviderProps, TimeSeriesChart, type TimeSeriesChartProps, TimeSeriesChartSkeleton, type TimeSeriesChartSkeletonProps, type ToastOptions, type ToastPosition, ToastProvider, type ToastProviderProps, TopBar, type TopBarProps, type ValueRange, alignRows, asDay, balanceReading, createCeebeeAntStyleCache, curveRows, extractCeebeeAntStyles, filterCommands, groupCommands, nearestDay, rankCommand, readingOn, round1, seriesPoints, seriesSpan, toPoints, useLabels, useMotionSettings, useTheme, useToast, valueOn };
|