ui8kit 1.0.6 → 1.3.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.
Files changed (78) hide show
  1. package/README.md +211 -194
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +2930 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +70 -28
  6. package/css/dist/styles.css +0 -3325
  7. package/css/src/semantic/alert.css +0 -11
  8. package/css/src/semantic/article.css +0 -59
  9. package/css/src/semantic/avatar.css +0 -11
  10. package/css/src/semantic/badge.css +0 -19
  11. package/css/src/semantic/breadcrumb.css +0 -23
  12. package/css/src/semantic/button.css +0 -39
  13. package/css/src/semantic/card.css +0 -43
  14. package/css/src/semantic/index.css +0 -19
  15. package/css/src/semantic/input.css +0 -3
  16. package/css/src/semantic/label.css +0 -3
  17. package/css/src/semantic/link.css +0 -39
  18. package/css/src/semantic/main.css +0 -3
  19. package/css/src/semantic/markup.css +0 -23
  20. package/css/src/semantic/nav.css +0 -63
  21. package/css/src/semantic/pagination.css +0 -11
  22. package/css/src/semantic/section.css +0 -43
  23. package/css/src/semantic/sheet.css +0 -35
  24. package/css/src/semantic/skeleton.css +0 -3
  25. package/css/src/semantic/table.css +0 -31
  26. package/css/src/semantic/textarea.css +0 -3
  27. package/r/schema/registry-item.json +0 -68
  28. package/r/schema/registry.json +0 -93
  29. package/r/schema.json +0 -60
  30. package/r/semantic/components/article.json +0 -17
  31. package/r/semantic/components/aside.json +0 -17
  32. package/r/semantic/components/footer.json +0 -17
  33. package/r/semantic/components/header.json +0 -17
  34. package/r/semantic/components/main.json +0 -17
  35. package/r/semantic/components/markup.json +0 -17
  36. package/r/semantic/components/media.json +0 -17
  37. package/r/semantic/components/nav.json +0 -18
  38. package/r/semantic/components/section.json +0 -17
  39. package/r/semantic/components/sheet.json +0 -18
  40. package/r/semantic/index.json +0 -130
  41. package/r/semantic/lib/utils.json +0 -18
  42. package/r/semantic/ui/alert.json +0 -18
  43. package/r/semantic/ui/avatar.json +0 -17
  44. package/r/semantic/ui/badge.json +0 -18
  45. package/r/semantic/ui/breadcrumb.json +0 -19
  46. package/r/semantic/ui/button.json +0 -18
  47. package/r/semantic/ui/card.json +0 -17
  48. package/r/semantic/ui/input.json +0 -17
  49. package/r/semantic/ui/label.json +0 -17
  50. package/r/semantic/ui/link.json +0 -18
  51. package/r/semantic/ui/skeleton.json +0 -15
  52. package/r/semantic/ui/table.json +0 -17
  53. package/r/semantic/ui/textarea.json +0 -17
  54. package/r/utility/components/article.json +0 -17
  55. package/r/utility/components/aside.json +0 -17
  56. package/r/utility/components/footer.json +0 -17
  57. package/r/utility/components/header.json +0 -17
  58. package/r/utility/components/main.json +0 -17
  59. package/r/utility/components/markup.json +0 -17
  60. package/r/utility/components/media.json +0 -17
  61. package/r/utility/components/nav.json +0 -18
  62. package/r/utility/components/navbar.json +0 -15
  63. package/r/utility/components/section.json +0 -17
  64. package/r/utility/components/sheet.json +0 -18
  65. package/r/utility/index.json +0 -135
  66. package/r/utility/lib/utils.json +0 -18
  67. package/r/utility/ui/alert.json +0 -18
  68. package/r/utility/ui/avatar.json +0 -17
  69. package/r/utility/ui/badge.json +0 -19
  70. package/r/utility/ui/breadcrumb.json +0 -19
  71. package/r/utility/ui/button.json +0 -19
  72. package/r/utility/ui/card.json +0 -17
  73. package/r/utility/ui/input.json +0 -17
  74. package/r/utility/ui/label.json +0 -17
  75. package/r/utility/ui/link.json +0 -18
  76. package/r/utility/ui/skeleton.json +0 -15
  77. package/r/utility/ui/table.json +0 -17
  78. package/r/utility/ui/textarea.json +0 -17
