apple-liquid-glass-react-ui-kit 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,674 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/design-system/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ AppShell: () => AppShell,
34
+ Avatar: () => Avatar,
35
+ Badge: () => Badge,
36
+ Button: () => Button,
37
+ DashboardGrid: () => DashboardGrid,
38
+ DataTable: () => DataTable,
39
+ FormField: () => FormField,
40
+ FormWizard: () => FormWizard,
41
+ GlassCard: () => GlassCard,
42
+ Grid: () => Grid,
43
+ IconButton: () => IconButton,
44
+ Input: () => Input,
45
+ Modal: () => Modal,
46
+ PageContainer: () => PageContainer,
47
+ SearchBar: () => SearchBar,
48
+ Section: () => Section,
49
+ StatCard: () => StatCard,
50
+ Toast: () => Toast,
51
+ colors: () => colors,
52
+ radius: () => radius,
53
+ shadows: () => shadows,
54
+ spacing: () => spacing,
55
+ typography: () => typography
56
+ });
57
+ module.exports = __toCommonJS(index_exports);
58
+
59
+ // src/design-system/tokens/colors.ts
60
+ var colors = {
61
+ primary: "#0066A1",
62
+ secondary: "#00B2A9",
63
+ text: {
64
+ primary: "#111827",
65
+ secondary: "#6B7280"
66
+ },
67
+ surface: {
68
+ // Liquid Glass surfaces (light)
69
+ base: "rgba(255,255,255,0.72)",
70
+ strong: "rgba(255,255,255,0.88)",
71
+ // Liquid Glass surfaces (dark)
72
+ dark: "rgba(20,20,25,0.65)"
73
+ },
74
+ border: {
75
+ glass: "rgba(255,255,255,0.35)"
76
+ },
77
+ status: {
78
+ info: "#0EA5E9",
79
+ success: "#22C55E",
80
+ warning: "#F59E0B",
81
+ error: "#EF4444"
82
+ }
83
+ };
84
+
85
+ // src/design-system/tokens/spacing.ts
86
+ var spacing = {
87
+ 0: "0px",
88
+ 1: "4px",
89
+ 2: "8px",
90
+ 3: "12px",
91
+ 4: "16px",
92
+ 6: "24px",
93
+ 8: "32px",
94
+ 12: "48px"
95
+ };
96
+
97
+ // src/design-system/tokens/typography.ts
98
+ var typography = {
99
+ fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, 'SF Pro Display', 'SF Pro Text', 'Segoe UI', Roboto, Helvetica, Arial, 'Apple Color Emoji', 'Segoe UI Emoji'",
100
+ display: { fontSize: "40px", lineHeight: "48px", fontWeight: 700 },
101
+ h1: { fontSize: "32px", lineHeight: "40px", fontWeight: 700 },
102
+ h2: { fontSize: "24px", lineHeight: "32px", fontWeight: 600 },
103
+ body: { fontSize: "16px", lineHeight: "24px", fontWeight: 400 },
104
+ caption: { fontSize: "13px", lineHeight: "18px", fontWeight: 400 }
105
+ };
106
+
107
+ // src/design-system/tokens/radius.ts
108
+ var radius = {
109
+ sm: "8px",
110
+ md: "12px",
111
+ lg: "20px",
112
+ xl: "28px",
113
+ full: "999px"
114
+ };
115
+
116
+ // src/design-system/tokens/shadows.ts
117
+ var shadows = {
118
+ glass: "0 8px 32px rgba(0,0,0,0.12)",
119
+ floating: "0 16px 48px rgba(0,0,0,0.18)",
120
+ modal: "0 24px 64px rgba(0,0,0,0.22)"
121
+ };
122
+
123
+ // src/design-system/components/atoms/Button.tsx
124
+ var React = __toESM(require("react"));
125
+ var import_jsx_runtime = require("react/jsx-runtime");
126
+ var sizeStyles = {
127
+ sm: { padding: `${spacing[1]} ${spacing[2]}`, fontSize: "14px", lineHeight: "20px" },
128
+ md: { padding: `${spacing[2]} ${spacing[4]}`, fontSize: typography.body.fontSize, lineHeight: typography.body.lineHeight },
129
+ lg: { padding: `${spacing[3]} ${spacing[6]}`, fontSize: "16px", lineHeight: "24px" }
130
+ };
131
+ var Button = React.forwardRef(function Button2({ variant = "primary", size = "md", leftIcon, rightIcon, style, children, disabled, ...rest }, ref) {
132
+ const base = {
133
+ display: "inline-flex",
134
+ alignItems: "center",
135
+ justifyContent: "center",
136
+ gap: spacing[2],
137
+ borderRadius: radius.full,
138
+ border: "1px solid transparent",
139
+ cursor: disabled ? "not-allowed" : "pointer",
140
+ userSelect: "none",
141
+ fontFamily: typography.fontFamily,
142
+ fontWeight: 600,
143
+ transition: "transform 120ms ease, background 180ms ease, box-shadow 180ms ease, border-color 180ms ease, color 180ms ease",
144
+ transform: "translateZ(0)",
145
+ outline: "none",
146
+ WebkitTapHighlightColor: "transparent",
147
+ ...sizeStyles[size]
148
+ };
149
+ const variants = {
150
+ primary: {
151
+ background: colors.primary,
152
+ color: "white",
153
+ boxShadow: shadows.glass
154
+ },
155
+ secondary: {
156
+ background: colors.secondary,
157
+ color: "white",
158
+ boxShadow: shadows.glass
159
+ },
160
+ ghost: {
161
+ background: "transparent",
162
+ color: colors.text.primary,
163
+ borderColor: "rgba(17,24,39,0.12)"
164
+ },
165
+ glass: {
166
+ background: colors.surface.base,
167
+ color: colors.text.primary,
168
+ borderColor: colors.border.glass,
169
+ boxShadow: shadows.glass,
170
+ backdropFilter: "blur(18px)",
171
+ WebkitBackdropFilter: "blur(18px)"
172
+ },
173
+ danger: {
174
+ background: colors.status.error,
175
+ color: "white",
176
+ boxShadow: shadows.glass
177
+ }
178
+ };
179
+ const merged = {
180
+ ...base,
181
+ ...variants[variant],
182
+ opacity: disabled ? 0.6 : 1,
183
+ ...style
184
+ };
185
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
186
+ "button",
187
+ {
188
+ ref,
189
+ style: merged,
190
+ disabled,
191
+ onMouseDown: (e) => {
192
+ if (disabled) return;
193
+ e.currentTarget.style.transform = "scale(0.98)";
194
+ rest.onMouseDown?.(e);
195
+ },
196
+ onMouseUp: (e) => {
197
+ e.currentTarget.style.transform = "translateZ(0)";
198
+ rest.onMouseUp?.(e);
199
+ },
200
+ onMouseLeave: (e) => {
201
+ e.currentTarget.style.transform = "translateZ(0)";
202
+ rest.onMouseLeave?.(e);
203
+ },
204
+ onFocus: (e) => {
205
+ e.currentTarget.style.boxShadow = `0 0 0 4px rgba(0,102,161,0.18), ${variants[variant].boxShadow ?? ""}`;
206
+ rest.onFocus?.(e);
207
+ },
208
+ onBlur: (e) => {
209
+ e.currentTarget.style.boxShadow = String(variants[variant].boxShadow ?? "none");
210
+ rest.onBlur?.(e);
211
+ },
212
+ ...rest,
213
+ children: [
214
+ leftIcon,
215
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children }),
216
+ rightIcon
217
+ ]
218
+ }
219
+ );
220
+ });
221
+
222
+ // src/design-system/components/atoms/Input.tsx
223
+ var React2 = __toESM(require("react"));
224
+ var import_jsx_runtime2 = require("react/jsx-runtime");
225
+ var Input = React2.forwardRef(function Input2({ state = "default", style, disabled, ...rest }, ref) {
226
+ const isDisabled = disabled || state === "disabled";
227
+ const isError = state === "error";
228
+ const base = {
229
+ width: "100%",
230
+ padding: `${spacing[2]} ${spacing[3]}`,
231
+ borderRadius: radius.lg,
232
+ border: `1px solid ${isError ? "rgba(239,68,68,0.55)" : "rgba(17,24,39,0.12)"}`,
233
+ background: colors.surface.strong,
234
+ color: colors.text.primary,
235
+ fontFamily: typography.fontFamily,
236
+ fontSize: typography.body.fontSize,
237
+ lineHeight: typography.body.lineHeight,
238
+ outline: "none",
239
+ boxShadow: "none",
240
+ backdropFilter: "blur(18px)",
241
+ WebkitBackdropFilter: "blur(18px)",
242
+ transition: "box-shadow 160ms ease, border-color 160ms ease, background 160ms ease",
243
+ opacity: isDisabled ? 0.6 : 1
244
+ };
245
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
246
+ "input",
247
+ {
248
+ ref,
249
+ disabled: isDisabled,
250
+ style: {
251
+ ...base,
252
+ ...state === "focused" ? { boxShadow: "0 0 0 4px rgba(0,102,161,0.18)", borderColor: "rgba(0,102,161,0.55)" } : null,
253
+ ...style
254
+ },
255
+ ...rest
256
+ }
257
+ );
258
+ });
259
+
260
+ // src/design-system/components/atoms/Badge.tsx
261
+ var import_jsx_runtime3 = require("react/jsx-runtime");
262
+ function Badge({ variant = "info", children, style }) {
263
+ const bg = {
264
+ info: "rgba(14,165,233,0.16)",
265
+ success: "rgba(34,197,94,0.16)",
266
+ warning: "rgba(245,158,11,0.16)",
267
+ error: "rgba(239,68,68,0.16)"
268
+ }[variant];
269
+ const fg = colors.status[variant];
270
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
271
+ "span",
272
+ {
273
+ style: {
274
+ display: "inline-flex",
275
+ alignItems: "center",
276
+ padding: `2px ${spacing[2]}`,
277
+ borderRadius: radius.full,
278
+ background: bg,
279
+ color: fg,
280
+ fontFamily: typography.fontFamily,
281
+ fontSize: typography.caption.fontSize,
282
+ lineHeight: typography.caption.lineHeight,
283
+ border: "1px solid rgba(255,255,255,0.35)",
284
+ backdropFilter: "blur(12px)",
285
+ WebkitBackdropFilter: "blur(12px)",
286
+ ...style
287
+ },
288
+ children
289
+ }
290
+ );
291
+ }
292
+
293
+ // src/design-system/components/atoms/Avatar.tsx
294
+ var import_jsx_runtime4 = require("react/jsx-runtime");
295
+ function Avatar({ src, alt = "Avatar", initials, size = 36, style }) {
296
+ const base = {
297
+ width: size,
298
+ height: size,
299
+ borderRadius: radius.full,
300
+ overflow: "hidden",
301
+ display: "inline-flex",
302
+ alignItems: "center",
303
+ justifyContent: "center",
304
+ background: "rgba(17,24,39,0.08)",
305
+ color: "rgba(17,24,39,0.75)",
306
+ fontFamily: typography.fontFamily,
307
+ fontWeight: 600,
308
+ fontSize: Math.max(12, Math.round(size * 0.36)),
309
+ lineHeight: 1,
310
+ ...style
311
+ };
312
+ if (src) {
313
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("img", { src, alt, style: { ...base, objectFit: "cover" } });
314
+ }
315
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: base, children: initials ?? "" });
316
+ }
317
+
318
+ // src/design-system/components/atoms/IconButton.tsx
319
+ var React3 = __toESM(require("react"));
320
+ var import_jsx_runtime5 = require("react/jsx-runtime");
321
+ var IconButton = React3.forwardRef(function IconButton2({ variant = "default", icon, size = 40, style, ...rest }, ref) {
322
+ const variants = {
323
+ default: { background: "rgba(17,24,39,0.06)", border: "1px solid rgba(17,24,39,0.10)" },
324
+ glass: {
325
+ background: colors.surface.base,
326
+ border: `1px solid ${colors.border.glass}`,
327
+ boxShadow: shadows.glass,
328
+ backdropFilter: "blur(18px)",
329
+ WebkitBackdropFilter: "blur(18px)"
330
+ },
331
+ active: { background: "rgba(0,102,161,0.14)", border: "1px solid rgba(0,102,161,0.35)" }
332
+ };
333
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
334
+ "button",
335
+ {
336
+ ref,
337
+ style: {
338
+ width: size,
339
+ height: size,
340
+ borderRadius: radius.full,
341
+ display: "inline-flex",
342
+ alignItems: "center",
343
+ justifyContent: "center",
344
+ cursor: "pointer",
345
+ outline: "none",
346
+ transition: "transform 120ms ease, box-shadow 180ms ease, background 180ms ease",
347
+ ...variants[variant],
348
+ ...style
349
+ },
350
+ ...rest,
351
+ children: icon
352
+ }
353
+ );
354
+ });
355
+
356
+ // src/design-system/components/molecules/GlassCard.tsx
357
+ var import_jsx_runtime6 = require("react/jsx-runtime");
358
+ function GlassCard({ tone = "light", strength = "base", floating = false, style, ...rest }) {
359
+ const bg = tone === "dark" ? colors.surface.dark : strength === "strong" ? colors.surface.strong : colors.surface.base;
360
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
361
+ "div",
362
+ {
363
+ style: {
364
+ background: bg,
365
+ border: `1px solid ${colors.border.glass}`,
366
+ borderRadius: radius.xl,
367
+ boxShadow: floating ? shadows.floating : shadows.glass,
368
+ backdropFilter: "blur(18px)",
369
+ WebkitBackdropFilter: "blur(18px)",
370
+ padding: spacing[4],
371
+ transform: "translateZ(0)",
372
+ ...style
373
+ },
374
+ ...rest
375
+ }
376
+ );
377
+ }
378
+
379
+ // src/design-system/components/molecules/StatCard.tsx
380
+ var import_jsx_runtime7 = require("react/jsx-runtime");
381
+ function StatCard({ label, value, delta, icon, tone = "light", style }) {
382
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(GlassCard, { tone, strength: "strong", style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: spacing[4], ...style }, children: [
383
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: [
384
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: { fontFamily: typography.fontFamily, fontSize: typography.caption.fontSize, lineHeight: typography.caption.lineHeight, color: colors.text.secondary }, children: label }),
385
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: { fontFamily: typography.fontFamily, fontSize: typography.h1.fontSize, lineHeight: typography.h1.lineHeight, fontWeight: typography.h1.fontWeight, color: colors.text.primary }, children: value }),
386
+ delta ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: { fontFamily: typography.fontFamily, fontSize: typography.caption.fontSize, lineHeight: typography.caption.lineHeight, color: colors.text.secondary }, children: delta }) : null
387
+ ] }),
388
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { "aria-hidden": true, style: { opacity: 0.85 }, children: icon }) : null
389
+ ] });
390
+ }
391
+
392
+ // src/design-system/components/molecules/SearchBar.tsx
393
+ var import_jsx_runtime8 = require("react/jsx-runtime");
394
+ function SearchBar({ value, onChange, placeholder = "Search", onClear, leadingIcon, clearIcon }) {
395
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: spacing[2] }, children: [
396
+ leadingIcon ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { "aria-hidden": true, style: { opacity: 0.8 }, children: leadingIcon }) : null,
397
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
398
+ Input,
399
+ {
400
+ value,
401
+ onChange: (e) => onChange(e.target.value),
402
+ placeholder,
403
+ state: value ? "focused" : "default"
404
+ }
405
+ ),
406
+ onClear ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
407
+ IconButton,
408
+ {
409
+ "aria-label": "Clear",
410
+ variant: "glass",
411
+ icon: clearIcon ?? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { style: { fontWeight: 700 }, children: "\xD7" }),
412
+ onClick: onClear
413
+ }
414
+ ) : null
415
+ ] });
416
+ }
417
+
418
+ // src/design-system/components/molecules/FormField.tsx
419
+ var import_jsx_runtime9 = require("react/jsx-runtime");
420
+ function FormField({ label, hint, error, children }) {
421
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: spacing[1] }, children: [
422
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("label", { style: { fontFamily: typography.fontFamily, fontSize: typography.caption.fontSize, lineHeight: typography.caption.lineHeight, color: colors.text.secondary }, children: label }),
423
+ children,
424
+ error ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: { fontFamily: typography.fontFamily, fontSize: typography.caption.fontSize, lineHeight: typography.caption.lineHeight, color: colors.status.error }, children: error }) : hint ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { style: { fontFamily: typography.fontFamily, fontSize: typography.caption.fontSize, lineHeight: typography.caption.lineHeight, color: colors.text.secondary }, children: hint }) : null
425
+ ] });
426
+ }
427
+
428
+ // src/design-system/components/molecules/Toast.tsx
429
+ var import_jsx_runtime10 = require("react/jsx-runtime");
430
+ function Toast({ title, message, variant = "info", onDismiss }) {
431
+ const accent = colors.status[variant];
432
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
433
+ GlassCard,
434
+ {
435
+ strength: "strong",
436
+ floating: true,
437
+ role: "status",
438
+ "aria-live": "polite",
439
+ style: {
440
+ padding: spacing[3],
441
+ display: "flex",
442
+ gap: spacing[3],
443
+ alignItems: "flex-start",
444
+ borderLeft: `4px solid ${accent}`,
445
+ maxWidth: 420
446
+ },
447
+ children: [
448
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: 4 }, children: [
449
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: { fontFamily: typography.fontFamily, fontWeight: 700, color: colors.text.primary }, children: title }),
450
+ message ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { style: { fontFamily: typography.fontFamily, color: colors.text.secondary, fontSize: typography.body.fontSize, lineHeight: typography.body.lineHeight }, children: message }) : null
451
+ ] }),
452
+ onDismiss ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
453
+ "button",
454
+ {
455
+ "aria-label": "Dismiss",
456
+ onClick: onDismiss,
457
+ style: {
458
+ background: "transparent",
459
+ border: "none",
460
+ cursor: "pointer",
461
+ fontSize: 18,
462
+ lineHeight: "18px",
463
+ padding: 0,
464
+ color: colors.text.secondary
465
+ },
466
+ children: "\xD7"
467
+ }
468
+ ) : null
469
+ ]
470
+ }
471
+ );
472
+ }
473
+
474
+ // src/design-system/components/organisms/AppShell.tsx
475
+ var import_jsx_runtime11 = require("react/jsx-runtime");
476
+ function AppShell({ sidebar, header, children }) {
477
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: { display: "grid", gridTemplateColumns: sidebar ? "280px 1fr" : "1fr", minHeight: "100vh", gap: spacing[4], padding: spacing[4] }, children: [
478
+ sidebar ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(GlassCard, { strength: "strong", style: { padding: spacing[4] }, children: sidebar }) : null,
479
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: spacing[4] }, children: [
480
+ header ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { children: header }) : null,
481
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { flex: 1 }, children })
482
+ ] })
483
+ ] });
484
+ }
485
+
486
+ // src/design-system/components/organisms/DashboardGrid.tsx
487
+ var import_jsx_runtime12 = require("react/jsx-runtime");
488
+ function DashboardGrid({ stats, main, side }) {
489
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: spacing[4] }, children: [
490
+ stats ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))", gap: spacing[4] }, children: stats }) : null,
491
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { display: "grid", gridTemplateColumns: side ? "1.4fr 0.6fr" : "1fr", gap: spacing[4], alignItems: "start" }, children: [
492
+ main ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { children: main }) : null,
493
+ side ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { children: side }) : null
494
+ ] })
495
+ ] });
496
+ }
497
+
498
+ // src/design-system/components/organisms/Modal.tsx
499
+ var import_jsx_runtime13 = require("react/jsx-runtime");
500
+ function Modal({ open, title, children, footer, onClose }) {
501
+ if (!open) return null;
502
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
503
+ "div",
504
+ {
505
+ role: "dialog",
506
+ "aria-modal": "true",
507
+ style: {
508
+ position: "fixed",
509
+ inset: 0,
510
+ display: "grid",
511
+ placeItems: "center",
512
+ padding: spacing[4],
513
+ background: "rgba(17,24,39,0.35)",
514
+ backdropFilter: "blur(8px)",
515
+ WebkitBackdropFilter: "blur(8px)",
516
+ zIndex: 50
517
+ },
518
+ onMouseDown: (e) => {
519
+ if (e.target === e.currentTarget) onClose();
520
+ },
521
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
522
+ GlassCard,
523
+ {
524
+ strength: "strong",
525
+ floating: true,
526
+ style: {
527
+ width: "min(720px, 100%)",
528
+ borderRadius: radius.xl,
529
+ boxShadow: shadows.modal,
530
+ padding: spacing[4]
531
+ },
532
+ children: [
533
+ title ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { marginBottom: spacing[3] }, children: title }) : null,
534
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { marginBottom: footer ? spacing[4] : 0 }, children }),
535
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { children: footer }) : null
536
+ ]
537
+ }
538
+ )
539
+ }
540
+ );
541
+ }
542
+
543
+ // src/design-system/components/organisms/DataTable.tsx
544
+ var import_jsx_runtime14 = require("react/jsx-runtime");
545
+ function DataTable({ columns, rows, rowKey, emptyState }) {
546
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(GlassCard, { strength: "strong", style: { padding: spacing[3] }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { overflowX: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("table", { style: { width: "100%", borderCollapse: "separate", borderSpacing: 0 }, children: [
547
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tr", { children: columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
548
+ "th",
549
+ {
550
+ style: {
551
+ textAlign: "left",
552
+ fontFamily: typography.fontFamily,
553
+ fontSize: typography.caption.fontSize,
554
+ lineHeight: typography.caption.lineHeight,
555
+ color: colors.text.secondary,
556
+ fontWeight: 700,
557
+ padding: `${spacing[2]} ${spacing[2]}`,
558
+ borderBottom: "1px solid rgba(255,255,255,0.35)",
559
+ width: c.width,
560
+ whiteSpace: "nowrap"
561
+ },
562
+ children: c.header
563
+ },
564
+ c.key
565
+ )) }) }),
566
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tbody", { children: rows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("td", { colSpan: columns.length, style: { padding: spacing[4] }, children: emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { fontFamily: typography.fontFamily, color: colors.text.secondary }, children: "No results" }) }) }) : rows.map((r) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("tr", { children: columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
567
+ "td",
568
+ {
569
+ style: {
570
+ padding: `${spacing[2]} ${spacing[2]}`,
571
+ borderBottom: "1px solid rgba(255,255,255,0.22)",
572
+ fontFamily: typography.fontFamily,
573
+ color: colors.text.primary
574
+ },
575
+ children: c.render(r)
576
+ },
577
+ c.key
578
+ )) }, rowKey(r))) })
579
+ ] }) }) });
580
+ }
581
+
582
+ // src/design-system/components/organisms/FormWizard.tsx
583
+ var import_jsx_runtime15 = require("react/jsx-runtime");
584
+ function FormWizard({ steps, activeStepId, onBack, onNext, onFinish, isLast }) {
585
+ const active = steps.find((s) => s.id === activeStepId) ?? steps[0];
586
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(GlassCard, { strength: "strong", style: { padding: spacing[4] }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: spacing[4] }, children: [
587
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [
588
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { fontWeight: 700 }, children: active.title }),
589
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { opacity: 0.75 }, children: [
590
+ steps.findIndex((s) => s.id === active.id) + 1,
591
+ "/",
592
+ steps.length
593
+ ] })
594
+ ] }),
595
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { children: active.content }),
596
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", gap: spacing[2] }, children: [
597
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: "ghost", onClick: onBack, disabled: !onBack, children: "Back" }),
598
+ isLast ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: "primary", onClick: onFinish, children: "Finish" }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: "primary", onClick: onNext, disabled: !onNext, children: "Next" })
599
+ ] })
600
+ ] }) });
601
+ }
602
+
603
+ // src/design-system/layouts/PageContainer.tsx
604
+ var import_jsx_runtime16 = require("react/jsx-runtime");
605
+ function PageContainer({ maxWidth = 1200, style, ...rest }) {
606
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
607
+ "div",
608
+ {
609
+ style: {
610
+ width: "100%",
611
+ maxWidth,
612
+ margin: "0 auto",
613
+ padding: spacing[4],
614
+ ...style
615
+ },
616
+ ...rest
617
+ }
618
+ );
619
+ }
620
+
621
+ // src/design-system/layouts/Section.tsx
622
+ var import_jsx_runtime17 = require("react/jsx-runtime");
623
+ function Section({ title, actions, children, style, ...rest }) {
624
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("section", { style: { display: "flex", flexDirection: "column", gap: spacing[3], ...style }, ...rest, children: [
625
+ title || actions ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("header", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: spacing[2] }, children: [
626
+ title ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { children: title }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", {}),
627
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { children: actions }) : null
628
+ ] }) : null,
629
+ children
630
+ ] });
631
+ }
632
+
633
+ // src/design-system/layouts/Grid.tsx
634
+ var import_jsx_runtime18 = require("react/jsx-runtime");
635
+ function Grid({ columns = "repeat(auto-fit, minmax(260px, 1fr))", gap = 4, style, ...rest }) {
636
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
637
+ "div",
638
+ {
639
+ style: {
640
+ display: "grid",
641
+ gridTemplateColumns: columns,
642
+ gap: spacing[gap],
643
+ ...style
644
+ },
645
+ ...rest
646
+ }
647
+ );
648
+ }
649
+ // Annotate the CommonJS export names for ESM import in node:
650
+ 0 && (module.exports = {
651
+ AppShell,
652
+ Avatar,
653
+ Badge,
654
+ Button,
655
+ DashboardGrid,
656
+ DataTable,
657
+ FormField,
658
+ FormWizard,
659
+ GlassCard,
660
+ Grid,
661
+ IconButton,
662
+ Input,
663
+ Modal,
664
+ PageContainer,
665
+ SearchBar,
666
+ Section,
667
+ StatCard,
668
+ Toast,
669
+ colors,
670
+ radius,
671
+ shadows,
672
+ spacing,
673
+ typography
674
+ });