@smwb/ui-solid 0.11.2 → 0.12.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 (731) hide show
  1. package/README.md +63 -22
  2. package/dist/assets/styles/less/components/accordion/accordion.entry.css +1 -1
  3. package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
  4. package/dist/assets/styles/less/components/descriptionList/descriptionList.entry.css +1 -0
  5. package/dist/assets/styles/less/components/emptyState/emptyState.entry.css +1 -0
  6. package/dist/assets/styles/less/components/kanban/kanban.entry.css +1 -0
  7. package/dist/assets/styles/less/components/meter/meter.entry.css +1 -0
  8. package/dist/assets/styles/less/components/personChip/personChip.entry.css +1 -0
  9. package/dist/assets/styles/less/components/progressIndicator/progressIndicator.entry.css +1 -1
  10. package/dist/assets/styles/less/components/sectionHeader/sectionHeader.entry.css +1 -0
  11. package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
  12. package/dist/assets/styles/less/components/stat/stat.entry.css +1 -0
  13. package/dist/assets/styles/less/components/stepper/stepper.entry.css +1 -1
  14. package/dist/assets/styles/less/components/table/table.entry.css +1 -1
  15. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  16. package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
  17. package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
  18. package/dist/assets/styles/less/components/timeline/timeline.entry.css +1 -0
  19. package/dist/assets/styles/less/components/tooltip/tooltip.entry.css +1 -1
  20. package/dist/assets/styles/less/components/typography/typography.entry.css +1 -1
  21. package/dist/assets/styles/less/tokens.entry.css +1 -0
  22. package/dist/components/base/icon/icon.js +4 -3
  23. package/dist/components/base/icon/icon.js.map +1 -1
  24. package/dist/components/base/ripple/ripple.js +4 -3
  25. package/dist/components/base/ripple/ripple.js.map +1 -1
  26. package/dist/components/dataDisplay/accordion/accordion.d.ts +18 -1
  27. package/dist/components/dataDisplay/accordion/accordion.js +91 -48
  28. package/dist/components/dataDisplay/accordion/accordion.js.map +1 -1
  29. package/dist/components/dataDisplay/assetGrid/assetGrid.js +14 -13
  30. package/dist/components/dataDisplay/assetGrid/assetGrid.js.map +1 -1
  31. package/dist/components/dataDisplay/avatar/avatar.d.ts +4 -0
  32. package/dist/components/dataDisplay/avatar/avatar.js +56 -40
  33. package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
  34. package/dist/components/dataDisplay/badge/badge.js +24 -20
  35. package/dist/components/dataDisplay/badge/badge.js.map +1 -1
  36. package/dist/components/dataDisplay/card/card.js +24 -23
  37. package/dist/components/dataDisplay/card/card.js.map +1 -1
  38. package/dist/components/dataDisplay/carousel/carousel.js +4 -3
  39. package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
  40. package/dist/components/dataDisplay/chart/chart.d.ts +65 -0
  41. package/dist/components/dataDisplay/chart/chartTheme.d.ts +35 -0
  42. package/dist/components/dataDisplay/chart/index.d.ts +4 -0
  43. package/dist/components/dataDisplay/chat/chat.js +52 -51
  44. package/dist/components/dataDisplay/chat/chat.js.map +1 -1
  45. package/dist/components/dataDisplay/chat/chatHeader.js +29 -29
  46. package/dist/components/dataDisplay/chat/chatHeader.js.map +1 -1
  47. package/dist/components/dataDisplay/chat/chatMessageBubble.js +28 -28
  48. package/dist/components/dataDisplay/chat/chatMessageBubble.js.map +1 -1
  49. package/dist/components/dataDisplay/chat/chatShell.js +54 -51
  50. package/dist/components/dataDisplay/chat/chatShell.js.map +1 -1
  51. package/dist/components/dataDisplay/chip/chip.js +79 -70
  52. package/dist/components/dataDisplay/chip/chip.js.map +1 -1
  53. package/dist/components/dataDisplay/chipGroup/chipGroup.js +9 -8
  54. package/dist/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
  55. package/dist/components/dataDisplay/descriptionList/descriptionList.d.ts +32 -0
  56. package/dist/components/dataDisplay/descriptionList/descriptionList.js +60 -0
  57. package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -0
  58. package/dist/components/dataDisplay/descriptionList/index.d.ts +2 -0
  59. package/dist/components/dataDisplay/expansionPanel/expansionPanel.js +4 -3
  60. package/dist/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
  61. package/dist/components/dataDisplay/imagesList/imagesList.js +8 -7
  62. package/dist/components/dataDisplay/imagesList/imagesList.js.map +1 -1
  63. package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js +29 -24
  64. package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js.map +1 -1
  65. package/dist/components/dataDisplay/kanban/index.d.ts +2 -0
  66. package/dist/components/dataDisplay/kanban/kanban.d.ts +42 -0
  67. package/dist/components/dataDisplay/kanban/kanban.js +133 -0
  68. package/dist/components/dataDisplay/kanban/kanban.js.map +1 -0
  69. package/dist/components/dataDisplay/lazyImage/lazyImage.js +30 -29
  70. package/dist/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
  71. package/dist/components/dataDisplay/list/list.js +17 -16
  72. package/dist/components/dataDisplay/list/list.js.map +1 -1
  73. package/dist/components/dataDisplay/meter/index.d.ts +2 -0
  74. package/dist/components/dataDisplay/meter/meter.d.ts +34 -0
  75. package/dist/components/dataDisplay/meter/meter.js +84 -0
  76. package/dist/components/dataDisplay/meter/meter.js.map +1 -0
  77. package/dist/components/dataDisplay/personChip/index.d.ts +2 -0
  78. package/dist/components/dataDisplay/personChip/personChip.d.ts +32 -0
  79. package/dist/components/dataDisplay/personChip/personChip.js +104 -0
  80. package/dist/components/dataDisplay/personChip/personChip.js.map +1 -0
  81. package/dist/components/dataDisplay/stat/index.d.ts +2 -0
  82. package/dist/components/dataDisplay/stat/stat.d.ts +33 -0
  83. package/dist/components/dataDisplay/stat/stat.js +101 -0
  84. package/dist/components/dataDisplay/stat/stat.js.map +1 -0
  85. package/dist/components/dataDisplay/table/table.d.ts +7 -0
  86. package/dist/components/dataDisplay/table/table.js +22 -21
  87. package/dist/components/dataDisplay/table/table.js.map +1 -1
  88. package/dist/components/dataDisplay/table/tableCell.d.ts +2 -0
  89. package/dist/components/dataDisplay/table/tableCell.js +9 -6
  90. package/dist/components/dataDisplay/table/tableCell.js.map +1 -1
  91. package/dist/components/dataDisplay/table/tableHeadCell.d.ts +11 -1
  92. package/dist/components/dataDisplay/table/tableHeadCell.js +26 -23
  93. package/dist/components/dataDisplay/table/tableHeadCell.js.map +1 -1
  94. package/dist/components/dataDisplay/table/tablePagination/tablePagination.js +4 -3
  95. package/dist/components/dataDisplay/table/tablePagination/tablePagination.js.map +1 -1
  96. package/dist/components/dataDisplay/thumbCard/thumbCard.js +54 -53
  97. package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
  98. package/dist/components/dataDisplay/timeline/index.d.ts +2 -0
  99. package/dist/components/dataDisplay/timeline/timeline.d.ts +38 -0
  100. package/dist/components/dataDisplay/timeline/timeline.js +89 -0
  101. package/dist/components/dataDisplay/timeline/timeline.js.map +1 -0
  102. package/dist/components/dataDisplay/treeView/treeView.js +4 -3
  103. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  104. package/dist/components/dataDisplay/typography/typography.d.ts +4 -0
  105. package/dist/components/dataDisplay/typography/typography.js +36 -22
  106. package/dist/components/dataDisplay/typography/typography.js.map +1 -1
  107. package/dist/components/feedBack/confirmDialog/confirmDialog.js +9 -8
  108. package/dist/components/feedBack/confirmDialog/confirmDialog.js.map +1 -1
  109. package/dist/components/feedBack/emptyState/emptyState.d.ts +25 -0
  110. package/dist/components/feedBack/emptyState/emptyState.js +86 -0
  111. package/dist/components/feedBack/emptyState/emptyState.js.map +1 -0
  112. package/dist/components/feedBack/emptyState/index.d.ts +2 -0
  113. package/dist/components/feedBack/message/message.js +4 -3
  114. package/dist/components/feedBack/message/message.js.map +1 -1
  115. package/dist/components/feedBack/modal/modal.js +4 -3
  116. package/dist/components/feedBack/modal/modal.js.map +1 -1
  117. package/dist/components/feedBack/progressIndicator/progressIndicator.d.ts +13 -0
  118. package/dist/components/feedBack/progressIndicator/progressIndicator.js +79 -46
  119. package/dist/components/feedBack/progressIndicator/progressIndicator.js.map +1 -1
  120. package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.js +18 -14
  121. package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.js.map +1 -1
  122. package/dist/components/feedBack/skeleton/skeleton.js +4 -3
  123. package/dist/components/feedBack/skeleton/skeleton.js.map +1 -1
  124. package/dist/components/feedBack/snackbar/snackbar.js +18 -17
  125. package/dist/components/feedBack/snackbar/snackbar.js.map +1 -1
  126. package/dist/components/feedBack/tooltip/tooltip.js +41 -33
  127. package/dist/components/feedBack/tooltip/tooltip.js.map +1 -1
  128. package/dist/components/inputs/button/button.js +32 -30
  129. package/dist/components/inputs/button/button.js.map +1 -1
  130. package/dist/components/inputs/buttonGroups/buttonGroup.js +9 -8
  131. package/dist/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
  132. package/dist/components/inputs/checkbox/checkbox.js +4 -3
  133. package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
  134. package/dist/components/inputs/datePicker/dataPickerInput.js +23 -23
  135. package/dist/components/inputs/datePicker/dataPickerInput.js.map +1 -1
  136. package/dist/components/inputs/datePicker/datePicker.js +84 -83
  137. package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
  138. package/dist/components/inputs/fileDrop/fileDrop.js +4 -3
  139. package/dist/components/inputs/fileDrop/fileDrop.js.map +1 -1
  140. package/dist/components/inputs/fileInput/fileInput.js +11 -10
  141. package/dist/components/inputs/fileInput/fileInput.js.map +1 -1
  142. package/dist/components/inputs/floatingButton/floatingButton.js +9 -8
  143. package/dist/components/inputs/floatingButton/floatingButton.js.map +1 -1
  144. package/dist/components/inputs/radioButton/radioButton.js +9 -8
  145. package/dist/components/inputs/radioButton/radioButton.js.map +1 -1
  146. package/dist/components/inputs/rating/rating.js +41 -40
  147. package/dist/components/inputs/rating/rating.js.map +1 -1
  148. package/dist/components/inputs/selectField/selectField.d.ts +2 -0
  149. package/dist/components/inputs/selectField/selectField.js +55 -51
  150. package/dist/components/inputs/selectField/selectField.js.map +1 -1
  151. package/dist/components/inputs/slider/slider.js +4 -3
  152. package/dist/components/inputs/slider/slider.js.map +1 -1
  153. package/dist/components/inputs/textField/textField.js +38 -37
  154. package/dist/components/inputs/textField/textField.js.map +1 -1
  155. package/dist/components/inputs/textField/textFieldAdornment.js +9 -9
  156. package/dist/components/inputs/textField/textFieldAdornment.js.map +1 -1
  157. package/dist/components/inputs/textField/textFieldWrapper.js +41 -41
  158. package/dist/components/inputs/textField/textFieldWrapper.js.map +1 -1
  159. package/dist/components/inputs/timePicker/timePicker.js +12 -11
  160. package/dist/components/inputs/timePicker/timePicker.js.map +1 -1
  161. package/dist/components/inputs/toggle/toggle.js +4 -3
  162. package/dist/components/inputs/toggle/toggle.js.map +1 -1
  163. package/dist/components/inputs/valueSlider/valueSlider.js +26 -25
  164. package/dist/components/inputs/valueSlider/valueSlider.js.map +1 -1
  165. package/dist/components/layout/appLayout/appLayout.js +39 -38
  166. package/dist/components/layout/appLayout/appLayout.js.map +1 -1
  167. package/dist/components/layout/divider/divider.js +26 -22
  168. package/dist/components/layout/divider/divider.js.map +1 -1
  169. package/dist/components/layout/floatingWindow/floatingWindow.js +74 -73
  170. package/dist/components/layout/floatingWindow/floatingWindow.js.map +1 -1
  171. package/dist/components/layout/grid/grid.js +10 -9
  172. package/dist/components/layout/grid/grid.js.map +1 -1
  173. package/dist/components/layout/page/page.js +4 -3
  174. package/dist/components/layout/page/page.js.map +1 -1
  175. package/dist/components/layout/pageHeader/pageHeader.js +36 -35
  176. package/dist/components/layout/pageHeader/pageHeader.js.map +1 -1
  177. package/dist/components/layout/screenDivider/screenDivider.js +9 -8
  178. package/dist/components/layout/screenDivider/screenDivider.js.map +1 -1
  179. package/dist/components/layout/sectionHeader/index.d.ts +2 -0
  180. package/dist/components/layout/sectionHeader/sectionHeader.d.ts +30 -0
  181. package/dist/components/layout/sectionHeader/sectionHeader.js +100 -0
  182. package/dist/components/layout/sectionHeader/sectionHeader.js.map +1 -0
  183. package/dist/components/layout/sheet/sheet.js +4 -3
  184. package/dist/components/layout/sheet/sheet.js.map +1 -1
  185. package/dist/components/layout/stack/stack.js +31 -27
  186. package/dist/components/layout/stack/stack.js.map +1 -1
  187. package/dist/components/navigation/appBar/appBar.js +24 -23
  188. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  189. package/dist/components/navigation/bottomBar/bottomBar.js +57 -56
  190. package/dist/components/navigation/bottomBar/bottomBar.js.map +1 -1
  191. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +4 -3
  192. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  193. package/dist/components/navigation/menu/menu.js +10 -9
  194. package/dist/components/navigation/menu/menu.js.map +1 -1
  195. package/dist/components/navigation/overflowMenu/overflowMenu.js +4 -3
  196. package/dist/components/navigation/overflowMenu/overflowMenu.js.map +1 -1
  197. package/dist/components/navigation/pagination/pagination.js +14 -13
  198. package/dist/components/navigation/pagination/pagination.js.map +1 -1
  199. package/dist/components/navigation/sidebar/sidebar.js +4 -3
  200. package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
  201. package/dist/components/navigation/stepper/stepper.d.ts +10 -2
  202. package/dist/components/navigation/stepper/stepper.js +63 -47
  203. package/dist/components/navigation/stepper/stepper.js.map +1 -1
  204. package/dist/components/navigation/tabs/tab/tab.d.ts +2 -0
  205. package/dist/components/navigation/tabs/tab/tab.js +45 -44
  206. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  207. package/dist/components/navigation/tabs/tabs.d.ts +12 -0
  208. package/dist/components/navigation/tabs/tabs.js +142 -86
  209. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  210. package/dist/connects/rt/table/table.d.ts +2 -0
  211. package/dist/headless/components/dataDisplay/accordion/accordion.js +89 -47
  212. package/dist/headless/components/dataDisplay/accordion/accordion.js.map +1 -1
  213. package/dist/headless/components/dataDisplay/avatar/avatar.js +54 -39
  214. package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
  215. package/dist/headless/components/dataDisplay/badge/badge.js +22 -19
  216. package/dist/headless/components/dataDisplay/badge/badge.js.map +1 -1
  217. package/dist/headless/components/dataDisplay/card/card.js +22 -22
  218. package/dist/headless/components/dataDisplay/card/card.js.map +1 -1
  219. package/dist/headless/components/dataDisplay/chat/chat.js +50 -50
  220. package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
  221. package/dist/headless/components/dataDisplay/chat/chatHeader.js +29 -29
  222. package/dist/headless/components/dataDisplay/chat/chatHeader.js.map +1 -1
  223. package/dist/headless/components/dataDisplay/chat/chatMessageBubble.js +28 -28
  224. package/dist/headless/components/dataDisplay/chat/chatMessageBubble.js.map +1 -1
  225. package/dist/headless/components/dataDisplay/chat/chatShell.js +54 -51
  226. package/dist/headless/components/dataDisplay/chat/chatShell.js.map +1 -1
  227. package/dist/headless/components/dataDisplay/chip/chip.js +77 -69
  228. package/dist/headless/components/dataDisplay/chip/chip.js.map +1 -1
  229. package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js +58 -0
  230. package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js.map +1 -0
  231. package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js +28 -24
  232. package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js.map +1 -1
  233. package/dist/headless/components/dataDisplay/kanban/kanban.js +131 -0
  234. package/dist/headless/components/dataDisplay/kanban/kanban.js.map +1 -0
  235. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js +28 -28
  236. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
  237. package/dist/headless/components/dataDisplay/list/list.js +15 -15
  238. package/dist/headless/components/dataDisplay/list/list.js.map +1 -1
  239. package/dist/headless/components/dataDisplay/meter/meter.js +82 -0
  240. package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -0
  241. package/dist/headless/components/dataDisplay/personChip/personChip.js +102 -0
  242. package/dist/headless/components/dataDisplay/personChip/personChip.js.map +1 -0
  243. package/dist/headless/components/dataDisplay/stat/stat.js +99 -0
  244. package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -0
  245. package/dist/headless/components/dataDisplay/table/table.js +20 -20
  246. package/dist/headless/components/dataDisplay/table/table.js.map +1 -1
  247. package/dist/headless/components/dataDisplay/table/tableCell.js +9 -6
  248. package/dist/headless/components/dataDisplay/table/tableCell.js.map +1 -1
  249. package/dist/headless/components/dataDisplay/table/tableHeadCell.js +26 -23
  250. package/dist/headless/components/dataDisplay/table/tableHeadCell.js.map +1 -1
  251. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js +53 -53
  252. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
  253. package/dist/headless/components/dataDisplay/timeline/timeline.js +87 -0
  254. package/dist/headless/components/dataDisplay/timeline/timeline.js.map +1 -0
  255. package/dist/headless/components/dataDisplay/typography/typography.js +34 -21
  256. package/dist/headless/components/dataDisplay/typography/typography.js.map +1 -1
  257. package/dist/headless/components/feedBack/emptyState/emptyState.js +84 -0
  258. package/dist/headless/components/feedBack/emptyState/emptyState.js.map +1 -0
  259. package/dist/headless/components/feedBack/progressIndicator/progressIndicator.js +77 -45
  260. package/dist/headless/components/feedBack/progressIndicator/progressIndicator.js.map +1 -1
  261. package/dist/headless/components/feedBack/saveAssetDialog/saveAssetDialog.js +16 -13
  262. package/dist/headless/components/feedBack/saveAssetDialog/saveAssetDialog.js.map +1 -1
  263. package/dist/headless/components/feedBack/tooltip/tooltip.js +33 -26
  264. package/dist/headless/components/feedBack/tooltip/tooltip.js.map +1 -1
  265. package/dist/headless/components/inputs/button/button.js +33 -32
  266. package/dist/headless/components/inputs/button/button.js.map +1 -1
  267. package/dist/headless/components/inputs/datePicker/dataPickerInput.js +23 -23
  268. package/dist/headless/components/inputs/datePicker/dataPickerInput.js.map +1 -1
  269. package/dist/headless/components/inputs/datePicker/datePicker.js +79 -79
  270. package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
  271. package/dist/headless/components/inputs/rating/rating.js +39 -39
  272. package/dist/headless/components/inputs/rating/rating.js.map +1 -1
  273. package/dist/headless/components/inputs/selectField/selectField.js +61 -58
  274. package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
  275. package/dist/headless/components/inputs/textField/textField.js +36 -36
  276. package/dist/headless/components/inputs/textField/textField.js.map +1 -1
  277. package/dist/headless/components/inputs/textField/textFieldAdornment.js +9 -9
  278. package/dist/headless/components/inputs/textField/textFieldAdornment.js.map +1 -1
  279. package/dist/headless/components/inputs/textField/textFieldWrapper.js +41 -41
  280. package/dist/headless/components/inputs/textField/textFieldWrapper.js.map +1 -1
  281. package/dist/headless/components/inputs/valueSlider/valueSlider.js +24 -24
  282. package/dist/headless/components/inputs/valueSlider/valueSlider.js.map +1 -1
  283. package/dist/headless/components/layout/appLayout/appLayout.js +39 -39
  284. package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
  285. package/dist/headless/components/layout/divider/divider.js +24 -21
  286. package/dist/headless/components/layout/divider/divider.js.map +1 -1
  287. package/dist/headless/components/layout/pageHeader/pageHeader.js +34 -34
  288. package/dist/headless/components/layout/pageHeader/pageHeader.js.map +1 -1
  289. package/dist/headless/components/layout/sectionHeader/sectionHeader.js +98 -0
  290. package/dist/headless/components/layout/sectionHeader/sectionHeader.js.map +1 -0
  291. package/dist/headless/components/layout/stack/stack.js +29 -26
  292. package/dist/headless/components/layout/stack/stack.js.map +1 -1
  293. package/dist/headless/components/navigation/appBar/appBar.js +22 -22
  294. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  295. package/dist/headless/components/navigation/bottomBar/bottomBar.js +51 -51
  296. package/dist/headless/components/navigation/bottomBar/bottomBar.js.map +1 -1
  297. package/dist/headless/components/navigation/stepper/stepper.js +61 -46
  298. package/dist/headless/components/navigation/stepper/stepper.js.map +1 -1
  299. package/dist/headless/components/navigation/tabs/tab/tab.js +44 -44
  300. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  301. package/dist/headless/components/navigation/tabs/tabs.js +140 -85
  302. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  303. package/dist/headless/icons/catalog.js +78 -1
  304. package/dist/headless/icons/catalog.js.map +1 -1
  305. package/dist/headless/icons/index.js +596 -574
  306. package/dist/headless/icons/index.js.map +1 -1
  307. package/dist/headless/icons/svg/accountTree.js +9 -0
  308. package/dist/headless/icons/svg/accountTree.js.map +1 -0
  309. package/dist/headless/icons/svg/callSplit.js +9 -0
  310. package/dist/headless/icons/svg/callSplit.js.map +1 -0
  311. package/dist/headless/icons/svg/deviceHub.js +8 -0
  312. package/dist/headless/icons/svg/deviceHub.js.map +1 -0
  313. package/dist/headless/icons/svg/editNote.js +9 -0
  314. package/dist/headless/icons/svg/editNote.js.map +1 -0
  315. package/dist/headless/icons/svg/filterList.js +9 -0
  316. package/dist/headless/icons/svg/filterList.js.map +1 -0
  317. package/dist/headless/icons/svg/forkRight.js +8 -0
  318. package/dist/headless/icons/svg/forkRight.js.map +1 -0
  319. package/dist/headless/icons/svg/groups.js +9 -0
  320. package/dist/headless/icons/svg/groups.js.map +1 -0
  321. package/dist/headless/icons/svg/hub.js +8 -0
  322. package/dist/headless/icons/svg/hub.js.map +1 -0
  323. package/dist/headless/icons/svg/index.js +598 -576
  324. package/dist/headless/icons/svg/index.js.map +1 -1
  325. package/dist/headless/icons/svg/lan.js +9 -0
  326. package/dist/headless/icons/svg/lan.js.map +1 -0
  327. package/dist/headless/icons/svg/personOff.js +9 -0
  328. package/dist/headless/icons/svg/personOff.js.map +1 -0
  329. package/dist/headless/icons/svg/schema.js +9 -0
  330. package/dist/headless/icons/svg/schema.js.map +1 -0
  331. package/dist/headless/index.js +281 -255
  332. package/dist/headless/index.js.map +1 -1
  333. package/dist/headless/source/components/dataDisplay/accordion/accordion.jsx +60 -18
  334. package/dist/headless/source/components/dataDisplay/accordion/accordion.jsx.map +1 -1
  335. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx +28 -3
  336. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  337. package/dist/headless/source/components/dataDisplay/badge/badge.jsx +8 -4
  338. package/dist/headless/source/components/dataDisplay/badge/badge.jsx.map +1 -1
  339. package/dist/headless/source/components/dataDisplay/card/card.jsx +4 -3
  340. package/dist/headless/source/components/dataDisplay/card/card.jsx.map +1 -1
  341. package/dist/headless/source/components/dataDisplay/chart/chart.jsx +168 -0
  342. package/dist/headless/source/components/dataDisplay/chart/chart.jsx.map +1 -0
  343. package/dist/headless/source/components/dataDisplay/chart/chartTheme.js +78 -0
  344. package/dist/headless/source/components/dataDisplay/chart/chartTheme.js.map +7 -0
  345. package/dist/headless/source/components/dataDisplay/chart/index.js +9 -0
  346. package/dist/headless/source/components/dataDisplay/chart/index.js.map +7 -0
  347. package/dist/headless/source/components/dataDisplay/chat/chat.jsx +4 -3
  348. package/dist/headless/source/components/dataDisplay/chat/chat.jsx.map +1 -1
  349. package/dist/headless/source/components/dataDisplay/chat/chatHeader.jsx +7 -5
  350. package/dist/headless/source/components/dataDisplay/chat/chatHeader.jsx.map +1 -1
  351. package/dist/headless/source/components/dataDisplay/chat/chatMessageBubble.jsx +4 -3
  352. package/dist/headless/source/components/dataDisplay/chat/chatMessageBubble.jsx.map +1 -1
  353. package/dist/headless/source/components/dataDisplay/chat/chatShell.jsx +30 -26
  354. package/dist/headless/source/components/dataDisplay/chat/chatShell.jsx.map +1 -1
  355. package/dist/headless/source/components/dataDisplay/chip/chip.jsx +11 -6
  356. package/dist/headless/source/components/dataDisplay/chip/chip.jsx.map +1 -1
  357. package/dist/headless/source/components/dataDisplay/descriptionList/descriptionList.jsx +42 -0
  358. package/dist/headless/source/components/dataDisplay/descriptionList/descriptionList.jsx.map +1 -0
  359. package/dist/headless/source/components/dataDisplay/descriptionList/index.js +7 -0
  360. package/dist/headless/source/components/dataDisplay/descriptionList/index.js.map +7 -0
  361. package/dist/headless/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx +10 -4
  362. package/dist/headless/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx.map +1 -1
  363. package/dist/headless/source/components/dataDisplay/kanban/index.js +8 -0
  364. package/dist/headless/source/components/dataDisplay/kanban/index.js.map +7 -0
  365. package/dist/headless/source/components/dataDisplay/kanban/kanban.jsx +99 -0
  366. package/dist/headless/source/components/dataDisplay/kanban/kanban.jsx.map +1 -0
  367. package/dist/headless/source/components/dataDisplay/lazyImage/lazyImage.jsx +4 -3
  368. package/dist/headless/source/components/dataDisplay/lazyImage/lazyImage.jsx.map +1 -1
  369. package/dist/headless/source/components/dataDisplay/list/list.jsx +4 -3
  370. package/dist/headless/source/components/dataDisplay/list/list.jsx.map +1 -1
  371. package/dist/headless/source/components/dataDisplay/meter/index.js +8 -0
  372. package/dist/headless/source/components/dataDisplay/meter/index.js.map +7 -0
  373. package/dist/headless/source/components/dataDisplay/meter/meter.jsx +80 -0
  374. package/dist/headless/source/components/dataDisplay/meter/meter.jsx.map +1 -0
  375. package/dist/headless/source/components/dataDisplay/personChip/index.js +8 -0
  376. package/dist/headless/source/components/dataDisplay/personChip/index.js.map +7 -0
  377. package/dist/headless/source/components/dataDisplay/personChip/personChip.jsx +71 -0
  378. package/dist/headless/source/components/dataDisplay/personChip/personChip.jsx.map +1 -0
  379. package/dist/headless/source/components/dataDisplay/stat/index.js +7 -0
  380. package/dist/headless/source/components/dataDisplay/stat/index.js.map +7 -0
  381. package/dist/headless/source/components/dataDisplay/stat/stat.jsx +72 -0
  382. package/dist/headless/source/components/dataDisplay/stat/stat.jsx.map +1 -0
  383. package/dist/headless/source/components/dataDisplay/table/table.jsx +11 -4
  384. package/dist/headless/source/components/dataDisplay/table/table.jsx.map +1 -1
  385. package/dist/headless/source/components/dataDisplay/table/tableCell.jsx +8 -2
  386. package/dist/headless/source/components/dataDisplay/table/tableCell.jsx.map +1 -1
  387. package/dist/headless/source/components/dataDisplay/table/tableHeadCell.jsx +37 -3
  388. package/dist/headless/source/components/dataDisplay/table/tableHeadCell.jsx.map +1 -1
  389. package/dist/headless/source/components/dataDisplay/thumbCard/thumbCard.jsx +10 -7
  390. package/dist/headless/source/components/dataDisplay/thumbCard/thumbCard.jsx.map +1 -1
  391. package/dist/headless/source/components/dataDisplay/timeline/index.js +8 -0
  392. package/dist/headless/source/components/dataDisplay/timeline/index.js.map +7 -0
  393. package/dist/headless/source/components/dataDisplay/timeline/timeline.jsx +64 -0
  394. package/dist/headless/source/components/dataDisplay/timeline/timeline.jsx.map +1 -0
  395. package/dist/headless/source/components/dataDisplay/typography/typography.jsx +17 -3
  396. package/dist/headless/source/components/dataDisplay/typography/typography.jsx.map +1 -1
  397. package/dist/headless/source/components/feedBack/emptyState/emptyState.jsx +47 -0
  398. package/dist/headless/source/components/feedBack/emptyState/emptyState.jsx.map +1 -0
  399. package/dist/headless/source/components/feedBack/emptyState/index.js +6 -0
  400. package/dist/headless/source/components/feedBack/emptyState/index.js.map +7 -0
  401. package/dist/headless/source/components/feedBack/progressIndicator/progressIndicator.jsx +52 -10
  402. package/dist/headless/source/components/feedBack/progressIndicator/progressIndicator.jsx.map +1 -1
  403. package/dist/headless/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx +3 -2
  404. package/dist/headless/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx.map +1 -1
  405. package/dist/headless/source/components/feedBack/tooltip/tooltip.jsx +4 -2
  406. package/dist/headless/source/components/feedBack/tooltip/tooltip.jsx.map +1 -1
  407. package/dist/headless/source/components/inputs/button/button.jsx +7 -3
  408. package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
  409. package/dist/headless/source/components/inputs/datePicker/dataPickerInput.jsx +4 -3
  410. package/dist/headless/source/components/inputs/datePicker/dataPickerInput.jsx.map +1 -1
  411. package/dist/headless/source/components/inputs/datePicker/datePicker.jsx +4 -6
  412. package/dist/headless/source/components/inputs/datePicker/datePicker.jsx.map +1 -1
  413. package/dist/headless/source/components/inputs/rating/rating.jsx +4 -3
  414. package/dist/headless/source/components/inputs/rating/rating.jsx.map +1 -1
  415. package/dist/headless/source/components/inputs/selectField/selectField.jsx +8 -2
  416. package/dist/headless/source/components/inputs/selectField/selectField.jsx.map +1 -1
  417. package/dist/headless/source/components/inputs/textField/textField.jsx +8 -6
  418. package/dist/headless/source/components/inputs/textField/textField.jsx.map +1 -1
  419. package/dist/headless/source/components/inputs/textField/textFieldAdornment.jsx +4 -3
  420. package/dist/headless/source/components/inputs/textField/textFieldAdornment.jsx.map +1 -1
  421. package/dist/headless/source/components/inputs/textField/textFieldWrapper.jsx +9 -6
  422. package/dist/headless/source/components/inputs/textField/textFieldWrapper.jsx.map +1 -1
  423. package/dist/headless/source/components/inputs/valueSlider/valueSlider.jsx +4 -3
  424. package/dist/headless/source/components/inputs/valueSlider/valueSlider.jsx.map +1 -1
  425. package/dist/headless/source/components/layout/appLayout/appLayout.jsx +3 -2
  426. package/dist/headless/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  427. package/dist/headless/source/components/layout/divider/divider.jsx +10 -6
  428. package/dist/headless/source/components/layout/divider/divider.jsx.map +1 -1
  429. package/dist/headless/source/components/layout/pageHeader/pageHeader.jsx +14 -10
  430. package/dist/headless/source/components/layout/pageHeader/pageHeader.jsx.map +1 -1
  431. package/dist/headless/source/components/layout/sectionHeader/index.js +6 -0
  432. package/dist/headless/source/components/layout/sectionHeader/index.js.map +7 -0
  433. package/dist/headless/source/components/layout/sectionHeader/sectionHeader.jsx +80 -0
  434. package/dist/headless/source/components/layout/sectionHeader/sectionHeader.jsx.map +1 -0
  435. package/dist/headless/source/components/layout/stack/stack.jsx +3 -2
  436. package/dist/headless/source/components/layout/stack/stack.jsx.map +1 -1
  437. package/dist/headless/source/components/navigation/appBar/appBar.jsx +7 -5
  438. package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
  439. package/dist/headless/source/components/navigation/bottomBar/bottomBar.jsx +4 -3
  440. package/dist/headless/source/components/navigation/bottomBar/bottomBar.jsx.map +1 -1
  441. package/dist/headless/source/components/navigation/stepper/stepper.jsx +14 -7
  442. package/dist/headless/source/components/navigation/stepper/stepper.jsx.map +1 -1
  443. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +7 -5
  444. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  445. package/dist/headless/source/components/navigation/tabs/tabs.jsx +84 -4
  446. package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
  447. package/dist/headless/source/connects/rt/table/table.jsx +9 -1
  448. package/dist/headless/source/connects/rt/table/table.jsx.map +1 -1
  449. package/dist/headless/source/icons/catalog.js +78 -1
  450. package/dist/headless/source/icons/catalog.js.map +2 -2
  451. package/dist/headless/source/icons/svg/accountTree.js +11 -0
  452. package/dist/headless/source/icons/svg/accountTree.js.map +7 -0
  453. package/dist/headless/source/icons/svg/callSplit.js +11 -0
  454. package/dist/headless/source/icons/svg/callSplit.js.map +7 -0
  455. package/dist/headless/source/icons/svg/deviceHub.js +10 -0
  456. package/dist/headless/source/icons/svg/deviceHub.js.map +7 -0
  457. package/dist/headless/source/icons/svg/editNote.js +11 -0
  458. package/dist/headless/source/icons/svg/editNote.js.map +7 -0
  459. package/dist/headless/source/icons/svg/filterList.js +11 -0
  460. package/dist/headless/source/icons/svg/filterList.js.map +7 -0
  461. package/dist/headless/source/icons/svg/forkRight.js +10 -0
  462. package/dist/headless/source/icons/svg/forkRight.js.map +7 -0
  463. package/dist/headless/source/icons/svg/groups.js +11 -0
  464. package/dist/headless/source/icons/svg/groups.js.map +7 -0
  465. package/dist/headless/source/icons/svg/hub.js +10 -0
  466. package/dist/headless/source/icons/svg/hub.js.map +7 -0
  467. package/dist/headless/source/icons/svg/index.js +22 -0
  468. package/dist/headless/source/icons/svg/index.js.map +2 -2
  469. package/dist/headless/source/icons/svg/lan.js +11 -0
  470. package/dist/headless/source/icons/svg/lan.js.map +7 -0
  471. package/dist/headless/source/icons/svg/personOff.js +11 -0
  472. package/dist/headless/source/icons/svg/personOff.js.map +7 -0
  473. package/dist/headless/source/icons/svg/schema.js +11 -0
  474. package/dist/headless/source/icons/svg/schema.js.map +7 -0
  475. package/dist/headless/source/index.js +33 -1
  476. package/dist/headless/source/index.js.map +2 -2
  477. package/dist/icons/catalog.d.ts +1 -1
  478. package/dist/icons/catalog.js +78 -1
  479. package/dist/icons/catalog.js.map +1 -1
  480. package/dist/icons/index.js +596 -574
  481. package/dist/icons/index.js.map +1 -1
  482. package/dist/icons/svg/accountTree.d.ts +4 -0
  483. package/dist/icons/svg/accountTree.js +9 -0
  484. package/dist/icons/svg/accountTree.js.map +1 -0
  485. package/dist/icons/svg/callSplit.d.ts +4 -0
  486. package/dist/icons/svg/callSplit.js +9 -0
  487. package/dist/icons/svg/callSplit.js.map +1 -0
  488. package/dist/icons/svg/deviceHub.d.ts +4 -0
  489. package/dist/icons/svg/deviceHub.js +8 -0
  490. package/dist/icons/svg/deviceHub.js.map +1 -0
  491. package/dist/icons/svg/editNote.d.ts +4 -0
  492. package/dist/icons/svg/editNote.js +9 -0
  493. package/dist/icons/svg/editNote.js.map +1 -0
  494. package/dist/icons/svg/filterList.d.ts +4 -0
  495. package/dist/icons/svg/filterList.js +9 -0
  496. package/dist/icons/svg/filterList.js.map +1 -0
  497. package/dist/icons/svg/forkRight.d.ts +4 -0
  498. package/dist/icons/svg/forkRight.js +8 -0
  499. package/dist/icons/svg/forkRight.js.map +1 -0
  500. package/dist/icons/svg/groups.d.ts +4 -0
  501. package/dist/icons/svg/groups.js +9 -0
  502. package/dist/icons/svg/groups.js.map +1 -0
  503. package/dist/icons/svg/hub.d.ts +4 -0
  504. package/dist/icons/svg/hub.js +8 -0
  505. package/dist/icons/svg/hub.js.map +1 -0
  506. package/dist/icons/svg/index.d.ts +11 -0
  507. package/dist/icons/svg/index.js +598 -576
  508. package/dist/icons/svg/index.js.map +1 -1
  509. package/dist/icons/svg/lan.d.ts +4 -0
  510. package/dist/icons/svg/lan.js +9 -0
  511. package/dist/icons/svg/lan.js.map +1 -0
  512. package/dist/icons/svg/personOff.d.ts +4 -0
  513. package/dist/icons/svg/personOff.js +9 -0
  514. package/dist/icons/svg/personOff.js.map +1 -0
  515. package/dist/icons/svg/schema.d.ts +4 -0
  516. package/dist/icons/svg/schema.js +9 -0
  517. package/dist/icons/svg/schema.js.map +1 -0
  518. package/dist/index.d.ts +21 -5
  519. package/dist/index.js +281 -255
  520. package/dist/index.js.map +1 -1
  521. package/dist/source/components/base/icon/icon.jsx +1 -0
  522. package/dist/source/components/base/icon/icon.jsx.map +1 -1
  523. package/dist/source/components/base/ripple/ripple.jsx +1 -0
  524. package/dist/source/components/base/ripple/ripple.jsx.map +1 -1
  525. package/dist/source/components/dataDisplay/accordion/accordion.jsx +61 -18
  526. package/dist/source/components/dataDisplay/accordion/accordion.jsx.map +1 -1
  527. package/dist/source/components/dataDisplay/assetGrid/assetGrid.jsx +1 -0
  528. package/dist/source/components/dataDisplay/assetGrid/assetGrid.jsx.map +1 -1
  529. package/dist/source/components/dataDisplay/avatar/avatar.jsx +29 -3
  530. package/dist/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  531. package/dist/source/components/dataDisplay/badge/badge.jsx +9 -4
  532. package/dist/source/components/dataDisplay/badge/badge.jsx.map +1 -1
  533. package/dist/source/components/dataDisplay/card/card.jsx +5 -3
  534. package/dist/source/components/dataDisplay/card/card.jsx.map +1 -1
  535. package/dist/source/components/dataDisplay/carousel/carousel.jsx +1 -0
  536. package/dist/source/components/dataDisplay/carousel/carousel.jsx.map +1 -1
  537. package/dist/source/components/dataDisplay/chart/chart.jsx +170 -0
  538. package/dist/source/components/dataDisplay/chart/chart.jsx.map +1 -0
  539. package/dist/source/components/dataDisplay/chart/chartTheme.js +78 -0
  540. package/dist/source/components/dataDisplay/chart/chartTheme.js.map +7 -0
  541. package/dist/source/components/dataDisplay/chart/index.js +9 -0
  542. package/dist/source/components/dataDisplay/chart/index.js.map +7 -0
  543. package/dist/source/components/dataDisplay/chat/chat.jsx +5 -3
  544. package/dist/source/components/dataDisplay/chat/chat.jsx.map +1 -1
  545. package/dist/source/components/dataDisplay/chat/chatHeader.jsx +7 -5
  546. package/dist/source/components/dataDisplay/chat/chatHeader.jsx.map +1 -1
  547. package/dist/source/components/dataDisplay/chat/chatMessageBubble.jsx +4 -3
  548. package/dist/source/components/dataDisplay/chat/chatMessageBubble.jsx.map +1 -1
  549. package/dist/source/components/dataDisplay/chat/chatShell.jsx +30 -26
  550. package/dist/source/components/dataDisplay/chat/chatShell.jsx.map +1 -1
  551. package/dist/source/components/dataDisplay/chip/chip.jsx +12 -6
  552. package/dist/source/components/dataDisplay/chip/chip.jsx.map +1 -1
  553. package/dist/source/components/dataDisplay/chipGroup/chipGroup.jsx +1 -0
  554. package/dist/source/components/dataDisplay/chipGroup/chipGroup.jsx.map +1 -1
  555. package/dist/source/components/dataDisplay/descriptionList/descriptionList.jsx +44 -0
  556. package/dist/source/components/dataDisplay/descriptionList/descriptionList.jsx.map +1 -0
  557. package/dist/source/components/dataDisplay/descriptionList/index.js +7 -0
  558. package/dist/source/components/dataDisplay/descriptionList/index.js.map +7 -0
  559. package/dist/source/components/dataDisplay/expansionPanel/expansionPanel.jsx +1 -0
  560. package/dist/source/components/dataDisplay/expansionPanel/expansionPanel.jsx.map +1 -1
  561. package/dist/source/components/dataDisplay/imagesList/imagesList.jsx +1 -0
  562. package/dist/source/components/dataDisplay/imagesList/imagesList.jsx.map +1 -1
  563. package/dist/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx +11 -4
  564. package/dist/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx.map +1 -1
  565. package/dist/source/components/dataDisplay/kanban/index.js +8 -0
  566. package/dist/source/components/dataDisplay/kanban/index.js.map +7 -0
  567. package/dist/source/components/dataDisplay/kanban/kanban.jsx +101 -0
  568. package/dist/source/components/dataDisplay/kanban/kanban.jsx.map +1 -0
  569. package/dist/source/components/dataDisplay/lazyImage/lazyImage.jsx +5 -3
  570. package/dist/source/components/dataDisplay/lazyImage/lazyImage.jsx.map +1 -1
  571. package/dist/source/components/dataDisplay/list/list.jsx +5 -3
  572. package/dist/source/components/dataDisplay/list/list.jsx.map +1 -1
  573. package/dist/source/components/dataDisplay/meter/index.js +8 -0
  574. package/dist/source/components/dataDisplay/meter/index.js.map +7 -0
  575. package/dist/source/components/dataDisplay/meter/meter.jsx +82 -0
  576. package/dist/source/components/dataDisplay/meter/meter.jsx.map +1 -0
  577. package/dist/source/components/dataDisplay/personChip/index.js +8 -0
  578. package/dist/source/components/dataDisplay/personChip/index.js.map +7 -0
  579. package/dist/source/components/dataDisplay/personChip/personChip.jsx +73 -0
  580. package/dist/source/components/dataDisplay/personChip/personChip.jsx.map +1 -0
  581. package/dist/source/components/dataDisplay/stat/index.js +7 -0
  582. package/dist/source/components/dataDisplay/stat/index.js.map +7 -0
  583. package/dist/source/components/dataDisplay/stat/stat.jsx +74 -0
  584. package/dist/source/components/dataDisplay/stat/stat.jsx.map +1 -0
  585. package/dist/source/components/dataDisplay/table/table.jsx +12 -4
  586. package/dist/source/components/dataDisplay/table/table.jsx.map +1 -1
  587. package/dist/source/components/dataDisplay/table/tableCell.jsx +8 -2
  588. package/dist/source/components/dataDisplay/table/tableCell.jsx.map +1 -1
  589. package/dist/source/components/dataDisplay/table/tableHeadCell.jsx +37 -3
  590. package/dist/source/components/dataDisplay/table/tableHeadCell.jsx.map +1 -1
  591. package/dist/source/components/dataDisplay/table/tablePagination/tablePagination.jsx +1 -0
  592. package/dist/source/components/dataDisplay/table/tablePagination/tablePagination.jsx.map +1 -1
  593. package/dist/source/components/dataDisplay/thumbCard/thumbCard.jsx +11 -7
  594. package/dist/source/components/dataDisplay/thumbCard/thumbCard.jsx.map +1 -1
  595. package/dist/source/components/dataDisplay/timeline/index.js +8 -0
  596. package/dist/source/components/dataDisplay/timeline/index.js.map +7 -0
  597. package/dist/source/components/dataDisplay/timeline/timeline.jsx +66 -0
  598. package/dist/source/components/dataDisplay/timeline/timeline.jsx.map +1 -0
  599. package/dist/source/components/dataDisplay/treeView/treeView.jsx +1 -0
  600. package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  601. package/dist/source/components/dataDisplay/typography/typography.jsx +18 -3
  602. package/dist/source/components/dataDisplay/typography/typography.jsx.map +1 -1
  603. package/dist/source/components/feedBack/confirmDialog/confirmDialog.jsx +1 -0
  604. package/dist/source/components/feedBack/confirmDialog/confirmDialog.jsx.map +1 -1
  605. package/dist/source/components/feedBack/emptyState/emptyState.jsx +49 -0
  606. package/dist/source/components/feedBack/emptyState/emptyState.jsx.map +1 -0
  607. package/dist/source/components/feedBack/emptyState/index.js +6 -0
  608. package/dist/source/components/feedBack/emptyState/index.js.map +7 -0
  609. package/dist/source/components/feedBack/message/message.jsx +1 -0
  610. package/dist/source/components/feedBack/message/message.jsx.map +1 -1
  611. package/dist/source/components/feedBack/modal/modal.jsx +1 -0
  612. package/dist/source/components/feedBack/modal/modal.jsx.map +1 -1
  613. package/dist/source/components/feedBack/progressIndicator/progressIndicator.jsx +53 -10
  614. package/dist/source/components/feedBack/progressIndicator/progressIndicator.jsx.map +1 -1
  615. package/dist/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx +4 -2
  616. package/dist/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx.map +1 -1
  617. package/dist/source/components/feedBack/skeleton/skeleton.jsx +1 -0
  618. package/dist/source/components/feedBack/skeleton/skeleton.jsx.map +1 -1
  619. package/dist/source/components/feedBack/snackbar/snackbar.jsx +1 -0
  620. package/dist/source/components/feedBack/snackbar/snackbar.jsx.map +1 -1
  621. package/dist/source/components/feedBack/tooltip/tooltip.jsx +5 -2
  622. package/dist/source/components/feedBack/tooltip/tooltip.jsx.map +1 -1
  623. package/dist/source/components/inputs/button/button.jsx +8 -3
  624. package/dist/source/components/inputs/button/button.jsx.map +1 -1
  625. package/dist/source/components/inputs/buttonGroups/buttonGroup.jsx +1 -0
  626. package/dist/source/components/inputs/buttonGroups/buttonGroup.jsx.map +1 -1
  627. package/dist/source/components/inputs/checkbox/checkbox.jsx +1 -0
  628. package/dist/source/components/inputs/checkbox/checkbox.jsx.map +1 -1
  629. package/dist/source/components/inputs/datePicker/dataPickerInput.jsx +4 -3
  630. package/dist/source/components/inputs/datePicker/dataPickerInput.jsx.map +1 -1
  631. package/dist/source/components/inputs/datePicker/datePicker.jsx +5 -6
  632. package/dist/source/components/inputs/datePicker/datePicker.jsx.map +1 -1
  633. package/dist/source/components/inputs/fileDrop/fileDrop.jsx +1 -0
  634. package/dist/source/components/inputs/fileDrop/fileDrop.jsx.map +1 -1
  635. package/dist/source/components/inputs/fileInput/fileInput.jsx +1 -0
  636. package/dist/source/components/inputs/fileInput/fileInput.jsx.map +1 -1
  637. package/dist/source/components/inputs/floatingButton/floatingButton.jsx +1 -0
  638. package/dist/source/components/inputs/floatingButton/floatingButton.jsx.map +1 -1
  639. package/dist/source/components/inputs/radioButton/radioButton.jsx +1 -0
  640. package/dist/source/components/inputs/radioButton/radioButton.jsx.map +1 -1
  641. package/dist/source/components/inputs/rating/rating.jsx +5 -3
  642. package/dist/source/components/inputs/rating/rating.jsx.map +1 -1
  643. package/dist/source/components/inputs/selectField/selectField.jsx +9 -2
  644. package/dist/source/components/inputs/selectField/selectField.jsx.map +1 -1
  645. package/dist/source/components/inputs/slider/slider.jsx +1 -0
  646. package/dist/source/components/inputs/slider/slider.jsx.map +1 -1
  647. package/dist/source/components/inputs/textField/textField.jsx +9 -6
  648. package/dist/source/components/inputs/textField/textField.jsx.map +1 -1
  649. package/dist/source/components/inputs/textField/textFieldAdornment.jsx +4 -3
  650. package/dist/source/components/inputs/textField/textFieldAdornment.jsx.map +1 -1
  651. package/dist/source/components/inputs/textField/textFieldWrapper.jsx +9 -6
  652. package/dist/source/components/inputs/textField/textFieldWrapper.jsx.map +1 -1
  653. package/dist/source/components/inputs/timePicker/timePicker.jsx +1 -0
  654. package/dist/source/components/inputs/timePicker/timePicker.jsx.map +1 -1
  655. package/dist/source/components/inputs/toggle/toggle.jsx +1 -0
  656. package/dist/source/components/inputs/toggle/toggle.jsx.map +1 -1
  657. package/dist/source/components/inputs/valueSlider/valueSlider.jsx +5 -3
  658. package/dist/source/components/inputs/valueSlider/valueSlider.jsx.map +1 -1
  659. package/dist/source/components/layout/appLayout/appLayout.jsx +4 -2
  660. package/dist/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  661. package/dist/source/components/layout/divider/divider.jsx +11 -6
  662. package/dist/source/components/layout/divider/divider.jsx.map +1 -1
  663. package/dist/source/components/layout/floatingWindow/floatingWindow.jsx +1 -0
  664. package/dist/source/components/layout/floatingWindow/floatingWindow.jsx.map +1 -1
  665. package/dist/source/components/layout/grid/grid.jsx +1 -0
  666. package/dist/source/components/layout/grid/grid.jsx.map +1 -1
  667. package/dist/source/components/layout/page/page.jsx +1 -0
  668. package/dist/source/components/layout/page/page.jsx.map +1 -1
  669. package/dist/source/components/layout/pageHeader/pageHeader.jsx +15 -10
  670. package/dist/source/components/layout/pageHeader/pageHeader.jsx.map +1 -1
  671. package/dist/source/components/layout/screenDivider/screenDivider.jsx +1 -0
  672. package/dist/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
  673. package/dist/source/components/layout/sectionHeader/index.js +6 -0
  674. package/dist/source/components/layout/sectionHeader/index.js.map +7 -0
  675. package/dist/source/components/layout/sectionHeader/sectionHeader.jsx +82 -0
  676. package/dist/source/components/layout/sectionHeader/sectionHeader.jsx.map +1 -0
  677. package/dist/source/components/layout/sheet/sheet.jsx +1 -0
  678. package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
  679. package/dist/source/components/layout/stack/stack.jsx +4 -2
  680. package/dist/source/components/layout/stack/stack.jsx.map +1 -1
  681. package/dist/source/components/navigation/appBar/appBar.jsx +8 -5
  682. package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
  683. package/dist/source/components/navigation/bottomBar/bottomBar.jsx +5 -3
  684. package/dist/source/components/navigation/bottomBar/bottomBar.jsx.map +1 -1
  685. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx +1 -0
  686. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
  687. package/dist/source/components/navigation/menu/menu.jsx +1 -0
  688. package/dist/source/components/navigation/menu/menu.jsx.map +1 -1
  689. package/dist/source/components/navigation/overflowMenu/overflowMenu.jsx +1 -0
  690. package/dist/source/components/navigation/overflowMenu/overflowMenu.jsx.map +1 -1
  691. package/dist/source/components/navigation/pagination/pagination.jsx +1 -0
  692. package/dist/source/components/navigation/pagination/pagination.jsx.map +1 -1
  693. package/dist/source/components/navigation/sidebar/sidebar.jsx +1 -0
  694. package/dist/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
  695. package/dist/source/components/navigation/stepper/stepper.jsx +15 -7
  696. package/dist/source/components/navigation/stepper/stepper.jsx.map +1 -1
  697. package/dist/source/components/navigation/tabs/tab/tab.jsx +8 -5
  698. package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  699. package/dist/source/components/navigation/tabs/tabs.jsx +85 -4
  700. package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
  701. package/dist/source/connects/rt/table/table.jsx +9 -1
  702. package/dist/source/connects/rt/table/table.jsx.map +1 -1
  703. package/dist/source/icons/catalog.js +78 -1
  704. package/dist/source/icons/catalog.js.map +2 -2
  705. package/dist/source/icons/svg/accountTree.js +11 -0
  706. package/dist/source/icons/svg/accountTree.js.map +7 -0
  707. package/dist/source/icons/svg/callSplit.js +11 -0
  708. package/dist/source/icons/svg/callSplit.js.map +7 -0
  709. package/dist/source/icons/svg/deviceHub.js +10 -0
  710. package/dist/source/icons/svg/deviceHub.js.map +7 -0
  711. package/dist/source/icons/svg/editNote.js +11 -0
  712. package/dist/source/icons/svg/editNote.js.map +7 -0
  713. package/dist/source/icons/svg/filterList.js +11 -0
  714. package/dist/source/icons/svg/filterList.js.map +7 -0
  715. package/dist/source/icons/svg/forkRight.js +10 -0
  716. package/dist/source/icons/svg/forkRight.js.map +7 -0
  717. package/dist/source/icons/svg/groups.js +11 -0
  718. package/dist/source/icons/svg/groups.js.map +7 -0
  719. package/dist/source/icons/svg/hub.js +10 -0
  720. package/dist/source/icons/svg/hub.js.map +7 -0
  721. package/dist/source/icons/svg/index.js +22 -0
  722. package/dist/source/icons/svg/index.js.map +2 -2
  723. package/dist/source/icons/svg/lan.js +11 -0
  724. package/dist/source/icons/svg/lan.js.map +7 -0
  725. package/dist/source/icons/svg/personOff.js +11 -0
  726. package/dist/source/icons/svg/personOff.js.map +7 -0
  727. package/dist/source/icons/svg/schema.js +11 -0
  728. package/dist/source/icons/svg/schema.js.map +7 -0
  729. package/dist/source/index.js +33 -1
  730. package/dist/source/index.js.map +2 -2
  731. package/package.json +79 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/layout/stack/stack.tsx"],"sourcesContent":["import { type JSX, type ParentProps, For, Show, children as resolveChildren, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type StackSpacing = number | \"none\" | \"xxs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"xxxl\";\n\nexport interface StackProps extends JSX.HTMLAttributes<HTMLDivElement> {\n direction?: \"row\" | \"row-reverse\" | \"column\" | \"column-reverse\";\n /** Gap between items: scale keyword, or a number = N × spacing unit. */\n spacing?: StackSpacing;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n justify?: \"start\" | \"center\" | \"end\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n wrap?: boolean;\n /** Optional element rendered between each child. */\n divider?: JSX.Element;\n ref?: Ref<HTMLDivElement>;\n}\n\nconst flexAlign = (v?: string): string | undefined => (v === \"start\" || v === \"end\" ? `flex-${v}` : v);\n\nconst resolveGap = (s: StackSpacing): string =>\n typeof s === \"number\" ? `calc(var(--smui-spacing-unit, 4px) * ${s})` : s === \"none\" ? \"0\" : `var(--smui-space-${s})`;\n\nexport function Stack(props: ParentProps<StackProps>): JSX.Element {\n const merged = mergeProps({ direction: \"column\" as const, spacing: \"md\" as StackSpacing }, props);\n const [local, rest] = splitProps(merged, [\n \"direction\",\n \"spacing\",\n \"align\",\n \"justify\",\n \"wrap\",\n \"divider\",\n \"class\",\n \"style\",\n \"children\",\n \"ref\",\n ]);\n\n const resolved = resolveChildren(() => local.children);\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid=\"stack\"\n class={cn(\"smwb-stack\", local.class)}\n style={{\n display: \"flex\",\n \"flex-direction\": local.direction,\n \"flex-wrap\": local.wrap ? \"wrap\" : undefined,\n \"align-items\": flexAlign(local.align),\n \"justify-content\": flexAlign(local.justify),\n gap: resolveGap(local.spacing),\n ...(typeof local.style === \"object\" && local.style ? local.style : {}),\n }}\n >\n <Show when={local.divider} fallback={local.children}>\n <For each={resolved.toArray()}>\n {(child, index) => (\n <>\n <Show when={index() > 0}>\n <div class=\"smwb-stack__divider\">{local.divider}</div>\n </Show>\n {child}\n </>\n )}\n </For>\n </Show>\n </div>\n );\n}\n\nexport default Stack;\n"],"mappings":"AAAA,SAAqC,KAAK,MAAM,YAAY,iBAAiB,YAAY,kBAAkB;AAC3G,OAAO,QAAQ;AACf,SAAS,iBAA2B;AAgBpC,MAAM,YAAY,CAAC,MAAoC,MAAM,WAAW,MAAM,QAAQ,QAAQ,CAAC,KAAK;AAEpG,MAAM,aAAa,CAAC,MAClB,OAAO,MAAM,WAAW,wCAAwC,CAAC,MAAM,MAAM,SAAS,MAAM,oBAAoB,CAAC;AAE5G,SAAS,MAAM,OAA6C;AACjE,QAAM,SAAS,WAAW,EAAE,WAAW,UAAmB,SAAS,KAAqB,GAAG,KAAK;AAChG,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,WAAW,gBAAgB,MAAM,MAAM,QAAQ;AAErD,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,YAAY;AAAA,IACZ,OAAO,GAAG,cAAc,MAAM,KAAK;AAAA,IACnC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,kBAAkB,MAAM;AAAA,MACxB,aAAa,MAAM,OAAO,SAAS;AAAA,MACnC,eAAe,UAAU,MAAM,KAAK;AAAA,MACpC,mBAAmB,UAAU,MAAM,OAAO;AAAA,MAC1C,KAAK,WAAW,MAAM,OAAO;AAAA,MAC7B,GAAI,OAAO,MAAM,UAAU,YAAY,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IACtE;AAAA,GACD;AAAA,MACC,CAAC,KAAK,MAAM,MAAM,SAAS,UAAU,MAAM,UAAU;AAAA,QACnD,CAAC,IAAI,MAAM,SAAS,QAAQ,GAAG;AAAA,WAC5B,CAAC,OAAO,UACP,EAAE;AAAA,cACA,CAAC,KAAK,MAAM,MAAM,IAAI,GAAG;AAAA,gBACvB,CAAC,IAAI,MAAM,uBAAuB,MAAM,QAAQ,EAA/C,IAAqD;AAAA,cACxD,EAFC,KAEM;AAAA,eACN,MAAM;AAAA,YACT,IACA;AAAA,QACJ,EATC,IASK;AAAA,MACR,EAXC,KAWM;AAAA,IACT,EA3BC;AA6BL;AAEA,IAAO,gBAAQ;","names":[],"file":"stack.jsx"}
