xyne-components 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,530 @@
1
+ // src/ListItem/ListItem.tsx
2
+ import React from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ var ListItem = React.forwardRef(
5
+ ({
6
+ label,
7
+ subtext,
8
+ selected,
9
+ active,
10
+ showBar = true,
11
+ leading,
12
+ trailing,
13
+ disabled,
14
+ className,
15
+ ...rest
16
+ }, ref) => /* @__PURE__ */ jsxs(
17
+ "button",
18
+ {
19
+ ref,
20
+ type: "button",
21
+ ...rest,
22
+ className: `xc-list-item${className ? ` ${className}` : ""}`,
23
+ disabled,
24
+ "data-selected": selected || void 0,
25
+ "data-active": active || void 0,
26
+ "data-disabled": disabled || void 0,
27
+ children: [
28
+ showBar && /* @__PURE__ */ jsx("span", { className: "xc-list-item__bar", "aria-hidden": "true" }),
29
+ leading != null && /* @__PURE__ */ jsx("span", { className: "xc-list-item__leading", "aria-hidden": "true", children: leading }),
30
+ /* @__PURE__ */ jsxs("span", { className: "xc-list-item__text", children: [
31
+ /* @__PURE__ */ jsx("span", { className: "xc-list-item__label", children: label }),
32
+ subtext != null && /* @__PURE__ */ jsx("span", { className: "xc-list-item__subtext", children: subtext })
33
+ ] }),
34
+ trailing != null && /* @__PURE__ */ jsx("span", { className: "xc-list-item__trailing", "aria-hidden": "true", children: trailing })
35
+ ]
36
+ }
37
+ )
38
+ );
39
+ ListItem.displayName = "ListItem";
40
+
41
+ // src/Badge/Badge.tsx
42
+ import React2 from "react";
43
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
44
+ var Badge = React2.forwardRef(
45
+ ({ children, variant = "badge", icon, className, style, ...rest }, ref) => /* @__PURE__ */ jsxs2(
46
+ "span",
47
+ {
48
+ ref,
49
+ ...rest,
50
+ className: `xc-badge${className ? ` ${className}` : ""}`,
51
+ "data-variant": variant,
52
+ style,
53
+ children: [
54
+ variant === "badge" && icon != null && /* @__PURE__ */ jsx2("span", { className: "xc-badge__icon", "aria-hidden": "true", children: icon }),
55
+ variant === "badge" && children
56
+ ]
57
+ }
58
+ )
59
+ );
60
+ Badge.displayName = "Badge";
61
+
62
+ // src/Label/Label.tsx
63
+ import React3 from "react";
64
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
65
+ var Label = React3.forwardRef(
66
+ ({ children, variant = "closed", leading, trailing, className, ...rest }, ref) => /* @__PURE__ */ jsxs3(
67
+ "button",
68
+ {
69
+ ref,
70
+ type: "button",
71
+ ...rest,
72
+ className: `xc-label${className ? ` ${className}` : ""}`,
73
+ "data-variant": variant,
74
+ children: [
75
+ leading != null && /* @__PURE__ */ jsx3("span", { className: "xc-label__leading", "aria-hidden": "true", children: leading }),
76
+ /* @__PURE__ */ jsx3("span", { className: "xc-label__text", children: /* @__PURE__ */ jsx3("span", { className: "xc-label__content", children }) }),
77
+ trailing != null && /* @__PURE__ */ jsx3("span", { className: "xc-label__trailing", "aria-hidden": "true", children: trailing })
78
+ ]
79
+ }
80
+ )
81
+ );
82
+ Label.displayName = "Label";
83
+
84
+ // src/Directory/Directory.tsx
85
+ import React4 from "react";
86
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
87
+ var Directory = React4.forwardRef(
88
+ ({
89
+ label,
90
+ variant = "closed",
91
+ leading,
92
+ trailing,
93
+ onHeaderClick,
94
+ children,
95
+ className,
96
+ ...rest
97
+ }, ref) => /* @__PURE__ */ jsxs4(
98
+ "div",
99
+ {
100
+ ref,
101
+ ...rest,
102
+ className: `xc-directory${className ? ` ${className}` : ""}`,
103
+ "data-variant": variant,
104
+ children: [
105
+ /* @__PURE__ */ jsxs4(
106
+ "button",
107
+ {
108
+ type: "button",
109
+ className: "xc-directory__header",
110
+ onClick: onHeaderClick,
111
+ children: [
112
+ leading != null && /* @__PURE__ */ jsx4("span", { className: "xc-directory__leading", "aria-hidden": "true", children: leading }),
113
+ /* @__PURE__ */ jsx4("span", { className: "xc-directory__text", children: /* @__PURE__ */ jsx4("span", { className: "xc-directory__label", children: label }) }),
114
+ trailing != null && /* @__PURE__ */ jsx4("span", { className: "xc-directory__trailing", "aria-hidden": "true", children: trailing })
115
+ ]
116
+ }
117
+ ),
118
+ variant === "opened" && children != null && /* @__PURE__ */ jsx4("div", { className: "xc-directory__content", children })
119
+ ]
120
+ }
121
+ )
122
+ );
123
+ Directory.displayName = "Directory";
124
+
125
+ // src/theme/defaultTheme.ts
126
+ var DEFAULT_THEME = {
127
+ colors: {
128
+ orange: {
129
+ "50": "#fff7ed",
130
+ "100": "#ffedd4",
131
+ "200": "#ffd6a8",
132
+ "300": "#ffb86a",
133
+ "400": "#ff8904",
134
+ "500": "#fe6d36",
135
+ "600": "#ea580c",
136
+ "700": "#c2410c"
137
+ },
138
+ gray: {
139
+ "25": "#f6f8fa",
140
+ "50": "#f9fafb",
141
+ "100": "#f2f4f7",
142
+ "200": "#e4e7ec",
143
+ "300": "#d0d5dd",
144
+ "400": "#98a2b3",
145
+ "500": "#667085",
146
+ "600": "#475467",
147
+ "700": "#344054",
148
+ "800": "#1d2939",
149
+ "900": "#101828"
150
+ },
151
+ red: {
152
+ "50": "#fef3f2",
153
+ "500": "#f04438",
154
+ "600": "#d92d20",
155
+ "700": "#b42318"
156
+ },
157
+ green: {
158
+ "50": "#ecfdf3",
159
+ "500": "#12b76a",
160
+ "600": "#039855",
161
+ "700": "#027a48"
162
+ },
163
+ yellow: {
164
+ "50": "#fffaeb",
165
+ "500": "#f79009",
166
+ "600": "#dc6803",
167
+ "700": "#b54708"
168
+ },
169
+ blue: {
170
+ "50": "#eff8ff",
171
+ "500": "#2e90fa",
172
+ "600": "#1570ef",
173
+ "700": "#175cd3"
174
+ },
175
+ purple: {
176
+ "50": "#f9f5ff",
177
+ "500": "#9e77ed",
178
+ "600": "#7f56d9",
179
+ "700": "#6941c6"
180
+ },
181
+ teal: {
182
+ "50": "#f0fdf9",
183
+ "500": "#15b79e",
184
+ "600": "#0e9384",
185
+ "700": "#107569"
186
+ }
187
+ },
188
+ text: {
189
+ primary: "#101828",
190
+ secondary: "#475467",
191
+ tertiary: "#667085",
192
+ disabled: "#c9d0db",
193
+ brand: "#e8601a",
194
+ inverse: "#f1f5f9",
195
+ error: "#d92d20",
196
+ success: "#039855",
197
+ warning: "#b54708"
198
+ },
199
+ bg: {
200
+ white: "#ffffff",
201
+ subtle: "#f9fafb",
202
+ surfaceHover: "#f1f5f9",
203
+ brand: "#fff4ee",
204
+ error: "#fef3f2",
205
+ success: "#ecfdf3",
206
+ warning: "#fffaeb",
207
+ neutral: "#f9fafb",
208
+ purple: "#f9f5ff",
209
+ blue: "#eff8ff",
210
+ teal: "#f0fdf9"
211
+ },
212
+ border: {
213
+ default: "#d6dce6",
214
+ subtle: "#f1f5f9",
215
+ strong: "#98a2b3",
216
+ brand: "#fe6d36",
217
+ error: "#fda29b"
218
+ },
219
+ shadow: {
220
+ xs: "0 1px 2px 0 rgba(16, 24, 40, 0.05)",
221
+ sm: "0 1px 3px 0 rgba(16, 24, 40, 0.1), 0 1px 2px -1px rgba(16, 24, 40, 0.1)",
222
+ md: "0 4px 6px -1px rgba(16, 24, 40, 0.1), 0 2px 4px -2px rgba(16, 24, 40, 0.1)",
223
+ pressed: "inset 0 0 4px 0 rgba(0, 0, 0, 0.15)"
224
+ },
225
+ radius: {
226
+ xs: "2px",
227
+ sm: "4px",
228
+ md: "8px",
229
+ lg: "12px",
230
+ xl: "16px",
231
+ full: "9999px"
232
+ },
233
+ spacing: {
234
+ "0": "0px",
235
+ "1": "2px",
236
+ "2": "4px",
237
+ "3": "6px",
238
+ "4": "8px",
239
+ "5": "10px",
240
+ "6": "12px",
241
+ "7": "14px",
242
+ "8": "16px",
243
+ "9": "18px",
244
+ "10": "20px",
245
+ "12": "24px",
246
+ "16": "32px"
247
+ },
248
+ fontFamily: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
249
+ fontWeight: {
250
+ regular: "400",
251
+ medium: "500",
252
+ semibold: "600",
253
+ bold: "700"
254
+ },
255
+ fontSize: {
256
+ "2xs": "10px",
257
+ xs: "11px",
258
+ sm: "12px",
259
+ md: "14px",
260
+ lg: "16px",
261
+ xl: "18px"
262
+ },
263
+ lineHeight: {
264
+ "2xs": "14px",
265
+ xs: "16px",
266
+ sm: "18px",
267
+ md: "20px",
268
+ lg: "24px",
269
+ xl: "28px"
270
+ },
271
+ other: {},
272
+ components: {}
273
+ };
274
+
275
+ // src/theme/createTheme.ts
276
+ function isPlainObject(value) {
277
+ return value !== null && typeof value === "object" && !Array.isArray(value);
278
+ }
279
+ function deepMerge(target, source) {
280
+ const result = { ...target };
281
+ for (const key of Object.keys(source)) {
282
+ if (isPlainObject(source[key]) && isPlainObject(target[key])) {
283
+ result[key] = deepMerge(
284
+ target[key],
285
+ source[key]
286
+ );
287
+ } else {
288
+ result[key] = source[key];
289
+ }
290
+ }
291
+ return result;
292
+ }
293
+ function createTheme(override) {
294
+ return deepMerge(
295
+ DEFAULT_THEME,
296
+ override
297
+ );
298
+ }
299
+
300
+ // src/theme/ThemeProvider.tsx
301
+ import { useMemo as useMemo2 } from "react";
302
+
303
+ // src/theme/ThemeContext.ts
304
+ import { createContext } from "react";
305
+ var ThemeContext = createContext(DEFAULT_THEME);
306
+
307
+ // src/theme/ColorSchemeProvider.tsx
308
+ import { useState, useEffect, useMemo, useCallback } from "react";
309
+
310
+ // src/theme/ColorSchemeContext.ts
311
+ import { createContext as createContext2 } from "react";
312
+ var ColorSchemeContext = createContext2({
313
+ colorScheme: "light",
314
+ resolvedColorScheme: "light",
315
+ setColorScheme: () => {
316
+ },
317
+ toggleColorScheme: () => {
318
+ }
319
+ });
320
+
321
+ // src/theme/ColorSchemeProvider.tsx
322
+ import { jsx as jsx5 } from "react/jsx-runtime";
323
+ var STORAGE_KEY = "xc-color-scheme";
324
+ function getSystemPreference() {
325
+ if (typeof window === "undefined") return "light";
326
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
327
+ }
328
+ function readStorage() {
329
+ if (typeof window === "undefined") return null;
330
+ try {
331
+ const stored = window.localStorage.getItem(STORAGE_KEY);
332
+ if (stored === "light" || stored === "dark" || stored === "auto") return stored;
333
+ } catch {
334
+ }
335
+ return null;
336
+ }
337
+ function applyToDOM(resolved, getRootElement) {
338
+ if (typeof document === "undefined") return;
339
+ const root = getRootElement ? getRootElement() : document.documentElement;
340
+ if (root) root.setAttribute("data-theme", resolved);
341
+ }
342
+ function ColorSchemeProvider({
343
+ defaultColorScheme = "light",
344
+ forceColorScheme,
345
+ storageKey = STORAGE_KEY,
346
+ getRootElement,
347
+ children
348
+ }) {
349
+ const [colorScheme, setColorSchemeRaw] = useState(() => {
350
+ if (forceColorScheme) return forceColorScheme;
351
+ if (typeof window !== "undefined" && storageKey !== STORAGE_KEY) {
352
+ try {
353
+ const v = window.localStorage.getItem(storageKey);
354
+ if (v === "light" || v === "dark" || v === "auto") return v;
355
+ } catch {
356
+ }
357
+ }
358
+ return readStorage() ?? defaultColorScheme;
359
+ });
360
+ const [systemPreference, setSystemPreference] = useState(getSystemPreference);
361
+ const resolvedColorScheme = forceColorScheme ?? (colorScheme === "auto" ? systemPreference : colorScheme);
362
+ useEffect(() => {
363
+ if (typeof window === "undefined") return;
364
+ const mq = window.matchMedia("(prefers-color-scheme: dark)");
365
+ const handler = (e) => {
366
+ setSystemPreference(e.matches ? "dark" : "light");
367
+ };
368
+ mq.addEventListener("change", handler);
369
+ return () => mq.removeEventListener("change", handler);
370
+ }, []);
371
+ useEffect(() => {
372
+ if (typeof window === "undefined") return;
373
+ const handler = (e) => {
374
+ if (e.key !== storageKey) return;
375
+ const val = e.newValue;
376
+ if (val === "light" || val === "dark" || val === "auto") {
377
+ setColorSchemeRaw(val);
378
+ }
379
+ };
380
+ window.addEventListener("storage", handler);
381
+ return () => window.removeEventListener("storage", handler);
382
+ }, [storageKey]);
383
+ useEffect(() => {
384
+ applyToDOM(resolvedColorScheme, getRootElement);
385
+ }, [resolvedColorScheme, getRootElement]);
386
+ const setColorScheme = useCallback((scheme) => {
387
+ if (forceColorScheme) return;
388
+ setColorSchemeRaw(scheme);
389
+ try {
390
+ window.localStorage.setItem(storageKey, scheme);
391
+ } catch {
392
+ }
393
+ }, [forceColorScheme, storageKey]);
394
+ const toggleColorScheme = useCallback(() => {
395
+ setColorScheme(resolvedColorScheme === "dark" ? "light" : "dark");
396
+ }, [resolvedColorScheme, setColorScheme]);
397
+ const value = useMemo(() => ({
398
+ colorScheme,
399
+ resolvedColorScheme,
400
+ setColorScheme,
401
+ toggleColorScheme
402
+ }), [colorScheme, resolvedColorScheme, setColorScheme, toggleColorScheme]);
403
+ return /* @__PURE__ */ jsx5(ColorSchemeContext.Provider, { value, children });
404
+ }
405
+
406
+ // src/theme/ThemeProvider.tsx
407
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
408
+ function camelToKebab(str) {
409
+ return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
410
+ }
411
+ function themeOverrideToCssVars(override) {
412
+ const vars = {};
413
+ if (override.colors) {
414
+ for (const [scale, shades] of Object.entries(override.colors)) {
415
+ for (const [shade, value] of Object.entries(shades)) {
416
+ vars[`--xc-color-${camelToKebab(scale)}-${shade}`] = value;
417
+ }
418
+ }
419
+ }
420
+ if (override.text) {
421
+ for (const [key, value] of Object.entries(override.text)) {
422
+ vars[`--xc-color-text-${camelToKebab(key)}`] = value;
423
+ }
424
+ }
425
+ if (override.bg) {
426
+ for (const [key, value] of Object.entries(override.bg)) {
427
+ vars[`--xc-color-bg-${camelToKebab(key)}`] = value;
428
+ }
429
+ }
430
+ if (override.border) {
431
+ for (const [key, value] of Object.entries(override.border)) {
432
+ vars[`--xc-color-border-${camelToKebab(key)}`] = value;
433
+ }
434
+ }
435
+ if (override.shadow) {
436
+ for (const [key, value] of Object.entries(override.shadow)) {
437
+ vars[`--xc-shadow-${camelToKebab(key)}`] = value;
438
+ }
439
+ }
440
+ if (override.radius) {
441
+ for (const [key, value] of Object.entries(override.radius)) {
442
+ vars[`--xc-radius-${camelToKebab(key)}`] = value;
443
+ }
444
+ }
445
+ if (override.spacing) {
446
+ for (const [key, value] of Object.entries(override.spacing)) {
447
+ vars[`--xc-space-${key}`] = value;
448
+ }
449
+ }
450
+ if (override.fontFamily) {
451
+ vars["--xc-font-family"] = override.fontFamily;
452
+ }
453
+ if (override.fontWeight) {
454
+ for (const [key, value] of Object.entries(override.fontWeight)) {
455
+ vars[`--xc-font-weight-${camelToKebab(key)}`] = value;
456
+ }
457
+ }
458
+ if (override.fontSize) {
459
+ for (const [key, value] of Object.entries(override.fontSize)) {
460
+ vars[`--xc-font-size-${key}`] = value;
461
+ }
462
+ }
463
+ if (override.lineHeight) {
464
+ for (const [key, value] of Object.entries(override.lineHeight)) {
465
+ vars[`--xc-line-height-${key}`] = value;
466
+ }
467
+ }
468
+ return vars;
469
+ }
470
+ function ThemeProvider({
471
+ theme: themeOverride = {},
472
+ cssVariablesSelector = ":root",
473
+ defaultColorScheme = "light",
474
+ forceColorScheme,
475
+ colorSchemeStorageKey,
476
+ getRootElement,
477
+ children
478
+ }) {
479
+ const resolvedTheme = useMemo2(
480
+ () => createTheme(themeOverride),
481
+ [themeOverride]
482
+ );
483
+ const cssText = useMemo2(() => {
484
+ const vars = themeOverrideToCssVars(themeOverride);
485
+ const entries = Object.entries(vars);
486
+ if (entries.length === 0) return "";
487
+ const declarations = entries.map(([k, v]) => ` ${k}: ${v};`).join("\n");
488
+ return `${cssVariablesSelector} {
489
+ ${declarations}
490
+ }`;
491
+ }, [themeOverride, cssVariablesSelector]);
492
+ return /* @__PURE__ */ jsx6(
493
+ ColorSchemeProvider,
494
+ {
495
+ defaultColorScheme,
496
+ forceColorScheme,
497
+ storageKey: colorSchemeStorageKey,
498
+ getRootElement,
499
+ children: /* @__PURE__ */ jsxs5(ThemeContext.Provider, { value: resolvedTheme, children: [
500
+ cssText && /* @__PURE__ */ jsx6("style", { "data-xc-theme": "", children: cssText }),
501
+ children
502
+ ] })
503
+ }
504
+ );
505
+ }
506
+
507
+ // src/theme/useTheme.ts
508
+ import { useContext } from "react";
509
+ function useTheme() {
510
+ return useContext(ThemeContext);
511
+ }
512
+
513
+ // src/theme/useColorScheme.ts
514
+ import { useContext as useContext2 } from "react";
515
+ function useColorScheme() {
516
+ return useContext2(ColorSchemeContext);
517
+ }
518
+ export {
519
+ Badge,
520
+ ColorSchemeProvider,
521
+ DEFAULT_THEME,
522
+ Directory,
523
+ Label,
524
+ ListItem,
525
+ ThemeProvider,
526
+ createTheme,
527
+ useColorScheme,
528
+ useTheme
529
+ };
530
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ListItem/ListItem.tsx","../src/Badge/Badge.tsx","../src/Label/Label.tsx","../src/Directory/Directory.tsx","../src/theme/defaultTheme.ts","../src/theme/createTheme.ts","../src/theme/ThemeProvider.tsx","../src/theme/ThemeContext.ts","../src/theme/ColorSchemeProvider.tsx","../src/theme/ColorSchemeContext.ts","../src/theme/useTheme.ts","../src/theme/useColorScheme.ts"],"sourcesContent":["import React from 'react'\n\nexport interface ListItemProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Primary label text */\n label: string\n /** Optional secondary line below the label */\n subtext?: string\n /** Item is visually selected */\n selected?: boolean\n /** Item is active (keyboard-highlighted / current) */\n active?: boolean\n /** Show the left vertical bar indicator @default true */\n showBar?: boolean\n /** 16×16 slot before the label */\n leading?: React.ReactNode\n /** 16×16 slot after the label */\n trailing?: React.ReactNode\n}\n\nexport const ListItem = React.forwardRef<HTMLButtonElement, ListItemProps>(\n (\n {\n label,\n subtext,\n selected,\n active,\n showBar = true,\n leading,\n trailing,\n disabled,\n className,\n ...rest\n },\n ref,\n ) => (\n <button\n ref={ref}\n type=\"button\"\n {...rest}\n className={`xc-list-item${className ? ` ${className}` : ''}`}\n disabled={disabled}\n // data attributes drive CSS state — no class modifiers\n data-selected={selected || undefined}\n data-active={active || undefined}\n data-disabled={disabled || undefined}\n >\n {showBar && <span className=\"xc-list-item__bar\" aria-hidden=\"true\" />}\n\n {leading != null && (\n <span className=\"xc-list-item__leading\" aria-hidden=\"true\">\n {leading}\n </span>\n )}\n\n <span className=\"xc-list-item__text\">\n <span className=\"xc-list-item__label\">{label}</span>\n {subtext != null && (\n <span className=\"xc-list-item__subtext\">{subtext}</span>\n )}\n </span>\n\n {trailing != null && (\n <span className=\"xc-list-item__trailing\" aria-hidden=\"true\">\n {trailing}\n </span>\n )}\n </button>\n ),\n)\n\nListItem.displayName = 'ListItem'\n","import React from 'react'\n\nexport type BadgeVariant = 'badge' | 'dot'\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n /** Visual variant: \"badge\" (pill with count/text) or \"dot\" (tiny status indicator) @default 'badge' */\n variant?: BadgeVariant\n /** 12×12 icon slot, shown before the text (only for type=\"badge\") */\n icon?: React.ReactNode\n}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ children, variant = 'badge', icon, className, style, ...rest }, ref) => (\n <span\n ref={ref}\n {...rest}\n className={`xc-badge${className ? ` ${className}` : ''}`}\n data-variant={variant}\n style={style}\n >\n {variant === 'badge' && icon != null && (\n <span className=\"xc-badge__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {variant === 'badge' && children}\n </span>\n ),\n)\n\nBadge.displayName = 'Badge'\n","import React from 'react'\n\nexport type LabelVariant = 'opened' | 'closed'\n\nexport interface LabelProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'type'> {\n children: React.ReactNode\n /** Visual variant: \"opened\" (primary text) or \"closed\" (secondary text) @default 'closed' */\n variant?: LabelVariant\n /** 16×16 slot before the label text */\n leading?: React.ReactNode\n /** 16×16 slot after the label text */\n trailing?: React.ReactNode\n}\n\nexport const Label = React.forwardRef<HTMLButtonElement, LabelProps>(\n ({ children, variant = 'closed', leading, trailing, className, ...rest }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n {...rest}\n className={`xc-label${className ? ` ${className}` : ''}`}\n data-variant={variant}\n >\n {leading != null && (\n <span className=\"xc-label__leading\" aria-hidden=\"true\">\n {leading}\n </span>\n )}\n\n <span className=\"xc-label__text\">\n <span className=\"xc-label__content\">{children}</span>\n </span>\n\n {trailing != null && (\n <span className=\"xc-label__trailing\" aria-hidden=\"true\">\n {trailing}\n </span>\n )}\n </button>\n ),\n)\n\nLabel.displayName = 'Label'\n","import React from 'react'\n\nexport type DirectoryVariant = 'opened' | 'closed'\n\nexport interface DirectoryProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Label text shown in the header row */\n label: string\n /** Visual variant: \"opened\" (children visible) or \"closed\" (collapsed) @default 'closed' */\n variant?: DirectoryVariant\n /** 16×16 slot before the label (folder icon) */\n leading?: React.ReactNode\n /** 16×16 slot after the label (chevron icon) */\n trailing?: React.ReactNode\n /** Called when the header row is clicked */\n onHeaderClick?: React.MouseEventHandler<HTMLButtonElement>\n /** Children rendered below the header when opened (typically ListItem components) */\n children?: React.ReactNode\n}\n\nexport const Directory = React.forwardRef<HTMLDivElement, DirectoryProps>(\n (\n {\n label,\n variant = 'closed',\n leading,\n trailing,\n onHeaderClick,\n children,\n className,\n ...rest\n },\n ref,\n ) => (\n <div\n ref={ref}\n {...rest}\n className={`xc-directory${className ? ` ${className}` : ''}`}\n data-variant={variant}\n >\n <button\n type=\"button\"\n className=\"xc-directory__header\"\n onClick={onHeaderClick}\n >\n {leading != null && (\n <span className=\"xc-directory__leading\" aria-hidden=\"true\">\n {leading}\n </span>\n )}\n\n <span className=\"xc-directory__text\">\n <span className=\"xc-directory__label\">{label}</span>\n </span>\n\n {trailing != null && (\n <span className=\"xc-directory__trailing\" aria-hidden=\"true\">\n {trailing}\n </span>\n )}\n </button>\n\n {variant === 'opened' && children != null && (\n <div className=\"xc-directory__content\">\n {children}\n </div>\n )}\n </div>\n ),\n)\n\nDirectory.displayName = 'Directory'\n","import type { XyneTheme } from './types'\n\n/**\n * Default theme — values match tokens.css (light mode).\n * Used as the base for createTheme() deep-merge.\n */\nexport const DEFAULT_THEME: XyneTheme = {\n colors: {\n orange: {\n '50': '#fff7ed',\n '100': '#ffedd4',\n '200': '#ffd6a8',\n '300': '#ffb86a',\n '400': '#ff8904',\n '500': '#fe6d36',\n '600': '#ea580c',\n '700': '#c2410c',\n },\n gray: {\n '25': '#f6f8fa',\n '50': '#f9fafb',\n '100': '#f2f4f7',\n '200': '#e4e7ec',\n '300': '#d0d5dd',\n '400': '#98a2b3',\n '500': '#667085',\n '600': '#475467',\n '700': '#344054',\n '800': '#1d2939',\n '900': '#101828',\n },\n red: {\n '50': '#fef3f2',\n '500': '#f04438',\n '600': '#d92d20',\n '700': '#b42318',\n },\n green: {\n '50': '#ecfdf3',\n '500': '#12b76a',\n '600': '#039855',\n '700': '#027a48',\n },\n yellow: {\n '50': '#fffaeb',\n '500': '#f79009',\n '600': '#dc6803',\n '700': '#b54708',\n },\n blue: {\n '50': '#eff8ff',\n '500': '#2e90fa',\n '600': '#1570ef',\n '700': '#175cd3',\n },\n purple: {\n '50': '#f9f5ff',\n '500': '#9e77ed',\n '600': '#7f56d9',\n '700': '#6941c6',\n },\n teal: {\n '50': '#f0fdf9',\n '500': '#15b79e',\n '600': '#0e9384',\n '700': '#107569',\n },\n },\n\n text: {\n primary: '#101828',\n secondary: '#475467',\n tertiary: '#667085',\n disabled: '#c9d0db',\n brand: '#e8601a',\n inverse: '#f1f5f9',\n error: '#d92d20',\n success: '#039855',\n warning: '#b54708',\n },\n\n bg: {\n white: '#ffffff',\n subtle: '#f9fafb',\n surfaceHover: '#f1f5f9',\n brand: '#fff4ee',\n error: '#fef3f2',\n success: '#ecfdf3',\n warning: '#fffaeb',\n neutral: '#f9fafb',\n purple: '#f9f5ff',\n blue: '#eff8ff',\n teal: '#f0fdf9',\n },\n\n border: {\n default: '#d6dce6',\n subtle: '#f1f5f9',\n strong: '#98a2b3',\n brand: '#fe6d36',\n error: '#fda29b',\n },\n\n shadow: {\n xs: '0 1px 2px 0 rgba(16, 24, 40, 0.05)',\n sm: '0 1px 3px 0 rgba(16, 24, 40, 0.1), 0 1px 2px -1px rgba(16, 24, 40, 0.1)',\n md: '0 4px 6px -1px rgba(16, 24, 40, 0.1), 0 2px 4px -2px rgba(16, 24, 40, 0.1)',\n pressed: 'inset 0 0 4px 0 rgba(0, 0, 0, 0.15)',\n },\n\n radius: {\n xs: '2px',\n sm: '4px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n full: '9999px',\n },\n\n spacing: {\n '0': '0px',\n '1': '2px',\n '2': '4px',\n '3': '6px',\n '4': '8px',\n '5': '10px',\n '6': '12px',\n '7': '14px',\n '8': '16px',\n '9': '18px',\n '10': '20px',\n '12': '24px',\n '16': '32px',\n },\n\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n\n fontWeight: {\n regular: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n\n fontSize: {\n '2xs': '10px',\n xs: '11px',\n sm: '12px',\n md: '14px',\n lg: '16px',\n xl: '18px',\n },\n\n lineHeight: {\n '2xs': '14px',\n xs: '16px',\n sm: '18px',\n md: '20px',\n lg: '24px',\n xl: '28px',\n },\n\n other: {},\n components: {},\n}\n","import type { XyneTheme, XyneThemeOverride } from './types'\nimport { DEFAULT_THEME } from './defaultTheme'\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...target }\n for (const key of Object.keys(source)) {\n if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n result[key] = deepMerge(\n target[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>,\n )\n } else {\n result[key] = source[key]\n }\n }\n return result\n}\n\n/** Deep-merge a partial override with DEFAULT_THEME to produce a full theme. */\nexport function createTheme(override: XyneThemeOverride): XyneTheme {\n return deepMerge(\n DEFAULT_THEME as unknown as Record<string, unknown>,\n override as Record<string, unknown>,\n ) as unknown as XyneTheme\n}\n","import React, { useMemo } from 'react'\nimport type { XyneThemeOverride } from './types'\nimport type { ColorScheme, ResolvedColorScheme } from './colorScheme.types'\nimport { ThemeContext } from './ThemeContext'\nimport { createTheme } from './createTheme'\nimport { ColorSchemeProvider } from './ColorSchemeProvider'\n\n/** Convert camelCase to kebab-case: \"surfaceHover\" → \"surface-hover\" */\nfunction camelToKebab(str: string): string {\n return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`)\n}\n\n/**\n * Generate CSS custom-property declarations from a theme override.\n * Only fields present in the override produce variables — tokens.css provides all defaults.\n */\nfunction themeOverrideToCssVars(override: XyneThemeOverride): Record<string, string> {\n const vars: Record<string, string> = {}\n\n if (override.colors) {\n for (const [scale, shades] of Object.entries(override.colors)) {\n for (const [shade, value] of Object.entries(shades)) {\n vars[`--xc-color-${camelToKebab(scale)}-${shade}`] = value\n }\n }\n }\n\n if (override.text) {\n for (const [key, value] of Object.entries(override.text)) {\n vars[`--xc-color-text-${camelToKebab(key)}`] = value\n }\n }\n\n if (override.bg) {\n for (const [key, value] of Object.entries(override.bg)) {\n vars[`--xc-color-bg-${camelToKebab(key)}`] = value\n }\n }\n\n if (override.border) {\n for (const [key, value] of Object.entries(override.border)) {\n vars[`--xc-color-border-${camelToKebab(key)}`] = value\n }\n }\n\n if (override.shadow) {\n for (const [key, value] of Object.entries(override.shadow)) {\n vars[`--xc-shadow-${camelToKebab(key)}`] = value\n }\n }\n\n if (override.radius) {\n for (const [key, value] of Object.entries(override.radius)) {\n vars[`--xc-radius-${camelToKebab(key)}`] = value\n }\n }\n\n if (override.spacing) {\n for (const [key, value] of Object.entries(override.spacing)) {\n vars[`--xc-space-${key}`] = value\n }\n }\n\n if (override.fontFamily) {\n vars['--xc-font-family'] = override.fontFamily\n }\n\n if (override.fontWeight) {\n for (const [key, value] of Object.entries(override.fontWeight)) {\n vars[`--xc-font-weight-${camelToKebab(key)}`] = value\n }\n }\n\n if (override.fontSize) {\n for (const [key, value] of Object.entries(override.fontSize)) {\n vars[`--xc-font-size-${key}`] = value\n }\n }\n\n if (override.lineHeight) {\n for (const [key, value] of Object.entries(override.lineHeight)) {\n vars[`--xc-line-height-${key}`] = value\n }\n }\n\n return vars\n}\n\nexport interface ThemeProviderProps {\n /** Theme override — deep-merged with DEFAULT_THEME */\n theme?: XyneThemeOverride\n /** CSS selector for variable injection. @default ':root' */\n cssVariablesSelector?: string\n /** Initial color scheme if nothing is stored. @default 'light' */\n defaultColorScheme?: ColorScheme\n /** Force a specific color scheme — ignores storage and user toggle. */\n forceColorScheme?: ResolvedColorScheme\n /** localStorage key for color scheme persistence. @default 'xc-color-scheme' */\n colorSchemeStorageKey?: string\n /** Return the element to set `data-theme` on. @default () => document.documentElement */\n getRootElement?: () => HTMLElement | undefined\n children: React.ReactNode\n}\n\n/**\n * Provides theme context and injects CSS variable overrides via a <style> tag.\n * Wrap your app (or a subtree) to customise design tokens.\n *\n * @example\n * ```tsx\n * const theme = createTheme({ text: { brand: '#0066ff' } })\n * <ThemeProvider theme={theme}>{children}</ThemeProvider>\n * ```\n */\nexport function ThemeProvider({\n theme: themeOverride = {},\n cssVariablesSelector = ':root',\n defaultColorScheme = 'light',\n forceColorScheme,\n colorSchemeStorageKey,\n getRootElement,\n children,\n}: ThemeProviderProps) {\n const resolvedTheme = useMemo(\n () => createTheme(themeOverride),\n [themeOverride],\n )\n\n const cssText = useMemo(() => {\n const vars = themeOverrideToCssVars(themeOverride)\n const entries = Object.entries(vars)\n if (entries.length === 0) return ''\n const declarations = entries\n .map(([k, v]) => ` ${k}: ${v};`)\n .join('\\n')\n return `${cssVariablesSelector} {\\n${declarations}\\n}`\n }, [themeOverride, cssVariablesSelector])\n\n return (\n <ColorSchemeProvider\n defaultColorScheme={defaultColorScheme}\n forceColorScheme={forceColorScheme}\n storageKey={colorSchemeStorageKey}\n getRootElement={getRootElement}\n >\n <ThemeContext.Provider value={resolvedTheme}>\n {cssText && <style data-xc-theme=\"\">{cssText}</style>}\n {children}\n </ThemeContext.Provider>\n </ColorSchemeProvider>\n )\n}\n","import { createContext } from 'react'\nimport type { XyneTheme } from './types'\nimport { DEFAULT_THEME } from './defaultTheme'\n\nexport const ThemeContext = createContext<XyneTheme>(DEFAULT_THEME)\n","import React, { useState, useEffect, useMemo, useCallback } from 'react'\nimport type { ColorScheme, ResolvedColorScheme, ColorSchemeContextValue } from './colorScheme.types'\nimport { ColorSchemeContext } from './ColorSchemeContext'\n\nconst STORAGE_KEY = 'xc-color-scheme'\n\nfunction getSystemPreference(): ResolvedColorScheme {\n if (typeof window === 'undefined') return 'light'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\nfunction readStorage(): ColorScheme | null {\n if (typeof window === 'undefined') return null\n try {\n const stored = window.localStorage.getItem(STORAGE_KEY)\n if (stored === 'light' || stored === 'dark' || stored === 'auto') return stored\n } catch { /* localStorage unavailable */ }\n return null\n}\n\nfunction applyToDOM(resolved: ResolvedColorScheme, getRootElement?: () => HTMLElement | undefined) {\n if (typeof document === 'undefined') return\n const root = getRootElement ? getRootElement() : document.documentElement\n if (root) root.setAttribute('data-theme', resolved)\n}\n\nexport interface ColorSchemeProviderProps {\n /** Initial color scheme if nothing is stored. @default 'light' */\n defaultColorScheme?: ColorScheme\n /** Force a specific color scheme — ignores storage and user toggle. */\n forceColorScheme?: ResolvedColorScheme\n /** localStorage key. @default 'xc-color-scheme' */\n storageKey?: string\n /** Return the element to set `data-theme` on. @default () => document.documentElement */\n getRootElement?: () => HTMLElement | undefined\n children: React.ReactNode\n}\n\nexport function ColorSchemeProvider({\n defaultColorScheme = 'light',\n forceColorScheme,\n storageKey = STORAGE_KEY,\n getRootElement,\n children,\n}: ColorSchemeProviderProps) {\n const [colorScheme, setColorSchemeRaw] = useState<ColorScheme>(() => {\n if (forceColorScheme) return forceColorScheme\n // Use a custom storage key by reading directly\n if (typeof window !== 'undefined' && storageKey !== STORAGE_KEY) {\n try {\n const v = window.localStorage.getItem(storageKey)\n if (v === 'light' || v === 'dark' || v === 'auto') return v\n } catch { /* noop */ }\n }\n return readStorage() ?? defaultColorScheme\n })\n\n const [systemPreference, setSystemPreference] = useState<ResolvedColorScheme>(getSystemPreference)\n\n const resolvedColorScheme: ResolvedColorScheme = forceColorScheme\n ?? (colorScheme === 'auto' ? systemPreference : colorScheme)\n\n // Listen for OS-level prefers-color-scheme changes\n useEffect(() => {\n if (typeof window === 'undefined') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = (e: MediaQueryListEvent) => {\n setSystemPreference(e.matches ? 'dark' : 'light')\n }\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [])\n\n // Sync storage changes across tabs\n useEffect(() => {\n if (typeof window === 'undefined') return\n const handler = (e: StorageEvent) => {\n if (e.key !== storageKey) return\n const val = e.newValue\n if (val === 'light' || val === 'dark' || val === 'auto') {\n setColorSchemeRaw(val)\n }\n }\n window.addEventListener('storage', handler)\n return () => window.removeEventListener('storage', handler)\n }, [storageKey])\n\n // Apply data-theme to DOM whenever resolved value changes\n useEffect(() => {\n applyToDOM(resolvedColorScheme, getRootElement)\n }, [resolvedColorScheme, getRootElement])\n\n const setColorScheme = useCallback((scheme: ColorScheme) => {\n if (forceColorScheme) return // forced — ignore\n setColorSchemeRaw(scheme)\n try {\n window.localStorage.setItem(storageKey, scheme)\n } catch { /* noop */ }\n }, [forceColorScheme, storageKey])\n\n const toggleColorScheme = useCallback(() => {\n setColorScheme(resolvedColorScheme === 'dark' ? 'light' : 'dark')\n }, [resolvedColorScheme, setColorScheme])\n\n const value = useMemo<ColorSchemeContextValue>(() => ({\n colorScheme,\n resolvedColorScheme,\n setColorScheme,\n toggleColorScheme,\n }), [colorScheme, resolvedColorScheme, setColorScheme, toggleColorScheme])\n\n return (\n <ColorSchemeContext.Provider value={value}>\n {children}\n </ColorSchemeContext.Provider>\n )\n}\n","import { createContext } from 'react'\nimport type { ColorSchemeContextValue } from './colorScheme.types'\n\n/** Default (no-op) context — consumers outside a provider get static 'light'. */\nexport const ColorSchemeContext = createContext<ColorSchemeContextValue>({\n colorScheme: 'light',\n resolvedColorScheme: 'light',\n setColorScheme: () => {},\n toggleColorScheme: () => {},\n})\n","import { useContext } from 'react'\nimport type { XyneTheme } from './types'\nimport { ThemeContext } from './ThemeContext'\n\n/** Access the resolved theme object from the nearest ThemeProvider. */\nexport function useTheme(): XyneTheme {\n return useContext(ThemeContext)\n}\n","import { useContext } from 'react'\nimport type { ColorSchemeContextValue } from './colorScheme.types'\nimport { ColorSchemeContext } from './ColorSchemeContext'\n\n/**\n * Access and control the current color scheme.\n *\n * @example\n * ```tsx\n * const { resolvedColorScheme, toggleColorScheme } = useColorScheme()\n * <button onClick={toggleColorScheme}>\n * Current: {resolvedColorScheme}\n * </button>\n * ```\n */\nexport function useColorScheme(): ColorSchemeContextValue {\n return useContext(ColorSchemeContext)\n}\n"],"mappings":"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","names":["React","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","useMemo","createContext","jsx","jsx","jsxs","useMemo","useContext","useContext"]}