@indielayer/ui 2.0.0 → 2.1.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 (326) hide show
  1. package/docs/App.vue +19 -4
  2. package/docs/assets/css/tailwind.css +7 -1
  3. package/docs/components/Cookies.vue +3 -1
  4. package/docs/components/common/CodePreview.vue +1 -1
  5. package/docs/components/common/DocsCopyPage.vue +200 -0
  6. package/docs/components/common/DocumentPage.vue +76 -23
  7. package/docs/components/toolbar/ToolbarColorToggle.vue +29 -18
  8. package/docs/components/toolbar/ToolbarSearch.vue +4 -4
  9. package/docs/composables/useDocMeta.ts +63 -4
  10. package/docs/icons.ts +3 -0
  11. package/docs/main.ts +25 -26
  12. package/docs/pages/component/accordion/index.vue +2 -2
  13. package/docs/pages/component/alert/index.vue +2 -2
  14. package/docs/pages/component/avatar/index.vue +4 -4
  15. package/docs/pages/component/badge/index.vue +2 -2
  16. package/docs/pages/component/breadcrumbs/index.vue +2 -2
  17. package/docs/pages/component/button/button-group.vue +3 -3
  18. package/docs/pages/component/button/index.vue +14 -7
  19. package/docs/pages/component/button/tooltip.vue +10 -0
  20. package/docs/pages/component/card/index.vue +2 -2
  21. package/docs/pages/component/carousel/index.vue +2 -2
  22. package/docs/pages/component/checkbox/index.vue +5 -5
  23. package/docs/pages/component/container/index.vue +2 -2
  24. package/docs/pages/component/datepicker/index.vue +2 -2
  25. package/docs/pages/component/divider/index.vue +4 -4
  26. package/docs/pages/component/drawer/index.vue +2 -2
  27. package/docs/pages/component/empty/index.vue +3 -3
  28. package/docs/pages/component/form/index.vue +2 -2
  29. package/docs/pages/component/formGroup/index.vue +2 -2
  30. package/docs/pages/component/infiniteLoader/index.vue +3 -3
  31. package/docs/pages/component/input/index.vue +5 -5
  32. package/docs/pages/component/inputGroup/index.vue +3 -3
  33. package/docs/pages/component/inputGroup/validation.vue +6 -1
  34. package/docs/pages/component/link/index.vue +2 -2
  35. package/docs/pages/component/loader/index.vue +2 -2
  36. package/docs/pages/component/menu/index.vue +2 -2
  37. package/docs/pages/component/modal/index.vue +3 -3
  38. package/docs/pages/component/notifications/index.vue +2 -2
  39. package/docs/pages/component/pagination/index.vue +2 -2
  40. package/docs/pages/component/popover/index.vue +2 -2
  41. package/docs/pages/component/popover/usage.vue +14 -0
  42. package/docs/pages/component/progress/index.vue +3 -3
  43. package/docs/pages/component/qrCode/index.vue +2 -2
  44. package/docs/pages/component/radio/index.vue +3 -3
  45. package/docs/pages/component/scroll/index.vue +3 -3
  46. package/docs/pages/component/select/index.vue +5 -5
  47. package/docs/pages/component/skeleton/index.vue +2 -2
  48. package/docs/pages/component/slider/index.vue +2 -2
  49. package/docs/pages/component/spacer/index.vue +2 -2
  50. package/docs/pages/component/spinner/index.vue +3 -3
  51. package/docs/pages/component/table/index.vue +4 -4
  52. package/docs/pages/component/tabs/index.vue +2 -2
  53. package/docs/pages/component/tabs/usage.vue +26 -0
  54. package/docs/pages/component/tag/index.vue +2 -2
  55. package/docs/pages/component/textarea/index.vue +4 -4
  56. package/docs/pages/component/toggle/index.vue +4 -4
  57. package/docs/pages/component/upload/index.vue +2 -2
  58. package/docs/pages/component/upload/usage.vue +1 -0
  59. package/docs/pages/component/virtualGrid/index.vue +2 -2
  60. package/docs/pages/component/virtualList/index.vue +3 -3
  61. package/docs/pages/icons.vue +2 -2
  62. package/docs/router/index.ts +39 -44
  63. package/docs/search/components.json +1 -1
  64. package/docs/search/index.json +1 -1
  65. package/lib/common/buttonGroupRadius.d.ts +3 -0
  66. package/lib/common/buttonGroupRadius.js +6 -0
  67. package/lib/common/props.d.ts +1 -1
  68. package/lib/common/props.js +10 -9
  69. package/lib/components/accordion/Accordion.vue.d.ts +42 -9
  70. package/lib/components/accordion/Accordion.vue_vue_type_script_setup_true_lang.js +18 -6
  71. package/lib/components/accordion/AccordionItem.vue.d.ts +33 -6
  72. package/lib/components/accordion/AccordionItem.vue_vue_type_script_setup_true_lang.js +31 -6
  73. package/lib/components/alert/Alert.vue.d.ts +27 -6
  74. package/lib/components/alert/Alert.vue_vue_type_script_setup_true_lang.js +20 -6
  75. package/lib/components/avatar/Avatar.vue.d.ts +45 -9
  76. package/lib/components/avatar/Avatar.vue_vue_type_script_setup_true_lang.js +17 -6
  77. package/lib/components/badge/Badge.vue.d.ts +54 -9
  78. package/lib/components/badge/Badge.vue_vue_type_script_setup_true_lang.js +26 -9
  79. package/lib/components/breadcrumbs/Breadcrumbs.vue.d.ts +30 -6
  80. package/lib/components/breadcrumbs/Breadcrumbs.vue_vue_type_script_setup_true_lang.js +13 -5
  81. package/lib/components/button/Button.js +2 -2
  82. package/lib/components/button/Button.vue.d.ts +138 -28
  83. package/lib/components/button/Button.vue_vue_type_script_setup_true_lang.js +192 -70
  84. package/lib/components/button/ButtonGroup.js +4 -5
  85. package/lib/components/button/ButtonGroup.vue.d.ts +54 -10
  86. package/lib/components/button/ButtonGroup.vue_vue_type_script_setup_true_lang.js +30 -19
  87. package/lib/components/button/theme/Button.base.theme.js +6 -5
  88. package/lib/components/button/theme/Button.carbon.theme.js +6 -5
  89. package/lib/components/card/Card.vue.d.ts +3 -0
  90. package/lib/components/card/Card.vue_vue_type_script_setup_true_lang.js +4 -2
  91. package/lib/components/carousel/Carousel.vue.d.ts +21 -3
  92. package/lib/components/carousel/Carousel.vue_vue_type_script_setup_true_lang.js +23 -5
  93. package/lib/components/carousel/CarouselSlide.js +2 -2
  94. package/lib/components/carousel/CarouselSlide.vue.d.ts +3 -0
  95. package/lib/components/carousel/CarouselSlide.vue_vue_type_script_setup_true_lang.js +3 -1
  96. package/lib/components/carousel/{CarouselSlide.vue_vue_type_style_index_0_scoped_e90d2127_lang.module.js → CarouselSlide.vue_vue_type_style_index_0_scoped_4f559831_lang.module.js} +1 -1
  97. package/lib/components/checkbox/Checkbox.vue.d.ts +198 -45
  98. package/lib/components/checkbox/Checkbox.vue_vue_type_script_setup_true_lang.js +20 -3
  99. package/lib/components/container/Container.vue.d.ts +6 -0
  100. package/lib/components/container/Container.vue_vue_type_script_setup_true_lang.js +5 -2
  101. package/lib/components/datepicker/Datepicker.vue.d.ts +462 -36
  102. package/lib/components/datepicker/Datepicker.vue_vue_type_script_setup_true_lang.js +294 -153
  103. package/lib/components/divider/Divider.vue.d.ts +12 -3
  104. package/lib/components/divider/Divider.vue_vue_type_script_setup_true_lang.js +6 -2
  105. package/lib/components/drawer/Drawer.vue.d.ts +39 -6
  106. package/lib/components/drawer/Drawer.vue_vue_type_script_setup_true_lang.js +30 -7
  107. package/lib/components/empty/Empty.vue.d.ts +30 -6
  108. package/lib/components/empty/Empty.vue_vue_type_script_setup_true_lang.js +17 -4
  109. package/lib/components/form/Form.vue.d.ts +48 -9
  110. package/lib/components/form/Form.vue_vue_type_script_setup_true_lang.js +34 -7
  111. package/lib/components/formGroup/FormGroup.vue.d.ts +171 -39
  112. package/lib/components/formGroup/FormGroup.vue_vue_type_script_setup_true_lang.js +15 -9
  113. package/lib/components/icon/Icon.vue.d.ts +9 -0
  114. package/lib/components/icon/Icon.vue_vue_type_script_setup_true_lang.js +6 -3
  115. package/lib/components/image/Image.vue.d.ts +12 -3
  116. package/lib/components/image/Image.vue_vue_type_script_setup_true_lang.js +5 -1
  117. package/lib/components/index.js +18 -18
  118. package/lib/components/input/Input.vue.d.ts +291 -66
  119. package/lib/components/input/Input.vue_vue_type_script_setup_true_lang.js +53 -15
  120. package/lib/components/inputFooter/InputFooter.vue.d.ts +48 -12
  121. package/lib/components/inputFooter/InputFooter.vue_vue_type_script_setup_true_lang.js +18 -5
  122. package/lib/components/inputGroup/InputGroup.vue.d.ts +171 -39
  123. package/lib/components/inputGroup/InputGroup.vue_vue_type_script_setup_true_lang.js +6 -1
  124. package/lib/components/label/Label.vue.d.ts +78 -18
  125. package/lib/components/label/Label.vue_vue_type_script_setup_true_lang.js +28 -8
  126. package/lib/components/link/Link.js +2 -2
  127. package/lib/components/link/Link.vue.d.ts +18 -3
  128. package/lib/components/link/Link.vue_vue_type_script_setup_true_lang.js +10 -5
  129. package/lib/components/loader/Loader.vue.d.ts +30 -6
  130. package/lib/components/loader/Loader.vue_vue_type_script_setup_true_lang.js +11 -3
  131. package/lib/components/menu/Menu.vue.d.ts +51 -9
  132. package/lib/components/menu/Menu.vue_vue_type_script_setup_true_lang.js +24 -8
  133. package/lib/components/menu/MenuItem.js +2 -2
  134. package/lib/components/menu/MenuItem.vue.d.ts +198 -45
  135. package/lib/components/menu/MenuItem.vue_vue_type_script_setup_true_lang.js +84 -23
  136. package/lib/components/menu/{MenuItem.vue_vue_type_style_index_0_scoped_2a6b7341_lang.module.js → MenuItem.vue_vue_type_style_index_0_scoped_5aebaff3_lang.module.js} +1 -1
  137. package/lib/components/modal/Modal.vue.d.ts +177 -39
  138. package/lib/components/modal/Modal.vue_vue_type_script_setup_true_lang.js +104 -23
  139. package/lib/components/notifications/Notifications.vue.d.ts +24 -0
  140. package/lib/components/notifications/Notifications.vue_vue_type_script_setup_true_lang.js +39 -12
  141. package/lib/components/pagination/Pagination.vue.d.ts +12 -0
  142. package/lib/components/pagination/Pagination.vue_vue_type_script_setup_true_lang.js +8 -4
  143. package/lib/components/pagination/PaginationItem.vue.d.ts +18 -3
  144. package/lib/components/pagination/PaginationItem.vue_vue_type_script_setup_true_lang.js +8 -3
  145. package/lib/components/popover/Popover.vue.d.ts +204 -45
  146. package/lib/components/popover/Popover.vue_vue_type_script_setup_true_lang.js +157 -66
  147. package/lib/components/popover/PopoverContainer.vue.d.ts +3 -0
  148. package/lib/components/popover/PopoverContainer.vue_vue_type_script_setup_true_lang.js +3 -1
  149. package/lib/components/popover/PopoverContentBoundary.js +5 -0
  150. package/lib/components/popover/PopoverContentBoundary.vue.d.ts +9 -0
  151. package/lib/components/popover/PopoverContentBoundary.vue_vue_type_script_setup_true_lang.js +18 -0
  152. package/lib/components/popover/theme/PopoverContainer.base.theme.js +1 -1
  153. package/lib/components/progress/Progress.vue.d.ts +9 -0
  154. package/lib/components/progress/Progress.vue_vue_type_script_setup_true_lang.js +7 -4
  155. package/lib/components/qrCode/QrCode.vue.d.ts +24 -3
  156. package/lib/components/qrCode/QrCode.vue_vue_type_script_setup_true_lang.js +13 -5
  157. package/lib/components/radio/Radio.vue.d.ts +186 -42
  158. package/lib/components/radio/Radio.vue_vue_type_script_setup_true_lang.js +10 -2
  159. package/lib/components/radioButton/RadioButton.vue.d.ts +186 -42
  160. package/lib/components/radioButton/RadioButton.vue_vue_type_script_setup_true_lang.js +9 -1
  161. package/lib/components/scroll/Scroll.vue.d.ts +3 -0
  162. package/lib/components/scroll/Scroll.vue_vue_type_script_setup_true_lang.js +9 -4
  163. package/lib/components/select/Select.vue.d.ts +633 -144
  164. package/lib/components/select/Select.vue_vue_type_script_setup_true_lang.js +224 -189
  165. package/lib/components/skeleton/Skeleton.vue.d.ts +6 -0
  166. package/lib/components/skeleton/Skeleton.vue_vue_type_script_setup_true_lang.js +5 -2
  167. package/lib/components/slider/Slider.js +1 -1
  168. package/lib/components/slider/Slider.vue.d.ts +180 -39
  169. package/lib/components/slider/Slider.vue_vue_type_script_setup_true_lang.js +14 -3
  170. package/lib/components/spinner/Spinner.vue.d.ts +6 -0
  171. package/lib/components/spinner/Spinner.vue_vue_type_script_setup_true_lang.js +3 -1
  172. package/lib/components/stepper/Stepper.vue.d.ts +120 -24
  173. package/lib/components/stepper/Stepper.vue_vue_type_script_setup_true_lang.js +63 -15
  174. package/lib/components/tab/Tab.vue.d.ts +112 -31
  175. package/lib/components/tab/Tab.vue_vue_type_script_setup_true_lang.js +166 -95
  176. package/lib/components/tab/TabGroup.vue.d.ts +47 -12
  177. package/lib/components/tab/TabGroup.vue_vue_type_script_setup_true_lang.js +93 -49
  178. package/lib/components/tab/theme/Tab.base.theme.js +6 -6
  179. package/lib/components/tab/theme/Tab.carbon.theme.js +6 -6
  180. package/lib/components/tab/theme/TabGroup.base.theme.js +7 -7
  181. package/lib/components/tab/theme/TabGroup.carbon.theme.js +3 -3
  182. package/lib/components/table/Table.vue.d.ts +45 -9
  183. package/lib/components/table/Table.vue_vue_type_script_setup_true_lang.js +82 -27
  184. package/lib/components/table/TableCell.vue.d.ts +54 -12
  185. package/lib/components/table/TableCell.vue_vue_type_script_setup_true_lang.js +23 -8
  186. package/lib/components/table/TableHead.vue_vue_type_script_setup_true_lang.js +2 -1
  187. package/lib/components/table/TableHeader.vue.d.ts +18 -3
  188. package/lib/components/table/TableHeader.vue_vue_type_script_setup_true_lang.js +10 -4
  189. package/lib/components/table/TableRow.vue.d.ts +15 -3
  190. package/lib/components/table/TableRow.vue_vue_type_script_setup_true_lang.js +10 -5
  191. package/lib/components/tag/Tag.vue.d.ts +33 -6
  192. package/lib/components/tag/Tag.vue_vue_type_script_setup_true_lang.js +21 -7
  193. package/lib/components/textarea/Textarea.vue.d.ts +237 -54
  194. package/lib/components/textarea/Textarea.vue_vue_type_script_setup_true_lang.js +38 -13
  195. package/lib/components/themeProvider/ThemeProvider.vue.d.ts +10 -4
  196. package/lib/components/themeProvider/ThemeProvider.vue_vue_type_script_setup_true_lang.js +6 -1
  197. package/lib/components/toggle/Toggle.vue.d.ts +174 -39
  198. package/lib/components/toggle/Toggle.vue_vue_type_script_setup_true_lang.js +5 -1
  199. package/lib/components/tooltip/ToggleTip.vue.d.ts +24 -6
  200. package/lib/components/tooltip/ToggleTip.vue_vue_type_script_setup_true_lang.js +9 -2
  201. package/lib/components/tooltip/Tooltip.vue.d.ts +30 -6
  202. package/lib/components/tooltip/Tooltip.vue_vue_type_script_setup_true_lang.js +16 -4
  203. package/lib/components/upload/Upload.vue.d.ts +249 -57
  204. package/lib/components/upload/Upload.vue_vue_type_script_setup_true_lang.js +156 -125
  205. package/lib/components/upload/fileAccept.d.ts +6 -0
  206. package/lib/components/upload/fileAccept.js +17 -0
  207. package/lib/composables/useColors.d.ts +1 -0
  208. package/lib/composables/useColors.js +2 -1
  209. package/lib/composables/useCommon.d.ts +1 -0
  210. package/lib/composables/useCommon.js +2 -1
  211. package/lib/composables/useFocusTrap.js +1 -1
  212. package/lib/composables/useInputtable.d.ts +45 -10
  213. package/lib/composables/useInputtable.js +56 -14
  214. package/lib/composables/useInteractive.d.ts +13 -3
  215. package/lib/composables/useInteractive.js +14 -4
  216. package/lib/index.js +12 -12
  217. package/lib/index.umd.js +9 -10
  218. package/lib/themes/base/styles.d.ts +1 -1
  219. package/lib/themes/base/styles.js +1 -1
  220. package/lib/themes/carbon/styles.d.ts +1 -1
  221. package/lib/themes/carbon/styles.js +1 -1
  222. package/lib/version.d.ts +1 -1
  223. package/lib/version.js +1 -1
  224. package/lib/virtual/components/infiniteLoader/InfiniteLoader.vue.d.ts +27 -16
  225. package/lib/virtual/components/infiniteLoader/InfiniteLoader.vue_vue_type_script_setup_true_lang.js +25 -5
  226. package/lib/virtual/components/virtualGrid/VirtualGrid.vue.d.ts +108 -86
  227. package/lib/virtual/components/virtualGrid/VirtualGrid.vue_vue_type_script_setup_true_lang.js +91 -21
  228. package/lib/virtual/components/virtualList/VirtualList.vue.d.ts +62 -48
  229. package/lib/virtual/components/virtualList/VirtualList.vue_vue_type_script_setup_true_lang.js +64 -13
  230. package/lib/virtual/components/virtualList/useDynamicRowHeight.js +4 -3
  231. package/package.json +5 -3
  232. package/src/common/buttonGroupRadius.ts +16 -0
  233. package/src/common/props.ts +10 -9
  234. package/src/components/accordion/Accordion.vue +20 -4
  235. package/src/components/accordion/AccordionItem.vue +28 -3
  236. package/src/components/alert/Alert.vue +22 -6
  237. package/src/components/avatar/Avatar.vue +20 -5
  238. package/src/components/badge/Badge.vue +24 -5
  239. package/src/components/breadcrumbs/Breadcrumbs.vue +15 -5
  240. package/src/components/button/Button.vue +140 -5
  241. package/src/components/button/ButtonGroup.vue +41 -25
  242. package/src/components/button/__tests__/ Button.spec.ts +41 -0
  243. package/src/components/button/__tests__/ ButtonGroup.spec.ts +32 -0
  244. package/src/components/button/theme/Button.base.theme.ts +4 -1
  245. package/src/components/button/theme/Button.carbon.theme.ts +5 -4
  246. package/src/components/card/Card.vue +10 -2
  247. package/src/components/carousel/Carousel.vue +22 -2
  248. package/src/components/carousel/CarouselSlide.vue +6 -0
  249. package/src/components/checkbox/Checkbox.vue +22 -3
  250. package/src/components/container/Container.vue +10 -1
  251. package/src/components/datepicker/Datepicker.vue +466 -101
  252. package/src/components/datepicker/__tests__/Datepicker.spec.ts +31 -0
  253. package/src/components/divider/Divider.vue +9 -3
  254. package/src/components/drawer/Drawer.vue +27 -2
  255. package/src/components/empty/Empty.vue +18 -3
  256. package/src/components/form/Form.vue +32 -3
  257. package/src/components/formGroup/FormGroup.vue +12 -0
  258. package/src/components/icon/Icon.vue +4 -1
  259. package/src/components/image/Image.vue +8 -2
  260. package/src/components/input/Input.vue +54 -12
  261. package/src/components/inputFooter/InputFooter.vue +21 -6
  262. package/src/components/inputGroup/InputGroup.vue +12 -1
  263. package/src/components/label/Label.vue +31 -7
  264. package/src/components/link/Link.vue +16 -5
  265. package/src/components/loader/Loader.vue +10 -2
  266. package/src/components/menu/Menu.vue +23 -5
  267. package/src/components/menu/MenuItem.vue +78 -17
  268. package/src/components/modal/Modal.vue +90 -15
  269. package/src/components/notifications/Notifications.vue +23 -0
  270. package/src/components/notifications/__tests__/Notifications.spec.ts +44 -4
  271. package/src/components/pagination/Pagination.vue +9 -1
  272. package/src/components/pagination/PaginationItem.vue +11 -2
  273. package/src/components/popover/Popover.vue +113 -18
  274. package/src/components/popover/PopoverContainer.vue +9 -1
  275. package/src/components/popover/PopoverContentBoundary.vue +32 -0
  276. package/src/components/popover/__tests__/Popover.spec.ts +51 -0
  277. package/src/components/popover/theme/PopoverContainer.base.theme.ts +1 -1
  278. package/src/components/progress/Progress.vue +8 -3
  279. package/src/components/qrCode/QrCode.vue +9 -1
  280. package/src/components/radio/Radio.vue +16 -2
  281. package/src/components/radioButton/RadioButton.vue +15 -1
  282. package/src/components/scroll/Scroll.vue +15 -4
  283. package/src/components/select/Select.vue +53 -16
  284. package/src/components/skeleton/Skeleton.vue +3 -0
  285. package/src/components/slider/Slider.vue +15 -0
  286. package/src/components/spinner/Spinner.vue +2 -0
  287. package/src/components/stepper/Stepper.vue +57 -9
  288. package/src/components/tab/Tab.vue +153 -63
  289. package/src/components/tab/TabGroup.vue +110 -26
  290. package/src/components/tab/__tests__/Tab.spec.ts +53 -0
  291. package/src/components/tab/__tests__/TabGroup.spec.ts +113 -0
  292. package/src/components/tab/theme/Tab.base.theme.ts +24 -2
  293. package/src/components/tab/theme/Tab.carbon.theme.ts +30 -7
  294. package/src/components/tab/theme/TabGroup.base.theme.ts +12 -9
  295. package/src/components/tab/theme/TabGroup.carbon.theme.ts +6 -2
  296. package/src/components/table/Table.vue +76 -19
  297. package/src/components/table/TableCell.vue +25 -6
  298. package/src/components/table/TableHead.vue +9 -2
  299. package/src/components/table/TableHeader.vue +16 -3
  300. package/src/components/table/TableRow.vue +17 -5
  301. package/src/components/tag/Tag.vue +22 -6
  302. package/src/components/textarea/Textarea.vue +40 -11
  303. package/src/components/themeProvider/ThemeProvider.vue +22 -7
  304. package/src/components/toggle/Toggle.vue +9 -1
  305. package/src/components/tooltip/ToggleTip.vue +12 -3
  306. package/src/components/tooltip/Tooltip.vue +19 -3
  307. package/src/components/upload/Upload.vue +46 -16
  308. package/src/components/upload/__tests__/fileAccept.spec.ts +39 -0
  309. package/src/components/upload/fileAccept.ts +29 -0
  310. package/src/composables/useColors.ts +1 -0
  311. package/src/composables/useCommon.ts +1 -0
  312. package/src/composables/useFocusTrap.ts +3 -1
  313. package/src/composables/useInputtable.ts +66 -10
  314. package/src/composables/useInteractive.ts +13 -3
  315. package/src/themes/base/styles.ts +2 -3
  316. package/src/themes/carbon/styles.ts +2 -3
  317. package/src/version.ts +1 -1
  318. package/src/virtual/components/infiniteLoader/InfiniteLoader.vue +33 -1
  319. package/src/virtual/components/virtualGrid/VirtualGrid.vue +104 -10
  320. package/src/virtual/components/virtualList/VirtualList.vue +73 -8
  321. package/src/virtual/components/virtualList/useDynamicRowHeight.ts +9 -2
  322. package/volar.d.ts +3 -0
  323. package/docs/layouts/simple.vue +0 -5
  324. package/lib/components/button/ButtonGroup.vue_vue_type_style_index_0_lang.module.js +0 -7
  325. /package/lib/components/button/{Button.vue_vue_type_style_index_0_scoped_4402fde2_lang.module.js → Button.vue_vue_type_style_index_0_scoped_486cb9c0_lang.module.js} +0 -0
  326. /package/lib/components/link/{Link.vue_vue_type_style_index_0_scoped_8e0e4d08_lang.module.js → Link.vue_vue_type_style_index_0_scoped_3ee61e03_lang.module.js} +0 -0
