agentic-ds-kit 0.2.1 → 0.2.2
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 +10 -0
- package/contracts/scoreboard.json +2 -2
- package/contracts/section.json +9 -5
- package/dist/ui/Scoreboard/Scoreboard.kit.css +19 -17
- package/dist/ui/Scoreboard/Scoreboard.module.js +4 -4
- package/dist/ui/Scoreboard/Scoreboard.module.js.map +1 -1
- package/dist/ui/Section/Section.kit.css +27 -20
- package/dist/ui/Section/Section.module.js +10 -10
- package/dist/ui/Section/Section.module.js.map +1 -1
- package/dist/ui/patterns/ActivityPattern/ActivityPattern.js +0 -1
- package/dist/ui/patterns/ActivityPattern/ActivityPattern.js.map +1 -1
- package/dist/ui/patterns/DashboardPattern/DashboardPattern.js +0 -1
- package/dist/ui/patterns/DashboardPattern/DashboardPattern.js.map +1 -1
- package/dist/ui/patterns/InboxPattern/InboxPattern.js +0 -1
- package/dist/ui/patterns/InboxPattern/InboxPattern.js.map +1 -1
- package/dist/ui/shared/ChartFrame.js +1 -1
- package/dist/ui/shared/ChartFrame.js.map +1 -1
- package/dist/ui/shared/ChartFrame.kit.css +55 -41
- package/dist/ui/shared/ChartFrame.module.js +33 -32
- package/dist/ui/shared/ChartFrame.module.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,3 +35,13 @@ Contracts live in the package: `agentic-ds-kit/contracts/index.json`. Copy `AGEN
|
|
|
35
35
|
```bash
|
|
36
36
|
npm run generate:tokens -w agentic-ds-kit
|
|
37
37
|
```
|
|
38
|
+
|
|
39
|
+
Components consume **semantic** variables (`--surface-page`, `--action-primary`, `--radius-control-md`). Primitive `--color-*` ramps are the source scale only.
|
|
40
|
+
|
|
41
|
+
## Theming
|
|
42
|
+
|
|
43
|
+
Override semantic tokens in your CSS after tokens load. Do not rewrite component classes.
|
|
44
|
+
|
|
45
|
+
- Light is `:root`. Dark is `[data-theme="dark"]` on `html` (not a `.dark` class).
|
|
46
|
+
- Brand overlays: omit `data-color` for blue, or set `data-color="violet"` / `data-color="teal"`.
|
|
47
|
+
- For another hue, reassign brand, action, and focus roles to primitive ramps — not hex in React.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "scoreboard",
|
|
3
3
|
"status": "stable",
|
|
4
|
-
"intent": "Metrics strip of kit Scorecards. Two to four fill the row. More than four compose Carousel.",
|
|
4
|
+
"intent": "Metrics strip of kit Scorecards. Two to four fill the row; four stay in one row until the strip narrows. More than four compose Carousel.",
|
|
5
5
|
"useWhen": [
|
|
6
6
|
"Showing two or more KPIs side by side at the top of a dashboard",
|
|
7
7
|
"Replacing ad-hoc flex rows of metric boxes"
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"itemContract": "scorecard",
|
|
21
21
|
"required": true,
|
|
22
22
|
"minItems": 2,
|
|
23
|
-
"note": "2\u20134 fill equal columns. More than 4 pages four-up in kit Carousel."
|
|
23
|
+
"note": "2\u20134 fill equal columns. Four stay four-up until the strip narrows. More than 4 pages four-up in kit Carousel."
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"tokens": [
|
package/contracts/section.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "section",
|
|
3
3
|
"status": "stable",
|
|
4
|
-
"intent": "Grouped page block with optional heading, description, and actions.
|
|
4
|
+
"intent": "Grouped page block with optional heading, description, and actions on one surface. Pass collapsible false to keep the body always open.",
|
|
5
5
|
"useWhen": [
|
|
6
6
|
"Separating metrics, tables, or form groups on a page",
|
|
7
7
|
"Under PageHeader to structure dashboard or settings content"
|
|
8
8
|
],
|
|
9
9
|
"doNotUseWhen": [
|
|
10
10
|
"Whole page title \u2014 use PageHeader",
|
|
11
|
-
"
|
|
11
|
+
"Compact tiles with image or footer \u2014 use Card",
|
|
12
12
|
"Form legends and grouped fields \u2014 use FieldSet",
|
|
13
13
|
"Modal body layout \u2014 keep content minimal inside Modal",
|
|
14
14
|
"App-wide navigation \u2014 use AppNav",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"collapsible": {
|
|
46
46
|
"type": "boolean",
|
|
47
47
|
"default": true,
|
|
48
|
-
"note": "
|
|
48
|
+
"note": "Default true: chevron before the title toggles the body. False is always open, no chevron. Requires title."
|
|
49
49
|
},
|
|
50
50
|
"defaultOpen": {
|
|
51
51
|
"type": "boolean",
|
|
@@ -63,6 +63,10 @@
|
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
65
|
"tokens": [
|
|
66
|
+
"surface.card",
|
|
67
|
+
"border.faint",
|
|
68
|
+
"radius.surface.md",
|
|
69
|
+
"shadow.sm",
|
|
66
70
|
"text.primary",
|
|
67
71
|
"text.secondary",
|
|
68
72
|
"type.size.heading",
|
|
@@ -86,12 +90,12 @@
|
|
|
86
90
|
"doNot": [
|
|
87
91
|
"Do not invent a local Section or SectionHeader",
|
|
88
92
|
"Do not use raw hex",
|
|
89
|
-
"Do not
|
|
93
|
+
"Do not use Section as a compact marketing tile \u2014 that is Card",
|
|
90
94
|
"Do not use Section as the page title \u2014 that is PageHeader",
|
|
91
95
|
"Do not embed one-off metric flex rows \u2014 use Scoreboard",
|
|
92
96
|
"Actions must be kit Buttons",
|
|
93
97
|
"Do not compose Accordion or Collapsible for page sections \u2014 Section owns collapse"
|
|
94
98
|
],
|
|
95
|
-
"snippet": "<Section title=\"Recent activity\" description=\"Last 30 days\"
|
|
99
|
+
"snippet": "<Section title=\"Recent activity\" description=\"Last 30 days\" collapsible={false}><Table ... /></Section>",
|
|
96
100
|
"contains": []
|
|
97
101
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
.
|
|
1
|
+
._scoreboard_jqkyj_1 {
|
|
2
2
|
width: 100%;
|
|
3
3
|
min-width: 0;
|
|
4
4
|
container-type: inline-size;
|
|
5
5
|
container-name: scoreboard;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
.
|
|
8
|
+
._grid_jqkyj_8 {
|
|
9
9
|
display: grid;
|
|
10
10
|
gap: var(--space-4);
|
|
11
11
|
width: 100%;
|
|
@@ -13,39 +13,41 @@
|
|
|
13
13
|
align-items: stretch;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
.
|
|
16
|
+
._count1_jqkyj_16 {
|
|
17
17
|
grid-template-columns: minmax(0, 1fr);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
.
|
|
21
|
-
._count4_v3qsg_21 {
|
|
20
|
+
._count2_jqkyj_20 {
|
|
22
21
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
23
22
|
}
|
|
24
23
|
|
|
25
|
-
.
|
|
24
|
+
._count3_jqkyj_24 {
|
|
26
25
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
._count4_v3qsg_21 {
|
|
32
|
-
grid-template-columns: minmax(0, 1fr);
|
|
33
|
-
}
|
|
28
|
+
._count4_jqkyj_28 {
|
|
29
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
34
30
|
}
|
|
35
31
|
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
/* Collapse as the strip narrows. Lengths match tokens: metrics-min 12rem, space-4 1rem. Container queries cannot use calc(var()). */
|
|
33
|
+
@container scoreboard (max-width: 38rem) {
|
|
34
|
+
._count3_jqkyj_24 {
|
|
38
35
|
grid-template-columns: minmax(0, 1fr);
|
|
39
36
|
}
|
|
37
|
+
|
|
38
|
+
._count4_jqkyj_28 {
|
|
39
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
40
|
+
}
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
@container scoreboard (
|
|
43
|
-
.
|
|
44
|
-
|
|
43
|
+
@container scoreboard (max-width: 25rem) {
|
|
44
|
+
._count2_jqkyj_20,
|
|
45
|
+
._count4_jqkyj_28 {
|
|
46
|
+
grid-template-columns: minmax(0, 1fr);
|
|
45
47
|
}
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
.
|
|
50
|
+
._overflow_jqkyj_50 {
|
|
49
51
|
width: 100%;
|
|
50
52
|
min-width: 0;
|
|
51
53
|
padding-inline: var(--space-12);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import "./Scoreboard.kit.css";
|
|
2
2
|
//#region ui/Scoreboard/Scoreboard.module.css
|
|
3
|
-
var e = "
|
|
3
|
+
var e = "_scoreboard_jqkyj_1", t = "_grid_jqkyj_8", n = "_count1_jqkyj_16", r = "_count2_jqkyj_20", i = "_count3_jqkyj_24", a = "_count4_jqkyj_28", o = "_overflow_jqkyj_50", s = {
|
|
4
4
|
scoreboard: e,
|
|
5
5
|
grid: t,
|
|
6
6
|
count1: n,
|
|
7
7
|
count2: r,
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
count3: i,
|
|
9
|
+
count4: a,
|
|
10
10
|
overflow: o
|
|
11
11
|
};
|
|
12
12
|
//#endregion
|
|
13
|
-
export { n as count1, r as count2,
|
|
13
|
+
export { n as count1, r as count2, i as count3, a as count4, s as default, t as grid, o as overflow, e as scoreboard };
|
|
14
14
|
|
|
15
15
|
//# sourceMappingURL=Scoreboard.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scoreboard.module.js","names":[],"sources":["../../../ui/Scoreboard/Scoreboard.module.css"],"sourcesContent":[".scoreboard {\n width: 100%;\n min-width: 0;\n container-type: inline-size;\n container-name: scoreboard;\n}\n\n.grid {\n display: grid;\n gap: var(--space-4);\n width: 100%;\n min-width: 0;\n align-items: stretch;\n}\n\n.count1 {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.count2
|
|
1
|
+
{"version":3,"file":"Scoreboard.module.js","names":[],"sources":["../../../ui/Scoreboard/Scoreboard.module.css"],"sourcesContent":[".scoreboard {\n width: 100%;\n min-width: 0;\n container-type: inline-size;\n container-name: scoreboard;\n}\n\n.grid {\n display: grid;\n gap: var(--space-4);\n width: 100%;\n min-width: 0;\n align-items: stretch;\n}\n\n.count1 {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.count2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.count3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n.count4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n\n/* Collapse as the strip narrows. Lengths match tokens: metrics-min 12rem, space-4 1rem. Container queries cannot use calc(var()). */\n@container scoreboard (max-width: 38rem) {\n .count3 {\n grid-template-columns: minmax(0, 1fr);\n }\n\n .count4 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n}\n\n@container scoreboard (max-width: 25rem) {\n .count2,\n .count4 {\n grid-template-columns: minmax(0, 1fr);\n }\n}\n\n.overflow {\n width: 100%;\n min-width: 0;\n padding-inline: var(--space-12);\n box-sizing: border-box;\n}\n"],"mappings":""}
|
|
@@ -1,48 +1,55 @@
|
|
|
1
|
-
.
|
|
1
|
+
._section_roa75_1 {
|
|
2
2
|
--section-space: var(--space-section-md);
|
|
3
|
-
--section-header-gap: var(--space-stack-
|
|
3
|
+
--section-header-gap: var(--space-stack-md);
|
|
4
|
+
--section-inset: var(--space-6);
|
|
5
|
+
display: grid;
|
|
6
|
+
gap: var(--section-header-gap);
|
|
4
7
|
width: 100%;
|
|
5
8
|
min-width: 0;
|
|
6
9
|
margin: 0 0 var(--section-space);
|
|
10
|
+
padding: var(--section-inset);
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
background: var(--surface-card);
|
|
13
|
+
border: var(--border-width-thin) solid var(--border-faint);
|
|
14
|
+
border-radius: var(--radius-surface-md);
|
|
15
|
+
box-shadow: var(--shadow-sm);
|
|
7
16
|
}
|
|
8
17
|
|
|
9
|
-
.
|
|
18
|
+
._sm_roa75_18 {
|
|
10
19
|
--section-space: var(--space-section-sm);
|
|
11
20
|
--section-header-gap: var(--space-stack-sm);
|
|
21
|
+
--section-inset: var(--space-4);
|
|
12
22
|
}
|
|
13
23
|
|
|
14
|
-
.
|
|
24
|
+
._md_roa75_24 {
|
|
15
25
|
--section-space: var(--space-section-md);
|
|
16
26
|
--section-header-gap: var(--space-stack-md);
|
|
27
|
+
--section-inset: var(--space-6);
|
|
17
28
|
}
|
|
18
29
|
|
|
19
|
-
.
|
|
30
|
+
._lg_roa75_30 {
|
|
20
31
|
--section-space: var(--space-section-lg);
|
|
21
32
|
--section-header-gap: var(--space-stack-lg);
|
|
33
|
+
--section-inset: var(--space-8);
|
|
22
34
|
}
|
|
23
35
|
|
|
24
|
-
.
|
|
36
|
+
._header_roa75_36 {
|
|
25
37
|
display: flex;
|
|
26
38
|
flex-wrap: wrap;
|
|
27
39
|
align-items: flex-start;
|
|
28
40
|
justify-content: space-between;
|
|
29
41
|
gap: var(--space-inline-sm) var(--space-inline-lg);
|
|
30
42
|
margin: 0;
|
|
31
|
-
padding-bottom: var(--section-header-gap);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
._collapsible_16lix_34:has(> ._body_16lix_34[hidden]) ._header_16lix_24 {
|
|
35
|
-
padding-bottom: 0;
|
|
36
43
|
}
|
|
37
44
|
|
|
38
|
-
.
|
|
45
|
+
._heading_roa75_45 {
|
|
39
46
|
display: grid;
|
|
40
47
|
gap: var(--space-stack-xs);
|
|
41
48
|
min-width: 0;
|
|
42
49
|
flex: 1;
|
|
43
50
|
}
|
|
44
51
|
|
|
45
|
-
.
|
|
52
|
+
._title_roa75_52 {
|
|
46
53
|
margin: 0;
|
|
47
54
|
font-family: var(--font-sans);
|
|
48
55
|
font-size: var(--type-size-heading);
|
|
@@ -51,7 +58,7 @@
|
|
|
51
58
|
color: var(--text-primary);
|
|
52
59
|
}
|
|
53
60
|
|
|
54
|
-
.
|
|
61
|
+
._trigger_roa75_61 {
|
|
55
62
|
display: inline-flex;
|
|
56
63
|
align-items: center;
|
|
57
64
|
gap: var(--space-2);
|
|
@@ -66,22 +73,22 @@
|
|
|
66
73
|
cursor: pointer;
|
|
67
74
|
}
|
|
68
75
|
|
|
69
|
-
.
|
|
76
|
+
._trigger_roa75_61:focus-visible {
|
|
70
77
|
outline: var(--border-focus-width) solid var(--focus-ring);
|
|
71
78
|
outline-offset: var(--space-inset-2xs);
|
|
72
79
|
border-radius: var(--radius-control-sm);
|
|
73
80
|
}
|
|
74
81
|
|
|
75
|
-
.
|
|
82
|
+
._chevron_roa75_82 {
|
|
76
83
|
flex-shrink: 0;
|
|
77
84
|
color: var(--icon-muted);
|
|
78
85
|
}
|
|
79
86
|
|
|
80
|
-
.
|
|
87
|
+
._collapsible_roa75_87 ._description_roa75_87 {
|
|
81
88
|
padding-inline-start: calc(18px + var(--space-2));
|
|
82
89
|
}
|
|
83
90
|
|
|
84
|
-
.
|
|
91
|
+
._description_roa75_87 {
|
|
85
92
|
margin: 0;
|
|
86
93
|
font-family: var(--font-sans);
|
|
87
94
|
font-size: var(--type-size-body-sm);
|
|
@@ -89,7 +96,7 @@
|
|
|
89
96
|
color: var(--text-secondary);
|
|
90
97
|
}
|
|
91
98
|
|
|
92
|
-
.
|
|
99
|
+
._actions_roa75_99 {
|
|
93
100
|
display: flex;
|
|
94
101
|
flex-wrap: wrap;
|
|
95
102
|
align-items: center;
|
|
@@ -97,7 +104,7 @@
|
|
|
97
104
|
flex-shrink: 0;
|
|
98
105
|
}
|
|
99
106
|
|
|
100
|
-
.
|
|
107
|
+
._body_roa75_107 {
|
|
101
108
|
width: 100%;
|
|
102
109
|
min-width: 0;
|
|
103
110
|
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import "./Section.kit.css";
|
|
2
2
|
//#region ui/Section/Section.module.css
|
|
3
|
-
var e = "
|
|
3
|
+
var e = "_section_roa75_1", t = "_sm_roa75_18", n = "_md_roa75_24", r = "_lg_roa75_30", i = "_header_roa75_36", a = "_heading_roa75_45", o = "_title_roa75_52", s = "_trigger_roa75_61", c = "_chevron_roa75_82", l = "_collapsible_roa75_87", u = "_description_roa75_87", d = "_actions_roa75_99", f = "_body_roa75_107", p = {
|
|
4
4
|
section: e,
|
|
5
5
|
sm: t,
|
|
6
6
|
md: n,
|
|
7
7
|
lg: r,
|
|
8
8
|
header: i,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
heading: a,
|
|
10
|
+
title: o,
|
|
11
|
+
trigger: s,
|
|
12
|
+
chevron: c,
|
|
13
|
+
collapsible: l,
|
|
14
|
+
description: u,
|
|
15
|
+
actions: d,
|
|
16
|
+
body: f
|
|
17
17
|
};
|
|
18
18
|
//#endregion
|
|
19
|
-
export {
|
|
19
|
+
export { d as actions, f as body, c as chevron, l as collapsible, p as default, u as description, i as header, a as heading, r as lg, n as md, e as section, t as sm, o as title, s as trigger };
|
|
20
20
|
|
|
21
21
|
//# sourceMappingURL=Section.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Section.module.js","names":[],"sources":["../../../ui/Section/Section.module.css"],"sourcesContent":[".section {\n --section-space: var(--space-section-md);\n --section-header-gap: var(--space-stack-
|
|
1
|
+
{"version":3,"file":"Section.module.js","names":[],"sources":["../../../ui/Section/Section.module.css"],"sourcesContent":[".section {\n --section-space: var(--space-section-md);\n --section-header-gap: var(--space-stack-md);\n --section-inset: var(--space-6);\n display: grid;\n gap: var(--section-header-gap);\n width: 100%;\n min-width: 0;\n margin: 0 0 var(--section-space);\n padding: var(--section-inset);\n box-sizing: border-box;\n background: var(--surface-card);\n border: var(--border-width-thin) solid var(--border-faint);\n border-radius: var(--radius-surface-md);\n box-shadow: var(--shadow-sm);\n}\n\n.sm {\n --section-space: var(--space-section-sm);\n --section-header-gap: var(--space-stack-sm);\n --section-inset: var(--space-4);\n}\n\n.md {\n --section-space: var(--space-section-md);\n --section-header-gap: var(--space-stack-md);\n --section-inset: var(--space-6);\n}\n\n.lg {\n --section-space: var(--space-section-lg);\n --section-header-gap: var(--space-stack-lg);\n --section-inset: var(--space-8);\n}\n\n.header {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--space-inline-sm) var(--space-inline-lg);\n margin: 0;\n}\n\n.heading {\n display: grid;\n gap: var(--space-stack-xs);\n min-width: 0;\n flex: 1;\n}\n\n.title {\n margin: 0;\n font-family: var(--font-sans);\n font-size: var(--type-size-heading);\n font-weight: var(--type-weight-heading);\n line-height: var(--type-line-heading);\n color: var(--text-primary);\n}\n\n.trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--space-2);\n max-width: 100%;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: start;\n cursor: pointer;\n}\n\n.trigger:focus-visible {\n outline: var(--border-focus-width) solid var(--focus-ring);\n outline-offset: var(--space-inset-2xs);\n border-radius: var(--radius-control-sm);\n}\n\n.chevron {\n flex-shrink: 0;\n color: var(--icon-muted);\n}\n\n.collapsible .description {\n padding-inline-start: calc(18px + var(--space-2));\n}\n\n.description {\n margin: 0;\n font-family: var(--font-sans);\n font-size: var(--type-size-body-sm);\n line-height: var(--type-line-body);\n color: var(--text-secondary);\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--space-inline-sm);\n flex-shrink: 0;\n}\n\n.body {\n width: 100%;\n min-width: 0;\n}\n\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityPattern.js","names":[],"sources":["../../../../ui/patterns/ActivityPattern/ActivityPattern.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { Button } from \"../../Button\";\nimport { ButtonGroup } from \"../../ButtonGroup\";\nimport { Empty } from \"../../Empty\";\nimport { PageHeader } from \"../../PageHeader\";\nimport type { PageHeaderProps } from \"../../PageHeader\";\nimport { Scoreboard } from \"../../Scoreboard\";\nimport { Section } from \"../../Section\";\nimport { Tabs } from \"../../Tabs\";\nimport { ActivityFeed } from \"./ActivityFeed\";\nimport { TaskCards, TaskList } from \"./ActivityTasks\";\nimport { TASK_INSIGHTS, TaskDrawer } from \"./TaskDrawer\";\n\ntype TaskView = \"cards\" | \"list\";\n\nconst ACTIVITY_METRICS = [\n { label: \"Today\", value: \"6\", delta: \"+2\", trend: \"up\" as const, hint: \"vs yesterday\", size: \"lg\" as const, badge: \"Live\", badgeTone: \"success\" as const },\n { label: \"Comments\", value: \"5\", delta: \"+1\", trend: \"up\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"Sprint\", badgeTone: \"info\" as const },\n { label: \"Status changes\", value: \"4\", delta: \"0\", trend: \"flat\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"Ship\", badgeTone: \"brand\" as const },\n { label: \"Mentions\", value: \"2\", delta: \"+2\", trend: \"up\" as const, hint: \"need reply\", size: \"lg\" as const, badge: \"At risk\", badgeTone: \"danger\" as const },\n];\n\nexport interface ActivityPatternProps {\n breadcrumbs?: PageHeaderProps[\"breadcrumbs\"];\n}\n\nexport function ActivityPattern({ breadcrumbs }: ActivityPatternProps) {\n const [dismissed, setDismissed] = useState<string[]>([]);\n const [openTaskId, setOpenTaskId] = useState<string | null>(null);\n const [taskView, setTaskView] = useState<TaskView>(\"cards\");\n\n const tasks = TASK_INSIGHTS.filter((task) => !dismissed.includes(task.id));\n const openTask = TASK_INSIGHTS.find((task) => task.id === openTaskId) ?? null;\n const taskCount =\n tasks.length === 0\n ? \"All caught up\"\n : `${tasks.length} ${tasks.length === 1 ? \"needs\" : \"need\"} attention`;\n\n function dismissTask(id: string) {\n setDismissed((current) => [...current, id]);\n setOpenTaskId((current) => (current === id ? null : current));\n }\n\n return (\n <div className=\"layout-canvas layout-canvas--sticky-header\">\n <div className=\"layout-header\">\n <PageHeader\n title=\"Activity\"\n subtitle=\"What the team shipped, blocked, and commented on.\"\n breadcrumbs={breadcrumbs}\n />\n </div>\n <div className=\"layout-content\">\n <Section title=\"This week\">\n <Scoreboard
|
|
1
|
+
{"version":3,"file":"ActivityPattern.js","names":[],"sources":["../../../../ui/patterns/ActivityPattern/ActivityPattern.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { Button } from \"../../Button\";\nimport { ButtonGroup } from \"../../ButtonGroup\";\nimport { Empty } from \"../../Empty\";\nimport { PageHeader } from \"../../PageHeader\";\nimport type { PageHeaderProps } from \"../../PageHeader\";\nimport { Scoreboard } from \"../../Scoreboard\";\nimport { Section } from \"../../Section\";\nimport { Tabs } from \"../../Tabs\";\nimport { ActivityFeed } from \"./ActivityFeed\";\nimport { TaskCards, TaskList } from \"./ActivityTasks\";\nimport { TASK_INSIGHTS, TaskDrawer } from \"./TaskDrawer\";\n\ntype TaskView = \"cards\" | \"list\";\n\nconst ACTIVITY_METRICS = [\n { label: \"Today\", value: \"6\", delta: \"+2\", trend: \"up\" as const, hint: \"vs yesterday\", size: \"lg\" as const, badge: \"Live\", badgeTone: \"success\" as const },\n { label: \"Comments\", value: \"5\", delta: \"+1\", trend: \"up\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"Sprint\", badgeTone: \"info\" as const },\n { label: \"Status changes\", value: \"4\", delta: \"0\", trend: \"flat\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"Ship\", badgeTone: \"brand\" as const },\n { label: \"Mentions\", value: \"2\", delta: \"+2\", trend: \"up\" as const, hint: \"need reply\", size: \"lg\" as const, badge: \"At risk\", badgeTone: \"danger\" as const },\n];\n\nexport interface ActivityPatternProps {\n breadcrumbs?: PageHeaderProps[\"breadcrumbs\"];\n}\n\nexport function ActivityPattern({ breadcrumbs }: ActivityPatternProps) {\n const [dismissed, setDismissed] = useState<string[]>([]);\n const [openTaskId, setOpenTaskId] = useState<string | null>(null);\n const [taskView, setTaskView] = useState<TaskView>(\"cards\");\n\n const tasks = TASK_INSIGHTS.filter((task) => !dismissed.includes(task.id));\n const openTask = TASK_INSIGHTS.find((task) => task.id === openTaskId) ?? null;\n const taskCount =\n tasks.length === 0\n ? \"All caught up\"\n : `${tasks.length} ${tasks.length === 1 ? \"needs\" : \"need\"} attention`;\n\n function dismissTask(id: string) {\n setDismissed((current) => [...current, id]);\n setOpenTaskId((current) => (current === id ? null : current));\n }\n\n return (\n <div className=\"layout-canvas layout-canvas--sticky-header\">\n <div className=\"layout-header\">\n <PageHeader\n title=\"Activity\"\n subtitle=\"What the team shipped, blocked, and commented on.\"\n breadcrumbs={breadcrumbs}\n />\n </div>\n <div className=\"layout-content\">\n <Section title=\"This week\">\n <Scoreboard aria-label=\"Activity this week\" items={ACTIVITY_METRICS} />\n </Section>\n <Section\n title=\"Tasks\"\n description={taskCount}\n actions={\n tasks.length > 0 ? (\n <ButtonGroup ariaLabel=\"Task layout\">\n <Button\n variant={taskView === \"cards\" ? \"secondary\" : \"tertiary\"}\n size=\"sm\"\n onClick={() => setTaskView(\"cards\")}\n >\n Cards\n </Button>\n <Button\n variant={taskView === \"list\" ? \"secondary\" : \"tertiary\"}\n size=\"sm\"\n onClick={() => setTaskView(\"list\")}\n >\n List\n </Button>\n </ButtonGroup>\n ) : undefined\n }\n >\n {tasks.length > 0 ? (\n taskView === \"cards\" ? (\n <TaskCards tasks={tasks} onOpen={setOpenTaskId} onDismiss={dismissTask} />\n ) : (\n <TaskList tasks={tasks} onOpen={setOpenTaskId} onDismiss={dismissTask} />\n )\n ) : (\n <Empty\n title=\"No open tasks\"\n description=\"Nothing in this sprint needs a look right now.\"\n icon=\"Check\"\n outlined\n />\n )}\n </Section>\n <Section title=\"Feed\" description=\"Newest first\">\n <Tabs\n ariaLabel=\"Activity type\"\n variant=\"line\"\n size=\"md\"\n defaultValue=\"all\"\n items={[\n { id: \"all\", label: \"All\", content: <ActivityFeed tab=\"all\" caption=\"All activity\" /> },\n { id: \"comments\", label: \"Comments\", content: <ActivityFeed tab=\"comments\" caption=\"Comments\" /> },\n { id: \"status\", label: \"Status\", content: <ActivityFeed tab=\"status\" caption=\"Status changes\" /> },\n { id: \"mentions\", label: \"Mentions\", content: <ActivityFeed tab=\"mentions\" caption=\"Mentions\" /> },\n ]}\n />\n </Section>\n </div>\n <TaskDrawer task={openTask} onClose={() => setOpenTaskId(null)} />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardPattern.js","names":[],"sources":["../../../../ui/patterns/DashboardPattern/DashboardPattern.tsx"],"sourcesContent":["\"use client\";\n\nimport { DataTable } from \"../../DataTable\";\nimport type { DataTableColumn, DataTableRow } from \"../../DataTable\";\nimport { LineChart } from \"../../LineChart\";\nimport { PageHeader } from \"../../PageHeader\";\nimport type { PageHeaderProps } from \"../../PageHeader\";\nimport { Scoreboard } from \"../../Scoreboard\";\nimport { Section } from \"../../Section\";\nimport type { ChartDatum } from \"../../shared/chartMath\";\n\nconst SPRINT_METRICS = [\n { label: \"Weekly users\", value: \"1.44k\", delta: \"+6.2%\", trend: \"up\" as const, hint: \"vs last week\", size: \"lg\" as const, badge: \"Live\", badgeTone: \"success\" as const },\n { label: \"Open tasks\", value: \"4\", delta: \"+1\", trend: \"up\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"Sprint\", badgeTone: \"info\" as const },\n { label: \"Blocked\", value: \"1\", delta: \"0\", trend: \"flat\" as const, hint: \"need owner\", size: \"lg\" as const, badge: \"At risk\", badgeTone: \"danger\" as const },\n { label: \"Ready\", value: \"1\", delta: \"+1\", trend: \"up\" as const, hint: \"to ship\", size: \"lg\" as const, badge: \"Ship\", badgeTone: \"brand\" as const },\n];\n\nconst WEEKLY_USERS: ChartDatum[] = [\n { label: \"Mon\", value: 1280 },\n { label: \"Tue\", value: 1410 },\n { label: \"Wed\", value: 1320 },\n { label: \"Thu\", value: 1480 },\n { label: \"Fri\", value: 1360 },\n { label: \"Sat\", value: 1440 },\n { label: \"Sun\", value: 1390 },\n];\n\nconst TASK_COLUMNS: DataTableColumn[] = [\n { key: \"task\", header: \"Task\", sortable: true },\n { key: \"owner\", header: \"Owner\", sortable: true },\n { key: \"status\", header: \"Status\", sortable: true },\n];\n\nconst TASK_ROWS: DataTableRow[] = [\n {\n id: \"launch-brief\",\n task: { type: \"file\", label: \"Launch brief\" },\n owner: { type: \"avatar\", label: \"Maya Chen\", name: \"Maya Chen\", src: \"/faces/maya-chen.jpg\" },\n status: { type: \"badge\", label: \"In review\", tone: \"warning\" },\n },\n {\n id: \"qa-checklist\",\n task: { type: \"file\", label: \"QA checklist\" },\n owner: { type: \"avatar\", label: \"Unassigned\", name: \"Unassigned\" },\n status: { type: \"badge\", label: \"Blocked\", tone: \"danger\" },\n },\n {\n id: \"release-notes\",\n task: { type: \"file\", label: \"Release notes\" },\n owner: { type: \"avatar\", label: \"Jordan Lee\", name: \"Jordan Lee\", src: \"/faces/jordan-lee.jpg\" },\n status: { type: \"badge\", label: \"Ready\", tone: \"success\" },\n },\n {\n id: \"support-macros\",\n task: { type: \"file\", label: \"Support macros\" },\n owner: { type: \"avatar\", label: \"Alex Rivera\", name: \"Alex Rivera\", src: \"/faces/alex-rivera.jpg\" },\n status: { type: \"badge\", label: \"In progress\", tone: \"info\" },\n },\n];\n\nexport function DashboardPattern({ breadcrumbs }: { breadcrumbs?: PageHeaderProps[\"breadcrumbs\"] }) {\n return (\n <div className=\"layout-canvas layout-canvas--sticky-header\">\n <div className=\"layout-header\">\n <PageHeader\n title=\"Overview\"\n subtitle=\"Workspace overview for the current team.\"\n breadcrumbs={breadcrumbs}\n />\n </div>\n <div className=\"layout-content\">\n <Section title=\"Sprint metrics\">\n <Scoreboard
|
|
1
|
+
{"version":3,"file":"DashboardPattern.js","names":[],"sources":["../../../../ui/patterns/DashboardPattern/DashboardPattern.tsx"],"sourcesContent":["\"use client\";\n\nimport { DataTable } from \"../../DataTable\";\nimport type { DataTableColumn, DataTableRow } from \"../../DataTable\";\nimport { LineChart } from \"../../LineChart\";\nimport { PageHeader } from \"../../PageHeader\";\nimport type { PageHeaderProps } from \"../../PageHeader\";\nimport { Scoreboard } from \"../../Scoreboard\";\nimport { Section } from \"../../Section\";\nimport type { ChartDatum } from \"../../shared/chartMath\";\n\nconst SPRINT_METRICS = [\n { label: \"Weekly users\", value: \"1.44k\", delta: \"+6.2%\", trend: \"up\" as const, hint: \"vs last week\", size: \"lg\" as const, badge: \"Live\", badgeTone: \"success\" as const },\n { label: \"Open tasks\", value: \"4\", delta: \"+1\", trend: \"up\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"Sprint\", badgeTone: \"info\" as const },\n { label: \"Blocked\", value: \"1\", delta: \"0\", trend: \"flat\" as const, hint: \"need owner\", size: \"lg\" as const, badge: \"At risk\", badgeTone: \"danger\" as const },\n { label: \"Ready\", value: \"1\", delta: \"+1\", trend: \"up\" as const, hint: \"to ship\", size: \"lg\" as const, badge: \"Ship\", badgeTone: \"brand\" as const },\n];\n\nconst WEEKLY_USERS: ChartDatum[] = [\n { label: \"Mon\", value: 1280 },\n { label: \"Tue\", value: 1410 },\n { label: \"Wed\", value: 1320 },\n { label: \"Thu\", value: 1480 },\n { label: \"Fri\", value: 1360 },\n { label: \"Sat\", value: 1440 },\n { label: \"Sun\", value: 1390 },\n];\n\nconst TASK_COLUMNS: DataTableColumn[] = [\n { key: \"task\", header: \"Task\", sortable: true },\n { key: \"owner\", header: \"Owner\", sortable: true },\n { key: \"status\", header: \"Status\", sortable: true },\n];\n\nconst TASK_ROWS: DataTableRow[] = [\n {\n id: \"launch-brief\",\n task: { type: \"file\", label: \"Launch brief\" },\n owner: { type: \"avatar\", label: \"Maya Chen\", name: \"Maya Chen\", src: \"/faces/maya-chen.jpg\" },\n status: { type: \"badge\", label: \"In review\", tone: \"warning\" },\n },\n {\n id: \"qa-checklist\",\n task: { type: \"file\", label: \"QA checklist\" },\n owner: { type: \"avatar\", label: \"Unassigned\", name: \"Unassigned\" },\n status: { type: \"badge\", label: \"Blocked\", tone: \"danger\" },\n },\n {\n id: \"release-notes\",\n task: { type: \"file\", label: \"Release notes\" },\n owner: { type: \"avatar\", label: \"Jordan Lee\", name: \"Jordan Lee\", src: \"/faces/jordan-lee.jpg\" },\n status: { type: \"badge\", label: \"Ready\", tone: \"success\" },\n },\n {\n id: \"support-macros\",\n task: { type: \"file\", label: \"Support macros\" },\n owner: { type: \"avatar\", label: \"Alex Rivera\", name: \"Alex Rivera\", src: \"/faces/alex-rivera.jpg\" },\n status: { type: \"badge\", label: \"In progress\", tone: \"info\" },\n },\n];\n\nexport function DashboardPattern({ breadcrumbs }: { breadcrumbs?: PageHeaderProps[\"breadcrumbs\"] }) {\n return (\n <div className=\"layout-canvas layout-canvas--sticky-header\">\n <div className=\"layout-header\">\n <PageHeader\n title=\"Overview\"\n subtitle=\"Workspace overview for the current team.\"\n breadcrumbs={breadcrumbs}\n />\n </div>\n <div className=\"layout-content\">\n <Section title=\"Sprint metrics\">\n <Scoreboard aria-label=\"Sprint metrics\" items={SPRINT_METRICS} />\n </Section>\n <Section title=\"Weekly users\">\n <LineChart data={WEEKLY_USERS} variant=\"line\" showTable={false} />\n </Section>\n <Section title=\"Open tasks\" description=\"4 items need attention\">\n <DataTable\n caption=\"Sprint backlog\"\n selectable\n toolbar\n cellSize=\"sm\"\n searchPlaceholder=\"Search tasks...\"\n filters={[\n { key: \"status\", label: \"Status\" },\n { key: \"owner\", label: \"Owner\" },\n ]}\n columnSettings\n columns={TASK_COLUMNS}\n rows={TASK_ROWS}\n />\n </Section>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InboxPattern.js","names":[],"sources":["../../../../ui/patterns/InboxPattern/InboxPattern.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Avatar } from \"../../Avatar\";\nimport { Badge } from \"../../Badge\";\nimport { Button } from \"../../Button\";\nimport { Cell } from \"../../Cell\";\nimport { Empty } from \"../../Empty\";\nimport { PageHeader } from \"../../PageHeader\";\nimport type { PageHeaderProps } from \"../../PageHeader\";\nimport { Scoreboard } from \"../../Scoreboard\";\nimport { Section } from \"../../Section\";\nimport { Table } from \"../../Table\";\nimport { Tabs } from \"../../Tabs\";\nimport { Toast } from \"../../Toast\";\nimport { filterMessages, INBOX, type InboxMessage } from \"./inbox-data\";\nimport { InboxReplyDrawer } from \"./InboxReplyDrawer\";\nimport styles from \"./InboxPattern.module.css\";\n\nconst COLUMNS = [\n { key: \"from\", header: \"From\", emphasis: true },\n { key: \"subject\", header: \"Subject\" },\n { key: \"kind\", header: \"Type\" },\n { key: \"when\", header: \"When\" },\n { key: \"open\", header: \"\" },\n];\n\nfunction InboxTable({\n messages,\n onOpen,\n}: {\n messages: InboxMessage[];\n onOpen: (id: string) => void;\n}) {\n return (\n <Table\n caption=\"Inbox\"\n size=\"sm\"\n emptyLabel=\"No messages in this filter.\"\n columns={COLUMNS}\n rows={messages.map((item) => ({\n from: <Cell type=\"avatar\" size=\"sm\" name={item.from} src={item.fromSrc} label={item.from} />,\n subject: item.subject,\n kind: <Badge tone={item.kindTone} size=\"sm\">{item.kind}</Badge>,\n when: item.when,\n open: (\n <Button variant=\"tertiary\" size=\"sm\" onClick={() => onOpen(item.id)}>\n Open\n </Button>\n ),\n }))}\n />\n );\n}\n\nexport interface InboxPatternProps {\n breadcrumbs?: PageHeaderProps[\"breadcrumbs\"];\n}\n\nexport function InboxPattern({ breadcrumbs }: InboxPatternProps) {\n const [messages, setMessages] = useState(INBOX);\n const [tab, setTab] = useState(\"all\");\n const [selectedId, setSelectedId] = useState<string | null>(INBOX[0]?.id ?? null);\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [toastOpen, setToastOpen] = useState(false);\n\n const selected = messages.find((item) => item.id === selectedId) ?? null;\n const unread = messages.filter((item) => item.unread).length;\n\n useEffect(() => {\n const next = filterMessages(messages, tab);\n if (selectedId && next.some((item) => item.id === selectedId)) return;\n setSelectedId(next[0]?.id ?? null);\n setDrawerOpen(false);\n }, [selectedId, tab, messages]);\n\n function archive(id: string) {\n setMessages((current) => current.filter((item) => item.id !== id));\n setDrawerOpen(false);\n }\n\n function openMessage(id: string) {\n setSelectedId(id);\n setDrawerOpen(true);\n }\n\n function sendReply() {\n if (!selected) return;\n setMessages((current) =>\n current.map((item) => (item.id === selected.id ? { ...item, unread: false } : item)),\n );\n setToastOpen(true);\n }\n\n return (\n <div className=\"layout-canvas layout-canvas--sticky-header\">\n <div className=\"layout-header\">\n <PageHeader\n title=\"Inbox\"\n subtitle=\"Replies, mentions, and requests waiting on you.\"\n breadcrumbs={breadcrumbs}\n />\n </div>\n <div className=\"layout-content\">\n <Section title=\"At a glance\">\n <Scoreboard\n className=\"layout-metrics layout-metrics--fixed-4\"\n aria-label=\"Inbox this week\"\n items={[\n { label: \"Unread\", value: String(unread), delta: `+${unread}`, trend: \"up\" as const, hint: \"need a look\", size: \"lg\" as const, badge: \"Live\", badgeTone: \"danger\" as const },\n { label: \"Mentions\", value: String(messages.filter((item) => item.kind === \"Mention\").length), delta: \"+1\", trend: \"up\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"You\", badgeTone: \"brand\" as const },\n { label: \"Requests\", value: String(messages.filter((item) => item.kind === \"Request\").length), delta: \"+2\", trend: \"up\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"Review\", badgeTone: \"warning\" as const },\n { label: \"Open\", value: String(messages.length), delta: \"0\", trend: \"flat\" as const, hint: \"in inbox\", size: \"lg\" as const, badge: \"Sprint\", badgeTone: \"info\" as const },\n ]}\n />\n </Section>\n <Section title=\"Messages\" description={`${unread} unread`}>\n <Tabs\n ariaLabel=\"Inbox type\"\n variant=\"line\"\n size=\"md\"\n value={tab}\n onChange={setTab}\n items={[\n { id: \"all\", label: \"All\", content: <InboxTable messages={filterMessages(messages, \"all\")} onOpen={openMessage} /> },\n { id: \"unread\", label: \"Unread\", content: <InboxTable messages={filterMessages(messages, \"unread\")} onOpen={openMessage} /> },\n { id: \"mentions\", label: \"Mentions\", content: <InboxTable messages={filterMessages(messages, \"mentions\")} onOpen={openMessage} /> },\n { id: \"requests\", label: \"Requests\", content: <InboxTable messages={filterMessages(messages, \"requests\")} onOpen={openMessage} /> },\n ]}\n />\n </Section>\n <Section\n title={selected?.subject ?? \"Message\"}\n description={selected ? `${selected.from} · ${selected.when}` : \"Select a row\"}\n actions={\n selected ? (\n <>\n <Button variant=\"secondary\" size=\"sm\" onClick={() => archive(selected.id)}>\n Archive\n </Button>\n <Button\n variant={drawerOpen ? \"secondary\" : \"primary\"}\n size=\"sm\"\n onClick={() => openMessage(selected.id)}\n >\n Reply\n </Button>\n </>\n ) : undefined\n }\n >\n {selected ? (\n <div className={styles.detail}>\n <div className={styles.meta}>\n <Avatar name={selected.from} src={selected.fromSrc} size=\"md\" />\n <div className={styles.copy}>\n <p className={styles.label}>From</p>\n <p className={styles.value}>{selected.from}</p>\n </div>\n <Badge tone={selected.kindTone}>{selected.kind}</Badge>\n </div>\n <p className={styles.body}>{selected.body}</p>\n </div>\n ) : (\n <Empty\n title=\"No message selected\"\n description=\"Open a row to read it here.\"\n icon=\"Mail\"\n outlined\n />\n )}\n </Section>\n </div>\n <InboxReplyDrawer\n key={selected?.id ?? \"none\"}\n message={selected}\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n onSend={sendReply}\n />\n <Toast\n open={toastOpen}\n title=\"Reply sent\"\n description=\"It will show up in the thread.\"\n status=\"success\"\n duration={3000}\n onClose={() => setToastOpen(false)}\n onOpenChange={setToastOpen}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InboxPattern.js","names":[],"sources":["../../../../ui/patterns/InboxPattern/InboxPattern.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Avatar } from \"../../Avatar\";\nimport { Badge } from \"../../Badge\";\nimport { Button } from \"../../Button\";\nimport { Cell } from \"../../Cell\";\nimport { Empty } from \"../../Empty\";\nimport { PageHeader } from \"../../PageHeader\";\nimport type { PageHeaderProps } from \"../../PageHeader\";\nimport { Scoreboard } from \"../../Scoreboard\";\nimport { Section } from \"../../Section\";\nimport { Table } from \"../../Table\";\nimport { Tabs } from \"../../Tabs\";\nimport { Toast } from \"../../Toast\";\nimport { filterMessages, INBOX, type InboxMessage } from \"./inbox-data\";\nimport { InboxReplyDrawer } from \"./InboxReplyDrawer\";\nimport styles from \"./InboxPattern.module.css\";\n\nconst COLUMNS = [\n { key: \"from\", header: \"From\", emphasis: true },\n { key: \"subject\", header: \"Subject\" },\n { key: \"kind\", header: \"Type\" },\n { key: \"when\", header: \"When\" },\n { key: \"open\", header: \"\" },\n];\n\nfunction InboxTable({\n messages,\n onOpen,\n}: {\n messages: InboxMessage[];\n onOpen: (id: string) => void;\n}) {\n return (\n <Table\n caption=\"Inbox\"\n size=\"sm\"\n emptyLabel=\"No messages in this filter.\"\n columns={COLUMNS}\n rows={messages.map((item) => ({\n from: <Cell type=\"avatar\" size=\"sm\" name={item.from} src={item.fromSrc} label={item.from} />,\n subject: item.subject,\n kind: <Badge tone={item.kindTone} size=\"sm\">{item.kind}</Badge>,\n when: item.when,\n open: (\n <Button variant=\"tertiary\" size=\"sm\" onClick={() => onOpen(item.id)}>\n Open\n </Button>\n ),\n }))}\n />\n );\n}\n\nexport interface InboxPatternProps {\n breadcrumbs?: PageHeaderProps[\"breadcrumbs\"];\n}\n\nexport function InboxPattern({ breadcrumbs }: InboxPatternProps) {\n const [messages, setMessages] = useState(INBOX);\n const [tab, setTab] = useState(\"all\");\n const [selectedId, setSelectedId] = useState<string | null>(INBOX[0]?.id ?? null);\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [toastOpen, setToastOpen] = useState(false);\n\n const selected = messages.find((item) => item.id === selectedId) ?? null;\n const unread = messages.filter((item) => item.unread).length;\n\n useEffect(() => {\n const next = filterMessages(messages, tab);\n if (selectedId && next.some((item) => item.id === selectedId)) return;\n setSelectedId(next[0]?.id ?? null);\n setDrawerOpen(false);\n }, [selectedId, tab, messages]);\n\n function archive(id: string) {\n setMessages((current) => current.filter((item) => item.id !== id));\n setDrawerOpen(false);\n }\n\n function openMessage(id: string) {\n setSelectedId(id);\n setDrawerOpen(true);\n }\n\n function sendReply() {\n if (!selected) return;\n setMessages((current) =>\n current.map((item) => (item.id === selected.id ? { ...item, unread: false } : item)),\n );\n setToastOpen(true);\n }\n\n return (\n <div className=\"layout-canvas layout-canvas--sticky-header\">\n <div className=\"layout-header\">\n <PageHeader\n title=\"Inbox\"\n subtitle=\"Replies, mentions, and requests waiting on you.\"\n breadcrumbs={breadcrumbs}\n />\n </div>\n <div className=\"layout-content\">\n <Section title=\"At a glance\">\n <Scoreboard\n aria-label=\"Inbox this week\"\n items={[\n { label: \"Unread\", value: String(unread), delta: `+${unread}`, trend: \"up\" as const, hint: \"need a look\", size: \"lg\" as const, badge: \"Live\", badgeTone: \"danger\" as const },\n { label: \"Mentions\", value: String(messages.filter((item) => item.kind === \"Mention\").length), delta: \"+1\", trend: \"up\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"You\", badgeTone: \"brand\" as const },\n { label: \"Requests\", value: String(messages.filter((item) => item.kind === \"Request\").length), delta: \"+2\", trend: \"up\" as const, hint: \"this sprint\", size: \"lg\" as const, badge: \"Review\", badgeTone: \"warning\" as const },\n { label: \"Open\", value: String(messages.length), delta: \"0\", trend: \"flat\" as const, hint: \"in inbox\", size: \"lg\" as const, badge: \"Sprint\", badgeTone: \"info\" as const },\n ]}\n />\n </Section>\n <Section title=\"Messages\" description={`${unread} unread`}>\n <Tabs\n ariaLabel=\"Inbox type\"\n variant=\"line\"\n size=\"md\"\n value={tab}\n onChange={setTab}\n items={[\n { id: \"all\", label: \"All\", content: <InboxTable messages={filterMessages(messages, \"all\")} onOpen={openMessage} /> },\n { id: \"unread\", label: \"Unread\", content: <InboxTable messages={filterMessages(messages, \"unread\")} onOpen={openMessage} /> },\n { id: \"mentions\", label: \"Mentions\", content: <InboxTable messages={filterMessages(messages, \"mentions\")} onOpen={openMessage} /> },\n { id: \"requests\", label: \"Requests\", content: <InboxTable messages={filterMessages(messages, \"requests\")} onOpen={openMessage} /> },\n ]}\n />\n </Section>\n <Section\n title={selected?.subject ?? \"Message\"}\n description={selected ? `${selected.from} · ${selected.when}` : \"Select a row\"}\n actions={\n selected ? (\n <>\n <Button variant=\"secondary\" size=\"sm\" onClick={() => archive(selected.id)}>\n Archive\n </Button>\n <Button\n variant={drawerOpen ? \"secondary\" : \"primary\"}\n size=\"sm\"\n onClick={() => openMessage(selected.id)}\n >\n Reply\n </Button>\n </>\n ) : undefined\n }\n >\n {selected ? (\n <div className={styles.detail}>\n <div className={styles.meta}>\n <Avatar name={selected.from} src={selected.fromSrc} size=\"md\" />\n <div className={styles.copy}>\n <p className={styles.label}>From</p>\n <p className={styles.value}>{selected.from}</p>\n </div>\n <Badge tone={selected.kindTone}>{selected.kind}</Badge>\n </div>\n <p className={styles.body}>{selected.body}</p>\n </div>\n ) : (\n <Empty\n title=\"No message selected\"\n description=\"Open a row to read it here.\"\n icon=\"Mail\"\n outlined\n />\n )}\n </Section>\n </div>\n <InboxReplyDrawer\n key={selected?.id ?? \"none\"}\n message={selected}\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n onSend={sendReply}\n />\n <Toast\n open={toastOpen}\n title=\"Reply sent\"\n description=\"It will show up in the thread.\"\n status=\"success\"\n duration={3000}\n onClose={() => setToastOpen(false)}\n onOpenChange={setToastOpen}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
|
7
7
|
function s({ title: s, description: c, legend: l, children: u, table: d, footnote: f, isEmpty: p = !1, emptyLabel: m = "No data for this range", isLoading: h = !1, className: g = "" }) {
|
|
8
8
|
let [_, v] = n("chart"), y = t(), b = t(), x = t(), S = _ === "table" && !!d;
|
|
9
9
|
return /* @__PURE__ */ o("figure", {
|
|
10
|
-
className: `${e.frame} ${g}`.trim(),
|
|
10
|
+
className: `${s || c || d || f || l ? e.frame : e.flush} ${g}`.trim(),
|
|
11
11
|
"aria-labelledby": s ? y : void 0,
|
|
12
12
|
"aria-describedby": c ? b : void 0,
|
|
13
13
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartFrame.js","names":[],"sources":["../../../ui/shared/ChartFrame.tsx"],"sourcesContent":["\"use client\";\n\nimport { BarChart3, Table2 } from \"lucide-react\";\nimport { useId, useState, type ReactNode } from \"react\";\nimport styles from \"./ChartFrame.module.css\";\n\nexport interface ChartFrameProps {\n title?: string;\n description?: string;\n legend?: ReactNode;\n children: ReactNode;\n table?: ReactNode;\n footnote?: string;\n isEmpty?: boolean;\n emptyLabel?: string;\n isLoading?: boolean;\n className?: string;\n}\n\nexport function ChartFrame({\n title,\n description,\n legend,\n children,\n table,\n footnote,\n isEmpty = false,\n emptyLabel = \"No data for this range\",\n isLoading = false,\n className = \"\",\n}: ChartFrameProps) {\n const [view, setView] = useState<\"chart\" | \"table\">(\"chart\");\n const titleId = useId();\n const descriptionId = useId();\n const panelId = useId();\n const showTable = view === \"table\" && Boolean(table);\n\n return (\n <figure\n className={`${styles.frame} ${className}`.trim()}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descriptionId : undefined}\n >\n {title || table ? (\n <figcaption className={styles.header}>\n <div className={styles.heading}>\n {title ? (\n <h3 id={titleId} className={styles.title}>\n {title}\n </h3>\n ) : null}\n {description ? (\n <p id={descriptionId} className={styles.description}>\n {description}\n </p>\n ) : null}\n </div>\n {table ? (\n <div className={styles.actions}>\n <button\n type=\"button\"\n className={styles.toggle}\n onClick={() => setView(showTable ? \"chart\" : \"table\")}\n aria-expanded={showTable}\n aria-controls={panelId}\n >\n {showTable ? <BarChart3 aria-hidden=\"true\" size={14} /> : <Table2 aria-hidden=\"true\" size={14} />}\n <span>{showTable ? \"Chart\" : \"Table\"}</span>\n </button>\n </div>\n ) : null}\n </figcaption>\n ) : null}\n\n {legend}\n\n <div\n id={panelId}\n className={`${styles.body}${isLoading ? ` ${styles.loading}` : \"\"}`}\n >\n {isEmpty ? <p className={styles.empty}>{emptyLabel}</p> : showTable ? table : children}\n </div>\n\n {footnote ? <p className={styles.footnote}>{footnote}</p> : null}\n </figure>\n );\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,EAAW,EACzB,UACA,gBACA,WACA,aACA,UACA,aACA,aAAU,IACV,gBAAa,0BACb,eAAY,IACZ,eAAY,MACM;CAClB,IAAM,CAAC,GAAM,KAAW,EAA4B,OAAO,GACrD,IAAU,EAAM,GAChB,IAAgB,EAAM,GACtB,IAAU,EAAM,GAChB,IAAY,MAAS,WAAW,EAAQ;
|
|
1
|
+
{"version":3,"file":"ChartFrame.js","names":[],"sources":["../../../ui/shared/ChartFrame.tsx"],"sourcesContent":["\"use client\";\n\nimport { BarChart3, Table2 } from \"lucide-react\";\nimport { useId, useState, type ReactNode } from \"react\";\nimport styles from \"./ChartFrame.module.css\";\n\nexport interface ChartFrameProps {\n title?: string;\n description?: string;\n legend?: ReactNode;\n children: ReactNode;\n table?: ReactNode;\n footnote?: string;\n isEmpty?: boolean;\n emptyLabel?: string;\n isLoading?: boolean;\n className?: string;\n}\n\nexport function ChartFrame({\n title,\n description,\n legend,\n children,\n table,\n footnote,\n isEmpty = false,\n emptyLabel = \"No data for this range\",\n isLoading = false,\n className = \"\",\n}: ChartFrameProps) {\n const [view, setView] = useState<\"chart\" | \"table\">(\"chart\");\n const titleId = useId();\n const descriptionId = useId();\n const panelId = useId();\n const showTable = view === \"table\" && Boolean(table);\n const hasChrome = Boolean(title || description || table || footnote || legend);\n\n return (\n <figure\n className={`${hasChrome ? styles.frame : styles.flush} ${className}`.trim()}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descriptionId : undefined}\n >\n {title || table ? (\n <figcaption className={styles.header}>\n <div className={styles.heading}>\n {title ? (\n <h3 id={titleId} className={styles.title}>\n {title}\n </h3>\n ) : null}\n {description ? (\n <p id={descriptionId} className={styles.description}>\n {description}\n </p>\n ) : null}\n </div>\n {table ? (\n <div className={styles.actions}>\n <button\n type=\"button\"\n className={styles.toggle}\n onClick={() => setView(showTable ? \"chart\" : \"table\")}\n aria-expanded={showTable}\n aria-controls={panelId}\n >\n {showTable ? <BarChart3 aria-hidden=\"true\" size={14} /> : <Table2 aria-hidden=\"true\" size={14} />}\n <span>{showTable ? \"Chart\" : \"Table\"}</span>\n </button>\n </div>\n ) : null}\n </figcaption>\n ) : null}\n\n {legend}\n\n <div\n id={panelId}\n className={`${styles.body}${isLoading ? ` ${styles.loading}` : \"\"}`}\n >\n {isEmpty ? <p className={styles.empty}>{emptyLabel}</p> : showTable ? table : children}\n </div>\n\n {footnote ? <p className={styles.footnote}>{footnote}</p> : null}\n </figure>\n );\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,EAAW,EACzB,UACA,gBACA,WACA,aACA,UACA,aACA,aAAU,IACV,gBAAa,0BACb,eAAY,IACZ,eAAY,MACM;CAClB,IAAM,CAAC,GAAM,KAAW,EAA4B,OAAO,GACrD,IAAU,EAAM,GAChB,IAAgB,EAAM,GACtB,IAAU,EAAM,GAChB,IAAY,MAAS,WAAW,EAAQ;CAG9C,OACE,kBAAC,UAAD;EACE,WAAW,GAJW,KAAS,KAAe,KAAS,KAAY,IAIzC,EAAO,QAAQ,EAAO,MAAM,GAAG,IAAY,KAAK;EAC1E,mBAAiB,IAAQ,IAAU,KAAA;EACnC,oBAAkB,IAAc,IAAgB,KAAA;EAHlD,UAAA;GAKG,KAAS,IACR,kBAAC,cAAD;IAAY,WAAW,EAAO;IAA9B,UAAA,CACE,kBAAC,OAAD;KAAK,WAAW,EAAO;KAAvB,UAAA,CACG,IACC,kBAAC,MAAD;MAAI,IAAI;MAAS,WAAW,EAAO;MAChC,UAAA;KACC,CAAA,IACF,MACH,IACC,kBAAC,KAAD;MAAG,IAAI;MAAe,WAAW,EAAO;MACrC,UAAA;KACA,CAAA,IACD,IACD;IACJ,CAAA,GAAA,IACC,kBAAC,OAAD;KAAK,WAAW,EAAO;KACrB,UAAA,kBAAC,UAAD;MACE,MAAK;MACL,WAAW,EAAO;MAClB,eAAe,EAAQ,IAAY,UAAU,OAAO;MACpD,iBAAe;MACf,iBAAe;MALjB,UAAA,CAOe,EAAZ,IAAa,IAA6C,GAA9C;OAAW,eAAY;OAAO,MAAM;MAAK,CAA0C,GAChG,kBAAC,QAAD,EAAA,UAAO,IAAY,UAAU,QAAc,CAAA,CACrC;;IACL,CAAA,IACH,IACM;GACV,CAAA,IAAA;GAEH;GAED,kBAAC,OAAD;IACE,IAAI;IACJ,WAAW,GAAG,EAAO,OAAO,IAAY,IAAI,EAAO,YAAY;IAE9D,UAAA,IAAU,kBAAC,KAAD;KAAG,WAAW,EAAO;KAAQ,UAAA;IAAc,CAAA,IAAI,IAAY,IAAQ;GAC3E,CAAA;GAEJ,IAAW,kBAAC,KAAD;IAAG,WAAW,EAAO;IAAW,UAAA;GAAY,CAAA,IAAI;EACtD;;AAEZ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.
|
|
1
|
+
._frame_1gfzm_1 {
|
|
2
2
|
display: grid;
|
|
3
3
|
gap: var(--space-4);
|
|
4
4
|
margin: 0;
|
|
@@ -13,7 +13,21 @@
|
|
|
13
13
|
color: var(--text-primary);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
.
|
|
16
|
+
._flush_1gfzm_16 {
|
|
17
|
+
display: grid;
|
|
18
|
+
gap: var(--space-4);
|
|
19
|
+
margin: 0;
|
|
20
|
+
padding: 0;
|
|
21
|
+
width: 100%;
|
|
22
|
+
min-width: 0;
|
|
23
|
+
box-sizing: border-box;
|
|
24
|
+
border: 0;
|
|
25
|
+
background: transparent;
|
|
26
|
+
box-shadow: none;
|
|
27
|
+
color: var(--text-primary);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
._header_1gfzm_30 {
|
|
17
31
|
display: flex;
|
|
18
32
|
flex-wrap: wrap;
|
|
19
33
|
align-items: flex-start;
|
|
@@ -22,13 +36,13 @@
|
|
|
22
36
|
min-width: 0;
|
|
23
37
|
}
|
|
24
38
|
|
|
25
|
-
.
|
|
39
|
+
._heading_1gfzm_39 {
|
|
26
40
|
display: grid;
|
|
27
41
|
gap: var(--space-1);
|
|
28
42
|
min-width: 0;
|
|
29
43
|
}
|
|
30
44
|
|
|
31
|
-
.
|
|
45
|
+
._title_1gfzm_45 {
|
|
32
46
|
margin: 0;
|
|
33
47
|
font-family: var(--font-sans);
|
|
34
48
|
font-size: var(--type-size-heading-sm);
|
|
@@ -37,7 +51,7 @@
|
|
|
37
51
|
color: var(--text-primary);
|
|
38
52
|
}
|
|
39
53
|
|
|
40
|
-
.
|
|
54
|
+
._description_1gfzm_54 {
|
|
41
55
|
margin: 0;
|
|
42
56
|
font-family: var(--font-sans);
|
|
43
57
|
font-size: var(--type-size-caption);
|
|
@@ -45,13 +59,13 @@
|
|
|
45
59
|
color: var(--text-secondary);
|
|
46
60
|
}
|
|
47
61
|
|
|
48
|
-
.
|
|
62
|
+
._actions_1gfzm_62 {
|
|
49
63
|
display: flex;
|
|
50
64
|
align-items: center;
|
|
51
65
|
gap: var(--space-1);
|
|
52
66
|
}
|
|
53
67
|
|
|
54
|
-
.
|
|
68
|
+
._toggle_1gfzm_68 {
|
|
55
69
|
display: inline-flex;
|
|
56
70
|
align-items: center;
|
|
57
71
|
gap: var(--space-1);
|
|
@@ -69,27 +83,27 @@
|
|
|
69
83
|
border-color var(--motion-interaction-duration) var(--motion-interaction-easing);
|
|
70
84
|
}
|
|
71
85
|
|
|
72
|
-
.
|
|
86
|
+
._toggle_1gfzm_68:hover {
|
|
73
87
|
border-color: var(--border-strong);
|
|
74
88
|
color: var(--text-primary);
|
|
75
89
|
}
|
|
76
90
|
|
|
77
|
-
.
|
|
91
|
+
._toggle_1gfzm_68:focus-visible {
|
|
78
92
|
outline: var(--border-focus-width) solid var(--focus-ring);
|
|
79
93
|
outline-offset: var(--space-inset-2xs);
|
|
80
94
|
}
|
|
81
95
|
|
|
82
|
-
.
|
|
96
|
+
._body_1gfzm_96 {
|
|
83
97
|
min-width: 0;
|
|
84
98
|
overflow: visible;
|
|
85
99
|
}
|
|
86
100
|
|
|
87
|
-
.
|
|
101
|
+
._loading_1gfzm_101 {
|
|
88
102
|
opacity: 0.6;
|
|
89
103
|
transition: opacity var(--motion-interaction-duration) var(--motion-interaction-easing);
|
|
90
104
|
}
|
|
91
105
|
|
|
92
|
-
.
|
|
106
|
+
._empty_1gfzm_106 {
|
|
93
107
|
display: grid;
|
|
94
108
|
place-items: center;
|
|
95
109
|
min-height: 15rem;
|
|
@@ -101,14 +115,14 @@
|
|
|
101
115
|
color: var(--text-muted);
|
|
102
116
|
}
|
|
103
117
|
|
|
104
|
-
.
|
|
118
|
+
._footnote_1gfzm_118 {
|
|
105
119
|
margin: 0;
|
|
106
120
|
font-family: var(--font-sans);
|
|
107
121
|
font-size: var(--type-size-caption);
|
|
108
122
|
color: var(--text-muted);
|
|
109
123
|
}
|
|
110
124
|
|
|
111
|
-
.
|
|
125
|
+
._legend_1gfzm_125 {
|
|
112
126
|
display: flex;
|
|
113
127
|
flex-wrap: wrap;
|
|
114
128
|
gap: var(--space-2) var(--space-4);
|
|
@@ -117,17 +131,17 @@
|
|
|
117
131
|
list-style: none;
|
|
118
132
|
}
|
|
119
133
|
|
|
120
|
-
.
|
|
134
|
+
._legendInteractive_1gfzm_134 > li {
|
|
121
135
|
display: contents;
|
|
122
136
|
}
|
|
123
137
|
|
|
124
|
-
.
|
|
138
|
+
._legendVertical_1gfzm_138 {
|
|
125
139
|
display: grid;
|
|
126
140
|
gap: var(--space-2);
|
|
127
141
|
align-content: center;
|
|
128
142
|
}
|
|
129
143
|
|
|
130
|
-
.
|
|
144
|
+
._legendItem_1gfzm_144 {
|
|
131
145
|
display: inline-flex;
|
|
132
146
|
align-items: center;
|
|
133
147
|
gap: var(--space-1);
|
|
@@ -136,7 +150,7 @@
|
|
|
136
150
|
color: var(--text-secondary);
|
|
137
151
|
}
|
|
138
152
|
|
|
139
|
-
.
|
|
153
|
+
._legendVertical_1gfzm_138 ._legendItem_1gfzm_144 {
|
|
140
154
|
display: grid;
|
|
141
155
|
grid-template-columns: auto 1fr auto;
|
|
142
156
|
align-items: center;
|
|
@@ -144,7 +158,7 @@
|
|
|
144
158
|
width: 100%;
|
|
145
159
|
}
|
|
146
160
|
|
|
147
|
-
.
|
|
161
|
+
._legendButton_1gfzm_161 {
|
|
148
162
|
margin: 0;
|
|
149
163
|
padding: 0;
|
|
150
164
|
border: 0;
|
|
@@ -157,40 +171,40 @@
|
|
|
157
171
|
transition: opacity 0.56s cubic-bezier(0.22, 1, 0.36, 1);
|
|
158
172
|
}
|
|
159
173
|
|
|
160
|
-
.
|
|
174
|
+
._legendButton_1gfzm_161:focus-visible {
|
|
161
175
|
outline: var(--border-focus-width) solid var(--focus-ring);
|
|
162
176
|
outline-offset: var(--space-inset-2xs);
|
|
163
177
|
}
|
|
164
178
|
|
|
165
|
-
.
|
|
179
|
+
._legendItemDimmed_1gfzm_179 {
|
|
166
180
|
opacity: 0.45;
|
|
167
181
|
}
|
|
168
182
|
|
|
169
|
-
.
|
|
183
|
+
._legendSwatch_1gfzm_183 {
|
|
170
184
|
width: 0.625rem;
|
|
171
185
|
height: 0.625rem;
|
|
172
186
|
border-radius: var(--radius-control-sm);
|
|
173
187
|
flex: none;
|
|
174
188
|
}
|
|
175
189
|
|
|
176
|
-
.
|
|
190
|
+
._legendSwatchPill_1gfzm_190 {
|
|
177
191
|
width: 0.5rem;
|
|
178
192
|
height: 0.375rem;
|
|
179
193
|
border-radius: var(--radius-pill);
|
|
180
194
|
}
|
|
181
195
|
|
|
182
|
-
.
|
|
196
|
+
._legendSwatchLine_1gfzm_196 {
|
|
183
197
|
width: 0.75rem;
|
|
184
198
|
height: 0.156rem;
|
|
185
199
|
border-radius: var(--radius-pill);
|
|
186
200
|
}
|
|
187
201
|
|
|
188
|
-
.
|
|
202
|
+
._legendMeta_1gfzm_202 {
|
|
189
203
|
color: var(--text-muted);
|
|
190
204
|
font-variant-numeric: tabular-nums;
|
|
191
205
|
}
|
|
192
206
|
|
|
193
|
-
.
|
|
207
|
+
._legendPercent_1gfzm_207 {
|
|
194
208
|
color: var(--text-primary);
|
|
195
209
|
font-variant-numeric: tabular-nums;
|
|
196
210
|
font-weight: var(--type-weight-label);
|
|
@@ -198,16 +212,16 @@
|
|
|
198
212
|
}
|
|
199
213
|
|
|
200
214
|
@media (prefers-reduced-motion: reduce) {
|
|
201
|
-
.
|
|
215
|
+
._legendButton_1gfzm_161 {
|
|
202
216
|
transition: none;
|
|
203
217
|
}
|
|
204
218
|
}
|
|
205
219
|
|
|
206
|
-
.
|
|
220
|
+
._tableScroll_1gfzm_220 {
|
|
207
221
|
overflow-x: auto;
|
|
208
222
|
}
|
|
209
223
|
|
|
210
|
-
.
|
|
224
|
+
._table_1gfzm_220 {
|
|
211
225
|
width: 100%;
|
|
212
226
|
border-collapse: collapse;
|
|
213
227
|
font-family: var(--font-sans);
|
|
@@ -215,33 +229,33 @@
|
|
|
215
229
|
line-height: var(--type-line-body);
|
|
216
230
|
}
|
|
217
231
|
|
|
218
|
-
.
|
|
219
|
-
.
|
|
232
|
+
._table_1gfzm_220 th,
|
|
233
|
+
._table_1gfzm_220 td {
|
|
220
234
|
padding: var(--space-1) var(--space-2);
|
|
221
235
|
border-bottom: var(--border-width-thin) solid var(--border-faint);
|
|
222
236
|
text-align: start;
|
|
223
237
|
background-color: var(--surface-card);
|
|
224
238
|
}
|
|
225
239
|
|
|
226
|
-
.
|
|
240
|
+
._table_1gfzm_220 thead th {
|
|
227
241
|
color: var(--text-secondary);
|
|
228
242
|
font-size: var(--type-size-caption);
|
|
229
243
|
font-weight: var(--type-weight-label);
|
|
230
244
|
white-space: nowrap;
|
|
231
245
|
}
|
|
232
246
|
|
|
233
|
-
.
|
|
247
|
+
._table_1gfzm_220 tbody th {
|
|
234
248
|
color: var(--text-primary);
|
|
235
249
|
font-weight: var(--type-weight-label);
|
|
236
250
|
}
|
|
237
251
|
|
|
238
|
-
.
|
|
252
|
+
._table_1gfzm_220 td {
|
|
239
253
|
color: var(--text-primary);
|
|
240
254
|
font-variant-numeric: tabular-nums;
|
|
241
255
|
text-align: end;
|
|
242
256
|
}
|
|
243
257
|
|
|
244
|
-
.
|
|
258
|
+
._tooltip_1gfzm_258 {
|
|
245
259
|
position: absolute;
|
|
246
260
|
z-index: var(--z-tooltip);
|
|
247
261
|
min-width: 9.5rem;
|
|
@@ -256,18 +270,18 @@
|
|
|
256
270
|
transform: translate(0.5rem, -50%);
|
|
257
271
|
}
|
|
258
272
|
|
|
259
|
-
.
|
|
273
|
+
._tooltipFlip_1gfzm_273 {
|
|
260
274
|
transform: translate(calc(-100% - 0.5rem), -50%);
|
|
261
275
|
}
|
|
262
276
|
|
|
263
|
-
.
|
|
277
|
+
._tooltipTitle_1gfzm_277 {
|
|
264
278
|
margin: 0;
|
|
265
279
|
font-size: var(--type-size-caption);
|
|
266
280
|
font-weight: var(--type-weight-label);
|
|
267
281
|
color: var(--text-primary);
|
|
268
282
|
}
|
|
269
283
|
|
|
270
|
-
.
|
|
284
|
+
._tooltipRow_1gfzm_284 {
|
|
271
285
|
display: flex;
|
|
272
286
|
align-items: center;
|
|
273
287
|
gap: var(--space-2);
|
|
@@ -276,19 +290,19 @@
|
|
|
276
290
|
color: var(--text-secondary);
|
|
277
291
|
}
|
|
278
292
|
|
|
279
|
-
.
|
|
293
|
+
._tooltipKey_1gfzm_293 {
|
|
280
294
|
width: 0.5rem;
|
|
281
295
|
height: 0.375rem;
|
|
282
296
|
border-radius: var(--radius-pill);
|
|
283
297
|
flex: none;
|
|
284
298
|
}
|
|
285
299
|
|
|
286
|
-
.
|
|
300
|
+
._tooltipShare_1gfzm_300 {
|
|
287
301
|
flex: 1;
|
|
288
302
|
min-width: 0;
|
|
289
303
|
}
|
|
290
304
|
|
|
291
|
-
.
|
|
305
|
+
._tooltipValue_1gfzm_305 {
|
|
292
306
|
color: var(--text-primary);
|
|
293
307
|
font-variant-numeric: tabular-nums;
|
|
294
308
|
font-weight: var(--type-weight-label);
|
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
import "./ChartFrame.kit.css";
|
|
2
2
|
//#region ui/shared/ChartFrame.module.css
|
|
3
|
-
var e = "
|
|
3
|
+
var e = "_frame_1gfzm_1", t = "_flush_1gfzm_16", n = "_header_1gfzm_30", r = "_heading_1gfzm_39", i = "_title_1gfzm_45", a = "_description_1gfzm_54", o = "_actions_1gfzm_62", s = "_toggle_1gfzm_68", c = "_body_1gfzm_96", l = "_loading_1gfzm_101", u = "_empty_1gfzm_106", d = "_footnote_1gfzm_118", f = "_legend_1gfzm_125", p = "_legendInteractive_1gfzm_134", m = "_legendVertical_1gfzm_138", h = "_legendItem_1gfzm_144", g = "_legendButton_1gfzm_161", _ = "_legendItemDimmed_1gfzm_179", v = "_legendSwatch_1gfzm_183", y = "_legendSwatchPill_1gfzm_190", b = "_legendSwatchLine_1gfzm_196", x = "_legendMeta_1gfzm_202", S = "_legendPercent_1gfzm_207", C = "_tableScroll_1gfzm_220", w = "_table_1gfzm_220", T = "_tooltip_1gfzm_258", E = "_tooltipFlip_1gfzm_273", D = "_tooltipTitle_1gfzm_277", O = "_tooltipRow_1gfzm_284", k = "_tooltipKey_1gfzm_293", A = "_tooltipShare_1gfzm_300", j = "_tooltipValue_1gfzm_305", M = {
|
|
4
4
|
frame: e,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
5
|
+
flush: t,
|
|
6
|
+
header: n,
|
|
7
|
+
heading: r,
|
|
8
|
+
title: i,
|
|
9
|
+
description: a,
|
|
10
|
+
actions: o,
|
|
11
|
+
toggle: s,
|
|
12
|
+
body: c,
|
|
13
|
+
loading: l,
|
|
14
|
+
empty: u,
|
|
15
|
+
footnote: d,
|
|
16
|
+
legend: f,
|
|
17
|
+
legendInteractive: p,
|
|
18
|
+
legendVertical: m,
|
|
19
|
+
legendItem: h,
|
|
20
|
+
legendButton: g,
|
|
21
|
+
legendItemDimmed: _,
|
|
22
|
+
legendSwatch: v,
|
|
23
|
+
legendSwatchPill: y,
|
|
24
|
+
legendSwatchLine: b,
|
|
25
|
+
legendMeta: x,
|
|
26
|
+
legendPercent: S,
|
|
27
|
+
tableScroll: C,
|
|
28
|
+
table: w,
|
|
29
|
+
tooltip: T,
|
|
30
|
+
tooltipFlip: E,
|
|
31
|
+
tooltipTitle: D,
|
|
32
|
+
tooltipRow: O,
|
|
33
|
+
tooltipKey: k,
|
|
34
|
+
tooltipShare: A,
|
|
35
|
+
tooltipValue: j
|
|
35
36
|
};
|
|
36
37
|
//#endregion
|
|
37
|
-
export {
|
|
38
|
+
export { o as actions, c as body, M as default, a as description, u as empty, t as flush, d as footnote, e as frame, n as header, r as heading, f as legend, g as legendButton, p as legendInteractive, h as legendItem, _ as legendItemDimmed, x as legendMeta, S as legendPercent, v as legendSwatch, b as legendSwatchLine, y as legendSwatchPill, m as legendVertical, l as loading, w as table, C as tableScroll, i as title, s as toggle, T as tooltip, E as tooltipFlip, k as tooltipKey, O as tooltipRow, A as tooltipShare, D as tooltipTitle, j as tooltipValue };
|
|
38
39
|
|
|
39
40
|
//# sourceMappingURL=ChartFrame.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartFrame.module.js","names":[],"sources":["../../../ui/shared/ChartFrame.module.css"],"sourcesContent":[".frame {\n display: grid;\n gap: var(--space-4);\n margin: 0;\n padding: var(--space-6);\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n border: var(--border-width-thin) solid var(--border-faint);\n border-radius: var(--radius-surface-md);\n background: var(--surface-card);\n box-shadow: var(--shadow-sm);\n color: var(--text-primary);\n}\n\n.header {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.heading {\n display: grid;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.title {\n margin: 0;\n font-family: var(--font-sans);\n font-size: var(--type-size-heading-sm);\n font-weight: var(--type-weight-heading);\n line-height: var(--type-line-heading);\n color: var(--text-primary);\n}\n\n.description {\n margin: 0;\n font-family: var(--font-sans);\n font-size: var(--type-size-caption);\n line-height: var(--type-line-body);\n color: var(--text-secondary);\n}\n\n.actions {\n display: flex;\n align-items: center;\n gap: var(--space-1);\n}\n\n.toggle {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n padding: var(--space-1) var(--space-2);\n border: var(--border-width-thin) solid var(--border-faint);\n border-radius: var(--radius-control-sm);\n background: var(--surface-card);\n color: var(--text-secondary);\n cursor: pointer;\n font-family: var(--font-sans);\n font-size: var(--type-size-caption);\n font-weight: var(--type-weight-label);\n transition:\n color var(--motion-interaction-duration) var(--motion-interaction-easing),\n border-color var(--motion-interaction-duration) var(--motion-interaction-easing);\n}\n\n.toggle:hover {\n border-color: var(--border-strong);\n color: var(--text-primary);\n}\n\n.toggle:focus-visible {\n outline: var(--border-focus-width) solid var(--focus-ring);\n outline-offset: var(--space-inset-2xs);\n}\n\n.body {\n min-width: 0;\n overflow: visible;\n}\n\n.loading {\n opacity: 0.6;\n transition: opacity var(--motion-interaction-duration) var(--motion-interaction-easing);\n}\n\n.empty {\n display: grid;\n place-items: center;\n min-height: 15rem;\n margin: 0;\n padding-inline: var(--space-4);\n text-align: center;\n font-family: var(--font-sans);\n font-size: var(--type-size-body-sm);\n color: var(--text-muted);\n}\n\n.footnote {\n margin: 0;\n font-family: var(--font-sans);\n font-size: var(--type-size-caption);\n color: var(--text-muted);\n}\n\n.legend {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2) var(--space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.legendInteractive > li {\n display: contents;\n}\n\n.legendVertical {\n display: grid;\n gap: var(--space-2);\n align-content: center;\n}\n\n.legendItem {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n font-family: var(--font-sans);\n font-size: var(--type-size-caption);\n color: var(--text-secondary);\n}\n\n.legendVertical .legendItem {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n column-gap: var(--space-2);\n width: 100%;\n}\n\n.legendButton {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n color: inherit;\n text-align: inherit;\n cursor: pointer;\n border-radius: var(--radius-control-sm);\n transition: opacity 0.56s cubic-bezier(0.22, 1, 0.36, 1);\n}\n\n.legendButton:focus-visible {\n outline: var(--border-focus-width) solid var(--focus-ring);\n outline-offset: var(--space-inset-2xs);\n}\n\n.legendItemDimmed {\n opacity: 0.45;\n}\n\n.legendSwatch {\n width: 0.625rem;\n height: 0.625rem;\n border-radius: var(--radius-control-sm);\n flex: none;\n}\n\n.legendSwatchPill {\n width: 0.5rem;\n height: 0.375rem;\n border-radius: var(--radius-pill);\n}\n\n.legendSwatchLine {\n width: 0.75rem;\n height: 0.156rem;\n border-radius: var(--radius-pill);\n}\n\n.legendMeta {\n color: var(--text-muted);\n font-variant-numeric: tabular-nums;\n}\n\n.legendPercent {\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n font-weight: var(--type-weight-label);\n text-align: end;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .legendButton {\n transition: none;\n }\n}\n\n.tableScroll {\n overflow-x: auto;\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n font-family: var(--font-sans);\n font-size: var(--type-size-body-sm);\n line-height: var(--type-line-body);\n}\n\n.table th,\n.table td {\n padding: var(--space-1) var(--space-2);\n border-bottom: var(--border-width-thin) solid var(--border-faint);\n text-align: start;\n background-color: var(--surface-card);\n}\n\n.table thead th {\n color: var(--text-secondary);\n font-size: var(--type-size-caption);\n font-weight: var(--type-weight-label);\n white-space: nowrap;\n}\n\n.table tbody th {\n color: var(--text-primary);\n font-weight: var(--type-weight-label);\n}\n\n.table td {\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n text-align: end;\n}\n\n.tooltip {\n position: absolute;\n z-index: var(--z-tooltip);\n min-width: 9.5rem;\n padding: var(--space-2) var(--space-3);\n border: var(--border-width-thin) solid var(--border-faint);\n border-radius: var(--radius-surface-md);\n background: var(--surface-card);\n box-shadow: var(--shadow-md);\n color: var(--text-primary);\n font-family: var(--font-sans);\n pointer-events: none;\n transform: translate(0.5rem, -50%);\n}\n\n.tooltipFlip {\n transform: translate(calc(-100% - 0.5rem), -50%);\n}\n\n.tooltipTitle {\n margin: 0;\n font-size: var(--type-size-caption);\n font-weight: var(--type-weight-label);\n color: var(--text-primary);\n}\n\n.tooltipRow {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n margin-top: var(--space-1);\n font-size: var(--type-size-caption);\n color: var(--text-secondary);\n}\n\n.tooltipKey {\n width: 0.5rem;\n height: 0.375rem;\n border-radius: var(--radius-pill);\n flex: none;\n}\n\n.tooltipShare {\n flex: 1;\n min-width: 0;\n}\n\n.tooltipValue {\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n font-weight: var(--type-weight-label);\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"ChartFrame.module.js","names":[],"sources":["../../../ui/shared/ChartFrame.module.css"],"sourcesContent":[".frame {\n display: grid;\n gap: var(--space-4);\n margin: 0;\n padding: var(--space-6);\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n border: var(--border-width-thin) solid var(--border-faint);\n border-radius: var(--radius-surface-md);\n background: var(--surface-card);\n box-shadow: var(--shadow-sm);\n color: var(--text-primary);\n}\n\n.flush {\n display: grid;\n gap: var(--space-4);\n margin: 0;\n padding: 0;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n border: 0;\n background: transparent;\n box-shadow: none;\n color: var(--text-primary);\n}\n\n.header {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--space-2);\n min-width: 0;\n}\n\n.heading {\n display: grid;\n gap: var(--space-1);\n min-width: 0;\n}\n\n.title {\n margin: 0;\n font-family: var(--font-sans);\n font-size: var(--type-size-heading-sm);\n font-weight: var(--type-weight-heading);\n line-height: var(--type-line-heading);\n color: var(--text-primary);\n}\n\n.description {\n margin: 0;\n font-family: var(--font-sans);\n font-size: var(--type-size-caption);\n line-height: var(--type-line-body);\n color: var(--text-secondary);\n}\n\n.actions {\n display: flex;\n align-items: center;\n gap: var(--space-1);\n}\n\n.toggle {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n padding: var(--space-1) var(--space-2);\n border: var(--border-width-thin) solid var(--border-faint);\n border-radius: var(--radius-control-sm);\n background: var(--surface-card);\n color: var(--text-secondary);\n cursor: pointer;\n font-family: var(--font-sans);\n font-size: var(--type-size-caption);\n font-weight: var(--type-weight-label);\n transition:\n color var(--motion-interaction-duration) var(--motion-interaction-easing),\n border-color var(--motion-interaction-duration) var(--motion-interaction-easing);\n}\n\n.toggle:hover {\n border-color: var(--border-strong);\n color: var(--text-primary);\n}\n\n.toggle:focus-visible {\n outline: var(--border-focus-width) solid var(--focus-ring);\n outline-offset: var(--space-inset-2xs);\n}\n\n.body {\n min-width: 0;\n overflow: visible;\n}\n\n.loading {\n opacity: 0.6;\n transition: opacity var(--motion-interaction-duration) var(--motion-interaction-easing);\n}\n\n.empty {\n display: grid;\n place-items: center;\n min-height: 15rem;\n margin: 0;\n padding-inline: var(--space-4);\n text-align: center;\n font-family: var(--font-sans);\n font-size: var(--type-size-body-sm);\n color: var(--text-muted);\n}\n\n.footnote {\n margin: 0;\n font-family: var(--font-sans);\n font-size: var(--type-size-caption);\n color: var(--text-muted);\n}\n\n.legend {\n display: flex;\n flex-wrap: wrap;\n gap: var(--space-2) var(--space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.legendInteractive > li {\n display: contents;\n}\n\n.legendVertical {\n display: grid;\n gap: var(--space-2);\n align-content: center;\n}\n\n.legendItem {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n font-family: var(--font-sans);\n font-size: var(--type-size-caption);\n color: var(--text-secondary);\n}\n\n.legendVertical .legendItem {\n display: grid;\n grid-template-columns: auto 1fr auto;\n align-items: center;\n column-gap: var(--space-2);\n width: 100%;\n}\n\n.legendButton {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n color: inherit;\n text-align: inherit;\n cursor: pointer;\n border-radius: var(--radius-control-sm);\n transition: opacity 0.56s cubic-bezier(0.22, 1, 0.36, 1);\n}\n\n.legendButton:focus-visible {\n outline: var(--border-focus-width) solid var(--focus-ring);\n outline-offset: var(--space-inset-2xs);\n}\n\n.legendItemDimmed {\n opacity: 0.45;\n}\n\n.legendSwatch {\n width: 0.625rem;\n height: 0.625rem;\n border-radius: var(--radius-control-sm);\n flex: none;\n}\n\n.legendSwatchPill {\n width: 0.5rem;\n height: 0.375rem;\n border-radius: var(--radius-pill);\n}\n\n.legendSwatchLine {\n width: 0.75rem;\n height: 0.156rem;\n border-radius: var(--radius-pill);\n}\n\n.legendMeta {\n color: var(--text-muted);\n font-variant-numeric: tabular-nums;\n}\n\n.legendPercent {\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n font-weight: var(--type-weight-label);\n text-align: end;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .legendButton {\n transition: none;\n }\n}\n\n.tableScroll {\n overflow-x: auto;\n}\n\n.table {\n width: 100%;\n border-collapse: collapse;\n font-family: var(--font-sans);\n font-size: var(--type-size-body-sm);\n line-height: var(--type-line-body);\n}\n\n.table th,\n.table td {\n padding: var(--space-1) var(--space-2);\n border-bottom: var(--border-width-thin) solid var(--border-faint);\n text-align: start;\n background-color: var(--surface-card);\n}\n\n.table thead th {\n color: var(--text-secondary);\n font-size: var(--type-size-caption);\n font-weight: var(--type-weight-label);\n white-space: nowrap;\n}\n\n.table tbody th {\n color: var(--text-primary);\n font-weight: var(--type-weight-label);\n}\n\n.table td {\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n text-align: end;\n}\n\n.tooltip {\n position: absolute;\n z-index: var(--z-tooltip);\n min-width: 9.5rem;\n padding: var(--space-2) var(--space-3);\n border: var(--border-width-thin) solid var(--border-faint);\n border-radius: var(--radius-surface-md);\n background: var(--surface-card);\n box-shadow: var(--shadow-md);\n color: var(--text-primary);\n font-family: var(--font-sans);\n pointer-events: none;\n transform: translate(0.5rem, -50%);\n}\n\n.tooltipFlip {\n transform: translate(calc(-100% - 0.5rem), -50%);\n}\n\n.tooltipTitle {\n margin: 0;\n font-size: var(--type-size-caption);\n font-weight: var(--type-weight-label);\n color: var(--text-primary);\n}\n\n.tooltipRow {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n margin-top: var(--space-1);\n font-size: var(--type-size-caption);\n color: var(--text-secondary);\n}\n\n.tooltipKey {\n width: 0.5rem;\n height: 0.375rem;\n border-radius: var(--radius-pill);\n flex: none;\n}\n\n.tooltipShare {\n flex: 1;\n min-width: 0;\n}\n\n.tooltipValue {\n color: var(--text-primary);\n font-variant-numeric: tabular-nums;\n font-weight: var(--type-weight-label);\n}\n"],"mappings":""}
|