@shepai/cli 1.2.0 → 1.3.1

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 (208) hide show
  1. package/README.md +29 -12
  2. package/dist/eslint.config.d.mts +3 -0
  3. package/dist/eslint.config.d.mts.map +1 -0
  4. package/dist/eslint.config.mjs +188 -0
  5. package/dist/src/application/ports/output/index.d.ts +8 -0
  6. package/dist/src/application/ports/output/index.d.ts.map +1 -0
  7. package/dist/src/application/ports/output/index.js +7 -0
  8. package/dist/src/application/ports/output/settings.repository.interface.d.ts +43 -0
  9. package/dist/src/application/ports/output/settings.repository.interface.d.ts.map +1 -0
  10. package/dist/src/application/ports/output/settings.repository.interface.js +11 -0
  11. package/dist/src/application/use-cases/settings/index.d.ts +9 -0
  12. package/dist/src/application/use-cases/settings/index.d.ts.map +1 -0
  13. package/dist/src/application/use-cases/settings/index.js +8 -0
  14. package/dist/src/application/use-cases/settings/initialize-settings.use-case.d.ts +33 -0
  15. package/dist/src/application/use-cases/settings/initialize-settings.use-case.d.ts.map +1 -0
  16. package/dist/src/application/use-cases/settings/initialize-settings.use-case.js +63 -0
  17. package/dist/src/application/use-cases/settings/load-settings.use-case.d.ts +33 -0
  18. package/dist/src/application/use-cases/settings/load-settings.use-case.d.ts.map +1 -0
  19. package/dist/src/application/use-cases/settings/load-settings.use-case.js +57 -0
  20. package/dist/src/application/use-cases/settings/update-settings.use-case.d.ts +33 -0
  21. package/dist/src/application/use-cases/settings/update-settings.use-case.d.ts.map +1 -0
  22. package/dist/src/application/use-cases/settings/update-settings.use-case.js +56 -0
  23. package/dist/src/domain/factories/index.d.ts +7 -0
  24. package/dist/src/domain/factories/index.d.ts.map +1 -0
  25. package/dist/src/domain/factories/index.js +6 -0
  26. package/dist/src/domain/factories/settings-defaults.factory.d.ts +36 -0
  27. package/dist/src/domain/factories/settings-defaults.factory.d.ts.map +1 -0
  28. package/dist/src/domain/factories/settings-defaults.factory.js +81 -0
  29. package/dist/src/domain/generated/output.d.ts +717 -0
  30. package/dist/src/domain/generated/output.d.ts.map +1 -0
  31. package/dist/src/domain/generated/output.js +93 -0
  32. package/dist/src/index.d.ts.map +1 -0
  33. package/dist/src/infrastructure/di/container.d.ts +27 -0
  34. package/dist/src/infrastructure/di/container.d.ts.map +1 -0
  35. package/dist/src/infrastructure/di/container.js +53 -0
  36. package/dist/src/infrastructure/persistence/sqlite/connection.d.ts +39 -0
  37. package/dist/src/infrastructure/persistence/sqlite/connection.d.ts.map +1 -0
  38. package/dist/src/infrastructure/persistence/sqlite/connection.js +76 -0
  39. package/dist/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +50 -0
  40. package/dist/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -0
  41. package/dist/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +80 -0
  42. package/dist/src/infrastructure/persistence/sqlite/migrations.d.ts +31 -0
  43. package/dist/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -0
  44. package/dist/src/infrastructure/persistence/sqlite/migrations.js +66 -0
  45. package/dist/src/infrastructure/repositories/sqlite-settings.repository.d.ts +40 -0
  46. package/dist/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -0
  47. package/dist/src/infrastructure/repositories/sqlite-settings.repository.js +123 -0
  48. package/dist/src/infrastructure/services/filesystem/shep-directory.service.d.ts +41 -0
  49. package/dist/src/infrastructure/services/filesystem/shep-directory.service.d.ts.map +1 -0
  50. package/dist/src/infrastructure/services/filesystem/shep-directory.service.js +64 -0
  51. package/dist/src/infrastructure/services/settings.service.d.ts +50 -0
  52. package/dist/src/infrastructure/services/settings.service.d.ts.map +1 -0
  53. package/dist/src/infrastructure/services/settings.service.js +67 -0
  54. package/dist/src/infrastructure/services/version.service.d.ts.map +1 -0
  55. package/dist/src/presentation/cli/commands/version.command.d.ts.map +1 -0
  56. package/dist/{presentation → src/presentation}/cli/index.d.ts +1 -1
  57. package/dist/src/presentation/cli/index.d.ts.map +1 -0
  58. package/dist/src/presentation/cli/index.js +86 -0
  59. package/dist/src/presentation/cli/ui/colors.d.ts.map +1 -0
  60. package/dist/src/presentation/cli/ui/formatters.d.ts.map +1 -0
  61. package/dist/src/presentation/cli/ui/index.d.ts.map +1 -0
  62. package/dist/src/presentation/cli/ui/messages.d.ts.map +1 -0
  63. package/dist/src/presentation/cli/ui/symbols.d.ts.map +1 -0
  64. package/dist/src/presentation/web/app/layout.d.ts +7 -0
  65. package/dist/src/presentation/web/app/layout.d.ts.map +1 -0
  66. package/dist/src/presentation/web/app/layout.js +21 -0
  67. package/dist/src/presentation/web/app/not-found.d.ts +2 -0
  68. package/dist/src/presentation/web/app/not-found.d.ts.map +1 -0
  69. package/dist/src/presentation/web/app/not-found.js +4 -0
  70. package/dist/src/presentation/web/app/page.d.ts +2 -0
  71. package/dist/src/presentation/web/app/page.d.ts.map +1 -0
  72. package/dist/src/presentation/web/app/page.js +6 -0
  73. package/dist/src/presentation/web/app/version/page.d.ts +2 -0
  74. package/dist/src/presentation/web/app/version/page.d.ts.map +1 -0
  75. package/dist/src/presentation/web/app/version/page.js +16 -0
  76. package/dist/src/presentation/web/components/features/index.d.ts +2 -0
  77. package/dist/src/presentation/web/components/features/index.d.ts.map +1 -0
  78. package/dist/src/presentation/web/components/features/index.js +2 -0
  79. package/dist/src/presentation/web/components/features/theme-toggle/index.d.ts +2 -0
  80. package/dist/src/presentation/web/components/features/theme-toggle/index.d.ts.map +1 -0
  81. package/dist/src/presentation/web/components/features/theme-toggle/index.js +1 -0
  82. package/dist/src/presentation/web/components/features/theme-toggle/theme-toggle.d.ts +2 -0
  83. package/dist/src/presentation/web/components/features/theme-toggle/theme-toggle.d.ts.map +1 -0
  84. package/dist/src/presentation/web/components/features/theme-toggle/theme-toggle.js +19 -0
  85. package/dist/src/presentation/web/components/features/theme-toggle/theme-toggle.stories.d.ts +8 -0
  86. package/dist/src/presentation/web/components/features/theme-toggle/theme-toggle.stories.d.ts.map +1 -0
  87. package/dist/src/presentation/web/components/features/theme-toggle/theme-toggle.stories.js +17 -0
  88. package/dist/src/presentation/web/components/ui/accordion.d.ts +8 -0
  89. package/dist/src/presentation/web/components/ui/accordion.d.ts.map +1 -0
  90. package/dist/src/presentation/web/components/ui/accordion.js +14 -0
  91. package/dist/src/presentation/web/components/ui/accordion.stories.d.ts +29 -0
  92. package/dist/src/presentation/web/components/ui/accordion.stories.d.ts.map +1 -0
  93. package/dist/src/presentation/web/components/ui/accordion.stories.js +35 -0
  94. package/dist/src/presentation/web/components/ui/alert.d.ts +9 -0
  95. package/dist/src/presentation/web/components/ui/alert.d.ts.map +1 -0
  96. package/dist/src/presentation/web/components/ui/alert.js +22 -0
  97. package/dist/src/presentation/web/components/ui/alert.stories.d.ts +10 -0
  98. package/dist/src/presentation/web/components/ui/alert.stories.d.ts.map +1 -0
  99. package/dist/src/presentation/web/components/ui/alert.stories.js +30 -0
  100. package/dist/src/presentation/web/components/ui/badge.d.ts +10 -0
  101. package/dist/src/presentation/web/components/ui/badge.d.ts.map +1 -0
  102. package/dist/src/presentation/web/components/ui/badge.js +20 -0
  103. package/dist/src/presentation/web/components/ui/badge.stories.d.ts +11 -0
  104. package/dist/src/presentation/web/components/ui/badge.stories.d.ts.map +1 -0
  105. package/dist/src/presentation/web/components/ui/badge.stories.js +44 -0
  106. package/dist/src/presentation/web/components/ui/button.d.ts +12 -0
  107. package/dist/src/presentation/web/components/ui/button.d.ts.map +1 -0
  108. package/dist/src/presentation/web/components/ui/button.js +33 -0
  109. package/dist/src/presentation/web/components/ui/button.stories.d.ts +17 -0
  110. package/dist/src/presentation/web/components/ui/button.stories.d.ts.map +1 -0
  111. package/dist/src/presentation/web/components/ui/button.stories.js +84 -0
  112. package/dist/src/presentation/web/components/ui/card.d.ts +9 -0
  113. package/dist/src/presentation/web/components/ui/card.d.ts.map +1 -0
  114. package/dist/src/presentation/web/components/ui/card.js +16 -0
  115. package/dist/src/presentation/web/components/ui/card.stories.d.ts +10 -0
  116. package/dist/src/presentation/web/components/ui/card.stories.d.ts.map +1 -0
  117. package/dist/src/presentation/web/components/ui/card.stories.js +24 -0
  118. package/dist/src/presentation/web/components/ui/dialog.d.ts +20 -0
  119. package/dist/src/presentation/web/components/ui/dialog.d.ts.map +1 -0
  120. package/dist/src/presentation/web/components/ui/dialog.js +23 -0
  121. package/dist/src/presentation/web/components/ui/dialog.stories.d.ts +9 -0
  122. package/dist/src/presentation/web/components/ui/dialog.stories.d.ts.map +1 -0
  123. package/dist/src/presentation/web/components/ui/dialog.stories.js +23 -0
  124. package/dist/src/presentation/web/components/ui/index.d.ts +13 -0
  125. package/dist/src/presentation/web/components/ui/index.d.ts.map +1 -0
  126. package/dist/src/presentation/web/components/ui/index.js +14 -0
  127. package/dist/src/presentation/web/components/ui/input.d.ts +4 -0
  128. package/dist/src/presentation/web/components/ui/input.d.ts.map +1 -0
  129. package/dist/src/presentation/web/components/ui/input.js +8 -0
  130. package/dist/src/presentation/web/components/ui/input.stories.d.ts +13 -0
  131. package/dist/src/presentation/web/components/ui/input.stories.d.ts.map +1 -0
  132. package/dist/src/presentation/web/components/ui/input.stories.js +55 -0
  133. package/dist/src/presentation/web/components/ui/label.d.ts +6 -0
  134. package/dist/src/presentation/web/components/ui/label.d.ts.map +1 -0
  135. package/dist/src/presentation/web/components/ui/label.js +10 -0
  136. package/dist/src/presentation/web/components/ui/label.stories.d.ts +9 -0
  137. package/dist/src/presentation/web/components/ui/label.stories.d.ts.map +1 -0
  138. package/dist/src/presentation/web/components/ui/label.stories.js +23 -0
  139. package/dist/src/presentation/web/components/ui/popover.d.ts +8 -0
  140. package/dist/src/presentation/web/components/ui/popover.d.ts.map +1 -0
  141. package/dist/src/presentation/web/components/ui/popover.js +11 -0
  142. package/dist/src/presentation/web/components/ui/popover.stories.d.ts +10 -0
  143. package/dist/src/presentation/web/components/ui/popover.stories.d.ts.map +1 -0
  144. package/dist/src/presentation/web/components/ui/popover.stories.js +26 -0
  145. package/dist/src/presentation/web/components/ui/select.d.ts +14 -0
  146. package/dist/src/presentation/web/components/ui/select.d.ts.map +1 -0
  147. package/dist/src/presentation/web/components/ui/select.js +26 -0
  148. package/dist/src/presentation/web/components/ui/select.stories.d.ts +10 -0
  149. package/dist/src/presentation/web/components/ui/select.stories.d.ts.map +1 -0
  150. package/dist/src/presentation/web/components/ui/select.stories.js +23 -0
  151. package/dist/src/presentation/web/components/ui/sonner.d.ts +5 -0
  152. package/dist/src/presentation/web/components/ui/sonner.d.ts.map +1 -0
  153. package/dist/src/presentation/web/components/ui/sonner.js +14 -0
  154. package/dist/src/presentation/web/components/ui/sonner.stories.d.ts +13 -0
  155. package/dist/src/presentation/web/components/ui/sonner.stories.d.ts.map +1 -0
  156. package/dist/src/presentation/web/components/ui/sonner.stories.js +51 -0
  157. package/dist/src/presentation/web/components/ui/tabs.d.ts +8 -0
  158. package/dist/src/presentation/web/components/ui/tabs.d.ts.map +1 -0
  159. package/dist/src/presentation/web/components/ui/tabs.js +13 -0
  160. package/dist/src/presentation/web/components/ui/tabs.stories.d.ts +9 -0
  161. package/dist/src/presentation/web/components/ui/tabs.stories.d.ts.map +1 -0
  162. package/dist/src/presentation/web/components/ui/tabs.stories.js +23 -0
  163. package/dist/src/presentation/web/eslint.config.d.mts +3 -0
  164. package/dist/src/presentation/web/eslint.config.d.mts.map +1 -0
  165. package/dist/src/presentation/web/eslint.config.mjs +15 -0
  166. package/dist/src/presentation/web/hooks/useTheme.d.ts +12 -0
  167. package/dist/src/presentation/web/hooks/useTheme.d.ts.map +1 -0
  168. package/dist/src/presentation/web/hooks/useTheme.js +73 -0
  169. package/dist/src/presentation/web/lib/utils.d.ts +11 -0
  170. package/dist/src/presentation/web/lib/utils.d.ts.map +1 -0
  171. package/dist/src/presentation/web/lib/utils.js +13 -0
  172. package/dist/src/presentation/web/next.config.d.ts +4 -0
  173. package/dist/src/presentation/web/next.config.d.ts.map +1 -0
  174. package/dist/src/presentation/web/next.config.js +9 -0
  175. package/dist/src/presentation/web/postcss.config.d.mts +4 -0
  176. package/dist/src/presentation/web/postcss.config.d.mts.map +1 -0
  177. package/dist/src/presentation/web/postcss.config.mjs +8 -0
  178. package/dist/src/presentation/web/types/theme.d.ts +12 -0
  179. package/dist/src/presentation/web/types/theme.d.ts.map +1 -0
  180. package/dist/src/presentation/web/types/theme.js +5 -0
  181. package/dist/tsconfig.build.tsbuildinfo +1 -0
  182. package/package.json +60 -12
  183. package/dist/index.d.ts.map +0 -1
  184. package/dist/infrastructure/services/version.service.d.ts.map +0 -1
  185. package/dist/presentation/cli/commands/version.command.d.ts.map +0 -1
  186. package/dist/presentation/cli/index.d.ts.map +0 -1
  187. package/dist/presentation/cli/index.js +0 -48
  188. package/dist/presentation/cli/ui/colors.d.ts.map +0 -1
  189. package/dist/presentation/cli/ui/formatters.d.ts.map +0 -1
  190. package/dist/presentation/cli/ui/index.d.ts.map +0 -1
  191. package/dist/presentation/cli/ui/messages.d.ts.map +0 -1
  192. package/dist/presentation/cli/ui/symbols.d.ts.map +0 -1
  193. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  194. /package/dist/{index.js → src/index.js} +0 -0
  195. /package/dist/{infrastructure → src/infrastructure}/services/version.service.d.ts +0 -0
  196. /package/dist/{infrastructure → src/infrastructure}/services/version.service.js +0 -0
  197. /package/dist/{presentation → src/presentation}/cli/commands/version.command.d.ts +0 -0
  198. /package/dist/{presentation → src/presentation}/cli/commands/version.command.js +0 -0
  199. /package/dist/{presentation → src/presentation}/cli/ui/colors.d.ts +0 -0
  200. /package/dist/{presentation → src/presentation}/cli/ui/colors.js +0 -0
  201. /package/dist/{presentation → src/presentation}/cli/ui/formatters.d.ts +0 -0
  202. /package/dist/{presentation → src/presentation}/cli/ui/formatters.js +0 -0
  203. /package/dist/{presentation → src/presentation}/cli/ui/index.d.ts +0 -0
  204. /package/dist/{presentation → src/presentation}/cli/ui/index.js +0 -0
  205. /package/dist/{presentation → src/presentation}/cli/ui/messages.d.ts +0 -0
  206. /package/dist/{presentation → src/presentation}/cli/ui/messages.js +0 -0
  207. /package/dist/{presentation → src/presentation}/cli/ui/symbols.d.ts +0 -0
  208. /package/dist/{presentation → src/presentation}/cli/ui/symbols.js +0 -0
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from './dialog';
3
+ import { Button } from './button';
4
+ import { Input } from './input';
5
+ import { Label } from './label';
6
+ const meta = {
7
+ title: 'UI/Dialog',
8
+ component: Dialog,
9
+ parameters: {
10
+ layout: 'centered',
11
+ },
12
+ tags: ['autodocs'],
13
+ };
14
+ export default meta;
15
+ export const Default = {
16
+ render: () => (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Open Dialog" }) }), _jsxs(DialogContent, { className: "sm:max-w-[425px]", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Edit profile" }), _jsx(DialogDescription, { children: "Make changes to your profile here. Click save when you're done." })] }), _jsxs("div", { className: "grid gap-4 py-4", children: [_jsxs("div", { className: "grid grid-cols-4 items-center gap-4", children: [_jsx(Label, { htmlFor: "name", className: "text-right", children: "Name" }), _jsx(Input, { id: "name", defaultValue: "Pedro Duarte", className: "col-span-3" })] }), _jsxs("div", { className: "grid grid-cols-4 items-center gap-4", children: [_jsx(Label, { htmlFor: "username", className: "text-right", children: "Username" }), _jsx(Input, { id: "username", defaultValue: "@peduarte", className: "col-span-3" })] })] }), _jsx(DialogFooter, { children: _jsx(Button, { type: "submit", children: "Save changes" }) })] })] })),
17
+ };
18
+ export const WithForm = {
19
+ render: () => (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsx(Button, { children: "Create Account" }) }), _jsxs(DialogContent, { className: "sm:max-w-[425px]", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Create account" }), _jsx(DialogDescription, { children: "Enter your email below to create your account." })] }), _jsxs("div", { className: "grid gap-4 py-4", children: [_jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "email", children: "Email" }), _jsx(Input, { id: "email", type: "email", placeholder: "m@example.com" })] }), _jsxs("div", { className: "grid gap-2", children: [_jsx(Label, { htmlFor: "password", children: "Password" }), _jsx(Input, { id: "password", type: "password" })] })] }), _jsx(DialogFooter, { children: _jsx(Button, { type: "submit", className: "w-full", children: "Create account" }) })] })] })),
20
+ };
21
+ export const Confirmation = {
22
+ render: () => (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsx(Button, { variant: "destructive", children: "Delete Account" }) }), _jsxs(DialogContent, { className: "sm:max-w-[425px]", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Are you absolutely sure?" }), _jsx(DialogDescription, { children: "This action cannot be undone. This will permanently delete your account and remove your data from our servers." })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "outline", children: "Cancel" }), _jsx(Button, { variant: "destructive", children: "Delete" })] })] })] })),
23
+ };
@@ -0,0 +1,13 @@
1
+ export { Button, buttonVariants, type ButtonProps } from './button';
2
+ export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } from './card';
3
+ export { Input } from './input';
4
+ export { Label } from './label';
5
+ export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, } from './select';
6
+ export { Dialog, DialogPortal, DialogOverlay, DialogTrigger, DialogClose, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, } from './dialog';
7
+ export { Badge, badgeVariants, type BadgeProps } from './badge';
8
+ export { Alert, AlertTitle, AlertDescription } from './alert';
9
+ export { Tabs, TabsList, TabsTrigger, TabsContent } from './tabs';
10
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from './accordion';
11
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from './popover';
12
+ export { Toaster } from './sonner';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC/F,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ // Core components
2
+ export { Button, buttonVariants } from './button';
3
+ export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } from './card';
4
+ export { Input } from './input';
5
+ export { Label } from './label';
6
+ export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, } from './select';
7
+ export { Dialog, DialogPortal, DialogOverlay, DialogTrigger, DialogClose, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, } from './dialog';
8
+ // Additional components
9
+ export { Badge, badgeVariants } from './badge';
10
+ export { Alert, AlertTitle, AlertDescription } from './alert';
11
+ export { Tabs, TabsList, TabsTrigger, TabsContent } from './tabs';
12
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from './accordion';
13
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor } from './popover';
14
+ export { Toaster } from './sonner';
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ declare const Input: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
3
+ export { Input };
4
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,KAAK,8KAcV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { cn } from '@/lib/utils';
4
+ const Input = React.forwardRef(({ className, type, ...props }, ref) => {
5
+ return (_jsx("input", { type: type, className: cn('border-input file:text-foreground placeholder:text-muted-foreground focus-visible:ring-ring flex h-9 w-full rounded-md border bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-1 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', className), ref: ref, ...props }));
6
+ });
7
+ Input.displayName = 'Input';
8
+ export { Input };
@@ -0,0 +1,13 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Input } from './input';
3
+ declare const meta: Meta<typeof Input>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Email: Story;
8
+ export declare const Password: Story;
9
+ export declare const Disabled: Story;
10
+ export declare const WithLabel: Story;
11
+ export declare const WithValue: Story;
12
+ export declare const File: Story;
13
+ //# sourceMappingURL=input.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/input.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,KAAK,CAgB5B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAIvB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAOlB,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Input } from './input';
3
+ import { Label } from './label';
4
+ const meta = {
5
+ title: 'UI/Input',
6
+ component: Input,
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+ tags: ['autodocs'],
11
+ argTypes: {
12
+ type: {
13
+ control: 'select',
14
+ options: ['text', 'email', 'password', 'number', 'search', 'tel', 'url'],
15
+ },
16
+ disabled: {
17
+ control: 'boolean',
18
+ },
19
+ },
20
+ };
21
+ export default meta;
22
+ export const Default = {
23
+ args: {
24
+ placeholder: 'Enter text...',
25
+ },
26
+ };
27
+ export const Email = {
28
+ args: {
29
+ type: 'email',
30
+ placeholder: 'Email address',
31
+ },
32
+ };
33
+ export const Password = {
34
+ args: {
35
+ type: 'password',
36
+ placeholder: 'Password',
37
+ },
38
+ };
39
+ export const Disabled = {
40
+ args: {
41
+ disabled: true,
42
+ placeholder: 'Disabled input',
43
+ },
44
+ };
45
+ export const WithLabel = {
46
+ render: () => (_jsxs("div", { className: "grid w-full max-w-sm items-center gap-1.5", children: [_jsx(Label, { htmlFor: "email", children: "Email" }), _jsx(Input, { type: "email", id: "email", placeholder: "Email" })] })),
47
+ };
48
+ export const WithValue = {
49
+ args: {
50
+ defaultValue: 'Hello World',
51
+ },
52
+ };
53
+ export const File = {
54
+ render: () => (_jsxs("div", { className: "grid w-full max-w-sm items-center gap-1.5", children: [_jsx(Label, { htmlFor: "picture", children: "Picture" }), _jsx(Input, { id: "picture", type: "file" })] })),
55
+ };
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ import { Label as LabelPrimitive } from 'radix-ui';
3
+ import { type VariantProps } from 'class-variance-authority';
4
+ declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: import("class-variance-authority/types").ClassProp | undefined) => string> & React.RefAttributes<HTMLLabelElement>>;
5
+ export { Label };
6
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/label.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQlE,QAAA,MAAM,KAAK,4PAKT,CAAC;AAGH,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Label as LabelPrimitive } from 'radix-ui';
5
+ import { cva } from 'class-variance-authority';
6
+ import { cn } from '@/lib/utils';
7
+ const labelVariants = cva('text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70');
8
+ const Label = React.forwardRef(({ className, ...props }, ref) => (_jsx(LabelPrimitive.Root, { ref: ref, className: cn(labelVariants(), className), ...props })));
9
+ Label.displayName = LabelPrimitive.Root.displayName;
10
+ export { Label };
@@ -0,0 +1,9 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Label } from './label';
3
+ declare const meta: Meta<typeof Label>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const WithInput: Story;
8
+ export declare const Required: Story;
9
+ //# sourceMappingURL=label.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/label.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,KAAK,CAO5B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Label } from './label';
3
+ import { Input } from './input';
4
+ const meta = {
5
+ title: 'UI/Label',
6
+ component: Label,
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+ tags: ['autodocs'],
11
+ };
12
+ export default meta;
13
+ export const Default = {
14
+ args: {
15
+ children: 'Label text',
16
+ },
17
+ };
18
+ export const WithInput = {
19
+ render: () => (_jsxs("div", { className: "grid w-full max-w-sm items-center gap-1.5", children: [_jsx(Label, { htmlFor: "name", children: "Your name" }), _jsx(Input, { id: "name", placeholder: "John Doe" })] })),
20
+ };
21
+ export const Required = {
22
+ render: () => (_jsxs("div", { className: "grid w-full max-w-sm items-center gap-1.5", children: [_jsxs(Label, { htmlFor: "email", children: ["Email ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx(Input, { id: "email", type: "email", placeholder: "you@example.com", required: true })] })),
23
+ };
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { Popover as PopoverPrimitive } from 'radix-ui';
3
+ declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
4
+ declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
6
+ declare const PopoverContent: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
8
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIvD,QAAA,MAAM,OAAO,yCAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAEhD,QAAA,MAAM,aAAa,4GAA0B,CAAC;AAE9C,QAAA,MAAM,cAAc,gKAgBlB,CAAC;AAGH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Popover as PopoverPrimitive } from 'radix-ui';
5
+ import { cn } from '@/lib/utils';
6
+ const Popover = PopoverPrimitive.Root;
7
+ const PopoverTrigger = PopoverPrimitive.Trigger;
8
+ const PopoverAnchor = PopoverPrimitive.Anchor;
9
+ const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, className: cn('bg-popover text-popover-foreground 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 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none', className), ...props }) })));
10
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
11
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Popover } from './popover';
3
+ declare const meta: Meta<typeof Popover>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Simple: Story;
8
+ export declare const TopPlacement: Story;
9
+ export declare const RightPlacement: Story;
10
+ //# sourceMappingURL=popover.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/popover.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAkC,MAAM,WAAW,CAAC;AAKpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAO9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAkCrB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAWpB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAW1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Popover, PopoverContent, PopoverTrigger } from './popover';
3
+ import { Button } from './button';
4
+ import { Input } from './input';
5
+ import { Label } from './label';
6
+ const meta = {
7
+ title: 'UI/Popover',
8
+ component: Popover,
9
+ parameters: {
10
+ layout: 'centered',
11
+ },
12
+ tags: ['autodocs'],
13
+ };
14
+ export default meta;
15
+ export const Default = {
16
+ render: () => (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Open popover" }) }), _jsx(PopoverContent, { className: "w-80", children: _jsxs("div", { className: "grid gap-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("h4", { className: "leading-none font-medium", children: "Dimensions" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Set the dimensions for the layer." })] }), _jsxs("div", { className: "grid gap-2", children: [_jsxs("div", { className: "grid grid-cols-3 items-center gap-4", children: [_jsx(Label, { htmlFor: "width", children: "Width" }), _jsx(Input, { id: "width", defaultValue: "100%", className: "col-span-2 h-8" })] }), _jsxs("div", { className: "grid grid-cols-3 items-center gap-4", children: [_jsx(Label, { htmlFor: "maxWidth", children: "Max. width" }), _jsx(Input, { id: "maxWidth", defaultValue: "300px", className: "col-span-2 h-8" })] }), _jsxs("div", { className: "grid grid-cols-3 items-center gap-4", children: [_jsx(Label, { htmlFor: "height", children: "Height" }), _jsx(Input, { id: "height", defaultValue: "25px", className: "col-span-2 h-8" })] }), _jsxs("div", { className: "grid grid-cols-3 items-center gap-4", children: [_jsx(Label, { htmlFor: "maxHeight", children: "Max. height" }), _jsx(Input, { id: "maxHeight", defaultValue: "none", className: "col-span-2 h-8" })] })] })] }) })] })),
17
+ };
18
+ export const Simple = {
19
+ render: () => (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { children: "Click me" }) }), _jsx(PopoverContent, { children: _jsx("p", { children: "This is a simple popover with some text content." }) })] })),
20
+ };
21
+ export const TopPlacement = {
22
+ render: () => (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Open top" }) }), _jsx(PopoverContent, { side: "top", children: _jsx("p", { children: "This popover appears above the trigger." }) })] })),
23
+ };
24
+ export const RightPlacement = {
25
+ render: () => (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Open right" }) }), _jsx(PopoverContent, { side: "right", children: _jsx("p", { children: "This popover appears to the right of the trigger." }) })] })),
26
+ };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { Select as SelectPrimitive } from 'radix-ui';
3
+ declare const Select: React.FC<SelectPrimitive.SelectProps>;
4
+ declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
5
+ declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
6
+ declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
+ declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
+ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
14
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,UAAU,CAAC;AAKrD,QAAA,MAAM,MAAM,uCAAuB,CAAC;AAEpC,QAAA,MAAM,WAAW,yGAAwB,CAAC;AAE1C,QAAA,MAAM,WAAW,0GAAwB,CAAC;AAE1C,QAAA,MAAM,aAAa,oKAiBjB,CAAC;AAGH,QAAA,MAAM,oBAAoB,qKAWxB,CAAC;AAGH,QAAA,MAAM,sBAAsB,uKAW1B,CAAC;AAGH,QAAA,MAAM,aAAa,8JA6BjB,CAAC;AAGH,QAAA,MAAM,WAAW,4JASf,CAAC;AAGH,QAAA,MAAM,UAAU,2JAmBd,CAAC;AAGH,QAAA,MAAM,eAAe,gKASnB,CAAC;AAGH,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,CAAC"}
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Select as SelectPrimitive } from 'radix-ui';
5
+ import { Check, ChevronDown, ChevronUp } from 'lucide-react';
6
+ import { cn } from '@/lib/utils';
7
+ const Select = SelectPrimitive.Root;
8
+ const SelectGroup = SelectPrimitive.Group;
9
+ const SelectValue = SelectPrimitive.Value;
10
+ const SelectTrigger = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Trigger, { ref: ref, className: cn('border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1', className), ...props, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDown, { className: "h-4 w-4 opacity-50" }) })] })));
11
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
12
+ const SelectScrollUpButton = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollUpButton, { ref: ref, className: cn('flex cursor-default items-center justify-center py-1', className), ...props, children: _jsx(ChevronUp, { className: "h-4 w-4" }) })));
13
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
14
+ const SelectScrollDownButton = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollDownButton, { ref: ref, className: cn('flex cursor-default items-center justify-center py-1', className), ...props, children: _jsx(ChevronDown, { className: "h-4 w-4" }) })));
15
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
16
+ const SelectContent = React.forwardRef(({ className, children, position = 'popper', ...props }, ref) => (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { ref: ref, className: cn('bg-popover text-popover-foreground 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 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md', position === 'popper' &&
17
+ 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className), position: position, ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { className: cn('p-1', position === 'popper' &&
18
+ 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'), children: children }), _jsx(SelectScrollDownButton, {})] }) })));
19
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
20
+ const SelectLabel = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Label, { ref: ref, className: cn('px-2 py-1.5 text-sm font-semibold', className), ...props })));
21
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
22
+ const SelectItem = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Item, { ref: ref, className: cn('focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50', className), ...props, children: [_jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(Check, { className: "h-4 w-4" }) }) }), _jsx(SelectPrimitive.ItemText, { children: children })] })));
23
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
24
+ const SelectSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Separator, { ref: ref, className: cn('bg-muted -mx-1 my-1 h-px', className), ...props })));
25
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
26
+ export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Select } from './select';
3
+ declare const meta: Meta<typeof Select>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const WithGroups: Story;
8
+ export declare const Disabled: Story;
9
+ export declare const WithDefaultValue: Story;
10
+ //# sourceMappingURL=select.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/select.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,MAAM,EAOP,MAAM,UAAU,CAAC;AAElB,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAO7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAerB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAsBxB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAWtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAa9B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from './select';
3
+ const meta = {
4
+ title: 'UI/Select',
5
+ component: Select,
6
+ parameters: {
7
+ layout: 'centered',
8
+ },
9
+ tags: ['autodocs'],
10
+ };
11
+ export default meta;
12
+ export const Default = {
13
+ render: () => (_jsxs(Select, { children: [_jsx(SelectTrigger, { className: "w-[180px]", children: _jsx(SelectValue, { placeholder: "Select a fruit" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "apple", children: "Apple" }), _jsx(SelectItem, { value: "banana", children: "Banana" }), _jsx(SelectItem, { value: "blueberry", children: "Blueberry" }), _jsx(SelectItem, { value: "grapes", children: "Grapes" }), _jsx(SelectItem, { value: "pineapple", children: "Pineapple" })] })] })),
14
+ };
15
+ export const WithGroups = {
16
+ render: () => (_jsxs(Select, { children: [_jsx(SelectTrigger, { className: "w-[280px]", children: _jsx(SelectValue, { placeholder: "Select a timezone" }) }), _jsxs(SelectContent, { children: [_jsxs(SelectGroup, { children: [_jsx(SelectLabel, { children: "North America" }), _jsx(SelectItem, { value: "est", children: "Eastern Standard Time (EST)" }), _jsx(SelectItem, { value: "cst", children: "Central Standard Time (CST)" }), _jsx(SelectItem, { value: "mst", children: "Mountain Standard Time (MST)" }), _jsx(SelectItem, { value: "pst", children: "Pacific Standard Time (PST)" })] }), _jsxs(SelectGroup, { children: [_jsx(SelectLabel, { children: "Europe" }), _jsx(SelectItem, { value: "gmt", children: "Greenwich Mean Time (GMT)" }), _jsx(SelectItem, { value: "cet", children: "Central European Time (CET)" })] })] })] })),
17
+ };
18
+ export const Disabled = {
19
+ render: () => (_jsxs(Select, { disabled: true, children: [_jsx(SelectTrigger, { className: "w-[180px]", children: _jsx(SelectValue, { placeholder: "Disabled" }) }), _jsx(SelectContent, { children: _jsx(SelectItem, { value: "apple", children: "Apple" }) })] })),
20
+ };
21
+ export const WithDefaultValue = {
22
+ render: () => (_jsxs(Select, { defaultValue: "banana", children: [_jsx(SelectTrigger, { className: "w-[180px]", children: _jsx(SelectValue, { placeholder: "Select a fruit" }) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "apple", children: "Apple" }), _jsx(SelectItem, { value: "banana", children: "Banana" }), _jsx(SelectItem, { value: "blueberry", children: "Blueberry" })] })] })),
23
+ };
@@ -0,0 +1,5 @@
1
+ import { Toaster as Sonner } from 'sonner';
2
+ type ToasterProps = React.ComponentProps<typeof Sonner>;
3
+ declare const Toaster: ({ ...props }: ToasterProps) => import("react/jsx-runtime").JSX.Element;
4
+ export { Toaster };
5
+ //# sourceMappingURL=sonner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/sonner.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE3C,KAAK,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;AAExD,QAAA,MAAM,OAAO,GAAI,cAAc,YAAY,4CAgB1C,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Toaster as Sonner } from 'sonner';
4
+ const Toaster = ({ ...props }) => {
5
+ return (_jsx(Sonner, { className: "toaster group", toastOptions: {
6
+ classNames: {
7
+ toast: 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',
8
+ description: 'group-[.toast]:text-muted-foreground',
9
+ actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground',
10
+ cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',
11
+ },
12
+ }, ...props }));
13
+ };
14
+ export { Toaster };
@@ -0,0 +1,13 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Toaster } from './sonner';
3
+ declare const meta: Meta<typeof Toaster>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Description: Story;
8
+ export declare const Success: Story;
9
+ export declare const Error: Story;
10
+ export declare const WithAction: Story;
11
+ export declare const PromiseToast: Story;
12
+ export declare const AllVariants: Story;
13
+ //# sourceMappingURL=sonner.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sonner.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/sonner.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAe9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAYzB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAexB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAiB1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAUzB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { toast } from 'sonner';
3
+ import { Toaster } from './sonner';
4
+ import { Button } from './button';
5
+ const meta = {
6
+ title: 'UI/Toast',
7
+ component: Toaster,
8
+ parameters: {
9
+ layout: 'centered',
10
+ },
11
+ tags: ['autodocs'],
12
+ decorators: [
13
+ (Story) => (_jsxs(_Fragment, { children: [_jsx(Story, {}), _jsx(Toaster, {})] })),
14
+ ],
15
+ };
16
+ export default meta;
17
+ export const Default = {
18
+ render: () => _jsx(Button, { onClick: () => toast('Event has been created'), children: "Show Toast" }),
19
+ };
20
+ export const Description = {
21
+ render: () => (_jsx(Button, { onClick: () => toast('Event has been created', {
22
+ description: 'Sunday, December 03, 2023 at 9:00 AM',
23
+ }), children: "Show Toast with Description" })),
24
+ };
25
+ export const Success = {
26
+ render: () => (_jsx(Button, { variant: "default", onClick: () => toast.success('Successfully saved!'), children: "Show Success Toast" })),
27
+ };
28
+ export const Error = {
29
+ render: () => (_jsx(Button, { variant: "destructive", onClick: () => toast.error('Something went wrong'), children: "Show Error Toast" })),
30
+ };
31
+ export const WithAction = {
32
+ render: () => (_jsx(Button, { onClick: () => toast('Event deleted', {
33
+ action: {
34
+ label: 'Undo',
35
+ onClick: () => toast('Restored!'),
36
+ },
37
+ }), children: "Show Toast with Action" })),
38
+ };
39
+ export const PromiseToast = {
40
+ render: () => (_jsx(Button, { onClick: () => {
41
+ const promiseFn = () => new globalThis.Promise((resolve) => setTimeout(() => resolve({ name: 'Sonner' }), 2000));
42
+ toast.promise(promiseFn, {
43
+ loading: 'Loading...',
44
+ success: () => 'Data loaded successfully!',
45
+ error: 'Error loading data',
46
+ });
47
+ }, children: "Show Promise Toast" })),
48
+ };
49
+ export const AllVariants = {
50
+ render: () => (_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { onClick: () => toast('Default toast'), children: "Default" }), _jsx(Button, { onClick: () => toast.success('Success!'), children: "Success" }), _jsx(Button, { onClick: () => toast.error('Error!'), children: "Error" }), _jsx(Button, { onClick: () => toast.warning('Warning!'), children: "Warning" }), _jsx(Button, { onClick: () => toast.info('Info'), children: "Info" })] })),
51
+ };
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { Tabs as TabsPrimitive } from 'radix-ui';
3
+ declare const Tabs: React.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>>;
4
+ declare const TabsList: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ declare const TabsTrigger: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const TabsContent: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
8
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/tabs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,UAAU,CAAC;AAIjD,QAAA,MAAM,IAAI,gGAAqB,CAAC;AAEhC,QAAA,MAAM,QAAQ,uJAYZ,CAAC;AAGH,QAAA,MAAM,WAAW,gKAYf,CAAC;AAGH,QAAA,MAAM,WAAW,0JAYf,CAAC;AAGH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Tabs as TabsPrimitive } from 'radix-ui';
5
+ import { cn } from '@/lib/utils';
6
+ const Tabs = TabsPrimitive.Root;
7
+ const TabsList = React.forwardRef(({ className, ...props }, ref) => (_jsx(TabsPrimitive.List, { ref: ref, className: cn('bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1', className), ...props })));
8
+ TabsList.displayName = TabsPrimitive.List.displayName;
9
+ const TabsTrigger = React.forwardRef(({ className, ...props }, ref) => (_jsx(TabsPrimitive.Trigger, { ref: ref, className: cn('ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow', className), ...props })));
10
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
11
+ const TabsContent = React.forwardRef(({ className, ...props }, ref) => (_jsx(TabsPrimitive.Content, { ref: ref, className: cn('ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none', className), ...props })));
12
+ TabsContent.displayName = TabsPrimitive.Content.displayName;
13
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,9 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Tabs } from './tabs';
3
+ declare const meta: Meta<typeof Tabs>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
7
+ export declare const Simple: Story;
8
+ export declare const Disabled: Story;
9
+ //# sourceMappingURL=tabs.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.stories.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/tabs.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAsC,MAAM,QAAQ,CAAC;AAKlE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,CAO3B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAiDrB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAmBpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAkBtB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from './tabs';
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from './card';
4
+ import { Input } from './input';
5
+ import { Label } from './label';
6
+ const meta = {
7
+ title: 'UI/Tabs',
8
+ component: Tabs,
9
+ parameters: {
10
+ layout: 'centered',
11
+ },
12
+ tags: ['autodocs'],
13
+ };
14
+ export default meta;
15
+ export const Default = {
16
+ render: () => (_jsxs(Tabs, { defaultValue: "account", className: "w-[400px]", children: [_jsxs(TabsList, { className: "grid w-full grid-cols-2", children: [_jsx(TabsTrigger, { value: "account", children: "Account" }), _jsx(TabsTrigger, { value: "password", children: "Password" })] }), _jsx(TabsContent, { value: "account", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Account" }), _jsx(CardDescription, { children: "Make changes to your account here. Click save when you're done." })] }), _jsxs(CardContent, { className: "space-y-2", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "name", children: "Name" }), _jsx(Input, { id: "name", defaultValue: "Pedro Duarte" })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "username", children: "Username" }), _jsx(Input, { id: "username", defaultValue: "@peduarte" })] })] })] }) }), _jsx(TabsContent, { value: "password", children: _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Password" }), _jsx(CardDescription, { children: "Change your password here. After saving, you'll be logged out." })] }), _jsxs(CardContent, { className: "space-y-2", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "current", children: "Current password" }), _jsx(Input, { id: "current", type: "password" })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "new", children: "New password" }), _jsx(Input, { id: "new", type: "password" })] })] })] }) })] })),
17
+ };
18
+ export const Simple = {
19
+ render: () => (_jsxs(Tabs, { defaultValue: "tab1", className: "w-[400px]", children: [_jsxs(TabsList, { children: [_jsx(TabsTrigger, { value: "tab1", children: "Tab 1" }), _jsx(TabsTrigger, { value: "tab2", children: "Tab 2" }), _jsx(TabsTrigger, { value: "tab3", children: "Tab 3" })] }), _jsx(TabsContent, { value: "tab1", className: "p-4", children: "Content for Tab 1" }), _jsx(TabsContent, { value: "tab2", className: "p-4", children: "Content for Tab 2" }), _jsx(TabsContent, { value: "tab3", className: "p-4", children: "Content for Tab 3" })] })),
20
+ };
21
+ export const Disabled = {
22
+ render: () => (_jsxs(Tabs, { defaultValue: "tab1", className: "w-[400px]", children: [_jsxs(TabsList, { children: [_jsx(TabsTrigger, { value: "tab1", children: "Active" }), _jsx(TabsTrigger, { value: "tab2", disabled: true, children: "Disabled" }), _jsx(TabsTrigger, { value: "tab3", children: "Active" })] }), _jsx(TabsContent, { value: "tab1", className: "p-4", children: "First tab content" }), _jsx(TabsContent, { value: "tab3", className: "p-4", children: "Third tab content" })] })),
23
+ };
@@ -0,0 +1,3 @@
1
+ declare const _default: import("typescript-eslint").FlatConfig.Config[];
2
+ export default _default;
3
+ //# sourceMappingURL=eslint.config.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint.config.d.mts","sourceRoot":"","sources":["../../../../src/presentation/web/eslint.config.mjs"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ESLint config for @shepai/web package
3
+ *
4
+ * Extends root config and adds web-specific ignores.
5
+ * Uses ESLint 9 flat config format.
6
+ */
7
+ import rootConfig from '../../../eslint.config.mjs';
8
+ export default [
9
+ // Inherit all root configuration
10
+ ...rootConfig,
11
+ // Web-specific ignores
12
+ {
13
+ ignores: ['.next/**', 'out/**', 'node_modules/**', 'next-env.d.ts'],
14
+ },
15
+ ];
@@ -0,0 +1,12 @@
1
+ import { type Theme } from '@/types/theme';
2
+ /**
3
+ * Hook to manage theme state with localStorage persistence
4
+ * and system preference detection.
5
+ */
6
+ export declare function useTheme(): {
7
+ theme: Theme;
8
+ resolvedTheme: "light" | "dark";
9
+ setTheme: (newTheme: Theme) => void;
10
+ systemTheme: "light" | "dark";
11
+ };
12
+ //# sourceMappingURL=useTheme.d.ts.map