@@ -7,36 +7,85 @@ const menuItemProps = {
7
7
  item: {
8
8
  type: Object as PropType<MenuArrayItem>,
9
9
  default: () => {},
10
+ description: 'Item data object. Individual props override matching fields.',
11
+ },
12
+ active: {
13
+ type: Boolean,
14
+ description: 'Forces active styling when not using router link classes.',
10
15
  },
11
- active: Boolean,
12
16
  attrs: {
13
17
  type: Object,
14
18
  default: () => {},
19
+ description: 'Extra HTML attributes merged onto the root element.',
20
+ },
21
+ onClick: {
22
+ type: Function,
23
+ description: 'Click handler invoked when the item is activated.',
24
+ },
25
+ value: {
26
+ type: [Number, String],
27
+ description: 'Item value identifier.',
28
+ },
29
+ to: {
30
+ type: [String, Object],
31
+ description: 'Vue Router location; renders as a router-link when set.',
32
+ },
33
+ exact: {
34
+ type: Boolean,
35
+ description: 'Requires exact route match for active state.',
36
+ },
37
+ href: {
38
+ type: String,
39
+ description: 'Native link URL; renders as an anchor when set.',
40
+ },
41
+ target: {
42
+ type: String,
43
+ description: 'Anchor target when `href` is set.',
44
+ },
45
+ label: {
46
+ type: String,
47
+ description: 'Visible label text.',
48
+ },
49
+ icon: {
50
+ type: String,
51
+ description: 'Icon name shown before the label.',
52
+ },
53
+ iconRight: {
54
+ type: String,
55
+ description: 'Icon name shown after the label.',
56
+ },
57
+ loading: {
58
+ type: Boolean,
59
+ description: 'Shows a spinner in place of the trailing icon.',
15
60
  },
16
- onClick: Function,
17
- value: [Number, String],
18
- to: [String, Object],
19
- exact: Boolean,
20
- href: String,
21
- target: String,
22
- label: String,
23
- icon: String,
24
- iconRight: String,
25
- loading: Boolean,
26
61
  rounded: {
27
62
  type: Boolean,
28
63
  default: true,
64
+ description: 'Applies rounded corners.',
29
65
  },
30
66
  filled: {
31
67
  type: Boolean,
32
68
  default: true,
69
+ description: 'Filled background style.',
70
+ },
71
+ selected: {
72
+ type: Boolean,
73
+ description: 'Selected visual state.',
33
74
  },
34
- selected: Boolean,
35
- disabled: Boolean,
36
- minimal: optionalBooleanProp(),
37
- prefix: String,
38
- suffix: String,
39
- checkbox: optionalBooleanProp(),
75
+ disabled: {
76
+ type: Boolean,
77
+ description: 'Disables interaction.',
78
+ },
79
+ minimal: optionalBooleanProp('Hides the label; icon-only layout.'),
80
+ prefix: {
81
+ type: String,
82
+ description: 'Text before the label when no prefix slot is used.',
83
+ },
84
+ suffix: {
85
+ type: String,
86
+ description: 'Text after the label when no suffix slot is used.',
87
+ },
88
+ checkbox: optionalBooleanProp('Shows a checkbox before the label.'),
40
89
  }
