@thangnqdev/ui 0.2.0 → 0.2.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/LICENSE +21 -21
- package/README.md +144 -142
- package/bin/cli.js +125 -0
- package/dist/bento/index.cjs.map +1 -1
- package/dist/bento/index.js +2 -2
- package/dist/buttons/index.cjs.map +1 -1
- package/dist/buttons/index.js +3 -3
- package/dist/{chunk-77KTYOMQ.js → chunk-2OXZK6IP.js} +3 -3
- package/dist/chunk-2OXZK6IP.js.map +1 -0
- package/dist/{chunk-4CRFNALF.js → chunk-4GNFT2ZJ.js} +7 -7
- package/dist/chunk-4GNFT2ZJ.js.map +1 -0
- package/dist/{chunk-2YJBW4E2.js → chunk-4S6L5V7X.js} +2 -2
- package/dist/chunk-4S6L5V7X.js.map +1 -0
- package/dist/{chunk-I2FQBMVW.js → chunk-66VWUJEI.js} +3 -3
- package/dist/chunk-66VWUJEI.js.map +1 -0
- package/dist/{chunk-YOCGBORV.js → chunk-7NMB2Y64.js} +4 -4
- package/dist/chunk-7NMB2Y64.js.map +1 -0
- package/dist/{chunk-V52JOSDF.js → chunk-A7P3O5Z5.js} +3 -3
- package/dist/chunk-A7P3O5Z5.js.map +1 -0
- package/dist/{chunk-ME4XILG5.js → chunk-ATYGDTMK.js} +5 -5
- package/dist/chunk-ATYGDTMK.js.map +1 -0
- package/dist/{chunk-S6XJMYME.js → chunk-C4SUXMI3.js} +3 -3
- package/dist/chunk-C4SUXMI3.js.map +1 -0
- package/dist/{chunk-EXFR2BFJ.js → chunk-DUPPPGXY.js} +7 -7
- package/dist/chunk-DUPPPGXY.js.map +1 -0
- package/dist/{chunk-I5O2WCGF.js → chunk-EU2LPUYP.js} +3 -3
- package/dist/chunk-EU2LPUYP.js.map +1 -0
- package/dist/{chunk-D7FB3TCA.js → chunk-GXI2H5XA.js} +3 -3
- package/dist/chunk-GXI2H5XA.js.map +1 -0
- package/dist/{chunk-ADO3SVUA.js → chunk-IABPUCAQ.js} +2 -2
- package/dist/chunk-IABPUCAQ.js.map +1 -0
- package/dist/{chunk-PC5SZFZC.js → chunk-JOKEKOP3.js} +8 -8
- package/dist/chunk-JOKEKOP3.js.map +1 -0
- package/dist/{chunk-GXWB6BSY.js → chunk-KUQWUTZA.js} +4 -4
- package/dist/chunk-KUQWUTZA.js.map +1 -0
- package/dist/{chunk-ZEDXARXW.js → chunk-U3J4UPV3.js} +2 -2
- package/dist/chunk-U3J4UPV3.js.map +1 -0
- package/dist/{chunk-DSEL7ELZ.js → chunk-VE2PNSDQ.js} +4 -4
- package/dist/chunk-VE2PNSDQ.js.map +1 -0
- package/dist/{chunk-YJ64RI7J.js → chunk-WAFHC4DQ.js} +3 -3
- package/dist/chunk-WAFHC4DQ.js.map +1 -0
- package/dist/{chunk-W5WNWTQC.js → chunk-YJ67WYVW.js} +5 -5
- package/dist/chunk-YJ67WYVW.js.map +1 -0
- package/dist/{chunk-4MS6ZHFQ.js → chunk-Z427NPMU.js} +7 -7
- package/dist/chunk-Z427NPMU.js.map +1 -0
- package/dist/core/index.cjs +4 -4
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +2 -2
- package/dist/data-display/index.cjs.map +1 -1
- package/dist/data-display/index.js +5 -5
- package/dist/feedback/index.cjs.map +1 -1
- package/dist/feedback/index.js +2 -2
- package/dist/forms/index.cjs.map +1 -1
- package/dist/forms/index.js +8 -8
- package/dist/glass/index.cjs.map +1 -1
- package/dist/glass/index.js +2 -2
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +19 -19
- package/dist/layout/index.cjs.map +1 -1
- package/dist/layout/index.js +2 -2
- package/dist/navigation/index.cjs.map +1 -1
- package/dist/navigation/index.js +6 -6
- package/dist/overlays/index.cjs.map +1 -1
- package/dist/overlays/index.js +7 -7
- package/dist/reset.css +45 -45
- package/dist/tokens.css +11 -11
- package/dist/typography/index.cjs.map +1 -1
- package/dist/typography/index.js +4 -4
- package/llms.txt +3 -3
- package/package.json +166 -159
- package/scripts/postinstall.js +125 -0
- package/src/bento/BentoCard.tsx +140 -140
- package/src/bento/BentoGrid.tsx +50 -50
- package/src/bento/index.ts +2 -2
- package/src/bento/tokens.css +46 -46
- package/src/buttons/Button.tsx +104 -104
- package/src/buttons/ButtonGroup.tsx +43 -43
- package/src/buttons/IconButton.tsx +79 -79
- package/src/buttons/SplitButton.tsx +186 -186
- package/src/buttons/ToggleButton.tsx +157 -157
- package/src/buttons/index.ts +5 -5
- package/src/buttons/tokens.css +6 -6
- package/src/core/ThemeProvider.tsx +133 -133
- package/src/core/index.ts +2 -2
- package/src/core/tokens.css +134 -134
- package/src/data-display/Accordion.tsx +147 -147
- package/src/data-display/Avatar.tsx +134 -134
- package/src/data-display/Card.tsx +112 -112
- package/src/data-display/Chip.tsx +74 -74
- package/src/data-display/DataTablePro.tsx +534 -534
- package/src/data-display/StatCard.tsx +60 -60
- package/src/data-display/Table.tsx +74 -74
- package/src/data-display/Timeline.tsx +62 -62
- package/src/data-display/TreeView.tsx +279 -279
- package/src/data-display/tokens.css +4 -4
- package/src/feedback/Alert.tsx +80 -80
- package/src/feedback/EmptyState.tsx +45 -45
- package/src/feedback/Skeleton.tsx +66 -66
- package/src/feedback/Spinner.tsx +65 -65
- package/src/feedback/index.ts +5 -5
- package/src/feedback/tokens.css +4 -4
- package/src/forms/Checkbox.tsx +149 -149
- package/src/forms/CheckboxGroup.tsx +76 -76
- package/src/forms/Combobox.tsx +512 -512
- package/src/forms/DatePicker.tsx +784 -784
- package/src/forms/FileUpload.tsx +266 -266
- package/src/forms/FormField.tsx +115 -115
- package/src/forms/Input.tsx +151 -151
- package/src/forms/NumberInput.tsx +262 -262
- package/src/forms/PasswordInput.tsx +35 -35
- package/src/forms/PinInput.tsx +139 -139
- package/src/forms/Radio.tsx +142 -142
- package/src/forms/RangeSlider.tsx +237 -237
- package/src/forms/SearchInput.tsx +34 -34
- package/src/forms/Select.tsx +103 -103
- package/src/forms/Slider.tsx +85 -85
- package/src/forms/Textarea.tsx +114 -114
- package/src/forms/tokens.css +6 -6
- package/src/glass/GlassButton.tsx +59 -59
- package/src/glass/GlassCard.tsx +71 -71
- package/src/glass/index.ts +3 -3
- package/src/glass/tokens.css +81 -81
- package/src/index.ts +26 -26
- package/src/layout/AspectRatio.tsx +39 -39
- package/src/layout/Container.tsx +53 -53
- package/src/layout/Divider.tsx +61 -61
- package/src/layout/Flex.tsx +79 -79
- package/src/layout/Grid.tsx +124 -124
- package/src/layout/PageLayout.tsx +59 -59
- package/src/layout/Section.tsx +47 -47
- package/src/layout/Spacer.tsx +30 -30
- package/src/layout/Stack.tsx +88 -88
- package/src/layout/tokens.css +8 -8
- package/src/navigation/Breadcrumb.tsx +73 -73
- package/src/navigation/CommandPalette.tsx +142 -142
- package/src/navigation/DropdownMenu.tsx +244 -244
- package/src/navigation/Pagination.tsx +114 -114
- package/src/navigation/Stepper.tsx +93 -93
- package/src/navigation/Tabs.tsx +265 -265
- package/src/navigation/index.ts +6 -6
- package/src/navigation/tokens.css +4 -4
- package/src/overlays/AlertDialog.tsx +63 -63
- package/src/overlays/BottomSheet.tsx +143 -143
- package/src/overlays/ContextMenu.tsx +161 -161
- package/src/overlays/Drawer.tsx +160 -160
- package/src/overlays/FocusTrap.tsx +122 -122
- package/src/overlays/Modal.tsx +296 -296
- package/src/overlays/Popover.tsx +156 -156
- package/src/overlays/Portal.tsx +23 -23
- package/src/overlays/Toast.tsx +175 -175
- package/src/overlays/Tooltip.tsx +125 -125
- package/src/overlays/tokens.css +8 -8
- package/src/registry/components.ts +1368 -1368
- package/src/styles/components.css +39 -39
- package/src/styles/index.css +5 -5
- package/src/styles/reset.css +45 -45
- package/src/styles/tokens.css +11 -11
- package/src/typography/Blockquote.tsx +32 -32
- package/src/typography/Code.tsx +89 -89
- package/src/typography/Heading.tsx +56 -56
- package/src/typography/Kbd.tsx +25 -25
- package/src/typography/Label.tsx +47 -47
- package/src/typography/Link.tsx +56 -56
- package/src/typography/Text.tsx +62 -62
- package/src/typography/index.ts +7 -7
- package/src/typography/tokens.css +5 -5
- package/src/utils/cn.ts +6 -6
- package/src/utils/scroll-lock.ts +19 -19
- package/src/utils/useControllableState.ts +54 -54
- package/ui-contract.json +1 -1
- package/dist/chunk-2YJBW4E2.js.map +0 -1
- package/dist/chunk-4CRFNALF.js.map +0 -1
- package/dist/chunk-4MS6ZHFQ.js.map +0 -1
- package/dist/chunk-77KTYOMQ.js.map +0 -1
- package/dist/chunk-ADO3SVUA.js.map +0 -1
- package/dist/chunk-D7FB3TCA.js.map +0 -1
- package/dist/chunk-DSEL7ELZ.js.map +0 -1
- package/dist/chunk-EXFR2BFJ.js.map +0 -1
- package/dist/chunk-GXWB6BSY.js.map +0 -1
- package/dist/chunk-I2FQBMVW.js.map +0 -1
- package/dist/chunk-I5O2WCGF.js.map +0 -1
- package/dist/chunk-ME4XILG5.js.map +0 -1
- package/dist/chunk-PC5SZFZC.js.map +0 -1
- package/dist/chunk-S6XJMYME.js.map +0 -1
- package/dist/chunk-V52JOSDF.js.map +0 -1
- package/dist/chunk-W5WNWTQC.js.map +0 -1
- package/dist/chunk-YJ64RI7J.js.map +0 -1
- package/dist/chunk-YOCGBORV.js.map +0 -1
- package/dist/chunk-ZEDXARXW.js.map +0 -1
package/dist/tokens.css
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
@import "../core/tokens.css";
|
|
2
|
-
@import "../layout/tokens.css";
|
|
3
|
-
@import "../typography/tokens.css";
|
|
4
|
-
@import "../buttons/tokens.css";
|
|
5
|
-
@import "../forms/tokens.css";
|
|
6
|
-
@import "../overlays/tokens.css";
|
|
7
|
-
@import "../navigation/tokens.css";
|
|
8
|
-
@import "../data-display/tokens.css";
|
|
9
|
-
@import "../feedback/tokens.css";
|
|
10
|
-
@import "../glass/tokens.css";
|
|
11
|
-
@import "../bento/tokens.css";
|
|
1
|
+
@import "../core/tokens.css";
|
|
2
|
+
@import "../layout/tokens.css";
|
|
3
|
+
@import "../typography/tokens.css";
|
|
4
|
+
@import "../buttons/tokens.css";
|
|
5
|
+
@import "../forms/tokens.css";
|
|
6
|
+
@import "../overlays/tokens.css";
|
|
7
|
+
@import "../navigation/tokens.css";
|
|
8
|
+
@import "../data-display/tokens.css";
|
|
9
|
+
@import "../feedback/tokens.css";
|
|
10
|
+
@import "../glass/tokens.css";
|
|
11
|
+
@import "../bento/tokens.css";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/cn.ts","../../src/typography/Heading.tsx","../../src/typography/Text.tsx","../../src/typography/Label.tsx","../../src/typography/Link.tsx","../../src/typography/Code.tsx","../../src/typography/Blockquote.tsx","../../src/typography/Kbd.tsx"],"names":["twMerge","clsx","cva","forwardRef","jsx","jsxs","ExternalLink","useState","Fragment","Check","Copy"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, { forwardRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nexport const headingVariants = cva('font-bold tracking-tight text-[var(--ui-text-primary)]', {\n variants: {\n size: {\n h1: 'text-4xl sm:text-5xl lg:text-6xl font-extrabold tracking-tight',\n h2: 'text-3xl sm:text-4xl font-bold tracking-tight',\n h3: 'text-2xl sm:text-3xl font-bold tracking-tight',\n h4: 'text-xl sm:text-2xl font-semibold',\n h5: 'text-lg sm:text-xl font-semibold',\n h6: 'text-base sm:text-lg font-medium',\n },\n weight: {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n extrabold: 'font-extrabold',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n },\n },\n defaultVariants: {\n size: 'h2',\n align: 'left',\n },\n});\n\nexport interface HeadingProps\n extends React.HTMLAttributes<HTMLHeadingElement>,\n VariantProps<typeof headingVariants> {\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'div' | 'span';\n}\n\nexport const Heading = forwardRef<HTMLHeadingElement, HeadingProps>(\n ({ className, size = 'h2', weight, align, as, children, ...props }, ref) => {\n const Component = (as || size || 'h2') as React.ElementType;\n\n return (\n <Component\n ref={ref}\n className={cn(headingVariants({ size, weight, align }), className)}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nHeading.displayName = 'Heading';\n","import React, { forwardRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nexport const textVariants = cva('leading-relaxed', {\n variants: {\n variant: {\n body: 'text-base text-[var(--ui-text-primary)]',\n lead: 'text-lg sm:text-xl text-[var(--ui-text-secondary)] font-normal leading-relaxed',\n muted: 'text-sm text-[var(--ui-text-muted)]',\n small: 'text-xs text-[var(--ui-text-secondary)] font-normal',\n caption: 'text-xs text-[var(--ui-text-muted)] uppercase tracking-wider font-semibold',\n destructive: 'text-sm text-[var(--ui-error)] font-medium',\n success: 'text-sm text-[var(--ui-success)] font-medium',\n },\n weight: {\n light: 'font-light',\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n },\n align: {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n justify: 'text-justify',\n },\n truncate: {\n true: 'truncate',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'body',\n weight: 'normal',\n align: 'left',\n truncate: false,\n },\n});\n\nexport interface TextProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof textVariants> {\n as?: React.ElementType;\n}\n\nexport const Text = forwardRef<HTMLElement, TextProps>(\n ({ className, variant, weight, align, truncate, as: Component = 'p', children, ...props }, ref) => {\n return (\n <Component\n ref={ref}\n className={cn(textVariants({ variant, weight, align, truncate }), className)}\n {...props}\n >\n {children}\n </Component>\n );\n }\n);\n\nText.displayName = 'Text';\n","import React, { forwardRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nexport const labelVariants = cva(\n 'text-sm font-medium leading-none select-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 text-[var(--ui-text-primary)] inline-flex items-center gap-1',\n {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n error: {\n true: 'text-[var(--ui-error)]',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n error: false,\n },\n }\n);\n\nexport interface LabelProps\n extends React.LabelHTMLAttributes<HTMLLabelElement>,\n VariantProps<typeof labelVariants> {\n required?: boolean;\n}\n\nexport const Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, size, error, required, children, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={cn(labelVariants({ size, error }), className)}\n {...props}\n >\n {children}\n {required && <span className=\"text-[var(--ui-error)] ml-0.5\" aria-hidden=\"true\">*</span>}\n </label>\n );\n }\n);\n\nLabel.displayName = 'Label';\n","import React, { forwardRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ExternalLink } from 'lucide-react';\nimport { cn } from '../utils/cn';\n\nexport const linkVariants = cva(\n 'inline-flex items-center gap-1 font-medium transition-colors cursor-pointer text-[var(--ui-primary)] hover:text-[var(--ui-primary-hover)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)] rounded-sm',\n {\n variants: {\n underline: {\n always: 'underline underline-offset-4',\n hover: 'hover:underline underline-offset-4',\n none: 'no-underline',\n },\n variant: {\n primary: 'text-[var(--ui-primary)] hover:text-[var(--ui-primary-hover)]',\n secondary: 'text-[var(--ui-text-secondary)] hover:text-[var(--ui-text-primary)]',\n muted: 'text-[var(--ui-text-muted)] hover:text-[var(--ui-text-secondary)]',\n },\n },\n defaultVariants: {\n underline: 'hover',\n variant: 'primary',\n },\n }\n);\n\nexport interface LinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement>,\n VariantProps<typeof linkVariants> {\n external?: boolean;\n showExternalIcon?: boolean;\n}\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n ({ className, underline, variant, external, showExternalIcon = true, children, ...props }, ref) => {\n const isExternal = external ?? (props.href?.startsWith('http') || props.target === '_blank');\n\n return (\n <a\n ref={ref}\n target={isExternal ? '_blank' : props.target}\n rel={isExternal ? 'noopener noreferrer' : props.rel}\n className={cn(linkVariants({ underline, variant }), className)}\n {...props}\n >\n {children}\n {isExternal && showExternalIcon && (\n <ExternalLink className=\"w-3.5 h-3.5 opacity-70 inline-block ml-0.5 flex-shrink-0\" />\n )}\n </a>\n );\n }\n);\n\nLink.displayName = 'Link';\n","import React, { forwardRef, useState } from 'react';\nimport { Copy, Check } from 'lucide-react';\nimport { cn } from '../utils/cn';\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nexport const Code = forwardRef<HTMLElement, CodeProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <code\n ref={ref}\n className={cn(\n 'relative rounded bg-[var(--ui-bg-tertiary)] px-[0.35rem] py-[0.15rem] font-mono text-sm font-semibold text-[var(--ui-text-primary)] border border-[var(--ui-border-subtle)]',\n className\n )}\n {...props}\n >\n {children}\n </code>\n );\n }\n);\nCode.displayName = 'Code';\n\nexport interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {\n code: string;\n language?: string;\n copyable?: boolean;\n}\n\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\n ({ className, code, language = 'bash', copyable = true, ...props }, ref) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy text', err);\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'relative rounded-lg border border-[var(--ui-border-subtle)] bg-[var(--ui-bg-secondary)] overflow-hidden font-mono text-sm shadow-sm',\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-2 bg-[var(--ui-bg-tertiary)]/50 border-b border-[var(--ui-border-subtle)] text-xs text-[var(--ui-text-muted)] select-none\">\n <span className=\"font-semibold uppercase tracking-wider\">{language}</span>\n {copyable && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1 hover:text-[var(--ui-text-primary)] transition-colors p-1 rounded hover:bg-[var(--ui-bg-surface)]\"\n aria-label={copied ? 'Copied code' : 'Copy code to clipboard'}\n >\n {copied ? (\n <>\n <Check className=\"w-3.5 h-3.5 text-[var(--ui-success)]\" />\n <span className=\"text-[var(--ui-success)] text-[11px]\">Copied</span>\n </>\n ) : (\n <>\n <Copy className=\"w-3.5 h-3.5\" />\n <span className=\"text-[11px]\">Copy</span>\n </>\n )}\n </button>\n )}\n </div>\n\n {/* Code Content */}\n <pre className=\"p-4 overflow-x-auto text-[var(--ui-text-primary)] leading-relaxed\">\n <code>{code}</code>\n </pre>\n </div>\n );\n }\n);\nCodeBlock.displayName = 'CodeBlock';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface BlockquoteProps extends React.BlockquoteHTMLAttributes<HTMLQuoteElement> {\n citeAuthor?: string;\n citeSource?: string;\n}\n\nexport const Blockquote = forwardRef<HTMLQuoteElement, BlockquoteProps>(\n ({ className, citeAuthor, citeSource, children, ...props }, ref) => {\n return (\n <blockquote\n ref={ref}\n className={cn(\n 'mt-6 border-l-4 border-[var(--ui-primary)] pl-6 italic text-[var(--ui-text-secondary)] space-y-2',\n className\n )}\n {...props}\n >\n <div className=\"text-base sm:text-lg\">{children}</div>\n {(citeAuthor || citeSource) && (\n <footer className=\"not-italic text-xs font-semibold text-[var(--ui-text-muted)] tracking-wider\">\n {citeAuthor && <span>— {citeAuthor}</span>}\n {citeSource && <span className=\"opacity-75 ml-1\">({citeSource})</span>}\n </footer>\n )}\n </blockquote>\n );\n }\n);\n\nBlockquote.displayName = 'Blockquote';\n","import React, { forwardRef } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <kbd\n ref={ref}\n className={cn(\n 'pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border border-[var(--ui-border-default)] bg-[var(--ui-bg-tertiary)] px-1.5 font-mono text-[10px] font-semibold text-[var(--ui-text-muted)] opacity-100 shadow-sm',\n className\n )}\n {...props}\n >\n {children}\n </kbd>\n );\n }\n);\n\nKbd.displayName = 'Kbd';\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/typography/Heading.tsx","../../src/typography/Text.tsx","../../src/typography/Label.tsx","../../src/typography/Link.tsx","../../src/typography/Code.tsx","../../src/typography/Blockquote.tsx","../../src/typography/Kbd.tsx"],"names":["twMerge","clsx","cva","forwardRef","jsx","jsxs","ExternalLink","useState","Fragment","Check","Copy"],"mappings":";;;;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACDO,IAAM,eAAA,GAAkBC,2BAAI,wDAAA,EAA0D;AAAA,EAC3F,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,gEAAA;AAAA,MACJ,EAAA,EAAI,+CAAA;AAAA,MACJ,EAAA,EAAI,+CAAA;AAAA,MACJ,EAAA,EAAI,mCAAA;AAAA,MACJ,EAAA,EAAI,kCAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ,aAAA;AAAA,MACR,QAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAM,WAAA;AAAA,MACN,SAAA,EAAW;AAAA,KACb;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEX,CAAC;AAQM,IAAM,OAAA,GAAUC,gBAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,EAAA,EAAI,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC1E,IAAA,MAAM,SAAA,GAAa,MAAM,IAAA,IAAQ,IAAA;AAEjC,IAAA,uBACEC,cAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,GAAG,eAAA,CAAgB,EAAE,MAAM,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA;AAAA,QAChE,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,OAAA,CAAQ,WAAA,GAAc,SAAA;ACnDf,IAAM,YAAA,GAAeF,2BAAI,iBAAA,EAAmB;AAAA,EACjD,QAAA,EAAU;AAAA,IACR,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,yCAAA;AAAA,MACN,IAAA,EAAM,gFAAA;AAAA,MACN,KAAA,EAAO,qCAAA;AAAA,MACP,KAAA,EAAO,qDAAA;AAAA,MACP,OAAA,EAAS,4EAAA;AAAA,MACT,WAAA,EAAa,4CAAA;AAAA,MACb,OAAA,EAAS;AAAA,KACX;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,YAAA;AAAA,MACP,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ,aAAA;AAAA,MACR,QAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACR;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO,YAAA;AAAA,MACP,OAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,MAAA;AAAA,IACT,MAAA,EAAQ,QAAA;AAAA,IACR,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU;AAAA;AAEd,CAAC;AAQM,IAAM,IAAA,GAAOC,gBAAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,QAAQ,KAAA,EAAO,QAAA,EAAU,EAAA,EAAI,SAAA,GAAY,GAAA,EAAK,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AACjG,IAAA,uBACEC,cAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,YAAA,CAAa,EAAE,OAAA,EAAS,QAAQ,KAAA,EAAO,QAAA,EAAU,CAAA,EAAG,SAAS,CAAA;AAAA,QAC1E,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;ACzDZ,IAAM,aAAA,GAAgBF,0BAAAA;AAAA,EAC3B,qKAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,wBAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT;AAEJ;AAQO,IAAM,KAAA,GAAQC,gBAAAA;AAAA,EACnB,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,UAAU,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACjE,IAAA,uBACEE,eAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,GAAG,aAAA,CAAc,EAAE,MAAM,KAAA,EAAO,GAAG,SAAS,CAAA;AAAA,QACtD,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,QAAA,oBAAYD,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,aAAA,EAAY,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA;AAAA;AAAA,KACnF;AAAA,EAEJ;AACF;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;ACzCb,IAAM,YAAA,GAAeF,0BAAAA;AAAA,EAC1B,6OAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,SAAA,EAAW;AAAA,QACT,MAAA,EAAQ,8BAAA;AAAA,QACR,KAAA,EAAO,oCAAA;AAAA,QACP,IAAA,EAAM;AAAA,OACR;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,+DAAA;AAAA,QACT,SAAA,EAAW,qEAAA;AAAA,QACX,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,SAAA,EAAW,OAAA;AAAA,MACX,OAAA,EAAS;AAAA;AACX;AAEJ;AASO,IAAM,IAAA,GAAOC,gBAAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,SAAA,EAAW,OAAA,EAAS,QAAA,EAAU,gBAAA,GAAmB,IAAA,EAAM,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACjG,IAAA,MAAM,UAAA,GAAa,aAAa,KAAA,CAAM,IAAA,EAAM,WAAW,MAAM,CAAA,IAAK,MAAM,MAAA,KAAW,QAAA,CAAA;AAEnF,IAAA,uBACEE,eAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,MAAA,EAAQ,UAAA,GAAa,QAAA,GAAW,KAAA,CAAM,MAAA;AAAA,QACtC,GAAA,EAAK,UAAA,GAAa,qBAAA,GAAwB,KAAA,CAAM,GAAA;AAAA,QAChD,SAAA,EAAW,GAAG,YAAA,CAAa,EAAE,WAAW,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,QAC5D,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,cAAc,gBAAA,oBACbD,cAAAA,CAACE,wBAAA,EAAA,EAAa,WAAU,0DAAA,EAA2D;AAAA;AAAA;AAAA,KAEvF;AAAA,EAEJ;AACF;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AC/CZ,IAAM,IAAA,GAAOH,gBAAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEC,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,6KAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAQZ,IAAM,SAAA,GAAYD,gBAAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,QAAA,GAAW,MAAA,EAAQ,QAAA,GAAW,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC1E,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAII,eAAS,KAAK,CAAA;AAE1C,IAAA,MAAM,aAAa,YAAY;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA;AACxC,QAAA,SAAA,CAAU,IAAI,CAAA;AACd,QAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,MACzC,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,uBAAuB,GAAG,CAAA;AAAA,MAC1C;AAAA,IACF,CAAA;AAEA,IAAA,uBACEF,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,qIAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAGJ,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qKAAA,EACb,QAAA,EAAA;AAAA,4BAAAD,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,YAClE,4BACCA,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,UAAA;AAAA,gBACT,SAAA,EAAU,2HAAA;AAAA,gBACV,YAAA,EAAY,SAAS,aAAA,GAAgB,wBAAA;AAAA,gBAEpC,QAAA,EAAA,MAAA,mBACCC,eAAAA,CAAAG,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAAJ,cAAAA,CAACK,iBAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,kCACxDL,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAuC,QAAA,EAAA,QAAA,EAAM;AAAA,iBAAA,EAC/D,CAAA,mBAEAC,eAAAA,CAAAG,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAAJ,cAAAA,CAACM,gBAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,kCAC9BN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAc,QAAA,EAAA,MAAA,EAAI;AAAA,iBAAA,EACpC;AAAA;AAAA;AAEJ,WAAA,EAEJ,CAAA;AAAA,0BAGAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qEACb,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,EAAK,CAAA,EACd;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA;AChFjB,IAAM,UAAA,GAAaD,gBAAAA;AAAA,EACxB,CAAC,EAAE,SAAA,EAAW,UAAA,EAAY,YAAY,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAClE,IAAA,uBACEE,eAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,kGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAwB,QAAA,EAAS,CAAA;AAAA,UAAA,CAC9C,cAAc,UAAA,qBACdC,eAAAA,CAAC,QAAA,EAAA,EAAO,WAAU,6EAAA,EACf,QAAA,EAAA;AAAA,YAAA,UAAA,oBAAcA,gBAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,cAAA,SAAA;AAAA,cAAG;AAAA,aAAA,EAAW,CAAA;AAAA,YAClC,UAAA,oBAAcA,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iBAAA,EAAkB,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAAE,UAAA;AAAA,cAAW;AAAA,aAAA,EAAC;AAAA,WAAA,EACjE;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;ACxBlB,IAAM,GAAA,GAAMF,gBAAAA;AAAA,EACjB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEC,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,6OAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,GAAA,CAAI,WAAA,GAAc,KAAA","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n","import React, { forwardRef } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport const headingVariants = cva('font-bold tracking-tight text-[var(--ui-text-primary)]', {\r\n variants: {\r\n size: {\r\n h1: 'text-4xl sm:text-5xl lg:text-6xl font-extrabold tracking-tight',\r\n h2: 'text-3xl sm:text-4xl font-bold tracking-tight',\r\n h3: 'text-2xl sm:text-3xl font-bold tracking-tight',\r\n h4: 'text-xl sm:text-2xl font-semibold',\r\n h5: 'text-lg sm:text-xl font-semibold',\r\n h6: 'text-base sm:text-lg font-medium',\r\n },\r\n weight: {\r\n normal: 'font-normal',\r\n medium: 'font-medium',\r\n semibold: 'font-semibold',\r\n bold: 'font-bold',\r\n extrabold: 'font-extrabold',\r\n },\r\n align: {\r\n left: 'text-left',\r\n center: 'text-center',\r\n right: 'text-right',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'h2',\r\n align: 'left',\r\n },\r\n});\r\n\r\nexport interface HeadingProps\r\n extends React.HTMLAttributes<HTMLHeadingElement>,\r\n VariantProps<typeof headingVariants> {\r\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'div' | 'span';\r\n}\r\n\r\nexport const Heading = forwardRef<HTMLHeadingElement, HeadingProps>(\r\n ({ className, size = 'h2', weight, align, as, children, ...props }, ref) => {\r\n const Component = (as || size || 'h2') as React.ElementType;\r\n\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cn(headingVariants({ size, weight, align }), className)}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n }\r\n);\r\n\r\nHeading.displayName = 'Heading';\r\n","import React, { forwardRef } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport const textVariants = cva('leading-relaxed', {\r\n variants: {\r\n variant: {\r\n body: 'text-base text-[var(--ui-text-primary)]',\r\n lead: 'text-lg sm:text-xl text-[var(--ui-text-secondary)] font-normal leading-relaxed',\r\n muted: 'text-sm text-[var(--ui-text-muted)]',\r\n small: 'text-xs text-[var(--ui-text-secondary)] font-normal',\r\n caption: 'text-xs text-[var(--ui-text-muted)] uppercase tracking-wider font-semibold',\r\n destructive: 'text-sm text-[var(--ui-error)] font-medium',\r\n success: 'text-sm text-[var(--ui-success)] font-medium',\r\n },\r\n weight: {\r\n light: 'font-light',\r\n normal: 'font-normal',\r\n medium: 'font-medium',\r\n semibold: 'font-semibold',\r\n bold: 'font-bold',\r\n },\r\n align: {\r\n left: 'text-left',\r\n center: 'text-center',\r\n right: 'text-right',\r\n justify: 'text-justify',\r\n },\r\n truncate: {\r\n true: 'truncate',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'body',\r\n weight: 'normal',\r\n align: 'left',\r\n truncate: false,\r\n },\r\n});\r\n\r\nexport interface TextProps\r\n extends React.HTMLAttributes<HTMLElement>,\r\n VariantProps<typeof textVariants> {\r\n as?: React.ElementType;\r\n}\r\n\r\nexport const Text = forwardRef<HTMLElement, TextProps>(\r\n ({ className, variant, weight, align, truncate, as: Component = 'p', children, ...props }, ref) => {\r\n return (\r\n <Component\r\n ref={ref}\r\n className={cn(textVariants({ variant, weight, align, truncate }), className)}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n }\r\n);\r\n\r\nText.displayName = 'Text';\r\n","import React, { forwardRef } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport const labelVariants = cva(\r\n 'text-sm font-medium leading-none select-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 text-[var(--ui-text-primary)] inline-flex items-center gap-1',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'text-xs',\r\n md: 'text-sm',\r\n lg: 'text-base',\r\n },\r\n error: {\r\n true: 'text-[var(--ui-error)]',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n error: false,\r\n },\r\n }\r\n);\r\n\r\nexport interface LabelProps\r\n extends React.LabelHTMLAttributes<HTMLLabelElement>,\r\n VariantProps<typeof labelVariants> {\r\n required?: boolean;\r\n}\r\n\r\nexport const Label = forwardRef<HTMLLabelElement, LabelProps>(\r\n ({ className, size, error, required, children, ...props }, ref) => {\r\n return (\r\n <label\r\n ref={ref}\r\n className={cn(labelVariants({ size, error }), className)}\r\n {...props}\r\n >\r\n {children}\r\n {required && <span className=\"text-[var(--ui-error)] ml-0.5\" aria-hidden=\"true\">*</span>}\r\n </label>\r\n );\r\n }\r\n);\r\n\r\nLabel.displayName = 'Label';\r\n","import React, { forwardRef } from 'react';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { ExternalLink } from 'lucide-react';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport const linkVariants = cva(\r\n 'inline-flex items-center gap-1 font-medium transition-colors cursor-pointer text-[var(--ui-primary)] hover:text-[var(--ui-primary-hover)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ui-primary)] rounded-sm',\r\n {\r\n variants: {\r\n underline: {\r\n always: 'underline underline-offset-4',\r\n hover: 'hover:underline underline-offset-4',\r\n none: 'no-underline',\r\n },\r\n variant: {\r\n primary: 'text-[var(--ui-primary)] hover:text-[var(--ui-primary-hover)]',\r\n secondary: 'text-[var(--ui-text-secondary)] hover:text-[var(--ui-text-primary)]',\r\n muted: 'text-[var(--ui-text-muted)] hover:text-[var(--ui-text-secondary)]',\r\n },\r\n },\r\n defaultVariants: {\r\n underline: 'hover',\r\n variant: 'primary',\r\n },\r\n }\r\n);\r\n\r\nexport interface LinkProps\r\n extends React.AnchorHTMLAttributes<HTMLAnchorElement>,\r\n VariantProps<typeof linkVariants> {\r\n external?: boolean;\r\n showExternalIcon?: boolean;\r\n}\r\n\r\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\r\n ({ className, underline, variant, external, showExternalIcon = true, children, ...props }, ref) => {\r\n const isExternal = external ?? (props.href?.startsWith('http') || props.target === '_blank');\r\n\r\n return (\r\n <a\r\n ref={ref}\r\n target={isExternal ? '_blank' : props.target}\r\n rel={isExternal ? 'noopener noreferrer' : props.rel}\r\n className={cn(linkVariants({ underline, variant }), className)}\r\n {...props}\r\n >\r\n {children}\r\n {isExternal && showExternalIcon && (\r\n <ExternalLink className=\"w-3.5 h-3.5 opacity-70 inline-block ml-0.5 flex-shrink-0\" />\r\n )}\r\n </a>\r\n );\r\n }\r\n);\r\n\r\nLink.displayName = 'Link';\r\n","import React, { forwardRef, useState } from 'react';\r\nimport { Copy, Check } from 'lucide-react';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport interface CodeProps extends React.HTMLAttributes<HTMLElement> {\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const Code = forwardRef<HTMLElement, CodeProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <code\r\n ref={ref}\r\n className={cn(\r\n 'relative rounded bg-[var(--ui-bg-tertiary)] px-[0.35rem] py-[0.15rem] font-mono text-sm font-semibold text-[var(--ui-text-primary)] border border-[var(--ui-border-subtle)]',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </code>\r\n );\r\n }\r\n);\r\nCode.displayName = 'Code';\r\n\r\nexport interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {\r\n code: string;\r\n language?: string;\r\n copyable?: boolean;\r\n}\r\n\r\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\r\n ({ className, code, language = 'bash', copyable = true, ...props }, ref) => {\r\n const [copied, setCopied] = useState(false);\r\n\r\n const handleCopy = async () => {\r\n try {\r\n await navigator.clipboard.writeText(code);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy text', err);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n 'relative rounded-lg border border-[var(--ui-border-subtle)] bg-[var(--ui-bg-secondary)] overflow-hidden font-mono text-sm shadow-sm',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between px-4 py-2 bg-[var(--ui-bg-tertiary)]/50 border-b border-[var(--ui-border-subtle)] text-xs text-[var(--ui-text-muted)] select-none\">\r\n <span className=\"font-semibold uppercase tracking-wider\">{language}</span>\r\n {copyable && (\r\n <button\r\n type=\"button\"\r\n onClick={handleCopy}\r\n className=\"flex items-center gap-1 hover:text-[var(--ui-text-primary)] transition-colors p-1 rounded hover:bg-[var(--ui-bg-surface)]\"\r\n aria-label={copied ? 'Copied code' : 'Copy code to clipboard'}\r\n >\r\n {copied ? (\r\n <>\r\n <Check className=\"w-3.5 h-3.5 text-[var(--ui-success)]\" />\r\n <span className=\"text-[var(--ui-success)] text-[11px]\">Copied</span>\r\n </>\r\n ) : (\r\n <>\r\n <Copy className=\"w-3.5 h-3.5\" />\r\n <span className=\"text-[11px]\">Copy</span>\r\n </>\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n\r\n {/* Code Content */}\r\n <pre className=\"p-4 overflow-x-auto text-[var(--ui-text-primary)] leading-relaxed\">\r\n <code>{code}</code>\r\n </pre>\r\n </div>\r\n );\r\n }\r\n);\r\nCodeBlock.displayName = 'CodeBlock';\r\n","import React, { forwardRef } from 'react';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport interface BlockquoteProps extends React.BlockquoteHTMLAttributes<HTMLQuoteElement> {\r\n citeAuthor?: string;\r\n citeSource?: string;\r\n}\r\n\r\nexport const Blockquote = forwardRef<HTMLQuoteElement, BlockquoteProps>(\r\n ({ className, citeAuthor, citeSource, children, ...props }, ref) => {\r\n return (\r\n <blockquote\r\n ref={ref}\r\n className={cn(\r\n 'mt-6 border-l-4 border-[var(--ui-primary)] pl-6 italic text-[var(--ui-text-secondary)] space-y-2',\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className=\"text-base sm:text-lg\">{children}</div>\r\n {(citeAuthor || citeSource) && (\r\n <footer className=\"not-italic text-xs font-semibold text-[var(--ui-text-muted)] tracking-wider\">\r\n {citeAuthor && <span>— {citeAuthor}</span>}\r\n {citeSource && <span className=\"opacity-75 ml-1\">({citeSource})</span>}\r\n </footer>\r\n )}\r\n </blockquote>\r\n );\r\n }\r\n);\r\n\r\nBlockquote.displayName = 'Blockquote';\r\n","import React, { forwardRef } from 'react';\r\nimport { cn } from '../utils/cn';\r\n\r\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(\r\n ({ className, children, ...props }, ref) => {\r\n return (\r\n <kbd\r\n ref={ref}\r\n className={cn(\r\n 'pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border border-[var(--ui-border-default)] bg-[var(--ui-bg-tertiary)] px-1.5 font-mono text-[10px] font-semibold text-[var(--ui-text-muted)] opacity-100 shadow-sm',\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </kbd>\r\n );\r\n }\r\n);\r\n\r\nKbd.displayName = 'Kbd';\r\n"]}
|
package/dist/typography/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { Blockquote, Code, CodeBlock, Heading, Link, Text, headingVariants, linkVariants, textVariants } from '../chunk-
|
|
2
|
-
export { Label, labelVariants } from '../chunk-
|
|
3
|
-
export { Kbd } from '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
export { Blockquote, Code, CodeBlock, Heading, Link, Text, headingVariants, linkVariants, textVariants } from '../chunk-ATYGDTMK.js';
|
|
2
|
+
export { Label, labelVariants } from '../chunk-GXI2H5XA.js';
|
|
3
|
+
export { Kbd } from '../chunk-EU2LPUYP.js';
|
|
4
|
+
import '../chunk-4S6L5V7X.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
package/llms.txt
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @thangnqdev/ui — Full Architecture Component System Contract
|
|
2
2
|
|
|
3
3
|
> Machine-readable specification for AI Coding Agents (Claude Code, Antigravity, Cursor, Qwen, Codex).
|
|
4
|
-
> Package: `@thangnqdev/ui` (v0.2.
|
|
4
|
+
> Package: `@thangnqdev/ui` (v0.2.2)
|
|
5
5
|
> Total Registered SSOT Components: 145
|
|
6
6
|
> Aesthetic Core: Spatial Optics, Editorial Bento, and Enterprise-grade Accessible Primitives.
|
|
7
7
|
> Sub-module Exports: `core`, `layout`, `typography`, `buttons`, `forms`, `overlays`, `navigation`, `data-display`, `feedback`, `glass`, `bento`.
|
|
@@ -34,7 +34,7 @@ import { BentoGrid, BentoCard } from '@thangnqdev/ui/bento';
|
|
|
34
34
|
## 2. Component Taxonomy & API Signatures
|
|
35
35
|
|
|
36
36
|
### Core & Context (`@thangnqdev/ui/core`)
|
|
37
|
-
- `ThemeProvider` [Foundation | stable | A11y: native | Props: {"defaultTheme":"'dark' | 'light' | 'system'","storageKey":"string","children":"ReactNode"}]: System-aware dark/light theme context provider with localStorage synchronization.
|
|
37
|
+
- `ThemeProvider` [Foundation | stable | A11y: native | Props: {"defaultTheme":"'dark' | 'light' | 'system' (default: 'light')","storageKey":"string","children":"ReactNode"}]: System-aware dark/light theme context provider with a light default and localStorage synchronization.
|
|
38
38
|
- `useTheme` [Foundation | stable | A11y: native]: Hook returning theme state, resolved theme, and setter functions.
|
|
39
39
|
- `cn` [Foundation | stable | A11y: native]: Tailwind CSS class merging utility combining clsx and tailwind-merge.
|
|
40
40
|
|
|
@@ -204,7 +204,7 @@ import { BentoGrid, BentoCard } from '@thangnqdev/ui/bento';
|
|
|
204
204
|
|
|
205
205
|
## 3. Strict Development Rules for AI Agents
|
|
206
206
|
|
|
207
|
-
1. **Design Tokens &
|
|
207
|
+
1. **Design Tokens & Light Default**: Always use CSS variables (`var(--ui-primary)`, `var(--ui-bg-surface)`, `var(--ui-text-primary)`, `var(--ui-border-default)`). Wrap apps in `ThemeProvider`; its default theme is `light`, while dark and system themes remain supported.
|
|
208
208
|
2. **Glass & Bento Aesthetics**: Apply `backdrop-blur`, high-precision borders (`border-[var(--ui-border-default)]`), and optical shadows.
|
|
209
209
|
3. **Compound Architecture**: Always export subcomponents alongside parent roots (`Tabs` + `TabsList` + `TabsTrigger` + `TabsContent`, `Modal` + `ModalOverlay` + `ModalContent` + `ModalHeader` + `ModalBody` + `ModalFooter`).
|
|
210
210
|
4. **Controlled & Uncontrolled Support**: Interactive inputs must support both controlled (`value`/`checked`) and uncontrolled (`defaultValue`/`defaultChecked`) patterns via `useControllableState`.
|
package/package.json
CHANGED
|
@@ -1,160 +1,167 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@thangnqdev/ui",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "Spatial Optics & Editorial Bento UI System with Machine-Readable AI Contracts",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"author": "thangnqdev",
|
|
8
|
-
"keywords": [
|
|
9
|
-
"react",
|
|
10
|
-
"ui",
|
|
11
|
-
"design-system",
|
|
12
|
-
"tailwind",
|
|
13
|
-
"spatial-optics",
|
|
14
|
-
"bento",
|
|
15
|
-
"accessibility",
|
|
16
|
-
"wcag",
|
|
17
|
-
"ssot",
|
|
18
|
-
"enterprise"
|
|
19
|
-
],
|
|
20
|
-
"engines": {
|
|
21
|
-
"node": ">=20.0.0"
|
|
1
|
+
{
|
|
2
|
+
"name": "@thangnqdev/ui",
|
|
3
|
+
"version": "0.2.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Spatial Optics & Editorial Bento UI System with Machine-Readable AI Contracts",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "thangnqdev",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"react",
|
|
10
|
+
"ui",
|
|
11
|
+
"design-system",
|
|
12
|
+
"tailwind",
|
|
13
|
+
"spatial-optics",
|
|
14
|
+
"bento",
|
|
15
|
+
"accessibility",
|
|
16
|
+
"wcag",
|
|
17
|
+
"ssot",
|
|
18
|
+
"enterprise"
|
|
19
|
+
],
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=20.0.0"
|
|
22
|
+
},
|
|
23
|
+
"sideEffects": [
|
|
24
|
+
"*.css",
|
|
25
|
+
"**/*.css"
|
|
26
|
+
],
|
|
27
|
+
"main": "./dist/index.cjs",
|
|
28
|
+
"module": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js",
|
|
34
|
+
"require": "./dist/index.cjs"
|
|
35
|
+
},
|
|
36
|
+
"./core": {
|
|
37
|
+
"types": "./dist/core/index.d.ts",
|
|
38
|
+
"import": "./dist/core/index.js",
|
|
39
|
+
"require": "./dist/core/index.cjs"
|
|
40
|
+
},
|
|
41
|
+
"./layout": {
|
|
42
|
+
"types": "./dist/layout/index.d.ts",
|
|
43
|
+
"import": "./dist/layout/index.js",
|
|
44
|
+
"require": "./dist/layout/index.cjs"
|
|
45
|
+
},
|
|
46
|
+
"./typography": {
|
|
47
|
+
"types": "./dist/typography/index.d.ts",
|
|
48
|
+
"import": "./dist/typography/index.js",
|
|
49
|
+
"require": "./dist/typography/index.cjs"
|
|
50
|
+
},
|
|
51
|
+
"./buttons": {
|
|
52
|
+
"types": "./dist/buttons/index.d.ts",
|
|
53
|
+
"import": "./dist/buttons/index.js",
|
|
54
|
+
"require": "./dist/buttons/index.cjs"
|
|
55
|
+
},
|
|
56
|
+
"./forms": {
|
|
57
|
+
"types": "./dist/forms/index.d.ts",
|
|
58
|
+
"import": "./dist/forms/index.js",
|
|
59
|
+
"require": "./dist/forms/index.cjs"
|
|
60
|
+
},
|
|
61
|
+
"./overlays": {
|
|
62
|
+
"types": "./dist/overlays/index.d.ts",
|
|
63
|
+
"import": "./dist/overlays/index.js",
|
|
64
|
+
"require": "./dist/overlays/index.cjs"
|
|
65
|
+
},
|
|
66
|
+
"./navigation": {
|
|
67
|
+
"types": "./dist/navigation/index.d.ts",
|
|
68
|
+
"import": "./dist/navigation/index.js",
|
|
69
|
+
"require": "./dist/navigation/index.cjs"
|
|
70
|
+
},
|
|
71
|
+
"./data-display": {
|
|
72
|
+
"types": "./dist/data-display/index.d.ts",
|
|
73
|
+
"import": "./dist/data-display/index.js",
|
|
74
|
+
"require": "./dist/data-display/index.cjs"
|
|
75
|
+
},
|
|
76
|
+
"./feedback": {
|
|
77
|
+
"types": "./dist/feedback/index.d.ts",
|
|
78
|
+
"import": "./dist/feedback/index.js",
|
|
79
|
+
"require": "./dist/feedback/index.cjs"
|
|
80
|
+
},
|
|
81
|
+
"./glass": {
|
|
82
|
+
"types": "./dist/glass/index.d.ts",
|
|
83
|
+
"import": "./dist/glass/index.js",
|
|
84
|
+
"require": "./dist/glass/index.cjs"
|
|
85
|
+
},
|
|
86
|
+
"./bento": {
|
|
87
|
+
"types": "./dist/bento/index.d.ts",
|
|
88
|
+
"import": "./dist/bento/index.js",
|
|
89
|
+
"require": "./dist/bento/index.cjs"
|
|
90
|
+
},
|
|
91
|
+
"./styles.css": "./dist/styles.css",
|
|
92
|
+
"./tokens.css": "./dist/tokens.css",
|
|
93
|
+
"./components.css": "./dist/components.css",
|
|
94
|
+
"./reset.css": "./dist/reset.css",
|
|
95
|
+
"./core/styles.css": "./dist/core/styles.css",
|
|
96
|
+
"./layout/styles.css": "./dist/layout/styles.css",
|
|
97
|
+
"./typography/styles.css": "./dist/typography/styles.css",
|
|
98
|
+
"./buttons/styles.css": "./dist/buttons/styles.css",
|
|
99
|
+
"./forms/styles.css": "./dist/forms/styles.css",
|
|
100
|
+
"./overlays/styles.css": "./dist/overlays/styles.css",
|
|
101
|
+
"./navigation/styles.css": "./dist/navigation/styles.css",
|
|
102
|
+
"./data-display/styles.css": "./dist/data-display/styles.css",
|
|
103
|
+
"./feedback/styles.css": "./dist/feedback/styles.css",
|
|
104
|
+
"./glass/styles.css": "./dist/glass/styles.css",
|
|
105
|
+
"./bento/styles.css": "./dist/bento/styles.css"
|
|
106
|
+
},
|
|
107
|
+
"bin": {
|
|
108
|
+
"ui": "bin/cli.js",
|
|
109
|
+
"aether-ui": "bin/cli.js"
|
|
22
110
|
},
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
},
|
|
81
|
-
"./glass": {
|
|
82
|
-
"types": "./dist/glass/index.d.ts",
|
|
83
|
-
"import": "./dist/glass/index.js",
|
|
84
|
-
"require": "./dist/glass/index.cjs"
|
|
85
|
-
},
|
|
86
|
-
"./bento": {
|
|
87
|
-
"types": "./dist/bento/index.d.ts",
|
|
88
|
-
"import": "./dist/bento/index.js",
|
|
89
|
-
"require": "./dist/bento/index.cjs"
|
|
90
|
-
},
|
|
91
|
-
"./styles.css": "./dist/styles.css",
|
|
92
|
-
"./tokens.css": "./dist/tokens.css",
|
|
93
|
-
"./components.css": "./dist/components.css",
|
|
94
|
-
"./reset.css": "./dist/reset.css",
|
|
95
|
-
"./core/styles.css": "./dist/core/styles.css",
|
|
96
|
-
"./layout/styles.css": "./dist/layout/styles.css",
|
|
97
|
-
"./typography/styles.css": "./dist/typography/styles.css",
|
|
98
|
-
"./buttons/styles.css": "./dist/buttons/styles.css",
|
|
99
|
-
"./forms/styles.css": "./dist/forms/styles.css",
|
|
100
|
-
"./overlays/styles.css": "./dist/overlays/styles.css",
|
|
101
|
-
"./navigation/styles.css": "./dist/navigation/styles.css",
|
|
102
|
-
"./data-display/styles.css": "./dist/data-display/styles.css",
|
|
103
|
-
"./feedback/styles.css": "./dist/feedback/styles.css",
|
|
104
|
-
"./glass/styles.css": "./dist/glass/styles.css",
|
|
105
|
-
"./bento/styles.css": "./dist/bento/styles.css"
|
|
106
|
-
},
|
|
107
|
-
"files": [
|
|
108
|
-
"dist",
|
|
109
|
-
"src",
|
|
110
|
-
"llms.txt",
|
|
111
|
-
"ui-contract.json",
|
|
112
|
-
"LICENSE"
|
|
113
|
-
],
|
|
114
|
-
"scripts": {
|
|
115
|
-
"dev": "vite",
|
|
116
|
-
"build:manifests": "node scripts/generate-manifests.js",
|
|
117
|
-
"build:css": "node scripts/build-css.js",
|
|
118
|
-
"build:ts": "tsup",
|
|
119
|
-
"build": "node scripts/generate-manifests.js && tsup && node scripts/build-css.js",
|
|
120
|
-
"build:lib": "node scripts/generate-manifests.js && tsup && node scripts/build-css.js",
|
|
121
|
-
"watch:lib": "tsup --watch",
|
|
122
|
-
"typecheck": "tsc --noEmit",
|
|
123
|
-
"test": "vitest run",
|
|
124
|
-
"test:ssot": "vitest run tests/ssot-invariant.test.ts",
|
|
125
|
-
"test:a11y": "vitest run tests/a11y-enhanced.test.tsx tests/axe-automated.test.tsx tests/navigation-a11y.test.tsx",
|
|
126
|
-
"test:ssr": "vitest run tests/ssr.test.tsx",
|
|
127
|
-
"prepack": "npm run typecheck && npm test && npm run build",
|
|
128
|
-
"preview": "vite preview"
|
|
129
|
-
},
|
|
130
|
-
"peerDependencies": {
|
|
131
|
-
"react": "^18.0.0 || ^19.0.0",
|
|
132
|
-
"react-dom": "^18.0.0 || ^19.0.0"
|
|
133
|
-
},
|
|
134
|
-
"dependencies": {
|
|
135
|
-
"class-variance-authority": "^0.7.1",
|
|
136
|
-
"clsx": "^2.1.1",
|
|
137
|
-
"lucide-react": "^1.16.0",
|
|
138
|
-
"tailwind-merge": "^3.0.2"
|
|
139
|
-
},
|
|
140
|
-
"devDependencies": {
|
|
141
|
-
"@tailwindcss/cli": "^4.3.3",
|
|
142
|
-
"@tailwindcss/vite": "^4.3.3",
|
|
143
|
-
"@testing-library/dom": "^10.4.1",
|
|
144
|
-
"@testing-library/jest-dom": "^7.0.1",
|
|
145
|
-
"@testing-library/react": "^16.3.2",
|
|
146
|
-
"@types/node": "^26.2.0",
|
|
147
|
-
"@types/react": "^19.0.0",
|
|
148
|
-
"@types/react-dom": "^19.0.0",
|
|
149
|
-
"@vitejs/plugin-react": "^6.0.5",
|
|
150
|
-
"axe-core": "^4.13.0",
|
|
151
|
-
"jsdom": "^30.0.1",
|
|
152
|
-
"react": "^19.0.0",
|
|
153
|
-
"react-dom": "^19.0.0",
|
|
154
|
-
"tailwindcss": "^4.3.3",
|
|
155
|
-
"tsup": "^8.3.6",
|
|
156
|
-
"typescript": "^5.7.3",
|
|
157
|
-
"vite": "^8.2.1",
|
|
158
|
-
"vitest": "^3.0.7"
|
|
159
|
-
}
|
|
160
|
-
}
|
|
111
|
+
"files": [
|
|
112
|
+
"dist",
|
|
113
|
+
"src",
|
|
114
|
+
"bin",
|
|
115
|
+
"scripts/postinstall.js",
|
|
116
|
+
"llms.txt",
|
|
117
|
+
"ui-contract.json",
|
|
118
|
+
"LICENSE"
|
|
119
|
+
],
|
|
120
|
+
"scripts": {
|
|
121
|
+
"dev": "vite",
|
|
122
|
+
"postinstall": "node scripts/postinstall.js",
|
|
123
|
+
"build:manifests": "node scripts/generate-manifests.js",
|
|
124
|
+
"build:css": "node scripts/build-css.js",
|
|
125
|
+
"build:ts": "tsup",
|
|
126
|
+
"build": "node scripts/generate-manifests.js && tsup && node scripts/build-css.js",
|
|
127
|
+
"build:lib": "node scripts/generate-manifests.js && tsup && node scripts/build-css.js",
|
|
128
|
+
"watch:lib": "tsup --watch",
|
|
129
|
+
"typecheck": "tsc --noEmit",
|
|
130
|
+
"test": "vitest run",
|
|
131
|
+
"test:ssot": "vitest run tests/ssot-invariant.test.ts",
|
|
132
|
+
"test:a11y": "vitest run tests/a11y-enhanced.test.tsx tests/axe-automated.test.tsx tests/navigation-a11y.test.tsx",
|
|
133
|
+
"test:ssr": "vitest run tests/ssr.test.tsx",
|
|
134
|
+
"prepack": "npm run typecheck && npm test && npm run build",
|
|
135
|
+
"preview": "vite preview"
|
|
136
|
+
},
|
|
137
|
+
"peerDependencies": {
|
|
138
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
139
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
140
|
+
},
|
|
141
|
+
"dependencies": {
|
|
142
|
+
"class-variance-authority": "^0.7.1",
|
|
143
|
+
"clsx": "^2.1.1",
|
|
144
|
+
"lucide-react": "^1.16.0",
|
|
145
|
+
"tailwind-merge": "^3.0.2"
|
|
146
|
+
},
|
|
147
|
+
"devDependencies": {
|
|
148
|
+
"@tailwindcss/cli": "^4.3.3",
|
|
149
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
150
|
+
"@testing-library/dom": "^10.4.1",
|
|
151
|
+
"@testing-library/jest-dom": "^7.0.1",
|
|
152
|
+
"@testing-library/react": "^16.3.2",
|
|
153
|
+
"@types/node": "^26.2.0",
|
|
154
|
+
"@types/react": "^19.0.0",
|
|
155
|
+
"@types/react-dom": "^19.0.0",
|
|
156
|
+
"@vitejs/plugin-react": "^6.0.5",
|
|
157
|
+
"axe-core": "^4.13.0",
|
|
158
|
+
"jsdom": "^30.0.1",
|
|
159
|
+
"react": "^19.0.0",
|
|
160
|
+
"react-dom": "^19.0.0",
|
|
161
|
+
"tailwindcss": "^4.3.3",
|
|
162
|
+
"tsup": "^8.3.6",
|
|
163
|
+
"typescript": "^5.7.3",
|
|
164
|
+
"vite": "^8.2.1",
|
|
165
|
+
"vitest": "^3.0.7"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
import readline from 'node:readline';
|
|
7
|
+
import { execSync } from 'node:child_process';
|
|
8
|
+
|
|
9
|
+
const CONFIG_DIR = path.join(os.homedir(), '.thangnqdev-ui');
|
|
10
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'telemetry.json');
|
|
11
|
+
|
|
12
|
+
// 1. Silent bailouts for CI, non-interactive environments, and opt-out flags
|
|
13
|
+
if (
|
|
14
|
+
process.env.CI ||
|
|
15
|
+
process.env.CONTINUOUS_INTEGRATION ||
|
|
16
|
+
process.env.DO_NOT_TRACK === '1' ||
|
|
17
|
+
process.env.AETHER_TELEMETRY_DISABLED === '1' ||
|
|
18
|
+
!process.stdout.isTTY ||
|
|
19
|
+
!process.stdin.isTTY
|
|
20
|
+
) {
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// 2. Check if user has already configured preference
|
|
25
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
26
|
+
try {
|
|
27
|
+
const config = JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));
|
|
28
|
+
if (config.prompted) {
|
|
29
|
+
process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
} catch {
|
|
32
|
+
// Ignore corrupted config
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function getGitRemote() {
|
|
37
|
+
try {
|
|
38
|
+
const remote = execSync('git remote get-url origin', {
|
|
39
|
+
stdio: ['pipe', 'pipe', 'ignore'],
|
|
40
|
+
timeout: 1000,
|
|
41
|
+
})
|
|
42
|
+
.toString()
|
|
43
|
+
.trim();
|
|
44
|
+
return remote;
|
|
45
|
+
} catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function saveConfig(data) {
|
|
51
|
+
try {
|
|
52
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
53
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
54
|
+
}
|
|
55
|
+
fs.writeFileSync(
|
|
56
|
+
CONFIG_FILE,
|
|
57
|
+
JSON.stringify(
|
|
58
|
+
{
|
|
59
|
+
...data,
|
|
60
|
+
updatedAt: new Date().toISOString(),
|
|
61
|
+
prompted: true,
|
|
62
|
+
},
|
|
63
|
+
null,
|
|
64
|
+
2
|
|
65
|
+
)
|
|
66
|
+
);
|
|
67
|
+
} catch {
|
|
68
|
+
// Ignore filesystem permissions error on read-only environments
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function promptUser() {
|
|
73
|
+
const detectedRepo = getGitRemote();
|
|
74
|
+
|
|
75
|
+
console.log('\n\x1b[36m╭────────────────────────────────────────────────────────────────────────╮\x1b[0m');
|
|
76
|
+
console.log('\x1b[36m│\x1b[0m \x1b[1m✦ Thanks for installing @thangnqdev/ui (AETHER Spatial UI)\x1b[0m \x1b[36m│\x1b[0m');
|
|
77
|
+
console.log('\x1b[36m│\x1b[0m \x1b[36m│\x1b[0m');
|
|
78
|
+
console.log('\x1b[36m│\x1b[0m Would you like to share your public repository info to be featured \x1b[36m│\x1b[0m');
|
|
79
|
+
console.log('\x1b[36m│\x1b[0m in the AETHER Community Showcase & project ecosystem? \x1b[36m│\x1b[0m');
|
|
80
|
+
if (detectedRepo) {
|
|
81
|
+
console.log(`\x1b[36m│\x1b[0m \x1b[90mDetected repo:\x1b[0m \x1b[32m${detectedRepo.slice(0, 52)}\x1b[0m \x1b[36m│\x1b[0m`);
|
|
82
|
+
}
|
|
83
|
+
console.log('\x1b[36m│\x1b[0m \x1b[36m│\x1b[0m');
|
|
84
|
+
console.log('\x1b[36m│\x1b[0m \x1b[1m[y]\x1b[0m Yes, share repo info \x1b[1m[n]\x1b[0m No, keep anonymous (Default: n) \x1b[36m│\x1b[0m');
|
|
85
|
+
console.log('\x1b[36m╰────────────────────────────────────────────────────────────────────────╯\x1b[0m');
|
|
86
|
+
|
|
87
|
+
const rl = readline.createInterface({
|
|
88
|
+
input: process.stdin,
|
|
89
|
+
output: process.stdout,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
return new Promise((resolve) => {
|
|
93
|
+
// Timeout prompt after 15 seconds so installation never hangs
|
|
94
|
+
const timer = setTimeout(() => {
|
|
95
|
+
saveConfig({ enabled: false, repo: null });
|
|
96
|
+
rl.close();
|
|
97
|
+
resolve();
|
|
98
|
+
}, 15000);
|
|
99
|
+
|
|
100
|
+
rl.question(' \x1b[33mShare repository info? (y/N):\x1b[0m ', (answer) => {
|
|
101
|
+
clearTimeout(timer);
|
|
102
|
+
const isYes = answer.trim().toLowerCase() === 'y' || answer.trim().toLowerCase() === 'yes';
|
|
103
|
+
|
|
104
|
+
if (isYes) {
|
|
105
|
+
saveConfig({
|
|
106
|
+
enabled: true,
|
|
107
|
+
repo: detectedRepo || 'manual-opt-in',
|
|
108
|
+
optedInAt: new Date().toISOString(),
|
|
109
|
+
});
|
|
110
|
+
console.log(' \x1b[32m✔ Thank you! Repository info shared with AETHER Community Showcase.\x1b[0m\n');
|
|
111
|
+
} else {
|
|
112
|
+
saveConfig({
|
|
113
|
+
enabled: false,
|
|
114
|
+
repo: null,
|
|
115
|
+
});
|
|
116
|
+
console.log(' \x1b[90m✔ Understood. Anonymous mode active. (Manage anytime via npx @thangnqdev/ui showcase)\x1b[0m\n');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
rl.close();
|
|
120
|
+
resolve();
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
promptUser().catch(() => process.exit(0));
|