@carbon/vue 2.45.0 → 3.0.4-alpha.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 (354) hide show
  1. package/README.md +34 -264
  2. package/dist/carbon-vue-3.common.js +27392 -0
  3. package/dist/carbon-vue-3.common.js.map +1 -0
  4. package/dist/carbon-vue-3.umd.js +27403 -0
  5. package/dist/carbon-vue-3.umd.js.map +1 -0
  6. package/dist/carbon-vue-3.umd.min.js +17 -0
  7. package/dist/carbon-vue-3.umd.min.js.map +1 -0
  8. package/dist/demo.html +1 -34
  9. package/package.json +185 -62
  10. package/src/components/CvAccordion/CvAccordion.stories.js +54 -0
  11. package/src/components/CvAccordion/CvAccordion.vue +95 -0
  12. package/src/components/CvAccordion/CvAccordionItem.vue +101 -0
  13. package/src/components/{cv-accordion/cv-accordion-skeleton.vue → CvAccordion/CvAccordionSkeleton.vue} +14 -18
  14. package/src/components/CvAccordion/_CvAccordionItemSkeleton.vue +30 -0
  15. package/src/components/CvAccordion/consts.js +17 -0
  16. package/src/components/CvAccordion/index.js +6 -0
  17. package/src/components/CvAspectRatio/CvAspectRatio.stories.js +56 -0
  18. package/src/components/CvAspectRatio/CvAspectRatio.stories.scss +4 -0
  19. package/src/components/CvAspectRatio/CvAspectRatio.vue +33 -0
  20. package/src/components/CvAspectRatio/consts.js +2 -0
  21. package/src/components/CvAspectRatio/index.js +4 -0
  22. package/src/components/CvBreadcrumb/CvBreadcrumb.stories.js +75 -0
  23. package/src/components/CvBreadcrumb/CvBreadcrumb.vue +37 -0
  24. package/src/components/CvBreadcrumb/CvBreadcrumbItem.vue +28 -0
  25. package/src/components/CvBreadcrumb/CvBreadcrumbSkeleton.vue +29 -0
  26. package/src/components/CvBreadcrumb/CvBreadcrumbSkeletonItem.vue +14 -0
  27. package/src/components/CvBreadcrumb/index.js +11 -0
  28. package/src/components/CvButton/CvButton.stories.js +119 -0
  29. package/src/components/CvButton/CvButton.vue +68 -0
  30. package/src/components/CvButton/CvButtonCommon.js +75 -0
  31. package/src/components/CvButton/CvButtonSet.stories.js +36 -0
  32. package/src/components/CvButton/CvButtonSet.vue +30 -0
  33. package/src/components/CvButton/CvIconButton.stories.js +139 -0
  34. package/src/components/CvButton/CvIconButton.vue +88 -0
  35. package/src/components/CvButton/index.js +7 -0
  36. package/src/components/CvButton/sbBtnPrefix.js +2 -0
  37. package/src/components/CvCheckbox/CvCheckbox.stories.js +111 -0
  38. package/src/components/CvCheckbox/CvCheckbox.vue +73 -0
  39. package/src/components/CvCheckbox/index.js +3 -0
  40. package/src/components/CvCodeSnippet/CvCodeSnippet.stories.js +181 -0
  41. package/src/components/CvCodeSnippet/CvCodeSnippet.stories.scss +4 -0
  42. package/src/components/CvCodeSnippet/CvCodeSnippet.vue +125 -0
  43. package/src/components/CvCodeSnippet/CvCodeSnippetSkeleton.vue +43 -0
  44. package/src/components/CvCodeSnippet/_CviCodeSnippetInline.vue +72 -0
  45. package/src/components/CvCodeSnippet/_CviCodeSnippetMultiline.vue +199 -0
  46. package/src/components/CvCodeSnippet/_CviCodeSnippetOneline.vue +106 -0
  47. package/src/components/CvCodeSnippet/consts.js +2 -0
  48. package/src/components/CvCodeSnippet/index.js +4 -0
  49. package/src/components/CvComboBox/CvComboBox.stories.js +174 -0
  50. package/src/components/CvComboBox/CvComboBox.vue +460 -0
  51. package/src/components/CvComboBox/index.js +3 -0
  52. package/src/components/CvContentSwitcher/CvContentSwitcher.stories.mdx +196 -0
  53. package/src/components/CvContentSwitcher/CvContentSwitcher.vue +64 -0
  54. package/src/components/CvContentSwitcher/CvContentSwitcherButton.vue +117 -0
  55. package/src/components/CvContentSwitcher/CvContentSwitcherContent.vue +21 -0
  56. package/src/components/CvContentSwitcher/cvContentSwitcherStore.js +30 -0
  57. package/src/components/CvContentSwitcher/index.js +3 -0
  58. package/src/components/CvCopyButton/CvCopyButton.stories.js +28 -0
  59. package/src/components/CvCopyButton/CvCopyButton.vue +45 -0
  60. package/src/components/CvCopyButton/_CviCopyButton.vue +71 -0
  61. package/src/components/CvCopyButton/index.js +3 -0
  62. package/src/components/CvDataTable/CvDataTable.stories.mdx +304 -0
  63. package/src/components/CvDataTable/CvDataTable.vue +648 -0
  64. package/src/components/CvDataTable/CvDataTableAction.vue +22 -0
  65. package/src/components/CvDataTable/CvDataTableCell.vue +11 -0
  66. package/src/components/CvDataTable/CvDataTableHeading.vue +143 -0
  67. package/src/components/CvDataTable/CvDataTableRow.vue +139 -0
  68. package/src/components/CvDataTable/CvDataTableSkeleton.vue +48 -0
  69. package/src/components/CvDataTable/_CvDataTableRowInner.vue +169 -0
  70. package/src/components/CvDataTable/cvDataTableStore.js +340 -0
  71. package/src/components/CvDataTable/index.js +3 -0
  72. package/src/components/CvEmpty/_CvEmpty.vue +22 -0
  73. package/src/components/CvGrid/CvColumn.vue +85 -0
  74. package/src/components/CvGrid/CvGrid.vue +42 -0
  75. package/src/components/{cv-grid/cv-row.vue → CvGrid/CvRow.vue} +8 -12
  76. package/src/components/CvGrid/GvGrid.stories.mdx +217 -0
  77. package/src/components/CvGrid/_SbContainer.vue +22 -0
  78. package/src/components/CvGrid/_cvColumnValidation.js +48 -0
  79. package/src/components/CvLink/CvLink.stories.js +169 -0
  80. package/src/components/CvLink/CvLink.vue +38 -0
  81. package/src/components/CvLink/index.js +4 -0
  82. package/src/components/CvList/CvList.stories.js +88 -0
  83. package/src/components/CvList/CvList.vue +50 -0
  84. package/src/components/CvList/CvListItem.vue +12 -0
  85. package/src/components/CvList/index.js +4 -0
  86. package/src/components/CvLoading/CvLoading.stories.js +78 -0
  87. package/src/components/CvLoading/CvLoading.stories.scss +4 -0
  88. package/src/components/CvLoading/CvLoading.vue +106 -0
  89. package/src/components/CvLoading/index.js +4 -0
  90. package/src/components/CvNotification/CvInlineNotification.stories.js +109 -0
  91. package/src/components/CvNotification/CvInlineNotification.vue +102 -0
  92. package/src/components/CvNotification/CvToastNotification.stories.js +108 -0
  93. package/src/components/CvNotification/CvToastNotification.vue +88 -0
  94. package/src/components/CvNotification/consts.js +31 -0
  95. package/src/components/CvNotification/index.js +5 -0
  96. package/src/components/CvOverflowMenu/CvOverflowMenu.stories.mdx +119 -0
  97. package/src/components/CvOverflowMenu/CvOverflowMenu.vue +283 -0
  98. package/src/components/{cv-overflow-menu/cv-overflow-menu-item.vue → CvOverflowMenu/CvOverflowMenuItem.vue} +26 -20
  99. package/src/components/CvOverflowMenu/index.js +3 -0
  100. package/src/components/CvPagination/CvPagination.stories.mdx +160 -0
  101. package/src/components/CvPagination/CvPagination.vue +246 -0
  102. package/src/components/CvPagination/index.js +3 -0
  103. package/src/components/CvSelect/CvSelect.stories.mdx +227 -0
  104. package/src/components/CvSelect/CvSelect.vue +224 -0
  105. package/src/components/CvSelect/CvSelectOptgroup.vue +9 -0
  106. package/src/components/CvSelect/CvSelectOption.vue +22 -0
  107. package/src/components/CvSelect/index.js +3 -0
  108. package/src/components/CvSkeletonText/CvSkeletonText.stories.js +56 -0
  109. package/src/components/CvSkeletonText/CvSkeletonText.vue +63 -0
  110. package/src/components/CvSkeletonText/index.js +3 -0
  111. package/src/components/CvSvg/_CvSvg.vue +48 -0
  112. package/src/components/CvSvg/__tests__/_TestIcon.vue +19 -0
  113. package/src/components/CvSvg/__tests__/test-svg.svg +5 -0
  114. package/src/components/CvTag/CvTag.stories.js +64 -0
  115. package/src/components/CvTag/CvTag.vue +105 -0
  116. package/src/components/CvTag/consts.js +15 -0
  117. package/src/components/CvTag/index.js +5 -0
  118. package/src/components/CvUIShell/CvHeader.vue +203 -0
  119. package/src/components/CvUIShell/CvHeaderGlobalAction.vue +105 -0
  120. package/src/components/{cv-ui-shell/cv-header-menu.vue → CvUIShell/CvHeaderMenu.vue} +41 -37
  121. package/src/components/CvUIShell/CvHeaderMenuButton.vue +103 -0
  122. package/src/components/CvUIShell/CvHeaderMenuItem.vue +38 -0
  123. package/src/components/CvUIShell/CvHeaderName.vue +25 -0
  124. package/src/components/CvUIShell/CvHeaderNav.vue +18 -0
  125. package/src/components/CvUIShell/CvHeaderPanel.vue +106 -0
  126. package/src/components/CvUIShell/CvSideNav.vue +131 -0
  127. package/src/components/CvUIShell/CvSideNavIcon.vue +17 -0
  128. package/src/components/CvUIShell/CvSideNavItems.vue +22 -0
  129. package/src/components/CvUIShell/CvSideNavLink.vue +47 -0
  130. package/src/components/CvUIShell/CvSideNavMenu.vue +85 -0
  131. package/src/components/CvUIShell/CvSideNavMenuDivider.vue +7 -0
  132. package/src/components/CvUIShell/CvSideNavMenuItem.vue +31 -0
  133. package/src/components/CvUIShell/CvSkipToContent.vue +20 -0
  134. package/src/components/CvUIShell/CvSwitcher.vue +9 -0
  135. package/src/components/CvUIShell/CvSwitcherItem.vue +9 -0
  136. package/src/components/CvUIShell/CvSwitcherItemLink.vue +26 -0
  137. package/src/components/CvUIShell/CvUIShell.stories.mdx +454 -0
  138. package/src/components/{cv-ui-shell/_cv-side-nav-footer.vue → CvUIShell/_CvSideNavFooter.vue} +11 -15
  139. package/src/components/CvUIShell/_CvSideNavLinkText.vue +9 -0
  140. package/src/components/CvWrapper/CvWrapper.js +23 -0
  141. package/src/global/component-utils/event-bus.js +23 -0
  142. package/src/global/component-utils/validators.js +14 -0
  143. package/src/global/settings.js +5 -0
  144. package/src/global/storybook-utils/__tests__/story-source-code.js +162 -0
  145. package/src/global/storybook-utils/controls-from-props.js +72 -0
  146. package/src/global/storybook-utils/index.js +5 -0
  147. package/src/global/storybook-utils/sbCompPrefix.js +1 -0
  148. package/src/global/storybook-utils/split-slot-args.js +14 -0
  149. package/src/global/storybook-utils/story-source-code.js +52 -0
  150. package/src/index.js +13 -83
  151. package/src/use/components.js +24 -0
  152. package/src/use/cvCheck.js +94 -0
  153. package/src/use/cvId.js +57 -0
  154. package/src/use/cvLink.js +42 -0
  155. package/src/use/cvTheme.js +30 -0
  156. package/src/use/index.js +1 -0
  157. package/src/use/overflow.js +37 -0
  158. package/dist/carbon-vue.common.js +0 -23411
  159. package/dist/carbon-vue.common.js.map +0 -1
  160. package/dist/carbon-vue.umd.js +0 -23421
  161. package/dist/carbon-vue.umd.js.map +0 -1
  162. package/dist/carbon-vue.umd.min.js +0 -30
  163. package/dist/carbon-vue.umd.min.js.map +0 -1
  164. package/src/assets/images/component-icons.svg +0 -57
  165. package/src/assets/images/example-icon-svg.js +0 -10
  166. package/src/assets/images/example-icon.svg +0 -6
  167. package/src/assets/images/example-icons.svg +0 -6
  168. package/src/carbon.yml +0 -442
  169. package/src/components/cv-accordion/_cv-accordion-item-skeleton.vue +0 -29
  170. package/src/components/cv-accordion/cv-accordion-item.vue +0 -87
  171. package/src/components/cv-accordion/cv-accordion.vue +0 -59
  172. package/src/components/cv-accordion/index.js +0 -5
  173. package/src/components/cv-aspect-ratio/cv-aspect-ratio.vue +0 -28
  174. package/src/components/cv-aspect-ratio/index.js +0 -2
  175. package/src/components/cv-breadcrumb/_cv-breadcrumb-item-skeleton.vue +0 -13
  176. package/src/components/cv-breadcrumb/cv-breadcrumb-item.vue +0 -28
  177. package/src/components/cv-breadcrumb/cv-breadcrumb-skeleton.vue +0 -30
  178. package/src/components/cv-breadcrumb/cv-breadcrumb.vue +0 -21
  179. package/src/components/cv-breadcrumb/index.js +0 -5
  180. package/src/components/cv-button/button-mixin.js +0 -91
  181. package/src/components/cv-button/cv-button-set.vue +0 -17
  182. package/src/components/cv-button/cv-button-skeleton.vue +0 -12
  183. package/src/components/cv-button/cv-button.vue +0 -19
  184. package/src/components/cv-button/cv-icon-button.vue +0 -42
  185. package/src/components/cv-button/index.js +0 -6
  186. package/src/components/cv-checkbox/cv-checkbox-skeleton.vue +0 -15
  187. package/src/components/cv-checkbox/cv-checkbox.vue +0 -70
  188. package/src/components/cv-checkbox/index.js +0 -3
  189. package/src/components/cv-code-snippet/_cv-code-snippet-inline.vue +0 -39
  190. package/src/components/cv-code-snippet/_cv-code-snippet-multiline.vue +0 -79
  191. package/src/components/cv-code-snippet/_cv-code-snippet-oneline.vue +0 -47
  192. package/src/components/cv-code-snippet/cv-code-snippet-skeleton.vue +0 -30
  193. package/src/components/cv-code-snippet/cv-code-snippet.vue +0 -83
  194. package/src/components/cv-code-snippet/index.js +0 -3
  195. package/src/components/cv-combo-box/cv-combo-box.vue +0 -386
  196. package/src/components/cv-combo-box/index.js +0 -3
  197. package/src/components/cv-content-switcher/cv-content-switcher-button.vue +0 -104
  198. package/src/components/cv-content-switcher/cv-content-switcher-content.vue +0 -26
  199. package/src/components/cv-content-switcher/cv-content-switcher-store.js +0 -22
  200. package/src/components/cv-content-switcher/cv-content-switcher.vue +0 -117
  201. package/src/components/cv-content-switcher/index.js +0 -4
  202. package/src/components/cv-data-table/_cv-data-table-row-inner.vue +0 -139
  203. package/src/components/cv-data-table/cv-data-table-action.vue +0 -25
  204. package/src/components/cv-data-table/cv-data-table-cell.vue +0 -14
  205. package/src/components/cv-data-table/cv-data-table-heading.vue +0 -109
  206. package/src/components/cv-data-table/cv-data-table-row.vue +0 -113
  207. package/src/components/cv-data-table/cv-data-table-skeleton.vue +0 -64
  208. package/src/components/cv-data-table/cv-data-table.vue +0 -525
  209. package/src/components/cv-data-table/index.js +0 -8
  210. package/src/components/cv-date-picker/cv-date-picker.vue +0 -362
  211. package/src/components/cv-date-picker/index.js +0 -3
  212. package/src/components/cv-date-picker/plugins/appendToPlugin.js +0 -52
  213. package/src/components/cv-date-picker/plugins/fixEventsPlugin.js +0 -75
  214. package/src/components/cv-date-picker/plugins/monthSelectPlugin.js +0 -66
  215. package/src/components/cv-date-picker/plugins/rangePlugin.js +0 -45
  216. package/src/components/cv-dropdown/cv-dropdown-item.vue +0 -84
  217. package/src/components/cv-dropdown/cv-dropdown-skeleton.vue +0 -20
  218. package/src/components/cv-dropdown/cv-dropdown.vue +0 -373
  219. package/src/components/cv-dropdown/index.js +0 -5
  220. package/src/components/cv-feedback-button/_cv-feedback-button.vue +0 -74
  221. package/src/components/cv-file-uploader/consts.js +0 -12
  222. package/src/components/cv-file-uploader/cv-file-uploader-skeleton.vue +0 -22
  223. package/src/components/cv-file-uploader/cv-file-uploader.vue +0 -348
  224. package/src/components/cv-file-uploader/index.js +0 -5
  225. package/src/components/cv-form/cv-form-group.vue +0 -32
  226. package/src/components/cv-form/cv-form-item.vue +0 -13
  227. package/src/components/cv-form/cv-form.vue +0 -13
  228. package/src/components/cv-form/index.js +0 -5
  229. package/src/components/cv-grid/cv-column.vue +0 -77
  230. package/src/components/cv-grid/cv-grid.vue +0 -32
  231. package/src/components/cv-grid/index.js +0 -5
  232. package/src/components/cv-icon/_cv-icon.vue +0 -30
  233. package/src/components/cv-inline-loading/consts.js +0 -8
  234. package/src/components/cv-inline-loading/cv-inline-loading.vue +0 -91
  235. package/src/components/cv-inline-loading/index.js +0 -4
  236. package/src/components/cv-inline-notification/cv-inline-notification.vue +0 -89
  237. package/src/components/cv-inline-notification/index.js +0 -3
  238. package/src/components/cv-link/cv-link.vue +0 -30
  239. package/src/components/cv-link/index.js +0 -3
  240. package/src/components/cv-list/cv-list-item.vue +0 -13
  241. package/src/components/cv-list/cv-list.vue +0 -42
  242. package/src/components/cv-list/index.js +0 -4
  243. package/src/components/cv-loading/cv-loading.vue +0 -86
  244. package/src/components/cv-loading/index.js +0 -3
  245. package/src/components/cv-modal/cv-modal.vue +0 -295
  246. package/src/components/cv-modal/index.js +0 -2
  247. package/src/components/cv-multi-select/cv-multi-select.vue +0 -484
  248. package/src/components/cv-multi-select/index.js +0 -3
  249. package/src/components/cv-number-input/cv-number-input-skeleton.vue +0 -14
  250. package/src/components/cv-number-input/cv-number-input.vue +0 -215
  251. package/src/components/cv-number-input/index.js +0 -3
  252. package/src/components/cv-overflow-menu/cv-overflow-menu.vue +0 -253
  253. package/src/components/cv-overflow-menu/index.js +0 -4
  254. package/src/components/cv-pagination/cv-pagination.vue +0 -268
  255. package/src/components/cv-pagination/index.js +0 -2
  256. package/src/components/cv-progress/cv-progress-step.vue +0 -135
  257. package/src/components/cv-progress/cv-progress.vue +0 -82
  258. package/src/components/cv-progress/index.js +0 -4
  259. package/src/components/cv-radio-button/cv-radio-button.vue +0 -40
  260. package/src/components/cv-radio-button/cv-radio-group.vue +0 -24
  261. package/src/components/cv-radio-button/index.js +0 -4
  262. package/src/components/cv-search/cv-search.vue +0 -194
  263. package/src/components/cv-search/index.js +0 -2
  264. package/src/components/cv-select/cv-select-optgroup.vue +0 -14
  265. package/src/components/cv-select/cv-select-option.vue +0 -14
  266. package/src/components/cv-select/cv-select.vue +0 -158
  267. package/src/components/cv-select/index.js +0 -4
  268. package/src/components/cv-skeleton-text/cv-skeleton-text.vue +0 -64
  269. package/src/components/cv-skeleton-text/index.js +0 -2
  270. package/src/components/cv-slider/cv-slider-skeleton.vue +0 -22
  271. package/src/components/cv-slider/cv-slider.vue +0 -247
  272. package/src/components/cv-slider/index.js +0 -4
  273. package/src/components/cv-structured-list/_cv-structured-list-item-selectable.vue +0 -37
  274. package/src/components/cv-structured-list/_cv-structured-list-item-standard.vue +0 -13
  275. package/src/components/cv-structured-list/cv-structured-list-data.vue +0 -23
  276. package/src/components/cv-structured-list/cv-structured-list-heading.vue +0 -13
  277. package/src/components/cv-structured-list/cv-structured-list-item.vue +0 -46
  278. package/src/components/cv-structured-list/cv-structured-list.vue +0 -38
  279. package/src/components/cv-structured-list/index.js +0 -5
  280. package/src/components/cv-svg/_cv-svg.vue +0 -38
  281. package/src/components/cv-tabs/cv-tab.vue +0 -68
  282. package/src/components/cv-tabs/cv-tabs-skeleton.vue +0 -20
  283. package/src/components/cv-tabs/cv-tabs.vue +0 -410
  284. package/src/components/cv-tabs/index.js +0 -5
  285. package/src/components/cv-tag/cv-tag-skeleton.vue +0 -19
  286. package/src/components/cv-tag/cv-tag.vue +0 -121
  287. package/src/components/cv-tag/index.js +0 -4
  288. package/src/components/cv-text-area/cv-text-area.vue +0 -98
  289. package/src/components/cv-text-area/index.js +0 -2
  290. package/src/components/cv-text-input/cv-text-input.vue +0 -173
  291. package/src/components/cv-text-input/index.js +0 -2
  292. package/src/components/cv-tile/_cv-tile-clickable.vue +0 -22
  293. package/src/components/cv-tile/_cv-tile-expandable.vue +0 -92
  294. package/src/components/cv-tile/_cv-tile-selectable.vue +0 -48
  295. package/src/components/cv-tile/_cv-tile-standard.vue +0 -11
  296. package/src/components/cv-tile/cv-tile.vue +0 -83
  297. package/src/components/cv-tile/index.js +0 -2
  298. package/src/components/cv-time-picker/cv-time-picker.vue +0 -138
  299. package/src/components/cv-time-picker/index.js +0 -2
  300. package/src/components/cv-toast-notification/cv-toast-notification.vue +0 -72
  301. package/src/components/cv-toast-notification/index.js +0 -2
  302. package/src/components/cv-toggle/cv-toggle-skeleton.vue +0 -25
  303. package/src/components/cv-toggle/cv-toggle.vue +0 -52
  304. package/src/components/cv-toggle/index.js +0 -3
  305. package/src/components/cv-toolbar/cv-toolbar-divider.vue +0 -11
  306. package/src/components/cv-toolbar/cv-toolbar-option.vue +0 -16
  307. package/src/components/cv-toolbar/cv-toolbar-search.vue +0 -40
  308. package/src/components/cv-toolbar/cv-toolbar-title.vue +0 -14
  309. package/src/components/cv-toolbar/cv-toolbar.vue +0 -13
  310. package/src/components/cv-toolbar/index.js +0 -6
  311. package/src/components/cv-tooltip/consts.js +0 -2
  312. package/src/components/cv-tooltip/cv-definition-tooltip.vue +0 -44
  313. package/src/components/cv-tooltip/cv-interactive-tooltip.vue +0 -241
  314. package/src/components/cv-tooltip/cv-tooltip.vue +0 -44
  315. package/src/components/cv-tooltip/index.js +0 -6
  316. package/src/components/cv-ui-shell/_cv-side-nav-link-text.vue +0 -13
  317. package/src/components/cv-ui-shell/cv-content.vue +0 -16
  318. package/src/components/cv-ui-shell/cv-header-global-action.vue +0 -84
  319. package/src/components/cv-ui-shell/cv-header-menu-button.vue +0 -80
  320. package/src/components/cv-ui-shell/cv-header-menu-item.vue +0 -36
  321. package/src/components/cv-ui-shell/cv-header-name.vue +0 -18
  322. package/src/components/cv-ui-shell/cv-header-nav.vue +0 -18
  323. package/src/components/cv-ui-shell/cv-header-panel.vue +0 -72
  324. package/src/components/cv-ui-shell/cv-header-side-nav-items.vue +0 -21
  325. package/src/components/cv-ui-shell/cv-header.vue +0 -119
  326. package/src/components/cv-ui-shell/cv-side-nav-divider.vue +0 -12
  327. package/src/components/cv-ui-shell/cv-side-nav-icon.vue +0 -16
  328. package/src/components/cv-ui-shell/cv-side-nav-items.vue +0 -21
  329. package/src/components/cv-ui-shell/cv-side-nav-link.vue +0 -54
  330. package/src/components/cv-ui-shell/cv-side-nav-menu-item.vue +0 -30
  331. package/src/components/cv-ui-shell/cv-side-nav-menu.vue +0 -84
  332. package/src/components/cv-ui-shell/cv-side-nav.vue +0 -97
  333. package/src/components/cv-ui-shell/cv-skip-to-content.vue +0 -19
  334. package/src/components/cv-ui-shell/cv-switcher-item-link.vue +0 -26
  335. package/src/components/cv-ui-shell/cv-switcher-item.vue +0 -13
  336. package/src/components/cv-ui-shell/cv-switcher.vue +0 -13
  337. package/src/components/cv-ui-shell/index.js +0 -45
  338. package/src/components/cv-wrapper/_cv-wrapper.js +0 -33
  339. package/src/directives/clickout.js +0 -29
  340. package/src/index-components-vue.js +0 -5
  341. package/src/internal/feature-flags.js +0 -22
  342. package/src/mixins/carbon-prefix-mixin.js +0 -7
  343. package/src/mixins/check-mixin.js +0 -106
  344. package/src/mixins/index.js +0 -12
  345. package/src/mixins/link-mixin.js +0 -23
  346. package/src/mixins/methods-mixin.js +0 -18
  347. package/src/mixins/notification-mixin.js +0 -18
  348. package/src/mixins/radio-mixin.js +0 -36
  349. package/src/mixins/theme-mixin.js +0 -23
  350. package/src/mixins/uid-mixin.js +0 -23
  351. package/src/thumbnails/inline-notification.svg +0 -23
  352. package/src/thumbnails/skeleton-text.svg +0 -15
  353. package/src/thumbnails/toast-notification.svg +0 -34
  354. /package/src/components/{cv-button → CvButton}/consts.js +0 -0
