@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
@@ -1,12 +1,21 @@
1
1
  <script lang="ts">
2
2
  const toggleTipProps = {
3
- content: String,
4
- icon: String,
3
+ content: {
4
+ type: String,
5
+ description: 'HTML or text shown inside the tooltip.',
6
+ },
7
+ icon: {
8
+ type: String,
9
+ description: 'Icon name for the trigger. Defaults to the info icon.',
10
+ },
5
11
  }
6
12
 
7
13
  export type ToggleTipProps = ExtractPublicPropTypes<typeof toggleTipProps>
8
14
 
9
- export default { name: 'XToggleTip' }
15
+ export default {
16
+ name: 'XToggleTip',
17
+ docs: {},
18
+ }
10
19
  </script>
11
20
 
12
21
  <script setup lang="ts">
@@ -3,12 +3,20 @@ const tooltipProps = {
3
3
  tag: {
4
4
  type: String,
5
5
  default: 'div',
6
+ description: 'Root element tag wrapping the trigger.',
7
+ },
8
+ tooltip: {
9
+ type: String,
10
+ description: 'Tooltip text shown on hover. Prefer the tooltip slot for custom content.',
11
+ },
12
+ disabled: {
13
+ type: Boolean,
14
+ description: 'Disables showing the tooltip.',
6
15
  },
7
- tooltip: String,
8
- disabled: Boolean,
9
16
  position: {
10
17
  type: String as PropType<TooltipPosition>,
11
18
  default: 'bottom',
19
+ description: 'Preferred placement relative to the trigger (top, bottom, left, right).',
12
20
  },
13
21
  }
14
22
 
@@ -19,7 +27,15 @@ export type TooltipProps = ExtractPublicPropTypes<typeof tooltipProps>
19
27
  type InternalClasses = 'tooltip'
20
28
  export interface TooltipTheme extends ThemeComponent<TooltipProps, InternalClasses> {}
21
29
 
22
- export default { name: 'XTooltip' }
30
+ export default {
31
+ name: 'XTooltip',
32
+ docs: {
33
+ slots: {
34
+ default: 'Trigger content the tooltip is attached to.',
35
+ tooltip: 'Custom tooltip content; overrides the `tooltip` prop.',
36
+ },
37
+ },
38
+ }
23
39
  </script>
24
40
 
25
41
  <script setup lang="ts">
