@nanisoft/prism-ui 0.9.0 → 0.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/dist/.tsbuildinfo +1 -1
- package/dist/blocks/cta-01/cta.d.ts +28 -0
- package/dist/blocks/cta-01/cta.d.ts.map +1 -1
- package/dist/blocks/hero-01/hero.d.ts +78 -12
- package/dist/blocks/hero-01/hero.d.ts.map +1 -1
- package/dist/blocks/hero-01/hero.js +47 -15
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +30 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +3 -0
- package/dist/components/ui/button.d.ts.map +1 -1
- package/dist/components/ui/button.js +14 -1
- package/dist/components/ui/cta-link.d.ts.map +1 -1
- package/dist/components/ui/cta-link.js +16 -1
- package/dist/components/ui/pulse-graph.d.ts +184 -0
- package/dist/components/ui/pulse-graph.d.ts.map +1 -0
- package/dist/components/ui/pulse-graph.js +212 -0
- package/dist/components/ui/pulse-series.d.ts +123 -0
- package/dist/components/ui/pulse-series.d.ts.map +1 -0
- package/dist/components/ui/pulse-series.js +94 -0
- package/dist/components/ui/signal-field.d.ts +66 -0
- package/dist/components/ui/signal-field.d.ts.map +1 -0
- package/dist/components/ui/signal-field.js +77 -0
- package/dist/styles.css +190 -0
- package/package.json +5 -4
|
@@ -21,6 +21,27 @@ export type Cta01Action = {
|
|
|
21
21
|
* reason to open a tab.
|
|
22
22
|
*/
|
|
23
23
|
newTab?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Which weight this action draws at, when the caller does not say.
|
|
26
|
+
*
|
|
27
|
+
* **A panel wants `default` or `secondary`, never `outline`.** This Block draws
|
|
28
|
+
* its band as a filled `bg-primary` surface and sets the band's ink to
|
|
29
|
+
* `--primary-foreground`, so every ink inside it is inherited from that panel
|
|
30
|
+
* rather than from the page. An `outline` action sets its own fill
|
|
31
|
+
* (`bg-background`) and, before this was settled, left its ink inherited, which
|
|
32
|
+
* put `--background` behind `--primary-foreground`. In the lavender pack's dark
|
|
33
|
+
* mode that is `#19171b` behind `#210c33`, or 1.01:1: a focusable, announced,
|
|
34
|
+
* unreadable button.
|
|
35
|
+
*
|
|
36
|
+
* Both defaults below are self-contained, which is the property that matters:
|
|
37
|
+
* `default` pairs `--primary` with `--primary-foreground` and `secondary`
|
|
38
|
+
* pairs `--secondary` with `--secondary-foreground`, and a pair the Block
|
|
39
|
+
* chooses cannot be changed by whatever surface the Block is placed on. The
|
|
40
|
+
* `outline` variant is fixed too, in `cta-link.tsx`, because a variant that
|
|
41
|
+
* sets a fill should set the matching ink rather than inherit whatever it lands
|
|
42
|
+
* on. It is kept in the type because a caller may want it once the ink is
|
|
43
|
+
* explicit, and dropping it would be a smaller answer than the defect.
|
|
44
|
+
*/
|
|
24
45
|
variant?: 'default' | 'secondary' | 'outline';
|
|
25
46
|
};
|
|
26
47
|
export type Cta01Props = {
|
|
@@ -49,6 +70,13 @@ export type Cta01Props = {
|
|
|
49
70
|
* Three of the four NaniSoft sites render two actions in their closing band
|
|
50
71
|
* and all four do, and all four wrote the pair by hand, so each one re-decided
|
|
51
72
|
* the gap, the order and the weight between them.
|
|
73
|
+
*
|
|
74
|
+
* Its default weight is `outline`, which is the settled answer for the pair:
|
|
75
|
+
* the primary action is filled and this one is not, so the two read as one
|
|
76
|
+
* decision and one alternative rather than as two competing asks. What `outline`
|
|
77
|
+
* may not do is inherit its ink from the filled band behind it, and that is
|
|
78
|
+
* now a property of the variant rather than of where a caller puts it. See
|
|
79
|
+
* `Cta01Action`'s `variant` for the measurement.
|
|
52
80
|
*/
|
|
53
81
|
secondaryAction?: Cta01Action;
|
|
54
82
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cta.d.ts","sourceRoot":"","sources":["../../../src/blocks/cta-01/cta.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAExE;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB
|
|
1
|
+
{"version":3,"file":"cta.d.ts","sourceRoot":"","sources":["../../../src/blocks/cta-01/cta.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAExE;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;;;;;;;;;;;;;;;OAiBG;IACH,eAAe,CAAC,EAAE,WAAW,CAAA;IAC7B;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,WAAW,EACX,MAAM,EACN,UAAU,EACV,eAAe,EACf,IAAI,EACJ,YAAmB,GACpB,EAAE,UAAU,+BAyDZ;AAED,eAAe,KAAK,CAAA"}
|
|
@@ -1,8 +1,23 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
1
2
|
import { type HeadingLevel } from '../../components/ui/section';
|
|
2
3
|
export type HeroAction = {
|
|
3
4
|
label: string;
|
|
5
|
+
/**
|
|
6
|
+
* Where the action goes. Required for an action that navigates, which is what
|
|
7
|
+
* an action in a hero almost always is.
|
|
8
|
+
*
|
|
9
|
+
* It was optional here and the Component ignored it, which meant an action
|
|
10
|
+
* with a destination rendered as a `<button>` that went nowhere: a control
|
|
11
|
+
* that looks like a link and is not one, and a dead end for a reader who
|
|
12
|
+
* pressed it. An action now renders as a real anchor whenever it names a
|
|
13
|
+
* destination, and falls back to a button only when it genuinely is one. A
|
|
14
|
+
* Block ships no behaviour, so a button here is inert by design rather than by
|
|
15
|
+
* accident, and the two shapes are told apart by exactly this.
|
|
16
|
+
*/
|
|
4
17
|
href?: string;
|
|
5
18
|
variant?: 'default' | 'outline' | 'secondary' | 'ghost';
|
|
19
|
+
/** Opens the destination in a new tab, with the matching `rel`. */
|
|
20
|
+
newTab?: boolean;
|
|
6
21
|
};
|
|
7
22
|
export type Hero01Props = {
|
|
8
23
|
/**
|
|
@@ -23,9 +38,7 @@ export type Hero01Props = {
|
|
|
23
38
|
* are not the same decision: a left-aligned hero is nearly always the left half
|
|
24
39
|
* of a two-column band with a panel or an instrument beside it, and that column
|
|
25
40
|
* is narrower than the container, so the alignment has to be the hero's before
|
|
26
|
-
* the container can be anything.
|
|
27
|
-
* left-aligned hero, each beside a panel, and each wrote the alignment by hand
|
|
28
|
-
* because this Block was the centered form only.
|
|
41
|
+
* the container can be anything.
|
|
29
42
|
*
|
|
30
43
|
* It has no visual effect on its own, which is the point: it aligns the copy
|
|
31
44
|
* inside whatever width it is given.
|
|
@@ -33,6 +46,30 @@ export type Hero01Props = {
|
|
|
33
46
|
* @defaultValue 'center'
|
|
34
47
|
*/
|
|
35
48
|
align?: 'center' | 'left';
|
|
49
|
+
/**
|
|
50
|
+
* The figure beside the copy: a live view of the thing the copy is about.
|
|
51
|
+
*
|
|
52
|
+
* A slot, and the reason is the whole shape of this Block's second form. The
|
|
53
|
+
* hero that names what a product does and the hero that shows it running are
|
|
54
|
+
* the same section, and every one of the four NaniSoft product sites hand-wrote
|
|
55
|
+
* the two-column band that joins them, each with its own grid, its own gap and
|
|
56
|
+
* its own breakpoint. This is that band.
|
|
57
|
+
*
|
|
58
|
+
* What goes in it is the consumer's, and specifically it should be something
|
|
59
|
+
* that would still be true with every animation stopped: a `PulseGraph` of the
|
|
60
|
+
* pipeline the product runs, a `PulseSeries` of what it captures. A slot that
|
|
61
|
+
* only reads as motion is a decoration with a slot, and this system does not
|
|
62
|
+
* author those. The `instrumented` slot is marked as required when the hero is
|
|
63
|
+
* given one, so a figure cannot be half-wired.
|
|
64
|
+
*/
|
|
65
|
+
instrument?: ReactNode;
|
|
66
|
+
/**
|
|
67
|
+
* Puts the copy and the instrument side by side rather than stacked, and
|
|
68
|
+
* narrows the copy to the column it shares the band with. Implied by
|
|
69
|
+
* `instrument` and overridable: a consumer with a narrow instrument and a wide
|
|
70
|
+
* hero may want them stacked anyway.
|
|
71
|
+
*/
|
|
72
|
+
split?: boolean;
|
|
36
73
|
/**
|
|
37
74
|
* Heading level for the title. Defaults to `h2` because a block is composed,
|
|
38
75
|
* not a page: it installs into a consumer's layout and renders
|
|
@@ -42,18 +79,47 @@ export type Hero01Props = {
|
|
|
42
79
|
* heading passes one level deeper. See `HeadingLevel`.
|
|
43
80
|
*/
|
|
44
81
|
headingLevel?: HeadingLevel;
|
|
82
|
+
/**
|
|
83
|
+
* Layout only, exactly as on every Component. Changing a Prism-owned visual
|
|
84
|
+
* property from here is prohibited.
|
|
85
|
+
*/
|
|
86
|
+
className?: string;
|
|
45
87
|
};
|
|
46
88
|
/**
|
|
47
|
-
* A
|
|
48
|
-
*
|
|
89
|
+
* A marketing hero with a headline, a supporting line, up to two actions, and
|
|
90
|
+
* an optional live figure beside them.
|
|
91
|
+
*
|
|
92
|
+
* The copy, the actions and the figure are props, and the Block ships none of
|
|
93
|
+
* any of them.
|
|
94
|
+
*
|
|
95
|
+
* **The two forms are one Block.** Centered over the container, or split with a
|
|
96
|
+
* figure in the second column. The centered form is the older one and is what a
|
|
97
|
+
* page whose claim is a sentence wants. The split form is what a product whose
|
|
98
|
+
* claim is a mechanism wants, and it is the form all four NaniSoft product sites
|
|
99
|
+
* want, because each one's hero is about a system that runs rather than about a
|
|
100
|
+
* feature list. Rather than ship `hero-02` and leave every consumer to compose
|
|
101
|
+
* two blocks and re-derive the grid, the band is here: the column split, the gap
|
|
102
|
+
* and the breakpoint at which the columns stack are one decision, made once, in
|
|
103
|
+
* the place that owns the container contract.
|
|
104
|
+
*
|
|
105
|
+
* **A hero with a figure puts the figure where the eye lands second, not
|
|
106
|
+
* last.** The copy column comes first in the DOM and stays first at every width,
|
|
107
|
+
* so a reader who never sees the figure still reads the headline and the
|
|
108
|
+
* destination, and a screen reader reaches the thesis before the drawing. The
|
|
109
|
+
* figure is on the right at desktop and below the copy when the columns stack,
|
|
110
|
+
* which is the order a reader on a phone wants: what this is, then what it does.
|
|
111
|
+
*
|
|
112
|
+
* **Actions are real links.** An action naming an `href` renders as an anchor
|
|
113
|
+
* with the matching `rel`, because a control that looks like a link and is not
|
|
114
|
+
* one is a dead end. An action with no destination renders as a `Button`, which
|
|
115
|
+
* is inert here by design: a Block ships no behaviour, so the honest form of
|
|
116
|
+
* "this does something" in a composed section is the consumer's own control in
|
|
117
|
+
* the slot.
|
|
49
118
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* `SectionHeading`'s, because a left-aligned hero is nearly always one column of a
|
|
54
|
-
* two-column band and that column is narrower than the container, so the alignment
|
|
55
|
-
* has to be decided before the container is anything.
|
|
119
|
+
* It composes `Section` and `SectionHeading`, so it inherits the container and
|
|
120
|
+
* the vertical rhythm rather than re-deriving either, and it adds no container
|
|
121
|
+
* width and no section padding of its own.
|
|
56
122
|
*/
|
|
57
|
-
export declare function Hero01({ eyebrow, title, description, actions, align, headingLevel, }: Hero01Props): import("react").JSX.Element;
|
|
123
|
+
export declare function Hero01({ eyebrow, title, description, actions, align, instrument, split, headingLevel, className, }: Hero01Props): import("react").JSX.Element;
|
|
58
124
|
export default Hero01;
|
|
59
125
|
//# sourceMappingURL=hero.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../../src/blocks/hero-01/hero.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../../src/blocks/hero-01/hero.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtC,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAGxF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;IACvD,mEAAmE;IACnE,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IACzB;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,KAAK,EACL,WAAW,EACX,OAAY,EACZ,KAAgB,EAChB,UAAU,EACV,KAAK,EACL,YAAmB,EACnB,SAAS,GACV,EAAE,WAAW,+BA+Fb;AAED,eAAe,MAAM,CAAA"}
|
|
@@ -1,24 +1,56 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { ArrowRight } from 'lucide-react';
|
|
3
3
|
import { Button } from '../../components/ui/button';
|
|
4
|
+
import { CtaLink } from '../../components/ui/cta-link';
|
|
4
5
|
import { Section, SectionHeading } from '../../components/ui/section';
|
|
5
6
|
import { cn } from '../../lib/utils';
|
|
6
7
|
/**
|
|
7
|
-
* A
|
|
8
|
-
*
|
|
8
|
+
* A marketing hero with a headline, a supporting line, up to two actions, and
|
|
9
|
+
* an optional live figure beside them.
|
|
9
10
|
*
|
|
10
|
-
* The copy and the
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* The copy, the actions and the figure are props, and the Block ships none of
|
|
12
|
+
* any of them.
|
|
13
|
+
*
|
|
14
|
+
* **The two forms are one Block.** Centered over the container, or split with a
|
|
15
|
+
* figure in the second column. The centered form is the older one and is what a
|
|
16
|
+
* page whose claim is a sentence wants. The split form is what a product whose
|
|
17
|
+
* claim is a mechanism wants, and it is the form all four NaniSoft product sites
|
|
18
|
+
* want, because each one's hero is about a system that runs rather than about a
|
|
19
|
+
* feature list. Rather than ship `hero-02` and leave every consumer to compose
|
|
20
|
+
* two blocks and re-derive the grid, the band is here: the column split, the gap
|
|
21
|
+
* and the breakpoint at which the columns stack are one decision, made once, in
|
|
22
|
+
* the place that owns the container contract.
|
|
23
|
+
*
|
|
24
|
+
* **A hero with a figure puts the figure where the eye lands second, not
|
|
25
|
+
* last.** The copy column comes first in the DOM and stays first at every width,
|
|
26
|
+
* so a reader who never sees the figure still reads the headline and the
|
|
27
|
+
* destination, and a screen reader reaches the thesis before the drawing. The
|
|
28
|
+
* figure is on the right at desktop and below the copy when the columns stack,
|
|
29
|
+
* which is the order a reader on a phone wants: what this is, then what it does.
|
|
30
|
+
*
|
|
31
|
+
* **Actions are real links.** An action naming an `href` renders as an anchor
|
|
32
|
+
* with the matching `rel`, because a control that looks like a link and is not
|
|
33
|
+
* one is a dead end. An action with no destination renders as a `Button`, which
|
|
34
|
+
* is inert here by design: a Block ships no behaviour, so the honest form of
|
|
35
|
+
* "this does something" in a composed section is the consumer's own control in
|
|
36
|
+
* the slot.
|
|
37
|
+
*
|
|
38
|
+
* It composes `Section` and `SectionHeading`, so it inherits the container and
|
|
39
|
+
* the vertical rhythm rather than re-deriving either, and it adds no container
|
|
40
|
+
* width and no section padding of its own.
|
|
16
41
|
*/
|
|
17
|
-
export function Hero01({ eyebrow, title, description, actions = [], align = 'center', headingLevel = 'h2', }) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
42
|
+
export function Hero01({ eyebrow, title, description, actions = [], align = 'center', instrument, split, headingLevel = 'h2', className, }) {
|
|
43
|
+
const twoColumn = split ?? instrument !== undefined;
|
|
44
|
+
const copy = (_jsxs("div", { "data-slot": "hero-01-copy", className: cn('flex flex-col gap-10', twoColumn ? 'items-start text-left' : align === 'center' ? 'items-center text-center' : 'items-start text-left'), children: [eyebrow ? (_jsx("span", { className: "bg-muted text-muted-foreground rounded-full px-3 py-1 text-xs font-medium", children: eyebrow })) : null, _jsx(SectionHeading, { as: headingLevel, align: twoColumn ? 'left' : align, title: title, description: description }), actions.length ? (_jsx("div", { className: "flex flex-col gap-3 sm:flex-row", children: actions.map((action, index) => {
|
|
45
|
+
const variant = action.variant ?? (index === 0 ? 'default' : 'outline');
|
|
46
|
+
// Positional, for the same reason as `pricing-01`'s feature list: the
|
|
47
|
+
// label is display content, and two actions may share one. Safe here
|
|
48
|
+
// because the list is static and never reordered.
|
|
49
|
+
const content = (_jsxs(_Fragment, { children: [action.label, index === 0 ? (_jsx(ArrowRight, { className: "motion-safe:transition-transform size-4 group-hover:translate-x-0.5" })) : null] }));
|
|
50
|
+
return action.href ? (_jsx(CtaLink, { href: action.href, newTab: action.newTab, size: "lg", variant: variant, className: "group", children: content }, index)) : (_jsx(Button, { size: "lg", variant: variant, className: "group", children: content }, index));
|
|
51
|
+
}) })) : null] }));
|
|
52
|
+
return (_jsxs(Section, { className: cn('relative overflow-hidden', className), children: [_jsx("div", { "aria-hidden": true, className: "from-primary/5 pointer-events-none absolute inset-0 -z-10 bg-gradient-to-b to-transparent" }), _jsxs("div", { "data-slot": "hero-01-band", className: cn(twoColumn
|
|
53
|
+
? 'grid items-center gap-10 lg:grid-cols-[5fr_6fr] lg:gap-14'
|
|
54
|
+
: 'flex flex-col'), children: [copy, instrument ? (_jsx("div", { "data-slot": "hero-01-instrument", className: "min-w-0", children: instrument })) : null] })] }));
|
|
23
55
|
}
|
|
24
56
|
export default Hero01;
|
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,aAAa,yCAA0C,CAAA;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,eAAO,MAAM,oBAAoB,sHAQvB,CAAA;AACV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAA;CAChC;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,WAAW,
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,aAAa,yCAA0C,CAAA;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD,eAAO,MAAM,oBAAoB,sHAQvB,CAAA;AACV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAA;CAChC;AAED,eAAO,MAAM,OAAO,EAAE,SAAS,WAAW,EAouBzC,CAAA;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,GAAE,SAAS,WAAW,EAAY,GAAG,WAAW,EAAE,CAEnF;AAED,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAE1D,CAAA"}
|
package/dist/catalog.js
CHANGED
|
@@ -242,6 +242,36 @@ export const catalog = [
|
|
|
242
242
|
exports: ['Diagram'],
|
|
243
243
|
status: 'stable',
|
|
244
244
|
},
|
|
245
|
+
{
|
|
246
|
+
name: 'PulseGraph',
|
|
247
|
+
slug: 'pulse-graph',
|
|
248
|
+
kind: 'component',
|
|
249
|
+
category: 'Data display',
|
|
250
|
+
description: 'A running system drawn as vector markup: named nodes, the edges between them, a marker travelling the sequence and a breathing focus. Token-driven and server-rendered, so it needs no client runtime.',
|
|
251
|
+
source: 'src/components/ui/pulse-graph.tsx',
|
|
252
|
+
exports: ['PulseGraph'],
|
|
253
|
+
status: 'stable',
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: 'PulseSeries',
|
|
257
|
+
slug: 'pulse-series',
|
|
258
|
+
kind: 'component',
|
|
259
|
+
category: 'Data display',
|
|
260
|
+
description: 'A live instrument: a series of columns rising out of a named baseline, with a reticle crossing them once per cycle. The values are the caller’s own.',
|
|
261
|
+
source: 'src/components/ui/pulse-series.tsx',
|
|
262
|
+
exports: ['PulseSeries'],
|
|
263
|
+
status: 'stable',
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'SignalField',
|
|
267
|
+
slug: 'signal-field',
|
|
268
|
+
kind: 'component',
|
|
269
|
+
category: 'Data display',
|
|
270
|
+
description: 'A field of marks: the atmosphere a figure is drawn over. Decorative by default and still unless asked to move.',
|
|
271
|
+
source: 'src/components/ui/signal-field.tsx',
|
|
272
|
+
exports: ['SignalField'],
|
|
273
|
+
status: 'stable',
|
|
274
|
+
},
|
|
245
275
|
{
|
|
246
276
|
name: 'ProductMark',
|
|
247
277
|
slug: 'product-mark',
|
|
@@ -33,6 +33,12 @@ export { Tree } from './ui/tree';
|
|
|
33
33
|
export type { TreeProps, TreeNode, TreeNodePage, TreeNodeGroup, TreeNodeDivider } from './ui/tree';
|
|
34
34
|
export { Diagram } from './ui/diagram';
|
|
35
35
|
export type { DiagramProps, DiagramNode, DiagramRelation } from './ui/diagram';
|
|
36
|
+
export { PulseGraph } from './ui/pulse-graph';
|
|
37
|
+
export type { PulseGraphProps, PulseNode, PulseRelation } from './ui/pulse-graph';
|
|
38
|
+
export { PulseSeries } from './ui/pulse-series';
|
|
39
|
+
export type { PulseSeriesProps, PulseBar } from './ui/pulse-series';
|
|
40
|
+
export { SignalField } from './ui/signal-field';
|
|
41
|
+
export type { SignalFieldProps } from './ui/signal-field';
|
|
36
42
|
export { ProductMark } from './ui/product-mark';
|
|
37
43
|
export type { ProductMarkProps, ProductMarkSize } from './ui/product-mark';
|
|
38
44
|
export { Prose } from './ui/prose';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
|
package/dist/components/index.js
CHANGED
|
@@ -27,6 +27,9 @@ export { Kbd } from './ui/kbd';
|
|
|
27
27
|
export { Mark } from './ui/mark';
|
|
28
28
|
export { Tree } from './ui/tree';
|
|
29
29
|
export { Diagram } from './ui/diagram';
|
|
30
|
+
export { PulseGraph } from './ui/pulse-graph';
|
|
31
|
+
export { PulseSeries } from './ui/pulse-series';
|
|
32
|
+
export { SignalField } from './ui/signal-field';
|
|
30
33
|
export { ProductMark } from './ui/product-mark';
|
|
31
34
|
export { Prose } from './ui/prose';
|
|
32
35
|
export { FactList } from './ui/fact-list';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAI3C,QAAA,MAAM,cAAc;;;
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAI3C,QAAA,MAAM,cAAc;;;8EAmEnB,CAAA;AAED;;;;;;GAMG;AACH,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,EACP,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,+BAQhE;AAED,OAAO,EAAE,MAAM,EAAE,CAAA"}
|
|
@@ -15,7 +15,20 @@ const buttonVariants = cva(
|
|
|
15
15
|
variant: {
|
|
16
16
|
default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',
|
|
17
17
|
destructive: 'bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90',
|
|
18
|
-
outline
|
|
18
|
+
// `outline` sets its own fill and must therefore set its own ink. It
|
|
19
|
+
// carried `bg-background` with no `text-` for its whole life, and the
|
|
20
|
+
// omission was invisible everywhere the ink was inherited from the page
|
|
21
|
+
// ground or a card, because `--foreground` and `--card-foreground` are
|
|
22
|
+
// equal in all twelve pack and mode combinations. On any other surface
|
|
23
|
+
// it silently inherited that surface's ink instead, and the variant was
|
|
24
|
+
// no longer the same button. `Cta01` is the case that shipped: a filled
|
|
25
|
+
// `bg-primary` panel with `--primary-foreground` inherited, in lavender
|
|
26
|
+
// dark, measured 1.01:1 and was unreadable while staying focusable and
|
|
27
|
+
// announced. The reason lives in `cta-link.tsx`, which is the surface
|
|
28
|
+
// that was drawn; this is the same string kept in step by hand, which is
|
|
29
|
+
// the arrangement this repository's JSDoc already records as the reason
|
|
30
|
+
// the two files are separate.
|
|
31
|
+
outline: 'border bg-background text-foreground shadow-xs hover:bg-accent hover:text-accent-foreground',
|
|
19
32
|
secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',
|
|
20
33
|
ghost: 'hover:bg-accent hover:text-accent-foreground',
|
|
21
34
|
// `primary` is a surface token, not a text token: in the pastel themes it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cta-link.d.ts","sourceRoot":"","sources":["../../../src/components/ui/cta-link.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AA0B3C,QAAA,MAAM,eAAe;;;
|
|
1
|
+
{"version":3,"file":"cta-link.d.ts","sourceRoot":"","sources":["../../../src/components/ui/cta-link.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AA0B3C,QAAA,MAAM,eAAe;;;8EAqDpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,GACrE,YAAY,CAAC,OAAO,eAAe,CAAC,GAAG;IACrC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,OAAO,CAAC,EACf,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,MAAc,EACd,GAAG,EACH,GAAG,KAAK,EACT,EAAE,YAAY,+BAWd;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -38,7 +38,22 @@ const ctaLinkVariants = cva(
|
|
|
38
38
|
variants: {
|
|
39
39
|
variant: {
|
|
40
40
|
default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',
|
|
41
|
-
outline
|
|
41
|
+
// `outline` sets its own fill and must therefore set its own ink. It
|
|
42
|
+
// carried `bg-background` with no `text-` for its whole life, which made
|
|
43
|
+
// it placement-dependent: on the page ground and on a card the inherited
|
|
44
|
+
// ink is already `--foreground` (verified equal to `--card-foreground` in
|
|
45
|
+
// all twelve pack and mode combinations), so the omission was invisible.
|
|
46
|
+
// On a filled surface it is not. `Cta01` draws a `bg-primary` panel with
|
|
47
|
+
// `--primary-foreground` as the inherited ink and defaulted its second
|
|
48
|
+
// action to this variant, so in the lavender pack's dark mode the button
|
|
49
|
+
// was `--background` behind `--primary-foreground` and measured 1.01:1.
|
|
50
|
+
// The button was in the document, focusable, announced, and unreadable.
|
|
51
|
+
//
|
|
52
|
+
// The contract's own row already covers the pair this now states:
|
|
53
|
+
// `foreground` on `background`, 4.5:1, required, in every pack and mode.
|
|
54
|
+
// What was missing was the component asking for it, and a token pair
|
|
55
|
+
// cannot notice that a variant declined to use one.
|
|
56
|
+
outline: 'border bg-background text-foreground shadow-xs hover:bg-accent hover:text-accent-foreground',
|
|
42
57
|
secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',
|
|
43
58
|
ghost: 'hover:bg-accent hover:text-accent-foreground',
|
|
44
59
|
},
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One named thing in a PulseGraph, at a position the caller chooses.
|
|
3
|
+
*
|
|
4
|
+
* The coordinate contract is `Diagram`'s, deliberately and unchanged: `x` and
|
|
5
|
+
* `y` are in the caller's own space and are fitted into the canvas, so fractions,
|
|
6
|
+
* pixels or any monotonic scale draw the same shape. A caller migrating a
|
|
7
|
+
* `Diagram` to a `PulseGraph` passes the identical array and only sees the
|
|
8
|
+
* difference in what the drawing does.
|
|
9
|
+
*
|
|
10
|
+
* `lane` is the one addition, and it is the reason this Component exists rather
|
|
11
|
+
* than a `Diagram` with a class added. A node on a lane is a stage in a
|
|
12
|
+
* sequence, which is a claim the drawing makes about the relationship between
|
|
13
|
+
* two nodes: this one runs before that one, and a marker is going to travel
|
|
14
|
+
* between them. A node with no lane is a point in a system with no stated
|
|
15
|
+
* order, and the graph draws it as one: no rail under it, nothing carried
|
|
16
|
+
* between it and anything else. Both shapes are wanted, and a single Component
|
|
17
|
+
* that can draw either is one item in the catalogue rather than two, and one
|
|
18
|
+
* fit, one canvas and one set of ink rules to keep true.
|
|
19
|
+
*/
|
|
20
|
+
export type PulseNode = {
|
|
21
|
+
/** A key unique within the graph. Relations name a node by this. */
|
|
22
|
+
id: string;
|
|
23
|
+
/**
|
|
24
|
+
* The name printed beside the node. It is a label on a picture, so a screen
|
|
25
|
+
* reader does not read it; see `PulseGraphProps` for what carries the
|
|
26
|
+
* meaning.
|
|
27
|
+
*/
|
|
28
|
+
name: string;
|
|
29
|
+
/** The node's position along the horizontal axis, in the caller's space. */
|
|
30
|
+
x: number;
|
|
31
|
+
/** The node's position along the vertical axis, in the caller's space. */
|
|
32
|
+
y: number;
|
|
33
|
+
/**
|
|
34
|
+
* The stage this node belongs to, as a number. Nodes sharing a lane are
|
|
35
|
+
* stages of one sequence and the marker travels between them in lane order.
|
|
36
|
+
* Omit it for a node that belongs to no sequence, which the drawing renders
|
|
37
|
+
* as a point in a field rather than a stop on a rail.
|
|
38
|
+
*/
|
|
39
|
+
lane?: number;
|
|
40
|
+
/** Marks the node the drawing is about. See the Brand Ink Rule. */
|
|
41
|
+
emphasis?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* A second line under the name, in the mono face, for the thing that
|
|
44
|
+
* qualifies the node: a stage's role, a component's version, a window's
|
|
45
|
+
* cadence. It is drawn and not announced, on the same terms as `name`, and it
|
|
46
|
+
* is the reason a caller does not have to reach for a second component to
|
|
47
|
+
* put a caption under a node.
|
|
48
|
+
*/
|
|
49
|
+
note?: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* One relation between two nodes.
|
|
53
|
+
*
|
|
54
|
+
* `carries` is the difference from `Diagram`'s relation and the reason a
|
|
55
|
+
* caller reaches for this Component: a relation that carries something gets a
|
|
56
|
+
* marker travelling along it, and one that merely holds does not. That is the
|
|
57
|
+
* whole claim the graph makes about the pair, expressed as a property of the
|
|
58
|
+
* edge rather than inferred from whether a marker happens to be drawn there, so
|
|
59
|
+
* a reader who turns motion off can still read which edges were carrying.
|
|
60
|
+
*/
|
|
61
|
+
export type PulseRelation = {
|
|
62
|
+
/** The `id` of the node the relation leaves. */
|
|
63
|
+
from: string;
|
|
64
|
+
/** The `id` of the node the relation arrives at. */
|
|
65
|
+
to: string;
|
|
66
|
+
/** Draws the line dashed, for a relation that holds but not by this route. */
|
|
67
|
+
indirect?: boolean;
|
|
68
|
+
/** The line carries a marker travelling from `from` to `to`. */
|
|
69
|
+
carries?: boolean;
|
|
70
|
+
};
|
|
71
|
+
/** What both arms of `PulseGraphProps` carry. */
|
|
72
|
+
type PulseFigure = {
|
|
73
|
+
/**
|
|
74
|
+
* The things drawn. At least one, or the graph renders an empty canvas. This
|
|
75
|
+
* is a claim the type makes rather than a runtime guard, because a figure
|
|
76
|
+
* with nothing in it is a mistake in the caller's data and not a state worth
|
|
77
|
+
* rendering a friendly empty message for.
|
|
78
|
+
*/
|
|
79
|
+
nodes: PulseNode[];
|
|
80
|
+
/**
|
|
81
|
+
* The relations drawn between them. A relation naming a node that is not in
|
|
82
|
+
* `nodes` is dropped, and the count of dropped relations is on the element as
|
|
83
|
+
* `data-unresolved-relations` rather than swallowed, because a line that
|
|
84
|
+
* silently did not draw is the failure this Component exists to make
|
|
85
|
+
* impossible.
|
|
86
|
+
*/
|
|
87
|
+
relations?: PulseRelation[];
|
|
88
|
+
/**
|
|
89
|
+
* Layout only, exactly as on every Component: grid placement and width.
|
|
90
|
+
* Changing a Prism-owned visual property from here is prohibited.
|
|
91
|
+
*/
|
|
92
|
+
className?: string;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* The props a PulseGraph takes.
|
|
96
|
+
*
|
|
97
|
+
* The name is required unless the drawing is decorative, and it is forbidden
|
|
98
|
+
* when it is. That is a union rather than `label?: string` for the reason
|
|
99
|
+
* `Diagram` states: only a union lets the type system see the exception.
|
|
100
|
+
*/
|
|
101
|
+
export type PulseGraphProps = PulseFigure & ({
|
|
102
|
+
/**
|
|
103
|
+
* Hides the drawing from assistive technology and drops the name. Use it
|
|
104
|
+
* when the surrounding sentence already says what the graph shows, and
|
|
105
|
+
* nothing inside the hidden tree is named either.
|
|
106
|
+
*/
|
|
107
|
+
decorative: true;
|
|
108
|
+
label?: never;
|
|
109
|
+
} | {
|
|
110
|
+
/** The name of the drawing, and the only thing a screen reader reads from it. */
|
|
111
|
+
label: string;
|
|
112
|
+
decorative?: false;
|
|
113
|
+
});
|
|
114
|
+
/**
|
|
115
|
+
* A graph of named things, the relations between them, and a marker travelling
|
|
116
|
+
* the sequence.
|
|
117
|
+
*
|
|
118
|
+
* This is the Component the four NaniSoft product sites each lost when they
|
|
119
|
+
* moved off the retired line, rebuilt rather than recovered. Their old heroes
|
|
120
|
+
* drew the right thing, in the wrong way: a `<canvas>` with a
|
|
121
|
+
* `requestAnimationFrame` loop, its colours read out of the DOM once at mount,
|
|
122
|
+
* and numbers invented by a sine hash so the drawing would have something to
|
|
123
|
+
* show. Every part of that was a defect with a real cost, and this file is the
|
|
124
|
+
* argument for each of them in turn.
|
|
125
|
+
*
|
|
126
|
+
* **It is a server Component.** No `'use client'`, no hook, no effect, no
|
|
127
|
+
* context, no runtime. The motion is CSS on the server-rendered markup, so a
|
|
128
|
+
* consumer gets a running figure in a static export with zero bytes of
|
|
129
|
+
* JavaScript, and `check-client-budget.mjs` keeps it off the client roster. The
|
|
130
|
+
* old heroes needed a client runtime on a static-export site; this one needs
|
|
131
|
+
* nothing.
|
|
132
|
+
*
|
|
133
|
+
* **It is SVG, not a canvas, and that is the pack-boundary reason.** A canvas
|
|
134
|
+
* paints pixels it has already resolved, and a `data-pack` boundary is an
|
|
135
|
+
* attribute on an ancestor, so a resolved value does not move when the pack
|
|
136
|
+
* beneath it does. Every stroke and fill below names a semantic token as a
|
|
137
|
+
* utility, so a scoped pack boundary above the drawing restyles it through the
|
|
138
|
+
* cascade exactly as it restyles a heading. This is why `check-vector-ink.mjs`
|
|
139
|
+
* scans this file.
|
|
140
|
+
*
|
|
141
|
+
* **Nothing is hidden and nothing waits.** No rule sets `opacity: 0`; the
|
|
142
|
+
* figure is complete and fully legible at first paint; and the animation only
|
|
143
|
+
* moves things that are already visible. A reader with scripting off, a slow
|
|
144
|
+
* connection, a print stylesheet, or a crawler sees the whole drawing. The
|
|
145
|
+
* reduced-motion block in the stylesheet is one `animation: none`, and because
|
|
146
|
+
* every element's resting state is its full form, that reader gets the same
|
|
147
|
+
* figure, still. This is the `hidden-state` gate's requirement met by the
|
|
148
|
+
* design rather than by an exception, which is why a consumer needs no
|
|
149
|
+
* exception to enable it.
|
|
150
|
+
*
|
|
151
|
+
* **The motion is the token scale's.** Every `prism-ambient-*` class reads its
|
|
152
|
+
* length from `var(--ambient-*)`; nothing in this file states a duration, an
|
|
153
|
+
* easing, or a keyframe name in a shorthand. The one distance this file does set
|
|
154
|
+
* is a geometry length in user units, because the keyframe that consumes it
|
|
155
|
+
* translates by a distance and that distance is a property of this drawing's
|
|
156
|
+
* coordinates rather than a timing.
|
|
157
|
+
*
|
|
158
|
+
* **What it will not do.** It does not invent data. The old canvas filled itself
|
|
159
|
+
* with a sine hash, and every site that shipped it inherited a chart of numbers
|
|
160
|
+
* nobody collected; a reader who screenshotted one and read the axis got a lie
|
|
161
|
+
* with a real typeface on it. Here, a node is a node a caller named, an edge is
|
|
162
|
+
* an edge a caller declared, and an empty graph is an empty graph. The motion
|
|
163
|
+
* says a system is running. It does not say what the numbers were.
|
|
164
|
+
*
|
|
165
|
+
* **The rail.** Nodes carrying a `lane` are stages of one sequence, and the
|
|
166
|
+
* graph draws a rail under them with a marker travelling it, so the order is
|
|
167
|
+
* visible as an order rather than inferred from left-to-right spacing. Nodes
|
|
168
|
+
* with no lane are a field: no rail, no marker, and every node present from the
|
|
169
|
+
* first frame. A graph may have both, and the rail then describes only the lanes
|
|
170
|
+
* that exist.
|
|
171
|
+
*
|
|
172
|
+
* **Accessibility.** `role="img"` with the `label` the caller passes, the same
|
|
173
|
+
* contract `Diagram` holds. Everything inside a `role="img"` is presentational,
|
|
174
|
+
* so node names and notes are drawn for sighted readers and the surrounding
|
|
175
|
+
* sentence is what a screen reader gets. Pass `decorative` when that sentence
|
|
176
|
+
* already says what the drawing shows.
|
|
177
|
+
*
|
|
178
|
+
* Positions are the caller's. The Component fits and draws, and it does not lay
|
|
179
|
+
* out a graph, so it cannot know that two labels will not collide. A relation
|
|
180
|
+
* naming a node that is not in `nodes` is dropped and counted on the element.
|
|
181
|
+
*/
|
|
182
|
+
declare function PulseGraph({ nodes, relations, label, decorative, className, }: PulseGraphProps): import("react").JSX.Element;
|
|
183
|
+
export { PulseGraph };
|
|
184
|
+
//# sourceMappingURL=pulse-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pulse-graph.d.ts","sourceRoot":"","sources":["../../../src/components/ui/pulse-graph.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAA;IACV;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,4EAA4E;IAC5E,CAAC,EAAE,MAAM,CAAA;IACT,0EAA0E;IAC1E,CAAC,EAAE,MAAM,CAAA;IACT;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAA;IACV,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,iDAAiD;AACjD,KAAK,WAAW,GAAG;IACjB;;;;;OAKG;IACH,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,aAAa,EAAE,CAAA;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,GACvC,CACI;IACE;;;;OAIG;IACH,UAAU,EAAE,IAAI,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GACD;IACE,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB,CACJ,CAAA;AAsHH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,iBAAS,UAAU,CAAC,EAClB,KAAK,EACL,SAAc,EACd,KAAK,EACL,UAAkB,EAClB,SAAS,GACV,EAAE,eAAe,+BA4MjB;AAED,OAAO,EAAE,UAAU,EAAE,CAAA"}
|