41
90
 
42
91
  export type MenuItemProps = ExtractPublicPropTypes<typeof menuItemProps>
@@ -50,6 +99,18 @@ export default {
50
99
  validators: {
51
100
  ...useCommon.validators(),
52
101
  },
102
+ docs: {
103
+ slots: {
104
+ default: 'Label content. Slot prop: item.',
105
+ prefix: 'Content before the label. Slot prop: item.',
106
+ suffix: 'Content after the label. Slot prop: item.',
107
+ },
108
+ emits: {
109
+ active: 'Emitted when the item becomes active (route or `active` prop).',
110
+ click: 'Emitted on item click when not disabled.',
111
+ 'checkbox-click': 'Emitted when the checkbox is clicked.',
112
+ },
113
+ },
53
114
  }
54
115
  </script>
55
116
 
@@ -5,46 +5,92 @@ const modalProps = {
5
5
  size: {
6
6
  type: String as PropType<ModalSize>,
7
7
  default: 'lg',
8
+ description: 'Dialog width preset (xs, sm, md, lg, xl, full).',
8
9
  },
9
10
  position: {
10
11
  type: String as PropType<ModalPosition>,
11
12
  default: 'center',
13
+ description: 'Vertical placement of the dialog (top, center, bottom).',
14
+ },
15
+ modelValue: {
16
+ type: Boolean,
17
+ description: 'Open state (v-model).',
18
+ },
19
+ showClose: {
20
+ type: Boolean,
21
+ description: 'Shows a close button in the corner.',
12
22
  },
13
- modelValue: Boolean,
14
- showClose: Boolean,
15
23
  backdrop: {
16
24
  type: Boolean,
17
25
  default: true,
26
+ description: 'Shows a dimmed backdrop behind the dialog.',
18
27
  },
19
28
  hasActions: {
20
29
  type: Boolean,
21
30
  default: true,
31
+ description: 'Renders the default actions footer region when no footer slot is used.',
22
32
  },
23
33
  hasHeader: {
24
34
  type: Boolean,
25
35
  default: true,
36
+ description: 'Renders the default header region when no header slot is used.',
37
+ },
38
+ title: {
39
+ type: String,
40
+ description: 'Header title text.',
41
+ },
42
+ description: {
43
+ type: String,
44
+ description: 'Body description shown above the default slot.',
45
+ },
46
+ label: {
47
+ type: String,
48
+ description: 'Small label above the title in the header.',
49
+ },
50
+ loading: {
51
+ type: Boolean,
52
+ description: 'Loading state for the modal (theme/visual).',
53
+ },
54
+ loadingText: {
55
+ type: String,
56
+ description: 'Text shown while loading.',
57
+ },
58
+ fluid: {
59
+ type: Boolean,
60
+ description: 'Stretches the dialog to fill available width within its size.',
26
61
  },
27
- title: String,
28
- description: String,
29
- label: String,
30
- loading: Boolean,
31
- loadingText: String,
32
- fluid: Boolean,
33
62
 
34
63
  // form props
35
- isForm: Boolean,
36
- formDisabled: Boolean,
37
- formDescription: String,
38
- formTitle: String,
64
+ isForm: {
65
+ type: Boolean,
66
+ description: 'Wraps content in x-form and enables form submit handling.',
67
+ },
68
+ formDisabled: {
69
+ type: Boolean,
70
+ description: 'Disables the inner form when `isForm` is set.',
71
+ },
72
+ formDescription: {
73
+ type: String,
74
+ description: 'Description passed to the inner form when `isForm` is set.',
75
+ },
76
+ formTitle: {
77
+ type: String,
78
+ description: 'Title passed to the inner form when `isForm` is set.',
79
+ },
39
80
  formAutoValidate: {
40
81
  type: Boolean,
41
82
  default: true,
83
+ description: 'Auto-validate the inner form on submit when `isForm` is set.',
42
84
  },
43
85
  formErrors: {
44
86
  type: [Array, Object] as PropType<FormError[] | FormError>,
45
87
  default: () => ([]),
88
+ description: 'External form errors passed to the inner form when `isForm` is set.',
89
+ },
90
+ persistent: {
91
+ type: Boolean,
92
+ description: 'Prevents closing on Escape or backdrop click.',
46
93
  },
47
- persistent: Boolean,
48
94
  }