@@ -8,28 +8,46 @@ const validators = {
8
8
  const uploadProps = {
9
9
  ...useInteractive.props(),
10
10
  ...useInputtable.props(),
11
- placeholder: String,
12
- accept: String,
13
- multiple: optionalBooleanProp(),
14
- maxFiles: [Number, String],
15
- maxFileSize: [Number, String],
11
+ placeholder: {
12
+ type: String,
13
+ description: 'Text shown in the default drop zone.',
14
+ },
15
+ accept: {
16
+ type: String,
17
+ description: 'Accepted file types (native `accept` attribute).',
18
+ },
19
+ multiple: optionalBooleanProp('Allows selecting more than one file.'),
20
+ maxFiles: {
21
+ type: [Number, String],
22
+ description: 'Maximum number of files allowed.',
23
+ },
24
+ maxFileSize: {
25
+ type: [Number, String],
26
+ description: 'Maximum file size in bytes.',
27
+ },
16
28
  variant: {
17
29
  type: String as PropType<UploadVariant>,
18
30
  default: 'box',
31
+ description: 'Visual variant of the upload control.',
32
+ },
33
+ action: {
34
+ type: String,
35
+ description: 'URL to upload files to; enables remote upload mode when set.',
36
+ },
37
+ headers: {
38
+ type: Object as PropType<Record<string, string>>,
39
+ description: 'Additional HTTP headers sent with the upload request.',
19
40
  },
20
-
21
- // URL to submit data to.
22
- action: String,
23
- // Additional HTTP headers
24
- headers: Object as PropType<Record<string, string>>,
25
41
  method: {
26
42
  type: String as PropType<'POST' | 'PUT'>,
27
43
  default: 'POST',
44
+ description: 'HTTP method used when uploading to `action`.',
28
45
  },
29
- withCredentials: optionalBooleanProp(),
46
+ withCredentials: optionalBooleanProp('Sends cookies/credentials with the upload request.'),
30
47
  fileFormDataName: {
31
48
  type: String,
32
49
  default: 'file',
50
+ description: 'FormData field name for each uploaded file.',
33
51
  },
34
52
  }
35
53
 
@@ -50,6 +68,21 @@ export interface UploadTheme extends ThemeComponent<UploadProps, InternalClasses
50
68
  export default {
51
69
  name: 'XUpload',
52
70
  validators,
71
+ docs: {
72
+ slots: {
73
+ box: 'Custom drop zone UI (`is-over` when dragging files).',
74
+ files: 'Custom file list (`files` upload state array).',
75
+ removeIcon: 'Icon for the remove-file control.',
76
+ },
77
+ emits: {
78
+ ...useInputtable.emitDocs(),
79
+ upload: 'Emitted when a file finishes uploading (remote mode).',
80
+ remove: 'Emitted when a file is removed from the list.',
81
+ },
82
+ methods: {
83
+ ...useInputtable.methodDocs(),
84
+ },
85
+ },
53
86
  }
54
87
  </script>
55
88
 
@@ -61,6 +94,7 @@ import { useInteractive } from '../../composables/useInteractive'
61
94
  import { useInputtable } from '../../composables/useInputtable'
62
95
  import { useTheme, type ThemeComponent } from '../../composables/useTheme'
63
96
  import { uploadIcon, closeIcon, fileIcon } from '../../common/icons'
97
+ import { isFileAccepted } from './fileAccept'
64
98
 
65
99
  import XLabel from '../label/Label.vue'
66
100
  import XInputFooter from '../inputFooter/InputFooter.vue'
@@ -104,12 +138,8 @@ function isInputValid(files: File[] | FileList | null) {
104
138
  }
105
139
 
106
140
  if (props.accept) {
107
- const accept = props.accept.split(',').map((type) => type.trim())
108
-
109
141
  for (let i = 0; i < files.length; i++) {
110
- const file = files[i]
111
-
112
- if (!accept.some((type) => file.type === type || file.name.endsWith(type))) {
142
+ if (!isFileAccepted(files[i], props.accept)) {
113
143
  errorInternal.value = 'Invalid file type'
114
144
 
115
145
  return false
@@ -0,0 +1,39 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { isFileAccepted } from '../fileAccept'
3
+
4
+ function file(name: string, type: string) {
5
+ return new File([''], name, { type })
6
+ }
7
+
8
+ describe('isFileAccepted', () => {
9
+ it('accepts any file when accept is empty', () => {
10
+ expect(isFileAccepted(file('a.png', 'image/png'), '')).toBe(true)
11
+ expect(isFileAccepted(file('a.png', 'image/png'), ' ')).toBe(true)
12
+ })
13
+
14
+ it('matches filename extensions (case-insensitive)', () => {
15
+ expect(isFileAccepted(file('photo.PNG', 'image/png'), '.png')).toBe(true)
16
+ expect(isFileAccepted(file('photo.jpg', 'image/jpeg'), '.png, .jpg')).toBe(true)
17
+ expect(isFileAccepted(file('doc.pdf', 'application/pdf'), '.png')).toBe(false)
18
+ })
19
+
20
+ it('matches exact MIME types', () => {
21
+ expect(isFileAccepted(file('a.png', 'image/png'), 'image/png')).toBe(true)
22
+ expect(isFileAccepted(file('a.png', 'image/png'), 'image/jpeg')).toBe(false)
23
+ })
24
+
25
+ it('matches MIME wildcards like image/*', () => {
26
+ expect(isFileAccepted(file('a.png', 'image/png'), 'image/*')).toBe(true)
27
+ expect(isFileAccepted(file('a.webp', 'image/webp'), 'image/*')).toBe(true)
28
+ expect(isFileAccepted(file('a.pdf', 'application/pdf'), 'image/*')).toBe(false)
29
+ })
30
+
31
+ it('matches mixed HTML accept lists', () => {
32
+ const accept = 'image/*,.pdf,application/json'
33
+
34
+ expect(isFileAccepted(file('a.png', 'image/png'), accept)).toBe(true)
35
+ expect(isFileAccepted(file('a.PDF', 'application/pdf'), accept)).toBe(true)
36
+ expect(isFileAccepted(file('a.json', 'application/json'), accept)).toBe(true)
37
+ expect(isFileAccepted(file('a.txt', 'text/plain'), accept)).toBe(false)
38
+ })
39
+ })
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Matches a file against an HTML `accept` attribute value.
3
+ * Supports extensions (`.png`), MIME types (`image/png`), and wildcards (`image/*`).
4
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/accept
5
+ */
6
+ export function isFileAccepted(file: File, accept: string): boolean {
7
+ const tokens = accept.split(',').map((token) => token.trim()).filter(Boolean)
8
+
9
+ if (!tokens.length) return true
10
+
11
+ const fileName = file.name.toLowerCase()
12
+ const fileType = file.type.toLowerCase()
13
+
14
+ return tokens.some((token) => {
15
+ const type = token.toLowerCase()
16
+
17
+ if (type.startsWith('.')) {
18
+ return fileName.endsWith(type)
19
+ }
20
+
21
+ if (type.endsWith('/*')) {
22
+ const category = type.slice(0, -2)
23
+
24
+ return fileType.startsWith(`${category}/`)
25
+ }
26
+
27
+ return fileType === type
28
+ })
29
+ }
@@ -94,5 +94,6 @@ useColors.props = (defaultColor?: string) => ({
94
94
  color: {
95
95
  type: String,
96
96
  default: defaultColor,
97
+ description: 'Theme or CSS color used for the control accents.',
97
98
  },
98
99
  } as const)
@@ -13,6 +13,7 @@ useCommon.props = () => ({
13
13
  type: String as PropType<Size>,
14
14
  default: 'md',
15
15
  validator: (value: string) => validators.size.includes(value),
16
+ description: 'Control size. One of xs, sm, md, lg, xl.',
16
17
  },
17
18
  } as const)
18
19
 
@@ -97,7 +97,9 @@ export function useFocusTrap() {
97
97
  }
98
98
 
99
99
  function clearFocusTrap(options?: { returnFocus?: boolean; }) {
100
- document.removeEventListener('keydown', handleKeydown)
100
+ if (typeof document !== 'undefined') {
101
+ document.removeEventListener('keydown', handleKeydown)
102
+ }
101
103
  observer?.disconnect()
102
104
  observer = null
103
105
  if (options?.returnFocus && prevActiveElement) {
@@ -201,27 +201,83 @@ useInputtable.emits = (withListeners = true): string[] => {
201
201
  ['update:modelValue']
202
202
  }
203
203
 
204
+ useInputtable.emitDocs = (withListeners = true): Record<string, string> => {
205
+ const docs: Record<string, string> = {
206
+ 'update:modelValue': 'Emitted when the bound value changes (v-model).',
207
+ }
208
+
209
+ if (withListeners) {
210
+ docs.blur = 'Emitted when the field loses focus.'
211
+ docs.focus = 'Emitted when the field receives focus.'
212
+ docs.input = 'Emitted on native input events.'
213
+ docs.change = 'Emitted when the value is committed (change).'
214
+ }
215
+
216
+ return docs
217
+ }
218
+
219
+ useInputtable.methodDocs = (): Record<string, string> => ({
220
+ focus: 'Focus the underlying control.',
221
+ blur: 'Remove focus from the underlying control.',
222
+ reset: 'Reset the field value and validation state.',
223
+ validate: 'Run validation rules and return whether the field is valid.',
224
+ setError: 'Set an external error message on the field.',
225
+ })
226
+
204
227
  useInputtable.props = () => ({
205
228
  modelValue: {
206
229
  type: [String, Number, Boolean, Object, Array] as PropType<string | number | boolean | object | any[] | undefined>,
207
230
  default: undefined,
231
+ description: 'Bound value (v-model).',
232
+ },
233
+ id: {
234
+ type: String,
235
+ description: 'Native id attribute for the input element.',
236
+ },
237
+ name: {
238
+ type: String,
239
+ description: 'Native name attribute for form submission.',
240
+ },
241
+ readonly: {
242
+ type: Boolean,
243
+ description: 'Makes the field read-only without disabling it.',
244
+ },
245
+ required: {
246
+ type: Boolean,
247
+ description: 'Marks the field as required for validation.',
208
248
  },
209
- id: String,
210
- name: String,
211
- readonly: Boolean,
212
- required: Boolean,
213
249
  validateOnInput: {
214
250
  type: Boolean,
215
251
  default: true,
252
+ description: 'Runs validation on each input event when true.',
253
+ },
254
+ label: {
255
+ type: String,
256
+ description: 'Visible label text for the field.',
257
+ },
258
+ helper: {
259
+ type: String,
260
+ description: 'Helper text shown below the field.',
261
+ },
262
+ error: {
263
+ type: String,
264
+ description: 'External error message; overrides rule errors when set.',
265
+ },
266
+ hideFooter: {
267
+ type: Boolean,
268
+ description: 'Hides the footer area (helper / error).',
216
269
  },
217
- label: String,
218
- helper: String,
219
- error: String,
220
- hideFooter: Boolean,
221
270
  rules: {
222
271
  type: Array,
223
272
  default: () => [],
273
+ description: 'Validation rule functions or rule descriptors.',
274
+ },
275
+ tooltip: {
276
+ type: String,
277
+ description: 'Optional tooltip text next to the label.',
278
+ },
279
+ skipFormRegistry: {
280
+ type: Boolean,
281
+ description: 'Skips registering this field with a parent x-form.',
224
282
  },
225
- tooltip: String,
226
- skipFormRegistry: Boolean,
227
283
  } as const)
@@ -18,11 +18,21 @@ export const useInteractive = (
18
18
  }
19
19
 
20
20
  useInteractive.props = () => ({
21
- disabled: Boolean,
22
- loading: Boolean,
23
- loadingLabel: String,
21
+ disabled: {
22
+ type: Boolean,
23
+ description: 'Disables interaction and applies disabled styling.',
24
+ },
25
+ loading: {
26
+ type: Boolean,
27
+ description: 'Shows a loading indicator and blocks interaction.',
28
+ },
29
+ loadingLabel: {
30
+ type: String,
31
+ description: 'Accessible label announced while loading.',
32
+ },
24
33
  loadingStatus: {
25
34
  type: String as PropType<LoaderStatus>,
26
35
  default: 'active',
36
+ description: 'Loader visual status (for example active or indeterminate).',
27
37
  },
28
38
  } as const)
@@ -3,6 +3,7 @@ export default `
3
3
  html {
4
4
  color: #111827;
5
5
  background-color: white;
6
+ color-scheme: light;
6
7
  }
7
8
 
8
9
  html.dark {
@@ -27,9 +28,7 @@ export default `
27
28
  }
28
29
 
29
30
  .dark {
30
- input[type="time"]::-webkit-calendar-picker-indicator{
31
- filter: invert(100%);
32
- }
31
+ color-scheme: dark;
33
32
  }
34
33
  }
35
34
 
@@ -3,6 +3,7 @@ export default `
3
3
  html {
4
4
  color: #111827;
5
5
  background-color: white;
6
+ color-scheme: light;
6
7
  }
7
8
 
8
9
  html.dark {
@@ -23,9 +24,7 @@ export default `
23
24
  }
24
25
 
25
26
  .dark {
26
- input[type="time"]::-webkit-calendar-picker-indicator{
27
- filter: invert(100%);
28
- }
27
+ color-scheme: dark;
29
28
  }
30
29
  }
31
30
 
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export default '2.0.0'
1
+ export default '2.1.0'
@@ -1,14 +1,46 @@
1
1
  <script lang="ts">
2
+ const infiniteLoaderProps = {
3
+ isRowLoaded: {
4
+ type: Function as PropType<(index: number) => boolean>,
5
+ required: true,
6
+ description: 'Returns whether the row at the given index is already loaded.',
7
+ },
8
+ loadMoreRows: {
9
+ type: Function as PropType<(startIndex: number, stopIndex: number) => Promise<void>>,
10
+ required: true,
11
+ description: 'Loads more rows for the given index range; resolve when finished.',
12
+ },
13
+ minimumBatchSize: {
14
+ type: Number,
15
+ description: 'Minimum rows to request per load (default 10). Batches HTTP fetches.',
16
+ },
17
+ threshold: {
18
+ type: Number,
19
+ description: 'Prefetch when the user scrolls within this many rows of unloaded data (default 15).',
20
+ },
21
+ rowCount: {
22
+ type: Number,
23
+ required: true,
24
+ description: 'Total row count; may be an upper bound if the true size is unknown.',
25
+ },
26
+ }
27
+
2
28
  export default {
3
29
  name: 'XInfiniteLoader',
30
+ docs: {
31
+ slots: {
32
+ default: 'Render prop slot; receives `onRowsRendered` to wire into a virtual list.',
33
+ },
34
+ },
4
35
  }
5
36
  </script>
6
37
 
7
38
  <script setup lang="ts">
39
+ import type { PropType } from 'vue'
8
40
  import { useInfiniteLoader } from '../../composables/infinite-loader/useInfiniteLoader'
9
41
  import type { InfiniteLoaderProps } from '../../composables/infinite-loader/types'
10
42
 
11
- const props = defineProps<InfiniteLoaderProps>()
43
+ const props = defineProps(infiniteLoaderProps) as unknown as InfiniteLoaderProps
12
44
 
13
45
  const { onRowsRendered } = useInfiniteLoader(props)
14
46
  </script>
@@ -1,22 +1,116 @@
1
1
  <script lang="ts">
2
+ const virtualGridProps = {
3
+ cellProps: {
4
+ type: Object as PropType<Record<string, unknown>>,
5
+ description: 'Extra props passed to the cell slot as `props`.',
6
+ },
7
+ class: {
8
+ type: String,
9
+ description: 'CSS class name on the root element.',
10
+ },
11
+ columnCount: {
12
+ type: Number,
13
+ required: true,
14
+ description: 'Total number of columns in the grid.',
15
+ },
16
+ columnWidth: {
17
+ type: [Number, String, Function] as PropType<
18
+ number | string | ((index: number, cellProps: Record<string, unknown>) => number)
19
+ >,
20
+ required: true,
21
+ description: 'Column width as px, percent string, or a function of index.',
22
+ },
23
+ defaultHeight: {
24
+ type: Number,
25
+ default: 0,
26
+ description: 'Initial grid height before measure; important for SSR.',
27
+ },
28
+ defaultWidth: {
29
+ type: Number,
30
+ default: 0,
31
+ description: 'Initial grid width before measure; important for SSR.',
32
+ },
33
+ dir: {
34
+ type: String as PropType<'ltr' | 'rtl' | 'auto'>,
35
+ description: 'Text directionality for cell layout (ltr, rtl, or auto).',
36
+ },
37
+ onCellsRendered: {
38
+ type: Function as PropType<(
39
+ visibleCells: {
40
+ columnStartIndex: number;
41
+ columnStopIndex: number;
42
+ rowStartIndex: number;
43
+ rowStopIndex: number;
44
+ },
45
+ allCells: {
46
+ columnStartIndex: number;
47
+ columnStopIndex: number;
48
+ rowStartIndex: number;
49
+ rowStopIndex: number;
50
+ }
51
+ ) => void>,
52
+ description: 'Called when the visible or overscan cell range changes.',
53
+ },
54
+ onResize: {
55
+ type: Function as PropType<(
56
+ size: { height: number; width: number; },
57
+ prevSize: { height: number; width: number; }
58
+ ) => void>,
59
+ description: 'Called when the grid root resizes.',
60
+ },
61
+ overscanCount: {
62
+ type: Number,
63
+ default: 3,
64
+ description: 'Extra rows/columns rendered outside the visible area.',
65
+ },
66
+ rowCount: {
67
+ type: Number,
68
+ required: true,
69
+ description: 'Total number of rows in the grid.',
70
+ },
71
+ rowHeight: {
72
+ type: [Number, String, Function] as PropType<
73
+ number | string | ((index: number, cellProps: Record<string, unknown>) => number)
74
+ >,
75
+ required: true,
76
+ description: 'Row height as px, percent string, or a function of index.',
77
+ },
78
+ style: {
79
+ type: Object as PropType<CSSProperties>,
80
+ description: 'Inline styles; the grid fills the size defined here.',
81
+ },
82
+ tag: {
83
+ type: String as PropType<TagNames>,
84
+ default: 'div',
85
+ description: 'Root element tag.',
86
+ },
87
+ }
88
+
2
89
  export default {
3
90
  name: 'XVirtualGrid',
91
+ docs: {
92
+ slots: {
93
+ cell: 'Render a single cell. Receives columnIndex, rowIndex, style, ariaAttributes, and props.',
94
+ default: 'Optional content rendered after the virtualized cells.',
95
+ },
96
+ methods: {
97
+ scrollToCell: 'Scroll so the given cell (row and column) is visible.',
98
+ scrollToColumn: 'Scroll so the given column index is visible.',
99
+ scrollToRow: 'Scroll so the given row index is visible.',
100
+ element: 'Root HTML element when mounted, otherwise null.',
101
+ },
102
+ },
4
103
  }
5
104
  </script>
6
105
 
7
106
  <script setup lang="ts">
8
- import { computed, ref, watch, type CSSProperties } from 'vue'
107
+ import { computed, ref, watch, type CSSProperties, type PropType } from 'vue'
9
108
  import { useIsRtl } from '../../core/useIsRtl'
10
109
  import { useVirtualizer } from '../../core/useVirtualizer'
11
- import type { Align } from '../../types'
110
+ import type { Align, TagNames } from '../../types'
12
111
  import type { VirtualGridProps, VirtualGridImperativeAPI } from './types'
13
112
 
14
- const props = withDefaults(defineProps<VirtualGridProps>(), {
15
- defaultHeight: 0,
16
- defaultWidth: 0,
17
- overscanCount: 3,
18
- tag: 'div',
19
- })
113
+ const props = defineProps(virtualGridProps) as unknown as VirtualGridProps
20
114
 
21
115
  const element = ref<HTMLDivElement | null>(null)
22
116
 
@@ -42,7 +136,7 @@ const {
42
136
  itemProps: cellProps.value,
43
137
  itemSize: props.columnWidth,
44
138
  onResize: props.onResize,
45
- overscanCount: props.overscanCount,
139
+ overscanCount: props.overscanCount ?? 3,
46
140
  })
47
141
 
48
142
  const {
@@ -62,7 +156,7 @@ const {
62
156
  itemProps: cellProps.value,
63
157
  itemSize: props.rowHeight,
64
158
  onResize: props.onResize,
65
- overscanCount: props.overscanCount,
159
+ overscanCount: props.overscanCount ?? 3,
66
160
  })
67
161
 
68
162
  // Expose imperative API