@aggc/ui 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/package.json +3 -2
- package/src/components/PageSurface.styles.ts +3 -0
- package/src/components/PageSurface.vue +9 -0
- package/src/components/ResultPanel.styles.ts +108 -0
- package/src/components/ResultPanel.test.ts +22 -0
- package/src/components/ResultPanel.vue +70 -0
- package/src/components/SectionCard.styles.ts +65 -0
- package/src/components/SectionCard.test.ts +22 -0
- package/src/components/SectionCard.vue +51 -0
- package/src/components/StatusBadge.styles.ts +49 -0
- package/src/components/StatusBadge.test.ts +18 -0
- package/src/components/StatusBadge.vue +18 -0
- package/src/components/UiButton.styles.ts +29 -0
- package/src/components/UiButton.test.ts +21 -0
- package/src/components/UiButton.vue +46 -0
- package/src/components/UiCheckbox.styles.ts +118 -0
- package/src/components/UiCheckbox.test.ts +18 -0
- package/src/components/UiCheckbox.vue +72 -0
- package/src/components/UiField.styles.ts +35 -0
- package/src/components/UiField.test.ts +22 -0
- package/src/components/UiField.vue +36 -0
- package/src/components/UiLoadingState.styles.ts +36 -0
- package/src/components/UiLoadingState.vue +34 -0
- package/src/components/UiSegmentedControl.styles.ts +49 -0
- package/src/components/UiSegmentedControl.vue +30 -0
- package/src/components/UiSelect.styles.ts +214 -0
- package/src/components/UiSelect.test.ts +49 -0
- package/src/components/UiSelect.vue +256 -0
- package/src/components/UiSkeleton.styles.ts +93 -0
- package/src/components/UiSkeleton.vue +48 -0
- package/src/components/index.ts +11 -0
- package/src/components.ts +1 -0
- package/src/css/base.css +62 -0
- package/src/css/fonts.css +6 -0
- package/src/css/index.css +2 -0
- package/src/css/storybook.css +15 -0
- package/src/env.d.ts +1 -0
- package/src/index.ts +3 -0
- package/src/stories/feedback/ResultPanel.stories.ts +76 -0
- package/src/stories/feedback/StatusBadge.stories.ts +50 -0
- package/src/stories/feedback/UiLoadingState.stories.ts +52 -0
- package/src/stories/feedback/UiSkeleton.stories.ts +85 -0
- package/src/stories/forms/UiCheckbox.stories.ts +104 -0
- package/src/stories/forms/UiField.stories.ts +87 -0
- package/src/stories/forms/UiSelect.stories.ts +134 -0
- package/src/stories/layout/PageSurface.stories.ts +53 -0
- package/src/stories/layout/SectionCard.stories.ts +85 -0
- package/src/stories/primitives/UiButton.stories.ts +145 -0
- package/src/stories/primitives/UiSegmentedControl.stories.ts +67 -0
- package/src/stories/support/StoryThemeFrame.vue +101 -0
- package/src/stories/support/sources.ts +374 -0
- package/src/stories/support/storyStyles.ts +150 -0
- package/src/styles/README.md +23 -0
- package/src/styles/index.ts +20 -0
- package/src/styles/layouts/cluster.ts +27 -0
- package/src/styles/layouts/page.ts +22 -0
- package/src/styles/layouts/split.ts +26 -0
- package/src/styles/layouts/stack.ts +21 -0
- package/src/styles/patterns/actionToolbar.ts +8 -0
- package/src/styles/patterns/emptyState.ts +23 -0
- package/src/styles/patterns/infoPanel.ts +22 -0
- package/src/styles/patterns/metricGrid.ts +19 -0
- package/src/styles/patterns/pageHeader.ts +19 -0
- package/src/styles/patterns/resultRegion.ts +7 -0
- package/src/styles/patterns/selectableListDetail.ts +21 -0
- package/src/styles/primitives/feedback.ts +23 -0
- package/src/styles/primitives/fields.ts +76 -0
- package/src/styles/primitives/surfaces.ts +52 -0
- package/src/styles/primitives/typography.ts +42 -0
- package/src/styles/recipes/badge.recipe.ts +54 -0
- package/src/styles/recipes/button.recipe.ts +115 -0
- package/src/styles/recipes/card.recipe.ts +64 -0
- package/src/styles/recipes/dropdown.recipe.ts +40 -0
- package/src/styles/recipes/input.recipe.ts +59 -0
- package/src/styles.ts +1 -0
- package/src/test/setup.ts +1 -0
- package/src/tokens/colors.ts +16 -0
- package/src/tokens/core-colors.ts +53 -0
- package/src/tokens/desktop-colors.ts +37 -0
- package/src/tokens/index.ts +8 -0
- package/src/tokens/motion.ts +6 -0
- package/src/tokens/radius.ts +3 -0
- package/src/tokens/spacing.ts +4 -0
- package/src/tokens/typography.ts +6 -0
- package/src/tokens-core.ts +5 -0
- package/src/tokens-desktop.ts +1 -0
- package/src/tokens.ts +1 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { css, cva } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const storyStackClass = css({
|
|
4
|
+
display: "grid",
|
|
5
|
+
gap: "5",
|
|
6
|
+
alignContent: "start",
|
|
7
|
+
minWidth: "0",
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export const storyGridClass = css({
|
|
11
|
+
display: "grid",
|
|
12
|
+
gap: "4",
|
|
13
|
+
gridTemplateColumns: {
|
|
14
|
+
base: "1fr",
|
|
15
|
+
md: "repeat(2, minmax(0, 1fr))",
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export const storyRowClass = css({
|
|
20
|
+
display: "flex",
|
|
21
|
+
flexWrap: "wrap",
|
|
22
|
+
alignItems: "center",
|
|
23
|
+
gap: "3",
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export const storySurfaceClass = css({
|
|
27
|
+
display: "grid",
|
|
28
|
+
gap: "4",
|
|
29
|
+
alignContent: "start",
|
|
30
|
+
minWidth: "0",
|
|
31
|
+
maxWidth: "100%",
|
|
32
|
+
padding: { base: "4", md: "5" },
|
|
33
|
+
borderWidth: "1px",
|
|
34
|
+
borderColor: "border.subtle",
|
|
35
|
+
borderRadius: "2xl",
|
|
36
|
+
bg: "bg.card",
|
|
37
|
+
boxShadow: "0 30px 90px -72px rgba(15,23,42,0.7)",
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
export const storyPreviewRootClass = css({
|
|
41
|
+
display: "grid",
|
|
42
|
+
gap: "4",
|
|
43
|
+
alignContent: "start",
|
|
44
|
+
minWidth: "0",
|
|
45
|
+
width: "100%",
|
|
46
|
+
minHeight: "100%",
|
|
47
|
+
padding: { base: "4", md: "5" },
|
|
48
|
+
borderRadius: "3xl",
|
|
49
|
+
borderWidth: "1px",
|
|
50
|
+
borderColor: "border.subtle",
|
|
51
|
+
bg: "bg.canvas",
|
|
52
|
+
boxShadow: "0 30px 90px -72px rgba(15,23,42,0.7)",
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
export const storyPreviewHeaderClass = css({
|
|
56
|
+
display: "flex",
|
|
57
|
+
alignItems: "center",
|
|
58
|
+
justifyContent: "space-between",
|
|
59
|
+
gap: "3",
|
|
60
|
+
flexWrap: "wrap",
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
export const storyPreviewActionsClass = css({
|
|
64
|
+
display: "inline-flex",
|
|
65
|
+
alignItems: "center",
|
|
66
|
+
gap: "2",
|
|
67
|
+
fontSize: "xs",
|
|
68
|
+
fontWeight: "700",
|
|
69
|
+
letterSpacing: "0.05em",
|
|
70
|
+
textTransform: "uppercase",
|
|
71
|
+
color: "text.muted",
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export const storyPreviewThemeGroupClass = css({
|
|
75
|
+
display: "inline-flex",
|
|
76
|
+
alignItems: "center",
|
|
77
|
+
gap: "1",
|
|
78
|
+
padding: "1",
|
|
79
|
+
borderRadius: "xl",
|
|
80
|
+
borderWidth: "1px",
|
|
81
|
+
borderColor: "border.subtle",
|
|
82
|
+
bg: "bg.soft",
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export const storyPreviewThemeButtonClass = cva({
|
|
86
|
+
base: {
|
|
87
|
+
appearance: "none",
|
|
88
|
+
border: "0",
|
|
89
|
+
display: "inline-flex",
|
|
90
|
+
alignItems: "center",
|
|
91
|
+
justifyContent: "center",
|
|
92
|
+
minW: "4.75rem",
|
|
93
|
+
px: "3",
|
|
94
|
+
py: "2",
|
|
95
|
+
borderRadius: "lg",
|
|
96
|
+
fontSize: "sm",
|
|
97
|
+
fontWeight: "700",
|
|
98
|
+
color: "text.secondary",
|
|
99
|
+
cursor: "pointer",
|
|
100
|
+
transitionProperty: "background-color, color, box-shadow",
|
|
101
|
+
transitionDuration: "fast",
|
|
102
|
+
_hover: {
|
|
103
|
+
color: "text.primary",
|
|
104
|
+
bg: "bg.hover",
|
|
105
|
+
},
|
|
106
|
+
_focusVisible: {
|
|
107
|
+
outline: "2px solid",
|
|
108
|
+
outlineColor: "border.accent",
|
|
109
|
+
outlineOffset: "2px",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
variants: {
|
|
113
|
+
active: {
|
|
114
|
+
true: {
|
|
115
|
+
bg: "bg.cardStrong",
|
|
116
|
+
color: "text.primary",
|
|
117
|
+
boxShadow: "0 10px 30px -20px rgba(15,23,42,0.72)",
|
|
118
|
+
},
|
|
119
|
+
false: {},
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
export const storySurfaceCompactClass = css({
|
|
125
|
+
maxWidth: "28rem",
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
export const storySurfaceWideClass = css({
|
|
129
|
+
maxWidth: "48rem",
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
export const storySectionLabelClass = css({
|
|
133
|
+
fontSize: "xs",
|
|
134
|
+
fontWeight: "800",
|
|
135
|
+
letterSpacing: "0.08em",
|
|
136
|
+
textTransform: "uppercase",
|
|
137
|
+
color: "text.muted",
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
export const storyCaptionClass = css({
|
|
141
|
+
color: "text.secondary",
|
|
142
|
+
lineHeight: "1.7",
|
|
143
|
+
maxWidth: "42rem",
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
export const storyScrollFrameClass = css({
|
|
147
|
+
maxHeight: "220px",
|
|
148
|
+
overflowY: "auto",
|
|
149
|
+
paddingRight: "1",
|
|
150
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Shared UI Style Architecture
|
|
2
|
+
|
|
3
|
+
This directory is the single entry point for reusable frontend styling primitives.
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
|
|
7
|
+
- Keep visual definitions out of `.vue` files.
|
|
8
|
+
- Do not add new `css(...)` calls inside `.vue` files.
|
|
9
|
+
- Do not add new `:style=` bindings unless the style is truly runtime-driven.
|
|
10
|
+
- Prefer importing from the local `src/styles` barrel or the published `@aggc/ui/styles` entrypoint when the export is stable.
|
|
11
|
+
|
|
12
|
+
## Directory layout
|
|
13
|
+
|
|
14
|
+
- `primitives/`: low-level reusable classes such as surfaces, typography, fields, and feedback states.
|
|
15
|
+
- `recipes/`: variant-driven Panda recipes for reusable component families.
|
|
16
|
+
- `layouts/`: generic page, stack, cluster, and split layouts.
|
|
17
|
+
- `patterns/`: repeated UI compositions that are broader than a single primitive.
|
|
18
|
+
|
|
19
|
+
## Migration guidance
|
|
20
|
+
|
|
21
|
+
- Existing shared styles can keep using `fieldStyles.ts` temporarily, but new work should import from this directory.
|
|
22
|
+
- When a component still needs local styling, create `ComponentName.styles.ts` next to it and compose from these shared exports.
|
|
23
|
+
- Shrink the allowlist in the architectural validation script as components are migrated away from inline style definitions.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from "./primitives/surfaces";
|
|
2
|
+
export * from "./primitives/typography";
|
|
3
|
+
export * from "./primitives/fields";
|
|
4
|
+
export * from "./primitives/feedback";
|
|
5
|
+
export * from "./recipes/card.recipe";
|
|
6
|
+
export * from "./recipes/button.recipe";
|
|
7
|
+
export * from "./recipes/badge.recipe";
|
|
8
|
+
export * from "./recipes/input.recipe";
|
|
9
|
+
export * from "./recipes/dropdown.recipe";
|
|
10
|
+
export * from "./layouts/page";
|
|
11
|
+
export * from "./layouts/stack";
|
|
12
|
+
export * from "./layouts/cluster";
|
|
13
|
+
export * from "./layouts/split";
|
|
14
|
+
export * from "./patterns/pageHeader";
|
|
15
|
+
export * from "./patterns/metricGrid";
|
|
16
|
+
export * from "./patterns/actionToolbar";
|
|
17
|
+
export * from "./patterns/resultRegion";
|
|
18
|
+
export * from "./patterns/infoPanel";
|
|
19
|
+
export * from "./patterns/emptyState";
|
|
20
|
+
export * from "./patterns/selectableListDetail";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cva } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const clusterLayout = cva({
|
|
4
|
+
base: {
|
|
5
|
+
display: "flex",
|
|
6
|
+
flexWrap: "wrap",
|
|
7
|
+
alignItems: "center",
|
|
8
|
+
minWidth: "0",
|
|
9
|
+
},
|
|
10
|
+
variants: {
|
|
11
|
+
gap: {
|
|
12
|
+
xs: { gap: "1" },
|
|
13
|
+
sm: { gap: "2" },
|
|
14
|
+
md: { gap: "3" },
|
|
15
|
+
lg: { gap: "4" },
|
|
16
|
+
},
|
|
17
|
+
justify: {
|
|
18
|
+
start: { justifyContent: "flex-start" },
|
|
19
|
+
between: { justifyContent: "space-between" },
|
|
20
|
+
end: { justifyContent: "flex-end" },
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
gap: "sm",
|
|
25
|
+
justify: "start",
|
|
26
|
+
},
|
|
27
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { css } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const pageRootClass = css({
|
|
4
|
+
width: "100%",
|
|
5
|
+
display: "grid",
|
|
6
|
+
gap: "5",
|
|
7
|
+
alignContent: "start",
|
|
8
|
+
height: "100%",
|
|
9
|
+
minHeight: "0",
|
|
10
|
+
overflow: "hidden",
|
|
11
|
+
minWidth: "0",
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export const pageScrollRegionClass = css({
|
|
15
|
+
display: "grid",
|
|
16
|
+
gap: "4",
|
|
17
|
+
height: "100%",
|
|
18
|
+
minHeight: "0",
|
|
19
|
+
overflowY: "auto",
|
|
20
|
+
paddingRight: "1",
|
|
21
|
+
alignContent: "start",
|
|
22
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { cva } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const splitLayout = cva({
|
|
4
|
+
base: {
|
|
5
|
+
display: "grid",
|
|
6
|
+
gap: "4",
|
|
7
|
+
alignItems: "start",
|
|
8
|
+
minWidth: "0",
|
|
9
|
+
},
|
|
10
|
+
variants: {
|
|
11
|
+
ratio: {
|
|
12
|
+
equal: {
|
|
13
|
+
gridTemplateColumns: { base: "1fr", xl: "repeat(2, minmax(0, 1fr))" },
|
|
14
|
+
},
|
|
15
|
+
sidebar: {
|
|
16
|
+
gridTemplateColumns: { base: "1fr", xl: "minmax(18rem, 0.9fr) minmax(0, 1.4fr)" },
|
|
17
|
+
},
|
|
18
|
+
detail: {
|
|
19
|
+
gridTemplateColumns: { base: "1fr", xl: "minmax(18rem, 0.85fr) minmax(0, 1.45fr)" },
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
ratio: "equal",
|
|
25
|
+
},
|
|
26
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { cva } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const stackLayout = cva({
|
|
4
|
+
base: {
|
|
5
|
+
display: "grid",
|
|
6
|
+
alignContent: "start",
|
|
7
|
+
minWidth: "0",
|
|
8
|
+
},
|
|
9
|
+
variants: {
|
|
10
|
+
gap: {
|
|
11
|
+
xs: { gap: "1" },
|
|
12
|
+
sm: { gap: "2" },
|
|
13
|
+
md: { gap: "3" },
|
|
14
|
+
lg: { gap: "4" },
|
|
15
|
+
xl: { gap: "5" },
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
gap: "md",
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { css, cx } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
import { insetPanelClass } from "../primitives/surfaces";
|
|
4
|
+
import { helperTextClass } from "../primitives/typography";
|
|
5
|
+
|
|
6
|
+
export const emptyStatePanelClass = cx(
|
|
7
|
+
insetPanelClass,
|
|
8
|
+
helperTextClass,
|
|
9
|
+
css({
|
|
10
|
+
display: "grid",
|
|
11
|
+
gap: "2",
|
|
12
|
+
padding: "4",
|
|
13
|
+
lineHeight: "1.7",
|
|
14
|
+
})
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export const centeredEmptyStatePanelClass = cx(
|
|
18
|
+
emptyStatePanelClass,
|
|
19
|
+
css({
|
|
20
|
+
alignContent: "center",
|
|
21
|
+
minHeight: "220px",
|
|
22
|
+
})
|
|
23
|
+
);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { css, cx } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
import { insetPanelClass } from "../primitives/surfaces";
|
|
4
|
+
|
|
5
|
+
export const infoPanelClass = cx(
|
|
6
|
+
insetPanelClass,
|
|
7
|
+
css({
|
|
8
|
+
padding: "4",
|
|
9
|
+
display: "grid",
|
|
10
|
+
gap: "3",
|
|
11
|
+
})
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
export const resultSkeletonPanelClass = cx(
|
|
15
|
+
insetPanelClass,
|
|
16
|
+
css({
|
|
17
|
+
minHeight: "220px",
|
|
18
|
+
padding: "4",
|
|
19
|
+
display: "grid",
|
|
20
|
+
gap: "3",
|
|
21
|
+
})
|
|
22
|
+
);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { cva } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const metricGridPattern = cva({
|
|
4
|
+
base: {
|
|
5
|
+
display: "grid",
|
|
6
|
+
gap: "4",
|
|
7
|
+
minWidth: "0",
|
|
8
|
+
},
|
|
9
|
+
variants: {
|
|
10
|
+
columns: {
|
|
11
|
+
two: { gridTemplateColumns: { base: "1fr", md: "repeat(2, minmax(0, 1fr))" } },
|
|
12
|
+
three: { gridTemplateColumns: { base: "1fr", lg: "repeat(3, minmax(0, 1fr))" } },
|
|
13
|
+
four: { gridTemplateColumns: { base: "1fr", lg: "repeat(4, minmax(0, 1fr))" } },
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
columns: "two",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { css } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const pageHeaderRootClass = css({
|
|
4
|
+
display: "flex",
|
|
5
|
+
alignItems: "flex-start",
|
|
6
|
+
justifyContent: "space-between",
|
|
7
|
+
gap: "4",
|
|
8
|
+
flexDirection: { base: "column", md: "row" },
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export const pageHeaderContentClass = css({
|
|
12
|
+
display: "grid",
|
|
13
|
+
gap: "2",
|
|
14
|
+
minWidth: "0",
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export const pageHeaderActionsClass = css({
|
|
18
|
+
flexShrink: "0",
|
|
19
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { css } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const selectableListDetailRootClass = css({
|
|
4
|
+
display: "grid",
|
|
5
|
+
gap: "4",
|
|
6
|
+
gridTemplateColumns: { base: "1fr", xl: "minmax(18rem, 0.9fr) minmax(0, 1.4fr)" },
|
|
7
|
+
alignItems: "start",
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export const selectableListClass = css({
|
|
11
|
+
display: "grid",
|
|
12
|
+
gap: "2",
|
|
13
|
+
alignContent: "start",
|
|
14
|
+
minWidth: "0",
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export const selectableDetailClass = css({
|
|
18
|
+
display: "grid",
|
|
19
|
+
gap: "4",
|
|
20
|
+
minWidth: "0",
|
|
21
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { css } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const loadingRegionClass = css({
|
|
4
|
+
position: "relative",
|
|
5
|
+
minWidth: "0",
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export const errorTextClass = css({
|
|
9
|
+
color: "text.error",
|
|
10
|
+
fontSize: "sm",
|
|
11
|
+
fontWeight: "600",
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export const mutedTextClass = css({
|
|
15
|
+
color: "text.muted",
|
|
16
|
+
fontSize: "sm",
|
|
17
|
+
lineHeight: "1.6",
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export const focusRingClass = css({
|
|
21
|
+
outline: "2px solid var(--colors-text-accent)",
|
|
22
|
+
outlineOffset: "2px",
|
|
23
|
+
});
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { css } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const fieldControlClass = css({
|
|
4
|
+
width: "100%",
|
|
5
|
+
minHeight: "48px",
|
|
6
|
+
borderRadius: "xl",
|
|
7
|
+
borderWidth: "1px",
|
|
8
|
+
borderColor: "border.default",
|
|
9
|
+
bg: "bg.input",
|
|
10
|
+
color: "text.primary",
|
|
11
|
+
fontSize: "sm",
|
|
12
|
+
lineHeight: "1.5",
|
|
13
|
+
px: "4",
|
|
14
|
+
py: "3",
|
|
15
|
+
backdropFilter: "blur(22px) saturate(145%)",
|
|
16
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.24), 0 14px 28px -28px rgba(15,23,42,0.42)",
|
|
17
|
+
transition: "border-color 160ms ease, background 160ms ease, transform 160ms ease",
|
|
18
|
+
_hover: {
|
|
19
|
+
borderColor: "border.strong",
|
|
20
|
+
},
|
|
21
|
+
_placeholder: {
|
|
22
|
+
color: "text.muted",
|
|
23
|
+
},
|
|
24
|
+
_dark: {
|
|
25
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.03)",
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export const fieldControlSmClass = css({
|
|
30
|
+
width: "100%",
|
|
31
|
+
minHeight: "40px",
|
|
32
|
+
borderRadius: "lg",
|
|
33
|
+
borderWidth: "1px",
|
|
34
|
+
borderColor: "border.default",
|
|
35
|
+
bg: "bg.input",
|
|
36
|
+
color: "text.primary",
|
|
37
|
+
fontSize: "sm",
|
|
38
|
+
lineHeight: "1.45",
|
|
39
|
+
px: "3",
|
|
40
|
+
py: "2.5",
|
|
41
|
+
backdropFilter: "blur(20px) saturate(145%)",
|
|
42
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.2)",
|
|
43
|
+
transition: "border-color 160ms ease, background 160ms ease",
|
|
44
|
+
_hover: {
|
|
45
|
+
borderColor: "border.strong",
|
|
46
|
+
},
|
|
47
|
+
_placeholder: {
|
|
48
|
+
color: "text.muted",
|
|
49
|
+
},
|
|
50
|
+
_dark: {
|
|
51
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.03)",
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
export const fieldTextareaClass = css({
|
|
56
|
+
width: "100%",
|
|
57
|
+
minHeight: "420px",
|
|
58
|
+
borderRadius: "2xl",
|
|
59
|
+
borderWidth: "1px",
|
|
60
|
+
borderColor: "border.default",
|
|
61
|
+
bg: "bg.input",
|
|
62
|
+
color: "text.primary",
|
|
63
|
+
fontFamily: "mono",
|
|
64
|
+
fontSize: "sm",
|
|
65
|
+
lineHeight: "1.6",
|
|
66
|
+
px: "4",
|
|
67
|
+
py: "4",
|
|
68
|
+
backdropFilter: "blur(24px) saturate(145%)",
|
|
69
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.24), 0 18px 36px -32px rgba(15,23,42,0.42)",
|
|
70
|
+
_hover: {
|
|
71
|
+
borderColor: "border.strong",
|
|
72
|
+
},
|
|
73
|
+
_dark: {
|
|
74
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.03)",
|
|
75
|
+
},
|
|
76
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { css } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const surfacePanelClass = css({
|
|
4
|
+
position: "relative",
|
|
5
|
+
overflow: "hidden",
|
|
6
|
+
borderRadius: "3xl",
|
|
7
|
+
borderWidth: "1px",
|
|
8
|
+
borderColor: "border.subtle",
|
|
9
|
+
bg: "bg.card",
|
|
10
|
+
backdropFilter: "blur(28px) saturate(155%)",
|
|
11
|
+
boxShadow: "0 25px 30px -35px rgba(15,23,42,0.42)",
|
|
12
|
+
_before: {
|
|
13
|
+
content: "\"\"",
|
|
14
|
+
position: "absolute",
|
|
15
|
+
inset: "0",
|
|
16
|
+
pointerEvents: "none",
|
|
17
|
+
background:
|
|
18
|
+
"linear-gradient(180deg, rgba(255,255,255,0.28) 0%, rgba(255,255,255,0.04) 18%, rgba(255,255,255,0) 100%)",
|
|
19
|
+
},
|
|
20
|
+
_dark: {
|
|
21
|
+
backdropFilter: "blur(12px) saturate(110%)",
|
|
22
|
+
boxShadow: "0 16px 34px -28px rgba(0,0,0,0.92)",
|
|
23
|
+
_before: {
|
|
24
|
+
background: "none",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export const insetPanelClass = css({
|
|
30
|
+
borderRadius: "2xl",
|
|
31
|
+
borderWidth: "1px",
|
|
32
|
+
borderColor: "border.soft",
|
|
33
|
+
bg: "bg.cardAlt",
|
|
34
|
+
backdropFilter: "blur(24px) saturate(145%)",
|
|
35
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.22)",
|
|
36
|
+
_dark: {
|
|
37
|
+
backdropFilter: "blur(10px) saturate(105%)",
|
|
38
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.03)",
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
export const elevatedPanelClass = css({
|
|
43
|
+
borderRadius: "2xl",
|
|
44
|
+
borderWidth: "1px",
|
|
45
|
+
borderColor: "border.default",
|
|
46
|
+
bg: "bg.cardStrong",
|
|
47
|
+
backdropFilter: "blur(24px) saturate(145%)",
|
|
48
|
+
boxShadow: "0 16px 32px -28px rgba(15,23,42,0.42)",
|
|
49
|
+
_dark: {
|
|
50
|
+
boxShadow: "0 16px 34px -28px rgba(0,0,0,0.92)",
|
|
51
|
+
},
|
|
52
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { css } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const eyebrowClass = css({
|
|
4
|
+
fontSize: "xs",
|
|
5
|
+
textTransform: "uppercase",
|
|
6
|
+
letterSpacing: "0.12em",
|
|
7
|
+
color: "text.muted",
|
|
8
|
+
fontWeight: "700",
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export const sectionTitleClass = css({
|
|
12
|
+
fontFamily: "heading",
|
|
13
|
+
fontSize: { base: "2xl", md: "3xl" },
|
|
14
|
+
lineHeight: "1",
|
|
15
|
+
color: "text.primary",
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const sectionDescriptionClass = css({
|
|
19
|
+
color: "text.secondary",
|
|
20
|
+
lineHeight: "1.65",
|
|
21
|
+
fontSize: "sm",
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const helperTextClass = css({
|
|
25
|
+
color: "text.secondary",
|
|
26
|
+
fontSize: "sm",
|
|
27
|
+
lineHeight: "1.6",
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export const metricValueClass = css({
|
|
31
|
+
color: "text.primary",
|
|
32
|
+
fontWeight: "700",
|
|
33
|
+
lineHeight: "1.1",
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export const codeBlockClass = css({
|
|
37
|
+
whiteSpace: "pre-wrap",
|
|
38
|
+
fontFamily: "mono",
|
|
39
|
+
fontSize: "sm",
|
|
40
|
+
lineHeight: "1.65",
|
|
41
|
+
color: "text.secondary",
|
|
42
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { cva } from "@styled/css";
|
|
2
|
+
|
|
3
|
+
export const badgeRecipe = cva({
|
|
4
|
+
base: {
|
|
5
|
+
display: "inline-flex",
|
|
6
|
+
alignItems: "center",
|
|
7
|
+
gap: "1.5",
|
|
8
|
+
borderRadius: "full",
|
|
9
|
+
borderWidth: "1px",
|
|
10
|
+
px: "3",
|
|
11
|
+
py: "2",
|
|
12
|
+
fontSize: "sm",
|
|
13
|
+
fontWeight: "600",
|
|
14
|
+
lineHeight: "1",
|
|
15
|
+
whiteSpace: "nowrap",
|
|
16
|
+
backdropFilter: "blur(16px) saturate(140%)",
|
|
17
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.16)",
|
|
18
|
+
_dark: {
|
|
19
|
+
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.04)",
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
variants: {
|
|
23
|
+
tone: {
|
|
24
|
+
neutral: {
|
|
25
|
+
borderColor: "badge.neutralBorder",
|
|
26
|
+
bg: "badge.neutralBg",
|
|
27
|
+
color: "badge.neutralText",
|
|
28
|
+
},
|
|
29
|
+
info: {
|
|
30
|
+
borderColor: "badge.infoBorder",
|
|
31
|
+
bg: "badge.infoBg",
|
|
32
|
+
color: "badge.infoText",
|
|
33
|
+
},
|
|
34
|
+
success: {
|
|
35
|
+
borderColor: "badge.successBorder",
|
|
36
|
+
bg: "badge.successBg",
|
|
37
|
+
color: "badge.successText",
|
|
38
|
+
},
|
|
39
|
+
warning: {
|
|
40
|
+
borderColor: "badge.warningBorder",
|
|
41
|
+
bg: "badge.warningBg",
|
|
42
|
+
color: "badge.warningText",
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
size: {
|
|
46
|
+
sm: { px: "2.5", py: "1.5", fontSize: "xs" },
|
|
47
|
+
md: {},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
defaultVariants: {
|
|
51
|
+
tone: "neutral",
|
|
52
|
+
size: "md",
|
|
53
|
+
},
|
|
54
|
+
});
|