@@ -8,33 +8,29 @@
8
8
  :title="assistiveText"
9
9
  >
10
10
  <div :class="`${carbonPrefix}--side-nav__icon`">
11
- <Close20
11
+ <close20
12
12
  v-if="expanded"
13
13
  :class="`${carbonPrefix}--side-nav__icon--collapse ${carbonPrefix}--side-nave-collapse-icon`"
14
14
  />
15
- <ChevronRight20
15
+ <chevron-right20
16
16
  v-if="!expanded"
17
17
  :class="`${carbonPrefix}--side-nav__icon--expand ${carbonPrefix}--side-nave-expand-icon`"
18
18
  />
19
19
  </div>
20
- <span :class="`${carbonPrefix}--assistive-text`">{{ assistiveText }}</span>
20
+ <span :class="`${carbonPrefix}--assistive-text`">{{
21
+ assistiveText
22
+ }}</span>
21
23
  </button>
22
24
  </footer>
23
25
  </template>
24
26
 
25
- <script>
27
+ <script setup>
28
+ import { carbonPrefix } from '../../global/settings';
26
29
  import Close20 from '@carbon/icons-vue/es/close/20';
27
30
  import ChevronRight20 from '@carbon/icons-vue/es/chevron--right/20';
28
- import { carbonPrefixMixin } from '../../mixins';
29
31
 
