@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
@@ -0,0 +1,648 @@
1
+ <template>
2
+ <div :style="tableStyle" class="cv-data-table" :id="uid">
3
+ <div
4
+ :class="[
5
+ `${carbonPrefix}--data-table-container`,
6
+ {
7
+ [`${carbonPrefix}--data-table-container--static`]: staticWidth,
8
+ [`${carbonPrefix}--data-table--max-width`]: !staticWidth,
9
+ },
10
+ ]"
11
+ >
12
+ <div v-if="hasTableHeader" :class="`${carbonPrefix}--data-table-header`">
13
+ <h4 :class="`${carbonPrefix}--data-table-header__title`" v-if="title">
14
+ {{ title }}
15
+ </h4>
16
+ <p
17
+ v-if="isHelper"
18
+ :class="`${carbonPrefix}--data-table-header__description`"
19
+ >
20
+ <slot name="helper-text">{{ helperText }}</slot>
21
+ </p>
22
+ </div>
23
+ <section v-if="hasToolbar" :class="`${carbonPrefix}--table-toolbar`">
24
+ <div
25
+ :aria-hidden="!batchActive"
26
+ v-show="hasBatchActions"
27
+ :class="[
28
+ `${carbonPrefix}--batch-actions`,
29
+ { [`${carbonPrefix}--batch-actions--active`]: batchActive },
30
+ ]"
31
+ :aria-label="actionBarAriaLabel"
32
+ >
33
+ <div :class="`${carbonPrefix}--action-list`">
34
+ <slot name="batch-actions" />
35
+ <cv-button
36
+ :class="`${carbonPrefix}--batch-summary__cancel`"
37
+ size="small"
38
+ @click="deselect"
39
+ >{{ batchCancelLabel }}</cv-button
40
+ >
41
+ </div>
42
+ <div :class="`${carbonPrefix}--batch-summary`">
43
+ <p :class="`${carbonPrefix}--batch-summary__para`">
44
+ <span data-items-selected>
45
+ <slot
46
+ name="items-selected"
47
+ v-bind:scope="{ count: dataRowsSelected.length }"
48
+ >{{ dataRowsSelected.length }} items selected</slot
49
+ >
50
+ </span>
51
+ </p>
52
+ </div>
53
+ </div>
54
+ <div :class="`${carbonPrefix}--toolbar-content`">
55
+ <div
56
+ v-if="onSearch"
57
+ :aria-labelledby="`${uid}-search`"
58
+ :class="[
59
+ `${carbonPrefix}--search `,
60
+ {
61
+ [`${carbonPrefix}--toolbar-search-container-active`]:
62
+ searchActive || searchValue.length > 0,
63
+ [`${carbonPrefix}--toolbar-search-container-persistent`]:
64
+ !expandingSearch,
65
+ [`${carbonPrefix}--toolbar-search-container-expandable`]:
66
+ expandingSearch,
67
+ },
68
+ ]"
69
+ role="search"
70
+ ref="searchContainer"
71
+ >
72
+ <div :class="`${carbonPrefix}--search-magnifier`" ref="magnifier">
73
+ <Search16 :class="`${carbonPrefix}--search-magnifier-icon`" />
74
+ </div>
75
+ <label
76
+ :id="`${uid}-search`"
77
+ :for="`searchbox-${uid}`"
78
+ :class="`${carbonPrefix}--label`"
79
+ >{{ searchLabel }}</label
80
+ >
81
+ <input
82
+ :class="`${carbonPrefix}--search-input`"
83
+ type="text"
84
+ :id="`searchbox-${uid}`"
85
+ role="searchbox"
86
+ :placeholder="searchPlaceholder"
87
+ :aria-labelledby="`searchbox-${uid}`"
88
+ ref="search"
89
+ v-model="searchValue"
90
+ @input="onInternalSearch"
91
+ @click="checkSearchExpand(true)"
92
+ @keydown.esc.prevent="checkSearchExpand(false)"
93
+ @focus="checkSearchExpand(true)"
94
+ @blur="checkSearchExpand(false)"
95
+ />
96
+ <button
97
+ :class="[
98
+ `${carbonPrefix}--search-close`,
99
+ {
100
+ [`${carbonPrefix}--search-close--hidden`]:
101
+ !clearSearchVisible,
102
+ },
103
+ ]"
104
+ :title="searchClearLabel"
105
+ :aria-label="searchClearLabel"
106
+ @click="onClearClick"
107
+ type="button"
108
+ >
109
+ <Close16 />
110
+ </button>
111
+ </div>
112
+ <slot name="actions" />
113
+ </div>
114
+ </section>
115
+
116
+ <div :class="`${carbonPrefix}--data-table-content`">
117
+ <component :is="stickyHeader ? 'section' : 'div'">
118
+ <table
119
+ :class="[
120
+ `${carbonPrefix}--data-table`,
121
+ `${carbonPrefix}--data-table--${rowSize || 'lg'}`,
122
+ {
123
+ [`${carbonPrefix}--data-table--zebra `]: zebra,
124
+ [`${carbonPrefix}--data-table--sticky-header `]: stickyHeader,
125
+ [`${carbonPrefix}--data-table--no-border `]: borderless,
126
+ [`${carbonPrefix}--skeleton `]: skeleton,
127
+ [`${carbonPrefix}--data-table--sort `]: isSortable,
128
+ [`${carbonPrefix}--data-table--static `]: staticWidth,
129
+ },
130
+ ]"
131
+ >
132
+ <thead>
133
+ <tr>
134
+ <th
135
+ v-if="hasExpandables"
136
+ :class="`${carbonPrefix}--table-expand`"
137
+ :data-previous-value="
138
+ dataExpandAll ? 'collapsed' : 'expanded'
139
+ "
140
+ >
141
+ <button
142
+ v-if="hasExpandAll"
143
+ :class="`${carbonPrefix}--table-expand__button`"
144
+ @click="toggleExpandAll"
145
+ type="button"
146
+ :aria-label="
147
+ dataExpandAll ? collapseAllAriaLabel : expandAllAriaLabel
148
+ "
149
+ >
150
+ <ChevronRight16
151
+ :class="`${carbonPrefix}--table-expand__svg`"
152
+ />
153
+ </button>
154
+ </th>
155
+
156
+ <th
157
+ v-if="hasBatchActions"
158
+ :class="`${carbonPrefix}--table-column-checkbox`"
159
+ >
160
+ <cv-checkbox
161
+ :form-item="false"
162
+ value="headingCheck"
163
+ v-model="headingChecked"
164
+ @change="onHeadingCheckChange"
165
+ :label="selectAllAriaLabel"
166
+ hideLabel
167
+ />
168
+ </th>
169
+ <slot name="headings">
170
+ <cv-data-table-heading
171
+ v-for="(column, index) in columns"
172
+ :key="`${index}:${column}`"
173
+ :heading="columnHeading(column)"
174
+ :sortable="isColSortable(column)"
175
+ :order="column.order"
176
+ :heading-style="headingStyle(column)"
177
+ :skeleton="skeleton"
178
+ />
179
+ </slot>
180
+ <th v-if="hasOverflowMenu"></th>
181
+ </tr>
182
+ </thead>
183
+
184
+ <component :is="hasExpandables ? Empty : 'tbody'">
185
+ <slot name="data">
186
+ <cv-data-table-row
187
+ v-for="(row, rowIndex) in data"
188
+ :key="`row:${rowIndex}`"
189
+ :value="`${rowIndex}`"
190
+ ref="dataRows"
191
+ :overflow-menu="overflowMenu"
192
+ >
193
+ <cv-data-table-cell
194
+ v-for="(cell, colIndex) in row"
195
+ :key="`cell:${colIndex}:${rowIndex}`"
196
+ :style="dataStyle(colIndex)"
197
+ >
198
+ <component :is="skeleton ? 'span' : Empty">{{
199
+ cell
200
+ }}</component>
201
+ </cv-data-table-cell>
202
+ </cv-data-table-row>
203
+ </slot>
204
+ </component>
205
+ </table>
206
+ </component>
207
+ </div>
208
+ </div>
209
+ <cv-pagination
210
+ v-if="pagination"
211
+ v-bind="internalPagination"
212
+ :number-of-items="internalNumberOfItems"
213
+ @change="$emit('pagination', $event)"
214
+ >
215
+ <template v-slot:range-text="{ scope }">
216
+ <slot name="range-text" v-bind:scope="scope" />
217
+ </template>
218
+
219
+ <template v-slot:of-n-pages="{ scope }">
220
+ <slot name="of-n-pages" v-bind:scope="scope"></slot>
221
+ </template>
222
+ </cv-pagination>
223
+ </div>
224
+ </template>
225
+
226
+ <script setup>
227
+ import { carbonPrefix } from '../../global/settings';
228
+ import CvDataTableHeading from './CvDataTableHeading.vue';
229
+ import CvDataTableRow from './CvDataTableRow.vue';
230
+ import CvDataTableCell from './CvDataTableCell.vue';
231
+ import CvButton from '../CvButton';
232
+ import CvCheckbox from '../CvCheckbox';
233
+ import CvPagination from '../CvPagination';
234
+ import Search16 from '@carbon/icons-vue/es/search/16';
235
+ import Close16 from '@carbon/icons-vue/es/close/16';
236
+ import ChevronRight16 from '@carbon/icons-vue/es/chevron--right/16';
237
+ import { getBus, removeBus } from '../../global/component-utils/event-bus';
238
+ import {
239
+ computed,
240
+ nextTick,
241
+ onBeforeMount,
242
+ onMounted,
243
+ onUnmounted,
244
+ onUpdated,
245
+ ref,
246
+ unref,
247
+ useSlots,
248
+ watch,
249
+ } from 'vue';
250
+ import { props as propsCvId, useCvId } from '../../use/cvId';
251
+ import store from './cvDataTableStore';
252
+ import Empty from '../CvEmpty/_CvEmpty.vue';
253
+
254
+ const props = defineProps({
255
+ actionBarAriaLabel: { type: String, default: 'Table Action Bar' },
256
+ collapseAllAriaLabel: { type: String, default: 'Collapse all rows' },
257
+ expandAllAriaLabel: { type: String, default: 'Expand all rows' },
258
+ selectAllAriaLabel: { type: String, default: 'Select all rows' },
259
+ /**
260
+ * Table will size use auto sizing
261
+ */
262
+ autoWidth: { type: Boolean, default: false },
263
+ /**
264
+ * Label for the button to cancel batch actions
265
+ */
266
+ batchCancelLabel: { type: String, default: 'Cancel' },
267
+ /**
268
+ * Table will have no border
269
+ */
270
+ borderless: { type: Boolean, default: false },
271
+ /**
272
+ * An array of overflow menu labels. On click CvDataTable will raise an 'overflow-menu-click' event passing an object containing menuIndex, menuLabel and rowValue
273
+ * - As part of the array pass an object containing props for the overflowMenu. E.g. { label: 'Overflow menu', tipAlignment: 'end', tipPosition: 'top' },
274
+ */
275
+ overflowMenu: { type: [Boolean, Array], default: () => [] },
276
+ /**
277
+ * can be set to true or an object containing camel case props for a CvPagination component
278
+ */
279
+ pagination: {
280
+ type: [Boolean, Object],
281
+ default: false,
282
+ },
283
+ /**
284
+ * 'compact', 'small', or 'tall'
285
+ */
286
+ rowSize: {
287
+ type: String,
288
+ default: 'lg',
289
+ validator: val => {
290
+ if (['compact', 'short', 'standard', 'tall', ''].includes(val))
291
+ console.warn(
292
+ `rowSize ${val} is deprecated. Use "xs", "sm", "md", "lg", or "lg" instead`
293
+ );
294
+ return [
295
+ 'compact',
296
+ 'short',
297
+ 'standard',
298
+ 'tall',
299
+ '',
300
+ 'xs',
301
+ 'sm',
302
+ 'md',
303
+ 'lg',
304
+ 'xl',
305
+ ].includes(val);
306
+ },
307
+ },
308
+ searchLabel: { type: String, default: 'Search' },
309
+ searchPlaceholder: { type: String, default: 'Search' },
310
+ searchClearLabel: { type: String, default: 'Clear search' },
311
+ /**
312
+ * Set text in search bar on table generation
313
+ */
314
+ initialSearchValue: { type: String, default: '' },
315
+ /**
316
+ * can be sorted
317
+ */
318
+ sortable: { type: Boolean, default: false },
319
+ title: String,
320
+ /**
321
+ * An array containing a list of columns
322
+ * - Columns can be string labels or objects
323
+ * - If objects
324
+ * - MUST contain a label if headings are not slotted
325
+ * - Optionally a headingStyle object to be applied to the column headings if not slotted.
326
+ * - Optionally a dataStyle object to be applied to the data in the column.
327
+ * - Optionally a sortable property - if any column sets this to true then only columns with sortable set to true are sortable. NOTE: table sortable property not required.
328
+ */
329
+ columns: Array,
330
+ /**
331
+ * Two-dimensional array of strings.
332
+ */
333
+ data: Array,
334
+ /**
335
+ * the table striped
336
+ */
337
+ zebra: { type: Boolean, default: false },
338
+ /**
339
+ * Specify whether the header should be sticky. Still experimental: may not work with every combination of table props.
340
+ */
341
+ stickyHeader: { type: Boolean, default: false },
342
+ /**
343
+ * An array containing the selected row values. Supports v-model via the row-select-changes event.
344
+ */
345
+ rowsSelected: { type: Array, default: () => [] },
346
+ helperText: { type: String, default: undefined },
347
+ expandingSearch: { type: Boolean, default: true },
348
+ skeleton: { type: Boolean, default: false },
349
+ hasExpandAll: { type: Boolean, default: false },
350
+ /**
351
+ * Use a width of 'auto' instead of 100%
352
+ */
353
+ staticWidth: { type: Boolean, default: false },
354
+ onSearch: { type: Function },
355
+ ...propsCvId,
356
+ });
357
+ const uid = useCvId(props, true);
358
+
359
+ let bus = undefined;
360
+ onBeforeMount(() => {
361
+ bus = getBus(uid.value);
362
+ bus.on('cv:check-change', onRowCheckChange);
363
+ bus.on('cv:click', onMenuItemClick);
364
+ bus.on('cv:sort', onSort);
365
+ bus.on('cv:expanded-change', onCvExpandedChange);
366
+ store.addTable(uid);
367
+ });
368
+ onUnmounted(() => {
369
+ removeBus(uid.value);
370
+ store.removeTable(uid.value);
371
+ });
372
+
373
+ watch(() => props.rowsSelected, updateRowsSelected);
374
+
375
+ const searchContainer = ref(null);
376
+ const magnifier = ref(null);
377
+ const search = ref(null);
378
+ onMounted(() => {
379
+ if (searchContainer.value) {
380
+ magnifier.value?.addEventListener('blur', checkSearchFocus);
381
+ search.value?.addEventListener('blur', checkSearchFocus);
382
+ }
383
+ if (props.initialSearchValue) clearSearchVisible.value = true;
384
+ updateRowsSelected();
385
+ store.setSomeExpandingRows(uid);
386
+ });
387
+
388
+ onUnmounted(() => {
389
+ if (searchContainer.value) {
390
+ magnifier.value?.removeEventListener('blur', checkSearchFocus);
391
+ search.value?.removeEventListener('blur', checkSearchFocus);
392
+ }
393
+ });
394
+ const slots = useSlots();
395
+ onMounted(checkSlots);
396
+ onUpdated(checkSlots);
397
+
398
+ const hasActions = ref(false);
399
+ const hasToolbar = ref(false);
400
+ const hasBatchActions = computed(() => {
401
+ return store.hasBatchActions(uid);
402
+ });
403
+ function checkSlots() {
404
+ // NOTE: slots is not reactive so needs to be managed on updated
405
+ store.setBatchActions(uid, !!slots['batch-actions']);
406
+ hasActions.value = !!slots.actions;
407
+ hasToolbar.value = !!(
408
+ slots.actions ||
409
+ props.onSearch ||
410
+ slots['batch-actions']
411
+ );
412
+ isHelper.value = !!(
413
+ slots['helper-text'] ||
414
+ (props.helperText && props.helperText.length)
415
+ );
416
+ }
417
+
418
+ function columnHeading(c) {
419
+ const col = unref(c);
420
+ if (typeof col === 'object') {
421
+ return col.label || '';
422
+ } else {
423
+ return col;
424
+ }
425
+ }
426
+
427
+ const isSortable = computed(() => {
428
+ // is any column sortable
429
+ return props.sortable || store.someSortableHeadings(uid.value);
430
+ });
431
+ function isColSortable(c) {
432
+ const col = unref(c);
433
+ // is specific column or all sortable
434
+ return (col && col.sortable) || props.sortable;
435
+ }
436
+
437
+ const isHelper = ref(false);
438
+ const hasTableHeader = computed(() => {
439
+ return props.title || isHelper.value;
440
+ });
441
+
442
+ const hasExpandables = computed(() => {
443
+ return store.someExpandingRows(uid);
444
+ });
445
+
446
+ const hasOverflowMenu = computed(() => {
447
+ return (
448
+ props.overflowMenu === true ||
449
+ (props.overflowMenu && props.overflowMenu.length > 0)
450
+ );
451
+ });
452
+
453
+ const tableStyle = computed(() => {
454
+ return props.autoWidth
455
+ ? { width: 'initial', display: 'inline-block' }
456
+ : { width: '100%' };
457
+ });
458
+
459
+ const internalPagination = computed(() => {
460
+ if (typeof props.pagination === 'object') {
461
+ return props.pagination;
462
+ } else {
463
+ if (props.pagination === true) {
464
+ return {};
465
+ }
466
+ }
467
+ return false;
468
+ });
469
+
470
+ const registeredRows = ref([]);
471
+ const internalNumberOfItems = computed(() => {
472
+ const internal = internalPagination.value;
473
+ if (internal.numberOfItems !== undefined) {
474
+ return internal.numberOfItems;
475
+ } else {
476
+ return registeredRows.value.length;
477
+ }
478
+ });
479
+
480
+ function headingStyle(c) {
481
+ const col = unref(c);
482
+ return typeof col === 'object' ? col.headingStyle : {};
483
+ }
484
+
485
+ const dataStyle = computed(() => {
486
+ return index =>
487
+ (props.columns && props.columns[index] && props.columns[index].dataStyle) ||
488
+ {};
489
+ });
490
+
491
+ const searchActive = ref(false);
492
+ function checkSearchFocus(ev) {
493
+ if (!searchContainer.value.contains(ev.relatedTarget)) {
494
+ searchActive.value = false;
495
+ }
496
+ }
497
+ function checkSearchExpand(force) {
498
+ if (typeof force === 'boolean') {
499
+ searchActive.value = force;
500
+ } else {
501
+ searchActive.value = !searchActive.value;
502
+ }
503
+ if (searchActive.value) {
504
+ nextTick(() => {
505
+ search.value?.focus();
506
+ });
507
+ } else {
508
+ nextTick(() => {
509
+ magnifier.value?.focus();
510
+ });
511
+ }
512
+ }
513
+
514
+ const dataRowsSelected = ref(props.rowsSelected);
515
+ const batchActive = ref(false);
516
+ const headingChecked = ref(false);
517
+
518
+ watch(
519
+ () => store.state[uid.value],
520
+ () => {
521
+ const rows = store.rows(uid);
522
+ headingChecked.value = dataRowsSelected.value.length === rows.length;
523
+ },
524
+ { deep: true }
525
+ );
526
+ function updateRowsSelected() {
527
+ dataRowsSelected.value = [];
528
+ const rows = store.rows(uid);
529
+ for (const i in rows) {
530
+ let child = rows[i];
531
+ const checked = props.rowsSelected.includes(child.value);
532
+ store.updateRow(uid, { id: child.id, isChecked: checked });
533
+
534
+ if (checked) {
535
+ dataRowsSelected.value.push(child.value);
536
+ }
537
+ }
538
+ headingChecked.value = dataRowsSelected.value.length === rows.length;
539
+ batchActive.value = dataRowsSelected.value.length > 0;
540
+ }
541
+
542
+ const emit = defineEmits([
543
+ // 'search', // Do not define the search emit here. We need to know if it is specified on the component but if we include it here it is not available in attrs.
544
+ 'row-select-change',
545
+ 'row-select-changes',
546
+ 'update:rowsSelected',
547
+ 'overflow-menu-click',
548
+ 'sort',
549
+ 'row-expanded',
550
+ 'pagination',
551
+ ]);
552
+ const searchValue = ref(props.initialSearchValue);
553
+ const clearSearchVisible = ref(false);
554
+ function onClearClick() {
555
+ searchValue.value = '';
556
+ clearSearchVisible.value = false;
557
+ emit('search', searchValue.value);
558
+ nextTick(() => {
559
+ search.value?.focus();
560
+ });
561
+ }
562
+ function onHeadingCheckChange() {
563
+ // check /uncheck all children
564
+ batchActive.value = headingChecked.value;
565
+ dataRowsSelected.value = [];
566
+ const rows = store.rows(uid);
567
+ for (const child of rows) {
568
+ if (headingChecked.value) {
569
+ dataRowsSelected.value.push(child.value);
570
+ }
571
+
572
+ if (child.isChecked !== headingChecked.value) {
573
+ store.updateRow(uid, { id: child.id, isChecked: headingChecked.value });
574
+
575
+ emit('row-select-change', {
576
+ value: child.value,
577
+ selected: headingChecked.value,
578
+ });
579
+ }
580
+ }
581
+ emit('row-select-changes', dataRowsSelected.value);
582
+ emit('update:rowsSelected', dataRowsSelected.value);
583
+ }
584
+ function deselect() {
585
+ headingChecked.value = false;
586
+ onHeadingCheckChange();
587
+ }
588
+ function onRowCheckChange(payload) {
589
+ const { value, checked } = payload;
590
+ let modelSet = new Set(dataRowsSelected.value);
591
+
592
+ if (!checked) {
593
+ modelSet.delete(value);
594
+ } else {
595
+ modelSet.add(value);
596
+ }
597
+ dataRowsSelected.value = Array.from(modelSet);
598
+ const rows = store.rows(uid);
599
+ headingChecked.value = dataRowsSelected.value.length === rows.length;
600
+ batchActive.value = dataRowsSelected.value.length > 0;
601
+
602
+ emit('row-select-change', { value, selected: checked });
603
+ emit('row-select-changes', dataRowsSelected.value);
604
+ emit('update:rowsSelected', dataRowsSelected.value);
605
+ }
606
+ function onMenuItemClick(val) {
607
+ emit('overflow-menu-click', val);
608
+ }
609
+ function onInternalSearch() {
610
+ clearSearchVisible.value = searchValue.value.length > 0;
611
+ emit('search', searchValue.value);
612
+ }
613
+ function onSort(payload) {
614
+ const { heading, val } = payload;
615
+ const headings = store.headings(uid);
616
+ let index;
617
+ for (let colIndex in headings) {
618
+ const column = headings[colIndex];
619
+ if (column.id === heading.id) {
620
+ store.updateHeading(uid, { ...column, order: val });
621
+ index = colIndex;
622
+ } else {
623
+ store.updateHeading(uid, { ...column, order: 'none' });
624
+ }
625
+ }
626
+ emit('sort', { index, order: val, name: heading.name });
627
+ }
628
+
629
+ // are all rows expanded
630
+ const dataExpandAll = computed(() => {
631
+ return store.allExpandedRows(uid);
632
+ });
633
+ function toggleExpandAll() {
634
+ const toggle = !dataExpandAll.value;
635
+ const rows = store.rows(uid);
636
+ for (const row of rows) {
637
+ store.updateRow(uid, { id: row.id, isExpanded: toggle });
638
+ }
639
+ }
640
+
641
+ /**
642
+ * A child row is changed
643
+ * @param {{kind:string, uid:string, value:string, isExpanded:boolean}} row
644
+ */
645
+ function onCvExpandedChange(row) {
646
+ emit('row-expanded', row);
647
+ }
648
+ </script>
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <button
3
+ ref="el"
4
+ :class="`${carbonPrefix}--overflow-menu ${carbonPrefix}--toolbar-action`"
5
+ v-bind="$attrs"
6
+ type="button"
7
+ >
8
+ <slot></slot>
9
+ </button>
10
+ </template>
11
+
12
+ <script setup>
13
+ import { carbonPrefix } from '../../global/settings';
14
+ import { onMounted, ref } from 'vue';
15
+
16
+ const el = ref(null);
17
+ onMounted(() => {
18
+ // ensure SVG has the right class
19
+ const first = el.value?.firstElementChild;
20
+ first?.classList?.add(`${carbonPrefix}--toolbar-action__icon`);
21
+ });
22
+ </script>
@@ -0,0 +1,11 @@
1
+ <template>
2
+ <td :style="cellStyle">
3
+ <slot />
4
+ </td>
5
+ </template>
6
+
7
+ <script setup>
8
+ defineProps({
9
+ cellStyle: { type: Object, default: () => new Object() },
10
+ });
11
+ </script>