jvdm-ui 1.0.5 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/atoms/index.d.ts +28 -3
- package/dist/atoms/index.js +1 -1
- package/dist/{chunk-WWOXGKLF.js → chunk-KG5YKCFX.js} +54 -9
- package/dist/chunk-KG5YKCFX.js.map +1 -0
- package/dist/{chunk-JYNDKPAH.js → chunk-M2CFFNC3.js} +3 -3
- package/dist/{chunk-JYNDKPAH.js.map → chunk-M2CFFNC3.js.map} +1 -1
- package/dist/{chunk-AHE2576G.js → chunk-W4Y7DKK7.js} +3 -3
- package/dist/{chunk-AHE2576G.js.map → chunk-W4Y7DKK7.js.map} +1 -1
- package/dist/client/code-block.d.ts +3 -1
- package/dist/client/code-block.js +91 -16
- package/dist/client/code-block.js.map +1 -1
- package/dist/client/copy-button.d.ts +18 -0
- package/dist/client/copy-button.js +123 -0
- package/dist/client/copy-button.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/molecules/index.d.ts +3 -1
- package/dist/molecules/index.js +2 -2
- package/dist/organisms/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-WWOXGKLF.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/molecules/accordion/index.tsx","../src/molecules/banner/index.tsx","../src/molecules/breadcrumb/locales.ts","../src/molecules/breadcrumb/index.tsx","../src/molecules/callout/index.tsx","../src/molecules/card-title/index.tsx","../src/molecules/command-menu/locales.ts","../src/molecules/command-menu/index.tsx","../src/molecules/drawer/locales.ts","../src/molecules/drawer/index.tsx","../src/molecules/dropdown-menu/index.tsx","../src/molecules/empty/index.tsx","../src/molecules/field/index.tsx","../src/molecules/filter-bar/locales.ts","../src/molecules/filter-bar/index.tsx","../src/molecules/load-error/locales.ts","../src/molecules/load-error/index.tsx","../src/molecules/image-preview/index.tsx","../src/molecules/tree-view/node.tsx","../src/molecules/tree-view/locales.ts","../src/molecules/tree-view/index.tsx","../src/molecules/metric-card/index.tsx","../src/molecules/menu/menu-item-style.ts","../src/molecules/page-header/index.tsx","../src/molecules/pagination/locales.ts","../src/molecules/pagination/index.tsx","../src/molecules/snackbar-stack/locales.ts","../src/molecules/snackbar-stack/index.tsx","../src/molecules/stat-card/index.tsx","../src/molecules/stepper/index.tsx","../src/molecules/tabs/locales.ts","../src/molecules/tabs/index.tsx","../src/molecules/tooltip/index.tsx","../src/molecules/toast/locales.ts","../src/molecules/toast/index.tsx"],"names":["jsxs","jsx","TONES","locales","useRef","useEffect"],"mappings":"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","file":"chunk-AHE2576G.js","sourcesContent":["import type { ReactNode } from \"react\";\n\nimport { ChevronIcon } from \"../../atoms\";\n\nexport type AccordionItem = {\n id: string;\n title: ReactNode;\n content: ReactNode;\n defaultOpen?: boolean;\n};\n\nexport function Accordion({\n items,\n exclusive = false,\n name = \"accordion\",\n className = \"\",\n}: {\n items: readonly AccordionItem[];\n exclusive?: boolean;\n name?: string;\n className?: string;\n}) {\n return (\n <div\n className={`divide-y divide-line overflow-hidden rounded-md border border-line ${className}`}\n >\n {items.map((item) => (\n <details\n key={item.id}\n name={exclusive ? name : undefined}\n open={item.defaultOpen}\n className=\"group bg-surface\"\n >\n <summary className=\"flex min-h-12 cursor-pointer list-none items-center justify-between gap-3 px-4 text-sm text-ink transition-colors duration-(--duration-fast) ease-out hover:bg-raised focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent\">\n {item.title}\n <ChevronIcon\n className=\"text-ink-muted transition-transform duration-(--duration-fast) ease-out group-open:-rotate-180\"\n size=\"md\"\n />\n </summary>\n <div className=\"px-4 pb-4 text-sm text-ink-soft\">{item.content}</div>\n </details>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nconst TONES = {\n info: \"border-info/40 bg-info-soft text-info\",\n ok: \"border-ok/40 bg-ok-soft text-ok\",\n warn: \"border-warn/40 bg-warn-soft text-warn\",\n danger: \"border-danger/40 bg-danger-soft text-danger\",\n} as const;\nexport type BannerTone = keyof typeof TONES;\n\nexport function Banner({\n tone = \"info\",\n title,\n children,\n action,\n className = \"\",\n}: {\n tone?: BannerTone;\n title: string;\n children?: ReactNode;\n action?: ReactNode;\n className?: string;\n}) {\n return (\n <aside\n className={`flex flex-wrap items-center gap-4 rounded-md border px-4 py-3 ${TONES[tone]} ${className}`}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium\">{title}</p>\n {children ? <div className=\"mt-1 text-xs opacity-80\">{children}</div> : null}\n </div>\n {action}\n </aside>\n );\n}\n","export const locales = {\n label: \"Breadcrumb\",\n};\n","import type { ReactNode } from \"react\";\n\nimport { ChevronIcon } from \"../../atoms\";\nimport { locales } from \"./locales\";\n\nexport type Crumb = { id: string; label: ReactNode; href?: string };\n\nexport function Breadcrumb({\n items,\n label = locales.label,\n className = \"\",\n}: {\n items: readonly Crumb[];\n label?: string;\n className?: string;\n}) {\n return (\n <nav aria-label={label} className={className}>\n <ol className=\"flex flex-wrap items-center gap-1 text-xs\">\n {items.map((item, index) => {\n const last = index === items.length - 1;\n\n return (\n <li key={item.id} className=\"flex items-center gap-1\">\n {index > 0 ? <ChevronIcon className=\"-rotate-90 text-ink-dim\" size=\"sm\" /> : null}\n {last || !item.href ? (\n <span\n aria-current={last ? \"page\" : undefined}\n className={last ? \"font-medium text-ink\" : \"text-ink-muted\"}\n >\n {item.label}\n </span>\n ) : (\n <a\n href={item.href}\n className=\"rounded-xs px-1 py-0.5 text-ink-muted transition-colors duration-(--duration-fast) ease-out hover:bg-raised hover:text-ink-soft focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\"\n >\n {item.label}\n </a>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import type { ReactNode } from \"react\";\n\nconst TONES = {\n info: \"border-info/35 bg-info-soft text-info\",\n ok: \"border-ok/35 bg-ok-soft text-ok\",\n warn: \"border-warn/35 bg-warn-soft text-warn\",\n danger: \"border-danger/35 bg-danger-soft text-danger\",\n} as const;\n\nexport type CalloutTone = keyof typeof TONES;\n\nexport function Callout({\n tone = \"info\",\n title,\n children,\n className = \"\",\n}: {\n tone?: CalloutTone;\n title: string;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <aside className={`rounded-md border px-4 py-3 ${TONES[tone]} ${className}`}>\n <p className=\"text-sm font-medium\">{title}</p>\n <div className=\"mt-1 text-sm opacity-80\">{children}</div>\n </aside>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function CardTitle({ children, hint }: { children: ReactNode; hint?: ReactNode }) {\n return (\n <div className=\"flex items-baseline justify-between gap-3\">\n <span className=\"text-sm font-medium\">{children}</span>\n {hint ? <span className=\"shrink-0 text-xs text-ink-muted\">{hint}</span> : null}\n </div>\n );\n}\n","export const locales = { empty: \"No matching commands\", open: \"Open command menu\" };\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { Button, Input, Kbd } from \"../../atoms\";\nimport { locales } from \"./locales\";\n\nexport type CommandItem = { id: string; label: string; description?: string; icon?: ReactNode };\n\nexport function CommandMenu({\n items,\n onSelect,\n label = \"Search commands\",\n global = false,\n}: {\n items: readonly CommandItem[];\n onSelect?: (item: CommandItem) => void;\n label?: string;\n global?: boolean;\n}) {\n const [query, setQuery] = useState(\"\");\n const [open, setOpen] = useState(!global);\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (!global) return;\n function handleKey(event: KeyboardEvent) {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\") {\n event.preventDefault();\n setOpen(true);\n }\n if (event.key === \"Escape\") setOpen(false);\n }\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [global]);\n useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n const filtered = useMemo(\n () =>\n items.filter((item) =>\n `${item.label} ${item.description ?? \"\"}`.toLowerCase().includes(query.toLowerCase()),\n ),\n [items, query],\n );\n\n if (global && !open)\n return (\n <Button onClick={() => setOpen(true)} variant=\"secondary\">\n {locales.open}\n </Button>\n );\n const menu = (\n <div className=\"flex w-full max-w-lg flex-col gap-3 rounded-xl border border-line bg-surface p-3 shadow-modal\">\n <div className=\"flex items-center gap-3\">\n <Input\n aria-label={label}\n ref={inputRef}\n onChange={(event) => setQuery(event.target.value)}\n placeholder={label}\n value={query}\n />\n <Kbd>⌘K</Kbd>\n </div>\n <div className=\"flex max-h-72 flex-col gap-1 overflow-y-auto\">\n {filtered.length ? (\n filtered.map((item) => (\n <Button\n className=\"justify-start text-left\"\n key={item.id}\n onClick={() => onSelect?.(item)}\n variant=\"ghost\"\n >\n <span className=\"flex min-w-0 flex-col items-start\">\n {item.label}\n {item.description ? (\n <span className=\"text-2xs text-ink-dim\">{item.description}</span>\n ) : null}\n </span>\n </Button>\n ))\n ) : (\n <p className=\"px-3 py-6 text-center text-sm text-ink-muted\">{locales.empty}</p>\n )}\n </div>\n </div>\n );\n return global ? (\n <div\n className=\"fixed inset-0 z-30 flex items-start justify-center bg-app/70 p-4 pt-24 backdrop-blur-sm\"\n onClick={() => setOpen(false)}\n >\n <div onClick={(event) => event.stopPropagation()}>{menu}</div>\n </div>\n ) : (\n menu\n );\n}\n","export const locales = { close: \"Close drawer\" };\n","\"use client\";\n\nimport { useEffect, useRef, type ReactNode } from \"react\";\n\nimport { CloseIcon, IconButton } from \"../../atoms\";\nimport { locales } from \"./locales\";\n\nexport function Drawer({\n isOpen,\n onClose,\n title,\n children,\n closeLabel = locales.close,\n}: {\n isOpen: boolean;\n onClose: () => void;\n title: ReactNode;\n children: ReactNode;\n closeLabel?: string;\n}) {\n const ref = useRef<HTMLDialogElement>(null);\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n if (isOpen && !dialog.open) dialog.showModal();\n if (!isOpen && dialog.open) dialog.close();\n }, [isOpen]);\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n dialog.addEventListener(\"close\", onClose);\n return () => dialog.removeEventListener(\"close\", onClose);\n }, [onClose]);\n\n return (\n <dialog\n ref={ref}\n className=\"fixed inset-y-0 right-0 left-auto m-0 h-full max-h-none w-full max-w-md border-y-0 border-r-0 border-line bg-surface p-0 text-ink shadow-modal backdrop:bg-app/70 backdrop:backdrop-blur-sm sm:rounded-l-xl\"\n aria-modal=\"true\"\n >\n <div className=\"flex h-full flex-col\">\n <div className=\"flex items-center justify-between gap-4 border-b border-line px-5 py-4\">\n <h2 className=\"text-lg font-bold\">{title}</h2>\n <IconButton label={closeLabel} onClick={onClose}>\n <CloseIcon size=\"md\" />\n </IconButton>\n </div>\n <div className=\"flex-1 overflow-y-auto px-5 py-5\">{children}</div>\n </div>\n </dialog>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function DropdownMenu({\n trigger,\n children,\n align = \"start\",\n className = \"\",\n}: {\n trigger: ReactNode;\n children: ReactNode;\n align?: \"start\" | \"end\";\n className?: string;\n}) {\n return (\n <details className={`group relative ${className}`}>\n <summary className=\"list-none [&::-webkit-details-marker]:hidden\">{trigger}</summary>\n <div\n className={`absolute top-full z-20 mt-2 min-w-48 rounded-md border border-line bg-surface p-1 shadow-popover ${align === \"end\" ? \"right-0\" : \"left-0\"}`}\n >\n {children}\n </div>\n </details>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function Empty({ title, description }: { title: string; description?: ReactNode }) {\n return (\n <div className=\"flex flex-col items-center justify-center gap-2 py-16 text-center\">\n <p className=\"text-sm font-medium text-ink-soft\">{title}</p>\n {description ? <p className=\"max-w-sm text-sm text-ink-muted\">{description}</p> : null}\n </div>\n );\n}\n","import { cloneElement, isValidElement, useId, type ReactElement, type ReactNode } from \"react\";\n\nexport function Field({\n label,\n htmlFor,\n error,\n action,\n className = \"\",\n children,\n}: {\n label: string;\n htmlFor?: string;\n error?: string;\n action?: ReactNode;\n className?: string;\n children: ReactNode;\n}) {\n const errorId = useId();\n const control = isValidElement(children)\n ? (() => {\n const child = children as ReactElement<Record<string, unknown>>;\n const props = child.props;\n return cloneElement(child, {\n \"aria-describedby\": error\n ? [props[\"aria-describedby\"], errorId].filter(Boolean).join(\" \")\n : props[\"aria-describedby\"],\n \"aria-invalid\": error ? true : props[\"aria-invalid\"],\n });\n })()\n : children;\n\n return (\n <div className={`flex min-w-0 flex-col gap-2 ${className}`}>\n <div className=\"flex items-baseline justify-between gap-3\">\n <label htmlFor={htmlFor} className=\"text-xs font-medium text-ink-soft\">\n {label}\n </label>\n {action}\n </div>\n {control}\n {error ? (\n <span className=\"text-2xs text-danger\" id={errorId}>\n {error}\n </span>\n ) : null}\n </div>\n );\n}\n","export const locales = { clear: \"Clear filters\" };\n","import type { ReactNode } from \"react\";\n\nimport { locales } from \"./locales\";\n\nexport function FilterBar({\n children,\n resultLabel,\n onClear,\n className = \"\",\n}: {\n children: ReactNode;\n resultLabel?: string;\n onClear?: () => void;\n className?: string;\n}) {\n return (\n <div\n className={`flex flex-wrap items-center gap-3 rounded-md border border-line bg-panel p-3 ${className}`}\n >\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-3\">{children}</div>\n {resultLabel ? <span className=\"text-xs text-ink-muted\">{resultLabel}</span> : null}\n {onClear ? (\n <button\n className=\"text-xs text-accent-ink underline underline-offset-4\"\n onClick={onClear}\n type=\"button\"\n >\n {locales.clear}\n </button>\n ) : null}\n </div>\n );\n}\n","export const LOAD_ERROR = {\n retry: \"Try again\",\n};\n","import { buttonClass } from \"../../atoms\";\nimport { LOAD_ERROR as T } from \"./locales\";\n\nexport function LoadError({\n message,\n onRetry,\n retryLabel = T.retry,\n}: {\n message: string;\n onRetry?: () => void;\n retryLabel?: string;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center gap-3 py-16 text-center\">\n <p className=\"text-sm text-danger\">{message}</p>\n {onRetry ? (\n <button type=\"button\" onClick={onRetry} className={buttonClass({ variant: \"secondary\" })}>\n {retryLabel}\n </button>\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function ImagePreview({\n src,\n alt,\n fallback,\n className = \"\",\n}: {\n src?: string;\n alt: string;\n fallback?: ReactNode;\n className?: string;\n}) {\n return (\n <details className={`group ${className}`}>\n <summary className=\"cursor-zoom-in list-none overflow-hidden rounded-md bg-raised [&::-webkit-details-marker]:hidden\">\n {src ? (\n <img\n alt={alt}\n className=\"aspect-[4/3] w-full object-cover transition-transform duration-(--duration-base) ease-out group-hover:scale-[1.02]\"\n src={src}\n />\n ) : (\n fallback\n )}\n </summary>\n {src ? (\n <div className=\"fixed inset-0 z-30 flex items-center justify-center bg-app/85 p-6 backdrop-blur-sm\">\n <img\n alt={alt}\n className=\"max-h-[90dvh] max-w-full rounded-md object-contain shadow-modal\"\n src={src}\n />\n </div>\n ) : null}\n </details>\n );\n}\n","import type { TreeNode } from \"./index\";\n\nexport function TreeNodeView({ node }: { node: TreeNode }) {\n return node.children?.length ? (\n <details className=\"group\" open>\n <summary className=\"cursor-pointer list-none rounded-sm px-3 py-2 text-sm text-ink-soft hover:bg-raised [&::-webkit-details-marker]:hidden\">\n <span className=\"mr-2 text-ink-dim transition-transform duration-(--duration-fast) ease-out group-open:rotate-90\">\n ›\n </span>\n {node.label}\n </summary>\n <div className=\"ml-4 border-l border-line pl-2\">\n {node.children.map((child) => (\n <TreeNodeView key={child.id} node={child} />\n ))}\n </div>\n </details>\n ) : (\n <div className=\"rounded-sm px-3 py-2 text-sm text-ink-muted hover:bg-raised\">{node.label}</div>\n );\n}\n","export const locales = { label: \"Tree\" };\n","import type { ReactNode } from \"react\";\n\nimport { TreeNodeView } from \"./node\";\nimport { locales } from \"./locales\";\n\nexport type TreeNode = { id: string; label: ReactNode; children?: readonly TreeNode[] };\n\nexport function TreeView({\n nodes,\n className = \"\",\n}: {\n nodes: readonly TreeNode[];\n className?: string;\n}) {\n return (\n <nav aria-label={locales.label} className={`flex flex-col gap-1 ${className}`}>\n {nodes.map((node) => (\n <TreeNodeView key={node.id} node={node} />\n ))}\n </nav>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function MetricCard({\n label,\n value,\n change,\n trend = \"neutral\",\n hint,\n children,\n className = \"\",\n}: {\n label: string;\n value: ReactNode;\n change?: string;\n trend?: \"neutral\" | \"up\" | \"down\";\n hint?: string;\n children?: ReactNode;\n className?: string;\n}) {\n const trendColor =\n trend === \"up\" ? \"text-ok\" : trend === \"down\" ? \"text-danger\" : \"text-ink-muted\";\n return (\n <article className={`rounded-md border border-line bg-surface p-5 ${className}`}>\n <div className=\"flex items-start justify-between gap-4\">\n <span className=\"text-xs text-ink-muted\">{label}</span>\n {change ? <span className={`text-xs font-medium ${trendColor}`}>{change}</span> : null}\n </div>\n <p className=\"mt-3 text-2xl font-bold text-ink\">{value}</p>\n {hint ? <p className=\"mt-1 text-xs text-ink-dim\">{hint}</p> : null}\n {children ? <div className=\"mt-4\">{children}</div> : null}\n </article>\n );\n}\n","export type MenuItemTone = \"neutral\" | \"danger\";\n\nconst TONES: Record<MenuItemTone, string> = {\n neutral: \"text-ink-soft hover:bg-raised hover:text-ink\",\n danger: \"text-danger hover:bg-danger-soft\",\n};\n\nconst BASE =\n \"flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-xs transition-colors duration-(--duration-fast) ease-out\" +\n \" focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\";\n\nexport type MenuItemOptions = {\n tone?: MenuItemTone;\n className?: string;\n};\n\nexport function menuItemClass({ tone = \"neutral\", className = \"\" }: MenuItemOptions = {}) {\n return `${BASE} ${TONES[tone]} ${className}`;\n}\n","import type { ReactNode } from \"react\";\n\nexport function PageHeader({\n title,\n subtitle,\n children,\n className = \"\",\n}: {\n title: ReactNode;\n subtitle?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <div\n className={`flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between sm:gap-4 ${className}`}\n >\n <div className=\"flex min-w-0 flex-col gap-1\">\n <h1 className=\"truncate text-xl font-bold\">{title}</h1>\n {subtitle ? <p className=\"text-sm text-ink-muted\">{subtitle}</p> : null}\n </div>\n {children ? <div className=\"flex w-full flex-wrap gap-3 sm:w-auto\">{children}</div> : null}\n </div>\n );\n}\n","export const PAGINATION = {\n label: { \"en-US\": \"Pagination\", \"pt-BR\": \"Paginação\" },\n previous: { \"en-US\": \"Previous\", \"pt-BR\": \"Anterior\" },\n next: { \"en-US\": \"Next\", \"pt-BR\": \"Próxima\" },\n page: { \"en-US\": (page: number) => `Page ${page}`, \"pt-BR\": (page: number) => `Página ${page}` },\n};\n","import { PAGINATION as T } from \"./locales\";\n\nexport function Pagination({\n page,\n pages,\n onPageChange,\n previousLabel = T.previous[\"en-US\"],\n nextLabel = T.next[\"en-US\"],\n pageLabel = T.page[\"en-US\"],\n label = T.label[\"en-US\"],\n className = \"\",\n}: {\n page: number;\n pages: number;\n onPageChange: (page: number) => void;\n previousLabel?: string;\n nextLabel?: string;\n pageLabel?: (page: number) => string;\n label?: string;\n className?: string;\n}) {\n const current = Math.min(Math.max(page, 1), Math.max(pages, 1));\n\n return (\n <nav aria-label={label} className={`flex flex-wrap items-center gap-2 ${className}`}>\n <button\n className=\"min-h-10 rounded-md border border-line-strong px-3 text-sm text-ink-soft transition-colors duration-(--duration-fast) ease-out hover:bg-raised disabled:pointer-events-none disabled:opacity-40\"\n disabled={current === 1}\n onClick={() => onPageChange(current - 1)}\n type=\"button\"\n >\n {previousLabel}\n </button>\n <span className=\"min-h-10 px-2 text-sm text-ink-muted\" aria-current=\"page\">\n {pageLabel(current)}\n </span>\n <button\n className=\"min-h-10 rounded-md border border-line-strong px-3 text-sm text-ink-soft transition-colors duration-(--duration-fast) ease-out hover:bg-raised disabled:pointer-events-none disabled:opacity-40\"\n disabled={current === pages}\n onClick={() => onPageChange(current + 1)}\n type=\"button\"\n >\n {nextLabel}\n </button>\n </nav>\n );\n}\n","export const locales = { dismiss: \"Dismiss notification\" };\n","import type { ReactNode } from \"react\";\n\nimport { locales } from \"./locales\";\n\nexport type Snackbar = {\n id: string;\n title: string;\n message?: ReactNode;\n tone?: \"neutral\" | \"ok\" | \"warn\" | \"danger\";\n};\n\nconst TONES = {\n neutral: \"border-line-strong\",\n ok: \"border-ok/50\",\n warn: \"border-warn/50\",\n danger: \"border-danger/50\",\n} as const;\n\nexport function SnackbarStack({\n items,\n onDismiss,\n className = \"\",\n}: {\n items: readonly Snackbar[];\n onDismiss?: (id: string) => void;\n className?: string;\n}) {\n return (\n <div\n aria-live=\"polite\"\n className={`fixed right-4 bottom-4 z-20 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2 ${className}`}\n >\n {items.map((item) => (\n <div\n className={`flex items-start gap-3 rounded-md border bg-surface p-4 text-ink shadow-popover ${TONES[item.tone ?? \"neutral\"]}`}\n key={item.id}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium\">{item.title}</p>\n {item.message ? (\n <div className=\"mt-1 text-xs text-ink-muted\">{item.message}</div>\n ) : null}\n </div>\n {onDismiss ? (\n <button\n aria-label={locales.dismiss}\n className=\"text-xs text-ink-muted hover:text-ink\"\n onClick={() => onDismiss(item.id)}\n type=\"button\"\n >\n ×\n </button>\n ) : null}\n </div>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Card, Label } from \"../../atoms\";\n\nexport function StatCard({\n label,\n value,\n hint,\n color = \"\",\n attention = false,\n className = \"\",\n}: {\n label: string;\n value: ReactNode;\n hint?: string;\n color?: string;\n attention?: boolean;\n className?: string;\n}) {\n const length = String(value).length;\n const size = length <= 7 ? \"text-2xl\" : length <= 12 ? \"text-lg\" : \"text-sm\";\n\n return (\n <Card\n padding=\"sm\"\n className={`flex flex-col gap-1 ${attention ? \"attention\" : \"\"} ${className}`}\n >\n <Label>{label}</Label>\n <span className={`truncate ${size} leading-tight font-bold ${color}`}>{value}</span>\n {hint ? <span className=\"truncate text-xs text-ink-muted\">{hint}</span> : null}\n </Card>\n );\n}\n","export type Step = { id: string; label: string; description?: string };\n\nexport function Stepper({\n steps,\n current,\n className = \"\",\n}: {\n steps: readonly Step[];\n current: number;\n className?: string;\n}) {\n return (\n <ol className={`flex flex-col gap-4 sm:flex-row sm:items-start sm:gap-0 ${className}`}>\n {steps.map((step, index) => (\n <li\n className=\"relative flex flex-1 items-start gap-3 sm:flex-col sm:items-center sm:text-center\"\n key={step.id}\n >\n {index < steps.length - 1 ? (\n <span className=\"absolute top-5 left-5 h-full w-px bg-line sm:top-5 sm:left-1/2 sm:h-px sm:w-full\" />\n ) : null}\n <span\n className={`relative z-1 flex size-10 shrink-0 items-center justify-center rounded-full border text-sm font-medium ${index < current ? \"border-accent bg-accent text-on-accent\" : index === current ? \"border-accent text-accent-ink ring-4 ring-accent-soft\" : \"border-line-strong text-ink-dim\"}`}\n >\n {index + 1}\n </span>\n <span className=\"relative z-1 flex flex-col pt-2 sm:pt-3\">\n <strong className=\"text-sm text-ink\">{step.label}</strong>\n {step.description ? (\n <span className=\"mt-1 text-xs text-ink-muted\">{step.description}</span>\n ) : null}\n </span>\n </li>\n ))}\n </ol>\n );\n}\n","export const TABS = {\n label: { \"en-US\": \"Tabs\", \"pt-BR\": \"Abas\" },\n};\n","import type { KeyboardEvent, ReactNode } from \"react\";\nimport { TABS as T } from \"./locales\";\n\nexport type Tab = {\n value: string;\n label: ReactNode;\n content: ReactNode;\n disabled?: boolean;\n};\n\nexport function Tabs({\n items,\n value,\n onValueChange,\n label = T.label[\"en-US\"],\n className = \"\",\n}: {\n items: Tab[];\n value: string;\n onValueChange: (value: string) => void;\n label?: string;\n className?: string;\n}) {\n const active = items.find((item) => item.value === value) ?? items[0];\n\n function onKeyDown(event: KeyboardEvent<HTMLButtonElement>) {\n const index = items.findIndex((item) => item.value === active?.value);\n const direction = event.key === \"ArrowRight\" ? 1 : event.key === \"ArrowLeft\" ? -1 : 0;\n const target =\n event.key === \"Home\"\n ? items[0]\n : event.key === \"End\"\n ? items.at(-1)\n : direction\n ? items[(index + direction + items.length) % items.length]\n : undefined;\n\n if (!target || target.disabled) return;\n event.preventDefault();\n onValueChange(target.value);\n }\n\n return (\n <div className={`flex min-w-0 flex-col gap-4 ${className}`}>\n <div\n aria-label={label}\n className=\"flex min-w-0 gap-1 overflow-x-auto border-b border-line\"\n role=\"tablist\"\n >\n {items.map((item) => (\n <button\n aria-selected={item.value === active?.value}\n id={`tab-${item.value}`}\n className={`min-h-10 shrink-0 border-b-2 px-3 text-sm transition-colors duration-(--duration-fast) ease-out ${\n item.value === active?.value\n ? \"border-accent font-medium text-ink\"\n : \"border-transparent text-ink-muted hover:border-line-strong hover:text-ink\"\n }`}\n disabled={item.disabled}\n key={item.value}\n onClick={() => onValueChange(item.value)}\n onKeyDown={onKeyDown}\n role=\"tab\"\n tabIndex={item.value === active?.value ? 0 : -1}\n type=\"button\"\n >\n {item.label}\n </button>\n ))}\n </div>\n {active ? (\n <div aria-labelledby={`tab-${active.value}`} role=\"tabpanel\">\n {active.content}\n </div>\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nconst SIDES = {\n top: \"bottom-full left-1/2 mb-2 -translate-x-1/2\",\n bottom: \"top-full left-1/2 mt-2 -translate-x-1/2\",\n left: \"right-full top-1/2 mr-2 -translate-y-1/2\",\n right: \"left-full top-1/2 ml-2 -translate-y-1/2\",\n} as const;\n\nexport type TooltipSide = keyof typeof SIDES;\n\nexport function Tooltip({\n id,\n content,\n side = \"top\",\n children,\n className = \"\",\n}: {\n id: string;\n content: ReactNode;\n side?: TooltipSide;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <span className={`group relative inline-flex ${className}`}>\n <span aria-describedby={id} className=\"inline-flex\">\n {children}\n </span>\n <span\n id={id}\n role=\"tooltip\"\n className={`pointer-events-none absolute z-50 w-max max-w-64 rounded-sm border border-line-strong bg-raised px-2 py-1 text-2xs text-ink-soft opacity-0 shadow-popover transition-opacity duration-(--duration-fast) ease-out group-focus-within:opacity-100 group-hover:opacity-100 ${SIDES[side]}`}\n >\n {content}\n </span>\n </span>\n );\n}\n","export const locales = { dismiss: \"Dismiss notification\" };\n","import type { ReactNode } from \"react\";\n\nimport { locales } from \"./locales\";\n\nconst TONES = {\n info: \"border-info/35 bg-surface\",\n ok: \"border-ok/35 bg-surface\",\n warn: \"border-warn/35 bg-surface\",\n danger: \"border-danger/35 bg-surface\",\n} as const;\n\nexport type ToastTone = keyof typeof TONES;\n\nexport function Toast({\n tone = \"info\",\n title,\n children,\n onDismiss,\n dismissLabel = locales.dismiss,\n className = \"\",\n}: {\n tone?: ToastTone;\n title: string;\n children?: ReactNode;\n onDismiss?: () => void;\n dismissLabel?: string;\n className?: string;\n}) {\n return (\n <div\n aria-live=\"polite\"\n className={`flex items-start gap-4 rounded-md border p-4 shadow-popover ${TONES[tone]} ${className}`}\n role=\"status\"\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-ink\">{title}</p>\n {children ? <div className=\"mt-1 text-xs text-ink-muted\">{children}</div> : null}\n </div>\n {onDismiss ? (\n <button\n aria-label={dismissLabel}\n className=\"rounded-xs px-1 text-xs text-ink-muted transition-colors duration-(--duration-fast) ease-out hover:text-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\"\n onClick={onDismiss}\n type=\"button\"\n >\n ×\n </button>\n ) : null}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/molecules/accordion/index.tsx","../src/molecules/banner/index.tsx","../src/molecules/breadcrumb/locales.ts","../src/molecules/breadcrumb/index.tsx","../src/molecules/callout/index.tsx","../src/molecules/card-title/index.tsx","../src/molecules/command-menu/locales.ts","../src/molecules/command-menu/index.tsx","../src/molecules/drawer/locales.ts","../src/molecules/drawer/index.tsx","../src/molecules/dropdown-menu/index.tsx","../src/molecules/empty/index.tsx","../src/molecules/field/index.tsx","../src/molecules/filter-bar/locales.ts","../src/molecules/filter-bar/index.tsx","../src/molecules/load-error/locales.ts","../src/molecules/load-error/index.tsx","../src/molecules/image-preview/index.tsx","../src/molecules/tree-view/node.tsx","../src/molecules/tree-view/locales.ts","../src/molecules/tree-view/index.tsx","../src/molecules/metric-card/index.tsx","../src/molecules/menu/menu-item-style.ts","../src/molecules/page-header/index.tsx","../src/molecules/pagination/locales.ts","../src/molecules/pagination/index.tsx","../src/molecules/snackbar-stack/locales.ts","../src/molecules/snackbar-stack/index.tsx","../src/molecules/stat-card/index.tsx","../src/molecules/stepper/index.tsx","../src/molecules/tabs/locales.ts","../src/molecules/tabs/index.tsx","../src/molecules/tooltip/index.tsx","../src/molecules/toast/locales.ts","../src/molecules/toast/index.tsx"],"names":["jsxs","jsx","TONES","locales","useRef","useEffect"],"mappings":"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","file":"chunk-W4Y7DKK7.js","sourcesContent":["import type { ReactNode } from \"react\";\n\nimport { ChevronIcon } from \"../../atoms\";\n\nexport type AccordionItem = {\n id: string;\n title: ReactNode;\n content: ReactNode;\n defaultOpen?: boolean;\n};\n\nexport function Accordion({\n items,\n exclusive = false,\n name = \"accordion\",\n className = \"\",\n}: {\n items: readonly AccordionItem[];\n exclusive?: boolean;\n name?: string;\n className?: string;\n}) {\n return (\n <div\n className={`divide-y divide-line overflow-hidden rounded-md border border-line ${className}`}\n >\n {items.map((item) => (\n <details\n key={item.id}\n name={exclusive ? name : undefined}\n open={item.defaultOpen}\n className=\"group bg-surface\"\n >\n <summary className=\"flex min-h-12 cursor-pointer list-none items-center justify-between gap-3 px-4 text-sm text-ink transition-colors duration-(--duration-fast) ease-out hover:bg-raised focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent\">\n {item.title}\n <ChevronIcon\n className=\"text-ink-muted transition-transform duration-(--duration-fast) ease-out group-open:-rotate-180\"\n size=\"md\"\n />\n </summary>\n <div className=\"px-4 pb-4 text-sm text-ink-soft\">{item.content}</div>\n </details>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nconst TONES = {\n info: \"border-info/40 bg-info-soft text-info\",\n ok: \"border-ok/40 bg-ok-soft text-ok\",\n warn: \"border-warn/40 bg-warn-soft text-warn\",\n danger: \"border-danger/40 bg-danger-soft text-danger\",\n} as const;\nexport type BannerTone = keyof typeof TONES;\n\nexport function Banner({\n tone = \"info\",\n title,\n children,\n action,\n className = \"\",\n}: {\n tone?: BannerTone;\n title: string;\n children?: ReactNode;\n action?: ReactNode;\n className?: string;\n}) {\n return (\n <aside\n className={`flex flex-wrap items-center gap-4 rounded-md border px-4 py-3 ${TONES[tone]} ${className}`}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium\">{title}</p>\n {children ? <div className=\"mt-1 text-xs opacity-80\">{children}</div> : null}\n </div>\n {action}\n </aside>\n );\n}\n","export const locales = {\n label: \"Breadcrumb\",\n};\n","import type { ReactNode } from \"react\";\n\nimport { ChevronIcon } from \"../../atoms\";\nimport { locales } from \"./locales\";\n\nexport type Crumb = { id: string; label: ReactNode; href?: string };\n\nexport function Breadcrumb({\n items,\n label = locales.label,\n className = \"\",\n}: {\n items: readonly Crumb[];\n label?: string;\n className?: string;\n}) {\n return (\n <nav aria-label={label} className={className}>\n <ol className=\"flex flex-wrap items-center gap-1 text-xs\">\n {items.map((item, index) => {\n const last = index === items.length - 1;\n\n return (\n <li key={item.id} className=\"flex items-center gap-1\">\n {index > 0 ? <ChevronIcon className=\"-rotate-90 text-ink-dim\" size=\"sm\" /> : null}\n {last || !item.href ? (\n <span\n aria-current={last ? \"page\" : undefined}\n className={last ? \"font-medium text-ink\" : \"text-ink-muted\"}\n >\n {item.label}\n </span>\n ) : (\n <a\n href={item.href}\n className=\"rounded-xs px-1 py-0.5 text-ink-muted transition-colors duration-(--duration-fast) ease-out hover:bg-raised hover:text-ink-soft focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\"\n >\n {item.label}\n </a>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import type { ReactNode } from \"react\";\n\nconst TONES = {\n info: \"border-info/35 bg-info-soft text-info\",\n ok: \"border-ok/35 bg-ok-soft text-ok\",\n warn: \"border-warn/35 bg-warn-soft text-warn\",\n danger: \"border-danger/35 bg-danger-soft text-danger\",\n} as const;\n\nexport type CalloutTone = keyof typeof TONES;\n\nexport function Callout({\n tone = \"info\",\n title,\n children,\n className = \"\",\n}: {\n tone?: CalloutTone;\n title: string;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <aside className={`rounded-md border px-4 py-3 ${TONES[tone]} ${className}`}>\n <p className=\"text-sm font-medium\">{title}</p>\n <div className=\"mt-1 text-sm opacity-80\">{children}</div>\n </aside>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function CardTitle({ children, hint }: { children: ReactNode; hint?: ReactNode }) {\n return (\n <div className=\"flex items-baseline justify-between gap-3\">\n <span className=\"text-sm font-medium\">{children}</span>\n {hint ? <span className=\"shrink-0 text-xs text-ink-muted\">{hint}</span> : null}\n </div>\n );\n}\n","export const locales = { empty: \"No matching commands\", open: \"Open command menu\" };\n","\"use client\";\n\nimport { useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\n\nimport { Button, Input, Kbd } from \"../../atoms\";\nimport { locales } from \"./locales\";\n\nexport type CommandItem = { id: string; label: string; description?: string; icon?: ReactNode };\n\nexport function CommandMenu({\n items,\n onSelect,\n label = \"Search commands\",\n global = false,\n}: {\n items: readonly CommandItem[];\n onSelect?: (item: CommandItem) => void;\n label?: string;\n global?: boolean;\n}) {\n const [query, setQuery] = useState(\"\");\n const [open, setOpen] = useState(!global);\n const inputRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (!global) return;\n function handleKey(event: KeyboardEvent) {\n if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\") {\n event.preventDefault();\n setOpen(true);\n }\n if (event.key === \"Escape\") setOpen(false);\n }\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [global]);\n useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n const filtered = useMemo(\n () =>\n items.filter((item) =>\n `${item.label} ${item.description ?? \"\"}`.toLowerCase().includes(query.toLowerCase()),\n ),\n [items, query],\n );\n\n if (global && !open)\n return (\n <Button onClick={() => setOpen(true)} variant=\"secondary\">\n {locales.open}\n </Button>\n );\n const menu = (\n <div className=\"flex w-full max-w-lg flex-col gap-3 rounded-xl border border-line bg-surface p-3 shadow-modal\">\n <div className=\"flex items-center gap-3\">\n <Input\n aria-label={label}\n ref={inputRef}\n onChange={(event) => setQuery(event.target.value)}\n placeholder={label}\n value={query}\n />\n <Kbd>⌘K</Kbd>\n </div>\n <div className=\"flex max-h-72 flex-col gap-1 overflow-y-auto\">\n {filtered.length ? (\n filtered.map((item) => (\n <Button\n className=\"justify-start text-left\"\n key={item.id}\n onClick={() => onSelect?.(item)}\n variant=\"ghost\"\n >\n <span className=\"flex min-w-0 flex-col items-start\">\n {item.label}\n {item.description ? (\n <span className=\"text-2xs text-ink-dim\">{item.description}</span>\n ) : null}\n </span>\n </Button>\n ))\n ) : (\n <p className=\"px-3 py-6 text-center text-sm text-ink-muted\">{locales.empty}</p>\n )}\n </div>\n </div>\n );\n return global ? (\n <div\n className=\"fixed inset-0 z-30 flex items-start justify-center bg-app/70 p-4 pt-24 backdrop-blur-sm\"\n onClick={() => setOpen(false)}\n >\n <div onClick={(event) => event.stopPropagation()}>{menu}</div>\n </div>\n ) : (\n menu\n );\n}\n","export const locales = { close: \"Close drawer\" };\n","\"use client\";\n\nimport { useEffect, useRef, type ReactNode } from \"react\";\n\nimport { CloseIcon, IconButton } from \"../../atoms\";\nimport { locales } from \"./locales\";\n\nexport function Drawer({\n isOpen,\n onClose,\n title,\n children,\n closeLabel = locales.close,\n}: {\n isOpen: boolean;\n onClose: () => void;\n title: ReactNode;\n children: ReactNode;\n closeLabel?: string;\n}) {\n const ref = useRef<HTMLDialogElement>(null);\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n if (isOpen && !dialog.open) dialog.showModal();\n if (!isOpen && dialog.open) dialog.close();\n }, [isOpen]);\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n dialog.addEventListener(\"close\", onClose);\n return () => dialog.removeEventListener(\"close\", onClose);\n }, [onClose]);\n\n return (\n <dialog\n ref={ref}\n className=\"fixed inset-y-0 right-0 left-auto m-0 h-full max-h-none w-full max-w-md border-y-0 border-r-0 border-line bg-surface p-0 text-ink shadow-modal backdrop:bg-app/70 backdrop:backdrop-blur-sm sm:rounded-l-xl\"\n aria-modal=\"true\"\n >\n <div className=\"flex h-full flex-col\">\n <div className=\"flex items-center justify-between gap-4 border-b border-line px-5 py-4\">\n <h2 className=\"text-lg font-bold\">{title}</h2>\n <IconButton label={closeLabel} onClick={onClose}>\n <CloseIcon size=\"md\" />\n </IconButton>\n </div>\n <div className=\"flex-1 overflow-y-auto px-5 py-5\">{children}</div>\n </div>\n </dialog>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function DropdownMenu({\n trigger,\n children,\n align = \"start\",\n className = \"\",\n}: {\n trigger: ReactNode;\n children: ReactNode;\n align?: \"start\" | \"end\";\n className?: string;\n}) {\n return (\n <details className={`group relative ${className}`}>\n <summary className=\"list-none [&::-webkit-details-marker]:hidden\">{trigger}</summary>\n <div\n className={`absolute top-full z-20 mt-2 min-w-48 rounded-md border border-line bg-surface p-1 shadow-popover ${align === \"end\" ? \"right-0\" : \"left-0\"}`}\n >\n {children}\n </div>\n </details>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function Empty({ title, description }: { title: string; description?: ReactNode }) {\n return (\n <div className=\"flex flex-col items-center justify-center gap-2 py-16 text-center\">\n <p className=\"text-sm font-medium text-ink-soft\">{title}</p>\n {description ? <p className=\"max-w-sm text-sm text-ink-muted\">{description}</p> : null}\n </div>\n );\n}\n","import { cloneElement, isValidElement, useId, type ReactElement, type ReactNode } from \"react\";\n\nexport function Field({\n label,\n htmlFor,\n error,\n action,\n className = \"\",\n children,\n}: {\n label: string;\n htmlFor?: string;\n error?: string;\n action?: ReactNode;\n className?: string;\n children: ReactNode;\n}) {\n const errorId = useId();\n const control = isValidElement(children)\n ? (() => {\n const child = children as ReactElement<Record<string, unknown>>;\n const props = child.props;\n return cloneElement(child, {\n \"aria-describedby\": error\n ? [props[\"aria-describedby\"], errorId].filter(Boolean).join(\" \")\n : props[\"aria-describedby\"],\n \"aria-invalid\": error ? true : props[\"aria-invalid\"],\n });\n })()\n : children;\n\n return (\n <div className={`flex min-w-0 flex-col gap-2 ${className}`}>\n <div className=\"flex items-baseline justify-between gap-3\">\n <label htmlFor={htmlFor} className=\"text-xs font-medium text-ink-soft\">\n {label}\n </label>\n {action}\n </div>\n {control}\n {error ? (\n <span className=\"text-2xs text-danger\" id={errorId}>\n {error}\n </span>\n ) : null}\n </div>\n );\n}\n","export const locales = { clear: \"Clear filters\" };\n","import type { ReactNode } from \"react\";\n\nimport { locales } from \"./locales\";\n\nexport function FilterBar({\n children,\n resultLabel,\n onClear,\n className = \"\",\n}: {\n children: ReactNode;\n resultLabel?: string;\n onClear?: () => void;\n className?: string;\n}) {\n return (\n <div\n className={`flex flex-wrap items-center gap-3 rounded-md border border-line bg-panel p-3 ${className}`}\n >\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-3\">{children}</div>\n {resultLabel ? <span className=\"text-xs text-ink-muted\">{resultLabel}</span> : null}\n {onClear ? (\n <button\n className=\"text-xs text-accent-ink underline underline-offset-4\"\n onClick={onClear}\n type=\"button\"\n >\n {locales.clear}\n </button>\n ) : null}\n </div>\n );\n}\n","export const LOAD_ERROR = {\n retry: \"Try again\",\n};\n","import { buttonClass } from \"../../atoms\";\nimport { LOAD_ERROR as T } from \"./locales\";\n\nexport function LoadError({\n message,\n onRetry,\n retryLabel = T.retry,\n}: {\n message: string;\n onRetry?: () => void;\n retryLabel?: string;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center gap-3 py-16 text-center\">\n <p className=\"text-sm text-danger\">{message}</p>\n {onRetry ? (\n <button type=\"button\" onClick={onRetry} className={buttonClass({ variant: \"secondary\" })}>\n {retryLabel}\n </button>\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function ImagePreview({\n src,\n alt,\n fallback,\n className = \"\",\n}: {\n src?: string;\n alt: string;\n fallback?: ReactNode;\n className?: string;\n}) {\n return (\n <details className={`group ${className}`}>\n <summary className=\"cursor-zoom-in list-none overflow-hidden rounded-md bg-raised [&::-webkit-details-marker]:hidden\">\n {src ? (\n <img\n alt={alt}\n className=\"aspect-[4/3] w-full object-cover transition-transform duration-(--duration-base) ease-out group-hover:scale-[1.02]\"\n src={src}\n />\n ) : (\n fallback\n )}\n </summary>\n {src ? (\n <div className=\"fixed inset-0 z-30 flex items-center justify-center bg-app/85 p-6 backdrop-blur-sm\">\n <img\n alt={alt}\n className=\"max-h-[90dvh] max-w-full rounded-md object-contain shadow-modal\"\n src={src}\n />\n </div>\n ) : null}\n </details>\n );\n}\n","import type { TreeNode } from \"./index\";\n\nexport function TreeNodeView({ node }: { node: TreeNode }) {\n return node.children?.length ? (\n <details className=\"group\" open>\n <summary className=\"cursor-pointer list-none rounded-sm px-3 py-2 text-sm text-ink-soft hover:bg-raised [&::-webkit-details-marker]:hidden\">\n <span className=\"mr-2 text-ink-dim transition-transform duration-(--duration-fast) ease-out group-open:rotate-90\">\n ›\n </span>\n {node.label}\n </summary>\n <div className=\"ml-4 border-l border-line pl-2\">\n {node.children.map((child) => (\n <TreeNodeView key={child.id} node={child} />\n ))}\n </div>\n </details>\n ) : (\n <div className=\"rounded-sm px-3 py-2 text-sm text-ink-muted hover:bg-raised\">{node.label}</div>\n );\n}\n","export const locales = { label: \"Tree\" };\n","import type { ReactNode } from \"react\";\n\nimport { TreeNodeView } from \"./node\";\nimport { locales } from \"./locales\";\n\nexport type TreeNode = { id: string; label: ReactNode; children?: readonly TreeNode[] };\n\nexport function TreeView({\n nodes,\n className = \"\",\n}: {\n nodes: readonly TreeNode[];\n className?: string;\n}) {\n return (\n <nav aria-label={locales.label} className={`flex flex-col gap-1 ${className}`}>\n {nodes.map((node) => (\n <TreeNodeView key={node.id} node={node} />\n ))}\n </nav>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport function MetricCard({\n label,\n value,\n change,\n trend = \"neutral\",\n hint,\n children,\n className = \"\",\n}: {\n label: string;\n value: ReactNode;\n change?: string;\n trend?: \"neutral\" | \"up\" | \"down\";\n hint?: string;\n children?: ReactNode;\n className?: string;\n}) {\n const trendColor =\n trend === \"up\" ? \"text-ok\" : trend === \"down\" ? \"text-danger\" : \"text-ink-muted\";\n return (\n <article className={`rounded-md border border-line bg-surface p-5 ${className}`}>\n <div className=\"flex items-start justify-between gap-4\">\n <span className=\"text-xs text-ink-muted\">{label}</span>\n {change ? <span className={`text-xs font-medium ${trendColor}`}>{change}</span> : null}\n </div>\n <p className=\"mt-3 text-2xl font-bold text-ink\">{value}</p>\n {hint ? <p className=\"mt-1 text-xs text-ink-dim\">{hint}</p> : null}\n {children ? <div className=\"mt-4\">{children}</div> : null}\n </article>\n );\n}\n","export type MenuItemTone = \"neutral\" | \"danger\";\n\nconst TONES: Record<MenuItemTone, string> = {\n neutral: \"text-ink-soft hover:bg-raised hover:text-ink\",\n danger: \"text-danger hover:bg-danger-soft\",\n};\n\nconst BASE =\n \"flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-xs transition-colors duration-(--duration-fast) ease-out\" +\n \" focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\";\n\nexport type MenuItemOptions = {\n tone?: MenuItemTone;\n className?: string;\n};\n\nexport function menuItemClass({ tone = \"neutral\", className = \"\" }: MenuItemOptions = {}) {\n return `${BASE} ${TONES[tone]} ${className}`;\n}\n","import type { ReactNode } from \"react\";\n\nexport function PageHeader({\n title,\n subtitle,\n children,\n className = \"\",\n}: {\n title: ReactNode;\n subtitle?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <div\n className={`flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between sm:gap-4 ${className}`}\n >\n <div className=\"flex min-w-0 flex-col gap-1\">\n <h1 className=\"truncate text-xl font-bold\">{title}</h1>\n {subtitle ? <p className=\"text-sm text-ink-muted\">{subtitle}</p> : null}\n </div>\n {children ? <div className=\"flex w-full flex-wrap gap-3 sm:w-auto\">{children}</div> : null}\n </div>\n );\n}\n","export const PAGINATION = {\n label: { \"en-US\": \"Pagination\", \"pt-BR\": \"Paginação\" },\n previous: { \"en-US\": \"Previous\", \"pt-BR\": \"Anterior\" },\n next: { \"en-US\": \"Next\", \"pt-BR\": \"Próxima\" },\n page: { \"en-US\": (page: number) => `Page ${page}`, \"pt-BR\": (page: number) => `Página ${page}` },\n};\n","import { PAGINATION as T } from \"./locales\";\n\nexport function Pagination({\n page,\n pages,\n onPageChange,\n previousLabel = T.previous[\"en-US\"],\n nextLabel = T.next[\"en-US\"],\n pageLabel = T.page[\"en-US\"],\n label = T.label[\"en-US\"],\n className = \"\",\n}: {\n page: number;\n pages: number;\n onPageChange: (page: number) => void;\n previousLabel?: string;\n nextLabel?: string;\n pageLabel?: (page: number) => string;\n label?: string;\n className?: string;\n}) {\n const current = Math.min(Math.max(page, 1), Math.max(pages, 1));\n\n return (\n <nav aria-label={label} className={`flex flex-wrap items-center gap-2 ${className}`}>\n <button\n className=\"min-h-10 rounded-md border border-line-strong px-3 text-sm text-ink-soft transition-colors duration-(--duration-fast) ease-out hover:bg-raised disabled:pointer-events-none disabled:opacity-40\"\n disabled={current === 1}\n onClick={() => onPageChange(current - 1)}\n type=\"button\"\n >\n {previousLabel}\n </button>\n <span className=\"min-h-10 px-2 text-sm text-ink-muted\" aria-current=\"page\">\n {pageLabel(current)}\n </span>\n <button\n className=\"min-h-10 rounded-md border border-line-strong px-3 text-sm text-ink-soft transition-colors duration-(--duration-fast) ease-out hover:bg-raised disabled:pointer-events-none disabled:opacity-40\"\n disabled={current === pages}\n onClick={() => onPageChange(current + 1)}\n type=\"button\"\n >\n {nextLabel}\n </button>\n </nav>\n );\n}\n","export const locales = { dismiss: \"Dismiss notification\" };\n","import type { ReactNode } from \"react\";\n\nimport { locales } from \"./locales\";\n\nexport type Snackbar = {\n id: string;\n title: string;\n message?: ReactNode;\n tone?: \"neutral\" | \"ok\" | \"warn\" | \"danger\";\n};\n\nconst TONES = {\n neutral: \"border-line-strong\",\n ok: \"border-ok/50\",\n warn: \"border-warn/50\",\n danger: \"border-danger/50\",\n} as const;\n\nexport function SnackbarStack({\n items,\n onDismiss,\n className = \"\",\n}: {\n items: readonly Snackbar[];\n onDismiss?: (id: string) => void;\n className?: string;\n}) {\n return (\n <div\n aria-live=\"polite\"\n className={`fixed right-4 bottom-4 z-20 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2 ${className}`}\n >\n {items.map((item) => (\n <div\n className={`flex items-start gap-3 rounded-md border bg-surface p-4 text-ink shadow-popover ${TONES[item.tone ?? \"neutral\"]}`}\n key={item.id}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium\">{item.title}</p>\n {item.message ? (\n <div className=\"mt-1 text-xs text-ink-muted\">{item.message}</div>\n ) : null}\n </div>\n {onDismiss ? (\n <button\n aria-label={locales.dismiss}\n className=\"text-xs text-ink-muted hover:text-ink\"\n onClick={() => onDismiss(item.id)}\n type=\"button\"\n >\n ×\n </button>\n ) : null}\n </div>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Card, Label } from \"../../atoms\";\n\nexport function StatCard({\n label,\n value,\n hint,\n color = \"\",\n attention = false,\n className = \"\",\n}: {\n label: string;\n value: ReactNode;\n hint?: string;\n color?: string;\n attention?: boolean;\n className?: string;\n}) {\n const length = String(value).length;\n const size = length <= 7 ? \"text-2xl\" : length <= 12 ? \"text-lg\" : \"text-sm\";\n\n return (\n <Card\n padding=\"sm\"\n className={`flex flex-col gap-1 ${attention ? \"attention\" : \"\"} ${className}`}\n >\n <Label>{label}</Label>\n <span className={`truncate ${size} leading-tight font-bold ${color}`}>{value}</span>\n {hint ? <span className=\"truncate text-xs text-ink-muted\">{hint}</span> : null}\n </Card>\n );\n}\n","export type Step = { id: string; label: string; description?: string };\n\nexport function Stepper({\n steps,\n current,\n className = \"\",\n}: {\n steps: readonly Step[];\n current: number;\n className?: string;\n}) {\n return (\n <ol className={`flex flex-col gap-4 sm:flex-row sm:items-start sm:gap-0 ${className}`}>\n {steps.map((step, index) => (\n <li\n className=\"relative flex flex-1 items-start gap-3 sm:flex-col sm:items-center sm:text-center\"\n key={step.id}\n >\n {index < steps.length - 1 ? (\n <span className=\"absolute top-5 left-5 h-full w-px bg-line sm:top-5 sm:left-1/2 sm:h-px sm:w-full\" />\n ) : null}\n <span\n className={`relative z-1 flex size-10 shrink-0 items-center justify-center rounded-full border text-sm font-medium ${index < current ? \"border-accent bg-accent text-on-accent\" : index === current ? \"border-accent text-accent-ink ring-4 ring-accent-soft\" : \"border-line-strong text-ink-dim\"}`}\n >\n {index + 1}\n </span>\n <span className=\"relative z-1 flex flex-col pt-2 sm:pt-3\">\n <strong className=\"text-sm text-ink\">{step.label}</strong>\n {step.description ? (\n <span className=\"mt-1 text-xs text-ink-muted\">{step.description}</span>\n ) : null}\n </span>\n </li>\n ))}\n </ol>\n );\n}\n","export const TABS = {\n label: { \"en-US\": \"Tabs\", \"pt-BR\": \"Abas\" },\n};\n","import type { KeyboardEvent, ReactNode } from \"react\";\nimport { TABS as T } from \"./locales\";\n\nexport type Tab = {\n value: string;\n label: ReactNode;\n content: ReactNode;\n disabled?: boolean;\n};\n\nexport function Tabs({\n items,\n value,\n onValueChange,\n label = T.label[\"en-US\"],\n className = \"\",\n}: {\n items: Tab[];\n value: string;\n onValueChange: (value: string) => void;\n label?: string;\n className?: string;\n}) {\n const active = items.find((item) => item.value === value) ?? items[0];\n\n function onKeyDown(event: KeyboardEvent<HTMLButtonElement>) {\n const index = items.findIndex((item) => item.value === active?.value);\n const direction = event.key === \"ArrowRight\" ? 1 : event.key === \"ArrowLeft\" ? -1 : 0;\n const target =\n event.key === \"Home\"\n ? items[0]\n : event.key === \"End\"\n ? items.at(-1)\n : direction\n ? items[(index + direction + items.length) % items.length]\n : undefined;\n\n if (!target || target.disabled) return;\n event.preventDefault();\n onValueChange(target.value);\n }\n\n return (\n <div className={`flex min-w-0 flex-col gap-4 ${className}`}>\n <div\n aria-label={label}\n className=\"flex min-w-0 gap-1 overflow-x-auto border-b border-line\"\n role=\"tablist\"\n >\n {items.map((item) => (\n <button\n aria-selected={item.value === active?.value}\n id={`tab-${item.value}`}\n className={`min-h-10 shrink-0 border-b-2 px-3 text-sm transition-colors duration-(--duration-fast) ease-out ${\n item.value === active?.value\n ? \"border-accent font-medium text-ink\"\n : \"border-transparent text-ink-muted hover:border-line-strong hover:text-ink\"\n }`}\n disabled={item.disabled}\n key={item.value}\n onClick={() => onValueChange(item.value)}\n onKeyDown={onKeyDown}\n role=\"tab\"\n tabIndex={item.value === active?.value ? 0 : -1}\n type=\"button\"\n >\n {item.label}\n </button>\n ))}\n </div>\n {active ? (\n <div aria-labelledby={`tab-${active.value}`} role=\"tabpanel\">\n {active.content}\n </div>\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nconst SIDES = {\n top: \"bottom-full left-1/2 mb-2 -translate-x-1/2\",\n bottom: \"top-full left-1/2 mt-2 -translate-x-1/2\",\n left: \"right-full top-1/2 mr-2 -translate-y-1/2\",\n right: \"left-full top-1/2 ml-2 -translate-y-1/2\",\n} as const;\n\nexport type TooltipSide = keyof typeof SIDES;\n\nexport function Tooltip({\n id,\n content,\n side = \"top\",\n children,\n className = \"\",\n}: {\n id: string;\n content: ReactNode;\n side?: TooltipSide;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <span className={`group relative inline-flex ${className}`}>\n <span aria-describedby={id} className=\"inline-flex\">\n {children}\n </span>\n <span\n id={id}\n role=\"tooltip\"\n className={`pointer-events-none absolute z-50 w-max max-w-64 rounded-sm border border-line-strong bg-raised px-2 py-1 text-2xs text-ink-soft opacity-0 shadow-popover transition-opacity duration-(--duration-fast) ease-out group-focus-within:opacity-100 group-hover:opacity-100 ${SIDES[side]}`}\n >\n {content}\n </span>\n </span>\n );\n}\n","export const locales = { dismiss: \"Dismiss notification\" };\n","import type { ReactNode } from \"react\";\n\nimport { locales } from \"./locales\";\n\nconst TONES = {\n info: \"border-info/35 bg-surface\",\n ok: \"border-ok/35 bg-surface\",\n warn: \"border-warn/35 bg-surface\",\n danger: \"border-danger/35 bg-surface\",\n} as const;\n\nexport type ToastTone = keyof typeof TONES;\n\nexport function Toast({\n tone = \"info\",\n title,\n children,\n onDismiss,\n dismissLabel = locales.dismiss,\n className = \"\",\n}: {\n tone?: ToastTone;\n title: string;\n children?: ReactNode;\n onDismiss?: () => void;\n dismissLabel?: string;\n className?: string;\n}) {\n return (\n <div\n aria-live=\"polite\"\n className={`flex items-start gap-4 rounded-md border p-4 shadow-popover ${TONES[tone]} ${className}`}\n role=\"status\"\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-ink\">{title}</p>\n {children ? <div className=\"mt-1 text-xs text-ink-muted\">{children}</div> : null}\n </div>\n {onDismiss ? (\n <button\n aria-label={dismissLabel}\n className=\"rounded-xs px-1 text-xs text-ink-muted transition-colors duration-(--duration-fast) ease-out hover:text-ink focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\"\n onClick={onDismiss}\n type=\"button\"\n >\n ×\n </button>\n ) : null}\n </div>\n );\n}\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
|
|
3
|
-
declare function CodeBlock({ code, language, className, }: {
|
|
3
|
+
declare function CodeBlock({ code, language, copyLabel, copiedLabel, className, }: {
|
|
4
4
|
code: string;
|
|
5
5
|
language?: string;
|
|
6
|
+
copyLabel?: string;
|
|
7
|
+
copiedLabel?: string;
|
|
6
8
|
className?: string;
|
|
7
9
|
}): react.JSX.Element;
|
|
8
10
|
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
"use client";
|
|
3
|
-
|
|
4
|
-
// src/molecules/code-block/index.tsx
|
|
5
|
-
import { useState } from "react";
|
|
6
2
|
|
|
7
3
|
// src/atoms/button/button-style.ts
|
|
8
4
|
var VARIANTS = {
|
|
@@ -38,25 +34,104 @@ function Button({
|
|
|
38
34
|
return /* @__PURE__ */ jsx("button", { type: "button", ...props, className: buttonClass({ variant, size, className }) });
|
|
39
35
|
}
|
|
40
36
|
|
|
41
|
-
// src/
|
|
42
|
-
import {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
37
|
+
// src/atoms/copy-button/index.tsx
|
|
38
|
+
import { useEffect, useRef, useState } from "react";
|
|
39
|
+
|
|
40
|
+
// src/atoms/icon/svg/index.tsx
|
|
41
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
42
|
+
var SIZES2 = {
|
|
43
|
+
sm: "h-3 w-3",
|
|
44
|
+
md: "h-4 w-4",
|
|
45
|
+
lg: "h-5 w-5",
|
|
46
|
+
xl: "h-6 w-6",
|
|
47
|
+
"2xl": "h-8 w-8"
|
|
48
|
+
};
|
|
49
|
+
function Svg({ size = "md", className = "", children }) {
|
|
50
|
+
return /* @__PURE__ */ jsx2(
|
|
51
|
+
"svg",
|
|
52
|
+
{
|
|
53
|
+
className: `${SIZES2[size]} shrink-0 ${className}`,
|
|
54
|
+
viewBox: "0 0 24 24",
|
|
55
|
+
fill: "none",
|
|
56
|
+
stroke: "currentColor",
|
|
57
|
+
strokeWidth: "1.6",
|
|
58
|
+
strokeLinecap: "round",
|
|
59
|
+
strokeLinejoin: "round",
|
|
60
|
+
"aria-hidden": "true",
|
|
61
|
+
children
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// src/atoms/icon/check-icon/index.tsx
|
|
67
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
68
|
+
function CheckIcon(p) {
|
|
69
|
+
return /* @__PURE__ */ jsx3(Svg, { ...p, children: /* @__PURE__ */ jsx3("path", { d: "m5 12.5 4.5 4.5L19 7.5" }) });
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// src/atoms/icon/copy-icon/index.tsx
|
|
73
|
+
import { jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
74
|
+
function CopyIcon(p) {
|
|
75
|
+
return /* @__PURE__ */ jsxs(Svg, { ...p, children: [
|
|
76
|
+
/* @__PURE__ */ jsx4("rect", { x: "9", y: "9", width: "11", height: "11", rx: "2" }),
|
|
77
|
+
/* @__PURE__ */ jsx4("path", { d: "M5 15V6a2 2 0 0 1 2-2h8" })
|
|
78
|
+
] });
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// src/atoms/copy-button/locales.ts
|
|
82
|
+
var COPY_BUTTON = {
|
|
83
|
+
copy: "Copy",
|
|
84
|
+
copied: "Copied"
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// src/atoms/copy-button/index.tsx
|
|
88
|
+
import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
89
|
+
function CopyButton({
|
|
90
|
+
value,
|
|
91
|
+
label = COPY_BUTTON.copy,
|
|
92
|
+
copiedLabel = COPY_BUTTON.copied,
|
|
93
|
+
variant = "ghost",
|
|
94
|
+
size = "sm",
|
|
95
|
+
resetAfter = 1400,
|
|
96
|
+
onCopy,
|
|
97
|
+
disabled = false,
|
|
46
98
|
className = ""
|
|
47
99
|
}) {
|
|
48
100
|
const [copied, setCopied] = useState(false);
|
|
101
|
+
const timer = useRef(void 0);
|
|
102
|
+
useEffect(() => () => clearTimeout(timer.current), []);
|
|
49
103
|
async function copy() {
|
|
50
|
-
|
|
104
|
+
try {
|
|
105
|
+
await navigator.clipboard.writeText(value);
|
|
106
|
+
} catch {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
51
109
|
setCopied(true);
|
|
52
|
-
|
|
110
|
+
onCopy?.(value);
|
|
111
|
+
clearTimeout(timer.current);
|
|
112
|
+
timer.current = setTimeout(() => setCopied(false), resetAfter);
|
|
53
113
|
}
|
|
54
|
-
return /* @__PURE__ */
|
|
55
|
-
/* @__PURE__ */
|
|
56
|
-
|
|
57
|
-
|
|
114
|
+
return /* @__PURE__ */ jsxs2(Button, { onClick: copy, disabled, variant, size, className, children: [
|
|
115
|
+
copied ? /* @__PURE__ */ jsx5(CheckIcon, { className: "text-ok" }) : /* @__PURE__ */ jsx5(CopyIcon, {}),
|
|
116
|
+
/* @__PURE__ */ jsx5("span", { "aria-live": "polite", children: copied ? copiedLabel : label })
|
|
117
|
+
] });
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// src/molecules/code-block/index.tsx
|
|
121
|
+
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
122
|
+
function CodeBlock({
|
|
123
|
+
code,
|
|
124
|
+
language = "text",
|
|
125
|
+
copyLabel,
|
|
126
|
+
copiedLabel,
|
|
127
|
+
className = ""
|
|
128
|
+
}) {
|
|
129
|
+
return /* @__PURE__ */ jsxs3("div", { className: `overflow-hidden rounded-md border border-line bg-field ${className}`, children: [
|
|
130
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between border-b border-line px-4 py-2", children: [
|
|
131
|
+
/* @__PURE__ */ jsx6("span", { className: "font-mono text-2xs tracking-caps text-ink-dim uppercase", children: language }),
|
|
132
|
+
/* @__PURE__ */ jsx6(CopyButton, { value: code, label: copyLabel, copiedLabel })
|
|
58
133
|
] }),
|
|
59
|
-
/* @__PURE__ */
|
|
134
|
+
/* @__PURE__ */ jsx6("pre", { className: "overflow-x-auto p-4 font-mono text-xs leading-6 text-ink-soft", children: /* @__PURE__ */ jsx6("code", { children: code }) })
|
|
60
135
|
] });
|
|
61
136
|
}
|
|
62
137
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/
|
|
1
|
+
{"version":3,"sources":["../../src/atoms/button/button-style.ts","../../src/atoms/button/button/index.tsx","../../src/atoms/copy-button/index.tsx","../../src/atoms/icon/svg/index.tsx","../../src/atoms/icon/check-icon/index.tsx","../../src/atoms/icon/copy-icon/index.tsx","../../src/atoms/copy-button/locales.ts","../../src/molecules/code-block/index.tsx"],"sourcesContent":["export type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\";\n\nconst VARIANTS: Record<ButtonVariant, string> = {\n primary: \"bg-accent font-medium text-on-accent hover:bg-accent-ink\",\n secondary: \"border border-line-strong hover:bg-raised\",\n ghost: \"text-ink-muted hover:bg-raised hover:text-ink-soft\",\n danger: \"border border-danger/50 text-danger hover:bg-danger-soft\",\n};\n\nconst SIZES: Record<ButtonSize, string> = {\n sm: \"gap-2 px-3 py-2 text-xs\",\n md: \"gap-2 px-4 py-3 text-sm\",\n lg: \"gap-2 px-4 py-4 text-base\",\n icon: \"h-10 w-10 shrink-0\",\n \"icon-sm\": \"h-8 w-8 shrink-0\",\n};\n\nconst BASE =\n \"inline-flex touch-manipulation select-none items-center justify-center rounded-md transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-out active:scale-95\" +\n \" focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent focus-visible:ring-2 focus-visible:ring-accent/30\" +\n \" disabled:pointer-events-none disabled:opacity-50\";\n\nexport type ButtonOptions = {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n};\n\nexport function buttonClass({\n variant = \"secondary\",\n size = \"md\",\n className = \"\",\n}: ButtonOptions = {}) {\n return `${BASE} ${VARIANTS[variant]} ${SIZES[size]} ${className}`;\n}\n","import type { ComponentProps } from \"react\";\n\nimport { buttonClass, type ButtonOptions } from \"../button-style\";\n\nexport function Button({\n variant,\n size,\n className,\n ...props\n}: ButtonOptions & ComponentProps<\"button\">) {\n return <button type=\"button\" {...props} className={buttonClass({ variant, size, className })} />;\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { Button, type ButtonSize, type ButtonVariant } from \"../button\";\nimport { CheckIcon, CopyIcon } from \"../icon\";\nimport { COPY_BUTTON } from \"./locales\";\n\nexport function CopyButton({\n value,\n label = COPY_BUTTON.copy,\n copiedLabel = COPY_BUTTON.copied,\n variant = \"ghost\",\n size = \"sm\",\n resetAfter = 1400,\n onCopy,\n disabled = false,\n className = \"\",\n}: {\n value: string;\n label?: string;\n copiedLabel?: string;\n variant?: ButtonVariant;\n size?: Extract<ButtonSize, \"sm\" | \"md\">;\n resetAfter?: number;\n onCopy?: (value: string) => void;\n disabled?: boolean;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => () => clearTimeout(timer.current), []);\n\n async function copy() {\n try {\n await navigator.clipboard.writeText(value);\n } catch {\n return;\n }\n setCopied(true);\n onCopy?.(value);\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setCopied(false), resetAfter);\n }\n\n return (\n <Button onClick={copy} disabled={disabled} variant={variant} size={size} className={className}>\n {copied ? <CheckIcon className=\"text-ok\" /> : <CopyIcon />}\n <span aria-live=\"polite\">{copied ? copiedLabel : label}</span>\n </Button>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport type IconSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nconst SIZES: Record<IconSize, string> = {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n xl: \"h-6 w-6\",\n \"2xl\": \"h-8 w-8\",\n};\n\nexport type Props = { size?: IconSize; className?: string };\n\nexport function Svg({ size = \"md\", className = \"\", children }: Props & { children: ReactNode }) {\n return (\n <svg\n className={`${SIZES[size]} shrink-0 ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n );\n}\n","import { Svg, type Props } from \"../svg\";\n\nexport function CheckIcon(p: Props) {\n return (\n <Svg {...p}>\n <path d=\"m5 12.5 4.5 4.5L19 7.5\" />\n </Svg>\n );\n}\n","import { Svg, type Props } from \"../svg\";\n\nexport function CopyIcon(p: Props) {\n return (\n <Svg {...p}>\n <rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\" />\n <path d=\"M5 15V6a2 2 0 0 1 2-2h8\" />\n </Svg>\n );\n}\n","export const COPY_BUTTON = {\n copy: \"Copy\",\n copied: \"Copied\",\n};\n","import { CopyButton } from \"../../atoms\";\n\nexport function CodeBlock({\n code,\n language = \"text\",\n copyLabel,\n copiedLabel,\n className = \"\",\n}: {\n code: string;\n language?: string;\n copyLabel?: string;\n copiedLabel?: string;\n className?: string;\n}) {\n return (\n <div className={`overflow-hidden rounded-md border border-line bg-field ${className}`}>\n <div className=\"flex items-center justify-between border-b border-line px-4 py-2\">\n <span className=\"font-mono text-2xs tracking-caps text-ink-dim uppercase\">{language}</span>\n <CopyButton value={code} label={copyLabel} copiedLabel={copiedLabel} />\n </div>\n <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-6 text-ink-soft\">\n <code>{code}</code>\n </pre>\n </div>\n );\n}\n"],"mappings":"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","names":["jsx","SIZES","jsx","jsx","jsx","jsxs","jsx","jsxs"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
|
|
3
|
+
type ButtonVariant = "primary" | "secondary" | "ghost" | "danger";
|
|
4
|
+
type ButtonSize = "sm" | "md" | "lg" | "icon" | "icon-sm";
|
|
5
|
+
|
|
6
|
+
declare function CopyButton({ value, label, copiedLabel, variant, size, resetAfter, onCopy, disabled, className, }: {
|
|
7
|
+
value: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
copiedLabel?: string;
|
|
10
|
+
variant?: ButtonVariant;
|
|
11
|
+
size?: Extract<ButtonSize, "sm" | "md">;
|
|
12
|
+
resetAfter?: number;
|
|
13
|
+
onCopy?: (value: string) => void;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
className?: string;
|
|
16
|
+
}): react.JSX.Element;
|
|
17
|
+
|
|
18
|
+
export { CopyButton };
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/atoms/copy-button/index.tsx
|
|
5
|
+
import { useEffect, useRef, useState } from "react";
|
|
6
|
+
|
|
7
|
+
// src/atoms/button/button-style.ts
|
|
8
|
+
var VARIANTS = {
|
|
9
|
+
primary: "bg-accent font-medium text-on-accent hover:bg-accent-ink",
|
|
10
|
+
secondary: "border border-line-strong hover:bg-raised",
|
|
11
|
+
ghost: "text-ink-muted hover:bg-raised hover:text-ink-soft",
|
|
12
|
+
danger: "border border-danger/50 text-danger hover:bg-danger-soft"
|
|
13
|
+
};
|
|
14
|
+
var SIZES = {
|
|
15
|
+
sm: "gap-2 px-3 py-2 text-xs",
|
|
16
|
+
md: "gap-2 px-4 py-3 text-sm",
|
|
17
|
+
lg: "gap-2 px-4 py-4 text-base",
|
|
18
|
+
icon: "h-10 w-10 shrink-0",
|
|
19
|
+
"icon-sm": "h-8 w-8 shrink-0"
|
|
20
|
+
};
|
|
21
|
+
var BASE = "inline-flex touch-manipulation select-none items-center justify-center rounded-md transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-out active:scale-95 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent focus-visible:ring-2 focus-visible:ring-accent/30 disabled:pointer-events-none disabled:opacity-50";
|
|
22
|
+
function buttonClass({
|
|
23
|
+
variant = "secondary",
|
|
24
|
+
size = "md",
|
|
25
|
+
className = ""
|
|
26
|
+
} = {}) {
|
|
27
|
+
return `${BASE} ${VARIANTS[variant]} ${SIZES[size]} ${className}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// src/atoms/button/button/index.tsx
|
|
31
|
+
import { jsx } from "react/jsx-runtime";
|
|
32
|
+
function Button({
|
|
33
|
+
variant,
|
|
34
|
+
size,
|
|
35
|
+
className,
|
|
36
|
+
...props
|
|
37
|
+
}) {
|
|
38
|
+
return /* @__PURE__ */ jsx("button", { type: "button", ...props, className: buttonClass({ variant, size, className }) });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/atoms/icon/svg/index.tsx
|
|
42
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
43
|
+
var SIZES2 = {
|
|
44
|
+
sm: "h-3 w-3",
|
|
45
|
+
md: "h-4 w-4",
|
|
46
|
+
lg: "h-5 w-5",
|
|
47
|
+
xl: "h-6 w-6",
|
|
48
|
+
"2xl": "h-8 w-8"
|
|
49
|
+
};
|
|
50
|
+
function Svg({ size = "md", className = "", children }) {
|
|
51
|
+
return /* @__PURE__ */ jsx2(
|
|
52
|
+
"svg",
|
|
53
|
+
{
|
|
54
|
+
className: `${SIZES2[size]} shrink-0 ${className}`,
|
|
55
|
+
viewBox: "0 0 24 24",
|
|
56
|
+
fill: "none",
|
|
57
|
+
stroke: "currentColor",
|
|
58
|
+
strokeWidth: "1.6",
|
|
59
|
+
strokeLinecap: "round",
|
|
60
|
+
strokeLinejoin: "round",
|
|
61
|
+
"aria-hidden": "true",
|
|
62
|
+
children
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// src/atoms/icon/check-icon/index.tsx
|
|
68
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
69
|
+
function CheckIcon(p) {
|
|
70
|
+
return /* @__PURE__ */ jsx3(Svg, { ...p, children: /* @__PURE__ */ jsx3("path", { d: "m5 12.5 4.5 4.5L19 7.5" }) });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// src/atoms/icon/copy-icon/index.tsx
|
|
74
|
+
import { jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
75
|
+
function CopyIcon(p) {
|
|
76
|
+
return /* @__PURE__ */ jsxs(Svg, { ...p, children: [
|
|
77
|
+
/* @__PURE__ */ jsx4("rect", { x: "9", y: "9", width: "11", height: "11", rx: "2" }),
|
|
78
|
+
/* @__PURE__ */ jsx4("path", { d: "M5 15V6a2 2 0 0 1 2-2h8" })
|
|
79
|
+
] });
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// src/atoms/copy-button/locales.ts
|
|
83
|
+
var COPY_BUTTON = {
|
|
84
|
+
copy: "Copy",
|
|
85
|
+
copied: "Copied"
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// src/atoms/copy-button/index.tsx
|
|
89
|
+
import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
90
|
+
function CopyButton({
|
|
91
|
+
value,
|
|
92
|
+
label = COPY_BUTTON.copy,
|
|
93
|
+
copiedLabel = COPY_BUTTON.copied,
|
|
94
|
+
variant = "ghost",
|
|
95
|
+
size = "sm",
|
|
96
|
+
resetAfter = 1400,
|
|
97
|
+
onCopy,
|
|
98
|
+
disabled = false,
|
|
99
|
+
className = ""
|
|
100
|
+
}) {
|
|
101
|
+
const [copied, setCopied] = useState(false);
|
|
102
|
+
const timer = useRef(void 0);
|
|
103
|
+
useEffect(() => () => clearTimeout(timer.current), []);
|
|
104
|
+
async function copy() {
|
|
105
|
+
try {
|
|
106
|
+
await navigator.clipboard.writeText(value);
|
|
107
|
+
} catch {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
setCopied(true);
|
|
111
|
+
onCopy?.(value);
|
|
112
|
+
clearTimeout(timer.current);
|
|
113
|
+
timer.current = setTimeout(() => setCopied(false), resetAfter);
|
|
114
|
+
}
|
|
115
|
+
return /* @__PURE__ */ jsxs2(Button, { onClick: copy, disabled, variant, size, className, children: [
|
|
116
|
+
copied ? /* @__PURE__ */ jsx5(CheckIcon, { className: "text-ok" }) : /* @__PURE__ */ jsx5(CopyIcon, {}),
|
|
117
|
+
/* @__PURE__ */ jsx5("span", { "aria-live": "polite", children: copied ? copiedLabel : label })
|
|
118
|
+
] });
|
|
119
|
+
}
|
|
120
|
+
export {
|
|
121
|
+
CopyButton
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=copy-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/atoms/copy-button/index.tsx","../../src/atoms/button/button-style.ts","../../src/atoms/button/button/index.tsx","../../src/atoms/icon/svg/index.tsx","../../src/atoms/icon/check-icon/index.tsx","../../src/atoms/icon/copy-icon/index.tsx","../../src/atoms/copy-button/locales.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\n\nimport { Button, type ButtonSize, type ButtonVariant } from \"../button\";\nimport { CheckIcon, CopyIcon } from \"../icon\";\nimport { COPY_BUTTON } from \"./locales\";\n\nexport function CopyButton({\n value,\n label = COPY_BUTTON.copy,\n copiedLabel = COPY_BUTTON.copied,\n variant = \"ghost\",\n size = \"sm\",\n resetAfter = 1400,\n onCopy,\n disabled = false,\n className = \"\",\n}: {\n value: string;\n label?: string;\n copiedLabel?: string;\n variant?: ButtonVariant;\n size?: Extract<ButtonSize, \"sm\" | \"md\">;\n resetAfter?: number;\n onCopy?: (value: string) => void;\n disabled?: boolean;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => () => clearTimeout(timer.current), []);\n\n async function copy() {\n try {\n await navigator.clipboard.writeText(value);\n } catch {\n return;\n }\n setCopied(true);\n onCopy?.(value);\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setCopied(false), resetAfter);\n }\n\n return (\n <Button onClick={copy} disabled={disabled} variant={variant} size={size} className={className}>\n {copied ? <CheckIcon className=\"text-ok\" /> : <CopyIcon />}\n <span aria-live=\"polite\">{copied ? copiedLabel : label}</span>\n </Button>\n );\n}\n","export type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-sm\";\n\nconst VARIANTS: Record<ButtonVariant, string> = {\n primary: \"bg-accent font-medium text-on-accent hover:bg-accent-ink\",\n secondary: \"border border-line-strong hover:bg-raised\",\n ghost: \"text-ink-muted hover:bg-raised hover:text-ink-soft\",\n danger: \"border border-danger/50 text-danger hover:bg-danger-soft\",\n};\n\nconst SIZES: Record<ButtonSize, string> = {\n sm: \"gap-2 px-3 py-2 text-xs\",\n md: \"gap-2 px-4 py-3 text-sm\",\n lg: \"gap-2 px-4 py-4 text-base\",\n icon: \"h-10 w-10 shrink-0\",\n \"icon-sm\": \"h-8 w-8 shrink-0\",\n};\n\nconst BASE =\n \"inline-flex touch-manipulation select-none items-center justify-center rounded-md transition-[background-color,border-color,color,box-shadow,transform] duration-(--duration-fast) ease-out active:scale-95\" +\n \" focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent focus-visible:ring-2 focus-visible:ring-accent/30\" +\n \" disabled:pointer-events-none disabled:opacity-50\";\n\nexport type ButtonOptions = {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n};\n\nexport function buttonClass({\n variant = \"secondary\",\n size = \"md\",\n className = \"\",\n}: ButtonOptions = {}) {\n return `${BASE} ${VARIANTS[variant]} ${SIZES[size]} ${className}`;\n}\n","import type { ComponentProps } from \"react\";\n\nimport { buttonClass, type ButtonOptions } from \"../button-style\";\n\nexport function Button({\n variant,\n size,\n className,\n ...props\n}: ButtonOptions & ComponentProps<\"button\">) {\n return <button type=\"button\" {...props} className={buttonClass({ variant, size, className })} />;\n}\n","import type { ReactNode } from \"react\";\n\nexport type IconSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nconst SIZES: Record<IconSize, string> = {\n sm: \"h-3 w-3\",\n md: \"h-4 w-4\",\n lg: \"h-5 w-5\",\n xl: \"h-6 w-6\",\n \"2xl\": \"h-8 w-8\",\n};\n\nexport type Props = { size?: IconSize; className?: string };\n\nexport function Svg({ size = \"md\", className = \"\", children }: Props & { children: ReactNode }) {\n return (\n <svg\n className={`${SIZES[size]} shrink-0 ${className}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n );\n}\n","import { Svg, type Props } from \"../svg\";\n\nexport function CheckIcon(p: Props) {\n return (\n <Svg {...p}>\n <path d=\"m5 12.5 4.5 4.5L19 7.5\" />\n </Svg>\n );\n}\n","import { Svg, type Props } from \"../svg\";\n\nexport function CopyIcon(p: Props) {\n return (\n <Svg {...p}>\n <rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\" />\n <path d=\"M5 15V6a2 2 0 0 1 2-2h8\" />\n </Svg>\n );\n}\n","export const COPY_BUTTON = {\n copy: \"Copy\",\n copied: \"Copied\",\n};\n"],"mappings":"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","names":["jsx","SIZES","jsx","jsx","jsx","jsxs"]}
|