fulldev-ui 0.6.4 → 0.7.0-beta.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 (500) hide show
  1. package/.prettierrc.yaml +10 -3
  2. package/README.md +2 -1
  3. package/astro.config.ts +20 -17
  4. package/components.json +18 -0
  5. package/package.json +63 -34
  6. package/pnpm-lock.yaml +7480 -0
  7. package/public/images/categories/journals.jpg +0 -0
  8. package/public/images/categories/productivity.jpg +0 -0
  9. package/public/images/categories/workspace.jpg +0 -0
  10. package/public/images/leather-long-wallet.jpg +0 -0
  11. package/public/images/products/earthen-mug.jpg +0 -0
  12. package/public/images/products/leather-long-wallet.jpg +0 -0
  13. package/public/images/products/leatherbound-daily-journal-set.jpg +0 -0
  14. package/public/images/products/leatherbound-daily-journal.jpg +0 -0
  15. package/public/images/products/machines-pen.jpg +0 -0
  16. package/public/images/products/machines-pencil-and-pen-set.jpg +0 -0
  17. package/public/images/products/mini-sketchbooks.jpg +0 -0
  18. package/public/images/products/organizer-set.jpg +0 -0
  19. package/src/blocks/CategoryGroup1.astro +43 -0
  20. package/src/blocks/CategoryList1.astro +55 -0
  21. package/src/blocks/Contact1.astro +34 -77
  22. package/src/blocks/Contact2.astro +31 -77
  23. package/src/blocks/Content1.astro +18 -30
  24. package/src/blocks/Cta1.astro +18 -58
  25. package/src/blocks/Faqs1.astro +29 -0
  26. package/src/blocks/Faqs2.astro +29 -0
  27. package/src/blocks/Features1.astro +25 -61
  28. package/src/blocks/Footer.astro +47 -71
  29. package/src/blocks/Header.astro +64 -124
  30. package/src/blocks/Hero1.astro +23 -54
  31. package/src/blocks/Intro1.astro +16 -58
  32. package/src/blocks/PostSingle1.astro +29 -0
  33. package/src/blocks/ProductGroup1.astro +82 -0
  34. package/src/blocks/ProductList1.astro +60 -0
  35. package/src/blocks/ProductSingle1.astro +65 -0
  36. package/src/blocks/Reviews1.astro +23 -67
  37. package/src/components/Abstract.astro +36 -0
  38. package/src/components/Accordion.vue +31 -0
  39. package/src/components/Avatar.astro +23 -32
  40. package/src/components/Badge.astro +10 -58
  41. package/src/components/Box.astro +28 -0
  42. package/src/components/Button.astro +38 -78
  43. package/src/components/Buttons.astro +41 -19
  44. package/src/components/Card.astro +20 -0
  45. package/src/components/Carousel.vue +44 -0
  46. package/src/components/Chip.astro +27 -0
  47. package/src/{structures → components}/Code.astro +27 -8
  48. package/src/components/Collapsible.vue +21 -0
  49. package/src/components/Container.astro +25 -0
  50. package/src/components/Drawer.vue +53 -0
  51. package/src/components/Form.vue +82 -0
  52. package/src/components/Gallery.vue +85 -0
  53. package/src/components/Grid.astro +35 -0
  54. package/src/components/Icon.astro +12 -45
  55. package/src/components/Image.astro +6 -28
  56. package/src/components/Layout.astro +126 -0
  57. package/src/components/Link.astro +7 -65
  58. package/src/components/List.astro +13 -77
  59. package/src/components/Logo.astro +16 -35
  60. package/src/components/Masonry.astro +35 -0
  61. package/src/components/Menu.astro +31 -36
  62. package/src/components/Menus.astro +15 -10
  63. package/src/components/Navigation.vue +93 -0
  64. package/src/components/Panel.astro +18 -0
  65. package/src/components/Person.astro +43 -0
  66. package/src/components/Price.astro +26 -11
  67. package/src/components/Proof.astro +16 -37
  68. package/src/components/{docs/Props.astro → Props.astro} +3 -3
  69. package/src/components/Prose.astro +28 -0
  70. package/src/components/Rating.astro +5 -24
  71. package/src/components/Search.vue +65 -0
  72. package/src/components/Section.astro +18 -0
  73. package/src/components/Select.vue +41 -0
  74. package/src/components/Separator.astro +0 -0
  75. package/src/components/Sidebar.astro +50 -0
  76. package/src/components/Social.astro +8 -15
  77. package/src/components/Socials.astro +21 -19
  78. package/src/components/Sort.vue +46 -0
  79. package/src/components/Split.astro +27 -0
  80. package/src/components/Table.astro +17 -17
  81. package/src/components/Tabs.vue +17 -0
  82. package/src/components/Themer.astro +12 -3
  83. package/src/components/Toc.astro +24 -21
  84. package/src/components/Toolbar.vue +115 -0
  85. package/src/components/Writeup.astro +37 -0
  86. package/src/components/ui/accordion/Accordion.vue +19 -0
  87. package/src/components/ui/accordion/AccordionContent.vue +24 -0
  88. package/src/components/ui/accordion/AccordionItem.vue +24 -0
  89. package/src/components/ui/accordion/AccordionTrigger.vue +33 -0
  90. package/src/components/ui/accordion/index.ts +4 -0
  91. package/src/components/ui/auto-form/AutoForm.vue +115 -0
  92. package/src/components/ui/auto-form/AutoFormField.vue +45 -0
  93. package/src/components/ui/auto-form/AutoFormFieldArray.vue +127 -0
  94. package/src/components/ui/auto-form/AutoFormFieldBoolean.vue +47 -0
  95. package/src/components/ui/auto-form/AutoFormFieldDate.vue +78 -0
  96. package/src/components/ui/auto-form/AutoFormFieldEnum.vue +77 -0
  97. package/src/components/ui/auto-form/AutoFormFieldFile.vue +87 -0
  98. package/src/components/ui/auto-form/AutoFormFieldInput.vue +42 -0
  99. package/src/components/ui/auto-form/AutoFormFieldNumber.vue +42 -0
  100. package/src/components/ui/auto-form/AutoFormFieldObject.vue +90 -0
  101. package/src/components/ui/auto-form/AutoFormLabel.vue +19 -0
  102. package/src/components/ui/auto-form/constant.ts +40 -0
  103. package/src/components/ui/auto-form/dependencies.ts +92 -0
  104. package/src/components/ui/auto-form/index.ts +15 -0
  105. package/src/components/ui/auto-form/interface.ts +95 -0
  106. package/src/components/ui/auto-form/utils.ts +188 -0
  107. package/src/components/ui/avatar/Avatar.vue +24 -0
  108. package/src/components/ui/avatar/AvatarFallback.vue +11 -0
  109. package/src/components/ui/avatar/AvatarImage.vue +9 -0
  110. package/src/components/ui/avatar/index.ts +24 -0
  111. package/src/components/ui/badge/Badge.vue +16 -0
  112. package/src/components/ui/badge/index.ts +22 -0
  113. package/src/components/ui/breadcrumb/Breadcrumb.vue +13 -0
  114. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +22 -0
  115. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +14 -0
  116. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +19 -0
  117. package/src/components/ui/breadcrumb/BreadcrumbList.vue +16 -0
  118. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +19 -0
  119. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +21 -0
  120. package/src/components/ui/breadcrumb/index.ts +7 -0
  121. package/src/components/ui/button/Button.vue +26 -0
  122. package/src/components/ui/button/index.ts +31 -0
  123. package/src/components/ui/calendar/Calendar.vue +80 -0
  124. package/src/components/ui/calendar/CalendarCell.vue +29 -0
  125. package/src/components/ui/calendar/CalendarCellTrigger.vue +40 -0
  126. package/src/components/ui/calendar/CalendarGrid.vue +24 -0
  127. package/src/components/ui/calendar/CalendarGridBody.vue +11 -0
  128. package/src/components/ui/calendar/CalendarGridHead.vue +11 -0
  129. package/src/components/ui/calendar/CalendarGridRow.vue +24 -0
  130. package/src/components/ui/calendar/CalendarHeadCell.vue +24 -0
  131. package/src/components/ui/calendar/CalendarHeader.vue +24 -0
  132. package/src/components/ui/calendar/CalendarHeading.vue +27 -0
  133. package/src/components/ui/calendar/CalendarNextButton.vue +30 -0
  134. package/src/components/ui/calendar/CalendarPrevButton.vue +30 -0
  135. package/src/components/ui/calendar/index.ts +12 -0
  136. package/src/components/ui/card/Card.vue +14 -0
  137. package/src/components/ui/card/CardContent.vue +14 -0
  138. package/src/components/ui/card/CardDescription.vue +14 -0
  139. package/src/components/ui/card/CardFooter.vue +14 -0
  140. package/src/components/ui/card/CardHeader.vue +14 -0
  141. package/src/components/ui/card/CardTitle.vue +14 -0
  142. package/src/components/ui/card/index.ts +6 -0
  143. package/src/components/ui/carousel/Carousel.vue +61 -0
  144. package/src/components/ui/carousel/CarouselContent.vue +27 -0
  145. package/src/components/ui/carousel/CarouselItem.vue +19 -0
  146. package/src/components/ui/carousel/CarouselNext.vue +33 -0
  147. package/src/components/ui/carousel/CarouselPrevious.vue +33 -0
  148. package/src/components/ui/carousel/index.ts +10 -0
  149. package/src/components/ui/carousel/interface.ts +26 -0
  150. package/src/components/ui/carousel/useCarousel.ts +56 -0
  151. package/src/components/ui/checkbox/Checkbox.vue +36 -0
  152. package/src/components/ui/checkbox/index.ts +1 -0
  153. package/src/components/ui/collapsible/Collapsible.vue +15 -0
  154. package/src/components/ui/collapsible/CollapsibleContent.vue +11 -0
  155. package/src/components/ui/collapsible/CollapsibleTrigger.vue +11 -0
  156. package/src/components/ui/collapsible/index.ts +3 -0
  157. package/src/components/ui/command/Command.vue +32 -0
  158. package/src/components/ui/command/CommandDialog.vue +23 -0
  159. package/src/components/ui/command/CommandEmpty.vue +23 -0
  160. package/src/components/ui/command/CommandGroup.vue +39 -0
  161. package/src/components/ui/command/CommandInput.vue +43 -0
  162. package/src/components/ui/command/CommandItem.vue +31 -0
  163. package/src/components/ui/command/CommandList.vue +30 -0
  164. package/src/components/ui/command/CommandSeparator.vue +23 -0
  165. package/src/components/ui/command/CommandShortcut.vue +14 -0
  166. package/src/components/ui/command/index.ts +9 -0
  167. package/src/components/ui/dialog/Dialog.vue +14 -0
  168. package/src/components/ui/dialog/DialogClose.vue +11 -0
  169. package/src/components/ui/dialog/DialogContent.vue +51 -0
  170. package/src/components/ui/dialog/DialogDescription.vue +24 -0
  171. package/src/components/ui/dialog/DialogFooter.vue +12 -0
  172. package/src/components/ui/dialog/DialogHeader.vue +14 -0
  173. package/src/components/ui/dialog/DialogScrollContent.vue +59 -0
  174. package/src/components/ui/dialog/DialogTitle.vue +24 -0
  175. package/src/components/ui/dialog/DialogTrigger.vue +11 -0
  176. package/src/components/ui/dialog/index.ts +9 -0
  177. package/src/components/ui/drawer/Drawer.vue +19 -0
  178. package/src/components/ui/drawer/DrawerContent.vue +31 -0
  179. package/src/components/ui/drawer/DrawerDescription.vue +23 -0
  180. package/src/components/ui/drawer/DrawerFooter.vue +14 -0
  181. package/src/components/ui/drawer/DrawerHeader.vue +14 -0
  182. package/src/components/ui/drawer/DrawerOverlay.vue +21 -0
  183. package/src/components/ui/drawer/DrawerTitle.vue +23 -0
  184. package/src/components/ui/drawer/index.ts +8 -0
  185. package/src/components/ui/form/FormControl.vue +16 -0
  186. package/src/components/ui/form/FormDescription.vue +20 -0
  187. package/src/components/ui/form/FormItem.vue +19 -0
  188. package/src/components/ui/form/FormLabel.vue +20 -0
  189. package/src/components/ui/form/FormMessage.vue +16 -0
  190. package/src/components/ui/form/index.ts +7 -0
  191. package/src/components/ui/form/injectionKeys.ts +4 -0
  192. package/src/components/ui/form/useFormField.ts +30 -0
  193. package/src/components/ui/input/Input.vue +32 -0
  194. package/src/components/ui/input/index.ts +1 -0
  195. package/src/components/ui/label/Label.vue +24 -0
  196. package/src/components/ui/label/index.ts +1 -0
  197. package/src/components/ui/menubar/Menubar.vue +25 -0
  198. package/src/components/ui/menubar/MenubarCheckboxItem.vue +42 -0
  199. package/src/components/ui/menubar/MenubarContent.vue +35 -0
  200. package/src/components/ui/menubar/MenubarGroup.vue +11 -0
  201. package/src/components/ui/menubar/MenubarItem.vue +32 -0
  202. package/src/components/ui/menubar/MenubarLabel.vue +13 -0
  203. package/src/components/ui/menubar/MenubarMenu.vue +11 -0
  204. package/src/components/ui/menubar/MenubarRadioGroup.vue +20 -0
  205. package/src/components/ui/menubar/MenubarRadioItem.vue +42 -0
  206. package/src/components/ui/menubar/MenubarSeparator.vue +22 -0
  207. package/src/components/ui/menubar/MenubarShortcut.vue +14 -0
  208. package/src/components/ui/menubar/MenubarSub.vue +19 -0
  209. package/src/components/ui/menubar/MenubarSubContent.vue +39 -0
  210. package/src/components/ui/menubar/MenubarSubTrigger.vue +32 -0
  211. package/src/components/ui/menubar/MenubarTrigger.vue +29 -0
  212. package/src/components/ui/menubar/index.ts +15 -0
  213. package/src/components/ui/navigation-menu/NavigationMenu.vue +33 -0
  214. package/src/components/ui/navigation-menu/NavigationMenuContent.vue +36 -0
  215. package/src/components/ui/navigation-menu/NavigationMenuIndicator.vue +29 -0
  216. package/src/components/ui/navigation-menu/NavigationMenuItem.vue +11 -0
  217. package/src/components/ui/navigation-menu/NavigationMenuLink.vue +19 -0
  218. package/src/components/ui/navigation-menu/NavigationMenuList.vue +24 -0
  219. package/src/components/ui/navigation-menu/NavigationMenuTrigger.vue +30 -0
  220. package/src/components/ui/navigation-menu/NavigationMenuViewport.vue +29 -0
  221. package/src/components/ui/navigation-menu/index.ts +14 -0
  222. package/src/components/ui/popover/Popover.vue +15 -0
  223. package/src/components/ui/popover/PopoverContent.vue +45 -0
  224. package/src/components/ui/popover/PopoverTrigger.vue +11 -0
  225. package/src/components/ui/popover/index.ts +3 -0
  226. package/src/components/ui/radio-group/RadioGroup.vue +25 -0
  227. package/src/components/ui/radio-group/RadioGroupItem.vue +32 -0
  228. package/src/components/ui/radio-group/index.ts +2 -0
  229. package/src/components/ui/select/Select.vue +15 -0
  230. package/src/components/ui/select/SelectContent.vue +59 -0
  231. package/src/components/ui/select/SelectGroup.vue +22 -0
  232. package/src/components/ui/select/SelectItem.vue +38 -0
  233. package/src/components/ui/select/SelectItemText.vue +11 -0
  234. package/src/components/ui/select/SelectLabel.vue +13 -0
  235. package/src/components/ui/select/SelectScrollDownButton.vue +27 -0
  236. package/src/components/ui/select/SelectScrollUpButton.vue +27 -0
  237. package/src/components/ui/select/SelectSeparator.vue +20 -0
  238. package/src/components/ui/select/SelectTrigger.vue +33 -0
  239. package/src/components/ui/select/SelectValue.vue +11 -0
  240. package/src/components/ui/select/index.ts +11 -0
  241. package/src/components/ui/separator/Separator.vue +33 -0
  242. package/src/components/ui/separator/index.ts +1 -0
  243. package/src/components/ui/switch/Switch.vue +39 -0
  244. package/src/components/ui/switch/index.ts +1 -0
  245. package/src/components/ui/tabs/Tabs.vue +15 -0
  246. package/src/components/ui/tabs/TabsContent.vue +27 -0
  247. package/src/components/ui/tabs/TabsList.vue +22 -0
  248. package/src/components/ui/tabs/TabsTrigger.vue +31 -0
  249. package/src/components/ui/tabs/index.ts +4 -0
  250. package/src/components/ui/textarea/Textarea.vue +32 -0
  251. package/src/components/ui/textarea/index.ts +1 -0
  252. package/src/lib/utils.ts +6 -0
  253. package/src/schemas/blocks/categoryGroup.ts +17 -0
  254. package/src/schemas/blocks/categoryList.ts +18 -0
  255. package/src/schemas/blocks/categorySingle.ts +12 -0
  256. package/src/schemas/blocks/contact.ts +13 -0
  257. package/src/schemas/blocks/content.ts +13 -0
  258. package/src/schemas/blocks/cta.ts +11 -0
  259. package/src/schemas/blocks/faqs.ts +17 -0
  260. package/src/schemas/blocks/features.ts +16 -0
  261. package/src/schemas/blocks/footer.ts +16 -0
  262. package/src/schemas/{header.ts → blocks/header.ts} +5 -8
  263. package/src/schemas/blocks/hero.ts +15 -0
  264. package/src/schemas/blocks/intro.ts +9 -0
  265. package/src/schemas/blocks/postSingle.ts +12 -0
  266. package/src/schemas/blocks/productGroup.ts +17 -0
  267. package/src/schemas/blocks/productList.ts +18 -0
  268. package/src/schemas/blocks/productSingle.ts +15 -0
  269. package/src/schemas/blocks/reviews.ts +16 -0
  270. package/src/schemas/fields/badge.ts +9 -0
  271. package/src/schemas/fields/block.ts +60 -0
  272. package/src/schemas/fields/button.ts +12 -0
  273. package/src/schemas/fields/card.ts +28 -0
  274. package/src/schemas/fields/channel.ts +10 -0
  275. package/src/schemas/fields/form.ts +20 -0
  276. package/src/schemas/fields/image.ts +8 -0
  277. package/src/schemas/fields/link.ts +9 -0
  278. package/src/schemas/fields/logo.ts +10 -0
  279. package/src/schemas/fields/menu.ts +10 -0
  280. package/src/schemas/fields/meta.ts +14 -0
  281. package/src/schemas/fields/proof.ts +11 -0
  282. package/src/schemas/fields/section.ts +48 -0
  283. package/tailwind.config.js +111 -0
  284. package/tsconfig.json +5 -7
  285. package/.env.example +0 -3
  286. package/.vscode/settings.json +0 -25
  287. package/CONTRIBUTING.md +0 -124
  288. package/cloudcannon.config.yml +0 -207
  289. package/public/favicon/android-chrome-192x192.png +0 -0
  290. package/public/favicon/android-chrome-512x512.png +0 -0
  291. package/public/favicon/apple-touch-icon.png +0 -0
  292. package/public/favicon/browserconfig.xml +0 -9
  293. package/public/favicon/favicon-16x16.png +0 -0
  294. package/public/favicon/favicon-32x32.png +0 -0
  295. package/public/favicon/favicon-48x48.png +0 -0
  296. package/public/favicon/favicon.ico +0 -0
  297. package/public/favicon/favicon.svg +0 -16
  298. package/public/favicon/manifest.webmanifest +0 -30
  299. package/public/favicon/mstile-150x150.png +0 -0
  300. package/public/favicon/safari-pinned-tab.svg +0 -16
  301. package/public/favicon/yandex-browser-50x50.png +0 -0
  302. package/public/favicon/yandex-browser-manifest.json +0 -9
  303. package/siteicon.png +0 -0
  304. package/src/blocks/Banner.astro +0 -31
  305. package/src/blocks/Colleagues1.astro +0 -74
  306. package/src/blocks/Compare1.astro +0 -64
  307. package/src/blocks/Content2.astro +0 -47
  308. package/src/blocks/Content3.astro +0 -47
  309. package/src/blocks/Content4.astro +0 -52
  310. package/src/blocks/Content5.astro +0 -43
  311. package/src/blocks/Content6.astro +0 -57
  312. package/src/blocks/Content7.astro +0 -65
  313. package/src/blocks/Content8.astro +0 -48
  314. package/src/blocks/Cta2.astro +0 -52
  315. package/src/blocks/Features2.astro +0 -71
  316. package/src/blocks/JobCategories1.astro +0 -61
  317. package/src/blocks/JobCategory1.astro +0 -92
  318. package/src/blocks/Jobs1.astro +0 -74
  319. package/src/blocks/Logos1.astro +0 -55
  320. package/src/blocks/Pages1.astro +0 -85
  321. package/src/blocks/Pricings1.astro +0 -61
  322. package/src/blocks/Products1.astro +0 -87
  323. package/src/blocks/Projects1.astro +0 -79
  324. package/src/blocks/Subheader.astro +0 -53
  325. package/src/components/Avatars.astro +0 -20
  326. package/src/components/Badges.astro +0 -20
  327. package/src/components/Block.astro +0 -46
  328. package/src/components/Cart.astro +0 -42
  329. package/src/components/CartAdd.svelte +0 -76
  330. package/src/components/CartCheckout.svelte +0 -58
  331. package/src/components/CartForm.svelte +0 -130
  332. package/src/components/CartList.svelte +0 -88
  333. package/src/components/CartQuantity.svelte +0 -81
  334. package/src/components/CartSummary.astro +0 -59
  335. package/src/components/CartTotal.svelte +0 -15
  336. package/src/components/Channel.astro +0 -89
  337. package/src/components/Channels.astro +0 -20
  338. package/src/components/Checkbox.astro +0 -76
  339. package/src/components/Element.astro +0 -70
  340. package/src/components/Field.astro +0 -33
  341. package/src/components/Fields.astro +0 -20
  342. package/src/components/Form.astro +0 -34
  343. package/src/components/Gallery.astro +0 -175
  344. package/src/components/Head.astro +0 -94
  345. package/src/components/Heading.astro +0 -91
  346. package/src/components/Input.astro +0 -115
  347. package/src/components/Label.astro +0 -42
  348. package/src/components/Links.astro +0 -20
  349. package/src/components/Paragraph.astro +0 -54
  350. package/src/components/Search.astro +0 -118
  351. package/src/components/Select.astro +0 -114
  352. package/src/components/Switch.astro +0 -81
  353. package/src/components/Tagline.astro +0 -49
  354. package/src/components/Textarea.astro +0 -78
  355. package/src/components/Toggle.astro +0 -45
  356. package/src/components/_Breadcrumb.astro +0 -58
  357. package/src/components/_Image.astro +0 -79
  358. package/src/components/_LocaleSwitcher.astro +0 -25
  359. package/src/content/config.ts +0 -18
  360. package/src/content/layouts/base.yml +0 -166
  361. package/src/content/pages/_base/toggle.mdx +0 -28
  362. package/src/content/pages/_posts/post.md +0 -7
  363. package/src/content/pages/_showcase/anti-slip-profiles.md +0 -5
  364. package/src/content/pages/_showcase/fulldev-ui.md +0 -5
  365. package/src/content/pages/_showcase/lavis-detailing.md +0 -5
  366. package/src/content/pages/_showcase/leren-trainingsacteren.md +0 -5
  367. package/src/content/pages/_showcase/miele-witgoedcenter-amsterdam.md +0 -5
  368. package/src/content/pages/_showcase/sloepverhuur-bolsward.md +0 -5
  369. package/src/content/pages/_showcase/stark-vulcanising-products.md +0 -4
  370. package/src/content/pages/_showcase/the-gym-haren.md +0 -5
  371. package/src/content/pages/_showcase/van-dillen-antieke-bouwmaterialen.md +0 -5
  372. package/src/content/pages/docs/blocks/_categories.mdx +0 -129
  373. package/src/content/pages/docs/blocks/_contact.mdx +0 -67
  374. package/src/content/pages/docs/blocks/_jobs.mdx +0 -34
  375. package/src/content/pages/docs/blocks/_posts.mdx +0 -45
  376. package/src/content/pages/docs/blocks/_stats.mdx +0 -32
  377. package/src/content/pages/docs/blocks/banner.mdx +0 -12
  378. package/src/content/pages/docs/blocks/colleagues.mdx +0 -49
  379. package/src/content/pages/docs/blocks/content.mdx +0 -316
  380. package/src/content/pages/docs/blocks/cta.mdx +0 -16
  381. package/src/content/pages/docs/blocks/features.mdx +0 -100
  382. package/src/content/pages/docs/blocks/footer.mdx +0 -46
  383. package/src/content/pages/docs/blocks/header.mdx +0 -60
  384. package/src/content/pages/docs/blocks/hero.mdx +0 -18
  385. package/src/content/pages/docs/blocks/intro.mdx +0 -16
  386. package/src/content/pages/docs/blocks/logos.mdx +0 -37
  387. package/src/content/pages/docs/blocks/projects.mdx +0 -36
  388. package/src/content/pages/docs/blocks/reviews.mdx +0 -65
  389. package/src/content/pages/docs/blocks.mdx +0 -52
  390. package/src/content/pages/docs/collections/images.mdx +0 -102
  391. package/src/content/pages/docs/collections/pages.mdx +0 -119
  392. package/src/content/pages/docs/collections/presets.mdx +0 -60
  393. package/src/content/pages/docs/components/_localeswitcher.mdx +0 -16
  394. package/src/content/pages/docs/components/_table.mdx +0 -101
  395. package/src/content/pages/docs/components/_tagline.mdx +0 -34
  396. package/src/content/pages/docs/components/_themer.mdx +0 -47
  397. package/src/content/pages/docs/components/_toggle.mdx +0 -30
  398. package/src/content/pages/docs/components/avatar.mdx +0 -32
  399. package/src/content/pages/docs/components/badge.mdx +0 -42
  400. package/src/content/pages/docs/components/badges.mdx +0 -33
  401. package/src/content/pages/docs/components/button.mdx +0 -76
  402. package/src/content/pages/docs/components/buttons.mdx +0 -50
  403. package/src/content/pages/docs/components/channel.mdx +0 -89
  404. package/src/content/pages/docs/components/channels.mdx +0 -90
  405. package/src/content/pages/docs/components/checkbox.mdx +0 -32
  406. package/src/content/pages/docs/components/heading.mdx +0 -49
  407. package/src/content/pages/docs/components/icon.mdx +0 -46
  408. package/src/content/pages/docs/components/image.mdx +0 -20
  409. package/src/content/pages/docs/components/input.mdx +0 -38
  410. package/src/content/pages/docs/components/label.mdx +0 -42
  411. package/src/content/pages/docs/components/link.mdx +0 -63
  412. package/src/content/pages/docs/components/links.mdx +0 -57
  413. package/src/content/pages/docs/components/list.mdx +0 -53
  414. package/src/content/pages/docs/components/logo.mdx +0 -24
  415. package/src/content/pages/docs/components/menu.mdx +0 -48
  416. package/src/content/pages/docs/components/paragraph.mdx +0 -44
  417. package/src/content/pages/docs/components/rating.mdx +0 -43
  418. package/src/content/pages/docs/components/select.mdx +0 -46
  419. package/src/content/pages/docs/components/social.mdx +0 -92
  420. package/src/content/pages/docs/components/socials.mdx +0 -103
  421. package/src/content/pages/docs/components/switch.mdx +0 -32
  422. package/src/content/pages/docs/components/tagline.mdx +0 -42
  423. package/src/content/pages/docs/components/textarea.mdx +0 -32
  424. package/src/content/pages/docs/components.mdx +0 -36
  425. package/src/content/pages/docs/customization.mdx +0 -183
  426. package/src/content/pages/docs/frameworks.mdx +0 -30
  427. package/src/content/pages/docs/index.mdx +0 -21
  428. package/src/content/pages/docs/installation.mdx +0 -30
  429. package/src/content/pages/docs/layouts/doc.mdx +0 -15
  430. package/src/content/pages/docs/layouts/page.mdx +0 -15
  431. package/src/content/pages/docs/pages.mdx +0 -130
  432. package/src/content/pages/docs/structures/_card.mdx +0 -84
  433. package/src/content/pages/docs/structures/_dialog.mdx +0 -15
  434. package/src/content/pages/docs/structures/_drawer.mdx +0 -15
  435. package/src/content/pages/docs/structures/card.mdx +0 -15
  436. package/src/content/pages/docs/structures/carousel.mdx +0 -14
  437. package/src/content/pages/docs/structures/code.mdx +0 -42
  438. package/src/content/pages/docs/structures/container.mdx +0 -15
  439. package/src/content/pages/docs/structures/drawer.mdx +0 -15
  440. package/src/content/pages/docs/structures/group.mdx +0 -15
  441. package/src/content/pages/docs/structures/layout.mdx +0 -15
  442. package/src/content/pages/docs/structures/masonry.mdx +0 -15
  443. package/src/content/pages/docs/structures/matrix.mdx +0 -15
  444. package/src/content/pages/docs/structures/panel.mdx +0 -15
  445. package/src/content/pages/docs/structures/prose.mdx +0 -33
  446. package/src/content/pages/docs/structures/section.mdx +0 -15
  447. package/src/content/pages/docs/structures/stack.mdx +0 -15
  448. package/src/content/pages/docs/structures/writeup.mdx +0 -15
  449. package/src/content/pages/docs/structures.mdx +0 -7
  450. package/src/content/pages/index.mdx +0 -52
  451. package/src/content/pages/showcase.mdx +0 -30
  452. package/src/css/custom.css +0 -24
  453. package/src/css/theme.css +0 -62
  454. package/src/env.d.ts +0 -3
  455. package/src/integration/index.ts +0 -185
  456. package/src/layouts/Page.astro +0 -64
  457. package/src/layouts/_Product.astro +0 -115
  458. package/src/pages/[...page].astro +0 -49
  459. package/src/pages/test.astro +0 -16
  460. package/src/schemas/badge.ts +0 -14
  461. package/src/schemas/block.ts +0 -42
  462. package/src/schemas/button.ts +0 -17
  463. package/src/schemas/card.ts +0 -43
  464. package/src/schemas/channel.ts +0 -15
  465. package/src/schemas/checkbox.ts +0 -13
  466. package/src/schemas/footer.ts +0 -17
  467. package/src/schemas/head.ts +0 -17
  468. package/src/schemas/image.ts +0 -53
  469. package/src/schemas/input.ts +0 -13
  470. package/src/schemas/link.ts +0 -14
  471. package/src/schemas/logo.ts +0 -13
  472. package/src/schemas/menu.ts +0 -11
  473. package/src/schemas/page.ts +0 -23
  474. package/src/schemas/proof.ts +0 -12
  475. package/src/schemas/textarea.ts +0 -11
  476. package/src/stores/cart.svelte.ts +0 -78
  477. package/src/stores/cart.ts +0 -76
  478. package/src/structures/Card.astro +0 -35
  479. package/src/structures/Carousel.astro +0 -106
  480. package/src/structures/Container.astro +0 -25
  481. package/src/structures/Drawer.astro +0 -81
  482. package/src/structures/Group.astro +0 -25
  483. package/src/structures/Layout.astro +0 -34
  484. package/src/structures/Masonry.astro +0 -42
  485. package/src/structures/Matrix.astro +0 -39
  486. package/src/structures/Panel.astro +0 -25
  487. package/src/structures/Prose.astro +0 -96
  488. package/src/structures/Section.astro +0 -26
  489. package/src/structures/Sidebar.astro +0 -36
  490. package/src/structures/Split.astro +0 -38
  491. package/src/structures/Stack.astro +0 -25
  492. package/src/structures/Writeup.astro +0 -67
  493. package/src/structures/_Bento.astro +0 -34
  494. package/src/utils/cart.ts +0 -27
  495. package/src/utils/getHref.ts +0 -6
  496. package/src/utils/slugify.ts +0 -6
  497. package/svelte.config.js +0 -5
  498. package/tailwind.config.ts +0 -72
  499. package/virtual.d.ts +0 -5
  500. /package/src/schemas/{path.ts → fields/path.ts} +0 -0