30
- export default {
31
- name: 'CvSideNavFooter',
32
- inheritAttrs: false,
33
- mixins: [carbonPrefixMixin],
34
- components: { ChevronRight20, Close20 },
35
- props: {
36
- assistiveText: { type: String, default: 'Open / close side nav' },
37
- expanded: Boolean,
38
- },
39
- };
32
+ defineProps({
33
+ assistiveText: { type: String, default: 'Open / close side nav' },
34
+ expanded: Boolean,
35
+ });
40
36
  </script>
@@ -0,0 +1,9 @@
1
+ <template>
2
+ <span :class="`${carbonPrefix}--side-nav__link-text`">
3
+ <slot />
4
+ </span>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { carbonPrefix } from '../../global/settings';
9
+ </script>
@@ -0,0 +1,23 @@
1
+ /*
2
+ * This component optionally wraps slotted content with the specified tag-type.
3
+ *
4
+ * If no tag-type is supplied then the slotted content is unwrapped.
5
+ *
6
+ * Unwrapped slots do not receive class, style or attributes attached to the wrapper
7
+ */
8
+ import { h, useSlots, useAttrs } from 'vue';
9
+
10
+ export default {
11
+ name: 'CvWrapper',
12
+ props: {
13
+ tagType: { type: String, default: undefined },
14
+ },
15
+ setup(props) {
16
+ const slots = useSlots();
17
+ const attrs = useAttrs();
18
+ return () => {
19
+ if (props.tagType) return h(props.tagType, { ...attrs }, slots.default());
20
+ else return slots.default();
21
+ };
22
+ },
23
+ };
@@ -0,0 +1,23 @@
1
+ import mitt from 'mitt';
2
+ import { unref } from 'vue';
3
+
4
+ const busses = {};
5
+ /**
6
+ * Get an event bus
7
+ * @param {string} busId unique id
8
+ * @returns {Emitter}
9
+ */
10
+ export function getBus(busId) {
11
+ const id = unref(busId);
12
+ if (!(id in busses)) busses[id] = mitt();
13
+ return busses[id];
14
+ }
15
+ /**
16
+ * Remove a previously created event bus
17
+ * @param {string} busId unique id
18
+ * @returns {Emitter}
19
+ */
20
+ export function removeBus(busId) {
21
+ const id = unref(busId);
22
+ delete busses[id];
23
+ }
@@ -0,0 +1,14 @@
1
+ const error = message => console.error(`[@carbon/vue] ${message}`);
2
+
3
+ export const includesOrError =
4
+ (haystack, componentName, propName) => needle => {
5
+ if (!haystack.includes(needle)) {
6
+ error(
7
+ `Invalid ${componentName} ${propName} specified "${needle}". Valid values are: ${JSON.stringify(
8
+ haystack
9
+ )}`
10
+ );
11
+ }
12
+
13
+ return true;
14
+ };
@@ -0,0 +1,5 @@
1
+ // import { settings as carbonSettings } from "carbon-components";
2
+
3
+ const carbonPrefix = 'bx'; // carbonSettings.prefix;
4
+
5
+ export { carbonPrefix };
@@ -0,0 +1,162 @@
1
+ import { storyParametersObject } from '..';
2
+ import { storySourceCode } from '../story-source-code';
3
+
4
+ describe('global/storybook-utils/storyParametersObject', () => {
5
+ it('Should build properties from null', () => {
6
+ const parameters = storyParametersObject(null, '<div v-bind="args" />', {
7
+ prop1: 'prop1',
8
+ prop2: 'prop2',
9
+ });
10
+
11
+ expect(parameters).toEqual({
12
+ docs: {
13
+ source: {
14
+ code: '<div prop1="prop1" prop2="prop2" />',
15
+ },
16
+ },
17
+ });
18
+ });
19
+
20
+ it('Should build properties from {}', () => {
21
+ const parameters = storyParametersObject({}, '<div v-bind="args" />', {
22
+ prop1: 'prop1',
23
+ prop2: 'prop2',
24
+ });
25
+
26
+ expect(parameters).toEqual({
27
+ docs: {
28
+ source: {
29
+ code: '<div prop1="prop1" prop2="prop2" />',
30
+ },
31
+ },
32
+ });
33
+ });
34
+
35
+ it('Should build properties from { docs: {}}', () => {
36
+ const parameters = storyParametersObject(
37
+ { docs: {} },
38
+ '<div v-bind="args" />',
39
+ {
40
+ prop1: 'prop1',
41
+ prop2: 'prop2',
42
+ }
43
+ );
44
+
45
+ expect(parameters).toEqual({
46
+ docs: {
47
+ source: {
48
+ code: '<div prop1="prop1" prop2="prop2" />',
49
+ },
50
+ },
51
+ });
52
+ });
53
+
54
+ it('Should build properties from { docs: { source: {}}}', () => {
55
+ const parameters = storyParametersObject(
56
+ { docs: { source: {} } },
57
+ '<div v-bind="args" />',
58
+ {
59
+ prop1: 'prop1',
60
+ prop2: 'prop2',
61
+ }
62
+ );
63
+
64
+ expect(parameters).toEqual({
65
+ docs: {
66
+ source: {
67
+ code: '<div prop1="prop1" prop2="prop2" />',
68
+ },
69
+ },
70
+ });
71
+ });
72
+
73
+ it('Should build properties from with non-string props', () => {
74
+ const parameters = storyParametersObject(null, '<div v-bind="args" />', {
75
+ prop1: true,
76
+ prop2: 2,
77
+ });
78
+
79
+ expect(parameters).toEqual({
80
+ docs: {
81
+ source: {
82
+ code: '<div prop1 :prop2="2" />',
83
+ },
84
+ },
85
+ });
86
+ });
87
+
88
+ it('Should replace alternate v-bind', () => {
89
+ const parameters = storyParametersObject(
90
+ null,
91
+ '<div v-bind="otherProps" />',
92
+ {
93
+ prop1: true,
94
+ },
95
+ 'v-bind="otherProps"'
96
+ );
97
+
98
+ expect(parameters).toEqual({
99
+ docs: {
100
+ source: {
101
+ code: '<div prop1 />',
102
+ },
103
+ },
104
+ });
105
+ });
106
+
107
+ it('Should deal with default values', () => {
108
+ const parameters = storyParametersObject(null, '<div v-bind="args" />', {
109
+ prop1: false,
110
+ prop2: '',
111
+ prop3: 0,
112
+ });
113
+
114
+ expect(parameters).toEqual({
115
+ docs: {
116
+ source: {
117
+ code: '<div prop2="" :prop3="0" />',
118
+ },
119
+ },
120
+ });
121
+ });
122
+
123
+ it('Is OK with zero pros', () => {
124
+ const parameters = storyParametersObject(
125
+ null,
126
+ '<div v-bind="args" />',
127
+ null
128
+ );
129
+
130
+ expect(parameters).toEqual({
131
+ docs: {
132
+ source: {
133
+ code: '<div />',
134
+ },
135
+ },
136
+ });
137
+ });
138
+
139
+ it('Is does not add slotArgs', () => {
140
+ const parameters = storyParametersObject(null, '<div v-bind="args" />', {
141
+ 'slotArgs.abc': 'abc',
142
+ });
143
+
144
+ expect(parameters).toEqual({
145
+ docs: {
146
+ source: {
147
+ code: '<div />',
148
+ },
149
+ },
150
+ });
151
+ });
152
+ });
153
+
154
+ describe('global/storybook-utils/storySourceCode', () => {
155
+ it('Works with a default parameter', () => {
156
+ const result = storySourceCode('<div v-bind="args" />', {
157
+ prop1: 'prop1',
158
+ });
159
+
160
+ expect(result).toEqual('<div prop1="prop1" />');
161
+ });
162
+ });
@@ -0,0 +1,72 @@
1
+ const storybookType = prop => {
2
+ const typeOfProp = typeof prop;
3
+
4
+ const functionToControlType = fProp => {
5
+ if (fProp === Boolean) {
6
+ return 'boolean';
7
+ } else if (fProp === String) {
8
+ return 'text';
9
+ } else if (fProp === Number) {
10
+ return 'number';
11
+ } else {
12
+ return 'text';
13
+ }
14
+ };
15
+
16
+ const baseTypeToControlType = type => {
17
+ if (type === 'string') {
18
+ return 'text';
19
+ } else {
20
+ return type;
21
+ }
22
+ };
23
+
24
+ let control = {};
25
+ let defaultValue;
26
+ if (typeOfProp === 'object') {
27
+ if (prop.type) {
28
+ control.type = functionToControlType(prop.type);
29
+ } else {
30
+ control.type = baseTypeToControlType(typeof prop.default);
31
+ }
32
+ if (prop.default) {
33
+ defaultValue = prop.default;
34
+ } else {
35
+ defaultValue = prop.type();
36
+ }
37
+ } else {
38
+ if (typeOfProp === 'function') {
39
+ control.type = functionToControlType(prop);
40
+ defaultValue = prop();
41
+ } else {
42
+ // base type
43
+ control.type = baseTypeToControlType(typeOfProp);
44
+ defaultValue = prop;
45
+ }
46
+ }
47
+
48
+ return { control, defaultValue };
49
+ };
50
+
51
+ /**
52
+ * When declaring props in another file storybook/docgen does not understand the type.
53
+ * This function returns a storybook control selection for each prop
54
+ */
55
+ export const storybookControlsFromProps = props => {
56
+ const controls = {};
57
+
58
+ for (let key of Object.keys(props)) {
59
+ const prop = props[key];
60
+
61
+ try {
62
+ const type = storybookType(prop);
63
+
64
+ controls[key] = type;
65
+ } catch {
66
+ // Type not added here yet.
67
+ controls[key] = { control: { type: 'text' }, defaultValue: '' };
68
+ }
69
+ }
70
+
71
+ return controls;
72
+ };
@@ -0,0 +1,5 @@
1
+ export { storybookControlsFromProps } from './controls-from-props';
2
+ export { storySourceCode } from './story-source-code';
3
+ export { storyParametersObject } from './story-source-code';
4
+ export { splitSlotArgs } from './split-slot-args';
5
+ export { sbCompPrefix } from './sbCompPrefix';
@@ -0,0 +1 @@
1
+ export const sbCompPrefix = 'Component';
@@ -0,0 +1,14 @@
1
+ export const splitSlotArgs = (argsIn = {}, slotArgKeys) => {
2
+ const keys = Object.keys(argsIn);
3
+ const slotArgs = {};
4
+ const args = {};
5
+ keys.forEach(key => {
6
+ if (slotArgKeys.includes(key)) {
7
+ slotArgs[key] = argsIn[key];
8
+ } else {
9
+ args[key] = argsIn[key];
10
+ }
11
+ });
12
+
13
+ return { args, slotArgs };
14
+ };
@@ -0,0 +1,52 @@
1
+ export const storySourceCode = (
2
+ templateSource,
3
+ args,
4
+ replacing = 'v-bind="args"'
5
+ ) => {
6
+ const propToSource = (key, val) => {
7
+ if (key.startsWith('slotArgs.')) return '';
8
+
9
+ const type = typeof val;
10
+ switch (type) {
11
+ case 'boolean':
12
+ return val ? key : '';
13
+ case 'string':
14
+ return `${key}="${val}"`;
15
+ default:
16
+ return `:${key}="${val}"`;
17
+ }
18
+ };
19
+
20
+ const argsKeys = args ? Object.keys(args) : [];
21
+ return templateSource.replace(
22
+ replacing,
23
+ argsKeys
24
+ .map(key => propToSource(key, args[key]))
25
+ .filter(item => item !== '')
26
+ .join(' ')
27
+ );
28
+ };
29
+
30
+ export const storyParametersObject = (
31
+ parameters,
32
+ templateSource,
33
+ args,
34
+ replacing = 'v-bind="args"'
35
+ ) => {
36
+ const code = storySourceCode(templateSource, args, replacing);
37
+
38
+ if (!parameters) {
39
+ parameters = { docs: { source: { code } } };
40
+ } else {
41
+ if (!parameters.docs) {
42
+ parameters.docs = { source: { code } };
43
+ } else {
44
+ if (!parameters.docs.source) {
45
+ parameters.docs.source = { code };
46
+ } else {
47
+ parameters.docs.source.code = code;
48
+ }
49
+ }
50
+ }
51
+ return parameters;
52
+ };
package/src/index.js CHANGED
@@ -1,5 +1,13 @@
1
- const ctx = require.context('./components/', true, /^(?!.*(?:\/_|-story\.vue|-test\.vue)).*\.vue$/);
2
- const components = ctx.keys().map(ctx);
1
+ const ctx = require.context(
2
+ './components/',
3
+ true,
4
+ /^(?!.*(?:\/_|\.stories\.vue|\.test\.vue|\.spec\.vue)).*\.vue$/
5
+ );
6
+ const components = ctx.keys().map(k => {
7
+ const fn = k.split('/').slice(-1)[0];
8
+ const compName = fn.slice(0, -4);
9
+ return { name: compName, component: ctx(k) };
10
+ });
3
11
 