1
+ {"version":3,"sources":["../../../../../../src/components/layout/stack/stack.tsx"],"sourcesContent":["import { type JSX, type ParentProps, For, Show, children as resolveChildren, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type StackSpacing = number | \"none\" | \"xxs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"xxxl\";\n\nexport interface StackProps extends JSX.HTMLAttributes<HTMLDivElement> {\n direction?: \"row\" | \"row-reverse\" | \"column\" | \"column-reverse\";\n /** Gap between items: scale keyword, or a number = N × spacing unit. */\n spacing?: StackSpacing;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n justify?: \"start\" | \"center\" | \"end\" | \"space-between\" | \"space-around\" | \"space-evenly\";\n wrap?: boolean;\n /** Optional element rendered between each child. */\n divider?: JSX.Element;\n ref?: Ref<HTMLDivElement>;\n}\n\nconst flexAlign = (v?: string): string | undefined => (v === \"start\" || v === \"end\" ? `flex-${v}` : v);\n\nconst resolveGap = (s: StackSpacing): string =>\n typeof s === \"number\" ? `calc(var(--smui-spacing-unit, 4px) * ${s})` : s === \"none\" ? \"0\" : `var(--smui-space-${s})`;\n\nexport function Stack(props: ParentProps<StackProps>): JSX.Element {\n const merged = mergeProps({ direction: \"column\" as const, spacing: \"md\" as StackSpacing }, props);\n const [local, rest] = splitProps(merged, [\n \"direction\",\n \"spacing\",\n \"align\",\n \"justify\",\n \"wrap\",\n \"divider\",\n \"class\",\n \"style\",\n \"children\",\n \"ref\",\n ]);\n\n const resolved = resolveChildren(() => local.children);\n // The divider is read where it is drawn: the first gap takes this copy, and\n // each further gap reads its own. Without gaps (a single child) it is not\n // read at all — markup read and not drawn has no server node to hydrate.\n const firstDivider = resolveChildren(() => (resolved.toArray().length > 1 ? local.divider : undefined));\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid=\"stack\"\n class={cn(\"smwb-stack\", local.class)}\n style={{\n display: \"flex\",\n \"flex-direction\": local.direction,\n \"flex-wrap\": local.wrap ? \"wrap\" : undefined,\n \"align-items\": flexAlign(local.align),\n \"justify-content\": flexAlign(local.justify),\n gap: resolveGap(local.spacing),\n ...(typeof local.style === \"object\" && local.style ? local.style : {}),\n }}\n >\n <Show when={firstDivider()} fallback={resolved()}>\n <For each={resolved.toArray()}>\n {(child, index) => (\n <>\n <Show when={index() > 0}>\n <div class=\"smwb-stack__divider\">{index() === 1 ? firstDivider() : local.divider}</div>\n </Show>\n {child}\n </>\n )}\n </For>\n </Show>\n </div>\n );\n}\n\nexport default Stack;\n"],"mappings":"AAAA,SAAqC,KAAK,MAAM,YAAY,iBAAiB,YAAY,kBAAkB;AAC3G,OAAO,QAAQ;AACf,SAAS,iBAA2B;AAgBpC,MAAM,YAAY,CAAC,MAAoC,MAAM,WAAW,MAAM,QAAQ,QAAQ,CAAC,KAAK;AAEpG,MAAM,aAAa,CAAC,MAClB,OAAO,MAAM,WAAW,wCAAwC,CAAC,MAAM,MAAM,SAAS,MAAM,oBAAoB,CAAC;AAE5G,SAAS,MAAM,OAA6C;AACjE,QAAM,SAAS,WAAW,EAAE,WAAW,UAAmB,SAAS,KAAqB,GAAG,KAAK;AAChG,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,WAAW,gBAAgB,MAAM,MAAM,QAAQ;AAIrD,QAAM,eAAe,gBAAgB,MAAO,SAAS,QAAQ,EAAE,SAAS,IAAI,MAAM,UAAU,MAAU;AAEtG,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,YAAY;AAAA,IACZ,OAAO,GAAG,cAAc,MAAM,KAAK;AAAA,IACnC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,kBAAkB,MAAM;AAAA,MACxB,aAAa,MAAM,OAAO,SAAS;AAAA,MACnC,eAAe,UAAU,MAAM,KAAK;AAAA,MACpC,mBAAmB,UAAU,MAAM,OAAO;AAAA,MAC1C,KAAK,WAAW,MAAM,OAAO;AAAA,MAC7B,GAAI,OAAO,MAAM,UAAU,YAAY,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IACtE;AAAA,GACD;AAAA,MACC,CAAC,KAAK,MAAM,aAAa,GAAG,UAAU,SAAS,GAAG;AAAA,QAChD,CAAC,IAAI,MAAM,SAAS,QAAQ,GAAG;AAAA,WAC5B,CAAC,OAAO,UACP,EAAE;AAAA,cACA,CAAC,KAAK,MAAM,MAAM,IAAI,GAAG;AAAA,gBACvB,CAAC,IAAI,MAAM,uBAAuB,MAAM,MAAM,IAAI,aAAa,IAAI,MAAM,QAAQ,EAAhF,IAAsF;AAAA,cACzF,EAFC,KAEM;AAAA,eACN,MAAM;AAAA,YACT,IACA;AAAA,QACJ,EATC,IASK;AAAA,MACR,EAXC,KAWM;AAAA,IACT,EA3BC;AA6BL;AAEA,IAAO,gBAAQ;","names":[],"file":"stack.jsx"}
@@ -1,4 +1,4 @@
1
- import { Show, mergeProps, splitProps } from "solid-js";
1
+ import { Show, children, mergeProps, splitProps } from "solid-js";
2
2
  import { Dynamic } from "solid-js/web";