package/r/schema.json DELETED
@@ -1,60 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "title": "Buildy Configuration",
4
- "description": "Configuration file for buildy CLI (UI8Kit structure)",
5
- "type": "object",
6
- "properties": {
7
- "$schema": {
8
- "type": "string",
9
- "description": "JSON Schema URL"
10
- },
11
- "framework": {
12
- "type": "string",
13
- "enum": [
14
- "vite-react"
15
- ],
16
- "description": "Target framework"
17
- },
18
- "typescript": {
19
- "type": "boolean",
20
- "default": true,
21
- "description": "Whether the project uses TypeScript"
22
- },
23
- "aliases": {
24
- "type": "object",
25
- "additionalProperties": {
26
- "type": "string"
27
- },
28
- "default": {
29
- "@": "./src",
30
- "@/components": "./utility/components",
31
- "@/ui": "./utility/ui",
32
- "@/blocks": "./utility/blocks",
33
- "@/lib": "./lib",
34
- "@/utility": "./utility",
35
- "@/semantic": "./semantic",
36
- "@/theme": "./theme"
37
- },
38
- "description": "Path aliases for imports in UI8Kit structure"
39
- },
40
- "registry": {
41
- "type": "string",
42
- "default": "@ui8kit",
43
- "description": "Default component registry"
44
- },
45
- "componentsDir": {
46
- "type": "string",
47
- "default": "./utility/ui",
48
- "description": "Directory where utility components will be installed"
49
- },
50
- "libDir": {
51
- "type": "string",
52
- "default": "./lib",
53
- "description": "Directory for utility libraries"
54
- }
55
- },
56
- "required": [
57
- "framework"
58
- ],
59
- "additionalProperties": false
60
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "article",
4
- "type": "registry:component",
5
- "description": "Helper function for determining styles that the parser will be able to process",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/components/article.tsx",
13
- "content": "import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\ntype ElementType = \"article\" | \"div\" | \"li\" | \"section\";\n\n// Helper function for determining styles that the parser will be able to process\nfunction ArticleBase({\n className,\n ...props\n}: React.ComponentProps<\"article\">) {\n return (\n <article\n\n className={cn(\"article\",\n\n className\n )}\n {...props} />);\n\n\n}\n\n// Main component with polymorphism support\ntype BaseProps<T extends ElementType = \"article\"> = {\n as?: T;\n className?: string;\n children: React.ReactNode;\n} & React.ComponentPropsWithoutRef<T>;\n\nfunction Article<T extends ElementType = \"article\">({\n as,\n className,\n children,\n ...props\n}: BaseProps<T>) {\n const Component = as || \"article\";\n\n if (Component === \"article\") {\n return (\n <ArticleBase className={className} {...props}>\n {children}\n </ArticleBase>);\n\n }\n\n return React.createElement(\n Component,\n {\n \"data-slot\": \"article\",\n className: cn(\"article\", className),\n ...props\n },\n children\n );\n}\n\nfunction ArticleHeader({\n className,\n ...props\n}: React.ComponentProps<\"header\">) {\n return (\n <header\n\n className={cn(\"article-header\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleTitle({\n className,\n ...props\n}: React.ComponentProps<\"h3\">) {\n return (\n <h3\n\n className={cn(\"article-title\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleMeta({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"article-meta\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleTime({\n className,\n ...props\n}: React.ComponentProps<\"time\">) {\n return (\n <time\n\n className={cn(\"article-time\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleAuthor({\n className,\n ...props\n}: React.ComponentProps<\"address\">) {\n return (\n <address\n\n className={cn(\"article-author\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleFigure({\n className,\n ...props\n}: React.ComponentProps<\"figure\">) {\n return (\n <figure\n\n className={cn(\"article-figure\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleImage({\n className,\n ...props\n}: React.ComponentProps<\"img\">) {\n return (\n <img\n\n className={cn(\"article-image\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleFigcaption({\n className,\n ...props\n}: React.ComponentProps<\"figcaption\">) {\n return (\n <figcaption\n\n className={cn(\"article-figcaption\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"article-content\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleBlockquote({\n className,\n ...props\n}: React.ComponentProps<\"blockquote\">) {\n return (\n <blockquote\n\n className={cn(\"article-blockquote\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleFooter({\n className,\n ...props\n}: React.ComponentProps<\"footer\">) {\n return (\n <footer\n\n className={cn(\"article-footer\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleTags({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n\n className={cn(\"article-tags\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleTag({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n\n className={cn(\"article-tag\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction ArticleActions({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"article-actions\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nArticle.displayName = \"Article\";\n\nexport {\n Article,\n ArticleHeader,\n ArticleTitle,\n ArticleMeta,\n ArticleTime,\n ArticleAuthor,\n ArticleFigure,\n ArticleImage,\n ArticleFigcaption,\n ArticleContent,\n ArticleBlockquote,\n ArticleFooter,\n ArticleTags,\n ArticleTag,\n ArticleActions };",
14
- "target": "components"
15
- }
16
- ]
17
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "aside",
4
- "type": "registry:component",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/components/aside.tsx",
13
- "content": "import * as React from \"react\"\nimport { cn } from \"@/lib/utils\";\n\nfunction Aside({ className, ...props }: React.ComponentProps<\"aside\">) {\n return (\n <aside\n data-slot=\"aside\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nAside.displayName = \"Aside\"\n\nexport { Aside }",
14
- "target": "components"
15
- }
16
- ]
17
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "footer",
4
- "type": "registry:component",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/components/footer.tsx",
13
- "content": "import * as React from \"react\"\nimport { cn } from \"@/lib/utils\";\n\nfunction Footer({ className, ...props }: React.ComponentProps<\"footer\">) {\n return (\n <footer\n data-slot=\"footer\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nFooter.displayName = \"Footer\"\n\nexport { Footer }",
14
- "target": "components"
15
- }
16
- ]
17
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "header",
4
- "type": "registry:component",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/components/header.tsx",
13
- "content": "import * as React from \"react\"\nimport { cn } from \"@/lib/utils\";\n\nfunction Header({ className, ...props }: React.ComponentProps<\"header\">) {\n return (\n <header\n data-slot=\"header\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nHeader.displayName = \"Header\"\n\nexport { Header }",
14
- "target": "components"
15
- }
16
- ]
17
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "main",
4
- "type": "registry:component",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/components/main.tsx",
13
- "content": "import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction Main({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n\n className={cn(\"main\", className)}\n {...props} />);\n\n\n}\n\nMain.displayName = \"Main\";\n\nexport { Main };",
14
- "target": "components"
15
- }
16
- ]
17
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "markup",
4
- "type": "registry:component",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/components/markup.tsx",
13
- "content": "import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction H1({ className, ...props }: React.ComponentProps<\"h1\">) {\n return (\n <h1\n\n className={cn(\"h1\", className)}\n {...props} />);\n\n\n}\n\nH1.displayName = \"H1\";\n\nfunction H2({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n\n className={cn(\"h2\", className)}\n {...props} />);\n\n\n}\n\nH2.displayName = \"H2\";\n\nfunction H3({ className, ...props }: React.ComponentProps<\"h3\">) {\n return (\n <h3\n\n className={cn(\"h3\", className)}\n {...props} />);\n\n\n}\n\nH3.displayName = \"H3\";\n\nfunction H4({ className, ...props }: React.ComponentProps<\"h4\">) {\n return (\n <h4\n\n className={cn(\"h4\", className)}\n {...props} />);\n\n\n}\n\nH4.displayName = \"H4\";\n\nfunction H5({ className, ...props }: React.ComponentProps<\"h5\">) {\n return (\n <h5\n\n className={cn(\"h5\", className)}\n {...props} />);\n\n\n}\n\nH5.displayName = \"H5\";\n\nfunction H6({ className, ...props }: React.ComponentProps<\"h6\">) {\n return (\n <h6\n\n className={cn(\"h6\", className)}\n {...props} />);\n\n\n}\n\nH6.displayName = \"H6\";\n\nfunction P({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nP.displayName = \"P\";\n\nfunction Figure({ className, ...props }: React.ComponentProps<\"figure\">) {\n return (\n <figure\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nFigure.displayName = \"Figure\";\n\nfunction Figcaption({ className, ...props }: React.ComponentProps<\"figcaption\">) {\n return (\n <figcaption\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nFigcaption.displayName = \"Figcaption\";\n\nfunction Blockquote({ className, ...props }: React.ComponentProps<\"blockquote\">) {\n return (\n <blockquote\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nBlockquote.displayName = \"Blockquote\";\n\nfunction Time({ className, ...props }: React.ComponentProps<\"time\">) {\n return (\n <time\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nTime.displayName = \"Time\";\n\nfunction Address({ className, ...props }: React.ComponentProps<\"address\">) {\n return (\n <address\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nAddress.displayName = \"Address\";\n\nfunction Ul({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nUl.displayName = \"Ul\";\n\nfunction Ol({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nOl.displayName = \"Ol\";\n\nfunction Li({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n\n className={cn(className)}\n {...props} />);\n\n\n}\n\nLi.displayName = \"Li\";\n\nexport { H1, H2, H3, H4, H5, H6, P, Figure, Figcaption, Blockquote, Time, Address, Ul, Ol, Li };",
14
- "target": "components"
15
- }
16
- ]
17
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "media",
4
- "type": "registry:component",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/components/media.tsx",
13
- "content": "import * as React from \"react\"\nimport { cn } from \"@/lib/utils\";\n\nfunction Img({ className, ...props }: React.ComponentProps<\"img\">) {\n return (\n <img\n data-slot=\"img\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nImg.displayName = \"Img\"\n\nfunction Video({ className, ...props }: React.ComponentProps<\"video\">) {\n return (\n <video\n data-slot=\"video\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nVideo.displayName = \"Video\"\n\nfunction Audio({ className, ...props }: React.ComponentProps<\"audio\">) {\n return (\n <audio\n data-slot=\"audio\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nAudio.displayName = \"Audio\"\n\nfunction Picture({ className, ...props }: React.ComponentProps<\"picture\">) {\n return (\n <picture\n data-slot=\"picture\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nPicture.displayName = \"Picture\"\n\nfunction Source({ className, ...props }: React.ComponentProps<\"source\">) {\n return (\n <source\n data-slot=\"source\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nSource.displayName = \"Source\"\n\nfunction Iframe({ className, ...props }: React.ComponentProps<\"iframe\">) {\n return (\n <iframe\n data-slot=\"iframe\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nIframe.displayName = \"Iframe\"\n\nfunction Map({ className, ...props }: React.ComponentProps<\"map\">) {\n return (\n <map\n data-slot=\"map\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nMap.displayName = \"Map\"\n\nfunction Area({ className, ...props }: React.ComponentProps<\"area\">) {\n return (\n <area\n data-slot=\"area\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nArea.displayName = \"Area\"\n\nfunction Object({ className, ...props }: React.ComponentProps<\"object\">) {\n return (\n <object\n data-slot=\"object\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nObject.displayName = \"Object\"\n\nfunction Svg({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <svg\n data-slot=\"svg\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nSvg.displayName = \"Svg\"\n\nfunction Canvas({ className, ...props }: React.ComponentProps<\"canvas\">) {\n return (\n <canvas\n data-slot=\"canvas\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nCanvas.displayName = \"Canvas\"\n\nexport { Img, Video, Audio, Picture, Source, Iframe, Map, Area, Object, Svg, Canvas }",
14
- "target": "components"
15
- }
16
- ]
17
- }
@@ -1,18 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "nav",
4
- "type": "registry:component",
5
- "description": "CSS-only Navigation component with responsive design\n * \n * No external JavaScript dependencies or runtime requirements.\n * Works with server-side rendering (SSR) and static site generation (SSG).\n * \n * Required Tailwind CSS:\n * ```css\n * @layer components {\n * \n * .peer:checked ~[data - slot=\"nav-mobile\"] {\n * @apply opacity - 100 visible translate - y - 0;\n * }\n * \n * \n * .group: target[data - slot= \"nav-dropdown-content\"] {\n * @apply opacity - 100 visible scale - 100;\n * }\n * \n * \n * details[data - slot=\"nav-mobile-dropdown\"][open] summary {\n * @apply bg - accent text - accent - foreground;\n * }\n * }\n * ```\n * \n * Key features:\n * - Pure CSS dropdowns using :target selector\n * - Checkbox-based mobile menu\n * - Auto-closing mobile menu when clicking outside\n * - Accessible keyboard navigation\n * \n * Usage example:\n * \n * <NavLayout>\n * <NavBar>\n * <h2>Logo</h2>\n *\n * \n * <Nav>\n * <NavList>\n * <NavItem>\n * <NavLink href=\"/\" active>Home</NavLink>\n * </NavItem>\n * <NavItem>\n * <NavDropdown id=\"products-dropdown\" title=\"Products\">\n * <NavDropdownItem href=\"/products/web\">Web</NavDropdownItem>\n * <NavDropdownItem href=\"/products/mobile\">Mobile</NavDropdownItem>\n * </NavDropdown>\n * </NavItem>\n * </NavList>\n * </Nav>\n *\n * \n * <NavTrigger />\n * </NavBar>\n *\n * \n * <NavMobile>\n * <NavMobileList>\n * <NavMobileItem>\n * <NavMobileLink href=\"/\" active>Home</NavMobileLink>\n * </NavMobileItem>\n * <NavMobileItem>\n * <NavMobileDropdown title=\"Products\">\n * <NavMobileDropdownItem href=\"/products/web\">Web</NavMobileDropdownItem>\n * <NavMobileDropdownItem href=\"/products/mobile\">Mobile</NavMobileDropdownItem>\n * </NavMobileDropdown>\n * </NavMobileItem>\n * </NavMobileList>\n * </NavMobile>\n * </NavLayout>\n * ```",
6
- "dependencies": [
7
- "react",
8
- "lucide-react"
9
- ],
10
- "devDependencies": [],
11
- "files": [
12
- {
13
- "path": "semantic/components/nav.tsx",
14
- "content": "import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Menu, X, ChevronDown } from \"lucide-react\";\n\n/**\n * CSS-only Navigation component with responsive design\n * \n * No external JavaScript dependencies or runtime requirements.\n * Works with server-side rendering (SSR) and static site generation (SSG).\n * \n * Required Tailwind CSS:\n * ```css\n * @layer components {\n * \n * .peer:checked ~[data - slot=\"nav-mobile\"] {\n * @apply opacity - 100 visible translate - y - 0;\n * }\n * \n * \n * .group: target[data - slot= \"nav-dropdown-content\"] {\n * @apply opacity - 100 visible scale - 100;\n * }\n * \n * \n * details[data - slot=\"nav-mobile-dropdown\"][open] summary {\n * @apply bg - accent text - accent - foreground;\n * }\n * }\n * ```\n * \n * Key features:\n * - Pure CSS dropdowns using :target selector\n * - Checkbox-based mobile menu\n * - Auto-closing mobile menu when clicking outside\n * - Accessible keyboard navigation\n * \n * Usage example:\n * \n * <NavLayout>\n * <NavBar>\n * <h2>Logo</h2>\n *\n * \n * <Nav>\n * <NavList>\n * <NavItem>\n * <NavLink href=\"/\" active>Home</NavLink>\n * </NavItem>\n * <NavItem>\n * <NavDropdown id=\"products-dropdown\" title=\"Products\">\n * <NavDropdownItem href=\"/products/web\">Web</NavDropdownItem>\n * <NavDropdownItem href=\"/products/mobile\">Mobile</NavDropdownItem>\n * </NavDropdown>\n * </NavItem>\n * </NavList>\n * </Nav>\n *\n * \n * <NavTrigger />\n * </NavBar>\n *\n * \n * <NavMobile>\n * <NavMobileList>\n * <NavMobileItem>\n * <NavMobileLink href=\"/\" active>Home</NavMobileLink>\n * </NavMobileItem>\n * <NavMobileItem>\n * <NavMobileDropdown title=\"Products\">\n * <NavMobileDropdownItem href=\"/products/web\">Web</NavMobileDropdownItem>\n * <NavMobileDropdownItem href=\"/products/mobile\">Mobile</NavMobileDropdownItem>\n * </NavMobileDropdown>\n * </NavMobileItem>\n * </NavMobileList>\n * </NavMobile>\n * </NavLayout>\n * ```\n */\n\n// Main navigation container\nfunction Nav({ className, children, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n\n className={cn(\"nav\", className)}\n {...props}>\n\n {children}\n </nav>);\n\n}\n\n// Layout for nav with checkbox for mobile menu\nfunction NavLayout({ className, children, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"nav-layout\", className)}\n {...props}>\n\n {/* Hidden checkbox for mobile menu toggle */}\n <input\n type=\"checkbox\"\n id=\"nav-toggle\"\n className=\"peer sr-only\"\n aria-hidden=\"true\" />\n\n {children}\n </div>);\n\n}\n\n// Navigation bar wrapper\nfunction NavBar({ className, children, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"nav-bar\", className)}\n {...props}>\n\n <div className=\"container flex h-16 items-center justify-between px-4\">\n {children}\n </div>\n </div>);\n\n}\n\n// Navigation list\nfunction NavList({ className, children, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n\n className={cn(\"nav-list\", className)}\n {...props}>\n\n {children}\n </ul>);\n\n}\n\n// Navigation item\nfunction NavItem({ className, children, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n\n className={cn(\"nav-item\", className)}\n {...props}>\n\n {children}\n </li>);\n\n}\n\n// Navigation link\nfunction NavLink({\n className,\n children,\n active,\n ...props\n}: React.ComponentProps<\"a\"> & {active?: boolean;}) {\n return (\n <a\n\n data-active={active ? \"true\" : undefined}\n className={cn(\"nav-link\", className)}\n {...props}>\n\n {children}\n </a>);\n\n}\n\n// Dropdown navigation (CSS-only using details/summary)\nfunction NavDropdown({\n className,\n children,\n title,\n id,\n ...props\n}: React.ComponentProps<\"details\"> & {title: string;id: string;}) {\n return (\n <details\n id={id}\n\n className={cn(\"nav-dropdown\", className)}\n {...props}>\n\n <summary\n className={cn(\"inline-flex items-center px-3 py-2 text-sm font-medium rounded-md transition-colors hover:bg-accent hover:text-accent-foreground cursor-pointer list-none [&::-webkit-details-marker]:hidden [&[open]]:bg-accent [&[open]]:text-accent-foreground\")}>\n\n {title}\n <ChevronDown className={cn(\"ml-1 h-4 w-4 transition-transform duration-200 details-open:rotate-180\")} />\n </summary>\n\n {/* Dropdown content */}\n <div\n\n className={cn(\"nav-dropdown-content\")}>\n\n <div className=\"py-1\">\n {children}\n </div>\n </div>\n </details>);\n\n}\n\n// Dropdown item\nfunction NavDropdownItem({\n className,\n children,\n ...props\n}: React.ComponentProps<\"a\">) {\n return (\n <a\n\n className={cn(\"nav-dropdown-item\", className)}\n {...props}>\n\n {children}\n </a>);\n\n}\n\n// Mobile menu trigger\nfunction NavTrigger({ className, ...props }: React.ComponentProps<\"label\">) {\n return (\n <label\n htmlFor=\"nav-toggle\"\n\n className={cn(\"nav-trigger\", className)}\n aria-label=\"Toggle navigation menu\"\n {...props}>\n\n <Menu className=\"h-5 w-5\" />\n </label>);\n\n}\n\n// Mobile navigation overlay\nfunction NavMobile({ className, children, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"nav-mobile\", className)}\n {...props}>\n\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\" />\n\n {/* Mobile menu panel */}\n <div className=\"relative bg-background border-b border-border shadow-lg\">\n {/* Close button */}\n <div className=\"flex items-center justify-between p-4 border-b border-border\">\n <span className=\"text-lg font-semibold\">Menu</span>\n <label\n htmlFor=\"nav-toggle\"\n className=\"p-2 rounded-md hover:bg-accent cursor-pointer\"\n aria-label=\"Close menu\">\n\n <X className=\"h-5 w-5\" />\n </label>\n </div>\n\n {/* Mobile menu content */}\n <div className=\"p-4\">\n {children}\n </div>\n </div>\n </div>);\n\n}\n\n// Mobile navigation list\nfunction NavMobileList({ className, children, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n\n className={cn(\"nav-mobile-list\", className)}\n {...props}>\n\n {children}\n </ul>);\n\n}\n\n// Mobile navigation item\nfunction NavMobileItem({ className, children, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n\n className={cn(className)}\n {...props}>\n\n {children}\n </li>);\n\n}\n\n// Mobile navigation link\nfunction NavMobileLink({\n className,\n children,\n active,\n href,\n ...props\n}: React.ComponentProps<\"a\"> & {active?: boolean;}) {\n return (\n <a\n href={href}\n\n data-active={active ? \"true\" : undefined}\n className={cn(\"nav-mobile-link\",\n\n className\n\n )}\n {...props}>\n\n {children}\n </a>);\n\n}\n\n// Mobile dropdown item\nfunction NavMobileDropdownItem({\n className,\n children,\n href,\n ...props\n}: React.ComponentProps<\"a\">) {\n return (\n <a\n href={href}\n\n className={cn(\"nav-mobile-dropdown-item\",\n\n className\n\n )}\n {...props}>\n\n {children}\n </a>);\n\n}\n\n// Mobile dropdown (CSS-only with details/summary)\nfunction NavMobileDropdown({\n className,\n children,\n title,\n ...props\n}: React.ComponentProps<\"details\"> & {title: string;}) {\n return (\n <details\n\n className={cn(\"\", className)}\n {...props}>\n\n <summary\n className={cn(\"flex items-center justify-between w-full px-3 py-3 text-base font-medium rounded-md hover:bg-accent hover:text-accent-foreground cursor-pointer list-none [&::-webkit-details-marker]:hidden [&[open]]:bg-accent [&[open]]:text-accent-foreground\")}>\n\n {title}\n <ChevronDown className={cn(\"h-4 w-4 transition-transform duration-200 group-open:rotate-180\")} />\n </summary>\n <div className=\"mt-1 ml-4 space-y-1\">\n {children}\n </div>\n </details>);\n\n}\n\n// Navigation group for organizing links\nfunction NavGroup({\n className,\n children,\n title,\n ...props\n}: React.ComponentProps<\"div\"> & {title?: string;}) {\n return (\n <div\n\n className={cn(\"nav-group\", className)}\n {...props}>\n\n {title &&\n <h4 className=\"mb-2 px-3 text-sm font-semibold tracking-tight text-muted-foreground\">\n {title}\n </h4>\n }\n <div className=\"space-y-1\">\n {children}\n </div>\n </div>);\n\n}\n\n// Navigation group buttons (e.g. for theme toggle)\nfunction NavGroupButtons({ className, children, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"nav-group-buttons\", className)}\n {...props}>\n\n {children}\n </div>);\n\n}\n\nexport {\n Nav,\n NavBar,\n NavList,\n NavItem,\n NavLink,\n NavDropdown,\n NavDropdownItem,\n NavTrigger,\n NavMobile,\n NavMobileList,\n NavMobileItem,\n NavMobileLink,\n NavMobileDropdownItem,\n NavMobileDropdown,\n NavGroup,\n NavGroupButtons,\n NavLayout };",
15
- "target": "components"
16
- }
17
- ]
18
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "section",
4
- "type": "registry:component",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/components/section.tsx",
13
- "content": "import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction Section({ className, ...props }: React.ComponentProps<\"section\">) {\n // TODO: py-6 md:py-12 lg:py-24\n return (\n <section\n\n className={cn(\"section\", className)}\n {...props} />);\n\n\n}\n\nSection.displayName = \"Section\";\n\nfunction Container({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"container\", className)}\n {...props} />);\n\n\n}\n\nContainer.displayName = \"Container\";\n\nfunction FullWidth({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"full-width\", className)}\n {...props} />);\n\n\n}\n\nFullWidth.displayName = \"FullWidth\";\n\nfunction SectionHeader({ className, ...props }: React.ComponentProps<\"header\">) {\n return (\n <header\n\n className={cn(\"section-header\", className)}\n {...props} />);\n\n\n}\n\nSectionHeader.displayName = \"SectionHeader\";\n\nfunction SectionTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <h2\n\n className={cn(\"section-title\", className)}\n {...props} />);\n\n\n}\n\nSectionTitle.displayName = \"SectionTitle\";\n\nfunction SectionDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"section-description\", className)}\n {...props} />);\n\n\n}\n\nSectionDescription.displayName = \"SectionDescription\";\n\nfunction SectionFooter({ className, ...props }: React.ComponentProps<\"footer\">) {\n return (\n <footer\n\n className={cn(\"section-footer\", className)}\n {...props} />);\n\n\n}\n\nSectionFooter.displayName = \"SectionFooter\";\n\nfunction SectionContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"section-content\", className)}\n {...props} />);\n\n\n}\n\nSectionContent.displayName = \"SectionContent\";\n\nfunction Row({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"row\", className)}\n {...props} />);\n\n\n}\n\nRow.displayName = \"Row\";\n\nfunction Col({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"col\", className)}\n {...props} />);\n\n\n}\n\nCol.displayName = \"Col\";\n\nfunction Grid({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"grid\", className)}\n {...props} />);\n\n\n}\n\nGrid.displayName = \"Grid\";\n\nexport { Section, Container, FullWidth, Row, Col, Grid, SectionContent, SectionHeader, SectionTitle, SectionDescription, SectionFooter };",
14
- "target": "components"
15
- }
16
- ]
17
- }
@@ -1,18 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "sheet",
4
- "type": "registry:component",
5
- "description": "CSS-only Sheet component for SSR/SSG compatibility\n * \n * Usage example:\n * ```tsx\n * <Sheet>\n * <SheetTrigger href=\"#my-sheet\">Open Sheet</SheetTrigger>\n * <SheetContent id=\"my-sheet\">\n * <SheetHeader>\n * <SheetTitle>Sheet Title</SheetTitle>\n * <SheetDescription>Description text</SheetDescription>\n * </SheetHeader>\n * <div className=\"p-6\">Content here</div>\n * <SheetFooter>\n * <SheetClose>Close</SheetClose>\n * </SheetFooter>\n * </SheetContent>\n * </Sheet>\n * ```",
6
- "dependencies": [
7
- "react",
8
- "lucide-react"
9
- ],
10
- "devDependencies": [],
11
- "files": [
12
- {
13
- "path": "semantic/components/sheet.tsx",
14
- "content": "import * as React from \"react\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\n/**\n * CSS-only Sheet component for SSR/SSG compatibility\n * \n * Usage example:\n * ```tsx\n * <Sheet>\n * <SheetTrigger href=\"#my-sheet\">Open Sheet</SheetTrigger>\n * <SheetContent id=\"my-sheet\">\n * <SheetHeader>\n * <SheetTitle>Sheet Title</SheetTitle>\n * <SheetDescription>Description text</SheetDescription>\n * </SheetHeader>\n * <div className=\"p-6\">Content here</div>\n * <SheetFooter>\n * <SheetClose>Close</SheetClose>\n * </SheetFooter>\n * </SheetContent>\n * </Sheet>\n * ```\n */\n\n// Layout for sheet with checkbox\ninterface SheetLayoutProps {\n children: React.ReactNode;\n className?: string;\n trigger?: React.ReactNode;\n}\n\nfunction SheetLayout({ trigger, children, className }: SheetLayoutProps) {\n return (\n <div className={cn(\"relative\", className)}>\n <input type=\"checkbox\" id=\"sheet-toggle\" className=\"peer sr-only\" aria-hidden=\"true\" />\n {trigger}\n {children}\n </div>);\n\n}\n\n// Props interfaces\ninterface SheetTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\ninterface SheetContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\n// Trigger component - uses peer checkbox\nfunction SheetTrigger({ children, className, ...props }: SheetTriggerProps) {\n return (\n <label htmlFor=\"sheet-toggle\" className={cn(\"sheet-trigger\", className)} {...props}>\n {children}\n </label>);\n\n}\n\n// Content component - pure CSS off-canvas\n// To change the side from which the panel slides in:\n// For LEFT: use 'inset-y-0 left-0 border-r transform -translate-x-full peer-checked:translate-x-0'\n// For RIGHT: use 'inset-y-0 right-0 border-l transform translate-x-full peer-checked:translate-x-0'\nfunction SheetContent({ children, className, ...props }: SheetContentProps) {\n // Example usage (choose one line):\n // LEFT PANEL: className={cn(\"fixed inset-y-0 left-0 z-50 w-full max-w-sm bg-background shadow-lg border-r transform -translate-x-full transition-transform duration-300 ease-out peer-checked:translate-x-0 flex flex-col overflow-hidden\", className)}\n // RIGHT PANEL: className={cn(\"fixed inset-y-0 right-0 z-50 w-full max-w-sm bg-background shadow-lg border-l transform translate-x-full transition-transform duration-300 ease-out peer-checked:translate-x-0 flex flex-col overflow-hidden\", className)}\n return (\n <div role=\"dialog\" aria-modal=\"true\" className={cn(\"sheet-content\", className)} {...props}>\n {/* Close button */}\n <div className=\"absolute top-4 right-4 z-10\">\n <label htmlFor=\"sheet-toggle\" className={cn(\"rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 inline-flex h-6 w-6 items-center justify-center bg-background/80 backdrop-blur-sm cursor-pointer\")}>\n <XIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </label>\n </div>\n {children}\n </div>);\n\n}\n\n// Overlay component\nfunction SheetOverlay({ className, ...props }: {className?: string;}) {\n return (\n <label\n htmlFor=\"sheet-toggle\"\n\n className={cn(\"sheet-overlay\",\n\n className\n )}\n {...props} />);\n\n\n}\n\n// Header component\ninterface SheetHeaderProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SheetHeader({ children, className, ...props }: SheetHeaderProps) {\n return (\n <div className={cn(\"sheet-header\", className)} {...props}>\n {children}\n </div>);\n\n}\n\n// Body component for main content\ninterface SheetBodyProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SheetBody({ children, className, ...props }: SheetBodyProps) {\n return (\n <div className={cn(\"sheet-body\", className)} {...props}>\n {children}\n </div>);\n\n}\n\n// Footer component\ninterface SheetFooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SheetFooter({ children, className, ...props }: SheetFooterProps) {\n return (\n <div className={cn(\"sheet-footer\", className)} {...props}>\n {children}\n </div>);\n\n}\n\n// Title component\ninterface SheetTitleProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SheetTitle({ children, className, ...props }: SheetTitleProps) {\n return (\n <h2 className={cn(\"sheet-title\", className)} {...props}>\n {children}\n </h2>);\n\n}\n\n// Description component\ninterface SheetDescriptionProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SheetDescription({ children, className, ...props }: SheetDescriptionProps) {\n return (\n <p className={cn(\"sheet-description\", className)} {...props}>\n {children}\n </p>);\n\n}\n\n// Close component - simple link to close\ninterface SheetCloseProps {\n children: React.ReactNode;\n className?: string;\n}\n\nfunction SheetClose({ children, className, ...props }: SheetCloseProps) {\n return (\n <label htmlFor=\"sheet-toggle\" className={cn(\"sheet-close\", className)} {...props}>\n {children}\n </label>);\n\n}\n\nexport {\n SheetLayout,\n SheetTrigger,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n SheetClose,\n SheetBody,\n SheetOverlay };",
15
- "target": "components"
16
- }
17
- ]
18
- }
@@ -1,130 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry.json",
3
- "components": [
4
- {
5
- "name": "textarea",
6
- "type": "registry:ui",
7
- "description": ""
8
- },
9
- {
10
- "name": "table",
11
- "type": "registry:ui",
12
- "description": ""
13
- },
14
- {
15
- "name": "skeleton",
16
- "type": "registry:ui",
17
- "description": ""
18
- },
19
- {
20
- "name": "link",
21
- "type": "registry:ui",
22
- "description": ""
23
- },
24
- {
25
- "name": "label",
26
- "type": "registry:ui",
27
- "description": ""
28
- },
29
- {
30
- "name": "input",
31
- "type": "registry:ui",
32
- "description": ""
33
- },
34
- {
35
- "name": "card",
36
- "type": "registry:ui",
37
- "description": ""
38
- },
39
- {
40
- "name": "button",
41
- "type": "registry:ui",
42
- "description": "Simple arrays of button variant keys for semantic classes"
43
- },
44
- {
45
- "name": "breadcrumb",
46
- "type": "registry:ui",
47
- "description": ""
48
- },
49
- {
50
- "name": "badge",
51
- "type": "registry:ui",
52
- "description": "Simple array of badge variant keys for semantic classes"
53
- },
54
- {
55
- "name": "avatar",
56
- "type": "registry:ui",
57
- "description": "Avatar context for image loading status"
58
- },
59
- {
60
- "name": "alert",
61
- "type": "registry:ui",
62
- "description": ""
63
- },
64
- {
65
- "name": "sheet",
66
- "type": "registry:component",
67
- "description": "CSS-only Sheet component for SSR/SSG compatibility\n * \n * Usage example:\n * ```tsx\n * <Sheet>\n * <SheetTrigger href=\"#my-sheet\">Open Sheet</SheetTrigger>\n * <SheetContent id=\"my-sheet\">\n * <SheetHeader>\n * <SheetTitle>Sheet Title</SheetTitle>\n * <SheetDescription>Description text</SheetDescription>\n * </SheetHeader>\n * <div className=\"p-6\">Content here</div>\n * <SheetFooter>\n * <SheetClose>Close</SheetClose>\n * </SheetFooter>\n * </SheetContent>\n * </Sheet>\n * ```"
68
- },
69
- {
70
- "name": "section",
71
- "type": "registry:component",
72
- "description": ""
73
- },
74
- {
75
- "name": "nav",
76
- "type": "registry:component",
77
- "description": "CSS-only Navigation component with responsive design\n * \n * No external JavaScript dependencies or runtime requirements.\n * Works with server-side rendering (SSR) and static site generation (SSG).\n * \n * Required Tailwind CSS:\n * ```css\n * @layer components {\n * \n * .peer:checked ~[data - slot=\"nav-mobile\"] {\n * @apply opacity - 100 visible translate - y - 0;\n * }\n * \n * \n * .group: target[data - slot= \"nav-dropdown-content\"] {\n * @apply opacity - 100 visible scale - 100;\n * }\n * \n * \n * details[data - slot=\"nav-mobile-dropdown\"][open] summary {\n * @apply bg - accent text - accent - foreground;\n * }\n * }\n * ```\n * \n * Key features:\n * - Pure CSS dropdowns using :target selector\n * - Checkbox-based mobile menu\n * - Auto-closing mobile menu when clicking outside\n * - Accessible keyboard navigation\n * \n * Usage example:\n * \n * <NavLayout>\n * <NavBar>\n * <h2>Logo</h2>\n *\n * \n * <Nav>\n * <NavList>\n * <NavItem>\n * <NavLink href=\"/\" active>Home</NavLink>\n * </NavItem>\n * <NavItem>\n * <NavDropdown id=\"products-dropdown\" title=\"Products\">\n * <NavDropdownItem href=\"/products/web\">Web</NavDropdownItem>\n * <NavDropdownItem href=\"/products/mobile\">Mobile</NavDropdownItem>\n * </NavDropdown>\n * </NavItem>\n * </NavList>\n * </Nav>\n *\n * \n * <NavTrigger />\n * </NavBar>\n *\n * \n * <NavMobile>\n * <NavMobileList>\n * <NavMobileItem>\n * <NavMobileLink href=\"/\" active>Home</NavMobileLink>\n * </NavMobileItem>\n * <NavMobileItem>\n * <NavMobileDropdown title=\"Products\">\n * <NavMobileDropdownItem href=\"/products/web\">Web</NavMobileDropdownItem>\n * <NavMobileDropdownItem href=\"/products/mobile\">Mobile</NavMobileDropdownItem>\n * </NavMobileDropdown>\n * </NavMobileItem>\n * </NavMobileList>\n * </NavMobile>\n * </NavLayout>\n * ```"
78
- },
79
- {
80
- "name": "media",
81
- "type": "registry:component",
82
- "description": ""
83
- },
84
- {
85
- "name": "markup",
86
- "type": "registry:component",
87
- "description": ""
88
- },
89
- {
90
- "name": "main",
91
- "type": "registry:component",
92
- "description": ""
93
- },
94
- {
95
- "name": "header",
96
- "type": "registry:component",
97
- "description": ""
98
- },
99
- {
100
- "name": "footer",
101
- "type": "registry:component",
102
- "description": ""
103
- },
104
- {
105
- "name": "aside",
106
- "type": "registry:component",
107
- "description": ""
108
- },
109
- {
110
- "name": "article",
111
- "type": "registry:component",
112
- "description": "Helper function for determining styles that the parser will be able to process"
113
- },
114
- {
115
- "name": "utils",
116
- "type": "registry:lib",
117
- "description": ""
118
- }
119
- ],
120
- "categories": [
121
- "ui",
122
- "components",
123
- "blocks",
124
- "lib",
125
- "templates"
126
- ],
127
- "version": "1.0.0",
128
- "lastUpdated": "2025-06-02T13:09:29.921Z",
129
- "registry": "utility"
130
- }
@@ -1,18 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "utils",
4
- "type": "registry:lib",
5
- "description": "",
6
- "dependencies": [
7
- "clsx",
8
- "tailwind-merge"
9
- ],
10
- "devDependencies": [],
11
- "files": [
12
- {
13
- "path": "lib/utils.ts",
14
- "content": "import { type ClassValue, clsx } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n} ",
15
- "target": "lib"
16
- }
17
- ]
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "alert",
4
- "type": "registry:ui",
5
- "description": "",
6
- "dependencies": [
7
- "react",
8
- "class-variance-authority"
9
- ],
10
- "devDependencies": [],
11
- "files": [
12
- {
13
- "path": "semantic/ui/alert.tsx",
14
- "content": "import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90\"\n }\n },\n defaultVariants: {\n variant: \"default\"\n }\n }\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props} />);\n\n\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props} />);\n\n\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\n \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\",\n className\n )}\n {...props} />);\n\n\n}\n\nexport { Alert, AlertTitle, AlertDescription };",
15
- "target": "ui"
16
- }
17
- ]
18
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "avatar",
4
- "type": "registry:ui",
5
- "description": "Avatar context for image loading status",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/ui/avatar.tsx",
13
- "content": "\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n// Avatar context for image loading status\nconst AvatarContext = React.createContext<{\n imageStatus: \"idle\" | \"loading\" | \"loaded\" | \"error\";\n setImageStatus: (status: \"idle\" | \"loading\" | \"loaded\" | \"error\") => void;\n} | null>(null);\n\nfunction Avatar({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) {\n // Manage image loading status in context\n const [imageStatus, setImageStatus] = React.useState<\"idle\" | \"loading\" | \"loaded\" | \"error\">(\"idle\");\n return (\n <AvatarContext.Provider value={{ imageStatus, setImageStatus }}>\n <span\n\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props} />\n\n </AvatarContext.Provider>);\n\n}\n\ninterface AvatarImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {}\n\nfunction AvatarImage({ className, src, ...props }: AvatarImageProps) {\n const ctx = React.useContext(AvatarContext);\n const [status, setStatus] = React.useState<\"idle\" | \"loading\" | \"loaded\" | \"error\">(\"idle\");\n\n React.useEffect(() => {\n if (!src) {\n setStatus(\"error\");\n ctx?.setImageStatus(\"error\");\n return;\n }\n setStatus(\"loading\");\n ctx?.setImageStatus(\"loading\");\n const img = new window.Image();\n img.src = src;\n img.onload = () => {\n setStatus(\"loaded\");\n ctx?.setImageStatus(\"loaded\");\n };\n img.onerror = () => {\n setStatus(\"error\");\n ctx?.setImageStatus(\"error\");\n };\n // Clean up\n return () => {\n img.onload = null;\n img.onerror = null;\n };\n }, [src]);\n\n if (status !== \"loaded\") return null;\n return (\n <img\n\n className={cn(\"aspect-square size-full\", className)}\n src={src}\n {...props} />);\n\n\n}\n\ninterface AvatarFallbackProps extends React.HTMLAttributes<HTMLSpanElement> {\n delayMs?: number;\n}\n\nfunction AvatarFallback({ className, delayMs, ...props }: AvatarFallbackProps) {\n const ctx = React.useContext(AvatarContext);\n const [canRender, setCanRender] = React.useState(delayMs === undefined);\n\n React.useEffect(() => {\n if (delayMs !== undefined) {\n const timer = setTimeout(() => setCanRender(true), delayMs);\n return () => clearTimeout(timer);\n }\n }, [delayMs]);\n\n if (!canRender) return null;\n if (ctx?.imageStatus === \"loaded\") return null;\n return (\n <span\n\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n className\n )}\n {...props} />);\n\n\n}\n\nexport { Avatar, AvatarImage, AvatarFallback };",
14
- "target": "ui"
15
- }
16
- ]
17
- }
@@ -1,18 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "badge",
4
- "type": "registry:ui",
5
- "description": "Simple array of badge variant keys for semantic classes",
6
- "dependencies": [
7
- "react",
8
- "@radix-ui/react-slot"
9
- ],
10
- "devDependencies": [],
11
- "files": [
12
- {
13
- "path": "semantic/ui/badge.tsx",
14
- "content": "import * as React from \"react\";\nimport { cn } from \"@/lib/utils\"\nimport { Slot } from \"@radix-ui/react-slot\";\n\n// Simple array of badge variant keys for semantic classes\nconst badgeVariants = [\"default\", \"secondary\", \"destructive\", \"outline\"] as const;\n\n// Type for badge variants\ntype BadgeVariant = typeof badgeVariants[number];\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & { variant?: BadgeVariant; asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(\n \"badge\",\n variant && `badge-${variant}`,\n className\n )}\n {...props}\n />\n );\n}\n\nBadge.displayName = \"Badge\";\n\nexport { Badge };",
15
- "target": "ui"
16
- }
17
- ]
18
- }
@@ -1,19 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "breadcrumb",
4
- "type": "registry:ui",
5
- "description": "",
6
- "dependencies": [
7
- "react",
8
- "@radix-ui/react-slot",
9
- "lucide-react"
10
- ],
11
- "devDependencies": [],
12
- "files": [
13
- {
14
- "path": "semantic/ui/breadcrumb.tsx",
15
- "content": "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" {...props} />;\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n\n className={cn(\n \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5\",\n className\n )}\n {...props} />);\n\n\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props} />);\n\n\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n\n\n}: React.ComponentProps<\"a\"> & {asChild?: boolean;}) {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n\n className={cn(\"hover:text-foreground transition-colors\", className)}\n {...props} />);\n\n\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"text-foreground font-normal\", className)}\n {...props} />);\n\n\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}>\n\n {children ?? <ChevronRight />}\n </li>);\n\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}>\n\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>);\n\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis };",
16
- "target": "ui"
17
- }
18
- ]
19
- }
@@ -1,18 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "button",
4
- "type": "registry:ui",
5
- "description": "Simple arrays of button variant keys for semantic classes",
6
- "dependencies": [
7
- "react",
8
- "@radix-ui/react-slot"
9
- ],
10
- "devDependencies": [],
11
- "files": [
12
- {
13
- "path": "semantic/ui/button.tsx",
14
- "content": "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn } from \"@/lib/utils\";\n\n// Simple arrays of button variant keys for semantic classes\nconst buttonVariants = {\n variant: [\"default\", \"destructive\", \"outline\", \"secondary\", \"ghost\", \"link\"] as const,\n size: [\"default\", \"sm\", \"lg\", \"icon\"] as const,\n} as const;\n\n// Types for button variants\ntype ButtonVariant = typeof buttonVariants.variant[number];\ntype ButtonSize = typeof buttonVariants.size[number];\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n variant?: ButtonVariant;\n size?: ButtonSize;\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(\n \"button\",\n variant && `button-${variant}`,\n size && `button-${size}`,\n className\n )}\n {...props}\n />\n );\n}\n\nButton.displayName = \"Button\";\n\nexport { Button };",
15
- "target": "ui"
16
- }
17
- ]
18
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "card",
4
- "type": "registry:ui",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/ui/card.tsx",
13
- "content": "import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"card\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"card-header\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"h3\">) {\n return (\n <h3\n\n className={cn(\"card-title\", className)}\n {...props} />);\n\n\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"card-description\", className)}\n {...props} />);\n\n\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"card-action\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction CardMeta({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"article-meta\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction CardFigure({\n className,\n ...props\n}: React.ComponentProps<\"figure\">) {\n return (\n <figure\n\n className={cn(\"article-figure\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction CardImage({\n className,\n ...props\n}: React.ComponentProps<\"img\">) {\n return (\n <img\n\n className={cn(\"article-image\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction CardFigcaption({\n className,\n ...props\n}: React.ComponentProps<\"figcaption\">) {\n return (\n <figcaption\n\n className={cn(\"article-figcaption\",\n\n className\n )}\n {...props} />);\n\n\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"card-content\", className)}\n {...props} />);\n\n\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n\n className={cn(\"card-footer\", className)}\n {...props} />);\n\n\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardMeta,\n CardFigure,\n CardImage,\n CardFigcaption,\n CardContent };",
14
- "target": "ui"
15
- }
16
- ]
17
- }
@@ -1,17 +0,0 @@
1
- {
2
- "$schema": "https://buildy.tw/schema/registry-item.json",
3
- "name": "input",
4
- "type": "registry:ui",
5
- "description": "",
6
- "dependencies": [
7
- "react"
8
- ],
9
- "devDependencies": [],
10
- "files": [
11
- {
12
- "path": "semantic/ui/input.tsx",
13
- "content": "import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n className\n )}\n {...props} />);\n\n\n}\n\nexport { Input };",
14
- "target": "ui"
15
- }
16
- ]
17
- }