@aleph-alpha/ui-library 1.9.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/README.md +14 -0
  2. package/dist/system/index-CkH7HQaa.js +7 -0
  3. package/dist/system/index-CuHwEAQ_.js +7 -0
  4. package/dist/system/index.d.ts +1322 -318
  5. package/dist/system/lib.js +8839 -6993
  6. package/package.json +2 -1
  7. package/src/@types/shims-vue.d.ts +5 -0
  8. package/src/__tests__/placeholder.test.ts +7 -0
  9. package/src/compositions/UiCompositionPlaceholder/UiCompositionPlaceholder.vue +9 -0
  10. package/src/compositions/UiCompositionPlaceholder/index.ts +1 -0
  11. package/src/compositions/UiCompositionPlaceholder/types.ts +8 -0
  12. package/src/compositions/UiDataTable/UiDataTable.mock.ts +104 -0
  13. package/src/compositions/UiDataTable/UiDataTable.stories.ts +1575 -0
  14. package/src/compositions/UiDataTable/UiDataTable.vue +129 -0
  15. package/src/compositions/UiDataTable/UiDataTableColumnHeader.vue +97 -0
  16. package/src/compositions/UiDataTable/UiDataTablePagination.vue +147 -0
  17. package/src/compositions/UiDataTable/UiDataTableToolbar.vue +85 -0
  18. package/src/compositions/UiDataTable/__tests__/UiDataTable.test.ts +372 -0
  19. package/src/compositions/UiDataTable/__tests__/UiDataTableColumnHeader.test.ts +217 -0
  20. package/src/compositions/UiDataTable/__tests__/UiDataTablePagination.test.ts +274 -0
  21. package/src/compositions/UiDataTable/__tests__/UiDataTableToolbar.test.ts +198 -0
  22. package/src/compositions/UiDataTable/constants.ts +77 -0
  23. package/src/compositions/UiDataTable/index.ts +6 -0
  24. package/src/compositions/UiDataTable/types.ts +39 -0
  25. package/src/compositions/UiDatePicker/UiDatePicker.stories.ts +976 -0
  26. package/src/compositions/UiDatePicker/UiDatePicker.vue +193 -0
  27. package/src/compositions/UiDatePicker/__tests__/UiDatePicker.test.ts +325 -0
  28. package/src/compositions/UiDatePicker/index.ts +14 -0
  29. package/src/compositions/UiDatePicker/types.ts +220 -0
  30. package/src/compositions/index.ts +8 -0
  31. package/src/foundations/UiPlaceholder/UiPlaceholder.vue +9 -0
  32. package/src/foundations/UiPlaceholder/index.ts +1 -0
  33. package/src/foundations/UiPlaceholder/types.ts +8 -0
  34. package/src/foundations/index.ts +6 -0
  35. package/src/index.ts +27 -0
  36. package/src/lib/utils.ts +6 -0
  37. package/src/primitives/UiAccordion/UiAccordion.stories.ts +476 -0
  38. package/src/primitives/UiAccordion/UiAccordion.vue +31 -0
  39. package/src/primitives/UiAccordion/UiAccordionContent.vue +16 -0
  40. package/src/primitives/UiAccordion/UiAccordionItem.vue +16 -0
  41. package/src/primitives/UiAccordion/UiAccordionTrigger.vue +23 -0
  42. package/src/primitives/UiAccordion/__tests__/UiAccordion.test.ts +198 -0
  43. package/src/primitives/UiAccordion/index.ts +6 -0
  44. package/src/primitives/UiAccordion/types.ts +95 -0
  45. package/src/primitives/UiAlert/UiAlert.stories.ts +199 -0
  46. package/src/primitives/UiAlert/UiAlert.vue +27 -0
  47. package/src/primitives/UiAlert/UiAlertDescription.vue +13 -0
  48. package/src/primitives/UiAlert/UiAlertTitle.vue +13 -0
  49. package/src/primitives/UiAlert/__tests__/UiAlert.test.ts +20 -0
  50. package/src/primitives/UiAlert/constants.ts +3 -0
  51. package/src/primitives/UiAlert/index.ts +5 -0
  52. package/src/primitives/UiAlert/types.ts +14 -0
  53. package/src/primitives/UiAlertDialog/UiAlertDialog.stories.ts +186 -0
  54. package/src/primitives/UiAlertDialog/UiAlertDialog.vue +18 -0
  55. package/src/primitives/UiAlertDialog/UiAlertDialogAction.vue +16 -0
  56. package/src/primitives/UiAlertDialog/UiAlertDialogCancel.vue +16 -0
  57. package/src/primitives/UiAlertDialog/UiAlertDialogContent.vue +26 -0
  58. package/src/primitives/UiAlertDialog/UiAlertDialogDescription.vue +16 -0
  59. package/src/primitives/UiAlertDialog/UiAlertDialogFooter.vue +13 -0
  60. package/src/primitives/UiAlertDialog/UiAlertDialogHeader.vue +16 -0
  61. package/src/primitives/UiAlertDialog/UiAlertDialogTitle.vue +16 -0
  62. package/src/primitives/UiAlertDialog/UiAlertDialogTrigger.vue +17 -0
  63. package/src/primitives/UiAlertDialog/__tests__/UiAlertDialog.test.ts +184 -0
  64. package/src/primitives/UiAlertDialog/index.ts +9 -0
  65. package/src/primitives/UiAlertDialog/types.ts +83 -0
  66. package/src/primitives/UiAvatar/UiAvatar.stories.ts +194 -0
  67. package/src/primitives/UiAvatar/UiAvatar.vue +13 -0
  68. package/src/primitives/UiAvatar/UiAvatarFallback.vue +13 -0
  69. package/src/primitives/UiAvatar/UiAvatarImage.vue +14 -0
  70. package/src/primitives/UiAvatar/__tests__/UiAvatar.test.ts +36 -0
  71. package/src/primitives/UiAvatar/index.ts +3 -0
  72. package/src/primitives/UiAvatar/types.ts +17 -0
  73. package/src/primitives/UiBadge/UiBadge.stories.ts +373 -0
  74. package/src/primitives/UiBadge/UiBadge.vue +21 -0
  75. package/src/primitives/UiBadge/__tests__/UiBadge.test.ts +44 -0
  76. package/src/primitives/UiBadge/constants.ts +3 -0
  77. package/src/primitives/UiBadge/index.ts +2 -0
  78. package/src/primitives/UiBadge/types.ts +48 -0
  79. package/src/primitives/UiButton/UiButton.stories.ts +537 -0
  80. package/src/primitives/UiButton/UiButton.vue +72 -0
  81. package/src/primitives/UiButton/__tests__/UiButton.test.ts +133 -0
  82. package/src/primitives/UiButton/index.ts +2 -0
  83. package/src/primitives/UiButton/types.ts +87 -0
  84. package/src/primitives/UiCalendar/UiCalendar.stories.ts +797 -0
  85. package/src/primitives/UiCalendar/UiCalendar.vue +67 -0
  86. package/src/primitives/UiCalendar/__tests__/UiCalendar.test.ts +45 -0
  87. package/src/primitives/UiCalendar/index.ts +15 -0
  88. package/src/primitives/UiCalendar/types.ts +236 -0
  89. package/src/primitives/UiCard/UiCard.stories.ts +197 -0
  90. package/src/primitives/UiCard/UiCard.vue +13 -0
  91. package/src/primitives/UiCard/UiCardAction.vue +13 -0
  92. package/src/primitives/UiCard/UiCardContent.vue +13 -0
  93. package/src/primitives/UiCard/UiCardDescription.vue +13 -0
  94. package/src/primitives/UiCard/UiCardFooter.vue +13 -0
  95. package/src/primitives/UiCard/UiCardHeader.vue +13 -0
  96. package/src/primitives/UiCard/UiCardTitle.vue +13 -0
  97. package/src/primitives/UiCard/__tests__/UiCard.test.ts +19 -0
  98. package/src/primitives/UiCard/__tests__/UiCardAction.test.ts +19 -0
  99. package/src/primitives/UiCard/__tests__/UiCardContent.test.ts +19 -0
  100. package/src/primitives/UiCard/__tests__/UiCardDescription.test.ts +19 -0
  101. package/src/primitives/UiCard/__tests__/UiCardFooter.test.ts +19 -0
  102. package/src/primitives/UiCard/__tests__/UiCardHeader.test.ts +19 -0
  103. package/src/primitives/UiCard/__tests__/UiCardTitle.test.ts +19 -0
  104. package/src/primitives/UiCard/index.ts +7 -0
  105. package/src/primitives/UiCard/types.ts +10 -0
  106. package/src/primitives/UiCheckbox/UiCheckbox.stories.ts +231 -0
  107. package/src/primitives/UiCheckbox/UiCheckbox.vue +19 -0
  108. package/src/primitives/UiCheckbox/__tests__/UiCheckbox.test.ts +29 -0
  109. package/src/primitives/UiCheckbox/index.ts +2 -0
  110. package/src/primitives/UiCheckbox/types.ts +30 -0
  111. package/src/primitives/UiDrawer/UiDrawer.stories.ts +602 -0
  112. package/src/primitives/UiDrawer/UiDrawer.vue +19 -0
  113. package/src/primitives/UiDrawer/UiDrawerClose.vue +16 -0
  114. package/src/primitives/UiDrawer/UiDrawerContent.vue +29 -0
  115. package/src/primitives/UiDrawer/UiDrawerDescription.vue +16 -0
  116. package/src/primitives/UiDrawer/UiDrawerFooter.vue +16 -0
  117. package/src/primitives/UiDrawer/UiDrawerHeader.vue +16 -0
  118. package/src/primitives/UiDrawer/UiDrawerTitle.vue +16 -0
  119. package/src/primitives/UiDrawer/UiDrawerTrigger.vue +16 -0
  120. package/src/primitives/UiDrawer/__tests__/UiDrawer.test.ts +229 -0
  121. package/src/primitives/UiDrawer/index.ts +8 -0
  122. package/src/primitives/UiDrawer/types.ts +96 -0
  123. package/src/primitives/UiDropdownMenu/UiDropdownMenu.stories.ts +760 -0
  124. package/src/primitives/UiDropdownMenu/UiDropdownMenu.vue +25 -0
  125. package/src/primitives/UiDropdownMenu/UiDropdownMenuCheckboxItem.vue +29 -0
  126. package/src/primitives/UiDropdownMenu/UiDropdownMenuContent.vue +27 -0
  127. package/src/primitives/UiDropdownMenu/UiDropdownMenuGroup.vue +13 -0
  128. package/src/primitives/UiDropdownMenu/UiDropdownMenuItem.vue +26 -0
  129. package/src/primitives/UiDropdownMenu/UiDropdownMenuLabel.vue +18 -0
  130. package/src/primitives/UiDropdownMenu/UiDropdownMenuRadioGroup.vue +20 -0
  131. package/src/primitives/UiDropdownMenu/UiDropdownMenuRadioItem.vue +26 -0
  132. package/src/primitives/UiDropdownMenu/UiDropdownMenuSeparator.vue +11 -0
  133. package/src/primitives/UiDropdownMenu/UiDropdownMenuShortcut.vue +13 -0
  134. package/src/primitives/UiDropdownMenu/UiDropdownMenuSub.vue +26 -0
  135. package/src/primitives/UiDropdownMenu/UiDropdownMenuSubContent.vue +23 -0
  136. package/src/primitives/UiDropdownMenu/UiDropdownMenuSubTrigger.vue +24 -0
  137. package/src/primitives/UiDropdownMenu/UiDropdownMenuTrigger.vue +24 -0
  138. package/src/primitives/UiDropdownMenu/__tests__/UiDropdownMenu.test.ts +557 -0
  139. package/src/primitives/UiDropdownMenu/index.ts +16 -0
  140. package/src/primitives/UiDropdownMenu/types.ts +219 -0
  141. package/src/primitives/UiField/UiField.stories.ts +1496 -0
  142. package/src/primitives/UiField/UiField.vue +18 -0
  143. package/src/primitives/UiField/UiFieldContent.vue +13 -0
  144. package/src/primitives/UiField/UiFieldDescription.vue +13 -0
  145. package/src/primitives/UiField/UiFieldError.vue +20 -0
  146. package/src/primitives/UiField/UiFieldGroup.vue +13 -0
  147. package/src/primitives/UiField/UiFieldLabel.vue +16 -0
  148. package/src/primitives/UiField/UiFieldLegend.vue +13 -0
  149. package/src/primitives/UiField/UiFieldSeparator.vue +13 -0
  150. package/src/primitives/UiField/UiFieldSet.vue +13 -0
  151. package/src/primitives/UiField/UiFieldTitle.vue +13 -0
  152. package/src/primitives/UiField/__tests__/UiFieldError.test.ts +35 -0
  153. package/src/primitives/UiField/index.ts +10 -0
  154. package/src/primitives/UiField/types.ts +47 -0
  155. package/src/primitives/UiIcon/UiIcon.stories.ts +95 -0
  156. package/src/primitives/UiIcon/UiIcon.vue +14 -0
  157. package/src/primitives/UiIcon/__tests__/UiIcon.test.ts +24 -0
  158. package/src/primitives/UiIcon/index.ts +1 -0
  159. package/src/primitives/UiIcon/types.ts +23 -0
  160. package/src/primitives/UiIconButton/UiIconButton.stories.ts +446 -0
  161. package/src/primitives/UiIconButton/UiIconButton.vue +63 -0
  162. package/src/primitives/UiIconButton/__tests__/UiIconButton.test.ts +102 -0
  163. package/src/primitives/UiIconButton/index.ts +2 -0
  164. package/src/primitives/UiIconButton/types.ts +67 -0
  165. package/src/primitives/UiInput/UiInput.stories.ts +193 -0
  166. package/src/primitives/UiInput/UiInput.vue +19 -0
  167. package/src/primitives/UiInput/__tests__/UiInput.test.ts +38 -0
  168. package/src/primitives/UiInput/index.ts +2 -0
  169. package/src/primitives/UiInput/types.ts +31 -0
  170. package/src/primitives/UiPopover/UiPopover.stories.ts +394 -0
  171. package/src/primitives/UiPopover/UiPopover.vue +17 -0
  172. package/src/primitives/UiPopover/UiPopoverContent.vue +27 -0
  173. package/src/primitives/UiPopover/UiPopoverTrigger.vue +16 -0
  174. package/src/primitives/UiPopover/__tests__/UiPopover.test.ts +87 -0
  175. package/src/primitives/UiPopover/index.ts +5 -0
  176. package/src/primitives/UiPopover/types.ts +86 -0
  177. package/src/primitives/UiProgress/UiProgress.stories.ts +92 -0
  178. package/src/primitives/UiProgress/UiProgress.vue +25 -0
  179. package/src/primitives/UiProgress/__tests__/UiProgress.test.ts +46 -0
  180. package/src/primitives/UiProgress/index.ts +2 -0
  181. package/src/primitives/UiProgress/types.ts +16 -0
  182. package/src/primitives/UiRadioGroup/UiRadioGroup.stories.ts +291 -0
  183. package/src/primitives/UiRadioGroup/UiRadioGroup.vue +43 -0
  184. package/src/primitives/UiRadioGroup/UiRadioGroupItem.vue +18 -0
  185. package/src/primitives/UiRadioGroup/__tests__/UiRadioGroup.test.ts +404 -0
  186. package/src/primitives/UiRadioGroup/index.ts +4 -0
  187. package/src/primitives/UiRadioGroup/types.ts +66 -0
  188. package/src/primitives/UiRangeCalendar/UiRangeCalendar.stories.ts +609 -0
  189. package/src/primitives/UiRangeCalendar/UiRangeCalendar.vue +50 -0
  190. package/src/primitives/UiRangeCalendar/__tests__/UiRangeCalendar.test.ts +35 -0
  191. package/src/primitives/UiRangeCalendar/index.ts +13 -0
  192. package/src/primitives/UiRangeCalendar/types.ts +184 -0
  193. package/src/primitives/UiSelect/UiSelect.stories.ts +425 -0
  194. package/src/primitives/UiSelect/UiSelect.vue +47 -0
  195. package/src/primitives/UiSelect/UiSelectContent.vue +30 -0
  196. package/src/primitives/UiSelect/UiSelectGroup.vue +13 -0
  197. package/src/primitives/UiSelect/UiSelectItem.vue +19 -0
  198. package/src/primitives/UiSelect/UiSelectLabel.vue +13 -0
  199. package/src/primitives/UiSelect/UiSelectSeparator.vue +11 -0
  200. package/src/primitives/UiSelect/UiSelectTrigger.vue +30 -0
  201. package/src/primitives/UiSelect/UiSelectValue.vue +18 -0
  202. package/src/primitives/UiSelect/__tests__/UiSelect.test.ts +211 -0
  203. package/src/primitives/UiSelect/__tests__/UiSelectContent.test.ts +30 -0
  204. package/src/primitives/UiSelect/__tests__/UiSelectGroup.test.ts +85 -0
  205. package/src/primitives/UiSelect/__tests__/UiSelectItem.test.ts +79 -0
  206. package/src/primitives/UiSelect/__tests__/UiSelectLabel.test.ts +83 -0
  207. package/src/primitives/UiSelect/__tests__/UiSelectSeparator.test.ts +82 -0
  208. package/src/primitives/UiSelect/__tests__/UiSelectTrigger.test.ts +54 -0
  209. package/src/primitives/UiSelect/__tests__/UiSelectValue.test.ts +39 -0
  210. package/src/primitives/UiSelect/index.ts +10 -0
  211. package/src/primitives/UiSelect/types.ts +93 -0
  212. package/src/primitives/UiSlider/UiSlider.stories.ts +226 -0
  213. package/src/primitives/UiSlider/UiSlider.vue +44 -0
  214. package/src/primitives/UiSlider/__tests__/UiSlider.test.ts +76 -0
  215. package/src/primitives/UiSlider/index.ts +1 -0
  216. package/src/primitives/UiSlider/types.ts +101 -0
  217. package/src/primitives/UiSpinner/UiSpinner.stories.ts +143 -0
  218. package/src/primitives/UiSpinner/UiSpinner.vue +16 -0
  219. package/src/primitives/UiSpinner/__tests__/UiSpinner.test.ts +19 -0
  220. package/src/primitives/UiSpinner/index.ts +2 -0
  221. package/src/primitives/UiSpinner/types.ts +16 -0
  222. package/src/primitives/UiSwitch/UiSwitch.stories.ts +120 -0
  223. package/src/primitives/UiSwitch/UiSwitch.vue +21 -0
  224. package/src/primitives/UiSwitch/__tests__/UiSwitch.test.ts +47 -0
  225. package/src/primitives/UiSwitch/index.ts +2 -0
  226. package/src/primitives/UiSwitch/types.ts +25 -0
  227. package/src/primitives/UiTable/UiTable.stories.ts +505 -0
  228. package/src/primitives/UiTable/UiTable.vue +13 -0
  229. package/src/primitives/UiTable/UiTableBody.vue +13 -0
  230. package/src/primitives/UiTable/UiTableCaption.vue +13 -0
  231. package/src/primitives/UiTable/UiTableCell.vue +16 -0
  232. package/src/primitives/UiTable/UiTableEmpty.vue +18 -0
  233. package/src/primitives/UiTable/UiTableFooter.vue +13 -0
  234. package/src/primitives/UiTable/UiTableHead.vue +18 -0
  235. package/src/primitives/UiTable/UiTableHeader.vue +13 -0
  236. package/src/primitives/UiTable/UiTableRow.vue +18 -0
  237. package/src/primitives/UiTable/__tests__/UiTable.test.ts +19 -0
  238. package/src/primitives/UiTable/__tests__/UiTableBody.test.ts +19 -0
  239. package/src/primitives/UiTable/__tests__/UiTableCaption.test.ts +19 -0
  240. package/src/primitives/UiTable/__tests__/UiTableCell.test.ts +26 -0
  241. package/src/primitives/UiTable/__tests__/UiTableEmpty.test.ts +32 -0
  242. package/src/primitives/UiTable/__tests__/UiTableFooter.test.ts +19 -0
  243. package/src/primitives/UiTable/__tests__/UiTableHead.test.ts +43 -0
  244. package/src/primitives/UiTable/__tests__/UiTableHeader.test.ts +19 -0
  245. package/src/primitives/UiTable/__tests__/UiTableRow.test.ts +32 -0
  246. package/src/primitives/UiTable/index.ts +16 -0
  247. package/src/primitives/UiTable/types.ts +68 -0
  248. package/src/primitives/UiTabs/UiTabs.stories.ts +456 -0
  249. package/src/primitives/UiTabs/UiTabs.vue +31 -0
  250. package/src/primitives/UiTabs/UiTabsContent.vue +16 -0
  251. package/src/primitives/UiTabs/UiTabsList.vue +16 -0
  252. package/src/primitives/UiTabs/UiTabsTrigger.vue +16 -0
  253. package/src/primitives/UiTabs/__tests__/UiTabs.test.ts +122 -0
  254. package/src/primitives/UiTabs/index.ts +6 -0
  255. package/src/primitives/UiTabs/types.ts +68 -0
  256. package/src/primitives/UiTextarea/UiTextarea.stories.ts +107 -0
  257. package/src/primitives/UiTextarea/UiTextarea.vue +19 -0
  258. package/src/primitives/UiTextarea/__tests__/UiTextarea.test.ts +40 -0
  259. package/src/primitives/UiTextarea/index.ts +2 -0
  260. package/src/primitives/UiTextarea/types.ts +30 -0
  261. package/src/primitives/UiTooltip/UiTooltip.stories.ts +550 -0
  262. package/src/primitives/UiTooltip/UiTooltip.vue +42 -0
  263. package/src/primitives/UiTooltip/__tests__/UiTooltip.test.ts +78 -0
  264. package/src/primitives/UiTooltip/index.ts +2 -0
  265. package/src/primitives/UiTooltip/types.ts +53 -0
  266. package/src/primitives/index.ts +33 -0
  267. package/src/primitives/shadcn/accordion/Accordion.vue +15 -0
  268. package/src/primitives/shadcn/accordion/AccordionContent.vue +23 -0
  269. package/src/primitives/shadcn/accordion/AccordionItem.vue +24 -0
  270. package/src/primitives/shadcn/accordion/AccordionTrigger.vue +35 -0
  271. package/src/primitives/shadcn/accordion/index.ts +4 -0
  272. package/src/primitives/shadcn/alert/Alert.vue +17 -0
  273. package/src/primitives/shadcn/alert/AlertDescription.vue +22 -0
  274. package/src/primitives/shadcn/alert/AlertTitle.vue +17 -0
  275. package/src/primitives/shadcn/alert/index.ts +24 -0
  276. package/src/primitives/shadcn/alert-dialog/AlertDialog.vue +15 -0
  277. package/src/primitives/shadcn/alert-dialog/AlertDialogAction.vue +18 -0
  278. package/src/primitives/shadcn/alert-dialog/AlertDialogCancel.vue +21 -0
  279. package/src/primitives/shadcn/alert-dialog/AlertDialogContent.vue +44 -0
  280. package/src/primitives/shadcn/alert-dialog/AlertDialogDescription.vue +21 -0
  281. package/src/primitives/shadcn/alert-dialog/AlertDialogFooter.vue +17 -0
  282. package/src/primitives/shadcn/alert-dialog/AlertDialogHeader.vue +17 -0
  283. package/src/primitives/shadcn/alert-dialog/AlertDialogTitle.vue +21 -0
  284. package/src/primitives/shadcn/alert-dialog/AlertDialogTrigger.vue +12 -0
  285. package/src/primitives/shadcn/alert-dialog/index.ts +9 -0
  286. package/src/primitives/shadcn/avatar/Avatar.vue +18 -0
  287. package/src/primitives/shadcn/avatar/AvatarFallback.vue +21 -0
  288. package/src/primitives/shadcn/avatar/AvatarImage.vue +12 -0
  289. package/src/primitives/shadcn/avatar/index.ts +3 -0
  290. package/src/primitives/shadcn/badge/Badge.vue +28 -0
  291. package/src/primitives/shadcn/badge/index.ts +24 -0
  292. package/src/primitives/shadcn/button/Button.vue +29 -0
  293. package/src/primitives/shadcn/button/index.ts +36 -0
  294. package/src/primitives/shadcn/calendar/Calendar.vue +206 -0
  295. package/src/primitives/shadcn/calendar/CalendarCell.vue +28 -0
  296. package/src/primitives/shadcn/calendar/CalendarCellTrigger.vue +44 -0
  297. package/src/primitives/shadcn/calendar/CalendarGrid.vue +23 -0
  298. package/src/primitives/shadcn/calendar/CalendarGridBody.vue +12 -0
  299. package/src/primitives/shadcn/calendar/CalendarGridHead.vue +13 -0
  300. package/src/primitives/shadcn/calendar/CalendarGridRow.vue +23 -0
  301. package/src/primitives/shadcn/calendar/CalendarHeadCell.vue +23 -0
  302. package/src/primitives/shadcn/calendar/CalendarHeader.vue +23 -0
  303. package/src/primitives/shadcn/calendar/CalendarHeading.vue +30 -0
  304. package/src/primitives/shadcn/calendar/CalendarNextButton.vue +33 -0
  305. package/src/primitives/shadcn/calendar/CalendarPrevButton.vue +33 -0
  306. package/src/primitives/shadcn/calendar/index.ts +14 -0
  307. package/src/primitives/shadcn/card/Card.vue +22 -0
  308. package/src/primitives/shadcn/card/CardAction.vue +17 -0
  309. package/src/primitives/shadcn/card/CardContent.vue +14 -0
  310. package/src/primitives/shadcn/card/CardDescription.vue +14 -0
  311. package/src/primitives/shadcn/card/CardFooter.vue +14 -0
  312. package/src/primitives/shadcn/card/CardHeader.vue +22 -0
  313. package/src/primitives/shadcn/card/CardTitle.vue +14 -0
  314. package/src/primitives/shadcn/card/index.ts +7 -0
  315. package/src/primitives/shadcn/checkbox/Checkbox.vue +38 -0
  316. package/src/primitives/shadcn/checkbox/index.ts +1 -0
  317. package/src/primitives/shadcn/drawer/Drawer.vue +15 -0
  318. package/src/primitives/shadcn/drawer/DrawerClose.vue +12 -0
  319. package/src/primitives/shadcn/drawer/DrawerContent.vue +52 -0
  320. package/src/primitives/shadcn/drawer/DrawerDescription.vue +20 -0
  321. package/src/primitives/shadcn/drawer/DrawerFooter.vue +17 -0
  322. package/src/primitives/shadcn/drawer/DrawerHeader.vue +17 -0
  323. package/src/primitives/shadcn/drawer/DrawerTitle.vue +20 -0
  324. package/src/primitives/shadcn/drawer/DrawerTrigger.vue +12 -0
  325. package/src/primitives/shadcn/drawer/index.ts +8 -0
  326. package/src/primitives/shadcn/dropdown-menu/DropdownMenu.vue +15 -0
  327. package/src/primitives/shadcn/dropdown-menu/DropdownMenuCheckboxItem.vue +41 -0
  328. package/src/primitives/shadcn/dropdown-menu/DropdownMenuContent.vue +40 -0
  329. package/src/primitives/shadcn/dropdown-menu/DropdownMenuGroup.vue +12 -0
  330. package/src/primitives/shadcn/dropdown-menu/DropdownMenuItem.vue +41 -0
  331. package/src/primitives/shadcn/dropdown-menu/DropdownMenuLabel.vue +25 -0
  332. package/src/primitives/shadcn/dropdown-menu/DropdownMenuRadioGroup.vue +15 -0
  333. package/src/primitives/shadcn/dropdown-menu/DropdownMenuRadioItem.vue +38 -0
  334. package/src/primitives/shadcn/dropdown-menu/DropdownMenuSeparator.vue +23 -0
  335. package/src/primitives/shadcn/dropdown-menu/DropdownMenuShortcut.vue +17 -0
  336. package/src/primitives/shadcn/dropdown-menu/DropdownMenuSub.vue +15 -0
  337. package/src/primitives/shadcn/dropdown-menu/DropdownMenuSubContent.vue +29 -0
  338. package/src/primitives/shadcn/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
  339. package/src/primitives/shadcn/dropdown-menu/DropdownMenuTrigger.vue +14 -0
  340. package/src/primitives/shadcn/dropdown-menu/index.ts +16 -0
  341. package/src/primitives/shadcn/field/Field.vue +22 -0
  342. package/src/primitives/shadcn/field/FieldContent.vue +17 -0
  343. package/src/primitives/shadcn/field/FieldDescription.vue +24 -0
  344. package/src/primitives/shadcn/field/FieldError.vue +69 -0
  345. package/src/primitives/shadcn/field/FieldGroup.vue +22 -0
  346. package/src/primitives/shadcn/field/FieldLabel.vue +28 -0
  347. package/src/primitives/shadcn/field/FieldLegend.vue +26 -0
  348. package/src/primitives/shadcn/field/FieldSeparator.vue +28 -0
  349. package/src/primitives/shadcn/field/FieldSet.vue +23 -0
  350. package/src/primitives/shadcn/field/FieldTitle.vue +22 -0
  351. package/src/primitives/shadcn/field/index.ts +39 -0
  352. package/src/primitives/shadcn/icon/Icon.vue +38 -0
  353. package/src/primitives/shadcn/icon/index.ts +1 -0
  354. package/src/primitives/shadcn/index.ts +3 -0
  355. package/src/primitives/shadcn/input/Input.vue +35 -0
  356. package/src/primitives/shadcn/input/index.ts +1 -0
  357. package/src/primitives/shadcn/label/Label.vue +28 -0
  358. package/src/primitives/shadcn/label/index.ts +1 -0
  359. package/src/primitives/shadcn/native-select/NativeSelect.vue +56 -0
  360. package/src/primitives/shadcn/native-select/NativeSelectOptGroup.vue +18 -0
  361. package/src/primitives/shadcn/native-select/NativeSelectOption.vue +18 -0
  362. package/src/primitives/shadcn/native-select/index.ts +3 -0
  363. package/src/primitives/shadcn/popover/Popover.vue +19 -0
  364. package/src/primitives/shadcn/popover/PopoverContent.vue +41 -0
  365. package/src/primitives/shadcn/popover/PopoverTrigger.vue +11 -0
  366. package/src/primitives/shadcn/popover/index.ts +4 -0
  367. package/src/primitives/shadcn/progress/Progress.vue +30 -0
  368. package/src/primitives/shadcn/progress/index.ts +1 -0
  369. package/src/primitives/shadcn/radio-group/RadioGroup.vue +25 -0
  370. package/src/primitives/shadcn/radio-group/RadioGroupItem.vue +38 -0
  371. package/src/primitives/shadcn/radio-group/index.ts +2 -0
  372. package/src/primitives/shadcn/range-calendar/RangeCalendar.vue +73 -0
  373. package/src/primitives/shadcn/range-calendar/RangeCalendarCell.vue +28 -0
  374. package/src/primitives/shadcn/range-calendar/RangeCalendarCellTrigger.vue +46 -0
  375. package/src/primitives/shadcn/range-calendar/RangeCalendarGrid.vue +23 -0
  376. package/src/primitives/shadcn/range-calendar/RangeCalendarGridBody.vue +12 -0
  377. package/src/primitives/shadcn/range-calendar/RangeCalendarGridHead.vue +12 -0
  378. package/src/primitives/shadcn/range-calendar/RangeCalendarGridRow.vue +23 -0
  379. package/src/primitives/shadcn/range-calendar/RangeCalendarHeadCell.vue +23 -0
  380. package/src/primitives/shadcn/range-calendar/RangeCalendarHeader.vue +23 -0
  381. package/src/primitives/shadcn/range-calendar/RangeCalendarHeading.vue +30 -0
  382. package/src/primitives/shadcn/range-calendar/RangeCalendarNextButton.vue +34 -0
  383. package/src/primitives/shadcn/range-calendar/RangeCalendarPrevButton.vue +34 -0
  384. package/src/primitives/shadcn/range-calendar/index.ts +12 -0
  385. package/src/primitives/shadcn/select/Select.vue +15 -0
  386. package/src/primitives/shadcn/select/SelectContent.vue +55 -0
  387. package/src/primitives/shadcn/select/SelectGroup.vue +12 -0
  388. package/src/primitives/shadcn/select/SelectItem.vue +39 -0
  389. package/src/primitives/shadcn/select/SelectItemText.vue +12 -0
  390. package/src/primitives/shadcn/select/SelectLabel.vue +17 -0
  391. package/src/primitives/shadcn/select/SelectScrollDownButton.vue +26 -0
  392. package/src/primitives/shadcn/select/SelectScrollUpButton.vue +26 -0
  393. package/src/primitives/shadcn/select/SelectSeparator.vue +19 -0
  394. package/src/primitives/shadcn/select/SelectTrigger.vue +37 -0
  395. package/src/primitives/shadcn/select/SelectValue.vue +12 -0
  396. package/src/primitives/shadcn/select/index.ts +11 -0
  397. package/src/primitives/shadcn/separator/Separator.vue +27 -0
  398. package/src/primitives/shadcn/separator/index.ts +1 -0
  399. package/src/primitives/shadcn/slider/Slider.vue +45 -0
  400. package/src/primitives/shadcn/slider/index.ts +1 -0
  401. package/src/primitives/shadcn/spinner/Spinner.vue +18 -0
  402. package/src/primitives/shadcn/spinner/index.ts +1 -0
  403. package/src/primitives/shadcn/switch/Switch.vue +40 -0
  404. package/src/primitives/shadcn/switch/index.ts +1 -0
  405. package/src/primitives/shadcn/table/Table.vue +16 -0
  406. package/src/primitives/shadcn/table/TableBody.vue +14 -0
  407. package/src/primitives/shadcn/table/TableCaption.vue +14 -0
  408. package/src/primitives/shadcn/table/TableCell.vue +26 -0
  409. package/src/primitives/shadcn/table/TableEmpty.vue +29 -0
  410. package/src/primitives/shadcn/table/TableFooter.vue +17 -0
  411. package/src/primitives/shadcn/table/TableHead.vue +28 -0
  412. package/src/primitives/shadcn/table/TableHeader.vue +14 -0
  413. package/src/primitives/shadcn/table/TableRow.vue +21 -0
  414. package/src/primitives/shadcn/table/index.ts +9 -0
  415. package/src/primitives/shadcn/table/utils.ts +8 -0
  416. package/src/primitives/shadcn/tabs/Tabs.vue +24 -0
  417. package/src/primitives/shadcn/tabs/TabsContent.vue +21 -0
  418. package/src/primitives/shadcn/tabs/TabsList.vue +26 -0
  419. package/src/primitives/shadcn/tabs/TabsTrigger.vue +28 -0
  420. package/src/primitives/shadcn/tabs/index.ts +4 -0
  421. package/src/primitives/shadcn/textarea/Textarea.vue +33 -0
  422. package/src/primitives/shadcn/textarea/index.ts +1 -0
  423. package/src/primitives/shadcn/tooltip/Tooltip.vue +15 -0
  424. package/src/primitives/shadcn/tooltip/TooltipContent.vue +40 -0
  425. package/src/primitives/shadcn/tooltip/TooltipProvider.vue +12 -0
  426. package/src/primitives/shadcn/tooltip/TooltipTrigger.vue +12 -0
  427. package/src/primitives/shadcn/tooltip/index.ts +4 -0
  428. package/src/styles/global.css +1 -0
  429. package/src/templates/UiTemplatePlaceholder/UiTemplatePlaceholder.vue +9 -0
  430. package/src/templates/UiTemplatePlaceholder/index.ts +1 -0
  431. package/src/templates/UiTemplatePlaceholder/types.ts +8 -0
  432. package/src/templates/index.ts +6 -0