3
3
  import cn from "clsx";
4
4
  import { mergeRefs } from "../../../primitives/mergeRefs";
@@ -26,6 +26,8 @@ function AppBar(props) {
26
26
  "color",
27
27
  "ref"
28
28
  ]);
29
+ const content = children(() => local.children);
30
+ const title = children(() => content() ? void 0 : local.title);
29
31
  return <Dynamic
30
32
  component={local.placement === "top" ? "header" : "footer"}
31
33
  {...rest}
@@ -41,11 +43,11 @@ function AppBar(props) {
41
43
  )}
42
44
  >
43
45
  <Show
44
- when={local.children}
46
+ when={content()}
45
47
  fallback={<div class="smwb-appbar__inner">
46
48
  <div class="smwb-appbar__left">
47
- <Show when={local.title}>
48
- <div class="smwb-appbar__left__title">{local.title}</div>
49
+ <Show when={title()}>
50
+ <div class="smwb-appbar__left__title">{title()}</div>
49
51
  </Show>
50
52
  {local.leftContent}
51
53
  </div>
@@ -53,7 +55,7 @@ function AppBar(props) {
53
55
  <div class="smwb-appbar__right">{local.rightContent}</div>
54
56
  </div>}
55
57
  >
56
- {local.children}
58
+ {content()}
57
59
  </Show>
58
60
  </Dynamic>;
59
61
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/navigation/appBar/appBar.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type AppBarColor = \"default\" | \"primary\" | \"secondary\" | \"error\" | \"success\" | \"warning\" | \"info\";\n\nexport interface AppBarProps extends Omit<JSX.HTMLAttributes<HTMLElement>, \"title\"> {\n dense?: boolean;\n position?: \"relative\" | \"static\" | \"absolute\" | \"sticky\" | \"fixed\";\n placement?: \"top\" | \"bottom\";\n leftContent?: JSX.Element;\n midContent?: JSX.Element;\n rightContent?: JSX.Element;\n title?: JSX.Element | string;\n midContentAlign?: \"middle\" | \"left\" | \"right\";\n /** Semantic background color. */\n color?: AppBarColor;\n ref?: Ref<HTMLElement>;\n}\n\nexport function AppBar(props: ParentProps<AppBarProps>): JSX.Element {\n const merged = mergeProps(\n {\n position: \"static\" as const,\n placement: \"top\" as const,\n midContentAlign: \"middle\" as const,\n color: \"default\" as AppBarColor,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"children\",\n \"dense\",\n \"position\",\n \"placement\",\n \"leftContent\",\n \"midContent\",\n \"midContentAlign\",\n \"rightContent\",\n \"title\",\n \"color\",\n \"ref\",\n ]);\n\n return (\n <Dynamic\n component={local.placement === \"top\" ? \"header\" : \"footer\"}\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid=\"app-bar\"\n class={cn(\n \"smwb-appbar\",\n local.class,\n `smwb-${local.position}`,\n `smwb-${local.placement}`,\n { \"smwb-dense\": local.dense },\n local.color !== \"default\" && `smwb-appbar_color-${local.color}`\n )}\n >\n <Show\n when={local.children}\n fallback={\n <div class=\"smwb-appbar__inner\">\n <div class=\"smwb-appbar__left\">\n <Show when={local.title}>\n <div class=\"smwb-appbar__left__title\">{local.title}</div>\n </Show>\n {local.leftContent}\n </div>\n <div class={cn(\"smwb-appbar__mid\", `smwb-${local.midContentAlign}`)}>{local.midContent}</div>\n <div class=\"smwb-appbar__right\">{local.rightContent}</div>\n </div>\n }\n >\n {local.children}\n </Show>\n </Dynamic>\n );\n}\n\nexport default AppBar;\n"],"mappings":"AAAA,SAAqC,MAAM,YAAY,kBAAkB;AACzE,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,SAAS,iBAA2B;AAkB7B,SAAS,OAAO,OAA8C;AACnE,QAAM,SAAS;AAAA,IACb;AAAA,MACE,UAAU;AAAA,MACV,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,OAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,CAAC;AAAA,IACC,WAAW,MAAM,cAAc,QAAQ,WAAW;AAAA,QAC9C;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,YAAY;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,MAAM,QAAQ;AAAA,MACtB,QAAQ,MAAM,SAAS;AAAA,MACvB,EAAE,cAAc,MAAM,MAAM;AAAA,MAC5B,MAAM,UAAU,aAAa,qBAAqB,MAAM,KAAK;AAAA,IAC/D;AAAA,GACD;AAAA,MACC,CAAC;AAAA,IACC,MAAM,MAAM;AAAA,IACZ,UACE,CAAC,IAAI,MAAM,qBAAqB;AAAA,YAC9B,CAAC,IAAI,MAAM,oBAAoB;AAAA,cAC7B,CAAC,KAAK,MAAM,MAAM,OAAO;AAAA,gBACvB,CAAC,IAAI,MAAM,4BAA4B,MAAM,MAAM,EAAlD,IAAwD;AAAA,cAC3D,EAFC,KAEM;AAAA,eACN,MAAM,YAAY;AAAA,YACrB,EALC,IAKK;AAAA,YACN,CAAC,IAAI,OAAO,GAAG,oBAAoB,QAAQ,MAAM,eAAe,EAAE,IAAI,MAAM,WAAW,EAAtF,IAA4F;AAAA,YAC7F,CAAC,IAAI,MAAM,sBAAsB,MAAM,aAAa,EAAnD,IAAyD;AAAA,UAC5D,EATC;AAAA,GAWJ;AAAA,SACE,MAAM,SAAS;AAAA,MAClB,EAhBC,KAgBM;AAAA,IACT,EA/BC;AAiCL;AAEA,IAAO,iBAAQ;","names":[],"file":"appBar.jsx"}
1
+ {"version":3,"sources":["../../../../../../src/components/navigation/appBar/appBar.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type AppBarColor = \"default\" | \"primary\" | \"secondary\" | \"error\" | \"success\" | \"warning\" | \"info\";\n\nexport interface AppBarProps extends Omit<JSX.HTMLAttributes<HTMLElement>, \"title\"> {\n dense?: boolean;\n position?: \"relative\" | \"static\" | \"absolute\" | \"sticky\" | \"fixed\";\n placement?: \"top\" | \"bottom\";\n leftContent?: JSX.Element;\n midContent?: JSX.Element;\n rightContent?: JSX.Element;\n title?: JSX.Element | string;\n midContentAlign?: \"middle\" | \"left\" | \"right\";\n /** Semantic background color. */\n color?: AppBarColor;\n ref?: Ref<HTMLElement>;\n}\n\nexport function AppBar(props: ParentProps<AppBarProps>): JSX.Element {\n const merged = mergeProps(\n {\n position: \"static\" as const,\n placement: \"top\" as const,\n midContentAlign: \"middle\" as const,\n color: \"default\" as AppBarColor,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"children\",\n \"dense\",\n \"position\",\n \"placement\",\n \"leftContent\",\n \"midContent\",\n \"midContentAlign\",\n \"rightContent\",\n \"title\",\n \"color\",\n \"ref\",\n ]);\n\n // Read each slot once: markup passed as a prop is created anew on every read,\n // and during hydration a copy the server never rendered has no DOM node.\n const content = children(() => local.children);\n // The title is drawn only without children, so it is read only then.\n const title = children(() => (content() ? undefined : local.title));\n\n return (\n <Dynamic\n component={local.placement === \"top\" ? \"header\" : \"footer\"}\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid=\"app-bar\"\n class={cn(\n \"smwb-appbar\",\n local.class,\n `smwb-${local.position}`,\n `smwb-${local.placement}`,\n { \"smwb-dense\": local.dense },\n local.color !== \"default\" && `smwb-appbar_color-${local.color}`\n )}\n >\n <Show\n when={content()}\n fallback={\n <div class=\"smwb-appbar__inner\">\n <div class=\"smwb-appbar__left\">\n <Show when={title()}>\n <div class=\"smwb-appbar__left__title\">{title()}</div>\n </Show>\n {local.leftContent}\n </div>\n <div class={cn(\"smwb-appbar__mid\", `smwb-${local.midContentAlign}`)}>{local.midContent}</div>\n <div class=\"smwb-appbar__right\">{local.rightContent}</div>\n </div>\n }\n >\n {content()}\n </Show>\n </Dynamic>\n );\n}\n\nexport default AppBar;\n"],"mappings":"AAAA,SAAqC,MAAM,UAAU,YAAY,kBAAkB;AACnF,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,SAAS,iBAA2B;AAkB7B,SAAS,OAAO,OAA8C;AACnE,QAAM,SAAS;AAAA,IACb;AAAA,MACE,UAAU;AAAA,MACV,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,OAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAID,QAAM,UAAU,SAAS,MAAM,MAAM,QAAQ;AAE7C,QAAM,QAAQ,SAAS,MAAO,QAAQ,IAAI,SAAY,MAAM,KAAM;AAElE,SACE,CAAC;AAAA,IACC,WAAW,MAAM,cAAc,QAAQ,WAAW;AAAA,QAC9C;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,YAAY;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,MAAM,QAAQ;AAAA,MACtB,QAAQ,MAAM,SAAS;AAAA,MACvB,EAAE,cAAc,MAAM,MAAM;AAAA,MAC5B,MAAM,UAAU,aAAa,qBAAqB,MAAM,KAAK;AAAA,IAC/D;AAAA,GACD;AAAA,MACC,CAAC;AAAA,IACC,MAAM,QAAQ;AAAA,IACd,UACE,CAAC,IAAI,MAAM,qBAAqB;AAAA,YAC9B,CAAC,IAAI,MAAM,oBAAoB;AAAA,cAC7B,CAAC,KAAK,MAAM,MAAM,GAAG;AAAA,gBACnB,CAAC,IAAI,MAAM,4BAA4B,MAAM,EAAE,EAA9C,IAAoD;AAAA,cACvD,EAFC,KAEM;AAAA,eACN,MAAM,YAAY;AAAA,YACrB,EALC,IAKK;AAAA,YACN,CAAC,IAAI,OAAO,GAAG,oBAAoB,QAAQ,MAAM,eAAe,EAAE,IAAI,MAAM,WAAW,EAAtF,IAA4F;AAAA,YAC7F,CAAC,IAAI,MAAM,sBAAsB,MAAM,aAAa,EAAnD,IAAyD;AAAA,UAC5D,EATC;AAAA,GAWJ;AAAA,SACE,QAAQ,EAAE;AAAA,MACb,EAhBC,KAgBM;AAAA,IACT,EA/BC;AAiCL;AAEA,IAAO,iBAAQ;","names":[],"file":"appBar.jsx"}
@@ -1,4 +1,4 @@
1
- import { For, Show, children, createSignal, mergeProps, splitProps } from "solid-js";
1
+ import { For, Show, children, createMemo, createSignal, mergeProps, splitProps } from "solid-js";
2
2
  import { Dynamic } from "solid-js/web";