4
12
  // Export the components as a plugin
5
13
  export default {
@@ -8,7 +16,7 @@ export default {
8
16
  install(Vue, options) {
9
17
  if (typeof options === 'undefined') {
10
18
  for (let c of components) {
11
- Vue.component(c.default.name, c.default);
19
+ Vue.component(c.name, c.component.default);
12
20
  }
13
21
  } else {
14
22
  if (!(options instanceof Array)) {
@@ -17,88 +25,10 @@ export default {
17
25
 
18
26
  for (let c of components) {
19
27
  // register only components specified in the options
20
- if (options.includes(c.default.name)) {
21
- Vue.component(c.default.name, c.default);
28
+ if (options.includes(c.name)) {
29
+ Vue.component(c.name, c.component.default);
22
30
  }
23
31
  }
24
32
  }
25
33
  },
26
34
  };
27
-
28
- // import/export individual components
29
- export { CvAccordion, CvAccordionItem, CvAccordionSkeleton } from './components/cv-accordion';
30
- export { CvAspectRatio } from './components/cv-aspect-ratio';
31
- export { CvBreadcrumb, CvBreadcrumbItem, CvBreadcrumbSkeleton } from './components/cv-breadcrumb';
32
- export { CvButton, CvIconButton, CvButtonSkeleton, CvButtonSet } from './components/cv-button';
33
- export { CvCheckbox, CvCheckboxSkeleton } from './components/cv-checkbox';
34
- export { CvCodeSnippet, CvCodeSnippetSkeleton } from './components/cv-code-snippet';
35
- export { CvComboBox } from './components/cv-combo-box';
36
- export { CvContentSwitcher, CvContentSwitcherButton, CvContentSwitcherContent } from './components/cv-content-switcher';
37
- export {
38
- CvDataTable,
39
- CvDataTableRow,
40
- CvDataTableCell,
41
- CvDataTableAction,
42
- CvDataTableSkeleton,
43
- CvDataTableHeading,
44
- } from './components/cv-data-table';
45
- export { CvDatePicker } from './components/cv-date-picker';
46
- export { CvDropdown, CvDropdownItem, CvDropdownSkeleton } from './components/cv-dropdown';
47
- export { CvFileUploader, CvFileUploaderSkeleton } from './components/cv-file-uploader';
48
- export { CvForm, CvFormItem, CvFormGroup } from './components/cv-form';
49
- export { CvGrid, CvRow, CvColumn } from './components/cv-grid';
50
- export { CvInlineLoading } from './components/cv-inline-loading';
51
- export { CvInlineNotification } from './components/cv-inline-notification';
52
- export { CvLink } from './components/cv-link';
53
- export { CvList, CvListItem } from './components/cv-list';
54
- export { CvLoading } from './components/cv-loading';
55
- export { CvModal } from './components/cv-modal';
56
- export { CvMultiSelect } from './components/cv-multi-select';
57
- export { CvNumberInput, CvNumberInputSkeleton } from './components/cv-number-input';
58
- export { CvOverflowMenu, CvOverflowMenuItem } from './components/cv-overflow-menu';
59
- export { CvPagination } from './components/cv-pagination';
60
- export { CvProgress, CvProgressStep } from './components/cv-progress';
61
- export { CvRadioGroup, CvRadioButton } from './components/cv-radio-button';
62
- export { CvSearch } from './components/cv-search';
63
- export { CvSelect, CvSelectOption, CvSelectOptgroup } from './components/cv-select';
64
- export { CvSkeletonText } from './components/cv-skeleton-text';
65
- export { CvSliderSkeleton, CvSlider } from './components/cv-slider';
66
- export {
67
- CvStructuredListData,
68
- CvStructuredListHeading,
69
- CvStructuredListItem,
70
- CvStructuredList,
71
- } from './components/cv-structured-list';
72
- export { CvTabs, CvTab, CvTabsSkeleton } from './components/cv-tabs';
73
- export { CvTag, CvTagSkeleton } from './components/cv-tag';
74
- export { CvTextArea } from './components/cv-text-area';
75
- export { CvTextInput } from './components/cv-text-input';
76
- export { CvTile } from './components/cv-tile';
77
- export { CvTimePicker } from './components/cv-time-picker';
78
- export { CvToastNotification } from './components/cv-toast-notification';
79
- export { CvToggle, CvToggleSkeleton } from './components/cv-toggle';
80
- export { CvToolbar, CvToolbarTitle, CvToolbarSearch, CvToolbarOption, CvToolbarDivider } from './components/cv-toolbar';
81
- export { CvTooltip, CvInteractiveTooltip, CvDefinitionTooltip } from './components/cv-tooltip';
82
- export {
83
- CvContent,
84
- CvHeaderGlobalAction,
85
- CvHeaderMenuButton,
86
- CvHeaderMenuItem,
87
- CvHeaderMenu,
88
- CvHeaderName,
89
- CvHeaderNav,
90
- CvHeaderSideNavItems,
91
- CvHeaderPanel,
92
- CvHeader,
93
- CvSideNavIcon,
94
- CvSideNavItems,
95
- CvSideNavLink,
96
- CvSideNavMenuItem,
97
- CvSideNavMenu,
98
- CvSideNav,
99
- CvSideNavDivider,
100
- CvSkipToContent,
101
- CvSwitcherItemLink,
102
- CvSwitcherItem,
103
- CvSwitcher,
104
- } from './components/cv-ui-shell';
@@ -0,0 +1,24 @@
1
+ import { reactivePick } from '@vueuse/core';
2
+ import { computed } from 'vue';
3
+
4
+ /**
5
+ * Picks subcomponent props from super component props based on a subcomponent map
6
+ * @param props Reactive super component props
7
+ * @param subComponents Map of kind name to component
8
+ * @param kindKey key under which to find the current kind name in props
9
+ */
10
+ export const useSubComponentProps = (props, subComponents, kindKey = 'kind') =>
11
+ computed(() =>
12
+ reactivePick(props, ...Object.keys(subComponents[props[kindKey]].props))
13
+ );
14
+
15
+ /**
16
+ * Reactive subcomponent and sub props
17
+ * @param props Reactive super component props
18
+ * @param subComponents Map of kind name to component
19
+ * @param kindKey key under which to find the current kind name in props
20
+ */
21
+ export const useSubComponent = (props, subComponents, kindKey = 'kind') => ({
22
+ component: computed(() => subComponents[props[kindKey]]),
23
+ subProps: useSubComponentProps(props, subComponents, kindKey),
24
+ });
@@ -0,0 +1,94 @@
1
+ /*
2
+ * Provides common checkbox behaviour
3
+ */
4
+ import { unref, ref, computed, watch, onMounted } from 'vue';
5
+
6
+ export const props = {
7
+ modelValue: { type: [Array, Boolean], default: undefined },
8
+ mixed: { type: Boolean, default: null },
9
+ checked: { type: Boolean, default: undefined },
10
+ name: String,
11
+ value: { type: String, required: true },
12
+ };
13
+
14
+ export function useCheck(props, emit) {
15
+ const isArrayModel = computed(() => {
16
+ return Array.isArray(props.modelValue.value);
17
+ });
18
+
19
+ // Maintain the state of the checkbox
20
+ let dataChecked = ref(undefined);
21
+ let isChecked = computed({
22
+ get() {
23
+ if (props.modelValue.value !== undefined) {
24
+ // model value always comes first
25
+ if (isArrayModel.value) {
26
+ if (props.modelValue.value.includes(unref(props.value))) {
27
+ return true;
28
+ } else {
29
+ return false;
30
+ }
31
+ } else {
32
+ return unref(props.modelValue);
33
+ }
34
+ } else {
35
+ if (dataChecked.value !== undefined) {
36
+ return dataChecked.value;
37
+ } else if (dataMixed.value) {
38
+ return 'mixed';
39
+ }
40
+ return false;
41
+ }
42
+ },
43
+ set(checked) {
44
+ if (isArrayModel.value) {
45
+ let modelSet = new Set(props.modelValue.value);
46
+
47
+ if (!checked) {
48
+ modelSet.delete(props.value.value);
49
+ } else {
50
+ modelSet.add(props.value.value);
51
+ }
52
+ dataChecked.value = Array.from(modelSet);
53
+ } else {
54
+ dataChecked.value = checked ? true : undefined;
55
+ if (dataChecked.value !== undefined) {
56
+ dataMixed.value = false;
57
+ }
58
+ }
59
+ },
60
+ });
61
+ onMounted(() => {
62
+ if (props.modelValue.value === undefined) {
63
+ isChecked.value = props.checked.value;
64
+ }
65
+ });
66
+
67
+ // Maintain the state of the aria-checkbox
68
+ let dataMixed = ref(props.mixed.value);
69
+ watch(props.mixed, val => {
70
+ dataMixed.value = val;
71
+ if (dataMixed.value && props.checked.value !== true) {
72
+ isChecked.value = false; // reset check state so mixed takes
73
+ }
74
+ });
75
+
76
+ watch(props.checked, val => {
77
+ if (props.modelValue.value === undefined) isChecked.value = val;
78
+ if (!val && dataMixed.value) {
79
+ dataMixed.value = true;
80
+ }
81
+ });
82
+
83
+ // Watch for change
84
+ function onChangeInner(checkedVal) {
85
+ isChecked.value = checkedVal;
86
+ emit('update:modelValue', dataChecked.value || false); // or false in case dataChecked is undefined
87
+ emit('change', checkedVal);
88
+ }
89
+ function onChange(ev) {
90
+ onChangeInner(ev.target.checked);
91
+ }
92
+ // expose managed state as return value
93
+ return { onChange, isChecked };
94
+ }