49
95
 
50
96
  export type ModalSize = typeof modalSize[number]
@@ -63,6 +109,28 @@ export default {
63
109
  size: modalSize,
64
110
  position: modalPosition,
65
111
  },
112
+ docs: {
113
+ slots: {
114
+ default: 'Main modal body content.',
115
+ image: 'Optional media above the header.',
116
+ header: 'Replaces the default header region.',
117
+ 'header-content': 'Custom header content inside the default header layout.',
118
+ footer: 'Replaces the default actions footer.',
119
+ actions: 'Custom actions row inside the default footer.',
120
+ 'cancel-action': 'Cancel / dismiss control in the actions row.',
121
+ 'tertiary-action': 'Tertiary action control in the actions row.',
122
+ 'secondary-action': 'Secondary action control in the actions row.',
123
+ 'primary-action': 'Primary action control in the actions row.',
124
+ },
125
+ emits: {
126
+ 'update:modelValue': 'Emitted when open state changes (v-model).',
127
+ submit: 'Emitted when the inner form submits. Payload is the validation result.',
128
+ },
129
+ methods: {
130
+ open: 'Open the modal.',
131
+ close: 'Close the modal.',
132
+ },
133
+ },
66
134
  }
67
135
  </script>
68
136
 
@@ -100,7 +168,7 @@ watch(value, (val) => {
100
168
  if (val) {
101
169
  setTimeout(() => {
102
170
  stopClickOutside = onClickOutside(modalRef, clickOutsideCallback, {
103
- ignore: ['.v-popper__popper'],
171
+ ignore: ['.v-popper__popper', '.dp__menu', '.dp--menu-wrapper'],
104
172
  })
105
173
  })
106
174
  }
@@ -113,6 +181,13 @@ watch(() => props.modelValue, checkVisibility, { immediate: true })
113
181
  async function checkVisibility() {
114
182
  const val = props.modelValue
115
183
 
184
+ if (typeof document === 'undefined' || typeof window === 'undefined') {
185
+ value.value = val
186
+ visible.value = val
187
+
188
+ return
189
+ }
190
+
116
191
  if (val) {
117
192
  const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth
118
193
 
@@ -141,7 +216,7 @@ async function checkVisibility() {
141
216
  if (typeof window !== 'undefined') useEventListener(document, 'keydown', onKeyDown)
142
217
 
143
218
  const shouldIgnoreEvent = (event: KeyboardEvent) => {
144
- return ['.v-popper__popper', '.x-datepicker'].some((target) => {
219
+ return ['.v-popper__popper', '.x-datepicker', '.dp__menu', '.dp--menu-wrapper'].some((target) => {
145
220
  if (typeof target === 'string') {
146
221
  return Array.from(window.document.querySelectorAll(target))
147
222
  .some((el) => el === event.target || event.composedPath().includes(el))
@@ -5,31 +5,38 @@ const notificationsProps = {
5
5
  type: String as PropType<NotificationsAlign>,
6
6
  default: 'right',
7
7
  validator: (value: string) => validators.align.includes(value as NotificationsAlign),
8
+ description: 'Horizontal placement of the toast stack (left or right).',
8
9
  },
9
10
  position: {
10
11
  type: String as PropType<NotificationsPosition>,
11
12
  default: 'bottom',
12
13
  validator: (value: string) => validators.position.includes(value as NotificationsPosition),
14
+ description: 'Vertical placement of the toast stack (top or bottom).',
13
15
  },
14
16
  timeout: {
15
17
  type: Number,
16
18
  default: 3500,
19
+ description: 'Default auto-dismiss delay in milliseconds. Set 0 to keep until removed.',
17
20
  },
18
21
  removable: {
19
22
  type: Boolean,
20
23
  default: true,
24
+ description: 'Shows a dismiss control on each notification by default.',
21
25
  },
22
26
  pauseOnHover: {
23
27
  type: Boolean,
24
28
  default: true,
29
+ description: 'Pauses the dismiss timer while the pointer hovers a notification.',
25
30
  },
26
31
  injectKey: {
27
32
  type: [Symbol, String],
28
33
  default: injectNotificationKey,
34
+ description: 'Provide/inject key for notification helpers (log, info, success, warn, error).',
29
35
  },
30
36
  offset: {
31
37
  type: [String, Number],
32
38
  default: 0,
39
+ description: 'Extra inset from the viewport edge in pixels.',
33
40
  },
34
41
  }
35
42
 
@@ -78,6 +85,19 @@ export interface NotificationsTheme extends ThemeComponent<NotificationsProps, I
78
85
  export default {
79
86
  name: 'XNotifications',
80
87
  validators,
88
+ docs: {
89
+ slots: {
90
+ default: 'App content that can inject notification helpers.',
91
+ },
92
+ methods: {
93
+ log: 'Show a plain notification.',
94
+ info: 'Show an info-styled notification.',
95
+ success: 'Show a success-styled notification.',
96
+ warn: 'Show a warning-styled notification.',
97
+ warning: 'Alias of `warn`.',
98
+ error: 'Show an error-styled notification.',
99
+ },
100
+ },
81
101
  }
82
102
  </script>
83
103
 
@@ -274,6 +294,7 @@ defineExpose({ log, info, success, warn, warning: warn, error })
274
294
  :class="[
275
295
  className,
276
296
  classes.wrapper,
297
+ 'pointer-events-none',
277
298
  {
278
299
  // align
279
300
  'left-0': internalAlign === 'left',
@@ -290,6 +311,7 @@ defineExpose({ log, info, success, warn, warning: warn, error })
290
311
  ]"
291
312
  :class="[
292
313
  classes.list,
314
+ 'pointer-events-none',
293
315
  { 'flex-col-reverse': internalPosition }
294
316
  ]"
295
317
  enter-active-class="transition ease-out duration-200"
@@ -305,6 +327,7 @@ defineExpose({ log, info, success, warn, warning: warn, error })
305
327
  :key="notification.id"
306
328
  :class="[
307
329
  classes.item,
330
+ 'pointer-events-auto',
308
331
  {
309
332
  'mb-2': internalPosition === 'bottom',
310
333
  'mt-2': internalPosition === 'top',
@@ -1,11 +1,51 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { mount } from '@vue/test-utils'
3
- import Notifications from '../Notifications.vue'
1
+ import { describe, it, expect, afterEach } from 'vitest'
2
+ import { mount, type VueWrapper } from '@vue/test-utils'
3
+ import type { ComponentPublicInstance } from 'vue'
4
+ import Notifications, { type NotificationInjection } from '../Notifications.vue'
4
5
 
5
6
  describe('Notifications', () => {
7
+ let wrapper: VueWrapper<ComponentPublicInstance & NotificationInjection>
8
+
9
+ afterEach(() => {
10
+ wrapper?.unmount()
11
+ })
12
+
6
13
  it('renders without errors', () => {
7
- const wrapper = mount(Notifications)
14
+ wrapper = mount(Notifications)
8
15
 
9
16
  expect(wrapper.vm).toBeTruthy()
10
17
  })
18
+
19
+ it('does not capture pointer events on offset padding', async () => {
20
+ wrapper = mount(Notifications, {
21
+ props: { offset: 60, timeout: 0 },
22
+ attachTo: document.body,
23
+ })
24
+
25
+ const overlay = document.body.querySelector('.x-notifications') as HTMLElement | null
26
+ const list = overlay?.querySelector('ul') as HTMLElement | null
27
+
28
+ expect(overlay?.classList.contains('pointer-events-none')).toBe(true)
29
+ expect(list?.classList.contains('pointer-events-none')).toBe(true)
30
+ expect(list?.style.paddingBottom).toBe('60px')
31
+
32
+ wrapper.vm.log('Hello')
33
+ await wrapper.vm.$nextTick()
34
+
35
+ const item = overlay?.querySelector('li')
36
+
37
+ expect(item?.classList.contains('pointer-events-auto')).toBe(true)
38
+ })
39
+
40
+ it('applies offset as padding-top when stacked at the top', () => {
41
+ wrapper = mount(Notifications, {
42
+ props: { offset: 48, position: 'top' },
43
+ attachTo: document.body,
44
+ })
45
+
46
+ const list = document.body.querySelector('.x-notifications ul') as HTMLElement | null
47
+
48
+ expect(list?.style.paddingTop).toBe('48px')
49
+ expect(list?.classList.contains('pointer-events-none')).toBe(true)
50
+ })
11
51
  })
@@ -4,18 +4,21 @@ import { optionalBooleanProp } from '../../common/props'
4
4
  const paginationVariant = ['simple', 'quick', 'dots'] as const
5
5
  const paginationProps = {
6
6
  ...useCommon.props(),
7
- links: optionalBooleanProp(),
7
+ links: optionalBooleanProp('Renders page buttons as links (`?page=` query).'),
8
8
  totalPages: {
9
9
  type: Number,
10
10
  default: 1,
11
+ description: 'Total number of pages.',
11
12
  },
12
13
  modelValue: {
13
14
  type: Number,
14
15
  default: 1,
16
+ description: 'Current page (v-model).',
15
17
  },
16
18
  variant: {
17
19
  type: String as PropType<PaginationVariant>,
18
20
  default: 'simple',
21
+ description: 'Layout style (simple, quick, or dots).',
19
22
  },
20
23
  }
21
24
 
@@ -31,6 +34,11 @@ export default {
31
34
  ...useCommon.validators(),
32
35
  variant: paginationVariant,
33
36
  },
37
+ docs: {
38
+ emits: {
39
+ 'update:modelValue': 'Emitted when the current page changes (v-model).',
40
+ },
41
+ },
34
42
  }
35
43
  </script>
36
44
 
@@ -6,9 +6,13 @@ const paginationItemProps = {
6
6
  value: {
7
7
  type: Number,
8
8
  default: 0,
9
+ description: 'Page number shown on the control.',
9
10
  },
10
- selected: Boolean,
11
- links: optionalBooleanProp(),
11
+ selected: {
12
+ type: Boolean,
13
+ description: 'Marks this page as the current selection.',
14
+ },
15
+ links: optionalBooleanProp('Renders as a link to `?page=` instead of a button.'),
12
16
  }
13
17
 
14
18
  export type PaginationItemProps = ExtractPublicPropTypes<typeof paginationItemProps>
@@ -21,6 +25,11 @@ export default {
21
25
  validators: {
22
26
  ...useCommon.validators(),
23
27
  },
28
+ docs: {
29
+ emits: {
30
+ input: 'Emitted with the page number when an unselected item is clicked.',
31
+ },
32
+ },
24
33
  }
25
34
  </script>
26
35
 
@@ -7,53 +7,106 @@ export type PopoverPlacement = Placement
7
7
  export type PopoverTriggerEvent = TriggerEvent
8
8
 
9
9
  const popoverProps = {
10
- disabled: Boolean,
11
- positioningDisabled: Boolean,
10
+ disabled: {
11
+ type: Boolean,
12
+ description: 'Disables showing the popover.',
13
+ },
14
+ positioningDisabled: {
15
+ type: Boolean,
16
+ description: 'Keeps the popover in the DOM flow without floating positioning.',
17
+ },
12
18
  placement: {
13
19
  type: String as PropType<PopoverPlacement>,
14
20
  default: 'bottom-start',
21
+ description: 'Preferred placement relative to the trigger.',
15
22
  },
16
23
  delay: {
17
24
  type: [String, Number, Object] as PropType<string | number | { show: number; hide: number; }>,
18
25
  default: 0,
26
+ description: 'Show/hide delay in ms, or `{ show, hide }`.',
27
+ },
28
+ distance: {
29
+ type: [Number, String],
30
+ description: 'Offset along the placement axis in pixels.',
31
+ },
32
+ skidding: {
33
+ type: [Number, String],
34
+ description: 'Offset along the trigger edge in pixels.',
19
35
  },
20
- distance: [Number, String],
21
- skidding: [Number, String],
22
36
  triggers: {
23
37
  type: Array as PropType<Array<PopoverTriggerEvent>>,
24
38
  default: () => ['click'],
39
+ description: 'Events that toggle the popover (for example click, hover, focus).',
25
40
  },
26
41
  hideArrow: {
27
42
  type: Boolean,
28
43
  default: true,
44
+ description: 'Hides the popover arrow.',
45
+ },
46
+ showTriggers: {
47
+ type: [Array, Function] as PropType<Array<PopoverTriggerEvent> | ((triggers: Array<PopoverTriggerEvent>) => Array<PopoverTriggerEvent>)>,
48
+ description: 'Events that show the popover, or a function deriving them from `triggers`.',
49
+ },
50
+ hideTriggers: {
51
+ type: [Array, Function] as PropType<Array<PopoverTriggerEvent> | ((triggers: Array<PopoverTriggerEvent>) => Array<PopoverTriggerEvent>)>,
52
+ description: 'Events that hide the popover, or a function deriving them from `triggers`.',
53
+ },
54
+ popperTriggers: {
55
+ type: Array as PropType<Array<PopoverTriggerEvent>>,
56
+ description: 'Events on the popover content that keep it open.',
57
+ },
58
+ popperShowTriggers: {
59
+ type: [Array, Function] as PropType<Array<PopoverTriggerEvent> | ((triggers: Array<PopoverTriggerEvent>) => Array<PopoverTriggerEvent>)>,
60
+ description: 'Events on the content that show the popover.',
61
+ },
62
+ popperHideTriggers: {
63
+ type: [Array, Function] as PropType<Array<PopoverTriggerEvent> | ((triggers: Array<PopoverTriggerEvent>) => Array<PopoverTriggerEvent>)>,
64
+ description: 'Events on the content that hide the popover.',
29
65
  },
30
- showTriggers: [Array, Function] as PropType<Array<PopoverTriggerEvent> | ((triggers: Array<PopoverTriggerEvent>) => Array<PopoverTriggerEvent>)>,
31
- hideTriggers: [Array, Function] as PropType<Array<PopoverTriggerEvent> | ((triggers: Array<PopoverTriggerEvent>) => Array<PopoverTriggerEvent>)>,
32
- popperTriggers: Array as PropType<Array<PopoverTriggerEvent>>,
33
- popperShowTriggers: [Array, Function] as PropType<Array<PopoverTriggerEvent> | ((triggers: Array<PopoverTriggerEvent>) => Array<PopoverTriggerEvent>)>,
34
- popperHideTriggers: [Array, Function] as PropType<Array<PopoverTriggerEvent> | ((triggers: Array<PopoverTriggerEvent>) => Array<PopoverTriggerEvent>)>,
35
66
  container: {
36
67
  type: [String, Object, Boolean],
37
68
  default: 'body',
69
+ description: 'Element that contains the floating popover DOM.',
70
+ },
71
+ boundary: {
72
+ type: [String, Object],
73
+ description: 'Overflow boundary used for flip/shift positioning.',
38
74
  },
39
- boundary: [String, Object],
40
75
  strategy: {
41
76
  type: String as PropType<'absolute' | 'fixed'>,
42
77
  default: 'absolute',
78
+ description: 'CSS position strategy for the floating element.',
43
79
  },
44
80
  autoHide: {
45
81
  type: [Boolean, Function] as PropType<boolean | ((event: Event) => boolean)>,
46
82
  default: true,
83
+ description: 'Hides on outside click, or a predicate deciding whether to hide.',
84
+ },
85
+ shown: {
86
+ type: Boolean,
87
+ description: 'Controlled open state.',
47
88
  },
48
- shown: Boolean,
49
89
  handleResize: {
50
90
  type: Boolean,
51
91
  default: true,
92
+ description: 'Repositions when the popover content size changes.',
93
+ },
94
+ instantMove: {
95
+ type: Boolean,
96
+ description: 'Skips transition when the popover moves between placements.',
97
+ },
98
+ eagerMount: {
99
+ type: Boolean,
100
+ description: 'Mounts popover content immediately instead of on first open.',
101
+ },
102
+ popperClass: {
103
+ type: [String, Array, Object],
104
+ description: 'Extra class(es) on the floating popover element.',
105
+ },
106
+ computeTransformOrigin: {
107
+ type: Boolean,
108
+ description: 'Computes transform-origin for scale transitions.',
52
109
  },
53
- instantMove: Boolean,
54
- eagerMount: Boolean,
55
- popperClass: [String, Array, Object],
56
- computeTransformOrigin: Boolean,
57
110
  }
58
111
 
59
112
  export type PopoverProps = ExtractPublicPropTypes<typeof popoverProps>
@@ -64,13 +117,47 @@ export interface PopoverTheme extends ThemeComponent<PopoverProps, InternalClass
64
117
  export default {
65
118
  name: 'XPopover',
66
119
  validators,
120
+ docs: {
121
+ slots: {
122
+ default: 'Trigger element.',
123
+ content: 'Popover panel content.',
124
+ },
125
+ emits: {
126
+ show: 'Emitted when the popover starts opening.',
127
+ hide: 'Emitted when the popover starts closing.',
128
+ 'update:shown': 'Emitted when open state changes.',
129
+ 'apply-show': 'Emitted after the show transition is applied.',
130
+ 'apply-hide': 'Emitted after the hide transition is applied.',
131
+ 'close-group': 'Emitted when a popover group close is requested.',
132
+ 'close-directive': 'Emitted when closed via the close directive.',
133
+ 'auto-hide': 'Emitted when auto-hide closes the popover.',
134
+ resize: 'Emitted when popover content is resized.',
135
+ },
136
+ methods: {
137
+ show: 'Show the popover.',
138
+ hide: 'Hide the popover.',
139
+ toggle: 'Toggle open state.',
140
+ },
141
+ },
67
142
  }
68
143
  </script>
69
144
 
70
145
  <script setup lang="ts">
71
- import { type PropType, type ExtractPublicPropTypes, ref } from 'vue'
146
+ import { type PropType, type ExtractPublicPropTypes, ref, inject, computed } from 'vue'
72
147
  import { useTheme, type ThemeComponent } from '../../composables/useTheme'
148
+ import { injectButtonGroupKey } from '../../composables/keys'
73
149
  import { Dropdown as VDropdown, type Placement, type TriggerEvent } from 'floating-vue'
150
+ import PopoverContentBoundary from './PopoverContentBoundary.vue'
151
+ import type { ButtonGroupInjection } from '../button/ButtonGroup.vue'
152
+
153
+ const inactiveButtonGroup: ButtonGroupInjection = {
154
+ isButtonGroup: false,
155
+ groupProps: {},
156
+ registerChild: () => {},
157
+ unregisterChild: () => {},
158
+ getPosition: () => 'only',
159
+ childOrder: computed(() => []),
160
+ }
74
161
 
75
162
  const props = defineProps(popoverProps)
76
163
 
@@ -95,6 +182,8 @@ const isOpen = ref(false)
95
182
 
96
183
  defineExpose({ show, hide, toggle, isOpen })
97
184
 
185
+ const buttonGroup = inject(injectButtonGroupKey, inactiveButtonGroup)
186
+
98
187
  const { styles, classes, className } = useTheme('Popover', {}, props)
99
188
  </script>
100
189
 
@@ -102,7 +191,11 @@ const { styles, classes, className } = useTheme('Popover', {}, props)
102
191
  <v-dropdown
103
192
  ref="elRef"
104
193
  :style="styles"
105
- :class="[className, classes.wrapper]"
194
+ :class="[
195
+ className,
196
+ classes.wrapper,
197
+ { 'inline-flex self-stretch': buttonGroup.isButtonGroup },
198
+ ]"
106
199
  :positioning-disabled="positioningDisabled"
107
200
  :placement="placement"
108
201
  :disabled="disabled"
@@ -141,7 +234,9 @@ const { styles, classes, className } = useTheme('Popover', {}, props)
141
234
  >
142
235
  <slot></slot>
143
236
  <template #popper>
144
- <slot name="content"></slot>
237
+ <popover-content-boundary>
238
+ <slot name="content"></slot>
239
+ </popover-content-boundary>
145
240
  </template>
146
241
  </v-dropdown>
147
242
  </template>