3
3
  import cn from "clsx";
4
4
  import { Icon } from "../../base/icon";
@@ -61,9 +61,10 @@ function BottomBar(props) {
61
61
  });
62
62
  const [overflowOpen, setOverflowOpen] = createSignal(false);
63
63
  const [overflowAnchor, setOverflowAnchor] = createSignal(null);
64
+ const menuItems = createMemo(() => local.menuItems);
64
65
  const safeVisibleCount = () => Math.max(0, local.visibleCount);
65
- const visibleItems = () => local.menuItems.slice(0, safeVisibleCount());
66
- const overflowItems = () => local.menuItems.slice(safeVisibleCount());
66
+ const visibleItems = () => menuItems().slice(0, safeVisibleCount());
67
+ const overflowItems = () => menuItems().slice(safeVisibleCount());
67
68
  const hasOverflow = () => overflowItems().length > 0;
68
69
  const overflowActive = () => hasOverflow() && activeItem() !== null && activeItem() >= safeVisibleCount();
69
70
  return <nav {...rest} ref={mergeRefs(local.ref)} class={cn("smwb-bottom-bar", local.class)} role="navigation">
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/navigation/bottomBar/bottomBar.tsx"],"sourcesContent":["import { type JSX, For, Show, children, createSignal, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { Ripple, type RippleActionsRef } from \"../../base/ripple\";\nimport { Menu, MenuItem, MenuItemIcon, MenuItemText } from \"../menu\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport type { SidebarMenuItemProps } from \"../sidebar/sidebar\";\n\nexport type BottomBarMenuItemProps = SidebarMenuItemProps;\n\nexport interface BottomBarProps extends JSX.HTMLAttributes<HTMLElement> {\n menuItems?: SidebarMenuItemProps[];\n visibleCount?: number;\n activeItem?: number | null;\n defaultActiveItem?: number | null;\n onActiveItemChange?: (index: number) => void;\n overflowMenuAriaLabel?: string;\n ref?: Ref<HTMLElement>;\n}\n\ninterface BarItemProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"title\"> {\n icon?: JSX.Element;\n title?: string;\n isActive?: boolean;\n as?: string | undefined;\n href?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nfunction BarItem(props: BarItemProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"isActive\", \"icon\", \"title\", \"as\", \"href\", \"ref\"]);\n let rippleActions: RippleActionsRef | undefined;\n // Resolve the icon in this item's context so a pre-created element passed via\n // menuItems hydrates (see the same fix in Sidebar/AppLayout).\n const icon = children(() => local.icon);\n const onPointerDown = (event: PointerEvent): void => {\n rippleActions?.onRipple(event);\n };\n return (\n <Dynamic\n component={local.as ?? \"div\"}\n ref={mergeRefs(local.ref)}\n href={local.href}\n role=\"menuitem\"\n class={cn(\"smwb-bottom-bar__item\", { \"smwb-bottom-bar__item_active\": local.isActive })}\n onPointerDown={onPointerDown}\n {...rest}\n >\n <Show when={icon()}>\n <span class=\"smwb-bottom-bar__item-icon\">{icon()}</span>\n </Show>\n <Show when={local.title}>\n <span class=\"smwb-bottom-bar__item-title\">{local.title}</span>\n </Show>\n <Ripple actionRef={(actions) => (rippleActions = actions)} />\n </Dynamic>\n );\n}\n\nexport function BottomBar(props: BottomBarProps): JSX.Element {\n const merged = mergeProps(\n {\n menuItems: [] as SidebarMenuItemProps[],\n visibleCount: 4,\n defaultActiveItem: null as number | null,\n overflowMenuAriaLabel: \"More navigation\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"menuItems\",\n \"visibleCount\",\n \"activeItem\",\n \"defaultActiveItem\",\n \"onActiveItemChange\",\n \"overflowMenuAriaLabel\",\n \"ref\",\n ]);\n\n const [activeItem, setActiveItem] = createControllableState<number | null>({\n value: () => local.activeItem,\n defaultValue: local.defaultActiveItem,\n onChange: (next) => {\n if (next !== null) local.onActiveItemChange?.(next);\n },\n });\n const [overflowOpen, setOverflowOpen] = createSignal(false);\n const [overflowAnchor, setOverflowAnchor] = createSignal<HTMLElement | null>(null);\n\n const safeVisibleCount = (): number => Math.max(0, local.visibleCount);\n const visibleItems = (): SidebarMenuItemProps[] => local.menuItems.slice(0, safeVisibleCount());\n const overflowItems = (): SidebarMenuItemProps[] => local.menuItems.slice(safeVisibleCount());\n const hasOverflow = (): boolean => overflowItems().length > 0;\n const overflowActive = (): boolean =>\n hasOverflow() && activeItem() !== null && (activeItem() as number) >= safeVisibleCount();\n\n return (\n <nav {...rest} ref={mergeRefs(local.ref)} class={cn(\"smwb-bottom-bar\", local.class)} role=\"navigation\">\n <div class=\"smwb-bottom-bar__nav\" role=\"menubar\">\n <For each={visibleItems()}>\n {(item, idx) => (\n <BarItem\n as={item.as}\n isActive={activeItem() === idx()}\n onClick={(event) => {\n setActiveItem(idx());\n callHandler(item.onClick, event);\n }}\n icon={item.icon}\n title={item.title}\n href={item.href}\n />\n )}\n </For>\n <Show when={hasOverflow()}>\n <BarItem\n ref={(el) => setOverflowAnchor(el as HTMLElement)}\n isActive={overflowActive()}\n onClick={() => setOverflowOpen((prev) => !prev)}\n icon={<Icon name=\"menu\" size={24} />}\n aria-label={local.overflowMenuAriaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={overflowOpen()}\n />\n </Show>\n </div>\n <Show when={hasOverflow()}>\n <Menu\n isOpen={overflowOpen()}\n onClose={() => setOverflowOpen(false)}\n anchorElement={overflowAnchor()}\n placement=\"top\"\n dense\n >\n <For each={overflowItems()}>\n {(item, idx) => {\n const itemIndex = (): number => safeVisibleCount() + idx();\n return (\n <MenuItem\n selected={activeItem() === itemIndex()}\n href={item.href}\n onClick={(event) => {\n setActiveItem(itemIndex());\n callHandler(\n item.onClick,\n event as unknown as MouseEvent & { currentTarget: HTMLDivElement; target: Element }\n );\n setOverflowOpen(false);\n }}\n >\n <Show when={item.icon}>\n <MenuItemIcon>{item.icon}</MenuItemIcon>\n </Show>\n <MenuItemText inset={!item.icon}>{item.title}</MenuItemText>\n </MenuItem>\n );\n }}\n </For>\n </Menu>\n </Show>\n </nav>\n );\n}\n\nexport default BottomBar;\n"],"mappings":"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","names":[],"file":"bottomBar.jsx"}
1
+ {"version":3,"sources":["../../../../../../src/components/navigation/bottomBar/bottomBar.tsx"],"sourcesContent":["import { type JSX, For, Show, children, createMemo, createSignal, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { Ripple, type RippleActionsRef } from \"../../base/ripple\";\nimport { Menu, MenuItem, MenuItemIcon, MenuItemText } from \"../menu\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport type { SidebarMenuItemProps } from \"../sidebar/sidebar\";\n\nexport type BottomBarMenuItemProps = SidebarMenuItemProps;\n\nexport interface BottomBarProps extends JSX.HTMLAttributes<HTMLElement> {\n menuItems?: SidebarMenuItemProps[];\n visibleCount?: number;\n activeItem?: number | null;\n defaultActiveItem?: number | null;\n onActiveItemChange?: (index: number) => void;\n overflowMenuAriaLabel?: string;\n ref?: Ref<HTMLElement>;\n}\n\ninterface BarItemProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"title\"> {\n icon?: JSX.Element;\n title?: string;\n isActive?: boolean;\n as?: string | undefined;\n href?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nfunction BarItem(props: BarItemProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"isActive\", \"icon\", \"title\", \"as\", \"href\", \"ref\"]);\n let rippleActions: RippleActionsRef | undefined;\n // Resolve the icon in this item's context so a pre-created element passed via\n // menuItems hydrates (see the same fix in Sidebar/AppLayout).\n const icon = children(() => local.icon);\n const onPointerDown = (event: PointerEvent): void => {\n rippleActions?.onRipple(event);\n };\n return (\n <Dynamic\n component={local.as ?? \"div\"}\n ref={mergeRefs(local.ref)}\n href={local.href}\n role=\"menuitem\"\n class={cn(\"smwb-bottom-bar__item\", { \"smwb-bottom-bar__item_active\": local.isActive })}\n onPointerDown={onPointerDown}\n {...rest}\n >\n <Show when={icon()}>\n <span class=\"smwb-bottom-bar__item-icon\">{icon()}</span>\n </Show>\n <Show when={local.title}>\n <span class=\"smwb-bottom-bar__item-title\">{local.title}</span>\n </Show>\n <Ripple actionRef={(actions) => (rippleActions = actions)} />\n </Dynamic>\n );\n}\n\nexport function BottomBar(props: BottomBarProps): JSX.Element {\n const merged = mergeProps(\n {\n menuItems: [] as SidebarMenuItemProps[],\n visibleCount: 4,\n defaultActiveItem: null as number | null,\n overflowMenuAriaLabel: \"More navigation\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"menuItems\",\n \"visibleCount\",\n \"activeItem\",\n \"defaultActiveItem\",\n \"onActiveItemChange\",\n \"overflowMenuAriaLabel\",\n \"ref\",\n ]);\n\n const [activeItem, setActiveItem] = createControllableState<number | null>({\n value: () => local.activeItem,\n defaultValue: local.defaultActiveItem,\n onChange: (next) => {\n if (next !== null) local.onActiveItemChange?.(next);\n },\n });\n const [overflowOpen, setOverflowOpen] = createSignal(false);\n const [overflowAnchor, setOverflowAnchor] = createSignal<HTMLElement | null>(null);\n\n // Read menuItems once. An inline array literal is re-evaluated on every read,\n // re-creating the icons in it; during hydration an icon created by a read that\n // renders nothing (e.g. the overflow check) has no server DOM node to adopt.\n const menuItems = createMemo(() => local.menuItems);\n const safeVisibleCount = (): number => Math.max(0, local.visibleCount);\n const visibleItems = (): SidebarMenuItemProps[] => menuItems().slice(0, safeVisibleCount());\n const overflowItems = (): SidebarMenuItemProps[] => menuItems().slice(safeVisibleCount());\n const hasOverflow = (): boolean => overflowItems().length > 0;\n const overflowActive = (): boolean =>\n hasOverflow() && activeItem() !== null && (activeItem() as number) >= safeVisibleCount();\n\n return (\n <nav {...rest} ref={mergeRefs(local.ref)} class={cn(\"smwb-bottom-bar\", local.class)} role=\"navigation\">\n <div class=\"smwb-bottom-bar__nav\" role=\"menubar\">\n <For each={visibleItems()}>\n {(item, idx) => (\n <BarItem\n as={item.as}\n isActive={activeItem() === idx()}\n onClick={(event) => {\n setActiveItem(idx());\n callHandler(item.onClick, event);\n }}\n icon={item.icon}\n title={item.title}\n href={item.href}\n />\n )}\n </For>\n <Show when={hasOverflow()}>\n <BarItem\n ref={(el) => setOverflowAnchor(el as HTMLElement)}\n isActive={overflowActive()}\n onClick={() => setOverflowOpen((prev) => !prev)}\n icon={<Icon name=\"menu\" size={24} />}\n aria-label={local.overflowMenuAriaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={overflowOpen()}\n />\n </Show>\n </div>\n <Show when={hasOverflow()}>\n <Menu\n isOpen={overflowOpen()}\n onClose={() => setOverflowOpen(false)}\n anchorElement={overflowAnchor()}\n placement=\"top\"\n dense\n >\n <For each={overflowItems()}>\n {(item, idx) => {\n const itemIndex = (): number => safeVisibleCount() + idx();\n return (\n <MenuItem\n selected={activeItem() === itemIndex()}\n href={item.href}\n onClick={(event) => {\n setActiveItem(itemIndex());\n callHandler(\n item.onClick,\n event as unknown as MouseEvent & { currentTarget: HTMLDivElement; target: Element }\n );\n setOverflowOpen(false);\n }}\n >\n <Show when={item.icon}>\n <MenuItemIcon>{item.icon}</MenuItemIcon>\n </Show>\n <MenuItemText inset={!item.icon}>{item.title}</MenuItemText>\n </MenuItem>\n );\n }}\n </For>\n </Menu>\n </Show>\n </nav>\n );\n}\n\nexport default BottomBar;\n"],"mappings":"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","names":[],"file":"bottomBar.jsx"}
@@ -1,7 +1,8 @@
1
- import { For, Show, mergeProps, splitProps } from "solid-js";
1
+ import { For, Show, createMemo, mergeProps, splitProps } from "solid-js";
2
2
  import cn from "clsx";
