@hirobius/design-system 0.11.0 → 0.13.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 +50 -9
- package/dist/brand.js +36 -0
- package/dist/contexts.js +63 -59
- package/dist/hirobius-ui.js +22636 -3818
- package/dist/manifest.js +9 -9
- package/dist/scroll.js +42 -0
- package/dist/static.css +388 -0
- package/dist/styles.css +1 -1
- package/dist/tokens.css +1 -1
- package/dist/tokens.js +14 -1
- package/dist/types/src/app/components/activity-feed.d.ts +24 -2
- package/dist/types/src/app/components/alert-dialog.d.ts +56 -0
- package/dist/types/src/app/components/app-shell.d.ts +38 -0
- package/dist/types/src/app/components/aspect-ratio.d.ts +25 -0
- package/dist/types/src/app/components/avatar-group.d.ts +22 -0
- package/dist/types/src/app/components/bleed.d.ts +39 -0
- package/dist/types/src/app/components/blockquote.d.ts +20 -0
- package/dist/types/src/app/components/box-sx.d.ts +69 -0
- package/dist/types/src/app/components/box.d.ts +42 -0
- package/dist/types/src/app/components/breadcrumb.d.ts +5 -0
- package/dist/types/src/app/components/button-group.d.ts +18 -0
- package/dist/types/src/app/components/calendar.d.ts +20 -0
- package/dist/types/src/app/components/card.d.ts +29 -13
- package/dist/types/src/app/components/carousel.d.ts +24 -0
- package/dist/types/src/app/components/center.d.ts +36 -0
- package/dist/types/src/app/components/circular-progress.d.ts +28 -0
- package/dist/types/src/app/components/cluster.d.ts +39 -0
- package/dist/types/src/app/components/code-block.d.ts +19 -1
- package/dist/types/src/app/components/command-palette.d.ts +44 -0
- package/dist/types/src/app/components/container.d.ts +10 -0
- package/dist/types/src/app/components/context-menu.d.ts +55 -0
- package/dist/types/src/app/components/cover.d.ts +43 -0
- package/dist/types/src/app/components/date-input.d.ts +31 -0
- package/dist/types/src/app/components/date-range-input.d.ts +34 -0
- package/dist/types/src/app/components/date-time-input.d.ts +30 -0
- package/dist/types/src/app/components/disclosure.d.ts +5 -1
- package/dist/types/src/app/components/divider.d.ts +14 -10
- package/dist/types/src/app/components/doc-link-card.d.ts +5 -1
- package/dist/types/src/app/components/field.d.ts +9 -11
- package/dist/types/src/app/components/file-input.d.ts +28 -0
- package/dist/types/src/app/components/frame.d.ts +38 -0
- package/dist/types/src/app/components/heading-stack.d.ts +15 -5
- package/dist/types/src/app/components/hover-card.d.ts +31 -0
- package/dist/types/src/app/components/image-lightbox.d.ts +13 -0
- package/dist/types/src/app/components/inline-code.d.ts +14 -3
- package/dist/types/src/app/components/input-group.d.ts +23 -0
- package/dist/types/src/app/components/kbd.d.ts +18 -0
- package/dist/types/src/app/components/metadata-list.d.ts +43 -0
- package/dist/types/src/app/components/multi-selector.d.ts +40 -0
- package/dist/types/src/app/components/nav-group.d.ts +7 -2
- package/dist/types/src/app/components/nav-item.d.ts +12 -2
- package/dist/types/src/app/components/overflow-list.d.ts +19 -0
- package/dist/types/src/app/components/pin.d.ts +30 -0
- package/dist/types/src/app/components/reveal.d.ts +31 -0
- package/dist/types/src/app/components/segmented-control.d.ts +37 -3
- package/dist/types/src/app/components/selectable-card.d.ts +29 -0
- package/dist/types/src/app/components/side-nav.d.ts +21 -0
- package/dist/types/src/app/components/sidebar.d.ts +45 -0
- package/dist/types/src/app/components/stat.d.ts +8 -10
- package/dist/types/src/app/components/status-dot.d.ts +25 -0
- package/dist/types/src/app/components/status-list-item.d.ts +10 -11
- package/dist/types/src/app/components/stepper.d.ts +31 -0
- package/dist/types/src/app/components/switcher.d.ts +41 -0
- package/dist/types/src/app/components/table.d.ts +12 -1
- package/dist/types/src/app/components/tag.d.ts +19 -18
- package/dist/types/src/app/components/text.d.ts +8 -2
- package/dist/types/src/app/components/time-input.d.ts +24 -0
- package/dist/types/src/app/components/timestamp.d.ts +24 -0
- package/dist/types/src/app/components/toast.d.ts +8 -2
- package/dist/types/src/app/components/toggle-button.d.ts +32 -0
- package/dist/types/src/app/components/token.d.ts +26 -1
- package/dist/types/src/app/components/tokenizer.d.ts +24 -0
- package/dist/types/src/app/components/toolbar.d.ts +36 -0
- package/dist/types/src/app/components/top-nav.d.ts +21 -0
- package/dist/types/src/app/components/tree-list.d.ts +28 -0
- package/dist/types/src/app/components/visually-hidden.d.ts +17 -0
- package/dist/types/src/app/context/TenantContext.d.ts +1 -1
- package/dist/types/src/app/data/nav-model.d.ts +39 -0
- package/dist/types/src/app/design-system/generated-token-refs.d.ts +13 -0
- package/dist/types/src/app/design-system/generated-token-values.d.ts +14 -1
- package/dist/types/src/app/{pages/hds → layouts}/HdsSystemDocLayout.d.ts +1 -1
- package/dist/types/src/app/lib/hds-search.d.ts +45 -0
- package/dist/types/src/brand/index.d.ts +9 -0
- package/dist/types/src/brand/overlay.d.ts +71 -0
- package/dist/types/src/index.d.ts +92 -2
- package/dist/types/src/scroll/index.d.ts +16 -0
- package/dist/types/src/scroll/smooth-scroll.d.ts +48 -0
- package/dist/types/src/scroll/use-scroll-progress.d.ts +34 -0
- package/dist/variables.css +16 -5
- package/hirobius.tokens.json +57 -10
- package/package.json +37 -67
- package/public/hds-manifest.json +6167 -4929
- package/dist/types/src/app/components/info-page.d.ts +0 -10
package/dist/scroll.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as o, Fragment as d } from "react/jsx-runtime";
|
|
2
|
+
import * as c from "react";
|
|
3
|
+
import { ReactLenis as i } from "lenis/react";
|
|
4
|
+
import { useLenis as R } from "lenis/react";
|
|
5
|
+
import { useScroll as a } from "motion/react";
|
|
6
|
+
const f = {
|
|
7
|
+
duration: 1.2,
|
|
8
|
+
easing: (e) => Math.min(1, 1.001 - Math.pow(2, -10 * e)),
|
|
9
|
+
smoothWheel: !0
|
|
10
|
+
}, n = "(prefers-reduced-motion: reduce)";
|
|
11
|
+
function u() {
|
|
12
|
+
return c.useSyncExternalStore(
|
|
13
|
+
(e) => {
|
|
14
|
+
if (typeof window > "u" || !window.matchMedia) return () => {
|
|
15
|
+
};
|
|
16
|
+
const r = window.matchMedia(n);
|
|
17
|
+
return r.addEventListener("change", e), () => r.removeEventListener("change", e);
|
|
18
|
+
},
|
|
19
|
+
() => typeof window < "u" && window.matchMedia ? window.matchMedia(n).matches : !1,
|
|
20
|
+
() => !1
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
function p({
|
|
24
|
+
children: e,
|
|
25
|
+
options: r,
|
|
26
|
+
root: t = !0,
|
|
27
|
+
ignoreReducedMotion: s = !1
|
|
28
|
+
}) {
|
|
29
|
+
return u() && !s ? /* @__PURE__ */ o(d, { children: e }) : /* @__PURE__ */ o(i, { root: t, options: { ...f, ...r }, children: e });
|
|
30
|
+
}
|
|
31
|
+
function M(e, r) {
|
|
32
|
+
const { scrollYProgress: t } = a({
|
|
33
|
+
target: e,
|
|
34
|
+
offset: (r == null ? void 0 : r.offset) ?? ["start end", "end start"]
|
|
35
|
+
});
|
|
36
|
+
return t;
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
p as SmoothScroll,
|
|
40
|
+
R as useLenis,
|
|
41
|
+
M as useScrollProgress
|
|
42
|
+
};
|
package/dist/static.css
ADDED
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
/* @hirobius/design-system/static.css — CSS-only static-primitive layer.
|
|
2
|
+
* Plain `.hds-badge` / `.hds-card` / `.hds-alert` / `.hds-divider` / `.hds-tag`
|
|
3
|
+
* classes for Badge/Card/Alert/Divider/Tag with NO React and NO reset — every
|
|
4
|
+
* rule is scoped to `.hds-*` and bound to the same design tokens the React
|
|
5
|
+
* components use, so it stays theme-aware via [data-theme]/[data-brand]. Pair
|
|
6
|
+
* with @hirobius/design-system/variables.css for the token vars themselves.
|
|
7
|
+
* See docs/CONSUMING.md §14. */
|
|
8
|
+
/**
|
|
9
|
+
* static.css — CSS-only static-primitive layer (#64).
|
|
10
|
+
*
|
|
11
|
+
* A hand-authored, framework-free stylesheet that lets a page with ZERO React
|
|
12
|
+
* (a plain `.astro`/`.html` file) render Badge, Card, Alert, Divider, and Tag
|
|
13
|
+
* using plain semantic classes (`.hds-badge`, `.hds-card`, `.hds-alert`,
|
|
14
|
+
* `.hds-divider`, `.hds-tag`) instead of the React components in
|
|
15
|
+
* `src/app/components/{badge,card,alert,divider,tag}.tsx`.
|
|
16
|
+
*
|
|
17
|
+
* Every declaration below binds to the SAME `--semantic-*` / `--component-*` /
|
|
18
|
+
* `--role-*` custom properties the React cva variants reference (see the
|
|
19
|
+
* per-primitive header comments for the exact source mapping) — this is a
|
|
20
|
+
* markup-only reskin of the token graph, not a parallel design decision. It
|
|
21
|
+
* therefore auto-themes via `[data-theme]`/`.dark`/`data-brand` exactly like
|
|
22
|
+
* the React components, with zero JS.
|
|
23
|
+
*
|
|
24
|
+
* Rules:
|
|
25
|
+
* - Every selector is scoped under `.hds-*` (or `[data-theme='dark'] .hds-*`
|
|
26
|
+
* / `.dark .hds-*` for the one non-token color flip below) — no bare
|
|
27
|
+
* element selectors, no `*`, no `:root`. Safe to drop into any host page.
|
|
28
|
+
* - Reset-free: no margin/padding/box-sizing resets outside what a given
|
|
29
|
+
* primitive itself owns. Pair with `@hirobius/design-system/variables.css`
|
|
30
|
+
* (tokens only, also host-safe) — see docs/CONSUMING.md §14.
|
|
31
|
+
* - `--primitive-*` is referenced exactly once (Tag's WCAG hit-target size),
|
|
32
|
+
* annotated `tier-ok` — mirrors the same primitive-tier reference already
|
|
33
|
+
* present in tag.tsx (no semantic alias exists for it yet).
|
|
34
|
+
* - Two declarations reference a raw `rgb()` overlay (Badge's neutral tone
|
|
35
|
+
* tint) — annotated `css-ok`; it mirrors badge.tsx's own `bg-black/[0.04]`
|
|
36
|
+
* / `dark:bg-white/[0.04]` exactly, which has no semantic token either
|
|
37
|
+
* (documented as an intentional exemption at the source, badge.tsx:15).
|
|
38
|
+
* - Two font-size/weight pairs (Badge, Tag) bind to the already-registered
|
|
39
|
+
* `--component-badge-*` / `--component-tag-*` typography tokens rather
|
|
40
|
+
* than mirroring the raw untokened Tailwind utilities the current React
|
|
41
|
+
* render happens to use (`text-[11px]`, `text-xs`) — those tokens exist
|
|
42
|
+
* precisely to describe these components (see REACT_COMPONENTS.md's Tag
|
|
43
|
+
* recipe) and keep this static layer 100% token-bound with no numeric
|
|
44
|
+
* literals to justify.
|
|
45
|
+
*
|
|
46
|
+
* Emitted as `dist/static.css` by scripts/build-static-css.mjs (part of
|
|
47
|
+
* `pnpm build:lib`) and published as the `@hirobius/design-system/static.css`
|
|
48
|
+
* subpath export.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/* ── Badge — src/app/components/badge.tsx ──────────────────────────────────── */
|
|
52
|
+
|
|
53
|
+
.hds-badge {
|
|
54
|
+
display: inline-flex;
|
|
55
|
+
width: fit-content;
|
|
56
|
+
box-sizing: border-box;
|
|
57
|
+
align-items: center;
|
|
58
|
+
justify-content: center;
|
|
59
|
+
white-space: nowrap;
|
|
60
|
+
line-height: 1;
|
|
61
|
+
text-transform: uppercase;
|
|
62
|
+
font-size: var(--component-badge-fontSize);
|
|
63
|
+
font-weight: var(--component-badge-fontWeight);
|
|
64
|
+
height: var(--component-badge-height);
|
|
65
|
+
min-width: var(--component-badge-minWidth);
|
|
66
|
+
padding: var(--component-badge-paddingY) var(--component-badge-paddingX);
|
|
67
|
+
border-radius: var(--component-badge-radius);
|
|
68
|
+
/* neutral tone (default) */
|
|
69
|
+
background-color: rgb(
|
|
70
|
+
0 0 0 / 0.04
|
|
71
|
+
); /* css-ok: mirrors badge.tsx's bg-black/[0.04] neutral-tone overlay — no semantic token exists for this tint (source-exempted, badge.tsx:15) */
|
|
72
|
+
color: var(--semantic-color-content-secondary);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
[data-theme='dark'] .hds-badge,
|
|
76
|
+
.dark .hds-badge {
|
|
77
|
+
background-color: rgb(
|
|
78
|
+
255 255 255 / 0.04
|
|
79
|
+
); /* css-ok: mirrors badge.tsx's dark:bg-white/[0.04] neutral-tone overlay */
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.hds-badge--neutral {
|
|
83
|
+
/* Explicit alias for the default — see .hds-badge above. */
|
|
84
|
+
background-color: rgb(
|
|
85
|
+
0 0 0 / 0.04
|
|
86
|
+
); /* css-ok: same neutral-tone overlay as the .hds-badge base rule */
|
|
87
|
+
color: var(--semantic-color-content-secondary);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
[data-theme='dark'] .hds-badge--neutral,
|
|
91
|
+
.dark .hds-badge--neutral {
|
|
92
|
+
background-color: rgb(
|
|
93
|
+
255 255 255 / 0.04
|
|
94
|
+
); /* css-ok: same dark-mode neutral-tone overlay as the .hds-badge base rule */
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.hds-badge--info {
|
|
98
|
+
background-color: var(--semantic-color-feedback-bg-info);
|
|
99
|
+
color: var(--semantic-color-feedback-info);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.hds-badge--success {
|
|
103
|
+
background-color: var(--semantic-color-feedback-bg-success);
|
|
104
|
+
color: var(--semantic-color-feedback-success);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.hds-badge--danger {
|
|
108
|
+
background-color: var(--semantic-color-feedback-bg-error);
|
|
109
|
+
color: var(--semantic-color-feedback-error);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.hds-badge--warning {
|
|
113
|
+
background-color: var(--semantic-color-feedback-bg-warning);
|
|
114
|
+
color: var(--semantic-color-feedback-warning);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.hds-badge--in-progress {
|
|
118
|
+
background-color: var(--semantic-color-feedback-bg-inProgress);
|
|
119
|
+
color: var(--semantic-color-feedback-inProgress);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* ── Card — src/app/components/card.tsx ─────────────────────────────────────
|
|
123
|
+
* Root surface only (variant + tone), matching the deliverable scope. Compose
|
|
124
|
+
* header/body/footer content with your own markup inside `.hds-card`; reach
|
|
125
|
+
* for the real <Card> compound parts (Card.Header/.Progress/.Metric, …) if you
|
|
126
|
+
* need the full slot anatomy — that requires React.
|
|
127
|
+
*
|
|
128
|
+
* Cascade order below is intentional and mirrors card.tsx's "tone always wins
|
|
129
|
+
* over variant" contract (card.tsx:97-101): `--accent`/`--bordered` are
|
|
130
|
+
* declared before the `--danger/--success/--warning/--info` tone modifiers, so
|
|
131
|
+
* combining a tone class with `--accent` lets the tone's border win by source
|
|
132
|
+
* order (both are single-class selectors, so specificity is equal).
|
|
133
|
+
*/
|
|
134
|
+
|
|
135
|
+
.hds-card {
|
|
136
|
+
display: flex;
|
|
137
|
+
height: 100%;
|
|
138
|
+
flex-direction: column;
|
|
139
|
+
box-sizing: border-box;
|
|
140
|
+
border-radius: var(
|
|
141
|
+
--primitive-radius-8
|
|
142
|
+
); /* tier-ok: REACT_COMPONENTS.md Card recipe mandates var(--primitive-radius-8) directly (no semantic radius alias for the 8px card corner) */
|
|
143
|
+
background-color: var(--role-card);
|
|
144
|
+
color: var(--role-card-foreground);
|
|
145
|
+
border-style: solid;
|
|
146
|
+
border-width: 1px;
|
|
147
|
+
border-color: transparent;
|
|
148
|
+
padding: var(--semantic-space-component-padding);
|
|
149
|
+
gap: var(--semantic-space-layout-tight);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.hds-card--no-padding {
|
|
153
|
+
padding: 0;
|
|
154
|
+
gap: 0;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.hds-card--accent {
|
|
158
|
+
border-width: 2px;
|
|
159
|
+
border-color: var(--semantic-color-border-accent);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.hds-card--bordered {
|
|
163
|
+
border-color: var(--semantic-color-border-default);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.hds-card--danger {
|
|
167
|
+
border-width: 1px;
|
|
168
|
+
border-color: var(--semantic-color-feedback-error);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.hds-card--success {
|
|
172
|
+
border-width: 1px;
|
|
173
|
+
border-color: var(--semantic-color-feedback-success);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.hds-card--warning {
|
|
177
|
+
border-width: 1px;
|
|
178
|
+
border-color: var(--semantic-color-feedback-warning);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.hds-card--info {
|
|
182
|
+
border-width: 1px;
|
|
183
|
+
border-color: var(--semantic-color-feedback-info);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/* ── Alert — src/app/components/alert.tsx ───────────────────────────────────
|
|
187
|
+
* `role="alert"` still belongs on the markup (an ARIA live-region role, not a
|
|
188
|
+
* styling concern) — see docs/CONSUMING.md §14. No entrance-motion equivalent
|
|
189
|
+
* ships here: alert.tsx's opacity/y motion is a React (motion/react) nicety,
|
|
190
|
+
* not required for a static page to read correctly.
|
|
191
|
+
*/
|
|
192
|
+
|
|
193
|
+
.hds-alert {
|
|
194
|
+
display: flex;
|
|
195
|
+
align-items: center;
|
|
196
|
+
box-sizing: border-box;
|
|
197
|
+
gap: var(--semantic-space-component-gap);
|
|
198
|
+
padding: var(--semantic-space-component-gap);
|
|
199
|
+
border-radius: var(
|
|
200
|
+
--primitive-radius-4
|
|
201
|
+
); /* tier-ok: alert.tsx itself carries the identical exemption ("tier-ok: 4px primitive radius, no semantic 4px token", alert.tsx:24) */
|
|
202
|
+
background-color: var(--semantic-color-feedback-bg-info);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.hds-alert--with-title {
|
|
206
|
+
/* Add alongside a tone modifier when the alert has a title element
|
|
207
|
+
* (.hds-alert__title) above the body — mirrors alert.tsx's hasTitle:true
|
|
208
|
+
* cross-axis switch from items-center to items-start. */
|
|
209
|
+
align-items: flex-start;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.hds-alert--success {
|
|
213
|
+
background-color: var(--semantic-color-feedback-bg-success);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.hds-alert--danger {
|
|
217
|
+
background-color: var(--semantic-color-feedback-bg-error);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.hds-alert--warning {
|
|
221
|
+
background-color: var(--semantic-color-feedback-bg-warning);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.hds-alert--info {
|
|
225
|
+
background-color: var(--semantic-color-feedback-bg-info);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.hds-alert__icon {
|
|
229
|
+
flex-shrink: 0;
|
|
230
|
+
width: var(
|
|
231
|
+
--primitive-typography-size-base
|
|
232
|
+
); /* tier-ok: mirrors Icon size="small" (hds.iconSize.small = var(--primitive-typography-size-base)), Icon has no semantic size alias */
|
|
233
|
+
height: var(--primitive-typography-size-base); /* tier-ok: see above */
|
|
234
|
+
color: var(--semantic-color-feedback-info);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.hds-alert--success .hds-alert__icon {
|
|
238
|
+
color: var(--semantic-color-feedback-success);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.hds-alert--danger .hds-alert__icon {
|
|
242
|
+
color: var(--semantic-color-feedback-error);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.hds-alert--warning .hds-alert__icon {
|
|
246
|
+
color: var(--semantic-color-feedback-warning);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.hds-alert--info .hds-alert__icon {
|
|
250
|
+
color: var(--semantic-color-feedback-info);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.hds-alert__title {
|
|
254
|
+
display: block;
|
|
255
|
+
font-family: var(--semantic-typography-ui-font-family);
|
|
256
|
+
font-size: var(--semantic-typography-ui-font-size);
|
|
257
|
+
font-weight: var(--semantic-typography-ui-font-weight);
|
|
258
|
+
line-height: var(--semantic-typography-ui-line-height);
|
|
259
|
+
color: var(--semantic-color-content-primary);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.hds-alert__body {
|
|
263
|
+
display: block;
|
|
264
|
+
font-family: var(--semantic-typography-caption-font-family);
|
|
265
|
+
font-size: var(--semantic-typography-caption-font-size);
|
|
266
|
+
font-weight: var(--semantic-typography-caption-font-weight);
|
|
267
|
+
line-height: var(--semantic-typography-caption-line-height);
|
|
268
|
+
color: var(--semantic-color-content-primary);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/* ── Divider — src/app/components/divider.tsx ───────────────────────────────
|
|
272
|
+
* Decorative + non-interactive, so no hover/focus states. `<hr>` carries
|
|
273
|
+
* browser-agent defaults (border, height, color) that a reset-free stylesheet
|
|
274
|
+
* can't zero globally — `.hds-divider` resets them itself (class-scoped, not
|
|
275
|
+
* a bare `hr` rule) so the primitive is correct with or without a host reset.
|
|
276
|
+
*/
|
|
277
|
+
|
|
278
|
+
.hds-divider {
|
|
279
|
+
box-sizing: border-box;
|
|
280
|
+
margin: 0;
|
|
281
|
+
flex-shrink: 0;
|
|
282
|
+
height: 0;
|
|
283
|
+
color: inherit;
|
|
284
|
+
overflow: visible;
|
|
285
|
+
border-style: solid;
|
|
286
|
+
border-width: 0;
|
|
287
|
+
border-color: var(--semantic-color-border-default);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.hds-divider--horizontal {
|
|
291
|
+
width: 100%;
|
|
292
|
+
align-self: stretch;
|
|
293
|
+
border-top-width: 1px;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.hds-divider--vertical {
|
|
297
|
+
height: 100%;
|
|
298
|
+
border-left-width: 1px;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.hds-divider--strong {
|
|
302
|
+
border-color: var(--semantic-color-border-strong);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* ── Tag — src/app/components/tag.tsx ────────────────────────────────────────
|
|
306
|
+
* Two-part anatomy: `.hds-tag` is the accessible 44px hit-target button;
|
|
307
|
+
* `.hds-tag__pill` is the compact visible surface inside it — same split as
|
|
308
|
+
* tag.tsx's outer <button> + inner pill <span>.
|
|
309
|
+
*/
|
|
310
|
+
|
|
311
|
+
.hds-tag {
|
|
312
|
+
display: inline-flex;
|
|
313
|
+
box-sizing: border-box;
|
|
314
|
+
min-width: var(
|
|
315
|
+
--primitive-size-interactive-min
|
|
316
|
+
); /* tier-ok: mirrors tag.tsx's own var(--primitive-size-interactive-min) hit-target size (tag.tsx:25) — no semantic alias exists */
|
|
317
|
+
align-items: center;
|
|
318
|
+
justify-content: center;
|
|
319
|
+
cursor: pointer;
|
|
320
|
+
user-select: none;
|
|
321
|
+
border: 0;
|
|
322
|
+
background: transparent;
|
|
323
|
+
padding: 0;
|
|
324
|
+
color: inherit;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.hds-tag:disabled {
|
|
328
|
+
pointer-events: none;
|
|
329
|
+
cursor: not-allowed;
|
|
330
|
+
opacity: 0.5;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.hds-tag:focus-visible {
|
|
334
|
+
outline: var(--semantic-borderWidth-emphasis) solid var(--semantic-color-border-accent);
|
|
335
|
+
outline-offset: 2px;
|
|
336
|
+
position: relative;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.hds-tag__pill {
|
|
340
|
+
pointer-events: none;
|
|
341
|
+
box-sizing: border-box;
|
|
342
|
+
display: inline-flex;
|
|
343
|
+
min-height: var(--component-tag-minHeight);
|
|
344
|
+
min-width: var(--component-tag-minWidth);
|
|
345
|
+
align-items: center;
|
|
346
|
+
justify-content: center;
|
|
347
|
+
white-space: nowrap;
|
|
348
|
+
line-height: 1;
|
|
349
|
+
font-size: var(--component-tag-fontSize);
|
|
350
|
+
font-weight: var(--component-tag-fontWeight);
|
|
351
|
+
border-radius: var(--component-tag-radius);
|
|
352
|
+
border-style: solid;
|
|
353
|
+
border-width: 1px;
|
|
354
|
+
padding: var(--component-tag-paddingY) var(--component-tag-paddingX);
|
|
355
|
+
border-color: var(--semantic-color-border-default);
|
|
356
|
+
background-color: var(--semantic-color-surface-raised);
|
|
357
|
+
color: var(--semantic-color-content-secondary);
|
|
358
|
+
transition:
|
|
359
|
+
color 0.15s ease,
|
|
360
|
+
background-color 0.15s ease,
|
|
361
|
+
border-color 0.15s ease;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
@media (prefers-reduced-motion: reduce) {
|
|
365
|
+
.hds-tag__pill {
|
|
366
|
+
transition: none;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.hds-tag:hover .hds-tag__pill {
|
|
371
|
+
border-color: var(--semantic-color-border-accent);
|
|
372
|
+
background-color: var(--semantic-color-surface-accentSubtle);
|
|
373
|
+
color: var(--semantic-color-content-primary);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.hds-tag:active .hds-tag__pill {
|
|
377
|
+
border-color: var(--semantic-color-border-accent);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.hds-tag--active .hds-tag__pill {
|
|
381
|
+
border-color: var(--component-tag-activeBorder);
|
|
382
|
+
background-color: var(--component-tag-activeBackground);
|
|
383
|
+
color: var(--component-tag-activeText);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.hds-tag--active:hover .hds-tag__pill {
|
|
387
|
+
background-color: var(--component-tag-activeHover);
|
|
388
|
+
}
|