@@ -0,0 +1,40 @@
1
+ import type { InputComponents } from './interface'
2
+ import AutoFormFieldArray from './AutoFormFieldArray.vue'
3
+ import AutoFormFieldBoolean from './AutoFormFieldBoolean.vue'
4
+ import AutoFormFieldDate from './AutoFormFieldDate.vue'
5
+ import AutoFormFieldEnum from './AutoFormFieldEnum.vue'
6
+ import AutoFormFieldFile from './AutoFormFieldFile.vue'
7
+ import AutoFormFieldInput from './AutoFormFieldInput.vue'
8
+ import AutoFormFieldNumber from './AutoFormFieldNumber.vue'
9
+ import AutoFormFieldObject from './AutoFormFieldObject.vue'
10
+
11
+ export const INPUT_COMPONENTS: InputComponents = {
12
+ date: AutoFormFieldDate,
13
+ select: AutoFormFieldEnum,
14
+ radio: AutoFormFieldEnum,
15
+ checkbox: AutoFormFieldBoolean,
16
+ switch: AutoFormFieldBoolean,
17
+ textarea: AutoFormFieldInput,
18
+ number: AutoFormFieldNumber,
19
+ string: AutoFormFieldInput,
20
+ file: AutoFormFieldFile,
21
+ array: AutoFormFieldArray,
22
+ object: AutoFormFieldObject,
23
+ }
24
+
25
+ /**
26
+ * Define handlers for specific Zod types.
27
+ * You can expand this object to support more types.
28
+ */
29
+ export const DEFAULT_ZOD_HANDLERS: {
30
+ [key: string]: keyof typeof INPUT_COMPONENTS
31
+ } = {
32
+ ZodString: 'string',
33
+ ZodBoolean: 'checkbox',
34
+ ZodDate: 'date',
35
+ ZodEnum: 'select',
36
+ ZodNativeEnum: 'select',
37
+ ZodNumber: 'number',
38
+ ZodArray: 'array',
39
+ ZodObject: 'object',
40
+ }
@@ -0,0 +1,92 @@
1
+ import type { Ref } from 'vue'
2
+ import type * as z from 'zod'
3
+ import { createContext } from 'radix-vue'
4
+ import { useFieldValue, useFormValues } from 'vee-validate'
5
+ import { computed, ref, watch } from 'vue'
6
+ import { type Dependency, DependencyType, type EnumValues } from './interface'
7
+ import { getFromPath, getIndexIfArray } from './utils'
8
+
9
+ export const [injectDependencies, provideDependencies] = createContext<Ref<Dependency<z.infer<z.ZodObject<any>>>[] | undefined>>('AutoFormDependencies')
10
+
11
+ export default function useDependencies(
12
+ fieldName: string,
13
+ ) {
14
+ const form = useFormValues()
15
+ // parsed test[0].age => test.age
16
+ const currentFieldName = fieldName.replace(/\[\d+\]/g, '')
17
+ const currentFieldValue = useFieldValue<any>(fieldName)
18
+
19
+ if (!form)
20
+ throw new Error('useDependencies should be used within <AutoForm>')
21
+
22
+ const dependencies = injectDependencies()
23
+ const isDisabled = ref(false)
24
+ const isHidden = ref(false)
25
+ const isRequired = ref(false)
26
+ const overrideOptions = ref<EnumValues | undefined>()
27
+
28
+ const currentFieldDependencies = computed(() => dependencies.value?.filter(
29
+ dependency => dependency.targetField === currentFieldName,
30
+ ))
31
+
32
+ function getSourceValue(dep: Dependency<any>) {
33
+ const source = dep.sourceField as string
34
+ const index = getIndexIfArray(fieldName) ?? -1
35
+ const [sourceLast, ...sourceInitial] = source.split('.').toReversed()
36
+ const [_targetLast, ...targetInitial] = (dep.targetField as string).split('.').toReversed()
37
+
38
+ if (index >= 0 && sourceInitial.join(',') === targetInitial.join(',')) {
39
+ const [_currentLast, ...currentInitial] = fieldName.split('.').toReversed()
40
+ return getFromPath(form.value, currentInitial.join('.') + sourceLast);
41
+ }
42
+
43
+ return getFromPath(form.value, source)
44
+ }
45
+
46
+ const sourceFieldValues = computed(() => currentFieldDependencies.value?.map(dep => getSourceValue(dep)))
47
+
48
+ const resetConditionState = () => {
49
+ isDisabled.value = false
50
+ isHidden.value = false
51
+ isRequired.value = false
52
+ overrideOptions.value = undefined
53
+ }
54
+
55
+ watch([sourceFieldValues, dependencies], () => {
56
+ resetConditionState()
57
+ currentFieldDependencies.value?.forEach((dep) => {
58
+ const sourceValue = getSourceValue(dep)
59
+ const conditionMet = dep.when(sourceValue, currentFieldValue.value)
60
+
61
+ switch (dep.type) {
62
+ case DependencyType.DISABLES:
63
+ if (conditionMet)
64
+ isDisabled.value = true
65
+
66
+ break
67
+ case DependencyType.REQUIRES:
68
+ if (conditionMet)
69
+ isRequired.value = true
70
+
71
+ break
72
+ case DependencyType.HIDES:
73
+ if (conditionMet)
74
+ isHidden.value = true
75
+
76
+ break
77
+ case DependencyType.SETS_OPTIONS:
78
+ if (conditionMet)
79
+ overrideOptions.value = dep.options
80
+
81
+ break
82
+ }
83
+ })
84
+ }, { immediate: true, deep: true })
85
+
86
+ return {
87
+ isDisabled,
88
+ isHidden,
89
+ isRequired,
90
+ overrideOptions,
91
+ }
92
+ }
@@ -0,0 +1,15 @@
1
+ export { default as AutoForm } from './AutoForm.vue'
2
+ export { default as AutoFormField } from './AutoFormField.vue'
3
+
4
+ export { default as AutoFormFieldArray } from './AutoFormFieldArray.vue'
5
+ export { default as AutoFormFieldBoolean } from './AutoFormFieldBoolean.vue'
6
+ export { default as AutoFormFieldDate } from './AutoFormFieldDate.vue'
7
+
8
+ export { default as AutoFormFieldEnum } from './AutoFormFieldEnum.vue'
9
+ export { default as AutoFormFieldFile } from './AutoFormFieldFile.vue'
10
+ export { default as AutoFormFieldInput } from './AutoFormFieldInput.vue'
11
+ export { default as AutoFormFieldNumber } from './AutoFormFieldNumber.vue'
12
+ export { default as AutoFormFieldObject } from './AutoFormFieldObject.vue'
13
+ export { default as AutoFormLabel } from './AutoFormLabel.vue'
14
+ export type { Config, ConfigItem, FieldProps } from './interface'
15
+ export { getBaseSchema, getBaseType, getObjectFormSchema } from './utils'
@@ -0,0 +1,95 @@
1
+ import type { Component, InputHTMLAttributes } from 'vue'
2
+ import type { z, ZodAny } from 'zod'
3
+ import type { INPUT_COMPONENTS } from './constant'
4
+
5
+ export interface FieldProps {
6
+ fieldName: string
7
+ label?: string
8
+ required?: boolean
9
+ config?: ConfigItem
10
+ disabled?: boolean
11
+ }
12
+
13
+ export interface Shape {
14
+ type: string
15
+ default?: any
16
+ required?: boolean
17
+ options?: string[]
18
+ schema?: ZodAny
19
+ }
20
+
21
+ export interface InputComponents {
22
+ date: Component;
23
+ select: Component;
24
+ radio: Component;
25
+ checkbox: Component;
26
+ switch: Component;
27
+ textarea: Component;
28
+ number: Component;
29
+ string: Component;
30
+ file: Component;
31
+ array: Component;
32
+ object: Component;
33
+ }
34
+
35
+ export interface ConfigItem {
36
+ /** Value for the `FormLabel` */
37
+ label?: string
38
+ /** Value for the `FormDescription` */
39
+ description?: string
40
+ /** Pick which component to be rendered. */
41
+ component?: keyof typeof INPUT_COMPONENTS | Component
42
+ /** Hide `FormLabel`. */
43
+ hideLabel?: boolean
44
+ inputProps?: InputHTMLAttributes
45
+ }
46
+
47
+ // Define a type to unwrap an array
48
+ type UnwrapArray<T> = T extends (infer U)[] ? U : never
49
+
50
+ export type Config<SchemaType extends object> = {
51
+ // If SchemaType.key is an object, create a nested Config, otherwise ConfigItem
52
+ [Key in keyof SchemaType]?:
53
+ SchemaType[Key] extends any[]
54
+ ? UnwrapArray<Config<SchemaType[Key]>>
55
+ : SchemaType[Key] extends object
56
+ ? Config<SchemaType[Key]>
57
+ : ConfigItem;
58
+ }
59
+
60
+ export enum DependencyType {
61
+ DISABLES,
62
+ REQUIRES,
63
+ HIDES,
64
+ SETS_OPTIONS,
65
+ }
66
+
67
+ interface BaseDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> {
68
+ sourceField: keyof SchemaType
69
+ type: DependencyType
70
+ targetField: keyof SchemaType
71
+ when: (sourceFieldValue: any, targetFieldValue: any) => boolean
72
+ }
73
+
74
+ export type ValueDependency<SchemaType extends z.infer<z.ZodObject<any, any>>> =
75
+ BaseDependency<SchemaType> & {
76
+ type:
77
+ | DependencyType.DISABLES
78
+ | DependencyType.REQUIRES
79
+ | DependencyType.HIDES
80
+ }
81
+
82
+ export type EnumValues = readonly [string, ...string[]]
83
+
84
+ export type OptionsDependency<
85
+ SchemaType extends z.infer<z.ZodObject<any, any>>,
86
+ > = BaseDependency<SchemaType> & {
87
+ type: DependencyType.SETS_OPTIONS
88
+
89
+ // Partial array of values from sourceField that will trigger the dependency
90
+ options: EnumValues
91
+ }
92
+
93
+ export type Dependency<SchemaType extends z.infer<z.ZodObject<any, any>>> =
94
+ | ValueDependency<SchemaType>
95
+ | OptionsDependency<SchemaType>
@@ -0,0 +1,188 @@
1
+ import type { z } from 'zod'
2
+
3
+ // TODO: This should support recursive ZodEffects but TypeScript doesn't allow circular type definitions.
4
+ export type ZodObjectOrWrapped =
5
+ | z.ZodObject<any, any>
6
+ | z.ZodEffects<z.ZodObject<any, any>>
7
+
8
+ /**
9
+ * Beautify a camelCase string.
10
+ * e.g. "myString" -> "My String"
11
+ */
12
+ export function beautifyObjectName(string: string) {
13
+ // Remove bracketed indices
14
+ // if numbers only return the string
15
+ let output = string.replace(/\[\d+\]/g, '').replace(/([A-Z])/g, ' $1')
16
+ output = output.charAt(0).toUpperCase() + output.slice(1)
17
+ return output
18
+ }
19
+
20
+ /**
21
+ * Parse string and extract the index
22
+ * @param string
23
+ * @returns index or undefined
24
+ */
25
+ export function getIndexIfArray(string: string) {
26
+ const indexRegex = /\[(\d+)\]/
27
+ // Match the index
28
+ const match = string.match(indexRegex)
29
+ // Extract the index (number)
30
+ const index = match ? Number.parseInt(match[1]) : undefined
31
+ return index
32
+ }
33
+
34
+ /**
35
+ * Get the lowest level Zod type.
36
+ * This will unpack optionals, refinements, etc.
37
+ */
38
+ export function getBaseSchema<
39
+ ChildType extends z.ZodAny | z.AnyZodObject = z.ZodAny,
40
+ >(schema: ChildType | z.ZodEffects<ChildType>): ChildType | null {
41
+ if (!schema)
42
+ return null;
43
+ if ('innerType' in schema._def)
44
+ return getBaseSchema(schema._def.innerType as ChildType)
45
+
46
+ if ('schema' in schema._def)
47
+ return getBaseSchema(schema._def.schema as ChildType)
48
+
49
+ return schema as ChildType
50
+ }
51
+
52
+ /**
53
+ * Get the type name of the lowest level Zod type.
54
+ * This will unpack optionals, refinements, etc.
55
+ */
56
+ export function getBaseType(schema: z.ZodAny) {
57
+ const baseSchema = getBaseSchema(schema)
58
+ return baseSchema ? baseSchema._def.typeName : '';
59
+ }
60
+
61
+ /**
62
+ * Search for a "ZodDefault" in the Zod stack and return its value.
63
+ */
64
+ export function getDefaultValueInZodStack(schema: z.ZodAny): any {
65
+ const typedSchema = schema as unknown as z.ZodDefault<
66
+ z.ZodNumber | z.ZodString
67
+ >
68
+
69
+ if (typedSchema._def.typeName === 'ZodDefault')
70
+ return typedSchema._def.defaultValue()
71
+
72
+ if ('innerType' in typedSchema._def) {
73
+ return getDefaultValueInZodStack(
74
+ typedSchema._def.innerType as unknown as z.ZodAny,
75
+ )
76
+ }
77
+ if ('schema' in typedSchema._def) {
78
+ return getDefaultValueInZodStack(
79
+ (typedSchema._def as any).schema as z.ZodAny,
80
+ )
81
+ }
82
+
83
+ return undefined
84
+ }
85
+
86
+ export function getObjectFormSchema(
87
+ schema: ZodObjectOrWrapped,
88
+ ): z.ZodObject<any, any> {
89
+ if (schema?._def.typeName === 'ZodEffects') {
90
+ const typedSchema = schema as z.ZodEffects<z.ZodObject<any, any>>
91
+ return getObjectFormSchema(typedSchema._def.schema)
92
+ }
93
+ return schema as z.ZodObject<any, any>
94
+ }
95
+
96
+ function isIndex(value: unknown): value is number {
97
+ return Number(value) >= 0;
98
+ }
99
+ /**
100
+ * Constructs a path with dot paths for arrays to use brackets to be compatible with vee-validate path syntax
101
+ */
102
+ export function normalizeFormPath(path: string): string {
103
+ const pathArr = path.split('.')
104
+ if (!pathArr.length)
105
+ return '';
106
+
107
+ let fullPath = String(pathArr[0])
108
+ for (let i = 1; i < pathArr.length; i++) {
109
+ if (isIndex(pathArr[i])) {
110
+ fullPath += `[${pathArr[i]}]`
111
+ continue
112
+ }
113
+
114
+ fullPath += `.${pathArr[i]}`
115
+ }
116
+
117
+ return fullPath
118
+ }
119
+
120
+ type NestedRecord = Record<string, unknown> | { [k: string]: NestedRecord }
121
+ /**
122
+ * Checks if the path opted out of nested fields using `[fieldName]` syntax
123
+ */
124
+ export function isNotNestedPath(path: string) {
125
+ return /^\[.+\]$/.test(path)
126
+ }
127
+ function isObject(obj: unknown): obj is Record<string, unknown> {
128
+ return obj !== null && !!obj && typeof obj === 'object' && !Array.isArray(obj);
129
+ }
130
+ function isContainerValue(value: unknown): value is Record<string, unknown> {
131
+ return isObject(value) || Array.isArray(value)
132
+ }
133
+ function cleanupNonNestedPath(path: string) {
134
+ if (isNotNestedPath(path))
135
+ return path.replace(/\[|\]/g, '');
136
+
137
+ return path
138
+ }
139
+
140
+ /**
141
+ * Gets a nested property value from an object
142
+ */
143
+ export function getFromPath<TValue = unknown>(object: NestedRecord | undefined, path: string): TValue | undefined
144
+ export function getFromPath<TValue = unknown, TFallback = TValue>(
145
+ object: NestedRecord | undefined,
146
+ path: string,
147
+ fallback?: TFallback,
148
+ ): TValue | TFallback
149
+ export function getFromPath<TValue = unknown, TFallback = TValue>(
150
+ object: NestedRecord | undefined,
151
+ path: string,
152
+ fallback?: TFallback,
153
+ ): TValue | TFallback | undefined {
154
+ if (!object)
155
+ return fallback
156
+
157
+ if (isNotNestedPath(path))
158
+ return object[cleanupNonNestedPath(path)] as TValue | undefined
159
+
160
+ const resolvedValue = (path || '')
161
+ .split(/\.|\[(\d+)\]/)
162
+ .filter(Boolean)
163
+ .reduce((acc, propKey) => {
164
+ if (isContainerValue(acc) && propKey in acc)
165
+ return acc[propKey]
166
+
167
+ return fallback
168
+ }, object as unknown)
169
+
170
+ return resolvedValue as TValue | undefined
171
+ }
172
+
173
+ type Booleanish = boolean | 'true' | 'false'
174
+
175
+ export function booleanishToBoolean(value: Booleanish) {
176
+ switch (value) {
177
+ case 'true':
178
+ case true:
179
+ return true;
180
+ case 'false':
181
+ case false:
182
+ return false;
183
+ }
184
+ }
185
+
186
+ export function maybeBooleanishToBoolean(value?: Booleanish) {
187
+ return value ? booleanishToBoolean(value) : undefined
188
+ }
@@ -0,0 +1,24 @@
1
+ <script setup lang="ts">
2
+ import { cn } from 'fulldev-ui/lib/utils'
3
+ import { AvatarRoot } from 'radix-vue'
4
+ import type { HTMLAttributes } from 'vue'
5
+ import { avatarVariant, type AvatarVariants } from '.'
6
+
7
+ const props = withDefaults(
8
+ defineProps<{
9
+ class?: HTMLAttributes['class']
10
+ size?: AvatarVariants['size']
11
+ shape?: AvatarVariants['shape']
12
+ }>(),
13
+ {
14
+ size: 'sm',
15
+ shape: 'circle',
16
+ }
17
+ )
18
+ </script>
19
+
20
+ <template>
21
+ <AvatarRoot :class="cn(avatarVariant({ size, shape }), props.class)">
22
+ <slot />
23
+ </AvatarRoot>
24
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { AvatarFallback, type AvatarFallbackProps } from 'radix-vue'
3
+
4
+ const props = defineProps<AvatarFallbackProps>()
5
+ </script>
6
+
7
+ <template>
8
+ <AvatarFallback v-bind="props">
9
+ <slot />
10
+ </AvatarFallback>
11
+ </template>
@@ -0,0 +1,9 @@
1
+ <script setup lang="ts">
2
+ import { AvatarImage, type AvatarImageProps } from 'radix-vue'
3
+
4
+ const props = defineProps<AvatarImageProps>()
5
+ </script>
6
+
7
+ <template>
8
+ <AvatarImage v-bind="props" class="h-full w-full object-cover" />
9
+ </template>
@@ -0,0 +1,24 @@
1
+ import { cva, type VariantProps } from 'class-variance-authority'
2
+
3
+ export { default as Avatar } from './Avatar.vue'
4
+ export { default as AvatarFallback } from './AvatarFallback.vue'
5
+ export { default as AvatarImage } from './AvatarImage.vue'
6
+
7
+ export const avatarVariant = cva(
8
+ 'inline-flex items-center justify-center font-normal text-foreground select-none shrink-0 bg-secondary overflow-hidden',
9
+ {
10
+ variants: {
11
+ size: {
12
+ sm: 'h-10 w-10 text-xs',
13
+ base: 'h-16 w-16 text-2xl',
14
+ lg: 'h-32 w-32 text-5xl',
15
+ },
16
+ shape: {
17
+ circle: 'rounded-full',
18
+ square: 'rounded-md',
19
+ },
20
+ },
21
+ }
22
+ )
23
+
24
+ export type AvatarVariants = VariantProps<typeof avatarVariant>
@@ -0,0 +1,16 @@
1
+ <script setup lang="ts">
2
+ import { cn } from 'fulldev-ui/lib/utils'
3
+ import type { HTMLAttributes } from 'vue'
4
+ import { type BadgeVariants, badgeVariants } from '.'
5
+
6
+ const props = defineProps<{
7
+ variant?: BadgeVariants['variant']
8
+ class?: HTMLAttributes['class']
9
+ }>()
10
+ </script>
11
+
12
+ <template>
13
+ <div :class="cn(badgeVariants({ variant }), props.class)">
14
+ <slot />
15
+ </div>
16
+ </template>
@@ -0,0 +1,22 @@
1
+ import { cva, type VariantProps } from 'class-variance-authority'
2
+
3
+ export { default as Badge } from './Badge.vue'
4
+
5
+ export const badgeVariants = cva(
6
+ 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
7
+ {
8
+ variants: {
9
+ variant: {
10
+ default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',
11
+ secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
12
+ destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
13
+ outline: 'text-foreground',
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ variant: 'default',
18
+ },
19
+ }
20
+ )
21
+
22
+ export type BadgeVariants = VariantProps<typeof badgeVariants>
@@ -0,0 +1,13 @@
1
+ <script lang="ts" setup>
2
+ import type { HTMLAttributes } from 'vue'
3
+
4
+ const props = defineProps<{
5
+ class?: HTMLAttributes['class']
6
+ }>()
7
+ </script>
8
+
9
+ <template>
10
+ <nav aria-label="breadcrumb" :class="props.class">
11
+ <slot />
12
+ </nav>
13
+ </template>
@@ -0,0 +1,22 @@
1
+ <script lang="ts" setup>
2
+ import { cn } from 'fulldev-ui/lib/utils'
3
+ import { MoreHorizontal } from 'lucide-vue-next'
4
+ import type { HTMLAttributes } from 'vue'
5
+
6
+ const props = defineProps<{
7
+ class?: HTMLAttributes['class']
8
+ }>()
9
+ </script>
10
+
11
+ <template>
12
+ <span
13
+ role="presentation"
14
+ aria-hidden="true"
15
+ :class="cn('flex h-9 w-9 items-center justify-center', props.class)"
16
+ >
17
+ <slot>
18
+ <MoreHorizontal class="h-4 w-4" />
19
+ </slot>
20
+ <span class="sr-only">More</span>
21
+ </span>
22
+ </template>
@@ -0,0 +1,14 @@
1
+ <script lang="ts" setup>
2
+ import { cn } from 'fulldev-ui/lib/utils'
3
+ import type { HTMLAttributes } from 'vue'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <li :class="cn('inline-flex items-center gap-1.5', props.class)">
12
+ <slot />
13
+ </li>
14
+ </template>
@@ -0,0 +1,19 @@
1
+ <script lang="ts" setup>
2
+ import { cn } from 'fulldev-ui/lib/utils'
3
+ import { Primitive, type PrimitiveProps } from 'radix-vue'
4
+ import type { HTMLAttributes } from 'vue'
5
+
6
+ const props = withDefaults(defineProps<PrimitiveProps & { class?: HTMLAttributes['class'] }>(), {
7
+ as: 'a',
8
+ })
9
+ </script>
10
+
11
+ <template>
12
+ <Primitive
13
+ :as="as"
14
+ :as-child="asChild"
15
+ :class="cn('transition-colors hover:text-foreground', props.class)"
16
+ >
17
+ <slot />
18
+ </Primitive>
19
+ </template>
@@ -0,0 +1,16 @@
1
+ <script lang="ts" setup>
2
+ import { cn } from 'fulldev-ui/lib/utils'
3
+ import type { HTMLAttributes } from 'vue'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <ol
12
+ :class="cn('flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5', props.class)"
13
+ >
14
+ <slot />
15
+ </ol>
16
+ </template>
@@ -0,0 +1,19 @@
1
+ <script lang="ts" setup>
2
+ import { cn } from 'fulldev-ui/lib/utils'
3
+ import type { HTMLAttributes } from 'vue'
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class']
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <span
12
+ role="link"
13
+ aria-disabled="true"
14
+ aria-current="page"
15
+ :class="cn('font-normal text-foreground', props.class)"
16
+ >
17
+ <slot />
18
+ </span>
19
+ </template>
@@ -0,0 +1,21 @@
1
+ <script lang="ts" setup>
2
+ import { cn } from 'fulldev-ui/lib/utils'
3
+ import { ChevronRight } from 'lucide-vue-next'
4
+ import type { HTMLAttributes } from 'vue'
5
+
6
+ const props = defineProps<{
7
+ class?: HTMLAttributes['class']
8
+ }>()
9
+ </script>
10
+
11
+ <template>
12
+ <li
13
+ role="presentation"
14
+ aria-hidden="true"
15
+ :class="cn('[&>svg]:w-3.5 [&>svg]:h-3.5', props.class)"
16
+ >
17
+ <slot>
18
+ <ChevronRight />
19
+ </slot>
20
+ </li>
21
+ </template>