@forthtilliath/shadcn-ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/components/accordion.d.ts +12 -0
  4. package/dist/components/accordion.d.ts.map +1 -0
  5. package/dist/components/accordion.js +28 -0
  6. package/dist/components/alert-dialog.d.ts +15 -0
  7. package/dist/components/alert-dialog.d.ts.map +1 -0
  8. package/dist/components/alert-dialog.js +39 -0
  9. package/dist/components/alert.d.ts +10 -0
  10. package/dist/components/alert.d.ts.map +1 -0
  11. package/dist/components/alert.js +24 -0
  12. package/dist/components/aspect-ratio.d.ts +4 -0
  13. package/dist/components/aspect-ratio.d.ts.map +1 -0
  14. package/dist/components/aspect-ratio.js +7 -0
  15. package/dist/components/avatar.d.ts +7 -0
  16. package/dist/components/avatar.d.ts.map +1 -0
  17. package/dist/components/avatar.js +14 -0
  18. package/dist/components/badge.d.ts +10 -0
  19. package/dist/components/badge.d.ts.map +1 -0
  20. package/dist/components/badge.js +22 -0
  21. package/dist/components/blocks/accordion.d.ts +56 -0
  22. package/dist/components/blocks/accordion.d.ts.map +1 -0
  23. package/dist/components/blocks/accordion.js +138 -0
  24. package/dist/components/blocks/animated-tabs.d.ts +17 -0
  25. package/dist/components/blocks/animated-tabs.d.ts.map +1 -0
  26. package/dist/components/blocks/animated-tabs.js +135 -0
  27. package/dist/components/blocks/animated-text.d.ts +43 -0
  28. package/dist/components/blocks/animated-text.d.ts.map +1 -0
  29. package/dist/components/blocks/animated-text.js +122 -0
  30. package/dist/components/blocks/avatar.d.ts +17 -0
  31. package/dist/components/blocks/avatar.d.ts.map +1 -0
  32. package/dist/components/blocks/avatar.js +31 -0
  33. package/dist/components/blocks/calendar-date-picker.d.ts +22 -0
  34. package/dist/components/blocks/calendar-date-picker.d.ts.map +1 -0
  35. package/dist/components/blocks/calendar-date-picker.js +377 -0
  36. package/dist/components/blocks/data-table-ext/pagination.d.ts +12 -0
  37. package/dist/components/blocks/data-table-ext/pagination.d.ts.map +1 -0
  38. package/dist/components/blocks/data-table-ext/pagination.js +65 -0
  39. package/dist/components/blocks/data-table-ext/utils/table-config.d.ts +16 -0
  40. package/dist/components/blocks/data-table-ext/utils/table-config.d.ts.map +1 -0
  41. package/dist/components/blocks/data-table-ext/utils/table-config.js +28 -0
  42. package/dist/components/blocks/data-table.d.ts +10 -0
  43. package/dist/components/blocks/data-table.d.ts.map +1 -0
  44. package/dist/components/blocks/data-table.js +59 -0
  45. package/dist/components/blocks/field.d.ts +10 -0
  46. package/dist/components/blocks/field.d.ts.map +1 -0
  47. package/dist/components/blocks/field.js +5 -0
  48. package/dist/components/blocks/form.d.ts +14 -0
  49. package/dist/components/blocks/form.d.ts.map +1 -0
  50. package/dist/components/blocks/form.js +12 -0
  51. package/dist/components/blocks/navbar-01.d.ts +12 -0
  52. package/dist/components/blocks/navbar-01.d.ts.map +1 -0
  53. package/dist/components/blocks/navbar-01.js +10 -0
  54. package/dist/components/blocks/navbar-02.d.ts +11 -0
  55. package/dist/components/blocks/navbar-02.d.ts.map +1 -0
  56. package/dist/components/blocks/navbar-02.js +12 -0
  57. package/dist/components/blocks/navbar-04.d.ts +12 -0
  58. package/dist/components/blocks/navbar-04.d.ts.map +1 -0
  59. package/dist/components/blocks/navbar-04.js +10 -0
  60. package/dist/components/breadcrumb.d.ts +12 -0
  61. package/dist/components/breadcrumb.d.ts.map +1 -0
  62. package/dist/components/breadcrumb.js +27 -0
  63. package/dist/components/button.d.ts +11 -0
  64. package/dist/components/button.d.ts.map +1 -0
  65. package/dist/components/button.js +31 -0
  66. package/dist/components/calendar.d.ts +10 -0
  67. package/dist/components/calendar.d.ts.map +1 -0
  68. package/dist/components/calendar.js +77 -0
  69. package/dist/components/card.d.ts +10 -0
  70. package/dist/components/card.d.ts.map +1 -0
  71. package/dist/components/card.js +24 -0
  72. package/dist/components/carousel.d.ts +20 -0
  73. package/dist/components/carousel.d.ts.map +1 -0
  74. package/dist/components/carousel.js +101 -0
  75. package/dist/components/chart.d.ts +40 -0
  76. package/dist/components/chart.d.ts.map +1 -0
  77. package/dist/components/chart.js +144 -0
  78. package/dist/components/checkbox.d.ts +5 -0
  79. package/dist/components/checkbox.d.ts.map +1 -0
  80. package/dist/components/checkbox.js +9 -0
  81. package/dist/components/collapsible.d.ts +6 -0
  82. package/dist/components/collapsible.d.ts.map +1 -0
  83. package/dist/components/collapsible.js +13 -0
  84. package/dist/components/command.d.ts +19 -0
  85. package/dist/components/command.d.ts.map +1 -0
  86. package/dist/components/command.js +34 -0
  87. package/dist/components/context-menu.d.ts +26 -0
  88. package/dist/components/context-menu.d.ts.map +1 -0
  89. package/dist/components/context-menu.js +51 -0
  90. package/dist/components/dialog.d.ts +16 -0
  91. package/dist/components/dialog.d.ts.map +1 -0
  92. package/dist/components/dialog.js +36 -0
  93. package/dist/components/drawer.d.ts +14 -0
  94. package/dist/components/drawer.d.ts.map +1 -0
  95. package/dist/components/drawer.js +35 -0
  96. package/dist/components/dropdown-menu.d.ts +26 -0
  97. package/dist/components/dropdown-menu.d.ts.map +1 -0
  98. package/dist/components/dropdown-menu.js +51 -0
  99. package/dist/components/form.d.ts +25 -0
  100. package/dist/components/form.d.ts.map +1 -0
  101. package/dist/components/form.js +54 -0
  102. package/dist/components/hover-card.d.ts +7 -0
  103. package/dist/components/hover-card.d.ts.map +1 -0
  104. package/dist/components/hover-card.js +14 -0
  105. package/dist/components/input-otp.d.ts +12 -0
  106. package/dist/components/input-otp.d.ts.map +1 -0
  107. package/dist/components/input-otp.js +21 -0
  108. package/dist/components/input.d.ts +4 -0
  109. package/dist/components/input.d.ts.map +1 -0
  110. package/dist/components/input.js +6 -0
  111. package/dist/components/label.d.ts +5 -0
  112. package/dist/components/label.d.ts.map +1 -0
  113. package/dist/components/label.js +8 -0
  114. package/dist/components/menubar.d.ts +27 -0
  115. package/dist/components/menubar.d.ts.map +1 -0
  116. package/dist/components/menubar.js +54 -0
  117. package/dist/components/navigation-menu.d.ts +15 -0
  118. package/dist/components/navigation-menu.d.ts.map +1 -0
  119. package/dist/components/navigation-menu.js +31 -0
  120. package/dist/components/pagination.d.ts +14 -0
  121. package/dist/components/pagination.d.ts.map +1 -0
  122. package/dist/components/pagination.js +29 -0
  123. package/dist/components/popover.d.ts +8 -0
  124. package/dist/components/popover.d.ts.map +1 -0
  125. package/dist/components/popover.js +17 -0
  126. package/dist/components/progress.d.ts +5 -0
  127. package/dist/components/progress.d.ts.map +1 -0
  128. package/dist/components/progress.js +8 -0
  129. package/dist/components/radio-group.d.ts +6 -0
  130. package/dist/components/radio-group.d.ts.map +1 -0
  131. package/dist/components/radio-group.js +12 -0
  132. package/dist/components/resizable.d.ts +9 -0
  133. package/dist/components/resizable.d.ts.map +1 -0
  134. package/dist/components/resizable.js +15 -0
  135. package/dist/components/scroll-area.d.ts +6 -0
  136. package/dist/components/scroll-area.d.ts.map +1 -0
  137. package/dist/components/scroll-area.js +13 -0
  138. package/dist/components/select.d.ts +16 -0
  139. package/dist/components/select.d.ts.map +1 -0
  140. package/dist/components/select.js +38 -0
  141. package/dist/components/separator.d.ts +5 -0
  142. package/dist/components/separator.d.ts.map +1 -0
  143. package/dist/components/separator.js +8 -0
  144. package/dist/components/sheet.d.ts +14 -0
  145. package/dist/components/sheet.d.ts.map +1 -0
  146. package/dist/components/sheet.js +40 -0
  147. package/dist/components/sidebar.d.ts +70 -0
  148. package/dist/components/sidebar.d.ts.map +1 -0
  149. package/dist/components/sidebar.js +221 -0
  150. package/dist/components/skeleton.d.ts +3 -0
  151. package/dist/components/skeleton.d.ts.map +1 -0
  152. package/dist/components/skeleton.js +6 -0
  153. package/dist/components/slider.d.ts +5 -0
  154. package/dist/components/slider.d.ts.map +1 -0
  155. package/dist/components/slider.js +14 -0
  156. package/dist/components/sonner.d.ts +4 -0
  157. package/dist/components/sonner.d.ts.map +1 -0
  158. package/dist/components/sonner.js +13 -0
  159. package/dist/components/switch.d.ts +5 -0
  160. package/dist/components/switch.d.ts.map +1 -0
  161. package/dist/components/switch.js +8 -0
  162. package/dist/components/table.d.ts +11 -0
  163. package/dist/components/table.d.ts.map +1 -0
  164. package/dist/components/table.js +28 -0
  165. package/dist/components/tabs.d.ts +8 -0
  166. package/dist/components/tabs.d.ts.map +1 -0
  167. package/dist/components/tabs.js +17 -0
  168. package/dist/components/textarea.d.ts +4 -0
  169. package/dist/components/textarea.d.ts.map +1 -0
  170. package/dist/components/textarea.js +6 -0
  171. package/dist/components/toggle-group.d.ts +8 -0
  172. package/dist/components/toggle-group.d.ts.map +1 -0
  173. package/dist/components/toggle-group.js +21 -0
  174. package/dist/components/toggle.d.ts +10 -0
  175. package/dist/components/toggle.d.ts.map +1 -0
  176. package/dist/components/toggle.js +26 -0
  177. package/dist/components/tooltip.d.ts +8 -0
  178. package/dist/components/tooltip.d.ts.map +1 -0
  179. package/dist/components/tooltip.js +17 -0
  180. package/dist/hooks/use-mobile.d.ts +2 -0
  181. package/dist/hooks/use-mobile.d.ts.map +1 -0
  182. package/dist/hooks/use-mobile.js +24 -0
  183. package/dist/lib/input-otp.d.ts +2 -0
  184. package/dist/lib/input-otp.d.ts.map +1 -0
  185. package/dist/lib/input-otp.js +1 -0
  186. package/dist/lib/react-hook-form.d.ts +3 -0
  187. package/dist/lib/react-hook-form.d.ts.map +1 -0
  188. package/dist/lib/react-hook-form.js +2 -0
  189. package/dist/lib/react-table.d.ts +2 -0
  190. package/dist/lib/react-table.d.ts.map +1 -0
  191. package/dist/lib/react-table.js +1 -0
  192. package/dist/lib/recharts.d.ts +2 -0
  193. package/dist/lib/recharts.d.ts.map +1 -0
  194. package/dist/lib/recharts.js +1 -0
  195. package/dist/lib/sonner.d.ts +2 -0
  196. package/dist/lib/sonner.d.ts.map +1 -0
  197. package/dist/lib/sonner.js +1 -0
  198. package/dist/lib/utils.d.ts +4 -0
  199. package/dist/lib/utils.d.ts.map +1 -0
  200. package/dist/lib/utils.js +5 -0
  201. package/dist/lib/zod.d.ts +2 -0
  202. package/dist/lib/zod.d.ts.map +1 -0
  203. package/dist/lib/zod.js +1 -0
  204. package/dist/styles/globals-static.css +71 -0
  205. package/dist/styles/globals.css +71 -0
  206. package/dist/styles/themes/blue.css +68 -0
  207. package/dist/styles/themes/bubblegum.css +113 -0
  208. package/dist/styles/themes/claymorphism.css +108 -0
  209. package/dist/styles/themes/default.css +69 -0
  210. package/dist/styles/themes/green.css +68 -0
  211. package/dist/styles/themes/orange.css +68 -0
  212. package/dist/styles/themes/red.css +68 -0
  213. package/dist/styles/themes/rose.css +68 -0
  214. package/dist/styles/themes/twitter.css +113 -0
  215. package/dist/styles/themes/violet.css +68 -0
  216. package/dist/styles/themes/yellow.css +68 -0
  217. package/package.json +97 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Forthtilliath
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,84 @@
1
+ # @forthtilliath/shadcn-ui
2
+
3
+ The [shadcn/ui](https://ui.shadcn.com) component library for this monorepo —
4
+ Radix UI primitives styled with Tailwind CSS, generated via the shadcn CLI
5
+ and kept in source form (not compiled) so consumers can customize freely.
6
+ `private: true`, internal to this monorepo.
7
+
8
+ > Distinct from [`@forthtilliath/forth-ui`](../forth-ui): this package is
9
+ > the (mostly) unmodified shadcn/ui base layer; `forth-ui` builds
10
+ > higher-level, opinionated components on top of it.
11
+
12
+ ## Install
13
+
14
+ ```json
15
+ {
16
+ "dependencies": {
17
+ "@forthtilliath/shadcn-ui": "workspace:*"
18
+ }
19
+ }
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ No build step — everything is consumed straight from `src/` (see the
25
+ `exports` field), so import components, lib helpers and hooks directly by
26
+ file name:
27
+
28
+ ```tsx
29
+ import { Button } from "@forthtilliath/shadcn-ui/components/button";
30
+ import {
31
+ Card,
32
+ CardContent,
33
+ CardHeader,
34
+ } from "@forthtilliath/shadcn-ui/components/card";
35
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
36
+ import { useIsMobile } from "@forthtilliath/shadcn-ui/hooks/use-mobile";
37
+ import "@forthtilliath/shadcn-ui/styles/globals.css";
38
+ ```
39
+
40
+ ### Components (`src/components/`)
41
+
42
+ The full shadcn/ui primitive set: `accordion`, `alert`, `alert-dialog`,
43
+ `aspect-ratio`, `avatar`, `badge`, `breadcrumb`, `button`, `calendar`,
44
+ `card`, `carousel`, `chart`, `checkbox`, `collapsible`, `command`,
45
+ `context-menu`, `data-table`, `dialog`, `drawer`, `dropdown-menu`, `form`,
46
+ `hover-card`, `input`, `input-otp`, `label`, `menubar`, `navigation-menu`,
47
+ `pagination`, `popover`, `progress`, `radio-group`, `resizable`,
48
+ `scroll-area`, `select`, `separator`, `sheet`, `sidebar`, `skeleton`,
49
+ `slider`, `sonner`, `switch`, `table`, `tabs`, `textarea`, `toggle`,
50
+ `toggle-group`, `tooltip`.
51
+
52
+ ### Blocks (`src/components/blocks/`)
53
+
54
+ Larger, composed patterns built from the primitives above: `accordion`,
55
+ `animated-tabs`, `animated-text`, `avatar`, `calendar-date-picker`,
56
+ `data-table` (+ `data-table-ext/pagination`), `field`, `form`, `navbar-01`,
57
+ `navbar-02`, `navbar-04`.
58
+
59
+ ### Lib (`src/lib/`)
60
+
61
+ - `utils.ts` — `cn()`, the `clsx` + `tailwind-merge` class-name helper used
62
+ by every component.
63
+ - `react-hook-form.ts`, `recharts.ts`, `input-otp.ts`, `sonner.ts` —
64
+ library-specific glue/re-exports for those components.
65
+
66
+ ### Hooks (`src/hooks/`)
67
+
68
+ - `use-mobile.ts` — `useIsMobile()`, a media-query hook used by `sidebar`.
69
+
70
+ ### Themes (`src/styles/themes/`)
71
+
72
+ `globals.css` imports `themes/default.css`. Ten additional
73
+ [tweakcn](https://tweakcn.com)-generated theme files are available to swap
74
+ in instead: `blue`, `bubblegum`, `claymorphism`, `green`, `orange`, `red`,
75
+ `rose`, `twitter`, `violet`, `yellow`. `globals-static.css` is a
76
+ non-`@theme inline` variant for tooling that doesn't support Tailwind v4's
77
+ CSS-first theming.
78
+
79
+ ## Scripts
80
+
81
+ ```bash
82
+ pnpm run check-types # tsc --noEmit
83
+ pnpm run lint # eslint
84
+ ```
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
3
+ import type { LucideProps } from "lucide-react";
4
+ declare function Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>): React.JSX.Element;
5
+ declare function AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>): React.JSX.Element;
6
+ declare function AccordionTrigger({ className, hideChevron, customChevron, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger> & {
7
+ hideChevron?: boolean;
8
+ customChevron?: React.ReactElement<LucideProps>;
9
+ }): React.JSX.Element;
10
+ declare function AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>): React.JSX.Element;
11
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
12
+ //# sourceMappingURL=accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/components/accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,iBAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,qBAEtD;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,qBAQtD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,WAAmB,EACnB,aAAa,EACb,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,GAAG;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;CACjD,qBAgCA;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,qBAUzD;AAED,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
5
+ import { ChevronDownIcon } from "lucide-react";
6
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
7
+ function Accordion({ ...props }) {
8
+ return _jsx(AccordionPrimitive.Root, { "data-slot": "accordion", ...props });
9
+ }
10
+ function AccordionItem({ className, ...props }) {
11
+ return (_jsx(AccordionPrimitive.Item, { "data-slot": "accordion-item", className: cn("border-b last:border-b-0", className), ...props }));
12
+ }
13
+ function AccordionTrigger({ className, hideChevron = false, customChevron, children, ...props }) {
14
+ const chevronProps = {
15
+ ...customChevron?.props,
16
+ className: cn("text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200", customChevron?.props.className),
17
+ };
18
+ return (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { "data-slot": "accordion-trigger", className: cn("focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", className), ...props, children: [children, !hideChevron && React.isValidElement(customChevron) ? (
19
+ // cloneElement is required here (not the `Slot` pattern) so the merged
20
+ // className goes through `cn()`'s tailwind-merge dedup, and the icon
21
+ // stays the trigger's direct child for the `>svg` CSS selector above.
22
+ // eslint-disable-next-line @eslint-react/no-clone-element
23
+ React.cloneElement(customChevron, chevronProps)) : (_jsx(ChevronDownIcon, { ...chevronProps }))] }) }));
24
+ }
25
+ function AccordionContent({ className, children, ...props }) {
26
+ return (_jsx(AccordionPrimitive.Content, { "data-slot": "accordion-content", className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm", ...props, children: _jsx("div", { className: cn("pt-0 pb-4", className), children: children }) }));
27
+ }
28
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -0,0 +1,15 @@
1
+ import type * as React from "react";
2
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
3
+ declare function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>): React.JSX.Element;
4
+ declare function AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>): React.JSX.Element;
5
+ declare function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>): React.JSX.Element;
6
+ declare function AlertDialogOverlay({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>): React.JSX.Element;
7
+ declare function AlertDialogContent({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Content>): React.JSX.Element;
8
+ declare function AlertDialogHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
+ declare function AlertDialogFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
10
+ declare function AlertDialogTitle({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Title>): React.JSX.Element;
11
+ declare function AlertDialogDescription({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Description>): React.JSX.Element;
12
+ declare function AlertDialogAction({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Action>): React.JSX.Element;
13
+ declare function AlertDialogCancel({ className, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>): React.JSX.Element;
14
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, };
15
+ //# sourceMappingURL=alert-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../src/components/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAC;AAKrE,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,qBAExD;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,qBAI3D;AAED,iBAAS,iBAAiB,CAAC,EACzB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAI1D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,qBAW3D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,qBAc3D;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ7B;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,KAAK,CAAC,qBAQzD;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,WAAW,CAAC,qBAQ/D;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAO1D;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,qBAO1D;AAED,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
4
+ import { buttonVariants } from "@forthtilliath/shadcn-ui/components/button";
5
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
6
+ function AlertDialog({ ...props }) {
7
+ return _jsx(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
8
+ }
9
+ function AlertDialogTrigger({ ...props }) {
10
+ return (_jsx(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props }));
11
+ }
12
+ function AlertDialogPortal({ ...props }) {
13
+ return (_jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props }));
14
+ }
15
+ function AlertDialogOverlay({ className, ...props }) {
16
+ return (_jsx(AlertDialogPrimitive.Overlay, { "data-slot": "alert-dialog-overlay", className: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", className), ...props }));
17
+ }
18
+ function AlertDialogContent({ className, ...props }) {
19
+ return (_jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { "data-slot": "alert-dialog-content", className: cn("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", className), ...props })] }));
20
+ }
21
+ function AlertDialogHeader({ className, ...props }) {
22
+ return (_jsx("div", { "data-slot": "alert-dialog-header", className: cn("flex flex-col gap-2 text-center sm:text-left", className), ...props }));
23
+ }
24
+ function AlertDialogFooter({ className, ...props }) {
25
+ return (_jsx("div", { "data-slot": "alert-dialog-footer", className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className), ...props }));
26
+ }
27
+ function AlertDialogTitle({ className, ...props }) {
28
+ return (_jsx(AlertDialogPrimitive.Title, { "data-slot": "alert-dialog-title", className: cn("text-lg font-semibold", className), ...props }));
29
+ }
30
+ function AlertDialogDescription({ className, ...props }) {
31
+ return (_jsx(AlertDialogPrimitive.Description, { "data-slot": "alert-dialog-description", className: cn("text-muted-foreground text-sm", className), ...props }));
32
+ }
33
+ function AlertDialogAction({ className, ...props }) {
34
+ return (_jsx(AlertDialogPrimitive.Action, { className: cn(buttonVariants(), className), ...props }));
35
+ }
36
+ function AlertDialogCancel({ className, ...props }) {
37
+ return (_jsx(AlertDialogPrimitive.Cancel, { className: cn(buttonVariants({ variant: "outline" }), className), ...props }));
38
+ }
39
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, };
@@ -0,0 +1,10 @@
1
+ import type * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const alertVariants: (props?: ({
4
+ variant?: "default" | "destructive" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>): React.JSX.Element;
7
+ declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
+ export { Alert, AlertDescription, AlertTitle };
10
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/components/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EAclB,CAAC;AAEF,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,qBASlE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cva } from "class-variance-authority";
3
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
4
+ const alertVariants = cva("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", {
5
+ variants: {
6
+ variant: {
7
+ default: "bg-card text-card-foreground",
8
+ destructive: "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90",
9
+ },
10
+ },
11
+ defaultVariants: {
12
+ variant: "default",
13
+ },
14
+ });
15
+ function Alert({ className, variant, ...props }) {
16
+ return (_jsx("div", { "data-slot": "alert", role: "alert", className: cn(alertVariants({ variant }), className), ...props }));
17
+ }
18
+ function AlertTitle({ className, ...props }) {
19
+ return (_jsx("div", { "data-slot": "alert-title", className: cn("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight", className), ...props }));
20
+ }
21
+ function AlertDescription({ className, ...props }) {
22
+ return (_jsx("div", { "data-slot": "alert-description", className: cn("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed", className), ...props }));
23
+ }
24
+ export { Alert, AlertDescription, AlertTitle };
@@ -0,0 +1,4 @@
1
+ import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
2
+ declare function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>): import("react").JSX.Element;
3
+ export { AspectRatio };
4
+ //# sourceMappingURL=aspect-ratio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aspect-ratio.d.ts","sourceRoot":"","sources":["../../src/components/aspect-ratio.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAC;AAErE,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,+BAExD;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
4
+ function AspectRatio({ ...props }) {
5
+ return _jsx(AspectRatioPrimitive.Root, { "data-slot": "aspect-ratio", ...props });
6
+ }
7
+ export { AspectRatio };
@@ -0,0 +1,7 @@
1
+ import type * as React from "react";
2
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
3
+ declare function Avatar({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Root>): React.JSX.Element;
4
+ declare function AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>): React.JSX.Element;
5
+ declare function AvatarFallback({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Fallback>): React.JSX.Element;
6
+ export { Avatar, AvatarFallback, AvatarImage };
7
+ //# sourceMappingURL=avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAI1D,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,qBAWnD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,qBAQpD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,QAAQ,CAAC,qBAWvD;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as AvatarPrimitive from "@radix-ui/react-avatar";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ function Avatar({ className, ...props }) {
6
+ return (_jsx(AvatarPrimitive.Root, { "data-slot": "avatar", className: cn("relative flex size-8 shrink-0 overflow-hidden rounded-full", className), ...props }));
7
+ }
8
+ function AvatarImage({ className, ...props }) {
9
+ return (_jsx(AvatarPrimitive.Image, { "data-slot": "avatar-image", className: cn("aspect-square size-full", className), ...props }));
10
+ }
11
+ function AvatarFallback({ className, ...props }) {
12
+ return (_jsx(AvatarPrimitive.Fallback, { "data-slot": "avatar-fallback", className: cn("bg-muted flex size-full items-center justify-center", className), ...props }));
13
+ }
14
+ export { Avatar, AvatarFallback, AvatarImage };
@@ -0,0 +1,10 @@
1
+ import type * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
7
+ asChild?: boolean;
8
+ }): React.JSX.Element;
9
+ export { Badge, badgeVariants };
10
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/components/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EAmBlB,CAAC;AAEF,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAO,EACP,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAC7B,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,qBAU3D;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ const badgeVariants = cva("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", {
6
+ variants: {
7
+ variant: {
8
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
9
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
10
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
11
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
12
+ },
13
+ },
14
+ defaultVariants: {
15
+ variant: "default",
16
+ },
17
+ });
18
+ function Badge({ className, variant, asChild = false, ...props }) {
19
+ const Comp = asChild ? Slot : "span";
20
+ return (_jsx(Comp, { "data-slot": "badge", className: cn(badgeVariants({ variant }), className), ...props }));
21
+ }
22
+ export { Badge, badgeVariants };
@@ -0,0 +1,56 @@
1
+ import type React from "react";
2
+ import { type AccordionMultipleProps, type AccordionSingleProps } from "@radix-ui/react-accordion";
3
+ import { type VariantProps } from "class-variance-authority";
4
+ import type { LucideProps } from "lucide-react";
5
+ type AccordionVariantType = "default" | "outline" | "box" | "contained" | "box-contained" | "tabs" | "highlight-active";
6
+ type AccordionSizeType = "sm" | "default" | "lg";
7
+ declare const accordionTriggerVariants: (props?: ({
8
+ variant?: "default" | "outline" | "tabs" | "box" | "contained" | "box-contained" | "highlight-active" | null | undefined;
9
+ size?: "default" | "sm" | "lg" | null | undefined;
10
+ disabled?: boolean | null | undefined;
11
+ chevronAlignment?: "left" | "right" | null | undefined;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
+ interface Item {
14
+ title: React.ReactNode;
15
+ subtitle?: React.ReactNode;
16
+ content: React.ReactNode;
17
+ disabled?: boolean;
18
+ }
19
+ interface ItemWithIcon extends Item {
20
+ icon: React.ReactNode;
21
+ }
22
+ interface BaseProps {
23
+ items: Item[] | ItemWithIcon[];
24
+ icon?: React.ReactNode;
25
+ multiple?: boolean;
26
+ hideChevron?: boolean;
27
+ chevronAlignment?: VariantProps<typeof accordionTriggerVariants>["chevronAlignment"];
28
+ customChevron?: React.ReactElement<LucideProps>;
29
+ className?: string;
30
+ classNameItem?: string;
31
+ classNameTrigger?: string;
32
+ classNameContent?: string;
33
+ variant?: AccordionVariantType;
34
+ size?: AccordionSizeType;
35
+ generateId?: (index: number) => string;
36
+ }
37
+ type OmittedProps = "type";
38
+ type SingleProps = BaseProps & Omit<AccordionSingleProps, OmittedProps>;
39
+ type MultipleProps = BaseProps & Omit<AccordionMultipleProps, OmittedProps>;
40
+ type Props = SingleProps | MultipleProps;
41
+ /**
42
+ * A vertically stacked set of interactive headings that each reveal a section of content.
43
+ *
44
+ * @description Inspired from multiple sources, to make a consistent and reusable component.
45
+ * @version 0.0.1
46
+ * @author Forth
47
+ *
48
+ * @see https://ui.shadcn.com/docs/components/accordion
49
+ * @see https://motion-primitives.com/docs/accordion
50
+ * @see https://originui.com/accordion
51
+ * @see https://www.hextaui.com/docs/ui/components/accordion
52
+ * @see https://www.shadcnui-blocks.com/components/accordion
53
+ */
54
+ export declare function Accordion({ multiple, ...props }: Props): React.JSX.Element;
55
+ export {};
56
+ //# sourceMappingURL=accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAUhD,KAAK,oBAAoB,GACrB,SAAS,GACT,SAAS,GACT,KAAK,GACL,WAAW,GACX,eAAe,GACf,MAAM,GACN,kBAAkB,CAAC;AAEvB,KAAK,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;AAkDjD,QAAA,MAAM,wBAAwB;;;;;8EAgC5B,CAAC;AAsBH,UAAU,IAAI;IACZ,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,YAAa,SAAQ,IAAI;IACjC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;CACvB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,YAAY,CAC7B,OAAO,wBAAwB,CAChC,CAAC,kBAAkB,CAAC,CAAC;IACtB,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAGD,KAAK,YAAY,GAAG,MAAM,CAAC;AAC3B,KAAK,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;AACxE,KAAK,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;AAE5E,KAAK,KAAK,GAAG,WAAW,GAAG,aAAa,CAAC;AAEzC;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,qBAUtD"}
@@ -0,0 +1,138 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cva } from "class-variance-authority";
3
+ import { Accordion as AccordionPrimitive, AccordionContent, AccordionItem, AccordionTrigger, } from "@forthtilliath/shadcn-ui/components/accordion";
4
+ import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
5
+ const accordionRootVariants = cva("max-w-lg my-4 w-full", {
6
+ variants: {
7
+ variant: {
8
+ default: "space-y-2",
9
+ outline: "space-y-2",
10
+ box: "",
11
+ contained: "space-y-2",
12
+ "box-contained": "",
13
+ tabs: "space-y-2",
14
+ "highlight-active": "space-y-2",
15
+ },
16
+ size: {
17
+ sm: "text-sm",
18
+ default: "text-[15px]",
19
+ lg: "text-lg",
20
+ },
21
+ },
22
+ defaultVariants: {
23
+ variant: "default",
24
+ size: "default",
25
+ },
26
+ });
27
+ const accordionItemVariants = cva("", {
28
+ variants: {
29
+ variant: {
30
+ default: "",
31
+ outline: "px-4 border rounded-md last:border-b",
32
+ box: "px-4 border border-b-0 last:border-b first:rounded-t-md last:rounded-b-md",
33
+ contained: "px-4 border-none rounded-md bg-secondary",
34
+ "box-contained": "px-4 last:border-none first:rounded-t-md last:rounded-b-md bg-muted",
35
+ tabs: "px-4 border-none rounded-md data-[state=open]:bg-secondary",
36
+ "highlight-active": "px-4 data-[state=open]:border-b-2 data-[state=open]:border-indigo-600 dark:data-[state=open]:border-indigo-500",
37
+ },
38
+ size: {
39
+ sm: "px-2",
40
+ default: "",
41
+ lg: "px-6",
42
+ },
43
+ },
44
+ defaultVariants: {
45
+ variant: "default",
46
+ size: "default",
47
+ },
48
+ });
49
+ const accordionTriggerVariants = cva("hover:no-underline group items-center", {
50
+ variants: {
51
+ variant: {
52
+ default: "",
53
+ outline: "",
54
+ box: "",
55
+ contained: "",
56
+ "box-contained": "",
57
+ tabs: "data-[state=closed]:py-2",
58
+ "highlight-active": "data-[state=open]:text-indigo-600 dark:data-[state=open]:text-indigo-500",
59
+ },
60
+ size: {
61
+ sm: "py-3 text-sm [&_[data-slot=subtitle]]:text-xs",
62
+ default: "py-4 text-[15px] [&_[data-slot=subtitle]]:text-sm",
63
+ lg: "py-5 text-lg [&_[data-slot=subtitle]]:text-base",
64
+ },
65
+ disabled: {
66
+ false: "",
67
+ true: "opacity-50",
68
+ },
69
+ chevronAlignment: {
70
+ right: "",
71
+ left: "flex-row-reverse",
72
+ },
73
+ },
74
+ defaultVariants: {
75
+ variant: "default",
76
+ size: "default",
77
+ disabled: false,
78
+ chevronAlignment: "right",
79
+ },
80
+ });
81
+ const accordionContentVariants = cva("", {
82
+ variants: {
83
+ variant: {
84
+ default: "",
85
+ outline: "",
86
+ box: "",
87
+ contained: "",
88
+ "box-contained": "",
89
+ tabs: "",
90
+ "highlight-active": "",
91
+ },
92
+ size: {
93
+ sm: "pb-3 text-sm",
94
+ default: "pb-4 text-[15px]",
95
+ lg: "pb-5 text-lg",
96
+ },
97
+ },
98
+ defaultVariants: { variant: "default", size: "default" },
99
+ });
100
+ /**
101
+ * A vertically stacked set of interactive headings that each reveal a section of content.
102
+ *
103
+ * @description Inspired from multiple sources, to make a consistent and reusable component.
104
+ * @version 0.0.1
105
+ * @author Forth
106
+ *
107
+ * @see https://ui.shadcn.com/docs/components/accordion
108
+ * @see https://motion-primitives.com/docs/accordion
109
+ * @see https://originui.com/accordion
110
+ * @see https://www.hextaui.com/docs/ui/components/accordion
111
+ * @see https://www.shadcnui-blocks.com/components/accordion
112
+ */
113
+ export function Accordion({ multiple, ...props }) {
114
+ if (props.icon && props.items.some((item) => "icon" in item && item.icon)) {
115
+ throw new Error("You can't use both icon and items.icon");
116
+ }
117
+ return multiple ? (_jsx(AccordionMultiple, { ...props })) : (_jsx(AccordionSingle, { ...props }));
118
+ }
119
+ function AccordionSingle({ className, variant, size, hideChevron, chevronAlignment, customChevron, items, icon, classNameItem, classNameTrigger, classNameContent, generateId, ...props }) {
120
+ return (_jsx(AccordionPrimitive, { type: "single", className: cn(accordionRootVariants({ variant, size }), className), ...props, children: _jsx(Items, { variant: variant, size: size, hideChevron: hideChevron, chevronAlignment: chevronAlignment, customChevron: customChevron, items: items, icon: icon, classNameItem: classNameItem, classNameTrigger: classNameTrigger, classNameContent: classNameContent, generateId: generateId }) }));
121
+ }
122
+ function AccordionMultiple({ className, variant, size, hideChevron, chevronAlignment, customChevron, items, icon, classNameItem, classNameTrigger, classNameContent, generateId, ...props }) {
123
+ return (_jsx(AccordionPrimitive, { type: "multiple", className: cn(accordionRootVariants({ variant, size }), className), ...props, children: _jsx(Items, { variant: variant, size: size, hideChevron: hideChevron, chevronAlignment: chevronAlignment, customChevron: customChevron, items: items, icon: icon, classNameItem: classNameItem, classNameTrigger: classNameTrigger, classNameContent: classNameContent, generateId: generateId }) }));
124
+ }
125
+ function Items({ hideChevron, chevronAlignment, customChevron, items, icon, classNameItem, classNameTrigger, classNameContent, variant, size, generateId = (index) => `item-${String(index)}`, }) {
126
+ return items.map(({ title, subtitle, content, disabled, ...props }, index) => {
127
+ let iconItem = icon;
128
+ if ("icon" in props)
129
+ iconItem = props.icon;
130
+ const triggerItem = (_jsxs("div", { className: "flex-1 flex flex-col text-start", children: [_jsx("span", { "data-slot": "title", className: "group-hover:underline [&_svg]:-order-1", children: title }), Boolean(subtitle) && (_jsx("span", { "data-slot": "subtitle", className: "text-muted-foreground font-normal", children: subtitle }))] }));
131
+ return (_jsxs(AccordionItem, { value: generateId(index), className: cn(accordionItemVariants({ variant, size }), classNameItem), children: [_jsx(AccordionTrigger, { disabled: disabled, hideChevron: hideChevron, customChevron: customChevron, className: cn(accordionTriggerVariants({
132
+ variant,
133
+ size,
134
+ disabled,
135
+ chevronAlignment,
136
+ }), classNameTrigger), children: iconItem ? (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { "data-slot": "icon", className: "shrink-0", children: iconItem }), triggerItem] })) : (triggerItem) }), _jsx(AccordionContent, { className: cn(accordionContentVariants({ variant, size }), classNameContent), children: content })] }, index));
137
+ });
138
+ }
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import { type Transition } from "motion/react";
3
+ interface Tab {
4
+ label: string;
5
+ value: string;
6
+ component: React.ReactNode;
7
+ }
8
+ interface AnimatedTabsProps<T extends readonly [Tab, ...Tab[]]> {
9
+ tabs: T;
10
+ defaultTabValue?: T[number]["value"];
11
+ options?: {
12
+ transition?: Transition;
13
+ };
14
+ }
15
+ export declare function AnimatedTabs<T extends readonly [Tab, ...Tab[]]>({ tabs, defaultTabValue, options: opt, }: AnimatedTabsProps<T>): React.JSX.Element;
16
+ export {};
17
+ //# sourceMappingURL=animated-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animated-tabs.d.ts","sourceRoot":"","sources":["../../../src/components/blocks/animated-tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAMxE,UAAU,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,UAAU,iBAAiB,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC;IACR,eAAe,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB,CAAC;CACH;AAoLD,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,EAC/D,IAAI,EACJ,eAAe,EACf,OAAO,EAAE,GAAQ,GAClB,EAAE,iBAAiB,CAAC,CAAC,CAAC,qBAsBtB"}