3
3
  import { Icon } from "../../base/icon";
4
4
  import { mergeRefs } from "../../../primitives/mergeRefs";
5
+ const AUTO_MAX_STEPS = 12;
5
6
  function Stepper(props) {
6
7
  const merged = mergeProps({ orientation: "horizontal", alternativeLabel: false }, props);
7
8
  const [local, rest] = splitProps(merged, [
@@ -13,22 +14,25 @@ function Stepper(props) {
13
14
  "onStepClick",
14
15
  "ref"
15
16
  ]);
16
- return <div
17
+ const steps = createMemo(() => local.steps);
18
+ const auto = () => local.orientation === "auto";
19
+ const stepper = () => <div
17
20
  {...rest}
18
21
  ref={mergeRefs(local.ref)}
19
22
  data-testid="stepper"
23
+ data-steps={auto() ? String(Math.min(steps().length, AUTO_MAX_STEPS)) : void 0}
20
24
  class={cn(
21
25
  "smwb-stepper",
22
- `smwb-stepper_${local.orientation}`,
23
- { "smwb-stepper_alt-label": local.alternativeLabel && local.orientation === "horizontal" },
26
+ auto() ? "smwb-stepper_horizontal smwb-stepper_auto" : `smwb-stepper_${local.orientation}`,
27
+ { "smwb-stepper_alt-label": local.alternativeLabel && local.orientation !== "vertical" },
24
28
  local.class
25
29
  )}
26
30
  >
27
- <For each={local.steps}>
31
+ <For each={steps()}>
28
32
  {(step, index) => {
29
33
  const completed = () => index() < local.activeStep;
30
34
  const active = () => index() === local.activeStep;
31
- const isLast = () => index() === local.steps.length - 1;
35
+ const isLast = () => index() === steps().length - 1;
32
36
  const clickable = () => Boolean(local.onStepClick) && !step.disabled;
33
37
  return <>
34
38
  <div
@@ -61,7 +65,7 @@ function Stepper(props) {
61
65
  <Show when={step.optional}>
62
66
  <span class="smwb-stepper__optional">{step.optional}</span>
63
67
  </Show>
64
- <Show when={step.description && local.orientation === "vertical"}>
68
+ <Show when={step.description}>
65
69
  <span class="smwb-stepper__description">{step.description}</span>
66
70
  </Show>
67
71
  </div>
@@ -73,6 +77,9 @@ function Stepper(props) {
73
77
  }}
74
78
  </For>
75
79
  </div>;
80
+ return <Show when={auto()} fallback={stepper()}>
81
+ <div class="smwb-stepper-auto">{stepper()}</div>
82
+ </Show>;
76
83
  }
77
84
  var stepper_default = Stepper;
78
85
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/navigation/stepper/stepper.tsx"],"sourcesContent":["import { type JSX, For, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface StepItem {\n label: JSX.Element;\n description?: JSX.Element;\n optional?: JSX.Element;\n /** Marks the step as errored. */\n error?: boolean;\n /** Disables interaction with the step. */\n disabled?: boolean;\n /** Custom icon overriding the default number/check. */\n icon?: JSX.Element;\n}\n\nexport interface StepperProps extends JSX.HTMLAttributes<HTMLDivElement> {\n steps: StepItem[];\n /** Index of the active (current) step. */\n activeStep: number;\n orientation?: \"horizontal\" | \"vertical\";\n /** Place the label under the icon (horizontal only). */\n alternativeLabel?: boolean;\n /** Makes steps clickable; receives the clicked step index. */\n onStepClick?: (index: number) => void;\n ref?: Ref<HTMLDivElement>;\n}\n\nexport function Stepper(props: StepperProps): JSX.Element {\n const merged = mergeProps({ orientation: \"horizontal\" as const, alternativeLabel: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"steps\",\n \"activeStep\",\n \"orientation\",\n \"alternativeLabel\",\n \"onStepClick\",\n \"ref\",\n ]);\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid=\"stepper\"\n class={cn(\n \"smwb-stepper\",\n `smwb-stepper_${local.orientation}`,\n { \"smwb-stepper_alt-label\": local.alternativeLabel && local.orientation === \"horizontal\" },\n local.class\n )}\n >\n <For each={local.steps}>\n {(step, index) => {\n const completed = (): boolean => index() < local.activeStep;\n const active = (): boolean => index() === local.activeStep;\n const isLast = (): boolean => index() === local.steps.length - 1;\n const clickable = (): boolean => Boolean(local.onStepClick) && !step.disabled;\n\n return (\n <>\n <div\n class={cn(\"smwb-stepper__step\", {\n \"smwb-stepper__step_active\": active(),\n \"smwb-stepper__step_completed\": completed(),\n \"smwb-stepper__step_error\": step.error,\n \"smwb-stepper__step_disabled\": step.disabled,\n \"smwb-stepper__step_clickable\": clickable(),\n })}\n aria-current={active() ? \"step\" : undefined}\n aria-disabled={step.disabled || undefined}\n role={clickable() ? \"button\" : undefined}\n tabindex={clickable() ? 0 : undefined}\n onClick={clickable() ? () => local.onStepClick?.(index()) : undefined}\n onKeyDown={\n clickable()\n ? (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n local.onStepClick?.(index());\n }\n }\n : undefined\n }\n >\n <div class=\"smwb-stepper__icon\" aria-hidden=\"true\">\n <Show when={step.icon} fallback={completed() ? <Icon name=\"check\" size={16} /> : <span>{index() + 1}</span>}>\n {step.icon}\n </Show>\n </div>\n <div class=\"smwb-stepper__text\">\n <span class=\"smwb-stepper__label\">{step.label}</span>\n <Show when={step.optional}>\n <span class=\"smwb-stepper__optional\">{step.optional}</span>\n </Show>\n <Show when={step.description && local.orientation === \"vertical\"}>\n <span class=\"smwb-stepper__description\">{step.description}</span>\n </Show>\n </div>\n </div>\n <Show when={!isLast()}>\n <div class=\"smwb-stepper__connector\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n }}\n </For>\n </div>\n );\n}\n\nexport default Stepper;\n"],"mappings":"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","names":[],"file":"stepper.jsx"}
1
+ {"version":3,"sources":["../../../../../../src/components/navigation/stepper/stepper.tsx"],"sourcesContent":["import { type JSX, For, Show, createMemo, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface StepItem {\n label: JSX.Element;\n /** Longer text under the label, in every orientation. */\n description?: JSX.Element;\n optional?: JSX.Element;\n /** Marks the step as errored. */\n error?: boolean;\n /** Disables interaction with the step. */\n disabled?: boolean;\n /** Custom icon overriding the default number/check. */\n icon?: JSX.Element;\n}\n\n/**\n * `auto` lays the steps out in a row while the stepper's container is wide\n * enough for them — about 8rem per step, a theme variable — and in a column when\n * it is not. It is a CSS container query, so the server renders the same markup\n * and nothing changes on hydration.\n */\nexport type StepperOrientation = \"horizontal\" | \"vertical\" | \"auto\";\n\nexport interface StepperProps extends JSX.HTMLAttributes<HTMLDivElement> {\n steps: StepItem[];\n /** Index of the active (current) step. */\n activeStep: number;\n orientation?: StepperOrientation;\n /** Place the label under the icon (in a row: horizontal, or auto while wide). */\n alternativeLabel?: boolean;\n /** Makes steps clickable; receives the clicked step index. */\n onStepClick?: (index: number) => void;\n ref?: Ref<HTMLDivElement>;\n}\n\n/** Step counts with their own `auto` breakpoint; longer steppers use the last one. */\nconst AUTO_MAX_STEPS = 12;\n\nexport function Stepper(props: StepperProps): JSX.Element {\n const merged = mergeProps({ orientation: \"horizontal\" as StepperOrientation, alternativeLabel: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"steps\",\n \"activeStep\",\n \"orientation\",\n \"alternativeLabel\",\n \"onStepClick\",\n \"ref\",\n ]);\n\n // Read the steps once. An inline array is re-evaluated on every read, creating\n // the markup in it (icons, labels, descriptions) again; during hydration a copy\n // that is not the rendered one has no server DOM node to adopt.\n const steps = createMemo(() => local.steps);\n const auto = (): boolean => local.orientation === \"auto\";\n\n const stepper = (): JSX.Element => (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid=\"stepper\"\n data-steps={auto() ? String(Math.min(steps().length, AUTO_MAX_STEPS)) : undefined}\n class={cn(\n \"smwb-stepper\",\n auto() ? \"smwb-stepper_horizontal smwb-stepper_auto\" : `smwb-stepper_${local.orientation}`,\n { \"smwb-stepper_alt-label\": local.alternativeLabel && local.orientation !== \"vertical\" },\n local.class\n )}\n >\n <For each={steps()}>\n {(step, index) => {\n const completed = (): boolean => index() < local.activeStep;\n const active = (): boolean => index() === local.activeStep;\n const isLast = (): boolean => index() === steps().length - 1;\n const clickable = (): boolean => Boolean(local.onStepClick) && !step.disabled;\n\n return (\n <>\n <div\n class={cn(\"smwb-stepper__step\", {\n \"smwb-stepper__step_active\": active(),\n \"smwb-stepper__step_completed\": completed(),\n \"smwb-stepper__step_error\": step.error,\n \"smwb-stepper__step_disabled\": step.disabled,\n \"smwb-stepper__step_clickable\": clickable(),\n })}\n aria-current={active() ? \"step\" : undefined}\n aria-disabled={step.disabled || undefined}\n role={clickable() ? \"button\" : undefined}\n tabindex={clickable() ? 0 : undefined}\n onClick={clickable() ? () => local.onStepClick?.(index()) : undefined}\n onKeyDown={\n clickable()\n ? (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n local.onStepClick?.(index());\n }\n }\n : undefined\n }\n >\n <div class=\"smwb-stepper__icon\" aria-hidden=\"true\">\n <Show when={step.icon} fallback={completed() ? <Icon name=\"check\" size={16} /> : <span>{index() + 1}</span>}>\n {step.icon}\n </Show>\n </div>\n <div class=\"smwb-stepper__text\">\n <span class=\"smwb-stepper__label\">{step.label}</span>\n <Show when={step.optional}>\n <span class=\"smwb-stepper__optional\">{step.optional}</span>\n </Show>\n <Show when={step.description}>\n <span class=\"smwb-stepper__description\">{step.description}</span>\n </Show>\n </div>\n </div>\n <Show when={!isLast()}>\n <div class=\"smwb-stepper__connector\" aria-hidden=\"true\" />\n </Show>\n </>\n );\n }}\n </For>\n </div>\n );\n\n // `auto` needs a query container around the stepper: its own flex direction is\n // what the container query switches.\n return (\n <Show when={auto()} fallback={stepper()}>\n <div class=\"smwb-stepper-auto\">{stepper()}</div>\n </Show>\n );\n}\n\nexport default Stepper;\n"],"mappings":"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","names":[],"file":"stepper.jsx"}
@@ -1,4 +1,4 @@
1
- import { Show, mergeProps, splitProps } from "solid-js";
1
+ import { Show, children, mergeProps, splitProps } from "solid-js";
2
2
  import { Dynamic } from "solid-js/web";
3
3
  import cn from "clsx";
4
4
  import { Ripple } from "../../../base/ripple";
@@ -21,6 +21,8 @@ function Tab(props) {
21
21
  "onClick",
22
22
  "ref"
23
23
  ]);
24
+ const icon = children(() => local.icon);
25
+ const label = children(() => local.label);
24
26
  let rippleActions;
25
27
  const active = () => ctx ? ctx.value() === index : local.isActive;
26
28
  const onClick = (event) => {
@@ -57,11 +59,11 @@ function Tab(props) {
57
59
  if (ctx?.indicatorContent) ctx.setContentRef(index, el);
58
60
  })}
59
61
  >
60
- <Show when={local.icon}>
61
- <span class="smwb-tab__icon">{local.icon}</span>
62
+ <Show when={icon()}>
63
+ <span class="smwb-tab__icon">{icon()}</span>
62
64
  </Show>
63
- <Show when={local.label}>
64
- <span class="smwb-tab__text-label">{local.label}</span>
65
+ <Show when={label()}>
66
+ <span class="smwb-tab__text-label">{label()}</span>
65
67
  </Show>
66
68
  </span>
67
69
  <Ripple actionRef={(actions) => rippleActions = actions} classes={{ child: "tab__ripple-child" }} />
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/navigation/tabs/tab/tab.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Ripple, type RippleActionsRef } from \"../../../base/ripple\";\nimport { useTabsContext } from \"../tabsContext\";\nimport { mergeRefs, type Ref } from \"../../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../../primitives/callHandler\";\n\nexport interface TabProps extends JSX.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n label?: JSX.Element;\n isActive?: boolean;\n contentRef?: Ref<HTMLSpanElement>;\n icon?: JSX.Element;\n stacked?: boolean;\n tag?: string;\n disabled?: boolean;\n ref?: Ref<HTMLButtonElement | HTMLAnchorElement>;\n}\n\nexport function Tab(props: ParentProps<TabProps>): JSX.Element {\n const ctx = useTabsContext();\n const index = ctx ? ctx.registerTab() : -1;\n const merged = mergeProps({ isActive: false, stacked: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"label\",\n \"isActive\",\n \"contentRef\",\n \"icon\",\n \"stacked\",\n \"tag\",\n \"disabled\",\n \"onClick\",\n \"ref\",\n ]);\n\n let rippleActions: RippleActionsRef | undefined;\n\n const active = (): boolean => (ctx ? ctx.value() === index : local.isActive);\n\n const onClick: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, MouseEvent> = (event) => {\n if (ctx) {\n ctx.onChange(event, index);\n } else {\n callHandler(local.onClick, event);\n }\n };\n\n const onPointerDown = (event: PointerEvent): void => {\n rippleActions?.onRipple(event);\n };\n\n const tag = (): string => local.tag ?? \"button\";\n\n return (\n <Dynamic\n component={tag()}\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\"smwb-tab\", local.class, {\n \"smwb-tab--active\": active(),\n \"smwb-tab--stacked\": local.stacked,\n \"smwb-tab--disabled\": local.disabled,\n })}\n onClick={onClick}\n onPointerDown={onPointerDown}\n role=\"tab\"\n aria-selected={active()}\n aria-disabled={local.disabled || undefined}\n tabindex={active() ? 0 : -1}\n disabled={tag() === \"button\" ? local.disabled : undefined}\n >\n <span\n class=\"smwb-tab__content\"\n ref={mergeRefs(local.contentRef, (el) => {\n if (ctx?.indicatorContent) ctx.setContentRef(index, el as HTMLSpanElement);\n })}\n >\n <Show when={local.icon}>\n <span class=\"smwb-tab__icon\">{local.icon}</span>\n </Show>\n <Show when={local.label}>\n <span class=\"smwb-tab__text-label\">{local.label}</span>\n </Show>\n </span>\n <Ripple actionRef={(actions) => (rippleActions = actions)} classes={{ child: \"tab__ripple-child\" }} />\n </Dynamic>\n );\n}\n\nexport default Tab;\n"],"mappings":"AAAA,SAAqC,MAAM,YAAY,kBAAkB;AACzE,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,SAAS,cAAqC;AAC9C,SAAS,sBAAsB;AAC/B,SAAS,iBAA2B;AACpC,SAAS,mBAAmB;AAarB,SAAS,IAAI,OAA2C;AAC7D,QAAM,MAAM,eAAe;AAC3B,QAAM,QAAQ,MAAM,IAAI,YAAY,IAAI;AACxC,QAAM,SAAS,WAAW,EAAE,UAAU,OAAO,SAAS,MAAM,GAAG,KAAK;AACpE,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI;AAEJ,QAAM,SAAS,MAAgB,MAAM,IAAI,MAAM,MAAM,QAAQ,MAAM;AAEnE,QAAM,UAA+E,CAAC,UAAU;AAC9F,QAAI,KAAK;AACP,UAAI,SAAS,OAAO,KAAK;AAAA,IAC3B,OAAO;AACL,kBAAY,MAAM,SAAS,KAAK;AAAA,IAClC;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,UAA8B;AACnD,mBAAe,SAAS,KAAK;AAAA,EAC/B;AAEA,QAAM,MAAM,MAAc,MAAM,OAAO;AAEvC,SACE,CAAC;AAAA,IACC,WAAW,IAAI;AAAA,QACX;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO,GAAG,YAAY,MAAM,OAAO;AAAA,MACjC,oBAAoB,OAAO;AAAA,MAC3B,qBAAqB,MAAM;AAAA,MAC3B,sBAAsB,MAAM;AAAA,IAC9B,CAAC;AAAA,IACD,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,eAAe,MAAM,YAAY;AAAA,IACjC,UAAU,OAAO,IAAI,IAAI;AAAA,IACzB,UAAU,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,GACjD;AAAA,MACC,CAAC;AAAA,IACC,MAAM;AAAA,IACN,KAAK,UAAU,MAAM,YAAY,CAAC,OAAO;AACvC,UAAI,KAAK,iBAAkB,KAAI,cAAc,OAAO,EAAqB;AAAA,IAC3E,CAAC;AAAA,GACF;AAAA,QACC,CAAC,KAAK,MAAM,MAAM,MAAM;AAAA,UACtB,CAAC,KAAK,MAAM,kBAAkB,MAAM,KAAK,EAAxC,KAA+C;AAAA,QAClD,EAFC,KAEM;AAAA,QACP,CAAC,KAAK,MAAM,MAAM,OAAO;AAAA,UACvB,CAAC,KAAK,MAAM,wBAAwB,MAAM,MAAM,EAA/C,KAAsD;AAAA,QACzD,EAFC,KAEM;AAAA,MACT,EAZC,KAYM;AAAA,MACP,CAAC,OAAO,WAAW,CAAC,YAAa,gBAAgB,SAAU,SAAS,EAAE,OAAO,oBAAoB,GAAG,EAAE;AAAA,IACxG,EA/BC;AAiCL;AAEA,IAAO,cAAQ;","names":[],"file":"tab.jsx"}
1
+ {"version":3,"sources":["../../../../../../../src/components/navigation/tabs/tab/tab.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, mergeProps, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { Ripple, type RippleActionsRef } from \"../../../base/ripple\";\nimport { useTabsContext } from \"../tabsContext\";\nimport { mergeRefs, type Ref } from \"../../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../../primitives/callHandler\";\n\nexport interface TabProps extends JSX.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n label?: JSX.Element;\n isActive?: boolean;\n contentRef?: Ref<HTMLSpanElement>;\n icon?: JSX.Element;\n stacked?: boolean;\n tag?: string;\n /** With `tag=\"a\"`: where the link goes, so the tab stays a real link. */\n href?: string;\n disabled?: boolean;\n ref?: Ref<HTMLButtonElement | HTMLAnchorElement>;\n}\n\nexport function Tab(props: ParentProps<TabProps>): JSX.Element {\n const ctx = useTabsContext();\n const index = ctx ? ctx.registerTab() : -1;\n const merged = mergeProps({ isActive: false, stacked: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"label\",\n \"isActive\",\n \"contentRef\",\n \"icon\",\n \"stacked\",\n \"tag\",\n \"disabled\",\n \"onClick\",\n \"ref\",\n ]);\n\n // Read the icon and the label once: markup passed as a prop is created anew on\n // every read, and during hydration the copy made for the <Show> test has no\n // server DOM node to adopt (\"Unable to find DOM nodes for hydration key\").\n const icon = children(() => local.icon);\n const label = children(() => local.label);\n\n let rippleActions: RippleActionsRef | undefined;\n\n const active = (): boolean => (ctx ? ctx.value() === index : local.isActive);\n\n const onClick: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, MouseEvent> = (event) => {\n if (ctx) {\n ctx.onChange(event, index);\n } else {\n callHandler(local.onClick, event);\n }\n };\n\n const onPointerDown = (event: PointerEvent): void => {\n rippleActions?.onRipple(event);\n };\n\n const tag = (): string => local.tag ?? \"button\";\n\n return (\n <Dynamic\n component={tag()}\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\"smwb-tab\", local.class, {\n \"smwb-tab--active\": active(),\n \"smwb-tab--stacked\": local.stacked,\n \"smwb-tab--disabled\": local.disabled,\n })}\n onClick={onClick}\n onPointerDown={onPointerDown}\n role=\"tab\"\n aria-selected={active()}\n aria-disabled={local.disabled || undefined}\n tabindex={active() ? 0 : -1}\n disabled={tag() === \"button\" ? local.disabled : undefined}\n >\n <span\n class=\"smwb-tab__content\"\n ref={mergeRefs(local.contentRef, (el) => {\n if (ctx?.indicatorContent) ctx.setContentRef(index, el as HTMLSpanElement);\n })}\n >\n <Show when={icon()}>\n <span class=\"smwb-tab__icon\">{icon()}</span>\n </Show>\n <Show when={label()}>\n <span class=\"smwb-tab__text-label\">{label()}</span>\n </Show>\n </span>\n <Ripple actionRef={(actions) => (rippleActions = actions)} classes={{ child: \"tab__ripple-child\" }} />\n </Dynamic>\n );\n}\n\nexport default Tab;\n"],"mappings":"AAAA,SAAqC,MAAM,UAAU,YAAY,kBAAkB;AACnF,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,SAAS,cAAqC;AAC9C,SAAS,sBAAsB;AAC/B,SAAS,iBAA2B;AACpC,SAAS,mBAAmB;AAerB,SAAS,IAAI,OAA2C;AAC7D,QAAM,MAAM,eAAe;AAC3B,QAAM,QAAQ,MAAM,IAAI,YAAY,IAAI;AACxC,QAAM,SAAS,WAAW,EAAE,UAAU,OAAO,SAAS,MAAM,GAAG,KAAK;AACpE,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAKD,QAAM,OAAO,SAAS,MAAM,MAAM,IAAI;AACtC,QAAM,QAAQ,SAAS,MAAM,MAAM,KAAK;AAExC,MAAI;AAEJ,QAAM,SAAS,MAAgB,MAAM,IAAI,MAAM,MAAM,QAAQ,MAAM;AAEnE,QAAM,UAA+E,CAAC,UAAU;AAC9F,QAAI,KAAK;AACP,UAAI,SAAS,OAAO,KAAK;AAAA,IAC3B,OAAO;AACL,kBAAY,MAAM,SAAS,KAAK;AAAA,IAClC;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,UAA8B;AACnD,mBAAe,SAAS,KAAK;AAAA,EAC/B;AAEA,QAAM,MAAM,MAAc,MAAM,OAAO;AAEvC,SACE,CAAC;AAAA,IACC,WAAW,IAAI;AAAA,QACX;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO,GAAG,YAAY,MAAM,OAAO;AAAA,MACjC,oBAAoB,OAAO;AAAA,MAC3B,qBAAqB,MAAM;AAAA,MAC3B,sBAAsB,MAAM;AAAA,IAC9B,CAAC;AAAA,IACD,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,eAAe,MAAM,YAAY;AAAA,IACjC,UAAU,OAAO,IAAI,IAAI;AAAA,IACzB,UAAU,IAAI,MAAM,WAAW,MAAM,WAAW;AAAA,GACjD;AAAA,MACC,CAAC;AAAA,IACC,MAAM;AAAA,IACN,KAAK,UAAU,MAAM,YAAY,CAAC,OAAO;AACvC,UAAI,KAAK,iBAAkB,KAAI,cAAc,OAAO,EAAqB;AAAA,IAC3E,CAAC;AAAA,GACF;AAAA,QACC,CAAC,KAAK,MAAM,KAAK,GAAG;AAAA,UAClB,CAAC,KAAK,MAAM,kBAAkB,KAAK,EAAE,EAApC,KAA2C;AAAA,QAC9C,EAFC,KAEM;AAAA,QACP,CAAC,KAAK,MAAM,MAAM,GAAG;AAAA,UACnB,CAAC,KAAK,MAAM,wBAAwB,MAAM,EAAE,EAA3C,KAAkD;AAAA,QACrD,EAFC,KAEM;AAAA,MACT,EAZC,KAYM;AAAA,MACP,CAAC,OAAO,WAAW,CAAC,YAAa,gBAAgB,SAAU,SAAS,EAAE,OAAO,oBAAoB,GAAG,EAAE;AAAA,IACxG,EA/BC;AAiCL;AAEA,IAAO,cAAQ;","names":[],"file":"tab.jsx"}
@@ -4,10 +4,22 @@ import { debounce } from "../../../utils/debounce";
4
4
  import { animate } from "../../../utils/animate";
