@knpkv/rly 0.4.1 → 0.5.1
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 +31 -2
- package/dist/Dialog-DSwimdwG.js +955 -0
- package/dist/Dialog-DSwimdwG.js.map +1 -0
- package/dist/{PortalProvider-BpgZwSpw.js → PortalProvider-CN_81Fy3.js} +2 -2
- package/dist/{PortalProvider-BpgZwSpw.js.map → PortalProvider-CN_81Fy3.js.map} +1 -1
- package/dist/components.css +1 -1
- package/dist/dts/foundations/PortalProvider.d.ts +1 -0
- package/dist/dts/foundations/PortalProvider.d.ts.map +1 -1
- package/dist/dts/internal/modal.d.ts +4 -0
- package/dist/dts/internal/modal.d.ts.map +1 -1
- package/dist/dts/patterns/RelayDock.d.ts +75 -0
- package/dist/dts/patterns/RelayDock.d.ts.map +1 -0
- package/dist/dts/patterns/index.d.ts +2 -0
- package/dist/dts/patterns/index.d.ts.map +1 -1
- package/dist/foundations/index.js +2 -2
- package/dist/index.js +6 -6
- package/dist/patterns/index.js +2 -2
- package/dist/patterns-BY7vflbg.js +3320 -0
- package/dist/patterns-BY7vflbg.js.map +1 -0
- package/dist/primitives/index.js +3 -3
- package/dist/primitives-DYGtIZqB.js +342 -0
- package/dist/primitives-DYGtIZqB.js.map +1 -0
- package/package.json +1 -1
- package/registry/components.json +111 -0
- package/registry/search.json +36 -0
- package/dist/Dialog-1WvU8GjA.js +0 -715
- package/dist/Dialog-1WvU8GjA.js.map +0 -1
- package/dist/patterns-CxMz8DKX.js +0 -2792
- package/dist/patterns-CxMz8DKX.js.map +0 -1
- package/dist/primitives-CW89TsFB.js +0 -543
- package/dist/primitives-CW89TsFB.js.map +0 -1
package/dist/primitives/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
export {
|
|
2
|
+
import { C as e, D as t, E as n, S as r, T as i, _ as a, a as o, b as s, c, d as l, f as u, g as d, h as f, i as p, l as m, m as h, n as g, o as _, p as v, r as y, s as b, t as x, u as S, v as C, w, x as T, y as E } from "../Dialog-DSwimdwG.js";
|
|
3
|
+
import { a as D, c as O, d as k, f as A, h as j, i as M, l as N, m as P, n as F, o as I, p as L, r as R, s as z, t as B, u as V } from "../primitives-DYGtIZqB.js";
|
|
4
|
+
export { d as Avatar, r as Button, x as Dialog, L as Divider, b as Field, V as IconButton, a as RLY_AVATAR_DEFAULT_VARIANTS, C as RLY_AVATAR_VARIANTS, e as RLY_BUTTON_DEFAULT_VARIANTS, w as RLY_BUTTON_VARIANTS, g as RLY_DIALOG_DEFAULT_VARIANTS, y as RLY_DIALOG_VARIANTS, P as RLY_DIVIDER_DEFAULT_VARIANTS, j as RLY_DIVIDER_VARIANTS, c as RLY_FIELD_DEFAULT_VARIANTS, m as RLY_FIELD_VARIANTS, k as RLY_ICON_BUTTON_DEFAULT_VARIANTS, A as RLY_ICON_BUTTON_VARIANTS, p as RLY_SELECT_DEFAULT_VARIANTS, o as RLY_SELECT_VARIANTS, i as RLY_SHEET_DEFAULT_VARIANTS, n as RLY_SHEET_VARIANTS, v as RLY_SKELETON_DEFAULT_VARIANTS, h as RLY_SKELETON_VARIANTS, E as RLY_STATE_LABEL_DEFAULT_VARIANTS, s as RLY_STATE_LABEL_VARIANTS, S as RLY_STATE_PANEL_DEFAULT_VARIANTS, l as RLY_STATE_PANEL_VARIANTS, z as RLY_SURFACE_DEFAULT_VARIANTS, O as RLY_SURFACE_VARIANTS, M as RLY_TABS_DEFAULT_VARIANTS, D as RLY_TABS_VARIANTS, B as RLY_TEXT_DEFAULT_VARIANTS, F as RLY_TEXT_VARIANTS, _ as Select, t as Sheet, f as Skeleton, T as StateLabel, u as StatePanel, N as Surface, I as Tabs, R as Text };
|
|
5
5
|
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { i as e } from "./PortalProvider-CN_81Fy3.js";
|
|
2
|
+
import { i as t, n, r, t as i } from "./component-DKy8kjZl.js";
|
|
3
|
+
import { Tabs as a } from "radix-ui";
|
|
4
|
+
import { createElement as o } from "react";
|
|
5
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
6
|
+
var l = {
|
|
7
|
+
root: "rly_Divider-module__root",
|
|
8
|
+
horizontal: "rly_Divider-module__horizontal",
|
|
9
|
+
vertical: "rly_Divider-module__vertical",
|
|
10
|
+
subtle: "rly_Divider-module__subtle",
|
|
11
|
+
strong: "rly_Divider-module__strong"
|
|
12
|
+
}, u = (e) => n(l, e), d = r({
|
|
13
|
+
orientation: {
|
|
14
|
+
horizontal: {
|
|
15
|
+
className: u("horizontal"),
|
|
16
|
+
purpose: "Separate stacked content",
|
|
17
|
+
tokens: ["space-0"]
|
|
18
|
+
},
|
|
19
|
+
vertical: {
|
|
20
|
+
className: u("vertical"),
|
|
21
|
+
purpose: "Separate adjacent content",
|
|
22
|
+
tokens: ["space-0"]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
strength: {
|
|
26
|
+
subtle: {
|
|
27
|
+
className: u("subtle"),
|
|
28
|
+
purpose: "Quiet structural boundary",
|
|
29
|
+
tokens: ["color-border-1"]
|
|
30
|
+
},
|
|
31
|
+
strong: {
|
|
32
|
+
className: u("strong"),
|
|
33
|
+
purpose: "Explicit structural boundary",
|
|
34
|
+
tokens: ["color-border-2"]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}), f = r({
|
|
38
|
+
orientation: "horizontal",
|
|
39
|
+
strength: "subtle"
|
|
40
|
+
}), p = ({ className: e, decorative: n = !0, label: r, orientation: a = "horizontal", strength: o = "subtle", ...c }) => {
|
|
41
|
+
if (!n && r === void 0) throw Error("Semantic Divider label must contain visible text");
|
|
42
|
+
let l = n || r === void 0 ? void 0 : t(r, "Semantic Divider label");
|
|
43
|
+
return /* @__PURE__ */ s("div", {
|
|
44
|
+
...c,
|
|
45
|
+
"aria-hidden": n ? "true" : void 0,
|
|
46
|
+
"aria-label": l,
|
|
47
|
+
"aria-orientation": n ? void 0 : a,
|
|
48
|
+
className: i(u("root"), d.orientation[a].className, d.strength[o].className, e),
|
|
49
|
+
role: n ? "presentation" : "separator"
|
|
50
|
+
});
|
|
51
|
+
}, m = {
|
|
52
|
+
root: "rly_IconButton-module__root",
|
|
53
|
+
primary: "rly_IconButton-module__primary",
|
|
54
|
+
secondary: "rly_IconButton-module__secondary",
|
|
55
|
+
quiet: "rly_IconButton-module__quiet",
|
|
56
|
+
compact: "rly_IconButton-module__compact",
|
|
57
|
+
defaultSize: "rly_IconButton-module__defaultSize",
|
|
58
|
+
principal: "rly_IconButton-module__principal"
|
|
59
|
+
}, h = (e) => n(m, e), g = r({
|
|
60
|
+
variant: {
|
|
61
|
+
primary: {
|
|
62
|
+
className: h("primary"),
|
|
63
|
+
purpose: "Principal icon action",
|
|
64
|
+
tokens: ["color-action-background", "color-action-foreground"]
|
|
65
|
+
},
|
|
66
|
+
secondary: {
|
|
67
|
+
className: h("secondary"),
|
|
68
|
+
purpose: "Default icon action",
|
|
69
|
+
tokens: ["color-surface-1", "color-border-2"]
|
|
70
|
+
},
|
|
71
|
+
quiet: {
|
|
72
|
+
className: h("quiet"),
|
|
73
|
+
purpose: "Low-emphasis icon action",
|
|
74
|
+
tokens: ["color-text-1", "color-surface-2"]
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
size: {
|
|
78
|
+
compact: {
|
|
79
|
+
className: h("compact"),
|
|
80
|
+
purpose: "Minimum accessible icon target",
|
|
81
|
+
tokens: ["space-40", "space-4"]
|
|
82
|
+
},
|
|
83
|
+
default: {
|
|
84
|
+
className: h("defaultSize"),
|
|
85
|
+
purpose: "Standard icon target",
|
|
86
|
+
tokens: ["space-48"]
|
|
87
|
+
},
|
|
88
|
+
principal: {
|
|
89
|
+
className: h("principal"),
|
|
90
|
+
purpose: "Prominent icon target",
|
|
91
|
+
tokens: ["space-48", "space-8"]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}), _ = r({
|
|
95
|
+
variant: "secondary",
|
|
96
|
+
size: "default"
|
|
97
|
+
}), v = ({ className: n, disabled: r, icon: a, label: o, loading: c = !1, size: l = "default", type: u, variant: d = "secondary", ...f }) => /* @__PURE__ */ s("button", {
|
|
98
|
+
...f,
|
|
99
|
+
"aria-busy": c ? "true" : void 0,
|
|
100
|
+
"aria-label": t(o, "IconButton label"),
|
|
101
|
+
className: i(h("root"), g.variant[d].className, g.size[l].className, n),
|
|
102
|
+
"data-loading": c ? "true" : void 0,
|
|
103
|
+
disabled: r || c,
|
|
104
|
+
type: u ?? "button",
|
|
105
|
+
children: /* @__PURE__ */ s(e, {
|
|
106
|
+
decorative: !0,
|
|
107
|
+
name: c ? "loader" : a,
|
|
108
|
+
size: l === "compact" ? "small" : "default"
|
|
109
|
+
})
|
|
110
|
+
}), y = {
|
|
111
|
+
root: "rly_Surface-module__root",
|
|
112
|
+
tonePrimary: "rly_Surface-module__tonePrimary",
|
|
113
|
+
toneSecondary: "rly_Surface-module__toneSecondary",
|
|
114
|
+
toneTertiary: "rly_Surface-module__toneTertiary",
|
|
115
|
+
shapeCard: "rly_Surface-module__shapeCard",
|
|
116
|
+
shapeGrouped: "rly_Surface-module__shapeGrouped",
|
|
117
|
+
paddingNone: "rly_Surface-module__paddingNone",
|
|
118
|
+
paddingCompact: "rly_Surface-module__paddingCompact",
|
|
119
|
+
paddingDefault: "rly_Surface-module__paddingDefault",
|
|
120
|
+
paddingSpacious: "rly_Surface-module__paddingSpacious"
|
|
121
|
+
}, b = (e) => n(y, e), x = r({
|
|
122
|
+
tone: {
|
|
123
|
+
primary: {
|
|
124
|
+
className: b("tonePrimary"),
|
|
125
|
+
purpose: "Primary bordered surface",
|
|
126
|
+
tokens: ["color-surface-1", "color-border-1"]
|
|
127
|
+
},
|
|
128
|
+
secondary: {
|
|
129
|
+
className: b("toneSecondary"),
|
|
130
|
+
purpose: "Quiet secondary surface",
|
|
131
|
+
tokens: ["color-surface-2"]
|
|
132
|
+
},
|
|
133
|
+
tertiary: {
|
|
134
|
+
className: b("toneTertiary"),
|
|
135
|
+
purpose: "Inset tertiary surface",
|
|
136
|
+
tokens: ["color-surface-3"]
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
form: {
|
|
140
|
+
card: {
|
|
141
|
+
className: b("shapeCard"),
|
|
142
|
+
purpose: "Standard card geometry",
|
|
143
|
+
tokens: ["radius-control"]
|
|
144
|
+
},
|
|
145
|
+
grouped: {
|
|
146
|
+
className: b("shapeGrouped"),
|
|
147
|
+
purpose: "Grouped content geometry",
|
|
148
|
+
tokens: ["radius-group"]
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
padding: {
|
|
152
|
+
none: {
|
|
153
|
+
className: b("paddingNone"),
|
|
154
|
+
purpose: "Caller-owned internal layout",
|
|
155
|
+
tokens: ["space-0"]
|
|
156
|
+
},
|
|
157
|
+
compact: {
|
|
158
|
+
className: b("paddingCompact"),
|
|
159
|
+
purpose: "Dense supporting content",
|
|
160
|
+
tokens: ["space-16"]
|
|
161
|
+
},
|
|
162
|
+
default: {
|
|
163
|
+
className: b("paddingDefault"),
|
|
164
|
+
purpose: "Standard content",
|
|
165
|
+
tokens: ["space-24"]
|
|
166
|
+
},
|
|
167
|
+
spacious: {
|
|
168
|
+
className: b("paddingSpacious"),
|
|
169
|
+
purpose: "Prominent grouped content",
|
|
170
|
+
tokens: ["space-32"]
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}), S = r({
|
|
174
|
+
tone: "primary",
|
|
175
|
+
form: "card",
|
|
176
|
+
padding: "default"
|
|
177
|
+
}), C = ({ as: e, children: t, className: n, form: r = "card", padding: a = "default", ref: s, tone: c = "primary", ...l }) => o(e ?? "div", {
|
|
178
|
+
...l,
|
|
179
|
+
className: i(b("root"), x.tone[c].className, x.form[r].className, x.padding[a].className, n),
|
|
180
|
+
ref: s
|
|
181
|
+
}, t), w = {
|
|
182
|
+
root: "rly_Tabs-module__root",
|
|
183
|
+
list: "rly_Tabs-module__list",
|
|
184
|
+
trigger: "rly_Tabs-module__trigger",
|
|
185
|
+
defaultSize: "rly_Tabs-module__defaultSize",
|
|
186
|
+
large: "rly_Tabs-module__large",
|
|
187
|
+
panel: "rly_Tabs-module__panel"
|
|
188
|
+
}, T = (e) => n(w, e), E = r({ size: {
|
|
189
|
+
default: {
|
|
190
|
+
className: T("defaultSize"),
|
|
191
|
+
purpose: "Standard section navigation",
|
|
192
|
+
tokens: [
|
|
193
|
+
"type-label",
|
|
194
|
+
"space-40",
|
|
195
|
+
"space-4"
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
large: {
|
|
199
|
+
className: T("large"),
|
|
200
|
+
purpose: "Prominent page-level navigation",
|
|
201
|
+
tokens: ["type-body", "space-48"]
|
|
202
|
+
}
|
|
203
|
+
} }), D = r({ size: "default" }), O = (e) => {
|
|
204
|
+
if (e.length === 0) throw Error("Tabs items must contain at least one enabled tab");
|
|
205
|
+
let n = /* @__PURE__ */ new Set(), r;
|
|
206
|
+
for (let i of e) {
|
|
207
|
+
let e = t(i.value, "Tab value");
|
|
208
|
+
if (t(i.label, `Tab label for ${e}`), n.has(e)) throw Error(`Tabs item values must be unique: ${e}`);
|
|
209
|
+
n.add(e), !i.disabled && r === void 0 && (r = i);
|
|
210
|
+
}
|
|
211
|
+
if (r === void 0) throw Error("Tabs items must contain at least one enabled tab");
|
|
212
|
+
return r;
|
|
213
|
+
}, k = ({ "aria-label": e, className: n, defaultValue: r, direction: o, items: l, onValueChange: u, size: d = "default", value: f, ...p }) => {
|
|
214
|
+
let m = t(e, "Tabs aria-label"), h = O(l), g = f ?? r ?? h.value, _ = l.find((e) => e.value === g);
|
|
215
|
+
if (_ === void 0 || _.disabled) throw Error(`Tabs selected value must identify an enabled tab: ${g}`);
|
|
216
|
+
let v = f === void 0 ? u === void 0 ? { defaultValue: g } : {
|
|
217
|
+
defaultValue: g,
|
|
218
|
+
onValueChange: u
|
|
219
|
+
} : {
|
|
220
|
+
onValueChange: u,
|
|
221
|
+
value: f
|
|
222
|
+
}, y = o === void 0 ? {} : { dir: o };
|
|
223
|
+
return /* @__PURE__ */ c(a.Root, {
|
|
224
|
+
...p,
|
|
225
|
+
...v,
|
|
226
|
+
...y,
|
|
227
|
+
activationMode: "automatic",
|
|
228
|
+
className: i(T("root"), E.size[d].className, n),
|
|
229
|
+
orientation: "horizontal",
|
|
230
|
+
children: [/* @__PURE__ */ s(a.List, {
|
|
231
|
+
"aria-label": m,
|
|
232
|
+
className: T("list"),
|
|
233
|
+
loop: !0,
|
|
234
|
+
children: l.map((e) => /* @__PURE__ */ s(a.Trigger, {
|
|
235
|
+
className: T("trigger"),
|
|
236
|
+
disabled: e.disabled,
|
|
237
|
+
value: e.value,
|
|
238
|
+
children: e.label
|
|
239
|
+
}, e.value))
|
|
240
|
+
}), l.map((e) => /* @__PURE__ */ s(a.Content, {
|
|
241
|
+
className: T("panel"),
|
|
242
|
+
value: e.value,
|
|
243
|
+
children: e.content
|
|
244
|
+
}, e.value))]
|
|
245
|
+
});
|
|
246
|
+
}, A = {
|
|
247
|
+
root: "rly_Text-module__root",
|
|
248
|
+
verdict: "rly_Text-module__verdict",
|
|
249
|
+
pageTitle: "rly_Text-module__pageTitle",
|
|
250
|
+
sectionTitle: "rly_Text-module__sectionTitle",
|
|
251
|
+
cardTitle: "rly_Text-module__cardTitle",
|
|
252
|
+
bodyLarge: "rly_Text-module__bodyLarge",
|
|
253
|
+
body: "rly_Text-module__body",
|
|
254
|
+
label: "rly_Text-module__label",
|
|
255
|
+
meta: "rly_Text-module__meta",
|
|
256
|
+
code: "rly_Text-module__code",
|
|
257
|
+
tonePrimary: "rly_Text-module__tonePrimary",
|
|
258
|
+
toneSecondary: "rly_Text-module__toneSecondary",
|
|
259
|
+
toneTertiary: "rly_Text-module__toneTertiary",
|
|
260
|
+
toneInherit: "rly_Text-module__toneInherit"
|
|
261
|
+
}, j = (e) => n(A, e), M = r({
|
|
262
|
+
variant: {
|
|
263
|
+
verdict: {
|
|
264
|
+
className: j("verdict"),
|
|
265
|
+
purpose: "One restrained verdict thesis",
|
|
266
|
+
tokens: ["type-verdict"]
|
|
267
|
+
},
|
|
268
|
+
"page-title": {
|
|
269
|
+
className: j("pageTitle"),
|
|
270
|
+
purpose: "Primary page title",
|
|
271
|
+
tokens: ["type-page-title"]
|
|
272
|
+
},
|
|
273
|
+
"section-title": {
|
|
274
|
+
className: j("sectionTitle"),
|
|
275
|
+
purpose: "Section heading",
|
|
276
|
+
tokens: ["type-section-title"]
|
|
277
|
+
},
|
|
278
|
+
"card-title": {
|
|
279
|
+
className: j("cardTitle"),
|
|
280
|
+
purpose: "Card or panel heading",
|
|
281
|
+
tokens: ["type-card-title"]
|
|
282
|
+
},
|
|
283
|
+
"body-large": {
|
|
284
|
+
className: j("bodyLarge"),
|
|
285
|
+
purpose: "Leading explanatory copy",
|
|
286
|
+
tokens: ["type-body-large"]
|
|
287
|
+
},
|
|
288
|
+
body: {
|
|
289
|
+
className: j("body"),
|
|
290
|
+
purpose: "Default interface copy",
|
|
291
|
+
tokens: ["type-body"]
|
|
292
|
+
},
|
|
293
|
+
label: {
|
|
294
|
+
className: j("label"),
|
|
295
|
+
purpose: "Control and metadata labels",
|
|
296
|
+
tokens: ["type-label"]
|
|
297
|
+
},
|
|
298
|
+
meta: {
|
|
299
|
+
className: j("meta"),
|
|
300
|
+
purpose: "Supporting metadata",
|
|
301
|
+
tokens: ["type-meta"]
|
|
302
|
+
},
|
|
303
|
+
code: {
|
|
304
|
+
className: j("code"),
|
|
305
|
+
purpose: "Code and tabular data",
|
|
306
|
+
tokens: ["type-code"]
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
tone: {
|
|
310
|
+
primary: {
|
|
311
|
+
className: j("tonePrimary"),
|
|
312
|
+
purpose: "Primary readable text",
|
|
313
|
+
tokens: ["color-text-1"]
|
|
314
|
+
},
|
|
315
|
+
secondary: {
|
|
316
|
+
className: j("toneSecondary"),
|
|
317
|
+
purpose: "Supporting text",
|
|
318
|
+
tokens: ["color-text-2"]
|
|
319
|
+
},
|
|
320
|
+
tertiary: {
|
|
321
|
+
className: j("toneTertiary"),
|
|
322
|
+
purpose: "Restricted tertiary text",
|
|
323
|
+
tokens: ["color-text-3"]
|
|
324
|
+
},
|
|
325
|
+
inherit: {
|
|
326
|
+
className: j("toneInherit"),
|
|
327
|
+
purpose: "Inherit semantic context",
|
|
328
|
+
tokens: []
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}), N = r({
|
|
332
|
+
variant: "body",
|
|
333
|
+
tone: "primary"
|
|
334
|
+
}), P = (e) => e === "code" ? "code" : e === "verdict" ? "p" : e === "label" || e === "meta" ? "span" : "p", F = ({ as: e, children: t, className: n, ref: r, tone: a = N.tone, variant: s = N.variant, ...c }) => o(e ?? P(s), {
|
|
335
|
+
...c,
|
|
336
|
+
className: i(j("root"), M.variant[s].className, M.tone[a].className, n),
|
|
337
|
+
ref: r
|
|
338
|
+
}, t);
|
|
339
|
+
//#endregion
|
|
340
|
+
export { E as a, x as c, _ as d, g as f, d as h, D as i, C as l, f as m, M as n, k as o, p, F as r, S as s, N as t, v as u };
|
|
341
|
+
|
|
342
|
+
//# sourceMappingURL=primitives-DYGtIZqB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives-DYGtIZqB.js","names":[],"sources":["../src/primitives/Divider.module.css","../src/primitives/Divider.tsx","../src/primitives/IconButton.module.css","../src/primitives/IconButton.tsx","../src/primitives/Surface.module.css","../src/primitives/Surface.tsx","../src/primitives/Tabs.module.css","../src/primitives/Tabs.tsx","../src/primitives/Text.module.css","../src/primitives/Text.tsx"],"sourcesContent":["@layer rly.components {\n .root {\n flex: none;\n }\n .horizontal {\n block-size: 1px;\n inline-size: 100%;\n }\n .vertical {\n align-self: stretch;\n inline-size: 1px;\n min-block-size: var(--rly-space-20);\n }\n .subtle {\n background: var(--rly-color-border-1);\n }\n .strong {\n background: var(--rly-color-border-2);\n }\n}\n","import type { ComponentPropsWithRef, ReactElement } from \"react\"\nimport { classNames, cssClass, defineVariants, requireText } from \"../internal/component.js\"\nimport styles from \"./Divider.module.css\"\n\nconst style = (name: string): string => cssClass(styles, name)\nexport const RLY_DIVIDER_VARIANTS = defineVariants({\n orientation: {\n horizontal: { className: style(\"horizontal\"), purpose: \"Separate stacked content\", tokens: [\"space-0\"] },\n vertical: { className: style(\"vertical\"), purpose: \"Separate adjacent content\", tokens: [\"space-0\"] }\n },\n strength: {\n subtle: { className: style(\"subtle\"), purpose: \"Quiet structural boundary\", tokens: [\"color-border-1\"] },\n strong: { className: style(\"strong\"), purpose: \"Explicit structural boundary\", tokens: [\"color-border-2\"] }\n }\n})\nexport const RLY_DIVIDER_DEFAULT_VARIANTS = defineVariants({ orientation: \"horizontal\", strength: \"subtle\" })\nexport type RlyDividerOrientation = keyof typeof RLY_DIVIDER_VARIANTS.orientation\nexport type RlyDividerStrength = keyof typeof RLY_DIVIDER_VARIANTS.strength\ntype DividerBaseProps = Omit<ComponentPropsWithRef<\"div\">, \"aria-label\" | \"children\" | \"role\">\nexport type DividerProps = DividerBaseProps & {\n readonly orientation?: RlyDividerOrientation\n readonly strength?: RlyDividerStrength\n} & ({ readonly decorative?: true; readonly label?: never } | { readonly decorative: false; readonly label: string })\n\n/** Separate content visually or, when explicitly labelled, semantically. */\nexport const Divider = ({\n className,\n decorative = true,\n label,\n orientation = \"horizontal\",\n strength = \"subtle\",\n ...props\n}: DividerProps): ReactElement => {\n if (!decorative && label === undefined) throw new Error(\"Semantic Divider label must contain visible text\")\n const accessibleLabel = decorative || label === undefined ? undefined : requireText(label, \"Semantic Divider label\")\n return (\n <div\n {...props}\n aria-hidden={decorative ? \"true\" : undefined}\n aria-label={accessibleLabel}\n aria-orientation={decorative ? undefined : orientation}\n className={classNames(\n style(\"root\"),\n RLY_DIVIDER_VARIANTS.orientation[orientation].className,\n RLY_DIVIDER_VARIANTS.strength[strength].className,\n className\n )}\n role={decorative ? \"presentation\" : \"separator\"}\n />\n )\n}\n","@layer rly.components {\n .root {\n appearance: none;\n border: 1px solid var(--rly-color-border-2);\n border-radius: var(--rly-radius-control);\n box-sizing: border-box;\n cursor: pointer;\n display: inline-grid;\n padding: var(--rly-space-0);\n place-items: center;\n }\n\n .root:disabled {\n cursor: not-allowed;\n opacity: 0.58;\n }\n .primary {\n background: var(--rly-color-action-background);\n border-color: var(--rly-color-action-background);\n color: var(--rly-color-action-foreground);\n }\n .secondary {\n background: var(--rly-color-surface-1);\n color: var(--rly-color-text-1);\n }\n .quiet {\n background: var(--rly-color-surface-2);\n border-color: var(--rly-color-surface-2);\n color: var(--rly-color-text-1);\n }\n .compact {\n block-size: calc(var(--rly-space-40) + var(--rly-space-4));\n inline-size: calc(var(--rly-space-40) + var(--rly-space-4));\n }\n .defaultSize {\n block-size: var(--rly-space-48);\n inline-size: var(--rly-space-48);\n }\n .principal {\n block-size: calc(var(--rly-space-48) + var(--rly-space-8));\n inline-size: calc(var(--rly-space-48) + var(--rly-space-8));\n }\n\n @media (hover: hover) {\n .root:not(:disabled):hover {\n border-color: var(--rly-color-text-2);\n }\n .primary:not(:disabled):hover {\n background: var(--rly-color-text-2);\n }\n }\n}\n","import type { ComponentPropsWithRef, ReactElement } from \"react\"\nimport { Icon, type RlyIconName } from \"../foundations/Icon.js\"\nimport { classNames, cssClass, defineVariants, requireText } from \"../internal/component.js\"\nimport styles from \"./IconButton.module.css\"\n\nconst style = (name: string): string => cssClass(styles, name)\nexport const RLY_ICON_BUTTON_VARIANTS = defineVariants({\n variant: {\n primary: {\n className: style(\"primary\"),\n purpose: \"Principal icon action\",\n tokens: [\"color-action-background\", \"color-action-foreground\"]\n },\n secondary: {\n className: style(\"secondary\"),\n purpose: \"Default icon action\",\n tokens: [\"color-surface-1\", \"color-border-2\"]\n },\n quiet: {\n className: style(\"quiet\"),\n purpose: \"Low-emphasis icon action\",\n tokens: [\"color-text-1\", \"color-surface-2\"]\n }\n },\n size: {\n compact: {\n className: style(\"compact\"),\n purpose: \"Minimum accessible icon target\",\n tokens: [\"space-40\", \"space-4\"]\n },\n default: { className: style(\"defaultSize\"), purpose: \"Standard icon target\", tokens: [\"space-48\"] },\n principal: { className: style(\"principal\"), purpose: \"Prominent icon target\", tokens: [\"space-48\", \"space-8\"] }\n }\n})\nexport const RLY_ICON_BUTTON_DEFAULT_VARIANTS = defineVariants({ variant: \"secondary\", size: \"default\" })\nexport type RlyIconButtonVariant = keyof typeof RLY_ICON_BUTTON_VARIANTS.variant\nexport type RlyIconButtonSize = keyof typeof RLY_ICON_BUTTON_VARIANTS.size\nexport type IconButtonProps = Omit<ComponentPropsWithRef<\"button\">, \"aria-label\" | \"children\"> & {\n readonly icon: RlyIconName\n readonly label: string\n readonly loading?: boolean\n readonly size?: RlyIconButtonSize\n readonly variant?: RlyIconButtonVariant\n}\n\n/** Render an icon-only action whose accessible name is mandatory and owned. */\nexport const IconButton = ({\n className,\n disabled,\n icon,\n label,\n loading = false,\n size = \"default\",\n type,\n variant = \"secondary\",\n ...props\n}: IconButtonProps): ReactElement => (\n <button\n {...props}\n aria-busy={loading ? \"true\" : undefined}\n aria-label={requireText(label, \"IconButton label\")}\n className={classNames(\n style(\"root\"),\n RLY_ICON_BUTTON_VARIANTS.variant[variant].className,\n RLY_ICON_BUTTON_VARIANTS.size[size].className,\n className\n )}\n data-loading={loading ? \"true\" : undefined}\n disabled={disabled || loading}\n type={type ?? \"button\"}\n >\n <Icon decorative name={loading ? \"loader\" : icon} size={size === \"compact\" ? \"small\" : \"default\"} />\n </button>\n)\n","@layer rly.components {\n .root {\n box-sizing: border-box;\n color: var(--rly-color-text-1);\n max-inline-size: 100%;\n min-inline-size: var(--rly-space-0);\n }\n\n .tonePrimary {\n background: var(--rly-color-surface-1);\n border: 1px solid var(--rly-color-border-1);\n }\n .toneSecondary {\n background: var(--rly-color-surface-2);\n }\n .toneTertiary {\n background: var(--rly-color-surface-3);\n }\n .shapeCard {\n border-radius: var(--rly-radius-control);\n }\n .shapeGrouped {\n border-radius: var(--rly-radius-group);\n }\n .paddingNone {\n padding: var(--rly-space-0);\n }\n .paddingCompact {\n padding: var(--rly-space-16);\n }\n .paddingDefault {\n padding: var(--rly-space-24);\n }\n .paddingSpacious {\n padding: var(--rly-space-32);\n }\n}\n","import { createElement, type ComponentPropsWithoutRef, type ReactElement, type ReactNode, type Ref } from \"react\"\nimport { classNames, cssClass, defineVariants } from \"../internal/component.js\"\nimport styles from \"./Surface.module.css\"\n\nconst style = (name: string): string => cssClass(styles, name)\nexport const RLY_SURFACE_VARIANTS = defineVariants({\n tone: {\n primary: {\n className: style(\"tonePrimary\"),\n purpose: \"Primary bordered surface\",\n tokens: [\"color-surface-1\", \"color-border-1\"]\n },\n secondary: { className: style(\"toneSecondary\"), purpose: \"Quiet secondary surface\", tokens: [\"color-surface-2\"] },\n tertiary: { className: style(\"toneTertiary\"), purpose: \"Inset tertiary surface\", tokens: [\"color-surface-3\"] }\n },\n form: {\n card: { className: style(\"shapeCard\"), purpose: \"Standard card geometry\", tokens: [\"radius-control\"] },\n grouped: { className: style(\"shapeGrouped\"), purpose: \"Grouped content geometry\", tokens: [\"radius-group\"] }\n },\n padding: {\n none: { className: style(\"paddingNone\"), purpose: \"Caller-owned internal layout\", tokens: [\"space-0\"] },\n compact: { className: style(\"paddingCompact\"), purpose: \"Dense supporting content\", tokens: [\"space-16\"] },\n default: { className: style(\"paddingDefault\"), purpose: \"Standard content\", tokens: [\"space-24\"] },\n spacious: { className: style(\"paddingSpacious\"), purpose: \"Prominent grouped content\", tokens: [\"space-32\"] }\n }\n})\nexport const RLY_SURFACE_DEFAULT_VARIANTS = defineVariants({ tone: \"primary\", form: \"card\", padding: \"default\" })\nexport type RlySurfaceTone = keyof typeof RLY_SURFACE_VARIANTS.tone\nexport type RlySurfaceForm = keyof typeof RLY_SURFACE_VARIANTS.form\nexport type RlySurfacePadding = keyof typeof RLY_SURFACE_VARIANTS.padding\nexport type RlySurfaceElement = \"div\" | \"section\" | \"article\" | \"aside\"\n\ntype RefTarget<Value> = Value extends Ref<infer Target> ? Target : never\ntype ExactRef<Expected, Value> =\n Value extends Ref<Expected> ? (Expected extends RefTarget<Value> ? Value : never) : never\n\nexport type SurfaceProps<\n Element extends RlySurfaceElement = \"div\",\n ElementRef extends Ref<HTMLElementTagNameMap[Element]> = Ref<HTMLElementTagNameMap[Element]>\n> = Omit<ComponentPropsWithoutRef<Element>, \"children\" | \"color\"> & {\n readonly as?: Element\n readonly children: ReactNode\n readonly padding?: RlySurfacePadding\n readonly ref?: ExactRef<HTMLElementTagNameMap[Element], ElementRef>\n readonly form?: RlySurfaceForm\n readonly tone?: RlySurfaceTone\n}\n\n/** Render a quiet, non-interactive structural surface without elevation semantics. */\nexport const Surface = <\n const Element extends RlySurfaceElement = \"div\",\n ElementRef extends Ref<HTMLElementTagNameMap[Element]> = Ref<HTMLElementTagNameMap[Element]>\n>({\n as,\n children,\n className,\n form = \"card\",\n padding = \"default\",\n ref,\n tone = \"primary\",\n ...props\n}: SurfaceProps<Element, ElementRef>): ReactElement =>\n createElement(\n as ?? \"div\",\n {\n ...props,\n className: classNames(\n style(\"root\"),\n RLY_SURFACE_VARIANTS.tone[tone].className,\n RLY_SURFACE_VARIANTS.form[form].className,\n RLY_SURFACE_VARIANTS.padding[padding].className,\n className\n ),\n ref\n },\n children\n )\n","@layer rly.components {\n .root {\n max-inline-size: 100%;\n min-inline-size: var(--rly-space-0);\n }\n\n .list {\n align-items: stretch;\n background: var(--rly-color-surface-2);\n border-radius: var(--rly-radius-field);\n display: flex;\n flex-wrap: wrap;\n gap: var(--rly-space-2);\n max-inline-size: 100%;\n padding: var(--rly-space-4);\n }\n\n .trigger {\n appearance: none;\n background: var(--rly-color-surface-2);\n border: var(--rly-space-0);\n border-radius: var(--rly-radius-tag);\n color: var(--rly-color-text-2);\n cursor: pointer;\n flex: 1 1 10rem;\n max-inline-size: 100%;\n min-inline-size: var(--rly-space-0);\n overflow-wrap: anywhere;\n padding: var(--rly-space-8) var(--rly-space-12);\n position: relative;\n text-align: center;\n }\n\n .trigger::after {\n background: var(--rly-color-action-background);\n block-size: var(--rly-space-2);\n border-radius: var(--rly-radius-round);\n content: \"\";\n inset-block-end: var(--rly-space-2);\n inset-inline: var(--rly-space-12);\n opacity: 0;\n position: absolute;\n }\n\n .trigger[data-state=\"active\"] {\n background: var(--rly-color-surface-1);\n color: var(--rly-color-text-1);\n }\n\n .trigger[data-state=\"active\"]::after {\n opacity: 1;\n }\n .trigger:disabled {\n cursor: not-allowed;\n opacity: 0.58;\n }\n\n .defaultSize .trigger {\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n min-block-size: calc(var(--rly-space-40) + var(--rly-space-4));\n }\n\n .large .trigger {\n font: var(--rly-type-body-weight) var(--rly-type-body-size) / var(--rly-type-body-line-height)\n var(--rly-type-body-font);\n min-block-size: var(--rly-space-48);\n padding-inline: var(--rly-space-16);\n }\n\n .panel {\n color: var(--rly-color-text-1);\n min-inline-size: var(--rly-space-0);\n padding-block-start: var(--rly-space-24);\n }\n\n @media (hover: hover) {\n .trigger:not(:disabled, [data-state=\"active\"]):hover {\n background: var(--rly-color-surface-3);\n color: var(--rly-color-text-1);\n }\n }\n}\n","import type { ComponentPropsWithRef, ReactElement, ReactNode } from \"react\"\nimport { Tabs as RadixTabs } from \"radix-ui\"\nimport { classNames, cssClass, defineVariants, requireText } from \"../internal/component.js\"\nimport styles from \"./Tabs.module.css\"\n\nconst style = (name: string): string => cssClass(styles, name)\n\nexport const RLY_TABS_VARIANTS = defineVariants({\n size: {\n default: {\n className: style(\"defaultSize\"),\n purpose: \"Standard section navigation\",\n tokens: [\"type-label\", \"space-40\", \"space-4\"]\n },\n large: {\n className: style(\"large\"),\n purpose: \"Prominent page-level navigation\",\n tokens: [\"type-body\", \"space-48\"]\n }\n }\n})\n\nexport const RLY_TABS_DEFAULT_VARIANTS = defineVariants({ size: \"default\" })\nexport type RlyTabsSize = keyof typeof RLY_TABS_VARIANTS.size\nexport type RlyTabsDirection = \"ltr\" | \"rtl\"\n\n/** One labelled tab and its presentation-only panel content. */\nexport interface RlyTabItem {\n readonly content: ReactNode\n readonly disabled?: boolean\n readonly label: string\n readonly value: string\n}\n\ntype TabsBaseProps = Omit<ComponentPropsWithRef<\"div\">, \"aria-label\" | \"children\" | \"defaultValue\" | \"dir\"> & {\n /** Accessible name for the tab list. */\n readonly \"aria-label\": string\n readonly direction?: RlyTabsDirection\n readonly items: ReadonlyArray<RlyTabItem>\n readonly size?: RlyTabsSize\n}\ntype ControlledTabsProps = TabsBaseProps & {\n readonly defaultValue?: never\n readonly onValueChange: (value: string) => void\n readonly value: string\n}\ntype DefaultTabsProps = TabsBaseProps & {\n readonly defaultValue?: string\n readonly onValueChange?: (value: string) => void\n readonly value?: never\n}\nexport type TabsProps = ControlledTabsProps | DefaultTabsProps\n\nconst validateItems = (items: ReadonlyArray<RlyTabItem>): RlyTabItem => {\n if (items.length === 0) throw new Error(\"Tabs items must contain at least one enabled tab\")\n\n const values = new Set<string>()\n let firstEnabled: RlyTabItem | undefined\n for (const item of items) {\n const value = requireText(item.value, \"Tab value\")\n requireText(item.label, `Tab label for ${value}`)\n if (values.has(value)) throw new Error(`Tabs item values must be unique: ${value}`)\n values.add(value)\n if (!item.disabled && firstEnabled === undefined) firstEnabled = item\n }\n\n if (firstEnabled === undefined) throw new Error(\"Tabs items must contain at least one enabled tab\")\n return firstEnabled\n}\n\n/** Render labelled, keyboard-navigable panels with controlled-first selection. */\nexport const Tabs = ({\n \"aria-label\": ariaLabel,\n className,\n defaultValue,\n direction,\n items,\n onValueChange,\n size = \"default\",\n value,\n ...props\n}: TabsProps): ReactElement => {\n const accessibleLabel = requireText(ariaLabel, \"Tabs aria-label\")\n const firstEnabled = validateItems(items)\n const selectedValue = value ?? defaultValue ?? firstEnabled.value\n const selectedItem = items.find((item) => item.value === selectedValue)\n if (selectedItem === undefined || selectedItem.disabled) {\n throw new Error(`Tabs selected value must identify an enabled tab: ${selectedValue}`)\n }\n\n const selectionProps =\n value === undefined\n ? onValueChange === undefined\n ? { defaultValue: selectedValue }\n : { defaultValue: selectedValue, onValueChange }\n : { onValueChange, value }\n const directionProps = direction === undefined ? {} : { dir: direction }\n\n return (\n <RadixTabs.Root\n {...props}\n {...selectionProps}\n {...directionProps}\n activationMode=\"automatic\"\n className={classNames(style(\"root\"), RLY_TABS_VARIANTS.size[size].className, className)}\n orientation=\"horizontal\"\n >\n <RadixTabs.List aria-label={accessibleLabel} className={style(\"list\")} loop>\n {items.map((item) => (\n <RadixTabs.Trigger className={style(\"trigger\")} disabled={item.disabled} key={item.value} value={item.value}>\n {item.label}\n </RadixTabs.Trigger>\n ))}\n </RadixTabs.List>\n {items.map((item) => (\n <RadixTabs.Content className={style(\"panel\")} key={item.value} value={item.value}>\n {item.content}\n </RadixTabs.Content>\n ))}\n </RadixTabs.Root>\n )\n}\n","@layer rly.components {\n .root {\n margin: var(--rly-space-0);\n min-inline-size: var(--rly-space-0);\n overflow-wrap: anywhere;\n }\n\n .verdict,\n .pageTitle,\n .sectionTitle,\n .cardTitle {\n text-wrap: balance;\n }\n\n .bodyLarge,\n .body {\n text-wrap: pretty;\n }\n\n .verdict {\n font: var(--rly-type-verdict-weight) var(--rly-type-verdict-size) / var(--rly-type-verdict-line-height)\n var(--rly-type-verdict-font);\n letter-spacing: var(--rly-type-verdict-tracking);\n }\n\n .pageTitle {\n font: var(--rly-type-page-title-weight) var(--rly-type-page-title-size) / var(--rly-type-page-title-line-height)\n var(--rly-type-page-title-font);\n letter-spacing: var(--rly-type-page-title-tracking);\n }\n\n .sectionTitle {\n font: var(--rly-type-section-title-weight) var(--rly-type-section-title-size) /\n var(--rly-type-section-title-line-height) var(--rly-type-section-title-font);\n letter-spacing: var(--rly-type-section-title-tracking);\n }\n\n .cardTitle {\n font: var(--rly-type-card-title-weight) var(--rly-type-card-title-size) / var(--rly-type-card-title-line-height)\n var(--rly-type-card-title-font);\n letter-spacing: var(--rly-type-card-title-tracking);\n }\n\n .bodyLarge {\n font: var(--rly-type-body-large-weight) var(--rly-type-body-large-size) / var(--rly-type-body-large-line-height)\n var(--rly-type-body-large-font);\n letter-spacing: var(--rly-type-body-large-tracking);\n }\n\n .body {\n font: var(--rly-type-body-weight) var(--rly-type-body-size) / var(--rly-type-body-line-height)\n var(--rly-type-body-font);\n letter-spacing: var(--rly-type-body-tracking);\n }\n\n .label {\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n letter-spacing: var(--rly-type-label-tracking);\n }\n\n .meta {\n font: var(--rly-type-meta-weight) var(--rly-type-meta-size) / var(--rly-type-meta-line-height)\n var(--rly-type-meta-font);\n letter-spacing: var(--rly-type-meta-tracking);\n }\n\n .code {\n font: var(--rly-type-code-weight) var(--rly-type-code-size) / var(--rly-type-code-line-height)\n var(--rly-type-code-font);\n font-variant-numeric: tabular-nums;\n letter-spacing: var(--rly-type-code-tracking);\n white-space: pre-wrap;\n }\n\n .tonePrimary {\n color: var(--rly-color-text-1);\n }\n .toneSecondary {\n color: var(--rly-color-text-2);\n }\n .toneTertiary {\n color: var(--rly-color-text-3);\n }\n .toneInherit {\n color: inherit;\n }\n}\n","import {\n createElement,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref\n} from \"react\"\nimport { classNames, cssClass, defineVariants } from \"../internal/component.js\"\nimport styles from \"./Text.module.css\"\n\nconst style = (name: string): string => cssClass(styles, name)\n\nexport const RLY_TEXT_VARIANTS = defineVariants({\n variant: {\n verdict: { className: style(\"verdict\"), purpose: \"One restrained verdict thesis\", tokens: [\"type-verdict\"] },\n \"page-title\": { className: style(\"pageTitle\"), purpose: \"Primary page title\", tokens: [\"type-page-title\"] },\n \"section-title\": { className: style(\"sectionTitle\"), purpose: \"Section heading\", tokens: [\"type-section-title\"] },\n \"card-title\": { className: style(\"cardTitle\"), purpose: \"Card or panel heading\", tokens: [\"type-card-title\"] },\n \"body-large\": { className: style(\"bodyLarge\"), purpose: \"Leading explanatory copy\", tokens: [\"type-body-large\"] },\n body: { className: style(\"body\"), purpose: \"Default interface copy\", tokens: [\"type-body\"] },\n label: { className: style(\"label\"), purpose: \"Control and metadata labels\", tokens: [\"type-label\"] },\n meta: { className: style(\"meta\"), purpose: \"Supporting metadata\", tokens: [\"type-meta\"] },\n code: { className: style(\"code\"), purpose: \"Code and tabular data\", tokens: [\"type-code\"] }\n },\n tone: {\n primary: { className: style(\"tonePrimary\"), purpose: \"Primary readable text\", tokens: [\"color-text-1\"] },\n secondary: { className: style(\"toneSecondary\"), purpose: \"Supporting text\", tokens: [\"color-text-2\"] },\n tertiary: { className: style(\"toneTertiary\"), purpose: \"Restricted tertiary text\", tokens: [\"color-text-3\"] },\n inherit: { className: style(\"toneInherit\"), purpose: \"Inherit semantic context\", tokens: [] }\n }\n})\n\nexport const RLY_TEXT_DEFAULT_VARIANTS = defineVariants({ variant: \"body\", tone: \"primary\" })\nexport type RlyTextVariant = keyof typeof RLY_TEXT_VARIANTS.variant\nexport type RlyTextTone = keyof typeof RLY_TEXT_VARIANTS.tone\nexport type RlyTextElement =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"p\"\n | \"span\"\n | \"strong\"\n | \"small\"\n | \"code\"\n | \"pre\"\n | \"time\"\n | \"li\"\n | \"dt\"\n | \"dd\"\n\ntype HeadingVariant = \"page-title\" | \"section-title\" | \"card-title\"\ntype HeadingElement = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"span\"\ntype OtherVariant = Exclude<RlyTextVariant, HeadingVariant>\ntype RefTarget<Value> = Value extends Ref<infer Target> ? Target : never\ntype ExactRef<Expected, Value> =\n Value extends Ref<Expected> ? (Expected extends RefTarget<Value> ? Value : never) : never\ntype TextOwnProps = {\n readonly children: ReactNode\n readonly tone?: RlyTextTone\n}\ntype ExplicitVariantProps<Element extends RlyTextElement> =\n { readonly variant?: OtherVariant } | (Element extends HeadingElement ? { readonly variant: HeadingVariant } : never)\ntype ExplicitTextProps<Element extends RlyTextElement, ElementRef extends Ref<HTMLElementTagNameMap[Element]>> = Omit<\n ComponentPropsWithoutRef<Element>,\n \"as\" | \"children\" | \"color\"\n> &\n TextOwnProps &\n ExplicitVariantProps<Element> & {\n readonly as: Element\n readonly ref?: ExactRef<HTMLElementTagNameMap[Element], ElementRef>\n }\ntype ImplicitTextProps = Omit<HTMLAttributes<HTMLElement>, \"children\" | \"color\"> &\n TextOwnProps & {\n readonly as?: never\n readonly ref?: never\n readonly variant?: OtherVariant\n }\nexport type TextProps<\n Element extends RlyTextElement = RlyTextElement,\n ElementRef extends Ref<HTMLElementTagNameMap[Element]> = Ref<HTMLElementTagNameMap[Element]>\n> = ExplicitTextProps<Element, ElementRef> | ImplicitTextProps\n\ntype TextComponent = <\n const Element extends RlyTextElement = RlyTextElement,\n ElementRef extends Ref<HTMLElementTagNameMap[Element]> = Ref<HTMLElementTagNameMap[Element]>\n>(\n props: TextProps<Element, ElementRef>\n) => ReactElement\ntype TextRuntimeProps = Omit<HTMLAttributes<HTMLElement>, \"color\"> &\n TextOwnProps & {\n readonly as?: RlyTextElement\n readonly ref?: Ref<HTMLElement>\n readonly variant?: RlyTextVariant\n }\n\nconst defaultElement = (variant: RlyTextVariant): RlyTextElement =>\n variant === \"code\" ? \"code\" : variant === \"verdict\" ? \"p\" : variant === \"label\" || variant === \"meta\" ? \"span\" : \"p\"\n\n/** Render semantic typography while keeping visual role separate from document structure. */\nconst renderText = ({\n as,\n children,\n className,\n ref,\n tone = RLY_TEXT_DEFAULT_VARIANTS.tone,\n variant = RLY_TEXT_DEFAULT_VARIANTS.variant,\n ...props\n}: TextRuntimeProps): ReactElement =>\n createElement(\n as ?? defaultElement(variant),\n {\n ...props,\n className: classNames(\n style(\"root\"),\n RLY_TEXT_VARIANTS.variant[variant].className,\n RLY_TEXT_VARIANTS.tone[tone].className,\n className\n ),\n ref\n },\n children\n )\n\nexport const Text: TextComponent = renderText\n"],"mappings":"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"}
|
package/package.json
CHANGED
package/registry/components.json
CHANGED
|
@@ -2835,6 +2835,117 @@
|
|
|
2835
2835
|
"status": "stable",
|
|
2836
2836
|
"variants": []
|
|
2837
2837
|
},
|
|
2838
|
+
{
|
|
2839
|
+
"accessibility": {
|
|
2840
|
+
"automatedChecks": true,
|
|
2841
|
+
"requirements": [
|
|
2842
|
+
"Provide a programmatic name for interactive or informative content",
|
|
2843
|
+
"Preserve keyboard access, focus visibility, and color-independent meaning"
|
|
2844
|
+
],
|
|
2845
|
+
"standard": "WCAG 2.2 AA"
|
|
2846
|
+
},
|
|
2847
|
+
"capabilities": [
|
|
2848
|
+
"agent",
|
|
2849
|
+
"conversation",
|
|
2850
|
+
"overlay",
|
|
2851
|
+
"select"
|
|
2852
|
+
],
|
|
2853
|
+
"category": "pattern",
|
|
2854
|
+
"compatibleTokens": [
|
|
2855
|
+
"color",
|
|
2856
|
+
"motion",
|
|
2857
|
+
"radius",
|
|
2858
|
+
"space",
|
|
2859
|
+
"type"
|
|
2860
|
+
],
|
|
2861
|
+
"docs": {
|
|
2862
|
+
"autogenerated": true,
|
|
2863
|
+
"storyId": "patterns-relaydock--interaction",
|
|
2864
|
+
"storyPath": "?path=/story/patterns-relaydock--interaction"
|
|
2865
|
+
},
|
|
2866
|
+
"example": "import { RelayDock } from \"@knpkv/rly/patterns\"",
|
|
2867
|
+
"exports": [
|
|
2868
|
+
{
|
|
2869
|
+
"kind": "value",
|
|
2870
|
+
"name": "RelayDock"
|
|
2871
|
+
},
|
|
2872
|
+
{
|
|
2873
|
+
"kind": "type",
|
|
2874
|
+
"name": "RelayDockProps"
|
|
2875
|
+
},
|
|
2876
|
+
{
|
|
2877
|
+
"kind": "type",
|
|
2878
|
+
"name": "RlyRelayDockContextChip"
|
|
2879
|
+
},
|
|
2880
|
+
{
|
|
2881
|
+
"kind": "type",
|
|
2882
|
+
"name": "RlyRelayDockDesktopPresentation"
|
|
2883
|
+
},
|
|
2884
|
+
{
|
|
2885
|
+
"kind": "type",
|
|
2886
|
+
"name": "RlyRelayDockSelection"
|
|
2887
|
+
},
|
|
2888
|
+
{
|
|
2889
|
+
"kind": "type",
|
|
2890
|
+
"name": "RlyRelayDockSelectionControl"
|
|
2891
|
+
},
|
|
2892
|
+
{
|
|
2893
|
+
"kind": "type",
|
|
2894
|
+
"name": "RlyRelayDockState"
|
|
2895
|
+
}
|
|
2896
|
+
],
|
|
2897
|
+
"files": {
|
|
2898
|
+
"source": "src/patterns/RelayDock.tsx",
|
|
2899
|
+
"story": "stories/patterns/RelayDock.stories.tsx",
|
|
2900
|
+
"styles": [
|
|
2901
|
+
"src/patterns/RelayDock.module.css"
|
|
2902
|
+
],
|
|
2903
|
+
"tests": [
|
|
2904
|
+
"test/patterns/RelayDock.test.tsx"
|
|
2905
|
+
]
|
|
2906
|
+
},
|
|
2907
|
+
"importPath": "@knpkv/rly/patterns",
|
|
2908
|
+
"name": "RelayDock",
|
|
2909
|
+
"props": {
|
|
2910
|
+
"defaults": {
|
|
2911
|
+
"desktopPresentation": "overlay"
|
|
2912
|
+
},
|
|
2913
|
+
"types": [
|
|
2914
|
+
"RelayDockProps"
|
|
2915
|
+
]
|
|
2916
|
+
},
|
|
2917
|
+
"purpose": "Present one adapter-owned Relay thread in explicit page context",
|
|
2918
|
+
"slots": [],
|
|
2919
|
+
"states": [
|
|
2920
|
+
"collapsed",
|
|
2921
|
+
"default",
|
|
2922
|
+
"empty",
|
|
2923
|
+
"error",
|
|
2924
|
+
"loading",
|
|
2925
|
+
"overlay",
|
|
2926
|
+
"rail",
|
|
2927
|
+
"ready",
|
|
2928
|
+
"unavailable"
|
|
2929
|
+
],
|
|
2930
|
+
"status": "experimental",
|
|
2931
|
+
"variants": [
|
|
2932
|
+
{
|
|
2933
|
+
"defaultValue": "overlay",
|
|
2934
|
+
"description": "Controls the desktopPresentation presentation axis of RelayDock.",
|
|
2935
|
+
"name": "desktopPresentation",
|
|
2936
|
+
"values": [
|
|
2937
|
+
{
|
|
2938
|
+
"description": "Use overlay for the desktopPresentation presentation.",
|
|
2939
|
+
"name": "overlay"
|
|
2940
|
+
},
|
|
2941
|
+
{
|
|
2942
|
+
"description": "Use rail for the desktopPresentation presentation.",
|
|
2943
|
+
"name": "rail"
|
|
2944
|
+
}
|
|
2945
|
+
]
|
|
2946
|
+
}
|
|
2947
|
+
]
|
|
2948
|
+
},
|
|
2838
2949
|
{
|
|
2839
2950
|
"accessibility": {
|
|
2840
2951
|
"automatedChecks": true,
|
package/registry/search.json
CHANGED
|
@@ -787,6 +787,42 @@
|
|
|
787
787
|
"table"
|
|
788
788
|
]
|
|
789
789
|
},
|
|
790
|
+
{
|
|
791
|
+
"capabilities": [
|
|
792
|
+
"agent",
|
|
793
|
+
"conversation",
|
|
794
|
+
"overlay",
|
|
795
|
+
"select"
|
|
796
|
+
],
|
|
797
|
+
"category": "pattern",
|
|
798
|
+
"importPath": "@knpkv/rly/patterns",
|
|
799
|
+
"name": "RelayDock",
|
|
800
|
+
"states": [
|
|
801
|
+
"collapsed",
|
|
802
|
+
"default",
|
|
803
|
+
"empty",
|
|
804
|
+
"error",
|
|
805
|
+
"loading",
|
|
806
|
+
"ready",
|
|
807
|
+
"unavailable"
|
|
808
|
+
],
|
|
809
|
+
"terms": [
|
|
810
|
+
"agent",
|
|
811
|
+
"collapsed",
|
|
812
|
+
"conversation",
|
|
813
|
+
"desktopPresentation",
|
|
814
|
+
"empty",
|
|
815
|
+
"error",
|
|
816
|
+
"loading",
|
|
817
|
+
"overlay",
|
|
818
|
+
"pattern",
|
|
819
|
+
"rail",
|
|
820
|
+
"ready",
|
|
821
|
+
"relaydock",
|
|
822
|
+
"select",
|
|
823
|
+
"unavailable"
|
|
824
|
+
]
|
|
825
|
+
},
|
|
790
826
|
{
|
|
791
827
|
"capabilities": [
|
|
792
828
|
"inspect",
|