@@ -0,0 +1,476 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3-vite';
2
+ import { ref, watch } from 'vue';
3
+ import { UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent } from './index';
4
+ import { UiButton } from '@/primitives/UiButton';
5
+
6
+ const meta: Meta<typeof UiAccordion> = {
7
+ title: 'Primitives/UiAccordion',
8
+ component: UiAccordion,
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ type: {
12
+ control: 'select',
13
+ options: ['single', 'multiple'],
14
+ description: 'Accordion type - single allows only one item open, multiple allows many',
15
+ },
16
+ collapsible: {
17
+ control: 'boolean',
18
+ description: 'Whether all items can be collapsed (only for type="single")',
19
+ },
20
+ disabled: {
21
+ control: 'boolean',
22
+ description: 'Whether the accordion is disabled',
23
+ },
24
+ orientation: {
25
+ control: 'select',
26
+ options: ['horizontal', 'vertical'],
27
+ description:
28
+ 'Keyboard navigation direction: vertical = Up/Down arrows, horizontal = Left/Right arrows. Does not change visual layout.',
29
+ },
30
+ },
31
+ args: {
32
+ type: 'single',
33
+ collapsible: true,
34
+ disabled: false,
35
+ orientation: 'vertical',
36
+ },
37
+ };
38
+
39
+ export default meta;
40
+
41
+ type Story = StoryObj<typeof UiAccordion>;
42
+
43
+ const defaultTemplateSource = `<script setup lang="ts">
44
+ import {
45
+ UiAccordion,
46
+ UiAccordionItem,
47
+ UiAccordionTrigger,
48
+ UiAccordionContent,
49
+ } from '@aleph-alpha/ui-library'
50
+ </script>
51
+
52
+ <template>
53
+ <UiAccordion type="single" collapsible default-value="item-1" class="w-full">
54
+ <UiAccordionItem value="item-1">
55
+ <UiAccordionTrigger>Product Information</UiAccordionTrigger>
56
+ <UiAccordionContent>
57
+ <p>
58
+ Our flagship product combines cutting-edge technology with sleek
59
+ design. Built with premium materials, it offers unparalleled
60
+ performance and reliability.
61
+ </p>
62
+ <p class="mt-2">
63
+ Key features include advanced processing capabilities, and an
64
+ intuitive user interface designed for both beginners and experts.
65
+ </p>
66
+ </UiAccordionContent>
67
+ </UiAccordionItem>
68
+ <UiAccordionItem value="item-2">
69
+ <UiAccordionTrigger>Shipping Details</UiAccordionTrigger>
70
+ <UiAccordionContent>
71
+ <p>
72
+ We offer worldwide shipping through trusted courier partners.
73
+ Standard delivery takes 3-5 business days, while express shipping
74
+ ensures delivery within 1-2 business days.
75
+ </p>
76
+ <p class="mt-2">
77
+ All orders are carefully packaged and fully insured. Track your
78
+ shipment in real-time through our dedicated tracking portal.
79
+ </p>
80
+ </UiAccordionContent>
81
+ </UiAccordionItem>
82
+ <UiAccordionItem value="item-3">
83
+ <UiAccordionTrigger>Return Policy</UiAccordionTrigger>
84
+ <UiAccordionContent>
85
+ <p>
86
+ We stand behind our products with a comprehensive 30-day return
87
+ policy. If you're not completely satisfied, simply return the
88
+ item in its original condition.
89
+ </p>
90
+ <p class="mt-2">
91
+ Our hassle-free return process includes free return shipping and
92
+ full refunds processed within 48 hours of receiving the returned
93
+ item.
94
+ </p>
95
+ </UiAccordionContent>
96
+ </UiAccordionItem>
97
+ </UiAccordion>
98
+ </template>`;
99
+
100
+ export const Default: Story = {
101
+ render: (args) => ({
102
+ components: { UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent },
103
+ setup() {
104
+ const activeItem = ref<string | undefined>('item-1');
105
+ watch(
106
+ () => args.modelValue,
107
+ (val) => {
108
+ if (val) activeItem.value = val as string;
109
+ },
110
+ );
111
+ return { args, activeItem };
112
+ },
113
+ template: `
114
+ <UiAccordion
115
+ v-model="activeItem"
116
+ :type="args.type"
117
+ :collapsible="args.collapsible"
118
+ :disabled="args.disabled"
119
+ :orientation="args.orientation"
120
+ class="w-full"
121
+ >
122
+ <UiAccordionItem value="item-1">
123
+ <UiAccordionTrigger>Product Information</UiAccordionTrigger>
124
+ <UiAccordionContent>
125
+ <p>
126
+ Our flagship product combines cutting-edge technology with sleek
127
+ design. Built with premium materials, it offers unparalleled
128
+ performance and reliability.
129
+ </p>
130
+ <p class="mt-2">
131
+ Key features include advanced processing capabilities, and an
132
+ intuitive user interface designed for both beginners and experts.
133
+ </p>
134
+ </UiAccordionContent>
135
+ </UiAccordionItem>
136
+ <UiAccordionItem value="item-2">
137
+ <UiAccordionTrigger>Shipping Details</UiAccordionTrigger>
138
+ <UiAccordionContent>
139
+ <p>
140
+ We offer worldwide shipping through trusted courier partners.
141
+ Standard delivery takes 3-5 business days, while express shipping
142
+ ensures delivery within 1-2 business days.
143
+ </p>
144
+ <p class="mt-2">
145
+ All orders are carefully packaged and fully insured. Track your
146
+ shipment in real-time through our dedicated tracking portal.
147
+ </p>
148
+ </UiAccordionContent>
149
+ </UiAccordionItem>
150
+ <UiAccordionItem value="item-3">
151
+ <UiAccordionTrigger>Return Policy</UiAccordionTrigger>
152
+ <UiAccordionContent>
153
+ <p>
154
+ We stand behind our products with a comprehensive 30-day return
155
+ policy. If you're not completely satisfied, simply return the
156
+ item in its original condition.
157
+ </p>
158
+ <p class="mt-2">
159
+ Our hassle-free return process includes free return shipping and
160
+ full refunds processed within 48 hours of receiving the returned
161
+ item.
162
+ </p>
163
+ </UiAccordionContent>
164
+ </UiAccordionItem>
165
+ </UiAccordion>
166
+ `,
167
+ }),
168
+ parameters: {
169
+ docs: {
170
+ source: {
171
+ code: defaultTemplateSource,
172
+ },
173
+ },
174
+ },
175
+ };
176
+
177
+ const multipleTemplateSource = `<script setup lang="ts">
178
+ import { ref } from 'vue'
179
+ import {
180
+ UiAccordion,
181
+ UiAccordionItem,
182
+ UiAccordionTrigger,
183
+ UiAccordionContent,
184
+ } from '@aleph-alpha/ui-library'
185
+
186
+ const openItems = ref(['item-1', 'item-2'])
187
+ </script>
188
+
189
+ <template>
190
+ <UiAccordion v-model="openItems" type="multiple" class="w-full">
191
+ <UiAccordionItem value="item-1">
192
+ <UiAccordionTrigger>First Section</UiAccordionTrigger>
193
+ <UiAccordionContent>
194
+ <p>This section can be open at the same time as other sections.</p>
195
+ </UiAccordionContent>
196
+ </UiAccordionItem>
197
+ <UiAccordionItem value="item-2">
198
+ <UiAccordionTrigger>Second Section</UiAccordionTrigger>
199
+ <UiAccordionContent>
200
+ <p>Multiple sections can be expanded simultaneously.</p>
201
+ </UiAccordionContent>
202
+ </UiAccordionItem>
203
+ <UiAccordionItem value="item-3">
204
+ <UiAccordionTrigger>Third Section</UiAccordionTrigger>
205
+ <UiAccordionContent>
206
+ <p>Click to expand or collapse any section independently.</p>
207
+ </UiAccordionContent>
208
+ </UiAccordionItem>
209
+ </UiAccordion>
210
+ </template>`;
211
+
212
+ export const Multiple: Story = {
213
+ render: () => ({
214
+ components: { UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent },
215
+ setup() {
216
+ const openItems = ref(['item-1', 'item-2']);
217
+ return { openItems };
218
+ },
219
+ template: `
220
+ <UiAccordion v-model="openItems" type="multiple" class="w-full">
221
+ <UiAccordionItem value="item-1">
222
+ <UiAccordionTrigger>First Section</UiAccordionTrigger>
223
+ <UiAccordionContent>
224
+ <p>This section can be open at the same time as other sections.</p>
225
+ </UiAccordionContent>
226
+ </UiAccordionItem>
227
+ <UiAccordionItem value="item-2">
228
+ <UiAccordionTrigger>Second Section</UiAccordionTrigger>
229
+ <UiAccordionContent>
230
+ <p>Multiple sections can be expanded simultaneously.</p>
231
+ </UiAccordionContent>
232
+ </UiAccordionItem>
233
+ <UiAccordionItem value="item-3">
234
+ <UiAccordionTrigger>Third Section</UiAccordionTrigger>
235
+ <UiAccordionContent>
236
+ <p>Click to expand or collapse any section independently.</p>
237
+ </UiAccordionContent>
238
+ </UiAccordionItem>
239
+ </UiAccordion>
240
+ `,
241
+ }),
242
+ parameters: {
243
+ docs: {
244
+ source: {
245
+ code: multipleTemplateSource,
246
+ },
247
+ },
248
+ },
249
+ };
250
+
251
+ const nonCollapsibleTemplateSource = `<script setup lang="ts">
252
+ import {
253
+ UiAccordion,
254
+ UiAccordionItem,
255
+ UiAccordionTrigger,
256
+ UiAccordionContent,
257
+ } from '@aleph-alpha/ui-library'
258
+ </script>
259
+
260
+ <template>
261
+ <UiAccordion type="single" :collapsible="false" default-value="item-1" class="w-full">
262
+ <UiAccordionItem value="item-1">
263
+ <UiAccordionTrigger>Always One Open</UiAccordionTrigger>
264
+ <UiAccordionContent>
265
+ <p>Click this trigger - it won't close. One item must always be open.</p>
266
+ </UiAccordionContent>
267
+ </UiAccordionItem>
268
+ <UiAccordionItem value="item-2">
269
+ <UiAccordionTrigger>Click to Switch</UiAccordionTrigger>
270
+ <UiAccordionContent>
271
+ <p>Clicking another item switches to it, but you can't close all.</p>
272
+ </UiAccordionContent>
273
+ </UiAccordionItem>
274
+ </UiAccordion>
275
+ </template>`;
276
+
277
+ export const NonCollapsible: Story = {
278
+ render: () => ({
279
+ components: { UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent },
280
+ template: `
281
+ <UiAccordion type="single" :collapsible="false" default-value="item-1" class="w-full">
282
+ <UiAccordionItem value="item-1">
283
+ <UiAccordionTrigger>Always One Open</UiAccordionTrigger>
284
+ <UiAccordionContent>
285
+ <p>Click this trigger - it won't close. One item must always be open.</p>
286
+ </UiAccordionContent>
287
+ </UiAccordionItem>
288
+ <UiAccordionItem value="item-2">
289
+ <UiAccordionTrigger>Click to Switch</UiAccordionTrigger>
290
+ <UiAccordionContent>
291
+ <p>Clicking another item switches to it, but you can't close all.</p>
292
+ </UiAccordionContent>
293
+ </UiAccordionItem>
294
+ </UiAccordion>
295
+ `,
296
+ }),
297
+ parameters: {
298
+ docs: {
299
+ source: {
300
+ code: nonCollapsibleTemplateSource,
301
+ },
302
+ },
303
+ },
304
+ };
305
+
306
+ const withDisabledItemTemplateSource = `<script setup lang="ts">
307
+ import {
308
+ UiAccordion,
309
+ UiAccordionItem,
310
+ UiAccordionTrigger,
311
+ UiAccordionContent,
312
+ } from '@aleph-alpha/ui-library'
313
+ </script>
314
+
315
+ <template>
316
+ <UiAccordion type="single" collapsible default-value="item-1" class="w-full">
317
+ <UiAccordionItem value="item-1">
318
+ <UiAccordionTrigger>Available Item</UiAccordionTrigger>
319
+ <UiAccordionContent>
320
+ <p>This item is available and can be expanded or collapsed.</p>
321
+ </UiAccordionContent>
322
+ </UiAccordionItem>
323
+ <UiAccordionItem value="item-2" :disabled="true">
324
+ <UiAccordionTrigger>Disabled Item</UiAccordionTrigger>
325
+ <UiAccordionContent>
326
+ <p>This content cannot be accessed because the item is disabled.</p>
327
+ </UiAccordionContent>
328
+ </UiAccordionItem>
329
+ <UiAccordionItem value="item-3">
330
+ <UiAccordionTrigger>Another Available Item</UiAccordionTrigger>
331
+ <UiAccordionContent>
332
+ <p>This item is also available for interaction.</p>
333
+ </UiAccordionContent>
334
+ </UiAccordionItem>
335
+ </UiAccordion>
336
+ </template>`;
337
+
338
+ export const WithDisabledItem: Story = {
339
+ render: () => ({
340
+ components: { UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent },
341
+ template: `
342
+ <UiAccordion type="single" collapsible default-value="item-1" class="w-full">
343
+ <UiAccordionItem value="item-1">
344
+ <UiAccordionTrigger>Available Item</UiAccordionTrigger>
345
+ <UiAccordionContent>
346
+ <p>This item is available and can be expanded or collapsed.</p>
347
+ </UiAccordionContent>
348
+ </UiAccordionItem>
349
+ <UiAccordionItem value="item-2" :disabled="true">
350
+ <UiAccordionTrigger>Disabled Item</UiAccordionTrigger>
351
+ <UiAccordionContent>
352
+ <p>This content cannot be accessed because the item is disabled.</p>
353
+ </UiAccordionContent>
354
+ </UiAccordionItem>
355
+ <UiAccordionItem value="item-3">
356
+ <UiAccordionTrigger>Another Available Item</UiAccordionTrigger>
357
+ <UiAccordionContent>
358
+ <p>This item is also available for interaction.</p>
359
+ </UiAccordionContent>
360
+ </UiAccordionItem>
361
+ </UiAccordion>
362
+ `,
363
+ }),
364
+ parameters: {
365
+ docs: {
366
+ source: {
367
+ code: withDisabledItemTemplateSource,
368
+ },
369
+ },
370
+ },
371
+ };
372
+
373
+ const controlledTemplateSource = `<script setup lang="ts">
374
+ import { ref } from 'vue'
375
+ import {
376
+ UiAccordion,
377
+ UiAccordionItem,
378
+ UiAccordionTrigger,
379
+ UiAccordionContent,
380
+ UiButton,
381
+ } from '@aleph-alpha/ui-library'
382
+
383
+ const activeItem = ref<string | undefined>('overview')
384
+
385
+ function goToDetails() {
386
+ activeItem.value = 'details'
387
+ }
388
+
389
+ function closeAll() {
390
+ activeItem.value = undefined
391
+ }
392
+ </script>
393
+
394
+ <template>
395
+ <div class="space-y-4">
396
+ <div class="flex items-center gap-4">
397
+ <p class="text-sm">Current: <strong>{{ activeItem ?? 'none' }}</strong></p>
398
+ <UiButton size="sm" @click="goToDetails">Go to Details</UiButton>
399
+ <UiButton size="sm" variant="secondary" @click="closeAll">Close All</UiButton>
400
+ </div>
401
+
402
+ <UiAccordion v-model="activeItem" type="single" collapsible class="w-full">
403
+ <UiAccordionItem value="overview">
404
+ <UiAccordionTrigger>Overview</UiAccordionTrigger>
405
+ <UiAccordionContent>
406
+ <p>Overview content goes here.</p>
407
+ </UiAccordionContent>
408
+ </UiAccordionItem>
409
+ <UiAccordionItem value="details">
410
+ <UiAccordionTrigger>Details</UiAccordionTrigger>
411
+ <UiAccordionContent>
412
+ <p>Detailed information goes here.</p>
413
+ </UiAccordionContent>
414
+ </UiAccordionItem>
415
+ <UiAccordionItem value="history">
416
+ <UiAccordionTrigger>History</UiAccordionTrigger>
417
+ <UiAccordionContent>
418
+ <p>Historical data goes here.</p>
419
+ </UiAccordionContent>
420
+ </UiAccordionItem>
421
+ </UiAccordion>
422
+ </div>
423
+ </template>`;
424
+
425
+ export const Controlled: Story = {
426
+ render: () => ({
427
+ components: { UiAccordion, UiAccordionItem, UiAccordionTrigger, UiAccordionContent, UiButton },
428
+ setup() {
429
+ const activeItem = ref<string | undefined>('overview');
430
+ function goToDetails() {
431
+ activeItem.value = 'details';
432
+ }
433
+ function closeAll() {
434
+ activeItem.value = undefined;
435
+ }
436
+ return { activeItem, goToDetails, closeAll };
437
+ },
438
+ template: `
439
+ <div class="space-y-4">
440
+ <div class="flex items-center gap-4">
441
+ <p class="text-sm">Current: <strong>{{ activeItem ?? 'none' }}</strong></p>
442
+ <UiButton size="sm" @click="goToDetails">Go to Details</UiButton>
443
+ <UiButton size="sm" variant="secondary" @click="closeAll">Close All</UiButton>
444
+ </div>
445
+
446
+ <UiAccordion v-model="activeItem" type="single" collapsible class="w-full">
447
+ <UiAccordionItem value="overview">
448
+ <UiAccordionTrigger>Overview</UiAccordionTrigger>
449
+ <UiAccordionContent>
450
+ <p>Overview content goes here.</p>
451
+ </UiAccordionContent>
452
+ </UiAccordionItem>
453
+ <UiAccordionItem value="details">
454
+ <UiAccordionTrigger>Details</UiAccordionTrigger>
455
+ <UiAccordionContent>
456
+ <p>Detailed information goes here.</p>
457
+ </UiAccordionContent>
458
+ </UiAccordionItem>
459
+ <UiAccordionItem value="history">
460
+ <UiAccordionTrigger>History</UiAccordionTrigger>
461
+ <UiAccordionContent>
462
+ <p>Historical data goes here.</p>
463
+ </UiAccordionContent>
464
+ </UiAccordionItem>
465
+ </UiAccordion>
466
+ </div>
467
+ `,
468
+ }),
469
+ parameters: {
470
+ docs: {
471
+ source: {
472
+ code: controlledTemplateSource,
473
+ },
474
+ },
475
+ },
476
+ };
@@ -0,0 +1,31 @@
1
+ <script setup lang="ts">
2
+ import { Accordion as ShadcnAccordion } from '@/primitives/shadcn/accordion';
3
+ import type { UiAccordionProps, UiAccordionEmits } from './types';
4
+
5
+ defineOptions({
6
+ name: 'UiAccordion',
7
+ });
8
+
9
+ const props = defineProps<UiAccordionProps>();
10
+
11
+ const emit = defineEmits<UiAccordionEmits>();
12
+
13
+ function handleUpdateModelValue(value: string | string[] | undefined) {
14
+ emit('update:modelValue', value);
15
+ }
16
+ </script>
17
+
18
+ <template>
19
+ <ShadcnAccordion
20
+ :type="props.type"
21
+ :model-value="props.modelValue"
22
+ :default-value="props.defaultValue"
23
+ :collapsible="props.type === 'single' ? props.collapsible : undefined"
24
+ :disabled="props.disabled"
25
+ :dir="props.dir"
26
+ :orientation="props.orientation"
27
+ @update:model-value="handleUpdateModelValue"
28
+ >
29
+ <slot />
30
+ </ShadcnAccordion>
31
+ </template>
@@ -0,0 +1,16 @@
1
+ <script setup lang="ts">
2
+ import { AccordionContent as ShadcnAccordionContent } from '@/primitives/shadcn/accordion';
3
+ import type { UiAccordionContentProps } from './types';
4
+
5
+ defineOptions({
6
+ name: 'UiAccordionContent',
7
+ });
8
+
9
+ const props = defineProps<UiAccordionContentProps>();
10
+ </script>
11
+
12
+ <template>
13
+ <ShadcnAccordionContent :force-mount="props.forceMount">
14
+ <slot />
15
+ </ShadcnAccordionContent>
16
+ </template>
@@ -0,0 +1,16 @@
1
+ <script setup lang="ts">
2
+ import { AccordionItem as ShadcnAccordionItem } from '@/primitives/shadcn/accordion';
3
+ import type { UiAccordionItemProps } from './types';
4
+
5
+ defineOptions({
6
+ name: 'UiAccordionItem',
7
+ });
8
+
9
+ const props = defineProps<UiAccordionItemProps>();
10
+ </script>
11
+
12
+ <template>
13
+ <ShadcnAccordionItem :value="props.value" :disabled="props.disabled">
14
+ <slot />
15
+ </ShadcnAccordionItem>
16
+ </template>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import { AccordionTrigger as ShadcnAccordionTrigger } from '@/primitives/shadcn/accordion';
3
+ import type { UiAccordionTriggerProps } from './types';
4
+
5
+ defineOptions({
6
+ name: 'UiAccordionTrigger',
7
+ });
8
+
9
+ const props = defineProps<UiAccordionTriggerProps>();
10
+
11
+ // shadcn styles rotate only SVG chevrons (`[data-state=open]>svg`).
12
+ // Our icons render as `<span data-slot="icon" ... />`, so we mirror that behavior.
13
+ const uiIconRotationClasses = '[&[data-state=open]>[data-slot=icon]]:rotate-180';
14
+ </script>
15
+
16
+ <template>
17
+ <ShadcnAccordionTrigger :as-child="props.asChild" :class="uiIconRotationClasses">
18
+ <slot />
19
+ <template #icon>
20
+ <slot name="icon" />
21
+ </template>
22
+ </ShadcnAccordionTrigger>
23
+ </template>