5
5
  import { TabsContext } from "./tabsContext";
6
6
  import { Tab } from "./tab/tab";
7
+ import { Icon } from "../../base/icon";
7
8
  import { mergeRefs } from "../../../primitives/mergeRefs";
8
9
  const VIEW_NEXT_TAB_PX = 40;
10
+ const SCROLL_PAGE = 0.8;
9
11
  function Tabs(props) {
10
- const merged = mergeProps({ indicatorContent: false, scrollable: false }, props);
12
+ const merged = mergeProps(
13
+ {
14
+ indicatorContent: false,
15
+ scrollable: false,
16
+ scrollButtons: false,
17
+ dense: false,
18
+ scrollBackAriaLabel: "Scroll tabs back",
19
+ scrollForwardAriaLabel: "Scroll tabs forward"
20
+ },
21
+ props
22
+ );
11
23
  const [local, rest] = splitProps(merged, [
12
24
  "class",
13
25
  "children",
@@ -15,11 +27,17 @@ function Tabs(props) {
15
27
  "value",
16
28
  "indicatorContent",
17
29
  "scrollable",
30
+ "scrollButtons",
31
+ "dense",
32
+ "scrollBackAriaLabel",
33
+ "scrollForwardAriaLabel",
18
34
  "aria-label",
19
35
  "ref"
20
36
  ]);
21
37
  const [mounted, setMounted] = createSignal(false);
22
38
  const [indicatorStyle, setIndicatorStyle] = createSignal({ root: {} });
39
+ const [overflowStart, setOverflowStart] = createSignal(false);
40
+ const [overflowEnd, setOverflowEnd] = createSignal(false);
23
41
  let tabsEl;
24
42
  let tabListEl;
25
43
  let tabCounter = 0;
@@ -62,10 +80,24 @@ function Tabs(props) {
62
80
  setIndicatorStyle(next);
63
81
  }
64
82
  };
83
+ const updateOverflow = () => {
84
+ if (!tabsEl || !local.scrollable) {
85
+ setOverflowStart(false);
86
+ setOverflowEnd(false);
87
+ return;
88
+ }
89
+ const max = tabsEl.scrollWidth - tabsEl.clientWidth;
90
+ setOverflowStart(tabsEl.scrollLeft > 1);
91
+ setOverflowEnd(tabsEl.scrollLeft < max - 1);
92
+ };
65
93
  const scroll = (scrollValue) => {
66
94
  if (!tabsEl) return;
67
95
  animate(tabsEl, "scrollLeft", scrollValue, { duration: 300 });
68
96
  };
97
+ const scrollByPage = (direction) => {
98
+ if (!tabsEl) return;
99
+ scroll(tabsEl.scrollLeft + direction * tabsEl.clientWidth * SCROLL_PAGE);
100
+ };
69
101
  const scrollSelectedIntoView = () => {
70
102
  const { tabsMeta, tabMeta } = getTabsMeta();
71
103
  if (!tabMeta || !tabsMeta) return;
@@ -78,17 +110,24 @@ function Tabs(props) {
78
110
  onMount(() => setMounted(true));
79
111
  createEffect(on(() => local.value, () => updateIndicatorState()));
80
112
  onMount(() => {
81
- const onResize = debounce(() => updateIndicatorState(), 166);
113
+ const onResize = debounce(() => {
114
+ updateIndicatorState();
115
+ updateOverflow();
116
+ }, 166);
82
117
  const view = tabsEl?.ownerDocument.defaultView;
83
118
  view?.addEventListener("resize", onResize);
119
+ tabsEl?.addEventListener("scroll", updateOverflow, { passive: true });
84
120
  let resizeObserver;
85
121
  if (typeof ResizeObserver !== "undefined" && tabListEl) {
86
122
  resizeObserver = new ResizeObserver(onResize);
123
+ if (tabsEl) resizeObserver.observe(tabsEl);
87
124
  Array.from(tabListEl.children).forEach((child) => resizeObserver?.observe(child));
88
125
  }
126
+ updateOverflow();
89
127
  onCleanup(() => {
90
128
  onResize.cancel();
91
129
  view?.removeEventListener("resize", onResize);
130
+ tabsEl?.removeEventListener("scroll", updateOverflow);
92
131
  resizeObserver?.disconnect();
93
132
  });
94
133
  });
@@ -105,10 +144,40 @@ function Tabs(props) {
105
144
  contentRefs[index] = el;
106
145
  }
107
146
  };
147
+ const showScrollButtons = () => local.scrollable && local.scrollButtons && (overflowStart() || overflowEnd());
108
148
  return <TabsContext.Provider value={contextValue}>
109
- <div {...rest} class={cn("smwb-tabs", local.class)} role="tabpanel" ref={mergeRefs(local.ref)}>
149
+ <div
150
+ {...rest}
151
+ class={cn(
152
+ "smwb-tabs",
153
+ {
154
+ "smwb-tabs--dense": local.dense,
155
+ "smwb-tabs--overflow-start": overflowStart(),
156
+ "smwb-tabs--overflow-end": overflowEnd()
157
+ },
158
+ local.class
159
+ )}
160
+ role="tabpanel"
161
+ ref={mergeRefs(local.ref)}
162
+ >
163
+ <Show when={showScrollButtons()}>
164
+ <button
165
+ type="button"
166
+ class="smwb-tabs__scroll-button smwb-tabs__scroll-button--start"
167
+ aria-label={local.scrollBackAriaLabel}
168
+ disabled={!overflowStart()}
169
+ onClick={() => scrollByPage(-1)}
170
+ >
171
+ <Icon name="chevron_left" size={20} />
172
+ </button>
173
+ </Show>
174
+ {
175
+ /* The scroller's class is static so it is on the element from the start:
176
+ a ref on Tabs can find the row by class right away. */
177
+ }
110
178
  <div
111
- class={cn("smwb-tabs__scroller", { "smwb-tabs__scroller--scrollable": local.scrollable })}
179
+ class="smwb-tabs__scroller"
180
+ classList={{ "smwb-tabs__scroller--scrollable": local.scrollable }}
112
181
  ref={(el) => tabsEl = el}
113
182
  >
114
183
  <div class="smwb-tabs__scroll-area" ref={(el) => tabListEl = el} role="tablist" aria-label={local["aria-label"]}>
@@ -129,6 +198,17 @@ function Tabs(props) {
129
198
  </span>
130
199
  </Show>
131
200
  </div>
201
+ <Show when={showScrollButtons()}>
202
+ <button
203
+ type="button"
204
+ class="smwb-tabs__scroll-button smwb-tabs__scroll-button--end"
205
+ aria-label={local.scrollForwardAriaLabel}
206
+ disabled={!overflowEnd()}
207
+ onClick={() => scrollByPage(1)}
208
+ >
209
+ <Icon name="chevron_right" size={20} />
210
+ </button>
211
+ </Show>
132
212
  </div>
133
213
  </TabsContext.Provider>;
134
214
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/navigation/tabs/tabs.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, createEffect, createSignal, mergeProps, on, onCleanup, onMount, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { debounce } from \"../../../utils/debounce\";\nimport { animate } from \"../../../utils/animate\";\nimport { TabsContext, type TabsContextValue } from \"./tabsContext\";\nimport { Tab } from \"./tab/tab\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface TabsProps {\n value: number;\n onChange: (event: MouseEvent & { currentTarget: HTMLElement; target: Element }, index: number) => void;\n indicatorContent?: boolean;\n scrollable?: boolean;\n class?: string;\n children?: JSX.Element;\n \"aria-label\"?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\ninterface IndicatorStyle {\n root: { left?: number; width?: number };\n content?: { width: number };\n}\n\nconst VIEW_NEXT_TAB_PX = 40;\n\nexport function Tabs(props: ParentProps<TabsProps>): JSX.Element {\n const merged = mergeProps({ indicatorContent: false, scrollable: false }, props);\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"children\",\n \"onChange\",\n \"value\",\n \"indicatorContent\",\n \"scrollable\",\n \"aria-label\",\n \"ref\",\n ]);\n\n const [mounted, setMounted] = createSignal(false);\n const [indicatorStyle, setIndicatorStyle] = createSignal<IndicatorStyle>({ root: {} });\n\n let tabsEl: HTMLDivElement | undefined;\n let tabListEl: HTMLDivElement | undefined;\n let tabCounter = 0;\n const contentRefs: HTMLSpanElement[] = [];\n\n const getTabsMeta = () => {\n let tabsMeta: { clientWidth: number; scrollLeft: number; left: number; right: number } | undefined;\n if (tabsEl) {\n const rect = tabsEl.getBoundingClientRect();\n tabsMeta = { clientWidth: tabsEl.clientWidth, scrollLeft: tabsEl.scrollLeft, left: rect.left, right: rect.right };\n }\n let tabMeta: DOMRect | null = null;\n let tabContentMeta: DOMRect | null = null;\n if (tabsEl && tabListEl && tabListEl.children.length > 0) {\n const tab = tabListEl.children[local.value];\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n if (local.indicatorContent) {\n tabContentMeta = contentRefs[local.value]?.getBoundingClientRect() ?? null;\n }\n }\n return { tabsMeta, tabMeta, tabContentMeta };\n };\n\n const updateIndicatorState = (): void => {\n const { tabsMeta, tabMeta, tabContentMeta } = getTabsMeta();\n let startValue = 0;\n if (tabMeta && tabsMeta) {\n startValue = tabMeta.left - tabsMeta.left + tabsMeta.scrollLeft;\n }\n const next: IndicatorStyle = { root: { left: startValue, width: tabMeta ? tabMeta.width : 0 } };\n if (local.indicatorContent && tabContentMeta) {\n next.content = { width: tabContentMeta.width };\n }\n const prev = indicatorStyle();\n if (prev.root.left === undefined || prev.root.width === undefined) {\n setIndicatorStyle(next);\n return;\n }\n const dStart = Math.abs((prev.root.left ?? 0) - (next.root.left ?? 0));\n const dSize = Math.abs((prev.root.width ?? 0) - (next.root.width ?? 0));\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(next);\n }\n };\n\n const scroll = (scrollValue: number): void => {\n if (!tabsEl) return;\n animate(tabsEl, \"scrollLeft\", scrollValue, { duration: 300 });\n };\n\n const scrollSelectedIntoView = (): void => {\n const { tabsMeta, tabMeta } = getTabsMeta();\n if (!tabMeta || !tabsMeta) return;\n if (tabMeta.left < tabsMeta.left) {\n scroll(tabsMeta.scrollLeft + (tabMeta.left - tabsMeta.left) - VIEW_NEXT_TAB_PX);\n } else if (tabMeta.right > tabsMeta.right) {\n scroll(tabsMeta.scrollLeft + (tabMeta.right - tabsMeta.right) + VIEW_NEXT_TAB_PX);\n }\n };\n\n onMount(() => setMounted(true));\n\n // Re-measure when the active value changes (and on mount).\n createEffect(on(() => local.value, () => updateIndicatorState()));\n\n // Keep the indicator in sync with resize.\n onMount(() => {\n const onResize = debounce(() => updateIndicatorState(), 166);\n const view = tabsEl?.ownerDocument.defaultView;\n view?.addEventListener(\"resize\", onResize);\n let resizeObserver: ResizeObserver | undefined;\n if (typeof ResizeObserver !== \"undefined\" && tabListEl) {\n resizeObserver = new ResizeObserver(onResize);\n Array.from(tabListEl.children).forEach((child) => resizeObserver?.observe(child));\n }\n onCleanup(() => {\n onResize.cancel();\n view?.removeEventListener(\"resize\", onResize);\n resizeObserver?.disconnect();\n });\n });\n\n // Scroll the selected tab into view when the indicator moves.\n createEffect(() => {\n indicatorStyle();\n scrollSelectedIntoView();\n });\n\n const contextValue: TabsContextValue = {\n value: () => local.value,\n onChange: local.onChange,\n indicatorContent: local.indicatorContent,\n registerTab: () => tabCounter++,\n setContentRef: (index, el) => {\n contentRefs[index] = el;\n },\n };\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div {...rest} class={cn(\"smwb-tabs\", local.class)} role=\"tabpanel\" ref={mergeRefs(local.ref)}>\n <div\n class={cn(\"smwb-tabs__scroller\", { \"smwb-tabs__scroller--scrollable\": local.scrollable })}\n ref={(el) => (tabsEl = el)}\n >\n <div class=\"smwb-tabs__scroll-area\" ref={(el) => (tabListEl = el)} role=\"tablist\" aria-label={local[\"aria-label\"]}>\n {local.children}\n </div>\n <Show when={mounted()}>\n <span\n class=\"smwb-tabs__indicator\"\n style={{\n left: `${indicatorStyle().root.left ?? 0}px`,\n width: `${indicatorStyle().root.width ?? 0}px`,\n }}\n >\n <span\n class=\"smwb-tabs__indicator-content\"\n style={indicatorStyle().content ? { width: `${indicatorStyle().content?.width ?? 0}px` } : {}}\n />\n </span>\n </Show>\n </div>\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport { Tab };\nexport type { TabProps } from \"./tab/tab\";\nexport default Tabs;\n"],"mappings":"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","names":[],"file":"tabs.jsx"}
1
+ {"version":3,"sources":["../../../../../../src/components/navigation/tabs/tabs.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, createEffect, createSignal, mergeProps, on, onCleanup, onMount, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { debounce } from \"../../../utils/debounce\";\nimport { animate } from \"../../../utils/animate\";\nimport { TabsContext, type TabsContextValue } from \"./tabsContext\";\nimport { Tab } from \"./tab/tab\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface TabsProps {\n value: number;\n onChange: (event: MouseEvent & { currentTarget: HTMLElement; target: Element }, index: number) => void;\n indicatorContent?: boolean;\n /**\n * Let the tab row scroll sideways instead of clipping it. The edge beyond which\n * more tabs are hidden fades out.\n */\n scrollable?: boolean;\n /** With `scrollable`: buttons at both ends that scroll the row while it overflows. */\n scrollButtons?: boolean;\n /** Compact tabs: labels as written (no capitals, no letter spacing) and less padding. */\n dense?: boolean;\n /** Accessible label of the button that scrolls back. */\n scrollBackAriaLabel?: string;\n /** Accessible label of the button that scrolls forward. */\n scrollForwardAriaLabel?: string;\n class?: string;\n children?: JSX.Element;\n \"aria-label\"?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\ninterface IndicatorStyle {\n root: { left?: number; width?: number };\n content?: { width: number };\n}\n\nconst VIEW_NEXT_TAB_PX = 40;\n/** A scroll button moves the row by this share of its visible width. */\nconst SCROLL_PAGE = 0.8;\n\nexport function Tabs(props: ParentProps<TabsProps>): JSX.Element {\n const merged = mergeProps(\n {\n indicatorContent: false,\n scrollable: false,\n scrollButtons: false,\n dense: false,\n scrollBackAriaLabel: \"Scroll tabs back\",\n scrollForwardAriaLabel: \"Scroll tabs forward\",\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"children\",\n \"onChange\",\n \"value\",\n \"indicatorContent\",\n \"scrollable\",\n \"scrollButtons\",\n \"dense\",\n \"scrollBackAriaLabel\",\n \"scrollForwardAriaLabel\",\n \"aria-label\",\n \"ref\",\n ]);\n\n const [mounted, setMounted] = createSignal(false);\n const [indicatorStyle, setIndicatorStyle] = createSignal<IndicatorStyle>({ root: {} });\n // Whether tabs are hidden past the start / the end of a scrollable row. Only\n // measured in the browser, so the server markup shows neither.\n const [overflowStart, setOverflowStart] = createSignal(false);\n const [overflowEnd, setOverflowEnd] = createSignal(false);\n\n let tabsEl: HTMLDivElement | undefined;\n let tabListEl: HTMLDivElement | undefined;\n let tabCounter = 0;\n const contentRefs: HTMLSpanElement[] = [];\n\n const getTabsMeta = () => {\n let tabsMeta: { clientWidth: number; scrollLeft: number; left: number; right: number } | undefined;\n if (tabsEl) {\n const rect = tabsEl.getBoundingClientRect();\n tabsMeta = { clientWidth: tabsEl.clientWidth, scrollLeft: tabsEl.scrollLeft, left: rect.left, right: rect.right };\n }\n let tabMeta: DOMRect | null = null;\n let tabContentMeta: DOMRect | null = null;\n if (tabsEl && tabListEl && tabListEl.children.length > 0) {\n const tab = tabListEl.children[local.value];\n tabMeta = tab ? tab.getBoundingClientRect() : null;\n if (local.indicatorContent) {\n tabContentMeta = contentRefs[local.value]?.getBoundingClientRect() ?? null;\n }\n }\n return { tabsMeta, tabMeta, tabContentMeta };\n };\n\n const updateIndicatorState = (): void => {\n const { tabsMeta, tabMeta, tabContentMeta } = getTabsMeta();\n let startValue = 0;\n if (tabMeta && tabsMeta) {\n startValue = tabMeta.left - tabsMeta.left + tabsMeta.scrollLeft;\n }\n const next: IndicatorStyle = { root: { left: startValue, width: tabMeta ? tabMeta.width : 0 } };\n if (local.indicatorContent && tabContentMeta) {\n next.content = { width: tabContentMeta.width };\n }\n const prev = indicatorStyle();\n if (prev.root.left === undefined || prev.root.width === undefined) {\n setIndicatorStyle(next);\n return;\n }\n const dStart = Math.abs((prev.root.left ?? 0) - (next.root.left ?? 0));\n const dSize = Math.abs((prev.root.width ?? 0) - (next.root.width ?? 0));\n if (dStart >= 1 || dSize >= 1) {\n setIndicatorStyle(next);\n }\n };\n\n const updateOverflow = (): void => {\n if (!tabsEl || !local.scrollable) {\n setOverflowStart(false);\n setOverflowEnd(false);\n return;\n }\n const max = tabsEl.scrollWidth - tabsEl.clientWidth;\n setOverflowStart(tabsEl.scrollLeft > 1);\n setOverflowEnd(tabsEl.scrollLeft < max - 1);\n };\n\n const scroll = (scrollValue: number): void => {\n if (!tabsEl) return;\n animate(tabsEl, \"scrollLeft\", scrollValue, { duration: 300 });\n };\n\n const scrollByPage = (direction: -1 | 1): void => {\n if (!tabsEl) return;\n scroll(tabsEl.scrollLeft + direction * tabsEl.clientWidth * SCROLL_PAGE);\n };\n\n const scrollSelectedIntoView = (): void => {\n const { tabsMeta, tabMeta } = getTabsMeta();\n if (!tabMeta || !tabsMeta) return;\n if (tabMeta.left < tabsMeta.left) {\n scroll(tabsMeta.scrollLeft + (tabMeta.left - tabsMeta.left) - VIEW_NEXT_TAB_PX);\n } else if (tabMeta.right > tabsMeta.right) {\n scroll(tabsMeta.scrollLeft + (tabMeta.right - tabsMeta.right) + VIEW_NEXT_TAB_PX);\n }\n };\n\n onMount(() => setMounted(true));\n\n // Re-measure when the active value changes (and on mount).\n createEffect(on(() => local.value, () => updateIndicatorState()));\n\n // Keep the indicator and the overflow state in sync with resizes: of the\n // window, of the row, and of each tab (a label can grow with its data).\n onMount(() => {\n const onResize = debounce(() => {\n updateIndicatorState();\n updateOverflow();\n }, 166);\n const view = tabsEl?.ownerDocument.defaultView;\n view?.addEventListener(\"resize\", onResize);\n tabsEl?.addEventListener(\"scroll\", updateOverflow, { passive: true });\n let resizeObserver: ResizeObserver | undefined;\n if (typeof ResizeObserver !== \"undefined\" && tabListEl) {\n resizeObserver = new ResizeObserver(onResize);\n if (tabsEl) resizeObserver.observe(tabsEl);\n Array.from(tabListEl.children).forEach((child) => resizeObserver?.observe(child));\n }\n updateOverflow();\n onCleanup(() => {\n onResize.cancel();\n view?.removeEventListener(\"resize\", onResize);\n tabsEl?.removeEventListener(\"scroll\", updateOverflow);\n resizeObserver?.disconnect();\n });\n });\n\n // Scroll the selected tab into view when the indicator moves.\n createEffect(() => {\n indicatorStyle();\n scrollSelectedIntoView();\n });\n\n const contextValue: TabsContextValue = {\n value: () => local.value,\n onChange: local.onChange,\n indicatorContent: local.indicatorContent,\n registerTab: () => tabCounter++,\n setContentRef: (index, el) => {\n contentRefs[index] = el;\n },\n };\n\n const showScrollButtons = (): boolean => local.scrollable && local.scrollButtons && (overflowStart() || overflowEnd());\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div\n {...rest}\n class={cn(\n \"smwb-tabs\",\n {\n \"smwb-tabs--dense\": local.dense,\n \"smwb-tabs--overflow-start\": overflowStart(),\n \"smwb-tabs--overflow-end\": overflowEnd(),\n },\n local.class\n )}\n role=\"tabpanel\"\n ref={mergeRefs(local.ref)}\n >\n <Show when={showScrollButtons()}>\n <button\n type=\"button\"\n class=\"smwb-tabs__scroll-button smwb-tabs__scroll-button--start\"\n aria-label={local.scrollBackAriaLabel}\n disabled={!overflowStart()}\n onClick={() => scrollByPage(-1)}\n >\n <Icon name=\"chevron_left\" size={20} />\n </button>\n </Show>\n {/* The scroller's class is static so it is on the element from the start:\n a ref on Tabs can find the row by class right away. */}\n <div\n class=\"smwb-tabs__scroller\"\n classList={{ \"smwb-tabs__scroller--scrollable\": local.scrollable }}\n ref={(el) => (tabsEl = el)}\n >\n <div class=\"smwb-tabs__scroll-area\" ref={(el) => (tabListEl = el)} role=\"tablist\" aria-label={local[\"aria-label\"]}>\n {local.children}\n </div>\n <Show when={mounted()}>\n <span\n class=\"smwb-tabs__indicator\"\n style={{\n left: `${indicatorStyle().root.left ?? 0}px`,\n width: `${indicatorStyle().root.width ?? 0}px`,\n }}\n >\n <span\n class=\"smwb-tabs__indicator-content\"\n style={indicatorStyle().content ? { width: `${indicatorStyle().content?.width ?? 0}px` } : {}}\n />\n </span>\n </Show>\n </div>\n <Show when={showScrollButtons()}>\n <button\n type=\"button\"\n class=\"smwb-tabs__scroll-button smwb-tabs__scroll-button--end\"\n aria-label={local.scrollForwardAriaLabel}\n disabled={!overflowEnd()}\n onClick={() => scrollByPage(1)}\n >\n <Icon name=\"chevron_right\" size={20} />\n </button>\n </Show>\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport { Tab };\nexport type { TabProps } from \"./tab/tab\";\nexport default Tabs;\n"],"mappings":"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","names":[],"file":"tabs.jsx"}
@@ -99,6 +99,10 @@ function Table(props) {
99
99
  return settings ? { paginationSettings: settings } : {};
100
100
  });
101
101
  const align = () => local.cellAlign ?? "left";
102
+ const cellLabel = (column) => {
103
+ const label = column.meta?.label ?? (typeof column.header === "string" ? column.header : void 0);
104
+ return label ? { label } : {};
105
+ };
102
106
  return <SmwbTable
103
107
  {...rest}
104
108
  {...paginationProp()}
@@ -156,7 +160,11 @@ function Table(props) {
156
160
  {(row) => <>
157
161
  <TableRow onClick={(event) => local.onBodyRowClick?.(row, event)}>
158
162
  <For each={row.getVisibleCells()}>
159
- {(cell) => <TableCell cellAlign={align()} {...cell.column.columnDef.meta?.cellProps}>
163
+ {(cell) => <TableCell
164
+ cellAlign={align()}
165
+ {...cellLabel(cell.column.columnDef)}
166
+ {...cell.column.columnDef.meta?.cellProps}
167
+ >
160
168
  {flexRender(cell.column.columnDef.cell, cell.getContext())}
161
169
  </TableCell>}
162
170
  </For>