@raptortrade/ui 0.1.1 → 0.1.2
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.cjs +26 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +26 -26
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -2
- package/src/styles/base.css +9 -10
- package/src/styles/theme.css +14 -14
package/dist/index.cjs
CHANGED
|
@@ -158,11 +158,11 @@ function Badge({ variant = "default", children, className = "", onClick }) {
|
|
|
158
158
|
var import_react = require("react");
|
|
159
159
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
160
160
|
var variantStyles2 = {
|
|
161
|
-
primary: "bg-accent-500 text-[var(--accent-text,#
|
|
162
|
-
secondary: "bg-bg-2 text-text-1 border-border-1 font-medium hover:bg-bg-3
|
|
163
|
-
ghost: "text-text-2 border-transparent hover:bg-bg-2 hover:text-text-1",
|
|
164
|
-
danger: "bg-danger/10 text-danger border-
|
|
165
|
-
destructive: "bg-danger text-white font-semibold border-
|
|
161
|
+
primary: "rounded-full bg-accent-500 text-[var(--accent-text,#0a0b0d)] font-semibold border-transparent hover:brightness-95",
|
|
162
|
+
secondary: "rounded-full bg-bg-2 text-text-1 border-border-1 font-medium hover:bg-bg-3",
|
|
163
|
+
ghost: "rounded-xl text-text-2 border-transparent hover:bg-bg-2 hover:text-text-1",
|
|
164
|
+
danger: "rounded-full bg-danger/10 text-danger border-transparent hover:bg-danger/20",
|
|
165
|
+
destructive: "rounded-full bg-danger text-white font-semibold border-transparent hover:bg-danger/90",
|
|
166
166
|
link: "text-primary-500 border-transparent underline-offset-4 hover:underline"
|
|
167
167
|
};
|
|
168
168
|
var sizeStyles = {
|
|
@@ -177,8 +177,8 @@ var Button = (0, import_react.forwardRef)(
|
|
|
177
177
|
"button",
|
|
178
178
|
{
|
|
179
179
|
ref,
|
|
180
|
-
className: `inline-flex items-center justify-center font-medium transition-all duration-
|
|
181
|
-
|
|
180
|
+
className: `inline-flex items-center justify-center font-medium transition-all duration-150 tracking-[0.01em]
|
|
181
|
+
border
|
|
182
182
|
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-ring
|
|
183
183
|
disabled:pointer-events-none disabled:opacity-50
|
|
184
184
|
${variantStyles2[variant]} ${sizeStyles[size]} ${className}`,
|
|
@@ -219,7 +219,7 @@ function Chip({ active, onClick, children, className = "" }) {
|
|
|
219
219
|
"button",
|
|
220
220
|
{
|
|
221
221
|
onClick,
|
|
222
|
-
className: `text-xs font-medium px-3 py-1 rounded-
|
|
222
|
+
className: `text-xs font-medium px-3 py-1 rounded-full border cursor-pointer whitespace-nowrap transition-all ${active ? "text-primary-500 border-primary-500/30 bg-primary-500/10" : "text-text-2 bg-bg-2 border-border-1 hover:text-text-1"} ${className}`,
|
|
223
223
|
children
|
|
224
224
|
}
|
|
225
225
|
);
|
|
@@ -269,7 +269,7 @@ function CopyButton({ text, className = "", label, onCopy }) {
|
|
|
269
269
|
{
|
|
270
270
|
onClick: handleCopy,
|
|
271
271
|
className: `inline-flex items-center gap-1.5 px-2 py-1 text-xs text-text-3
|
|
272
|
-
rounded-
|
|
272
|
+
rounded-lg border border-border-1 transition-colors duration-75 hover:bg-bg-2 hover:text-text-1 ${className}`,
|
|
273
273
|
children: copied ? /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
274
274
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("path", { d: "M3 8.5l3 3 7-7", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }),
|
|
275
275
|
label ? "Copied!" : null
|
|
@@ -291,7 +291,7 @@ function CodeBlock({ code, language = "bash", showCopy = true, className = "" })
|
|
|
291
291
|
if (code.length >= 5e4 || !import_prismjs.default.languages[language]) return null;
|
|
292
292
|
return import_prismjs.default.highlight(code, import_prismjs.default.languages[language], language);
|
|
293
293
|
}, [code, language]);
|
|
294
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: `group relative bg-code-bg ${className}`, children: [
|
|
294
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: `group relative bg-code-bg rounded-xl overflow-hidden ${className}`, children: [
|
|
295
295
|
showCopy && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "absolute right-2 top-2 opacity-0 transition-opacity group-hover:opacity-100", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CopyButton, { text: code }) }),
|
|
296
296
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("pre", { className: `language-${language} !bg-code-bg !m-0`, children: highlightedHtml != null ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("code", { className: `language-${language}`, dangerouslySetInnerHTML: { __html: highlightedHtml } }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("code", { className: `language-${language}`, children: code }) })
|
|
297
297
|
] });
|
|
@@ -333,7 +333,7 @@ var DialogContent = (0, import_react4.forwardRef)(
|
|
|
333
333
|
"div",
|
|
334
334
|
{
|
|
335
335
|
ref,
|
|
336
|
-
className: `relative w-full max-w-lg mx-4 bg-bg-1 border border-border-1 rounded-
|
|
336
|
+
className: `relative w-full max-w-lg mx-4 bg-bg-1 border border-border-1 rounded-2xl ${className}`,
|
|
337
337
|
onClick: (e) => e.stopPropagation(),
|
|
338
338
|
children
|
|
339
339
|
}
|
|
@@ -392,9 +392,9 @@ var Input = (0, import_react5.forwardRef)(
|
|
|
392
392
|
{
|
|
393
393
|
ref,
|
|
394
394
|
id: inputId,
|
|
395
|
-
className: `h-9 rounded-
|
|
395
|
+
className: `h-9 rounded-xl border border-border-1 bg-bg-1 px-3 text-sm text-text-1
|
|
396
396
|
placeholder:text-text-4
|
|
397
|
-
focus:border-primary-500 focus:outline-none focus:ring-
|
|
397
|
+
focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500
|
|
398
398
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
399
399
|
${error ? "border-danger" : ""} ${className}`,
|
|
400
400
|
...props
|
|
@@ -412,7 +412,7 @@ function Kbd({ children, className = "" }) {
|
|
|
412
412
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
413
413
|
"kbd",
|
|
414
414
|
{
|
|
415
|
-
className: `inline-flex h-5 min-w-5 items-center justify-center rounded border border-border-1
|
|
415
|
+
className: `inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border-1
|
|
416
416
|
bg-bg-2 px-1.5 font-mono text-[10px] font-medium text-text-3 ${className}`,
|
|
417
417
|
children
|
|
418
418
|
}
|
|
@@ -458,7 +458,7 @@ function Modal({ open, onClose, title, children, className = "" }) {
|
|
|
458
458
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
459
459
|
"div",
|
|
460
460
|
{
|
|
461
|
-
className: `relative w-full max-w-md rounded-
|
|
461
|
+
className: `relative w-full max-w-md rounded-2xl border border-border-1 bg-bg-1 p-6 ${className}`,
|
|
462
462
|
children: [
|
|
463
463
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "mb-4 flex items-center justify-between", children: [
|
|
464
464
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h2", { className: "text-base font-semibold text-text-1", children: title }),
|
|
@@ -466,7 +466,7 @@ function Modal({ open, onClose, title, children, className = "" }) {
|
|
|
466
466
|
"button",
|
|
467
467
|
{
|
|
468
468
|
onClick: onClose,
|
|
469
|
-
className: "p-1 text-text-3 transition-colors rounded-
|
|
469
|
+
className: "p-1 text-text-3 transition-colors rounded-lg hover:bg-bg-2",
|
|
470
470
|
"aria-label": "Close",
|
|
471
471
|
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { d: "M4 4l8 8M12 4l-8 8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) })
|
|
472
472
|
}
|
|
@@ -490,7 +490,7 @@ var variantStyles3 = {
|
|
|
490
490
|
},
|
|
491
491
|
pill: {
|
|
492
492
|
container: "flex items-center gap-1",
|
|
493
|
-
item: "px-3 py-2 text-sm font-medium transition-colors rounded-
|
|
493
|
+
item: "px-3 py-2 text-sm font-medium transition-colors rounded-xl",
|
|
494
494
|
active: "bg-bg-2 text-text-1",
|
|
495
495
|
inactive: "text-text-3 hover:bg-bg-2/50 hover:text-text-1"
|
|
496
496
|
}
|
|
@@ -509,7 +509,7 @@ function NavTabs({ items, variant = "underline", className = "", renderLink }) {
|
|
|
509
509
|
// src/components/section-header/section-header.tsx
|
|
510
510
|
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
511
511
|
function SectionHeader({ title, badge, className = "" }) {
|
|
512
|
-
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: `flex items-center justify-between bg-bg-2 px-3 py-2.5 rounded-t-
|
|
512
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: `flex items-center justify-between bg-bg-2 px-3 py-2.5 rounded-t-2xl ${className}`, children: [
|
|
513
513
|
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-xs font-semibold text-text-2", children: title }),
|
|
514
514
|
badge
|
|
515
515
|
] });
|
|
@@ -528,8 +528,8 @@ var Select = (0, import_react7.forwardRef)(
|
|
|
528
528
|
{
|
|
529
529
|
ref,
|
|
530
530
|
id: selectId,
|
|
531
|
-
className: `h-9 rounded-
|
|
532
|
-
focus:border-primary-500 focus:outline-none focus:ring-
|
|
531
|
+
className: `h-9 rounded-xl border border-border-1 bg-bg-1 px-3 text-sm text-text-1
|
|
532
|
+
focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500
|
|
533
533
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
534
534
|
${className}`,
|
|
535
535
|
...props,
|
|
@@ -567,10 +567,10 @@ function SidePanel({ open, onClose, title, subtitle, children, className = "" })
|
|
|
567
567
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
568
568
|
"div",
|
|
569
569
|
{
|
|
570
|
-
className: `relative bg-bg-1 rounded-
|
|
570
|
+
className: `relative bg-bg-1 rounded-2xl flex flex-col w-[900px] h-[600px] ${className}`,
|
|
571
571
|
onClick: (e) => e.stopPropagation(),
|
|
572
572
|
children: [
|
|
573
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center justify-between px-4 py-3 bg-bg-2 rounded-t-
|
|
573
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center justify-between px-4 py-3 bg-bg-2 rounded-t-2xl flex-shrink-0", children: [
|
|
574
574
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "min-w-0", children: [
|
|
575
575
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("h3", { className: "font-semibold text-base truncate", children: title }),
|
|
576
576
|
subtitle && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-xs text-text-3", children: subtitle })
|
|
@@ -698,11 +698,11 @@ function TableCell({ children, className = "" }) {
|
|
|
698
698
|
// src/components/tabs/tabs.tsx
|
|
699
699
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
700
700
|
function Tabs({ tabs, value, onChange, className = "" }) {
|
|
701
|
-
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: `flex gap-1 rounded-
|
|
701
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: `flex gap-1 rounded-xl border border-border-1 bg-bg-1 p-1 ${className}`, children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
702
702
|
"button",
|
|
703
703
|
{
|
|
704
704
|
onClick: () => onChange(tab.value),
|
|
705
|
-
className: `px-3 py-1.5 text-sm font-medium transition-all rounded-
|
|
705
|
+
className: `px-3 py-1.5 text-sm font-medium transition-all rounded-lg
|
|
706
706
|
${value === tab.value ? "bg-bg-3 text-text-1" : "text-text-3 hover:bg-bg-2 hover:text-text-1"}`,
|
|
707
707
|
children: tab.label
|
|
708
708
|
},
|
|
@@ -727,11 +727,11 @@ function Toggle({ options, value, onChange, className = "" }) {
|
|
|
727
727
|
"button",
|
|
728
728
|
{
|
|
729
729
|
onClick: () => onChange(value === left ? right : left),
|
|
730
|
-
className: `relative w-10 h-5 rounded-
|
|
730
|
+
className: `relative w-10 h-5 rounded-full transition-colors border-2 border-border-1 ${value === right ? "bg-primary-500" : "bg-bg-1"}`,
|
|
731
731
|
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
732
732
|
"span",
|
|
733
733
|
{
|
|
734
|
-
className: `absolute top-0.5 w-4 h-4 rounded-
|
|
734
|
+
className: `absolute top-0.5 w-4 h-4 rounded-full transition-transform bg-text-1 ${value === right ? "translate-x-5" : "translate-x-0.5"}`
|
|
735
735
|
}
|
|
736
736
|
)
|
|
737
737
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/accordion/accordion.tsx","../src/components/badge/badge.tsx","../src/components/button/button.tsx","../src/components/card/card.tsx","../src/components/chip/chip.tsx","../src/components/chip-group/chip-group.tsx","../src/components/code-block/code-block.tsx","../src/components/copy-button/copy-button.tsx","../src/components/dialog/dialog.tsx","../src/components/empty-state/empty-state.tsx","../src/components/input/input.tsx","../src/components/kbd/kbd.tsx","../src/components/loading/loading.tsx","../src/components/modal/modal.tsx","../src/components/nav-tabs/nav-tabs.tsx","../src/components/section-header/section-header.tsx","../src/components/select/select.tsx","../src/components/side-panel/side-panel.tsx","../src/components/separator/separator.tsx","../src/components/skeleton/skeleton.tsx","../src/components/skeleton-table/skeleton-table.tsx","../src/components/sparkline/sparkline.tsx","../src/components/spinner/spinner.tsx","../src/components/status-bar/status-bar.tsx","../src/components/table/table.tsx","../src/components/tabs/tabs.tsx","../src/components/toggle/toggle.tsx"],"sourcesContent":["export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from \"./components/accordion/index.js\";\nexport type { AccordionProps, AccordionItemProps, AccordionTriggerProps, AccordionContentProps } from \"./components/accordion/index.js\";\nexport { Badge } from \"./components/badge/index.js\";\nexport type { BadgeProps } from \"./components/badge/index.js\";\nexport { Button } from \"./components/button/index.js\";\nexport type { ButtonProps } from \"./components/button/index.js\";\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from \"./components/card/index.js\";\nexport type { CardProps } from \"./components/card/index.js\";\nexport { Chip } from \"./components/chip/index.js\";\nexport type { ChipProps } from \"./components/chip/index.js\";\nexport { ChipGroup } from \"./components/chip-group/index.js\";\nexport type { ChipGroupProps, ChipGroupOption } from \"./components/chip-group/index.js\";\nexport { CodeBlock } from \"./components/code-block/index.js\";\nexport type { CodeBlockProps } from \"./components/code-block/index.js\";\nexport { CopyButton } from \"./components/copy-button/index.js\";\nexport type { CopyButtonProps } from \"./components/copy-button/index.js\";\nexport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogClose, DialogFooter } from \"./components/dialog/index.js\";\nexport type { DialogProps, DialogContentProps } from \"./components/dialog/index.js\";\nexport { EmptyState } from \"./components/empty-state/index.js\";\nexport type { EmptyStateProps } from \"./components/empty-state/index.js\";\nexport { Input } from \"./components/input/index.js\";\nexport type { InputProps } from \"./components/input/index.js\";\nexport { Kbd } from \"./components/kbd/index.js\";\nexport type { KbdProps } from \"./components/kbd/index.js\";\nexport { Loading } from \"./components/loading/index.js\";\nexport type { LoadingProps } from \"./components/loading/index.js\";\nexport { Modal } from \"./components/modal/index.js\";\nexport type { ModalProps } from \"./components/modal/index.js\";\nexport { NavTabs } from \"./components/nav-tabs/index.js\";\nexport type { NavTabsProps, NavTabItem } from \"./components/nav-tabs/index.js\";\nexport { SectionHeader } from \"./components/section-header/index.js\";\nexport type { SectionHeaderProps } from \"./components/section-header/index.js\";\nexport { Select } from \"./components/select/index.js\";\nexport type { SelectProps, SelectOption } from \"./components/select/index.js\";\nexport { SidePanel } from \"./components/side-panel/index.js\";\nexport type { SidePanelProps } from \"./components/side-panel/index.js\";\nexport { Separator } from \"./components/separator/index.js\";\nexport type { SeparatorProps } from \"./components/separator/index.js\";\nexport { Skeleton } from \"./components/skeleton/index.js\";\nexport type { SkeletonProps } from \"./components/skeleton/index.js\";\nexport { SkeletonTable } from \"./components/skeleton-table/index.js\";\nexport type { SkeletonTableProps } from \"./components/skeleton-table/index.js\";\nexport { Sparkline } from \"./components/sparkline/index.js\";\nexport type { SparklineProps } from \"./components/sparkline/index.js\";\nexport { Spinner } from \"./components/spinner/index.js\";\nexport type { SpinnerProps } from \"./components/spinner/index.js\";\nexport { StatusBar } from \"./components/status-bar/index.js\";\nexport type { StatusBarProps, StatusBarItem } from \"./components/status-bar/index.js\";\nexport { Table, TableHead, TableHeader, TableBody, TableRow, TableCell } from \"./components/table/index.js\";\nexport type { TableProps, TableHeaderProps, TableRowProps } from \"./components/table/index.js\";\nexport { Tabs } from \"./components/tabs/index.js\";\nexport type { TabsProps, Tab } from \"./components/tabs/index.js\";\nexport { Toggle } from \"./components/toggle/index.js\";\nexport type { ToggleProps } from \"./components/toggle/index.js\";\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className = \"\", ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={`border-b border-border-1 ${className}`}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className = \"\", children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={`flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180 ${className}`}\n {...props}\n >\n {children}\n <svg\n className=\"h-4 w-4 shrink-0 transition-transform duration-200\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className = \"\", children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={`pb-4 pt-0 ${className}`}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n\nexport type AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>;\nexport type AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>;\nexport type AccordionTriggerProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>;\nexport type AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>;\n","import type { ReactNode } from \"react\";\n\ntype BadgeVariant = \"active\" | \"inactive\" | \"coming-soon\" | \"default\" | \"signal\" | \"success\" | \"danger\" | \"warning\" | \"error\" | \"outline\";\n\nconst variantStyles: Record<BadgeVariant, string> = {\n active: \"bg-primary-500 text-white\",\n inactive: \"bg-bg-2 text-text-2\",\n \"coming-soon\": \"bg-bg-2 text-text-2\",\n default: \"bg-bg-2 text-text-1\",\n signal: \"bg-primary-500 text-white\",\n success: \"bg-success/15 text-success border-success/30\",\n danger: \"bg-danger/15 text-danger border-danger/30\",\n warning: \"bg-warning/15 text-warning border-warning/30\",\n error: \"bg-danger/15 text-danger border-danger/30\",\n outline: \"bg-bg-1 text-text-1 border-border-1\",\n};\n\nexport interface BadgeProps {\n variant?: BadgeVariant;\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function Badge({ variant = \"default\", children, className = \"\", onClick }: BadgeProps) {\n return (\n <span\n className={`inline-flex items-center rounded-full border border-border-1 px-2.5 py-0.5 text-[11px] font-medium ${variantStyles[variant]} ${className}`}\n onClick={onClick}\n >\n {children}\n </span>\n );\n}\n","import { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\ntype ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"destructive\" | \"link\";\ntype ButtonSize = \"sm\" | \"md\" | \"lg\" | \"icon\";\n\nconst variantStyles: Record<ButtonVariant, string> = {\n primary:\n \"bg-accent-500 text-[var(--accent-text,#111111)] font-semibold border-accent-500 hover:brightness-110 hover:shadow-[0_0_16px_rgba(255,255,255,0.1)]\",\n secondary:\n \"bg-bg-2 text-text-1 border-border-1 font-medium hover:bg-bg-3 hover:border-border-1\",\n ghost:\n \"text-text-2 border-transparent hover:bg-bg-2 hover:text-text-1\",\n danger:\n \"bg-danger/10 text-danger border-danger/30 hover:bg-danger/20\",\n destructive:\n \"bg-danger text-white font-semibold border-danger hover:bg-danger/90\",\n link:\n \"text-primary-500 border-transparent underline-offset-4 hover:underline\",\n};\n\nconst sizeStyles: Record<ButtonSize, string> = {\n sm: \"h-8 px-3 text-xs gap-1.5\",\n md: \"h-9 px-4 text-sm gap-2\",\n lg: \"h-11 px-6 text-sm gap-2\",\n icon: \"h-9 w-9 p-0\",\n};\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"primary\", size = \"md\", className = \"\", children, disabled, ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={`inline-flex items-center justify-center font-medium transition-all duration-200\n rounded-lg border\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-ring\n disabled:pointer-events-none disabled:opacity-50\n ${variantStyles[variant]} ${sizeStyles[size]} ${className}`}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n","import type { ReactNode } from \"react\";\n\nexport interface CardProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Card({ children, className = \"\" }: CardProps) {\n return (\n <div className={`card-modern p-6 ${className}`}>\n {children}\n </div>\n );\n}\n\nexport function CardHeader({ children, className = \"\" }: CardProps) {\n return <div className={`mb-4 ${className}`}>{children}</div>;\n}\n\nexport function CardTitle({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <h3 className={`text-sm font-medium text-text-1 ${className}`}>{children}</h3>;\n}\n\nexport function CardDescription({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <p className={`mt-1 text-xs text-text-3 ${className}`}>{children}</p>;\n}\n\nexport function CardContent({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <div className={`pt-4 ${className}`}>{children}</div>;\n}\n\nexport function CardFooter({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <div className={`pt-4 mt-4 border-t border-border-1 ${className}`}>{children}</div>;\n}\n","import type { ReactNode } from \"react\";\n\nexport interface ChipProps {\n active: boolean;\n onClick: () => void;\n children: ReactNode;\n className?: string;\n}\n\nexport function Chip({ active, onClick, children, className = \"\" }: ChipProps) {\n return (\n <button\n onClick={onClick}\n className={`text-xs font-medium px-3 py-1 rounded-lg border cursor-pointer whitespace-nowrap transition-all ${\n active\n ? \"text-primary-500 border-primary-500/30 bg-primary-500/10\"\n : \"text-text-2 bg-bg-2 border-border-1 hover:text-text-1\"\n } ${className}`}\n >\n {children}\n </button>\n );\n}\n","import { Chip } from \"../chip/chip.js\";\n\nexport interface ChipGroupOption {\n value: string;\n label: string;\n}\n\ninterface ChipGroupBaseProps {\n options: ChipGroupOption[];\n className?: string;\n}\n\ninterface ChipGroupSingleProps extends ChipGroupBaseProps {\n multiple?: false;\n value: string;\n onChange: (value: string) => void;\n}\n\ninterface ChipGroupMultipleProps extends ChipGroupBaseProps {\n multiple: true;\n value: string[];\n onChange: (value: string[]) => void;\n}\n\nexport type ChipGroupProps = ChipGroupSingleProps | ChipGroupMultipleProps;\n\nexport function ChipGroup(props: ChipGroupProps) {\n const { options, className = \"\" } = props;\n\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n {options.map((option) => {\n const isActive = props.multiple\n ? props.value.includes(option.value)\n : props.value === option.value;\n\n const handleClick = () => {\n if (props.multiple) {\n const next = props.value.includes(option.value)\n ? props.value.filter((v) => v !== option.value)\n : [...props.value, option.value];\n props.onChange(next);\n } else {\n props.onChange(option.value);\n }\n };\n\n return (\n <Chip key={option.value} active={isActive} onClick={handleClick}>\n {option.label}\n </Chip>\n );\n })}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport Prism from \"prismjs\";\nimport \"prismjs/components/prism-json\";\nimport \"prismjs/components/prism-bash\";\nimport \"prismjs/components/prism-python\";\nimport \"prismjs/components/prism-javascript\";\nimport \"prismjs/components/prism-typescript\";\nimport \"prismjs/components/prism-rust\";\nimport { CopyButton } from \"../copy-button/copy-button.js\";\n\nexport interface CodeBlockProps {\n code: string;\n language?: string;\n showCopy?: boolean;\n className?: string;\n}\n\nexport function CodeBlock({ code, language = \"bash\", showCopy = true, className = \"\" }: CodeBlockProps) {\n const highlightedHtml = useMemo(() => {\n if (code.length >= 50_000 || !Prism.languages[language]) return null;\n return Prism.highlight(code, Prism.languages[language], language);\n }, [code, language]);\n\n return (\n <div className={`group relative bg-code-bg ${className}`}>\n {showCopy && (\n <div className=\"absolute right-2 top-2 opacity-0 transition-opacity group-hover:opacity-100\">\n <CopyButton text={code} />\n </div>\n )}\n <pre className={`language-${language} !bg-code-bg !m-0`}>\n {highlightedHtml != null ? (\n <code className={`language-${language}`} dangerouslySetInnerHTML={{ __html: highlightedHtml }} />\n ) : (\n <code className={`language-${language}`}>{code}</code>\n )}\n </pre>\n </div>\n );\n}\n","import { useState, useCallback } from \"react\";\n\nexport interface CopyButtonProps {\n text: string;\n className?: string;\n label?: string;\n onCopy?: () => void;\n}\n\nexport function CopyButton({ text, className = \"\", label, onCopy }: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n onCopy?.();\n }, [text, onCopy]);\n\n return (\n <button\n onClick={handleCopy}\n className={`inline-flex items-center gap-1.5 px-2 py-1 text-xs text-text-3\n rounded-sm border border-border-1 transition-colors duration-75 hover:bg-bg-2 hover:text-text-1 ${className}`}\n >\n {copied ? (\n <>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5l3 3 7-7\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n {label ? \"Copied!\" : null}\n </>\n ) : (\n <>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"5\" y=\"5\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3 11V3.5A.5.5 0 013.5 3H11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n {label ?? null}\n </>\n )}\n </button>\n );\n}\n","import { useEffect, forwardRef, type ReactNode, type ButtonHTMLAttributes } from \"react\";\n\nexport interface DialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n}\n\nexport function Dialog({ open, onOpenChange, children }: DialogProps) {\n useEffect(() => {\n if (open) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [open]);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onOpenChange(false);\n };\n if (open) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [open, onOpenChange]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"fixed inset-0 bg-black/60\" onClick={() => onOpenChange(false)} />\n <div className=\"relative z-50\">{children}</div>\n </div>\n );\n}\n\nexport interface DialogContentProps {\n className?: string;\n children: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className = \"\", children }, ref) => (\n <div\n ref={ref}\n className={`relative w-full max-w-lg mx-4 bg-bg-1 border border-border-1 rounded-lg shadow-xl ${className}`}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n ),\n);\nDialogContent.displayName = \"DialogContent\";\n\nexport function DialogHeader({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex flex-col gap-1.5 p-6 border-b border-border-1 ${className}`}>\n {children}\n </div>\n );\n}\n\nexport const DialogTitle = forwardRef<HTMLHeadingElement, { children: ReactNode; className?: string }>(\n ({ children, className = \"\" }, ref) => (\n <h2 ref={ref} className={`text-base font-semibold text-text-1 ${className}`}>\n {children}\n </h2>\n ),\n);\nDialogTitle.displayName = \"DialogTitle\";\n\nexport const DialogDescription = forwardRef<HTMLParagraphElement, { children: ReactNode; className?: string }>(\n ({ children, className = \"\" }, ref) => (\n <p ref={ref} className={`text-sm text-text-3 ${className}`}>\n {children}\n </p>\n ),\n);\nDialogDescription.displayName = \"DialogDescription\";\n\nexport const DialogClose = forwardRef<HTMLButtonElement, ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className = \"\", ...props }, ref) => (\n <button\n ref={ref}\n className={`absolute right-4 top-4 h-6 w-6 flex items-center justify-center text-text-3 hover:text-text-1 transition-colors ${className}`}\n aria-label=\"Close\"\n {...props}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n ),\n);\nDialogClose.displayName = \"DialogClose\";\n\nexport function DialogFooter({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex justify-end gap-3 p-6 border-t border-border-1 ${className}`}>\n {children}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({ icon, title, description, action }: EmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n {icon && <div className=\"mb-4 text-text-3\">{icon}</div>}\n <h3 className=\"text-sm font-medium text-text-1\">{title}</h3>\n {description && <p className=\"mt-1 text-sm text-text-3\">{description}</p>}\n {action && <div className=\"mt-4\">{action}</div>}\n </div>\n );\n}\n","import { type InputHTMLAttributes, forwardRef } from \"react\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ label, error, className = \"\", id, ...props }, ref) => {\n const inputId = id || label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-text-2\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={`h-9 rounded-lg border border-border-1 bg-bg-1 px-3 text-sm text-text-1\n placeholder:text-text-4\n focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-ring\n disabled:cursor-not-allowed disabled:opacity-50\n ${error ? \"border-danger\" : \"\"} ${className}`}\n {...props}\n />\n {error && <p className=\"text-xs text-danger\">{error}</p>}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","import type { ReactNode } from \"react\";\n\nexport interface KbdProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Kbd({ children, className = \"\" }: KbdProps) {\n return (\n <kbd\n className={`inline-flex h-5 min-w-5 items-center justify-center rounded border border-border-1\n bg-bg-2 px-1.5 font-mono text-[10px] font-medium text-text-3 ${className}`}\n >\n {children}\n </kbd>\n );\n}\n","export interface LoadingProps {\n text?: string;\n className?: string;\n}\n\nexport function Loading({ text = \"Loading\", className = \"\" }: LoadingProps) {\n return (\n <div className={`flex items-center gap-1 text-text-3 text-sm font-mono ${className}`}>\n <span>{text}</span>\n <span className=\"flex gap-0.5\">\n <span className=\"animate-pulse\" style={{ animationDelay: \"0ms\" }}>.</span>\n <span className=\"animate-pulse\" style={{ animationDelay: \"200ms\" }}>.</span>\n <span className=\"animate-pulse\" style={{ animationDelay: \"400ms\" }}>.</span>\n </span>\n </div>\n );\n}\n","import { useEffect, useCallback, type ReactNode } from \"react\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function Modal({ open, onClose, title, children, className = \"\" }: ModalProps) {\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"absolute inset-0 bg-black/60\" onClick={onClose} />\n <div\n className={`relative w-full max-w-md rounded-xl border border-border-1 bg-bg-1 p-6 shadow-xl ${className}`}\n >\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-base font-semibold text-text-1\">{title}</h2>\n <button\n onClick={onClose}\n className=\"p-1 text-text-3 transition-colors rounded-sm hover:bg-bg-2\"\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n {children}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface NavTabItem {\n label: string;\n href: string;\n isActive?: boolean;\n}\n\nexport interface NavTabsProps {\n items: NavTabItem[];\n variant?: \"underline\" | \"pill\";\n className?: string;\n renderLink?: (props: { href: string; className: string; children: ReactNode }) => ReactNode;\n}\n\nconst variantStyles = {\n underline: {\n container: \"flex border-b border-border-2 bg-bg-1\",\n item: \"px-5 py-2.5 font-mono text-xs uppercase tracking-wider transition-colors border-b-2\",\n active: \"border-primary-500 font-bold text-text-1\",\n inactive: \"border-transparent text-text-3 hover:text-text-1\",\n },\n pill: {\n container: \"flex items-center gap-1\",\n item: \"px-3 py-2 text-sm font-medium transition-colors rounded-lg\",\n active: \"bg-bg-2 text-text-1\",\n inactive: \"text-text-3 hover:bg-bg-2/50 hover:text-text-1\",\n },\n};\n\nexport function NavTabs({ items, variant = \"underline\", className = \"\", renderLink }: NavTabsProps) {\n const styles = variantStyles[variant];\n\n return (\n <nav className={`${styles.container} ${className}`}>\n {items.map((item) => {\n const itemClassName = `${styles.item} ${item.isActive ? styles.active : styles.inactive}`;\n\n if (renderLink) {\n return (\n <span key={item.href}>\n {renderLink({ href: item.href, className: itemClassName, children: item.label })}\n </span>\n );\n }\n\n return (\n <a key={item.href} href={item.href} className={itemClassName}>\n {item.label}\n </a>\n );\n })}\n </nav>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface SectionHeaderProps {\n title: string;\n badge?: ReactNode;\n className?: string;\n}\n\nexport function SectionHeader({ title, badge, className = \"\" }: SectionHeaderProps) {\n return (\n <div className={`flex items-center justify-between bg-bg-2 px-3 py-2.5 rounded-t-xl ${className}`}>\n <span className=\"text-xs font-semibold text-text-2\">{title}</span>\n {badge}\n </div>\n );\n}\n","import { type SelectHTMLAttributes, forwardRef } from \"react\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n options: SelectOption[];\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n ({ label, options, className = \"\", id, ...props }, ref) => {\n const selectId = id || label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={selectId} className=\"text-sm font-medium text-text-2\">\n {label}\n </label>\n )}\n <select\n ref={ref}\n id={selectId}\n className={`h-9 rounded-lg border border-border-1 bg-bg-1 px-3 text-sm text-text-1\n focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-ring\n disabled:cursor-not-allowed disabled:opacity-50\n ${className}`}\n {...props}\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n","import { useEffect, useCallback, type ReactNode } from \"react\";\nimport { Button } from \"../button/button.js\";\n\nexport interface SidePanelProps {\n open: boolean;\n onClose: () => void;\n title: string;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function SidePanel({ open, onClose, title, subtitle, children, className = \"\" }: SidePanelProps) {\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\" onClick={onClose}>\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-black/50\" />\n\n {/* Panel */}\n <div\n className={`relative bg-bg-1 rounded-lg shadow-xl flex flex-col w-[900px] h-[600px] ${className}`}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between px-4 py-3 bg-bg-2 rounded-t-lg flex-shrink-0\">\n <div className=\"min-w-0\">\n <h3 className=\"font-semibold text-base truncate\">{title}</h3>\n {subtitle && <p className=\"text-xs text-text-3\">{subtitle}</p>}\n </div>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose} className=\"flex-shrink-0\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-hidden\">\n {children}\n </div>\n </div>\n </div>\n );\n}\n","export interface SeparatorProps {\n className?: string;\n}\n\nexport function Separator({ className = \"\" }: SeparatorProps) {\n return <div className={`mx-1 h-5 w-px shrink-0 bg-border-1 ${className}`} />;\n}\n","export interface SkeletonProps {\n className?: string;\n}\n\nexport function Skeleton({ className = \"\" }: SkeletonProps) {\n return (\n <div\n className={`rounded-lg bg-bg-2 animate-pulse ${className}`}\n />\n );\n}\n","import { Skeleton } from \"../skeleton/skeleton.js\";\n\nexport interface SkeletonTableProps {\n className?: string;\n rows?: number;\n cols?: number;\n}\n\nexport function SkeletonTable({ className = \"\", rows = 5, cols = 4 }: SkeletonTableProps) {\n return (\n <div className={`w-full ${className}`}>\n <div className=\"flex gap-4 mb-4 pb-4 border-b border-border-1\">\n {Array.from({ length: cols }).map((_, i) => (\n <Skeleton key={i} className=\"h-4 flex-1 rounded\" />\n ))}\n </div>\n <div className=\"space-y-3\">\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex gap-4\">\n {Array.from({ length: cols }).map((_, j) => (\n <Skeleton key={j} className=\"h-4 flex-1 rounded\" />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","export interface SparklineProps {\n trend: number[];\n className?: string;\n}\n\nexport function Sparkline({ trend, className = \"\" }: SparklineProps) {\n const max = Math.max(...trend);\n return (\n <div className={`flex items-end gap-px h-4 ${className}`}>\n {trend.map((v, i) => {\n const h = Math.max(2, Math.round((v / max) * 14));\n const col = v >= 10 ? \"bg-danger\" : v >= 7 ? \"bg-warning\" : \"bg-text-3\";\n return <div key={i} className={`w-[3px] rounded-full ${col}`} style={{ height: `${h}px` }} />;\n })}\n </div>\n );\n}\n","export interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst sizeMap = { sm: \"h-4 w-4\", md: \"h-5 w-5\", lg: \"h-6 w-6\" };\n\nexport function Spinner({ size = \"md\", className = \"\" }: SpinnerProps) {\n return (\n <svg\n className={`animate-spin text-text-3 ${sizeMap[size]} ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role=\"status\"\n aria-label=\"Loading\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2.5\" opacity=\"0.2\" />\n <path\n d=\"M12 2a10 10 0 019.95 9\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype StatusDot = \"success\" | \"warning\" | \"danger\" | \"idle\";\n\nexport interface StatusBarItem {\n dot?: StatusDot;\n label: string;\n}\n\nexport interface StatusBarProps {\n items: StatusBarItem[];\n trailing?: ReactNode;\n className?: string;\n}\n\nconst dotColors: Record<StatusDot, string> = {\n success: \"bg-success\",\n warning: \"bg-warning\",\n danger: \"bg-danger\",\n idle: \"bg-text-4\",\n};\n\nexport function StatusBar({ items, trailing, className = \"\" }: StatusBarProps) {\n return (\n <div className={`flex h-7 shrink-0 items-center gap-4 border-t border-border-1 bg-bg-0 px-4 ${className}`}>\n {items.map((item, i) => (\n <div key={i} className=\"flex items-center gap-1.5 text-xs text-text-3\">\n {item.dot && (\n <span className={`inline-block h-1.5 w-1.5 rounded-full ${dotColors[item.dot]}`} />\n )}\n {item.label}\n </div>\n ))}\n {trailing && <div className=\"ml-auto text-xs text-text-3\">{trailing}</div>}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface TableProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Table({ children, className = \"\" }: TableProps) {\n return (\n <div className=\"w-full overflow-x-auto rounded-xl\">\n <table className={`w-full text-sm ${className}`}>{children}</table>\n </div>\n );\n}\n\nexport function TableHead({ children }: { children: ReactNode }) {\n return (\n <thead className=\"border-b border-border-1\">\n <tr>{children}</tr>\n </thead>\n );\n}\n\nexport interface TableHeaderProps {\n children?: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function TableHeader({ children, className = \"\", onClick }: TableHeaderProps) {\n return (\n <th\n className={`px-4 py-3 text-left text-xs font-medium text-text-3 ${onClick ? \"cursor-pointer select-none hover:text-text-1\" : \"\"} ${className}`}\n onClick={onClick}\n >\n {children}\n </th>\n );\n}\n\nexport function TableBody({ children }: { children: ReactNode }) {\n return <tbody className=\"divide-y divide-border-2\">{children}</tbody>;\n}\n\nexport interface TableRowProps {\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function TableRow({ children, className = \"\", onClick }: TableRowProps) {\n return (\n <tr className={`hover:bg-bg-2/50 transition-colors ${onClick ? \"cursor-pointer\" : \"\"} ${className}`} onClick={onClick}>\n {children}\n </tr>\n );\n}\n\nexport function TableCell({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <td className={`px-4 py-3.5 text-text-2 ${className}`}>{children}</td>;\n}\n","export interface Tab {\n value: string;\n label: string;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function Tabs({ tabs, value, onChange, className = \"\" }: TabsProps) {\n return (\n <div className={`flex gap-1 rounded-lg border border-border-1 bg-bg-1 p-1 ${className}`}>\n {tabs.map((tab) => (\n <button\n key={tab.value}\n onClick={() => onChange(tab.value)}\n className={`px-3 py-1.5 text-sm font-medium transition-all rounded-md\n ${\n value === tab.value\n ? \"bg-bg-3 text-text-1\"\n : \"text-text-3 hover:bg-bg-2 hover:text-text-1\"\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface ToggleProps {\n options: [string, string];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function Toggle({ options, value, onChange, className = \"\" }: ToggleProps) {\n const [left, right] = options;\n\n return (\n <div className={`inline-flex items-center gap-2 text-sm ${className}`}>\n <span\n className={`cursor-pointer transition-colors ${value === left ? \"text-text-1\" : \"text-text-3\"}`}\n onClick={() => onChange(left)}\n >\n {left}\n </span>\n <button\n onClick={() => onChange(value === left ? right : left)}\n className={`relative w-10 h-5 rounded-none transition-colors border-2 border-border-1 ${\n value === right ? \"bg-primary-500\" : \"bg-bg-1\"\n }`}\n >\n <span\n className={`absolute top-0.5 w-4 h-4 rounded-none transition-transform bg-text-1 ${\n value === right ? \"translate-x-5\" : \"translate-x-0.5\"\n }`}\n />\n </button>\n <span\n className={`cursor-pointer transition-colors ${value === right ? \"text-text-1\" : \"text-text-3\"}`}\n onClick={() => onChange(right)}\n >\n {right}\n </span>\n </div>\n );\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","variantStyles","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","Prism","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","variantStyles","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","_","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/accordion/accordion.tsx","../src/components/badge/badge.tsx","../src/components/button/button.tsx","../src/components/card/card.tsx","../src/components/chip/chip.tsx","../src/components/chip-group/chip-group.tsx","../src/components/code-block/code-block.tsx","../src/components/copy-button/copy-button.tsx","../src/components/dialog/dialog.tsx","../src/components/empty-state/empty-state.tsx","../src/components/input/input.tsx","../src/components/kbd/kbd.tsx","../src/components/loading/loading.tsx","../src/components/modal/modal.tsx","../src/components/nav-tabs/nav-tabs.tsx","../src/components/section-header/section-header.tsx","../src/components/select/select.tsx","../src/components/side-panel/side-panel.tsx","../src/components/separator/separator.tsx","../src/components/skeleton/skeleton.tsx","../src/components/skeleton-table/skeleton-table.tsx","../src/components/sparkline/sparkline.tsx","../src/components/spinner/spinner.tsx","../src/components/status-bar/status-bar.tsx","../src/components/table/table.tsx","../src/components/tabs/tabs.tsx","../src/components/toggle/toggle.tsx"],"sourcesContent":["export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from \"./components/accordion/index.js\";\nexport type { AccordionProps, AccordionItemProps, AccordionTriggerProps, AccordionContentProps } from \"./components/accordion/index.js\";\nexport { Badge } from \"./components/badge/index.js\";\nexport type { BadgeProps } from \"./components/badge/index.js\";\nexport { Button } from \"./components/button/index.js\";\nexport type { ButtonProps } from \"./components/button/index.js\";\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from \"./components/card/index.js\";\nexport type { CardProps } from \"./components/card/index.js\";\nexport { Chip } from \"./components/chip/index.js\";\nexport type { ChipProps } from \"./components/chip/index.js\";\nexport { ChipGroup } from \"./components/chip-group/index.js\";\nexport type { ChipGroupProps, ChipGroupOption } from \"./components/chip-group/index.js\";\nexport { CodeBlock } from \"./components/code-block/index.js\";\nexport type { CodeBlockProps } from \"./components/code-block/index.js\";\nexport { CopyButton } from \"./components/copy-button/index.js\";\nexport type { CopyButtonProps } from \"./components/copy-button/index.js\";\nexport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogClose, DialogFooter } from \"./components/dialog/index.js\";\nexport type { DialogProps, DialogContentProps } from \"./components/dialog/index.js\";\nexport { EmptyState } from \"./components/empty-state/index.js\";\nexport type { EmptyStateProps } from \"./components/empty-state/index.js\";\nexport { Input } from \"./components/input/index.js\";\nexport type { InputProps } from \"./components/input/index.js\";\nexport { Kbd } from \"./components/kbd/index.js\";\nexport type { KbdProps } from \"./components/kbd/index.js\";\nexport { Loading } from \"./components/loading/index.js\";\nexport type { LoadingProps } from \"./components/loading/index.js\";\nexport { Modal } from \"./components/modal/index.js\";\nexport type { ModalProps } from \"./components/modal/index.js\";\nexport { NavTabs } from \"./components/nav-tabs/index.js\";\nexport type { NavTabsProps, NavTabItem } from \"./components/nav-tabs/index.js\";\nexport { SectionHeader } from \"./components/section-header/index.js\";\nexport type { SectionHeaderProps } from \"./components/section-header/index.js\";\nexport { Select } from \"./components/select/index.js\";\nexport type { SelectProps, SelectOption } from \"./components/select/index.js\";\nexport { SidePanel } from \"./components/side-panel/index.js\";\nexport type { SidePanelProps } from \"./components/side-panel/index.js\";\nexport { Separator } from \"./components/separator/index.js\";\nexport type { SeparatorProps } from \"./components/separator/index.js\";\nexport { Skeleton } from \"./components/skeleton/index.js\";\nexport type { SkeletonProps } from \"./components/skeleton/index.js\";\nexport { SkeletonTable } from \"./components/skeleton-table/index.js\";\nexport type { SkeletonTableProps } from \"./components/skeleton-table/index.js\";\nexport { Sparkline } from \"./components/sparkline/index.js\";\nexport type { SparklineProps } from \"./components/sparkline/index.js\";\nexport { Spinner } from \"./components/spinner/index.js\";\nexport type { SpinnerProps } from \"./components/spinner/index.js\";\nexport { StatusBar } from \"./components/status-bar/index.js\";\nexport type { StatusBarProps, StatusBarItem } from \"./components/status-bar/index.js\";\nexport { Table, TableHead, TableHeader, TableBody, TableRow, TableCell } from \"./components/table/index.js\";\nexport type { TableProps, TableHeaderProps, TableRowProps } from \"./components/table/index.js\";\nexport { Tabs } from \"./components/tabs/index.js\";\nexport type { TabsProps, Tab } from \"./components/tabs/index.js\";\nexport { Toggle } from \"./components/toggle/index.js\";\nexport type { ToggleProps } from \"./components/toggle/index.js\";\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className = \"\", ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={`border-b border-border-1 ${className}`}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className = \"\", children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={`flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180 ${className}`}\n {...props}\n >\n {children}\n <svg\n className=\"h-4 w-4 shrink-0 transition-transform duration-200\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className = \"\", children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={`pb-4 pt-0 ${className}`}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n\nexport type AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>;\nexport type AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>;\nexport type AccordionTriggerProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>;\nexport type AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>;\n","import type { ReactNode } from \"react\";\n\ntype BadgeVariant = \"active\" | \"inactive\" | \"coming-soon\" | \"default\" | \"signal\" | \"success\" | \"danger\" | \"warning\" | \"error\" | \"outline\";\n\nconst variantStyles: Record<BadgeVariant, string> = {\n active: \"bg-primary-500 text-white\",\n inactive: \"bg-bg-2 text-text-2\",\n \"coming-soon\": \"bg-bg-2 text-text-2\",\n default: \"bg-bg-2 text-text-1\",\n signal: \"bg-primary-500 text-white\",\n success: \"bg-success/15 text-success border-success/30\",\n danger: \"bg-danger/15 text-danger border-danger/30\",\n warning: \"bg-warning/15 text-warning border-warning/30\",\n error: \"bg-danger/15 text-danger border-danger/30\",\n outline: \"bg-bg-1 text-text-1 border-border-1\",\n};\n\nexport interface BadgeProps {\n variant?: BadgeVariant;\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function Badge({ variant = \"default\", children, className = \"\", onClick }: BadgeProps) {\n return (\n <span\n className={`inline-flex items-center rounded-full border border-border-1 px-2.5 py-0.5 text-[11px] font-medium ${variantStyles[variant]} ${className}`}\n onClick={onClick}\n >\n {children}\n </span>\n );\n}\n","import { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\ntype ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"destructive\" | \"link\";\ntype ButtonSize = \"sm\" | \"md\" | \"lg\" | \"icon\";\n\nconst variantStyles: Record<ButtonVariant, string> = {\n primary:\n \"rounded-full bg-accent-500 text-[var(--accent-text,#0a0b0d)] font-semibold border-transparent hover:brightness-95\",\n secondary:\n \"rounded-full bg-bg-2 text-text-1 border-border-1 font-medium hover:bg-bg-3\",\n ghost:\n \"rounded-xl text-text-2 border-transparent hover:bg-bg-2 hover:text-text-1\",\n danger:\n \"rounded-full bg-danger/10 text-danger border-transparent hover:bg-danger/20\",\n destructive:\n \"rounded-full bg-danger text-white font-semibold border-transparent hover:bg-danger/90\",\n link:\n \"text-primary-500 border-transparent underline-offset-4 hover:underline\",\n};\n\nconst sizeStyles: Record<ButtonSize, string> = {\n sm: \"h-8 px-3 text-xs gap-1.5\",\n md: \"h-9 px-4 text-sm gap-2\",\n lg: \"h-11 px-6 text-sm gap-2\",\n icon: \"h-9 w-9 p-0\",\n};\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"primary\", size = \"md\", className = \"\", children, disabled, ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={`inline-flex items-center justify-center font-medium transition-all duration-150 tracking-[0.01em]\n border\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-ring\n disabled:pointer-events-none disabled:opacity-50\n ${variantStyles[variant]} ${sizeStyles[size]} ${className}`}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n","import type { ReactNode } from \"react\";\n\nexport interface CardProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Card({ children, className = \"\" }: CardProps) {\n return (\n <div className={`card-modern p-6 ${className}`}>\n {children}\n </div>\n );\n}\n\nexport function CardHeader({ children, className = \"\" }: CardProps) {\n return <div className={`mb-4 ${className}`}>{children}</div>;\n}\n\nexport function CardTitle({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <h3 className={`text-sm font-medium text-text-1 ${className}`}>{children}</h3>;\n}\n\nexport function CardDescription({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <p className={`mt-1 text-xs text-text-3 ${className}`}>{children}</p>;\n}\n\nexport function CardContent({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <div className={`pt-4 ${className}`}>{children}</div>;\n}\n\nexport function CardFooter({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <div className={`pt-4 mt-4 border-t border-border-1 ${className}`}>{children}</div>;\n}\n","import type { ReactNode } from \"react\";\n\nexport interface ChipProps {\n active: boolean;\n onClick: () => void;\n children: ReactNode;\n className?: string;\n}\n\nexport function Chip({ active, onClick, children, className = \"\" }: ChipProps) {\n return (\n <button\n onClick={onClick}\n className={`text-xs font-medium px-3 py-1 rounded-full border cursor-pointer whitespace-nowrap transition-all ${\n active\n ? \"text-primary-500 border-primary-500/30 bg-primary-500/10\"\n : \"text-text-2 bg-bg-2 border-border-1 hover:text-text-1\"\n } ${className}`}\n >\n {children}\n </button>\n );\n}\n","import { Chip } from \"../chip/chip.js\";\n\nexport interface ChipGroupOption {\n value: string;\n label: string;\n}\n\ninterface ChipGroupBaseProps {\n options: ChipGroupOption[];\n className?: string;\n}\n\ninterface ChipGroupSingleProps extends ChipGroupBaseProps {\n multiple?: false;\n value: string;\n onChange: (value: string) => void;\n}\n\ninterface ChipGroupMultipleProps extends ChipGroupBaseProps {\n multiple: true;\n value: string[];\n onChange: (value: string[]) => void;\n}\n\nexport type ChipGroupProps = ChipGroupSingleProps | ChipGroupMultipleProps;\n\nexport function ChipGroup(props: ChipGroupProps) {\n const { options, className = \"\" } = props;\n\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n {options.map((option) => {\n const isActive = props.multiple\n ? props.value.includes(option.value)\n : props.value === option.value;\n\n const handleClick = () => {\n if (props.multiple) {\n const next = props.value.includes(option.value)\n ? props.value.filter((v) => v !== option.value)\n : [...props.value, option.value];\n props.onChange(next);\n } else {\n props.onChange(option.value);\n }\n };\n\n return (\n <Chip key={option.value} active={isActive} onClick={handleClick}>\n {option.label}\n </Chip>\n );\n })}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport Prism from \"prismjs\";\nimport \"prismjs/components/prism-json\";\nimport \"prismjs/components/prism-bash\";\nimport \"prismjs/components/prism-python\";\nimport \"prismjs/components/prism-javascript\";\nimport \"prismjs/components/prism-typescript\";\nimport \"prismjs/components/prism-rust\";\nimport { CopyButton } from \"../copy-button/copy-button.js\";\n\nexport interface CodeBlockProps {\n code: string;\n language?: string;\n showCopy?: boolean;\n className?: string;\n}\n\nexport function CodeBlock({ code, language = \"bash\", showCopy = true, className = \"\" }: CodeBlockProps) {\n const highlightedHtml = useMemo(() => {\n if (code.length >= 50_000 || !Prism.languages[language]) return null;\n return Prism.highlight(code, Prism.languages[language], language);\n }, [code, language]);\n\n return (\n <div className={`group relative bg-code-bg rounded-xl overflow-hidden ${className}`}>\n {showCopy && (\n <div className=\"absolute right-2 top-2 opacity-0 transition-opacity group-hover:opacity-100\">\n <CopyButton text={code} />\n </div>\n )}\n <pre className={`language-${language} !bg-code-bg !m-0`}>\n {highlightedHtml != null ? (\n <code className={`language-${language}`} dangerouslySetInnerHTML={{ __html: highlightedHtml }} />\n ) : (\n <code className={`language-${language}`}>{code}</code>\n )}\n </pre>\n </div>\n );\n}\n","import { useState, useCallback } from \"react\";\n\nexport interface CopyButtonProps {\n text: string;\n className?: string;\n label?: string;\n onCopy?: () => void;\n}\n\nexport function CopyButton({ text, className = \"\", label, onCopy }: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n onCopy?.();\n }, [text, onCopy]);\n\n return (\n <button\n onClick={handleCopy}\n className={`inline-flex items-center gap-1.5 px-2 py-1 text-xs text-text-3\n rounded-lg border border-border-1 transition-colors duration-75 hover:bg-bg-2 hover:text-text-1 ${className}`}\n >\n {copied ? (\n <>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5l3 3 7-7\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n {label ? \"Copied!\" : null}\n </>\n ) : (\n <>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"5\" y=\"5\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3 11V3.5A.5.5 0 013.5 3H11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n {label ?? null}\n </>\n )}\n </button>\n );\n}\n","import { useEffect, forwardRef, type ReactNode, type ButtonHTMLAttributes } from \"react\";\n\nexport interface DialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n}\n\nexport function Dialog({ open, onOpenChange, children }: DialogProps) {\n useEffect(() => {\n if (open) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [open]);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onOpenChange(false);\n };\n if (open) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [open, onOpenChange]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"fixed inset-0 bg-black/60\" onClick={() => onOpenChange(false)} />\n <div className=\"relative z-50\">{children}</div>\n </div>\n );\n}\n\nexport interface DialogContentProps {\n className?: string;\n children: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className = \"\", children }, ref) => (\n <div\n ref={ref}\n className={`relative w-full max-w-lg mx-4 bg-bg-1 border border-border-1 rounded-2xl ${className}`}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n ),\n);\nDialogContent.displayName = \"DialogContent\";\n\nexport function DialogHeader({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex flex-col gap-1.5 p-6 border-b border-border-1 ${className}`}>\n {children}\n </div>\n );\n}\n\nexport const DialogTitle = forwardRef<HTMLHeadingElement, { children: ReactNode; className?: string }>(\n ({ children, className = \"\" }, ref) => (\n <h2 ref={ref} className={`text-base font-semibold text-text-1 ${className}`}>\n {children}\n </h2>\n ),\n);\nDialogTitle.displayName = \"DialogTitle\";\n\nexport const DialogDescription = forwardRef<HTMLParagraphElement, { children: ReactNode; className?: string }>(\n ({ children, className = \"\" }, ref) => (\n <p ref={ref} className={`text-sm text-text-3 ${className}`}>\n {children}\n </p>\n ),\n);\nDialogDescription.displayName = \"DialogDescription\";\n\nexport const DialogClose = forwardRef<HTMLButtonElement, ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className = \"\", ...props }, ref) => (\n <button\n ref={ref}\n className={`absolute right-4 top-4 h-6 w-6 flex items-center justify-center text-text-3 hover:text-text-1 transition-colors ${className}`}\n aria-label=\"Close\"\n {...props}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n ),\n);\nDialogClose.displayName = \"DialogClose\";\n\nexport function DialogFooter({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex justify-end gap-3 p-6 border-t border-border-1 ${className}`}>\n {children}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({ icon, title, description, action }: EmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n {icon && <div className=\"mb-4 text-text-3\">{icon}</div>}\n <h3 className=\"text-sm font-medium text-text-1\">{title}</h3>\n {description && <p className=\"mt-1 text-sm text-text-3\">{description}</p>}\n {action && <div className=\"mt-4\">{action}</div>}\n </div>\n );\n}\n","import { type InputHTMLAttributes, forwardRef } from \"react\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ label, error, className = \"\", id, ...props }, ref) => {\n const inputId = id || label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-text-2\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={`h-9 rounded-xl border border-border-1 bg-bg-1 px-3 text-sm text-text-1\n placeholder:text-text-4\n focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500\n disabled:cursor-not-allowed disabled:opacity-50\n ${error ? \"border-danger\" : \"\"} ${className}`}\n {...props}\n />\n {error && <p className=\"text-xs text-danger\">{error}</p>}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","import type { ReactNode } from \"react\";\n\nexport interface KbdProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Kbd({ children, className = \"\" }: KbdProps) {\n return (\n <kbd\n className={`inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border-1\n bg-bg-2 px-1.5 font-mono text-[10px] font-medium text-text-3 ${className}`}\n >\n {children}\n </kbd>\n );\n}\n","export interface LoadingProps {\n text?: string;\n className?: string;\n}\n\nexport function Loading({ text = \"Loading\", className = \"\" }: LoadingProps) {\n return (\n <div className={`flex items-center gap-1 text-text-3 text-sm font-mono ${className}`}>\n <span>{text}</span>\n <span className=\"flex gap-0.5\">\n <span className=\"animate-pulse\" style={{ animationDelay: \"0ms\" }}>.</span>\n <span className=\"animate-pulse\" style={{ animationDelay: \"200ms\" }}>.</span>\n <span className=\"animate-pulse\" style={{ animationDelay: \"400ms\" }}>.</span>\n </span>\n </div>\n );\n}\n","import { useEffect, useCallback, type ReactNode } from \"react\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function Modal({ open, onClose, title, children, className = \"\" }: ModalProps) {\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"absolute inset-0 bg-black/60\" onClick={onClose} />\n <div\n className={`relative w-full max-w-md rounded-2xl border border-border-1 bg-bg-1 p-6 ${className}`}\n >\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-base font-semibold text-text-1\">{title}</h2>\n <button\n onClick={onClose}\n className=\"p-1 text-text-3 transition-colors rounded-lg hover:bg-bg-2\"\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n {children}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface NavTabItem {\n label: string;\n href: string;\n isActive?: boolean;\n}\n\nexport interface NavTabsProps {\n items: NavTabItem[];\n variant?: \"underline\" | \"pill\";\n className?: string;\n renderLink?: (props: { href: string; className: string; children: ReactNode }) => ReactNode;\n}\n\nconst variantStyles = {\n underline: {\n container: \"flex border-b border-border-2 bg-bg-1\",\n item: \"px-5 py-2.5 font-mono text-xs uppercase tracking-wider transition-colors border-b-2\",\n active: \"border-primary-500 font-bold text-text-1\",\n inactive: \"border-transparent text-text-3 hover:text-text-1\",\n },\n pill: {\n container: \"flex items-center gap-1\",\n item: \"px-3 py-2 text-sm font-medium transition-colors rounded-xl\",\n active: \"bg-bg-2 text-text-1\",\n inactive: \"text-text-3 hover:bg-bg-2/50 hover:text-text-1\",\n },\n};\n\nexport function NavTabs({ items, variant = \"underline\", className = \"\", renderLink }: NavTabsProps) {\n const styles = variantStyles[variant];\n\n return (\n <nav className={`${styles.container} ${className}`}>\n {items.map((item) => {\n const itemClassName = `${styles.item} ${item.isActive ? styles.active : styles.inactive}`;\n\n if (renderLink) {\n return (\n <span key={item.href}>\n {renderLink({ href: item.href, className: itemClassName, children: item.label })}\n </span>\n );\n }\n\n return (\n <a key={item.href} href={item.href} className={itemClassName}>\n {item.label}\n </a>\n );\n })}\n </nav>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface SectionHeaderProps {\n title: string;\n badge?: ReactNode;\n className?: string;\n}\n\nexport function SectionHeader({ title, badge, className = \"\" }: SectionHeaderProps) {\n return (\n <div className={`flex items-center justify-between bg-bg-2 px-3 py-2.5 rounded-t-2xl ${className}`}>\n <span className=\"text-xs font-semibold text-text-2\">{title}</span>\n {badge}\n </div>\n );\n}\n","import { type SelectHTMLAttributes, forwardRef } from \"react\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n options: SelectOption[];\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n ({ label, options, className = \"\", id, ...props }, ref) => {\n const selectId = id || label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={selectId} className=\"text-sm font-medium text-text-2\">\n {label}\n </label>\n )}\n <select\n ref={ref}\n id={selectId}\n className={`h-9 rounded-xl border border-border-1 bg-bg-1 px-3 text-sm text-text-1\n focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500\n disabled:cursor-not-allowed disabled:opacity-50\n ${className}`}\n {...props}\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n","import { useEffect, useCallback, type ReactNode } from \"react\";\nimport { Button } from \"../button/button.js\";\n\nexport interface SidePanelProps {\n open: boolean;\n onClose: () => void;\n title: string;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function SidePanel({ open, onClose, title, subtitle, children, className = \"\" }: SidePanelProps) {\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\" onClick={onClose}>\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-black/50\" />\n\n {/* Panel */}\n <div\n className={`relative bg-bg-1 rounded-2xl flex flex-col w-[900px] h-[600px] ${className}`}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between px-4 py-3 bg-bg-2 rounded-t-2xl flex-shrink-0\">\n <div className=\"min-w-0\">\n <h3 className=\"font-semibold text-base truncate\">{title}</h3>\n {subtitle && <p className=\"text-xs text-text-3\">{subtitle}</p>}\n </div>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose} className=\"flex-shrink-0\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-hidden\">\n {children}\n </div>\n </div>\n </div>\n );\n}\n","export interface SeparatorProps {\n className?: string;\n}\n\nexport function Separator({ className = \"\" }: SeparatorProps) {\n return <div className={`mx-1 h-5 w-px shrink-0 bg-border-1 ${className}`} />;\n}\n","export interface SkeletonProps {\n className?: string;\n}\n\nexport function Skeleton({ className = \"\" }: SkeletonProps) {\n return (\n <div\n className={`rounded-lg bg-bg-2 animate-pulse ${className}`}\n />\n );\n}\n","import { Skeleton } from \"../skeleton/skeleton.js\";\n\nexport interface SkeletonTableProps {\n className?: string;\n rows?: number;\n cols?: number;\n}\n\nexport function SkeletonTable({ className = \"\", rows = 5, cols = 4 }: SkeletonTableProps) {\n return (\n <div className={`w-full ${className}`}>\n <div className=\"flex gap-4 mb-4 pb-4 border-b border-border-1\">\n {Array.from({ length: cols }).map((_, i) => (\n <Skeleton key={i} className=\"h-4 flex-1 rounded\" />\n ))}\n </div>\n <div className=\"space-y-3\">\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex gap-4\">\n {Array.from({ length: cols }).map((_, j) => (\n <Skeleton key={j} className=\"h-4 flex-1 rounded\" />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","export interface SparklineProps {\n trend: number[];\n className?: string;\n}\n\nexport function Sparkline({ trend, className = \"\" }: SparklineProps) {\n const max = Math.max(...trend);\n return (\n <div className={`flex items-end gap-px h-4 ${className}`}>\n {trend.map((v, i) => {\n const h = Math.max(2, Math.round((v / max) * 14));\n const col = v >= 10 ? \"bg-danger\" : v >= 7 ? \"bg-warning\" : \"bg-text-3\";\n return <div key={i} className={`w-[3px] rounded-full ${col}`} style={{ height: `${h}px` }} />;\n })}\n </div>\n );\n}\n","export interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst sizeMap = { sm: \"h-4 w-4\", md: \"h-5 w-5\", lg: \"h-6 w-6\" };\n\nexport function Spinner({ size = \"md\", className = \"\" }: SpinnerProps) {\n return (\n <svg\n className={`animate-spin text-text-3 ${sizeMap[size]} ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role=\"status\"\n aria-label=\"Loading\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2.5\" opacity=\"0.2\" />\n <path\n d=\"M12 2a10 10 0 019.95 9\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype StatusDot = \"success\" | \"warning\" | \"danger\" | \"idle\";\n\nexport interface StatusBarItem {\n dot?: StatusDot;\n label: string;\n}\n\nexport interface StatusBarProps {\n items: StatusBarItem[];\n trailing?: ReactNode;\n className?: string;\n}\n\nconst dotColors: Record<StatusDot, string> = {\n success: \"bg-success\",\n warning: \"bg-warning\",\n danger: \"bg-danger\",\n idle: \"bg-text-4\",\n};\n\nexport function StatusBar({ items, trailing, className = \"\" }: StatusBarProps) {\n return (\n <div className={`flex h-7 shrink-0 items-center gap-4 border-t border-border-1 bg-bg-0 px-4 ${className}`}>\n {items.map((item, i) => (\n <div key={i} className=\"flex items-center gap-1.5 text-xs text-text-3\">\n {item.dot && (\n <span className={`inline-block h-1.5 w-1.5 rounded-full ${dotColors[item.dot]}`} />\n )}\n {item.label}\n </div>\n ))}\n {trailing && <div className=\"ml-auto text-xs text-text-3\">{trailing}</div>}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface TableProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Table({ children, className = \"\" }: TableProps) {\n return (\n <div className=\"w-full overflow-x-auto rounded-xl\">\n <table className={`w-full text-sm ${className}`}>{children}</table>\n </div>\n );\n}\n\nexport function TableHead({ children }: { children: ReactNode }) {\n return (\n <thead className=\"border-b border-border-1\">\n <tr>{children}</tr>\n </thead>\n );\n}\n\nexport interface TableHeaderProps {\n children?: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function TableHeader({ children, className = \"\", onClick }: TableHeaderProps) {\n return (\n <th\n className={`px-4 py-3 text-left text-xs font-medium text-text-3 ${onClick ? \"cursor-pointer select-none hover:text-text-1\" : \"\"} ${className}`}\n onClick={onClick}\n >\n {children}\n </th>\n );\n}\n\nexport function TableBody({ children }: { children: ReactNode }) {\n return <tbody className=\"divide-y divide-border-2\">{children}</tbody>;\n}\n\nexport interface TableRowProps {\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function TableRow({ children, className = \"\", onClick }: TableRowProps) {\n return (\n <tr className={`hover:bg-bg-2/50 transition-colors ${onClick ? \"cursor-pointer\" : \"\"} ${className}`} onClick={onClick}>\n {children}\n </tr>\n );\n}\n\nexport function TableCell({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <td className={`px-4 py-3.5 text-text-2 ${className}`}>{children}</td>;\n}\n","export interface Tab {\n value: string;\n label: string;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function Tabs({ tabs, value, onChange, className = \"\" }: TabsProps) {\n return (\n <div className={`flex gap-1 rounded-xl border border-border-1 bg-bg-1 p-1 ${className}`}>\n {tabs.map((tab) => (\n <button\n key={tab.value}\n onClick={() => onChange(tab.value)}\n className={`px-3 py-1.5 text-sm font-medium transition-all rounded-lg\n ${\n value === tab.value\n ? \"bg-bg-3 text-text-1\"\n : \"text-text-3 hover:bg-bg-2 hover:text-text-1\"\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface ToggleProps {\n options: [string, string];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function Toggle({ options, value, onChange, className = \"\" }: ToggleProps) {\n const [left, right] = options;\n\n return (\n <div className={`inline-flex items-center gap-2 text-sm ${className}`}>\n <span\n className={`cursor-pointer transition-colors ${value === left ? \"text-text-1\" : \"text-text-3\"}`}\n onClick={() => onChange(left)}\n >\n {left}\n </span>\n <button\n onClick={() => onChange(value === left ? right : left)}\n className={`relative w-10 h-5 rounded-full transition-colors border-2 border-border-1 ${\n value === right ? \"bg-primary-500\" : \"bg-bg-1\"\n }`}\n >\n <span\n className={`absolute top-0.5 w-4 h-4 rounded-full transition-transform bg-text-1 ${\n value === right ? \"translate-x-5\" : \"translate-x-0.5\"\n }`}\n />\n </button>\n <span\n className={`cursor-pointer transition-colors ${value === right ? \"text-text-1\" : \"text-text-3\"}`}\n onClick={() => onChange(right)}\n >\n {right}\n </span>\n </div>\n );\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_jsx_runtime","variantStyles","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","Prism","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","variantStyles","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","_","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|
package/dist/index.mjs
CHANGED
|
@@ -77,11 +77,11 @@ function Badge({ variant = "default", children, className = "", onClick }) {
|
|
|
77
77
|
import { forwardRef as forwardRef2 } from "react";
|
|
78
78
|
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
79
79
|
var variantStyles2 = {
|
|
80
|
-
primary: "bg-accent-500 text-[var(--accent-text,#
|
|
81
|
-
secondary: "bg-bg-2 text-text-1 border-border-1 font-medium hover:bg-bg-3
|
|
82
|
-
ghost: "text-text-2 border-transparent hover:bg-bg-2 hover:text-text-1",
|
|
83
|
-
danger: "bg-danger/10 text-danger border-
|
|
84
|
-
destructive: "bg-danger text-white font-semibold border-
|
|
80
|
+
primary: "rounded-full bg-accent-500 text-[var(--accent-text,#0a0b0d)] font-semibold border-transparent hover:brightness-95",
|
|
81
|
+
secondary: "rounded-full bg-bg-2 text-text-1 border-border-1 font-medium hover:bg-bg-3",
|
|
82
|
+
ghost: "rounded-xl text-text-2 border-transparent hover:bg-bg-2 hover:text-text-1",
|
|
83
|
+
danger: "rounded-full bg-danger/10 text-danger border-transparent hover:bg-danger/20",
|
|
84
|
+
destructive: "rounded-full bg-danger text-white font-semibold border-transparent hover:bg-danger/90",
|
|
85
85
|
link: "text-primary-500 border-transparent underline-offset-4 hover:underline"
|
|
86
86
|
};
|
|
87
87
|
var sizeStyles = {
|
|
@@ -96,8 +96,8 @@ var Button = forwardRef2(
|
|
|
96
96
|
"button",
|
|
97
97
|
{
|
|
98
98
|
ref,
|
|
99
|
-
className: `inline-flex items-center justify-center font-medium transition-all duration-
|
|
100
|
-
|
|
99
|
+
className: `inline-flex items-center justify-center font-medium transition-all duration-150 tracking-[0.01em]
|
|
100
|
+
border
|
|
101
101
|
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-ring
|
|
102
102
|
disabled:pointer-events-none disabled:opacity-50
|
|
103
103
|
${variantStyles2[variant]} ${sizeStyles[size]} ${className}`,
|
|
@@ -138,7 +138,7 @@ function Chip({ active, onClick, children, className = "" }) {
|
|
|
138
138
|
"button",
|
|
139
139
|
{
|
|
140
140
|
onClick,
|
|
141
|
-
className: `text-xs font-medium px-3 py-1 rounded-
|
|
141
|
+
className: `text-xs font-medium px-3 py-1 rounded-full border cursor-pointer whitespace-nowrap transition-all ${active ? "text-primary-500 border-primary-500/30 bg-primary-500/10" : "text-text-2 bg-bg-2 border-border-1 hover:text-text-1"} ${className}`,
|
|
142
142
|
children
|
|
143
143
|
}
|
|
144
144
|
);
|
|
@@ -188,7 +188,7 @@ function CopyButton({ text, className = "", label, onCopy }) {
|
|
|
188
188
|
{
|
|
189
189
|
onClick: handleCopy,
|
|
190
190
|
className: `inline-flex items-center gap-1.5 px-2 py-1 text-xs text-text-3
|
|
191
|
-
rounded-
|
|
191
|
+
rounded-lg border border-border-1 transition-colors duration-75 hover:bg-bg-2 hover:text-text-1 ${className}`,
|
|
192
192
|
children: copied ? /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
193
193
|
/* @__PURE__ */ jsx7("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsx7("path", { d: "M3 8.5l3 3 7-7", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }),
|
|
194
194
|
label ? "Copied!" : null
|
|
@@ -210,7 +210,7 @@ function CodeBlock({ code, language = "bash", showCopy = true, className = "" })
|
|
|
210
210
|
if (code.length >= 5e4 || !Prism.languages[language]) return null;
|
|
211
211
|
return Prism.highlight(code, Prism.languages[language], language);
|
|
212
212
|
}, [code, language]);
|
|
213
|
-
return /* @__PURE__ */ jsxs3("div", { className: `group relative bg-code-bg ${className}`, children: [
|
|
213
|
+
return /* @__PURE__ */ jsxs3("div", { className: `group relative bg-code-bg rounded-xl overflow-hidden ${className}`, children: [
|
|
214
214
|
showCopy && /* @__PURE__ */ jsx8("div", { className: "absolute right-2 top-2 opacity-0 transition-opacity group-hover:opacity-100", children: /* @__PURE__ */ jsx8(CopyButton, { text: code }) }),
|
|
215
215
|
/* @__PURE__ */ jsx8("pre", { className: `language-${language} !bg-code-bg !m-0`, children: highlightedHtml != null ? /* @__PURE__ */ jsx8("code", { className: `language-${language}`, dangerouslySetInnerHTML: { __html: highlightedHtml } }) : /* @__PURE__ */ jsx8("code", { className: `language-${language}`, children: code }) })
|
|
216
216
|
] });
|
|
@@ -252,7 +252,7 @@ var DialogContent = forwardRef3(
|
|
|
252
252
|
"div",
|
|
253
253
|
{
|
|
254
254
|
ref,
|
|
255
|
-
className: `relative w-full max-w-lg mx-4 bg-bg-1 border border-border-1 rounded-
|
|
255
|
+
className: `relative w-full max-w-lg mx-4 bg-bg-1 border border-border-1 rounded-2xl ${className}`,
|
|
256
256
|
onClick: (e) => e.stopPropagation(),
|
|
257
257
|
children
|
|
258
258
|
}
|
|
@@ -311,9 +311,9 @@ var Input = forwardRef4(
|
|
|
311
311
|
{
|
|
312
312
|
ref,
|
|
313
313
|
id: inputId,
|
|
314
|
-
className: `h-9 rounded-
|
|
314
|
+
className: `h-9 rounded-xl border border-border-1 bg-bg-1 px-3 text-sm text-text-1
|
|
315
315
|
placeholder:text-text-4
|
|
316
|
-
focus:border-primary-500 focus:outline-none focus:ring-
|
|
316
|
+
focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500
|
|
317
317
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
318
318
|
${error ? "border-danger" : ""} ${className}`,
|
|
319
319
|
...props
|
|
@@ -331,7 +331,7 @@ function Kbd({ children, className = "" }) {
|
|
|
331
331
|
return /* @__PURE__ */ jsx12(
|
|
332
332
|
"kbd",
|
|
333
333
|
{
|
|
334
|
-
className: `inline-flex h-5 min-w-5 items-center justify-center rounded border border-border-1
|
|
334
|
+
className: `inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border-1
|
|
335
335
|
bg-bg-2 px-1.5 font-mono text-[10px] font-medium text-text-3 ${className}`,
|
|
336
336
|
children
|
|
337
337
|
}
|
|
@@ -377,7 +377,7 @@ function Modal({ open, onClose, title, children, className = "" }) {
|
|
|
377
377
|
/* @__PURE__ */ jsxs8(
|
|
378
378
|
"div",
|
|
379
379
|
{
|
|
380
|
-
className: `relative w-full max-w-md rounded-
|
|
380
|
+
className: `relative w-full max-w-md rounded-2xl border border-border-1 bg-bg-1 p-6 ${className}`,
|
|
381
381
|
children: [
|
|
382
382
|
/* @__PURE__ */ jsxs8("div", { className: "mb-4 flex items-center justify-between", children: [
|
|
383
383
|
/* @__PURE__ */ jsx14("h2", { className: "text-base font-semibold text-text-1", children: title }),
|
|
@@ -385,7 +385,7 @@ function Modal({ open, onClose, title, children, className = "" }) {
|
|
|
385
385
|
"button",
|
|
386
386
|
{
|
|
387
387
|
onClick: onClose,
|
|
388
|
-
className: "p-1 text-text-3 transition-colors rounded-
|
|
388
|
+
className: "p-1 text-text-3 transition-colors rounded-lg hover:bg-bg-2",
|
|
389
389
|
"aria-label": "Close",
|
|
390
390
|
children: /* @__PURE__ */ jsx14("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsx14("path", { d: "M4 4l8 8M12 4l-8 8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) })
|
|
391
391
|
}
|
|
@@ -409,7 +409,7 @@ var variantStyles3 = {
|
|
|
409
409
|
},
|
|
410
410
|
pill: {
|
|
411
411
|
container: "flex items-center gap-1",
|
|
412
|
-
item: "px-3 py-2 text-sm font-medium transition-colors rounded-
|
|
412
|
+
item: "px-3 py-2 text-sm font-medium transition-colors rounded-xl",
|
|
413
413
|
active: "bg-bg-2 text-text-1",
|
|
414
414
|
inactive: "text-text-3 hover:bg-bg-2/50 hover:text-text-1"
|
|
415
415
|
}
|
|
@@ -428,7 +428,7 @@ function NavTabs({ items, variant = "underline", className = "", renderLink }) {
|
|
|
428
428
|
// src/components/section-header/section-header.tsx
|
|
429
429
|
import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
430
430
|
function SectionHeader({ title, badge, className = "" }) {
|
|
431
|
-
return /* @__PURE__ */ jsxs9("div", { className: `flex items-center justify-between bg-bg-2 px-3 py-2.5 rounded-t-
|
|
431
|
+
return /* @__PURE__ */ jsxs9("div", { className: `flex items-center justify-between bg-bg-2 px-3 py-2.5 rounded-t-2xl ${className}`, children: [
|
|
432
432
|
/* @__PURE__ */ jsx16("span", { className: "text-xs font-semibold text-text-2", children: title }),
|
|
433
433
|
badge
|
|
434
434
|
] });
|
|
@@ -447,8 +447,8 @@ var Select = forwardRef5(
|
|
|
447
447
|
{
|
|
448
448
|
ref,
|
|
449
449
|
id: selectId,
|
|
450
|
-
className: `h-9 rounded-
|
|
451
|
-
focus:border-primary-500 focus:outline-none focus:ring-
|
|
450
|
+
className: `h-9 rounded-xl border border-border-1 bg-bg-1 px-3 text-sm text-text-1
|
|
451
|
+
focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500
|
|
452
452
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
453
453
|
${className}`,
|
|
454
454
|
...props,
|
|
@@ -486,10 +486,10 @@ function SidePanel({ open, onClose, title, subtitle, children, className = "" })
|
|
|
486
486
|
/* @__PURE__ */ jsxs11(
|
|
487
487
|
"div",
|
|
488
488
|
{
|
|
489
|
-
className: `relative bg-bg-1 rounded-
|
|
489
|
+
className: `relative bg-bg-1 rounded-2xl flex flex-col w-[900px] h-[600px] ${className}`,
|
|
490
490
|
onClick: (e) => e.stopPropagation(),
|
|
491
491
|
children: [
|
|
492
|
-
/* @__PURE__ */ jsxs11("div", { className: "flex items-center justify-between px-4 py-3 bg-bg-2 rounded-t-
|
|
492
|
+
/* @__PURE__ */ jsxs11("div", { className: "flex items-center justify-between px-4 py-3 bg-bg-2 rounded-t-2xl flex-shrink-0", children: [
|
|
493
493
|
/* @__PURE__ */ jsxs11("div", { className: "min-w-0", children: [
|
|
494
494
|
/* @__PURE__ */ jsx18("h3", { className: "font-semibold text-base truncate", children: title }),
|
|
495
495
|
subtitle && /* @__PURE__ */ jsx18("p", { className: "text-xs text-text-3", children: subtitle })
|
|
@@ -617,11 +617,11 @@ function TableCell({ children, className = "" }) {
|
|
|
617
617
|
// src/components/tabs/tabs.tsx
|
|
618
618
|
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
619
619
|
function Tabs({ tabs, value, onChange, className = "" }) {
|
|
620
|
-
return /* @__PURE__ */ jsx26("div", { className: `flex gap-1 rounded-
|
|
620
|
+
return /* @__PURE__ */ jsx26("div", { className: `flex gap-1 rounded-xl border border-border-1 bg-bg-1 p-1 ${className}`, children: tabs.map((tab) => /* @__PURE__ */ jsx26(
|
|
621
621
|
"button",
|
|
622
622
|
{
|
|
623
623
|
onClick: () => onChange(tab.value),
|
|
624
|
-
className: `px-3 py-1.5 text-sm font-medium transition-all rounded-
|
|
624
|
+
className: `px-3 py-1.5 text-sm font-medium transition-all rounded-lg
|
|
625
625
|
${value === tab.value ? "bg-bg-3 text-text-1" : "text-text-3 hover:bg-bg-2 hover:text-text-1"}`,
|
|
626
626
|
children: tab.label
|
|
627
627
|
},
|
|
@@ -646,11 +646,11 @@ function Toggle({ options, value, onChange, className = "" }) {
|
|
|
646
646
|
"button",
|
|
647
647
|
{
|
|
648
648
|
onClick: () => onChange(value === left ? right : left),
|
|
649
|
-
className: `relative w-10 h-5 rounded-
|
|
649
|
+
className: `relative w-10 h-5 rounded-full transition-colors border-2 border-border-1 ${value === right ? "bg-primary-500" : "bg-bg-1"}`,
|
|
650
650
|
children: /* @__PURE__ */ jsx27(
|
|
651
651
|
"span",
|
|
652
652
|
{
|
|
653
|
-
className: `absolute top-0.5 w-4 h-4 rounded-
|
|
653
|
+
className: `absolute top-0.5 w-4 h-4 rounded-full transition-transform bg-text-1 ${value === right ? "translate-x-5" : "translate-x-0.5"}`
|
|
654
654
|
}
|
|
655
655
|
)
|
|
656
656
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/accordion/accordion.tsx","../src/components/badge/badge.tsx","../src/components/button/button.tsx","../src/components/card/card.tsx","../src/components/chip/chip.tsx","../src/components/chip-group/chip-group.tsx","../src/components/code-block/code-block.tsx","../src/components/copy-button/copy-button.tsx","../src/components/dialog/dialog.tsx","../src/components/empty-state/empty-state.tsx","../src/components/input/input.tsx","../src/components/kbd/kbd.tsx","../src/components/loading/loading.tsx","../src/components/modal/modal.tsx","../src/components/nav-tabs/nav-tabs.tsx","../src/components/section-header/section-header.tsx","../src/components/select/select.tsx","../src/components/side-panel/side-panel.tsx","../src/components/separator/separator.tsx","../src/components/skeleton/skeleton.tsx","../src/components/skeleton-table/skeleton-table.tsx","../src/components/sparkline/sparkline.tsx","../src/components/spinner/spinner.tsx","../src/components/status-bar/status-bar.tsx","../src/components/table/table.tsx","../src/components/tabs/tabs.tsx","../src/components/toggle/toggle.tsx"],"sourcesContent":["import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className = \"\", ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={`border-b border-border-1 ${className}`}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className = \"\", children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={`flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180 ${className}`}\n {...props}\n >\n {children}\n <svg\n className=\"h-4 w-4 shrink-0 transition-transform duration-200\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className = \"\", children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={`pb-4 pt-0 ${className}`}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n\nexport type AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>;\nexport type AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>;\nexport type AccordionTriggerProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>;\nexport type AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>;\n","import type { ReactNode } from \"react\";\n\ntype BadgeVariant = \"active\" | \"inactive\" | \"coming-soon\" | \"default\" | \"signal\" | \"success\" | \"danger\" | \"warning\" | \"error\" | \"outline\";\n\nconst variantStyles: Record<BadgeVariant, string> = {\n active: \"bg-primary-500 text-white\",\n inactive: \"bg-bg-2 text-text-2\",\n \"coming-soon\": \"bg-bg-2 text-text-2\",\n default: \"bg-bg-2 text-text-1\",\n signal: \"bg-primary-500 text-white\",\n success: \"bg-success/15 text-success border-success/30\",\n danger: \"bg-danger/15 text-danger border-danger/30\",\n warning: \"bg-warning/15 text-warning border-warning/30\",\n error: \"bg-danger/15 text-danger border-danger/30\",\n outline: \"bg-bg-1 text-text-1 border-border-1\",\n};\n\nexport interface BadgeProps {\n variant?: BadgeVariant;\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function Badge({ variant = \"default\", children, className = \"\", onClick }: BadgeProps) {\n return (\n <span\n className={`inline-flex items-center rounded-full border border-border-1 px-2.5 py-0.5 text-[11px] font-medium ${variantStyles[variant]} ${className}`}\n onClick={onClick}\n >\n {children}\n </span>\n );\n}\n","import { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\ntype ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"destructive\" | \"link\";\ntype ButtonSize = \"sm\" | \"md\" | \"lg\" | \"icon\";\n\nconst variantStyles: Record<ButtonVariant, string> = {\n primary:\n \"bg-accent-500 text-[var(--accent-text,#111111)] font-semibold border-accent-500 hover:brightness-110 hover:shadow-[0_0_16px_rgba(255,255,255,0.1)]\",\n secondary:\n \"bg-bg-2 text-text-1 border-border-1 font-medium hover:bg-bg-3 hover:border-border-1\",\n ghost:\n \"text-text-2 border-transparent hover:bg-bg-2 hover:text-text-1\",\n danger:\n \"bg-danger/10 text-danger border-danger/30 hover:bg-danger/20\",\n destructive:\n \"bg-danger text-white font-semibold border-danger hover:bg-danger/90\",\n link:\n \"text-primary-500 border-transparent underline-offset-4 hover:underline\",\n};\n\nconst sizeStyles: Record<ButtonSize, string> = {\n sm: \"h-8 px-3 text-xs gap-1.5\",\n md: \"h-9 px-4 text-sm gap-2\",\n lg: \"h-11 px-6 text-sm gap-2\",\n icon: \"h-9 w-9 p-0\",\n};\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"primary\", size = \"md\", className = \"\", children, disabled, ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={`inline-flex items-center justify-center font-medium transition-all duration-200\n rounded-lg border\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-ring\n disabled:pointer-events-none disabled:opacity-50\n ${variantStyles[variant]} ${sizeStyles[size]} ${className}`}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n","import type { ReactNode } from \"react\";\n\nexport interface CardProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Card({ children, className = \"\" }: CardProps) {\n return (\n <div className={`card-modern p-6 ${className}`}>\n {children}\n </div>\n );\n}\n\nexport function CardHeader({ children, className = \"\" }: CardProps) {\n return <div className={`mb-4 ${className}`}>{children}</div>;\n}\n\nexport function CardTitle({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <h3 className={`text-sm font-medium text-text-1 ${className}`}>{children}</h3>;\n}\n\nexport function CardDescription({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <p className={`mt-1 text-xs text-text-3 ${className}`}>{children}</p>;\n}\n\nexport function CardContent({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <div className={`pt-4 ${className}`}>{children}</div>;\n}\n\nexport function CardFooter({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <div className={`pt-4 mt-4 border-t border-border-1 ${className}`}>{children}</div>;\n}\n","import type { ReactNode } from \"react\";\n\nexport interface ChipProps {\n active: boolean;\n onClick: () => void;\n children: ReactNode;\n className?: string;\n}\n\nexport function Chip({ active, onClick, children, className = \"\" }: ChipProps) {\n return (\n <button\n onClick={onClick}\n className={`text-xs font-medium px-3 py-1 rounded-lg border cursor-pointer whitespace-nowrap transition-all ${\n active\n ? \"text-primary-500 border-primary-500/30 bg-primary-500/10\"\n : \"text-text-2 bg-bg-2 border-border-1 hover:text-text-1\"\n } ${className}`}\n >\n {children}\n </button>\n );\n}\n","import { Chip } from \"../chip/chip.js\";\n\nexport interface ChipGroupOption {\n value: string;\n label: string;\n}\n\ninterface ChipGroupBaseProps {\n options: ChipGroupOption[];\n className?: string;\n}\n\ninterface ChipGroupSingleProps extends ChipGroupBaseProps {\n multiple?: false;\n value: string;\n onChange: (value: string) => void;\n}\n\ninterface ChipGroupMultipleProps extends ChipGroupBaseProps {\n multiple: true;\n value: string[];\n onChange: (value: string[]) => void;\n}\n\nexport type ChipGroupProps = ChipGroupSingleProps | ChipGroupMultipleProps;\n\nexport function ChipGroup(props: ChipGroupProps) {\n const { options, className = \"\" } = props;\n\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n {options.map((option) => {\n const isActive = props.multiple\n ? props.value.includes(option.value)\n : props.value === option.value;\n\n const handleClick = () => {\n if (props.multiple) {\n const next = props.value.includes(option.value)\n ? props.value.filter((v) => v !== option.value)\n : [...props.value, option.value];\n props.onChange(next);\n } else {\n props.onChange(option.value);\n }\n };\n\n return (\n <Chip key={option.value} active={isActive} onClick={handleClick}>\n {option.label}\n </Chip>\n );\n })}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport Prism from \"prismjs\";\nimport \"prismjs/components/prism-json\";\nimport \"prismjs/components/prism-bash\";\nimport \"prismjs/components/prism-python\";\nimport \"prismjs/components/prism-javascript\";\nimport \"prismjs/components/prism-typescript\";\nimport \"prismjs/components/prism-rust\";\nimport { CopyButton } from \"../copy-button/copy-button.js\";\n\nexport interface CodeBlockProps {\n code: string;\n language?: string;\n showCopy?: boolean;\n className?: string;\n}\n\nexport function CodeBlock({ code, language = \"bash\", showCopy = true, className = \"\" }: CodeBlockProps) {\n const highlightedHtml = useMemo(() => {\n if (code.length >= 50_000 || !Prism.languages[language]) return null;\n return Prism.highlight(code, Prism.languages[language], language);\n }, [code, language]);\n\n return (\n <div className={`group relative bg-code-bg ${className}`}>\n {showCopy && (\n <div className=\"absolute right-2 top-2 opacity-0 transition-opacity group-hover:opacity-100\">\n <CopyButton text={code} />\n </div>\n )}\n <pre className={`language-${language} !bg-code-bg !m-0`}>\n {highlightedHtml != null ? (\n <code className={`language-${language}`} dangerouslySetInnerHTML={{ __html: highlightedHtml }} />\n ) : (\n <code className={`language-${language}`}>{code}</code>\n )}\n </pre>\n </div>\n );\n}\n","import { useState, useCallback } from \"react\";\n\nexport interface CopyButtonProps {\n text: string;\n className?: string;\n label?: string;\n onCopy?: () => void;\n}\n\nexport function CopyButton({ text, className = \"\", label, onCopy }: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n onCopy?.();\n }, [text, onCopy]);\n\n return (\n <button\n onClick={handleCopy}\n className={`inline-flex items-center gap-1.5 px-2 py-1 text-xs text-text-3\n rounded-sm border border-border-1 transition-colors duration-75 hover:bg-bg-2 hover:text-text-1 ${className}`}\n >\n {copied ? (\n <>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5l3 3 7-7\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n {label ? \"Copied!\" : null}\n </>\n ) : (\n <>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"5\" y=\"5\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3 11V3.5A.5.5 0 013.5 3H11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n {label ?? null}\n </>\n )}\n </button>\n );\n}\n","import { useEffect, forwardRef, type ReactNode, type ButtonHTMLAttributes } from \"react\";\n\nexport interface DialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n}\n\nexport function Dialog({ open, onOpenChange, children }: DialogProps) {\n useEffect(() => {\n if (open) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [open]);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onOpenChange(false);\n };\n if (open) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [open, onOpenChange]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"fixed inset-0 bg-black/60\" onClick={() => onOpenChange(false)} />\n <div className=\"relative z-50\">{children}</div>\n </div>\n );\n}\n\nexport interface DialogContentProps {\n className?: string;\n children: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className = \"\", children }, ref) => (\n <div\n ref={ref}\n className={`relative w-full max-w-lg mx-4 bg-bg-1 border border-border-1 rounded-lg shadow-xl ${className}`}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n ),\n);\nDialogContent.displayName = \"DialogContent\";\n\nexport function DialogHeader({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex flex-col gap-1.5 p-6 border-b border-border-1 ${className}`}>\n {children}\n </div>\n );\n}\n\nexport const DialogTitle = forwardRef<HTMLHeadingElement, { children: ReactNode; className?: string }>(\n ({ children, className = \"\" }, ref) => (\n <h2 ref={ref} className={`text-base font-semibold text-text-1 ${className}`}>\n {children}\n </h2>\n ),\n);\nDialogTitle.displayName = \"DialogTitle\";\n\nexport const DialogDescription = forwardRef<HTMLParagraphElement, { children: ReactNode; className?: string }>(\n ({ children, className = \"\" }, ref) => (\n <p ref={ref} className={`text-sm text-text-3 ${className}`}>\n {children}\n </p>\n ),\n);\nDialogDescription.displayName = \"DialogDescription\";\n\nexport const DialogClose = forwardRef<HTMLButtonElement, ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className = \"\", ...props }, ref) => (\n <button\n ref={ref}\n className={`absolute right-4 top-4 h-6 w-6 flex items-center justify-center text-text-3 hover:text-text-1 transition-colors ${className}`}\n aria-label=\"Close\"\n {...props}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n ),\n);\nDialogClose.displayName = \"DialogClose\";\n\nexport function DialogFooter({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex justify-end gap-3 p-6 border-t border-border-1 ${className}`}>\n {children}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({ icon, title, description, action }: EmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n {icon && <div className=\"mb-4 text-text-3\">{icon}</div>}\n <h3 className=\"text-sm font-medium text-text-1\">{title}</h3>\n {description && <p className=\"mt-1 text-sm text-text-3\">{description}</p>}\n {action && <div className=\"mt-4\">{action}</div>}\n </div>\n );\n}\n","import { type InputHTMLAttributes, forwardRef } from \"react\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ label, error, className = \"\", id, ...props }, ref) => {\n const inputId = id || label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-text-2\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={`h-9 rounded-lg border border-border-1 bg-bg-1 px-3 text-sm text-text-1\n placeholder:text-text-4\n focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-ring\n disabled:cursor-not-allowed disabled:opacity-50\n ${error ? \"border-danger\" : \"\"} ${className}`}\n {...props}\n />\n {error && <p className=\"text-xs text-danger\">{error}</p>}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","import type { ReactNode } from \"react\";\n\nexport interface KbdProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Kbd({ children, className = \"\" }: KbdProps) {\n return (\n <kbd\n className={`inline-flex h-5 min-w-5 items-center justify-center rounded border border-border-1\n bg-bg-2 px-1.5 font-mono text-[10px] font-medium text-text-3 ${className}`}\n >\n {children}\n </kbd>\n );\n}\n","export interface LoadingProps {\n text?: string;\n className?: string;\n}\n\nexport function Loading({ text = \"Loading\", className = \"\" }: LoadingProps) {\n return (\n <div className={`flex items-center gap-1 text-text-3 text-sm font-mono ${className}`}>\n <span>{text}</span>\n <span className=\"flex gap-0.5\">\n <span className=\"animate-pulse\" style={{ animationDelay: \"0ms\" }}>.</span>\n <span className=\"animate-pulse\" style={{ animationDelay: \"200ms\" }}>.</span>\n <span className=\"animate-pulse\" style={{ animationDelay: \"400ms\" }}>.</span>\n </span>\n </div>\n );\n}\n","import { useEffect, useCallback, type ReactNode } from \"react\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function Modal({ open, onClose, title, children, className = \"\" }: ModalProps) {\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"absolute inset-0 bg-black/60\" onClick={onClose} />\n <div\n className={`relative w-full max-w-md rounded-xl border border-border-1 bg-bg-1 p-6 shadow-xl ${className}`}\n >\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-base font-semibold text-text-1\">{title}</h2>\n <button\n onClick={onClose}\n className=\"p-1 text-text-3 transition-colors rounded-sm hover:bg-bg-2\"\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n {children}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface NavTabItem {\n label: string;\n href: string;\n isActive?: boolean;\n}\n\nexport interface NavTabsProps {\n items: NavTabItem[];\n variant?: \"underline\" | \"pill\";\n className?: string;\n renderLink?: (props: { href: string; className: string; children: ReactNode }) => ReactNode;\n}\n\nconst variantStyles = {\n underline: {\n container: \"flex border-b border-border-2 bg-bg-1\",\n item: \"px-5 py-2.5 font-mono text-xs uppercase tracking-wider transition-colors border-b-2\",\n active: \"border-primary-500 font-bold text-text-1\",\n inactive: \"border-transparent text-text-3 hover:text-text-1\",\n },\n pill: {\n container: \"flex items-center gap-1\",\n item: \"px-3 py-2 text-sm font-medium transition-colors rounded-lg\",\n active: \"bg-bg-2 text-text-1\",\n inactive: \"text-text-3 hover:bg-bg-2/50 hover:text-text-1\",\n },\n};\n\nexport function NavTabs({ items, variant = \"underline\", className = \"\", renderLink }: NavTabsProps) {\n const styles = variantStyles[variant];\n\n return (\n <nav className={`${styles.container} ${className}`}>\n {items.map((item) => {\n const itemClassName = `${styles.item} ${item.isActive ? styles.active : styles.inactive}`;\n\n if (renderLink) {\n return (\n <span key={item.href}>\n {renderLink({ href: item.href, className: itemClassName, children: item.label })}\n </span>\n );\n }\n\n return (\n <a key={item.href} href={item.href} className={itemClassName}>\n {item.label}\n </a>\n );\n })}\n </nav>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface SectionHeaderProps {\n title: string;\n badge?: ReactNode;\n className?: string;\n}\n\nexport function SectionHeader({ title, badge, className = \"\" }: SectionHeaderProps) {\n return (\n <div className={`flex items-center justify-between bg-bg-2 px-3 py-2.5 rounded-t-xl ${className}`}>\n <span className=\"text-xs font-semibold text-text-2\">{title}</span>\n {badge}\n </div>\n );\n}\n","import { type SelectHTMLAttributes, forwardRef } from \"react\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n options: SelectOption[];\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n ({ label, options, className = \"\", id, ...props }, ref) => {\n const selectId = id || label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={selectId} className=\"text-sm font-medium text-text-2\">\n {label}\n </label>\n )}\n <select\n ref={ref}\n id={selectId}\n className={`h-9 rounded-lg border border-border-1 bg-bg-1 px-3 text-sm text-text-1\n focus:border-primary-500 focus:outline-none focus:ring-2 focus:ring-primary-ring\n disabled:cursor-not-allowed disabled:opacity-50\n ${className}`}\n {...props}\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n","import { useEffect, useCallback, type ReactNode } from \"react\";\nimport { Button } from \"../button/button.js\";\n\nexport interface SidePanelProps {\n open: boolean;\n onClose: () => void;\n title: string;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function SidePanel({ open, onClose, title, subtitle, children, className = \"\" }: SidePanelProps) {\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\" onClick={onClose}>\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-black/50\" />\n\n {/* Panel */}\n <div\n className={`relative bg-bg-1 rounded-lg shadow-xl flex flex-col w-[900px] h-[600px] ${className}`}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between px-4 py-3 bg-bg-2 rounded-t-lg flex-shrink-0\">\n <div className=\"min-w-0\">\n <h3 className=\"font-semibold text-base truncate\">{title}</h3>\n {subtitle && <p className=\"text-xs text-text-3\">{subtitle}</p>}\n </div>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose} className=\"flex-shrink-0\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-hidden\">\n {children}\n </div>\n </div>\n </div>\n );\n}\n","export interface SeparatorProps {\n className?: string;\n}\n\nexport function Separator({ className = \"\" }: SeparatorProps) {\n return <div className={`mx-1 h-5 w-px shrink-0 bg-border-1 ${className}`} />;\n}\n","export interface SkeletonProps {\n className?: string;\n}\n\nexport function Skeleton({ className = \"\" }: SkeletonProps) {\n return (\n <div\n className={`rounded-lg bg-bg-2 animate-pulse ${className}`}\n />\n );\n}\n","import { Skeleton } from \"../skeleton/skeleton.js\";\n\nexport interface SkeletonTableProps {\n className?: string;\n rows?: number;\n cols?: number;\n}\n\nexport function SkeletonTable({ className = \"\", rows = 5, cols = 4 }: SkeletonTableProps) {\n return (\n <div className={`w-full ${className}`}>\n <div className=\"flex gap-4 mb-4 pb-4 border-b border-border-1\">\n {Array.from({ length: cols }).map((_, i) => (\n <Skeleton key={i} className=\"h-4 flex-1 rounded\" />\n ))}\n </div>\n <div className=\"space-y-3\">\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex gap-4\">\n {Array.from({ length: cols }).map((_, j) => (\n <Skeleton key={j} className=\"h-4 flex-1 rounded\" />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","export interface SparklineProps {\n trend: number[];\n className?: string;\n}\n\nexport function Sparkline({ trend, className = \"\" }: SparklineProps) {\n const max = Math.max(...trend);\n return (\n <div className={`flex items-end gap-px h-4 ${className}`}>\n {trend.map((v, i) => {\n const h = Math.max(2, Math.round((v / max) * 14));\n const col = v >= 10 ? \"bg-danger\" : v >= 7 ? \"bg-warning\" : \"bg-text-3\";\n return <div key={i} className={`w-[3px] rounded-full ${col}`} style={{ height: `${h}px` }} />;\n })}\n </div>\n );\n}\n","export interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst sizeMap = { sm: \"h-4 w-4\", md: \"h-5 w-5\", lg: \"h-6 w-6\" };\n\nexport function Spinner({ size = \"md\", className = \"\" }: SpinnerProps) {\n return (\n <svg\n className={`animate-spin text-text-3 ${sizeMap[size]} ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role=\"status\"\n aria-label=\"Loading\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2.5\" opacity=\"0.2\" />\n <path\n d=\"M12 2a10 10 0 019.95 9\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype StatusDot = \"success\" | \"warning\" | \"danger\" | \"idle\";\n\nexport interface StatusBarItem {\n dot?: StatusDot;\n label: string;\n}\n\nexport interface StatusBarProps {\n items: StatusBarItem[];\n trailing?: ReactNode;\n className?: string;\n}\n\nconst dotColors: Record<StatusDot, string> = {\n success: \"bg-success\",\n warning: \"bg-warning\",\n danger: \"bg-danger\",\n idle: \"bg-text-4\",\n};\n\nexport function StatusBar({ items, trailing, className = \"\" }: StatusBarProps) {\n return (\n <div className={`flex h-7 shrink-0 items-center gap-4 border-t border-border-1 bg-bg-0 px-4 ${className}`}>\n {items.map((item, i) => (\n <div key={i} className=\"flex items-center gap-1.5 text-xs text-text-3\">\n {item.dot && (\n <span className={`inline-block h-1.5 w-1.5 rounded-full ${dotColors[item.dot]}`} />\n )}\n {item.label}\n </div>\n ))}\n {trailing && <div className=\"ml-auto text-xs text-text-3\">{trailing}</div>}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface TableProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Table({ children, className = \"\" }: TableProps) {\n return (\n <div className=\"w-full overflow-x-auto rounded-xl\">\n <table className={`w-full text-sm ${className}`}>{children}</table>\n </div>\n );\n}\n\nexport function TableHead({ children }: { children: ReactNode }) {\n return (\n <thead className=\"border-b border-border-1\">\n <tr>{children}</tr>\n </thead>\n );\n}\n\nexport interface TableHeaderProps {\n children?: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function TableHeader({ children, className = \"\", onClick }: TableHeaderProps) {\n return (\n <th\n className={`px-4 py-3 text-left text-xs font-medium text-text-3 ${onClick ? \"cursor-pointer select-none hover:text-text-1\" : \"\"} ${className}`}\n onClick={onClick}\n >\n {children}\n </th>\n );\n}\n\nexport function TableBody({ children }: { children: ReactNode }) {\n return <tbody className=\"divide-y divide-border-2\">{children}</tbody>;\n}\n\nexport interface TableRowProps {\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function TableRow({ children, className = \"\", onClick }: TableRowProps) {\n return (\n <tr className={`hover:bg-bg-2/50 transition-colors ${onClick ? \"cursor-pointer\" : \"\"} ${className}`} onClick={onClick}>\n {children}\n </tr>\n );\n}\n\nexport function TableCell({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <td className={`px-4 py-3.5 text-text-2 ${className}`}>{children}</td>;\n}\n","export interface Tab {\n value: string;\n label: string;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function Tabs({ tabs, value, onChange, className = \"\" }: TabsProps) {\n return (\n <div className={`flex gap-1 rounded-lg border border-border-1 bg-bg-1 p-1 ${className}`}>\n {tabs.map((tab) => (\n <button\n key={tab.value}\n onClick={() => onChange(tab.value)}\n className={`px-3 py-1.5 text-sm font-medium transition-all rounded-md\n ${\n value === tab.value\n ? \"bg-bg-3 text-text-1\"\n : \"text-text-3 hover:bg-bg-2 hover:text-text-1\"\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface ToggleProps {\n options: [string, string];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function Toggle({ options, value, onChange, className = \"\" }: ToggleProps) {\n const [left, right] = options;\n\n return (\n <div className={`inline-flex items-center gap-2 text-sm ${className}`}>\n <span\n className={`cursor-pointer transition-colors ${value === left ? \"text-text-1\" : \"text-text-3\"}`}\n onClick={() => onChange(left)}\n >\n {left}\n </span>\n <button\n onClick={() => onChange(value === left ? right : left)}\n className={`relative w-10 h-5 rounded-none transition-colors border-2 border-border-1 ${\n value === right ? \"bg-primary-500\" : \"bg-bg-1\"\n }`}\n >\n <span\n className={`absolute top-0.5 w-4 h-4 rounded-none transition-transform bg-text-1 ${\n value === right ? \"translate-x-5\" : \"translate-x-0.5\"\n }`}\n />\n </button>\n <span\n className={`cursor-pointer transition-colors ${value === right ? \"text-text-1\" : \"text-text-3\"}`}\n onClick={() => onChange(right)}\n >\n {right}\n </span>\n </div>\n );\n}\n"],"mappings":"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","names":["jsx","forwardRef","jsx","variantStyles","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","forwardRef","jsx","jsxs","jsx","jsxs","forwardRef","jsx","jsxs","jsx","jsx","jsxs","useEffect","useCallback","jsx","jsxs","jsx","variantStyles","jsx","jsxs","forwardRef","jsx","jsxs","useEffect","useCallback","jsx","jsxs","useCallback","useEffect","jsx","jsx","jsx","jsxs","_","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/accordion/accordion.tsx","../src/components/badge/badge.tsx","../src/components/button/button.tsx","../src/components/card/card.tsx","../src/components/chip/chip.tsx","../src/components/chip-group/chip-group.tsx","../src/components/code-block/code-block.tsx","../src/components/copy-button/copy-button.tsx","../src/components/dialog/dialog.tsx","../src/components/empty-state/empty-state.tsx","../src/components/input/input.tsx","../src/components/kbd/kbd.tsx","../src/components/loading/loading.tsx","../src/components/modal/modal.tsx","../src/components/nav-tabs/nav-tabs.tsx","../src/components/section-header/section-header.tsx","../src/components/select/select.tsx","../src/components/side-panel/side-panel.tsx","../src/components/separator/separator.tsx","../src/components/skeleton/skeleton.tsx","../src/components/skeleton-table/skeleton-table.tsx","../src/components/sparkline/sparkline.tsx","../src/components/spinner/spinner.tsx","../src/components/status-bar/status-bar.tsx","../src/components/table/table.tsx","../src/components/tabs/tabs.tsx","../src/components/toggle/toggle.tsx"],"sourcesContent":["import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className = \"\", ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={`border-b border-border-1 ${className}`}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className = \"\", children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={`flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180 ${className}`}\n {...props}\n >\n {children}\n <svg\n className=\"h-4 w-4 shrink-0 transition-transform duration-200\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className = \"\", children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={`pb-4 pt-0 ${className}`}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n\nexport type AccordionProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Root>;\nexport type AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>;\nexport type AccordionTriggerProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>;\nexport type AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>;\n","import type { ReactNode } from \"react\";\n\ntype BadgeVariant = \"active\" | \"inactive\" | \"coming-soon\" | \"default\" | \"signal\" | \"success\" | \"danger\" | \"warning\" | \"error\" | \"outline\";\n\nconst variantStyles: Record<BadgeVariant, string> = {\n active: \"bg-primary-500 text-white\",\n inactive: \"bg-bg-2 text-text-2\",\n \"coming-soon\": \"bg-bg-2 text-text-2\",\n default: \"bg-bg-2 text-text-1\",\n signal: \"bg-primary-500 text-white\",\n success: \"bg-success/15 text-success border-success/30\",\n danger: \"bg-danger/15 text-danger border-danger/30\",\n warning: \"bg-warning/15 text-warning border-warning/30\",\n error: \"bg-danger/15 text-danger border-danger/30\",\n outline: \"bg-bg-1 text-text-1 border-border-1\",\n};\n\nexport interface BadgeProps {\n variant?: BadgeVariant;\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function Badge({ variant = \"default\", children, className = \"\", onClick }: BadgeProps) {\n return (\n <span\n className={`inline-flex items-center rounded-full border border-border-1 px-2.5 py-0.5 text-[11px] font-medium ${variantStyles[variant]} ${className}`}\n onClick={onClick}\n >\n {children}\n </span>\n );\n}\n","import { type ButtonHTMLAttributes, forwardRef } from \"react\";\n\ntype ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\" | \"destructive\" | \"link\";\ntype ButtonSize = \"sm\" | \"md\" | \"lg\" | \"icon\";\n\nconst variantStyles: Record<ButtonVariant, string> = {\n primary:\n \"rounded-full bg-accent-500 text-[var(--accent-text,#0a0b0d)] font-semibold border-transparent hover:brightness-95\",\n secondary:\n \"rounded-full bg-bg-2 text-text-1 border-border-1 font-medium hover:bg-bg-3\",\n ghost:\n \"rounded-xl text-text-2 border-transparent hover:bg-bg-2 hover:text-text-1\",\n danger:\n \"rounded-full bg-danger/10 text-danger border-transparent hover:bg-danger/20\",\n destructive:\n \"rounded-full bg-danger text-white font-semibold border-transparent hover:bg-danger/90\",\n link:\n \"text-primary-500 border-transparent underline-offset-4 hover:underline\",\n};\n\nconst sizeStyles: Record<ButtonSize, string> = {\n sm: \"h-8 px-3 text-xs gap-1.5\",\n md: \"h-9 px-4 text-sm gap-2\",\n lg: \"h-11 px-6 text-sm gap-2\",\n icon: \"h-9 w-9 p-0\",\n};\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"primary\", size = \"md\", className = \"\", children, disabled, ...props }, ref) => {\n return (\n <button\n ref={ref}\n className={`inline-flex items-center justify-center font-medium transition-all duration-150 tracking-[0.01em]\n border\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-ring\n disabled:pointer-events-none disabled:opacity-50\n ${variantStyles[variant]} ${sizeStyles[size]} ${className}`}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n","import type { ReactNode } from \"react\";\n\nexport interface CardProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Card({ children, className = \"\" }: CardProps) {\n return (\n <div className={`card-modern p-6 ${className}`}>\n {children}\n </div>\n );\n}\n\nexport function CardHeader({ children, className = \"\" }: CardProps) {\n return <div className={`mb-4 ${className}`}>{children}</div>;\n}\n\nexport function CardTitle({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <h3 className={`text-sm font-medium text-text-1 ${className}`}>{children}</h3>;\n}\n\nexport function CardDescription({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <p className={`mt-1 text-xs text-text-3 ${className}`}>{children}</p>;\n}\n\nexport function CardContent({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <div className={`pt-4 ${className}`}>{children}</div>;\n}\n\nexport function CardFooter({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <div className={`pt-4 mt-4 border-t border-border-1 ${className}`}>{children}</div>;\n}\n","import type { ReactNode } from \"react\";\n\nexport interface ChipProps {\n active: boolean;\n onClick: () => void;\n children: ReactNode;\n className?: string;\n}\n\nexport function Chip({ active, onClick, children, className = \"\" }: ChipProps) {\n return (\n <button\n onClick={onClick}\n className={`text-xs font-medium px-3 py-1 rounded-full border cursor-pointer whitespace-nowrap transition-all ${\n active\n ? \"text-primary-500 border-primary-500/30 bg-primary-500/10\"\n : \"text-text-2 bg-bg-2 border-border-1 hover:text-text-1\"\n } ${className}`}\n >\n {children}\n </button>\n );\n}\n","import { Chip } from \"../chip/chip.js\";\n\nexport interface ChipGroupOption {\n value: string;\n label: string;\n}\n\ninterface ChipGroupBaseProps {\n options: ChipGroupOption[];\n className?: string;\n}\n\ninterface ChipGroupSingleProps extends ChipGroupBaseProps {\n multiple?: false;\n value: string;\n onChange: (value: string) => void;\n}\n\ninterface ChipGroupMultipleProps extends ChipGroupBaseProps {\n multiple: true;\n value: string[];\n onChange: (value: string[]) => void;\n}\n\nexport type ChipGroupProps = ChipGroupSingleProps | ChipGroupMultipleProps;\n\nexport function ChipGroup(props: ChipGroupProps) {\n const { options, className = \"\" } = props;\n\n return (\n <div className={`flex items-center gap-2 ${className}`}>\n {options.map((option) => {\n const isActive = props.multiple\n ? props.value.includes(option.value)\n : props.value === option.value;\n\n const handleClick = () => {\n if (props.multiple) {\n const next = props.value.includes(option.value)\n ? props.value.filter((v) => v !== option.value)\n : [...props.value, option.value];\n props.onChange(next);\n } else {\n props.onChange(option.value);\n }\n };\n\n return (\n <Chip key={option.value} active={isActive} onClick={handleClick}>\n {option.label}\n </Chip>\n );\n })}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport Prism from \"prismjs\";\nimport \"prismjs/components/prism-json\";\nimport \"prismjs/components/prism-bash\";\nimport \"prismjs/components/prism-python\";\nimport \"prismjs/components/prism-javascript\";\nimport \"prismjs/components/prism-typescript\";\nimport \"prismjs/components/prism-rust\";\nimport { CopyButton } from \"../copy-button/copy-button.js\";\n\nexport interface CodeBlockProps {\n code: string;\n language?: string;\n showCopy?: boolean;\n className?: string;\n}\n\nexport function CodeBlock({ code, language = \"bash\", showCopy = true, className = \"\" }: CodeBlockProps) {\n const highlightedHtml = useMemo(() => {\n if (code.length >= 50_000 || !Prism.languages[language]) return null;\n return Prism.highlight(code, Prism.languages[language], language);\n }, [code, language]);\n\n return (\n <div className={`group relative bg-code-bg rounded-xl overflow-hidden ${className}`}>\n {showCopy && (\n <div className=\"absolute right-2 top-2 opacity-0 transition-opacity group-hover:opacity-100\">\n <CopyButton text={code} />\n </div>\n )}\n <pre className={`language-${language} !bg-code-bg !m-0`}>\n {highlightedHtml != null ? (\n <code className={`language-${language}`} dangerouslySetInnerHTML={{ __html: highlightedHtml }} />\n ) : (\n <code className={`language-${language}`}>{code}</code>\n )}\n </pre>\n </div>\n );\n}\n","import { useState, useCallback } from \"react\";\n\nexport interface CopyButtonProps {\n text: string;\n className?: string;\n label?: string;\n onCopy?: () => void;\n}\n\nexport function CopyButton({ text, className = \"\", label, onCopy }: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n onCopy?.();\n }, [text, onCopy]);\n\n return (\n <button\n onClick={handleCopy}\n className={`inline-flex items-center gap-1.5 px-2 py-1 text-xs text-text-3\n rounded-lg border border-border-1 transition-colors duration-75 hover:bg-bg-2 hover:text-text-1 ${className}`}\n >\n {copied ? (\n <>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8.5l3 3 7-7\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n {label ? \"Copied!\" : null}\n </>\n ) : (\n <>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <rect x=\"5\" y=\"5\" width=\"8\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M3 11V3.5A.5.5 0 013.5 3H11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n {label ?? null}\n </>\n )}\n </button>\n );\n}\n","import { useEffect, forwardRef, type ReactNode, type ButtonHTMLAttributes } from \"react\";\n\nexport interface DialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n}\n\nexport function Dialog({ open, onOpenChange, children }: DialogProps) {\n useEffect(() => {\n if (open) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"unset\";\n }\n return () => {\n document.body.style.overflow = \"unset\";\n };\n }, [open]);\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onOpenChange(false);\n };\n if (open) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n return () => {\n document.removeEventListener(\"keydown\", handleEscape);\n };\n }, [open, onOpenChange]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"fixed inset-0 bg-black/60\" onClick={() => onOpenChange(false)} />\n <div className=\"relative z-50\">{children}</div>\n </div>\n );\n}\n\nexport interface DialogContentProps {\n className?: string;\n children: ReactNode;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className = \"\", children }, ref) => (\n <div\n ref={ref}\n className={`relative w-full max-w-lg mx-4 bg-bg-1 border border-border-1 rounded-2xl ${className}`}\n onClick={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n ),\n);\nDialogContent.displayName = \"DialogContent\";\n\nexport function DialogHeader({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex flex-col gap-1.5 p-6 border-b border-border-1 ${className}`}>\n {children}\n </div>\n );\n}\n\nexport const DialogTitle = forwardRef<HTMLHeadingElement, { children: ReactNode; className?: string }>(\n ({ children, className = \"\" }, ref) => (\n <h2 ref={ref} className={`text-base font-semibold text-text-1 ${className}`}>\n {children}\n </h2>\n ),\n);\nDialogTitle.displayName = \"DialogTitle\";\n\nexport const DialogDescription = forwardRef<HTMLParagraphElement, { children: ReactNode; className?: string }>(\n ({ children, className = \"\" }, ref) => (\n <p ref={ref} className={`text-sm text-text-3 ${className}`}>\n {children}\n </p>\n ),\n);\nDialogDescription.displayName = \"DialogDescription\";\n\nexport const DialogClose = forwardRef<HTMLButtonElement, ButtonHTMLAttributes<HTMLButtonElement>>(\n ({ className = \"\", ...props }, ref) => (\n <button\n ref={ref}\n className={`absolute right-4 top-4 h-6 w-6 flex items-center justify-center text-text-3 hover:text-text-1 transition-colors ${className}`}\n aria-label=\"Close\"\n {...props}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n ),\n);\nDialogClose.displayName = \"DialogClose\";\n\nexport function DialogFooter({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return (\n <div className={`flex justify-end gap-3 p-6 border-t border-border-1 ${className}`}>\n {children}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({ icon, title, description, action }: EmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n {icon && <div className=\"mb-4 text-text-3\">{icon}</div>}\n <h3 className=\"text-sm font-medium text-text-1\">{title}</h3>\n {description && <p className=\"mt-1 text-sm text-text-3\">{description}</p>}\n {action && <div className=\"mt-4\">{action}</div>}\n </div>\n );\n}\n","import { type InputHTMLAttributes, forwardRef } from \"react\";\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string;\n error?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ label, error, className = \"\", id, ...props }, ref) => {\n const inputId = id || label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={inputId} className=\"text-sm font-medium text-text-2\">\n {label}\n </label>\n )}\n <input\n ref={ref}\n id={inputId}\n className={`h-9 rounded-xl border border-border-1 bg-bg-1 px-3 text-sm text-text-1\n placeholder:text-text-4\n focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500\n disabled:cursor-not-allowed disabled:opacity-50\n ${error ? \"border-danger\" : \"\"} ${className}`}\n {...props}\n />\n {error && <p className=\"text-xs text-danger\">{error}</p>}\n </div>\n );\n },\n);\n\nInput.displayName = \"Input\";\n","import type { ReactNode } from \"react\";\n\nexport interface KbdProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Kbd({ children, className = \"\" }: KbdProps) {\n return (\n <kbd\n className={`inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border-1\n bg-bg-2 px-1.5 font-mono text-[10px] font-medium text-text-3 ${className}`}\n >\n {children}\n </kbd>\n );\n}\n","export interface LoadingProps {\n text?: string;\n className?: string;\n}\n\nexport function Loading({ text = \"Loading\", className = \"\" }: LoadingProps) {\n return (\n <div className={`flex items-center gap-1 text-text-3 text-sm font-mono ${className}`}>\n <span>{text}</span>\n <span className=\"flex gap-0.5\">\n <span className=\"animate-pulse\" style={{ animationDelay: \"0ms\" }}>.</span>\n <span className=\"animate-pulse\" style={{ animationDelay: \"200ms\" }}>.</span>\n <span className=\"animate-pulse\" style={{ animationDelay: \"400ms\" }}>.</span>\n </span>\n </div>\n );\n}\n","import { useEffect, useCallback, type ReactNode } from \"react\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function Modal({ open, onClose, title, children, className = \"\" }: ModalProps) {\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"absolute inset-0 bg-black/60\" onClick={onClose} />\n <div\n className={`relative w-full max-w-md rounded-2xl border border-border-1 bg-bg-1 p-6 ${className}`}\n >\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-base font-semibold text-text-1\">{title}</h2>\n <button\n onClick={onClose}\n className=\"p-1 text-text-3 transition-colors rounded-lg hover:bg-bg-2\"\n aria-label=\"Close\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n {children}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface NavTabItem {\n label: string;\n href: string;\n isActive?: boolean;\n}\n\nexport interface NavTabsProps {\n items: NavTabItem[];\n variant?: \"underline\" | \"pill\";\n className?: string;\n renderLink?: (props: { href: string; className: string; children: ReactNode }) => ReactNode;\n}\n\nconst variantStyles = {\n underline: {\n container: \"flex border-b border-border-2 bg-bg-1\",\n item: \"px-5 py-2.5 font-mono text-xs uppercase tracking-wider transition-colors border-b-2\",\n active: \"border-primary-500 font-bold text-text-1\",\n inactive: \"border-transparent text-text-3 hover:text-text-1\",\n },\n pill: {\n container: \"flex items-center gap-1\",\n item: \"px-3 py-2 text-sm font-medium transition-colors rounded-xl\",\n active: \"bg-bg-2 text-text-1\",\n inactive: \"text-text-3 hover:bg-bg-2/50 hover:text-text-1\",\n },\n};\n\nexport function NavTabs({ items, variant = \"underline\", className = \"\", renderLink }: NavTabsProps) {\n const styles = variantStyles[variant];\n\n return (\n <nav className={`${styles.container} ${className}`}>\n {items.map((item) => {\n const itemClassName = `${styles.item} ${item.isActive ? styles.active : styles.inactive}`;\n\n if (renderLink) {\n return (\n <span key={item.href}>\n {renderLink({ href: item.href, className: itemClassName, children: item.label })}\n </span>\n );\n }\n\n return (\n <a key={item.href} href={item.href} className={itemClassName}>\n {item.label}\n </a>\n );\n })}\n </nav>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface SectionHeaderProps {\n title: string;\n badge?: ReactNode;\n className?: string;\n}\n\nexport function SectionHeader({ title, badge, className = \"\" }: SectionHeaderProps) {\n return (\n <div className={`flex items-center justify-between bg-bg-2 px-3 py-2.5 rounded-t-2xl ${className}`}>\n <span className=\"text-xs font-semibold text-text-2\">{title}</span>\n {badge}\n </div>\n );\n}\n","import { type SelectHTMLAttributes, forwardRef } from \"react\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {\n label?: string;\n options: SelectOption[];\n}\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n ({ label, options, className = \"\", id, ...props }, ref) => {\n const selectId = id || label?.toLowerCase().replace(/\\s+/g, \"-\");\n return (\n <div className=\"flex flex-col gap-1.5\">\n {label && (\n <label htmlFor={selectId} className=\"text-sm font-medium text-text-2\">\n {label}\n </label>\n )}\n <select\n ref={ref}\n id={selectId}\n className={`h-9 rounded-xl border border-border-1 bg-bg-1 px-3 text-sm text-text-1\n focus:border-primary-500 focus:outline-none focus:ring-1 focus:ring-primary-500\n disabled:cursor-not-allowed disabled:opacity-50\n ${className}`}\n {...props}\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n","import { useEffect, useCallback, type ReactNode } from \"react\";\nimport { Button } from \"../button/button.js\";\n\nexport interface SidePanelProps {\n open: boolean;\n onClose: () => void;\n title: string;\n subtitle?: string;\n children: ReactNode;\n className?: string;\n}\n\nexport function SidePanel({ open, onClose, title, subtitle, children, className = \"\" }: SidePanelProps) {\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n },\n [onClose],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n };\n }, [open, handleKeyDown]);\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\" onClick={onClose}>\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-black/50\" />\n\n {/* Panel */}\n <div\n className={`relative bg-bg-1 rounded-2xl flex flex-col w-[900px] h-[600px] ${className}`}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center justify-between px-4 py-3 bg-bg-2 rounded-t-2xl flex-shrink-0\">\n <div className=\"min-w-0\">\n <h3 className=\"font-semibold text-base truncate\">{title}</h3>\n {subtitle && <p className=\"text-xs text-text-3\">{subtitle}</p>}\n </div>\n <Button variant=\"ghost\" size=\"sm\" onClick={onClose} className=\"flex-shrink-0\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-hidden\">\n {children}\n </div>\n </div>\n </div>\n );\n}\n","export interface SeparatorProps {\n className?: string;\n}\n\nexport function Separator({ className = \"\" }: SeparatorProps) {\n return <div className={`mx-1 h-5 w-px shrink-0 bg-border-1 ${className}`} />;\n}\n","export interface SkeletonProps {\n className?: string;\n}\n\nexport function Skeleton({ className = \"\" }: SkeletonProps) {\n return (\n <div\n className={`rounded-lg bg-bg-2 animate-pulse ${className}`}\n />\n );\n}\n","import { Skeleton } from \"../skeleton/skeleton.js\";\n\nexport interface SkeletonTableProps {\n className?: string;\n rows?: number;\n cols?: number;\n}\n\nexport function SkeletonTable({ className = \"\", rows = 5, cols = 4 }: SkeletonTableProps) {\n return (\n <div className={`w-full ${className}`}>\n <div className=\"flex gap-4 mb-4 pb-4 border-b border-border-1\">\n {Array.from({ length: cols }).map((_, i) => (\n <Skeleton key={i} className=\"h-4 flex-1 rounded\" />\n ))}\n </div>\n <div className=\"space-y-3\">\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex gap-4\">\n {Array.from({ length: cols }).map((_, j) => (\n <Skeleton key={j} className=\"h-4 flex-1 rounded\" />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n}\n","export interface SparklineProps {\n trend: number[];\n className?: string;\n}\n\nexport function Sparkline({ trend, className = \"\" }: SparklineProps) {\n const max = Math.max(...trend);\n return (\n <div className={`flex items-end gap-px h-4 ${className}`}>\n {trend.map((v, i) => {\n const h = Math.max(2, Math.round((v / max) * 14));\n const col = v >= 10 ? \"bg-danger\" : v >= 7 ? \"bg-warning\" : \"bg-text-3\";\n return <div key={i} className={`w-[3px] rounded-full ${col}`} style={{ height: `${h}px` }} />;\n })}\n </div>\n );\n}\n","export interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nconst sizeMap = { sm: \"h-4 w-4\", md: \"h-5 w-5\", lg: \"h-6 w-6\" };\n\nexport function Spinner({ size = \"md\", className = \"\" }: SpinnerProps) {\n return (\n <svg\n className={`animate-spin text-text-3 ${sizeMap[size]} ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role=\"status\"\n aria-label=\"Loading\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2.5\" opacity=\"0.2\" />\n <path\n d=\"M12 2a10 10 0 019.95 9\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n","import type { ReactNode } from \"react\";\n\ntype StatusDot = \"success\" | \"warning\" | \"danger\" | \"idle\";\n\nexport interface StatusBarItem {\n dot?: StatusDot;\n label: string;\n}\n\nexport interface StatusBarProps {\n items: StatusBarItem[];\n trailing?: ReactNode;\n className?: string;\n}\n\nconst dotColors: Record<StatusDot, string> = {\n success: \"bg-success\",\n warning: \"bg-warning\",\n danger: \"bg-danger\",\n idle: \"bg-text-4\",\n};\n\nexport function StatusBar({ items, trailing, className = \"\" }: StatusBarProps) {\n return (\n <div className={`flex h-7 shrink-0 items-center gap-4 border-t border-border-1 bg-bg-0 px-4 ${className}`}>\n {items.map((item, i) => (\n <div key={i} className=\"flex items-center gap-1.5 text-xs text-text-3\">\n {item.dot && (\n <span className={`inline-block h-1.5 w-1.5 rounded-full ${dotColors[item.dot]}`} />\n )}\n {item.label}\n </div>\n ))}\n {trailing && <div className=\"ml-auto text-xs text-text-3\">{trailing}</div>}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface TableProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function Table({ children, className = \"\" }: TableProps) {\n return (\n <div className=\"w-full overflow-x-auto rounded-xl\">\n <table className={`w-full text-sm ${className}`}>{children}</table>\n </div>\n );\n}\n\nexport function TableHead({ children }: { children: ReactNode }) {\n return (\n <thead className=\"border-b border-border-1\">\n <tr>{children}</tr>\n </thead>\n );\n}\n\nexport interface TableHeaderProps {\n children?: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function TableHeader({ children, className = \"\", onClick }: TableHeaderProps) {\n return (\n <th\n className={`px-4 py-3 text-left text-xs font-medium text-text-3 ${onClick ? \"cursor-pointer select-none hover:text-text-1\" : \"\"} ${className}`}\n onClick={onClick}\n >\n {children}\n </th>\n );\n}\n\nexport function TableBody({ children }: { children: ReactNode }) {\n return <tbody className=\"divide-y divide-border-2\">{children}</tbody>;\n}\n\nexport interface TableRowProps {\n children: ReactNode;\n className?: string;\n onClick?: () => void;\n}\n\nexport function TableRow({ children, className = \"\", onClick }: TableRowProps) {\n return (\n <tr className={`hover:bg-bg-2/50 transition-colors ${onClick ? \"cursor-pointer\" : \"\"} ${className}`} onClick={onClick}>\n {children}\n </tr>\n );\n}\n\nexport function TableCell({ children, className = \"\" }: { children: ReactNode; className?: string }) {\n return <td className={`px-4 py-3.5 text-text-2 ${className}`}>{children}</td>;\n}\n","export interface Tab {\n value: string;\n label: string;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function Tabs({ tabs, value, onChange, className = \"\" }: TabsProps) {\n return (\n <div className={`flex gap-1 rounded-xl border border-border-1 bg-bg-1 p-1 ${className}`}>\n {tabs.map((tab) => (\n <button\n key={tab.value}\n onClick={() => onChange(tab.value)}\n className={`px-3 py-1.5 text-sm font-medium transition-all rounded-lg\n ${\n value === tab.value\n ? \"bg-bg-3 text-text-1\"\n : \"text-text-3 hover:bg-bg-2 hover:text-text-1\"\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n","export interface ToggleProps {\n options: [string, string];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function Toggle({ options, value, onChange, className = \"\" }: ToggleProps) {\n const [left, right] = options;\n\n return (\n <div className={`inline-flex items-center gap-2 text-sm ${className}`}>\n <span\n className={`cursor-pointer transition-colors ${value === left ? \"text-text-1\" : \"text-text-3\"}`}\n onClick={() => onChange(left)}\n >\n {left}\n </span>\n <button\n onClick={() => onChange(value === left ? right : left)}\n className={`relative w-10 h-5 rounded-full transition-colors border-2 border-border-1 ${\n value === right ? \"bg-primary-500\" : \"bg-bg-1\"\n }`}\n >\n <span\n className={`absolute top-0.5 w-4 h-4 rounded-full transition-transform bg-text-1 ${\n value === right ? \"translate-x-5\" : \"translate-x-0.5\"\n }`}\n />\n </button>\n <span\n className={`cursor-pointer transition-colors ${value === right ? \"text-text-1\" : \"text-text-3\"}`}\n onClick={() => onChange(right)}\n >\n {right}\n </span>\n </div>\n );\n}\n"],"mappings":"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","names":["jsx","forwardRef","jsx","variantStyles","jsx","jsx","jsx","jsx","jsxs","jsx","jsxs","forwardRef","jsx","jsxs","jsx","jsxs","forwardRef","jsx","jsxs","jsx","jsx","jsxs","useEffect","useCallback","jsx","jsxs","jsx","variantStyles","jsx","jsxs","forwardRef","jsx","jsxs","useEffect","useCallback","jsx","jsxs","useCallback","useEffect","jsx","jsx","jsx","jsxs","_","jsx","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsxs"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@raptortrade/ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"**/*.css"
|
|
@@ -11,7 +11,15 @@
|
|
|
11
11
|
"import": "./dist/index.mjs",
|
|
12
12
|
"require": "./dist/index.cjs"
|
|
13
13
|
},
|
|
14
|
-
"./styles.css": "./src/styles/index.css"
|
|
14
|
+
"./styles.css": "./src/styles/index.css",
|
|
15
|
+
"./theme.css": {
|
|
16
|
+
"style": "./src/styles/theme.css",
|
|
17
|
+
"default": "./src/styles/theme.css"
|
|
18
|
+
},
|
|
19
|
+
"./base.css": {
|
|
20
|
+
"style": "./src/styles/base.css",
|
|
21
|
+
"default": "./src/styles/base.css"
|
|
22
|
+
}
|
|
15
23
|
},
|
|
16
24
|
"main": "./dist/index.cjs",
|
|
17
25
|
"module": "./dist/index.mjs",
|
package/src/styles/base.css
CHANGED
|
@@ -30,22 +30,21 @@
|
|
|
30
30
|
.card-modern {
|
|
31
31
|
background: var(--color-bg-1);
|
|
32
32
|
border: 1px solid var(--color-border-1);
|
|
33
|
-
border-radius:
|
|
34
|
-
transition: border-color 0.2s ease
|
|
33
|
+
border-radius: 16px;
|
|
34
|
+
transition: border-color 0.2s ease;
|
|
35
35
|
}
|
|
36
36
|
.card-modern:hover {
|
|
37
|
-
border-color:
|
|
38
|
-
box-shadow: 0 0 24px color-mix(in srgb, var(--color-primary-500) 8%, transparent);
|
|
37
|
+
border-color: var(--color-text-4);
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
/* ── Glass / glow utilities ──────────────────────────────── */
|
|
41
|
+
/* Deprecated: Coinbase design uses flat surfaces */
|
|
42
42
|
.glass {
|
|
43
|
-
background: rgba(
|
|
43
|
+
background: rgba(20, 21, 24, 0.85);
|
|
44
44
|
backdrop-filter: blur(12px);
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
46
|
+
/* Deprecated: Coinbase design uses flat surfaces */
|
|
47
|
+
.glow-primary {}
|
|
49
48
|
|
|
50
49
|
/* ── Brutalist tab underline ─────────────────────────────── */
|
|
51
50
|
.tab-brutalist {
|
|
@@ -71,7 +70,7 @@
|
|
|
71
70
|
.card-nested-inner {
|
|
72
71
|
background: var(--color-bg-2);
|
|
73
72
|
border: 1px solid var(--color-border-2);
|
|
74
|
-
border-radius:
|
|
73
|
+
border-radius: 12px;
|
|
75
74
|
}
|
|
76
75
|
|
|
77
76
|
/* ── Status indicators ───────────────────────────────────── */
|
|
@@ -103,7 +102,7 @@
|
|
|
103
102
|
/* ── Scrollbar ───────────────────────────────────────────── */
|
|
104
103
|
::-webkit-scrollbar { width: 6px; height: 6px; }
|
|
105
104
|
::-webkit-scrollbar-track { background: transparent; }
|
|
106
|
-
::-webkit-scrollbar-thumb { background: var(--color-border-1); border-radius:
|
|
105
|
+
::-webkit-scrollbar-thumb { background: var(--color-border-1); border-radius: 3px; }
|
|
107
106
|
::-webkit-scrollbar-thumb:hover { background: var(--color-primary-500); }
|
|
108
107
|
|
|
109
108
|
/* ── Reduced motion ──────────────────────────────────────── */
|
package/src/styles/theme.css
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
@theme {
|
|
2
|
-
--color-bg-0: #
|
|
3
|
-
--color-bg-1: #
|
|
4
|
-
--color-bg-2: #
|
|
5
|
-
--color-bg-3: #
|
|
6
|
-
--color-text-1: #
|
|
7
|
-
--color-text-2: #
|
|
8
|
-
--color-text-3: #
|
|
9
|
-
--color-text-4: #
|
|
10
|
-
--color-border-1: #
|
|
11
|
-
--color-border-2: #
|
|
12
|
-
--color-divider: #
|
|
2
|
+
--color-bg-0: #0a0b0d;
|
|
3
|
+
--color-bg-1: #141518;
|
|
4
|
+
--color-bg-2: #1a1c20;
|
|
5
|
+
--color-bg-3: #282b31;
|
|
6
|
+
--color-text-1: #eef0f3;
|
|
7
|
+
--color-text-2: #8a8f99;
|
|
8
|
+
--color-text-3: #5b616e;
|
|
9
|
+
--color-text-4: #3d4350;
|
|
10
|
+
--color-border-1: #282b31;
|
|
11
|
+
--color-border-2: #1e2025;
|
|
12
|
+
--color-divider: #1e2025;
|
|
13
13
|
--color-primary-500: #818cf8;
|
|
14
14
|
--color-primary-600: #6366f1;
|
|
15
15
|
--color-primary-700: #4f46e5;
|
|
16
16
|
--color-primary-100: #1e1b4b;
|
|
17
17
|
--color-primary-ring: #818cf8;
|
|
18
18
|
--color-primary-rgb: 129, 140, 248;
|
|
19
|
-
--color-accent-500: #
|
|
20
|
-
--color-accent-rgb:
|
|
19
|
+
--color-accent-500: #eef0f3;
|
|
20
|
+
--color-accent-rgb: 238, 240, 243;
|
|
21
21
|
--color-signal-500: #818cf8;
|
|
22
22
|
--color-signal-100: #1e1b4b;
|
|
23
23
|
--color-success: #22c55e;
|
|
24
24
|
--color-warning: #f59e0b;
|
|
25
25
|
--color-danger: #ef4444;
|
|
26
|
-
--color-code-bg: #
|
|
26
|
+
--color-code-bg: #0d0e10;
|
|
27
27
|
--font-heading: "Space Grotesk Variable", ui-sans-serif, system-ui, sans-serif;
|
|
28
28
|
--font-sans: "Inter Variable", ui-sans-serif, system-ui, sans-serif;
|
|
29
29
|
--font-mono: "JetBrains Mono Variable", ui-monospace, monospace;
|