@smwb/ui-solid 0.11.1 → 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 (738) 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/chip/chip.entry.css +1 -1
  5. package/dist/assets/styles/less/components/descriptionList/descriptionList.entry.css +1 -0
  6. package/dist/assets/styles/less/components/emptyState/emptyState.entry.css +1 -0
  7. package/dist/assets/styles/less/components/kanban/kanban.entry.css +1 -0
  8. package/dist/assets/styles/less/components/meter/meter.entry.css +1 -0
  9. package/dist/assets/styles/less/components/modal/modal.entry.css +1 -1
  10. package/dist/assets/styles/less/components/overflowMenu/overflowMenu.entry.css +1 -1
  11. package/dist/assets/styles/less/components/personChip/personChip.entry.css +1 -0
  12. package/dist/assets/styles/less/components/progressIndicator/progressIndicator.entry.css +1 -1
  13. package/dist/assets/styles/less/components/sectionHeader/sectionHeader.entry.css +1 -0
  14. package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
  15. package/dist/assets/styles/less/components/stat/stat.entry.css +1 -0
  16. package/dist/assets/styles/less/components/stepper/stepper.entry.css +1 -1
  17. package/dist/assets/styles/less/components/table/table.entry.css +1 -1
  18. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  19. package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
  20. package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
  21. package/dist/assets/styles/less/components/timeline/timeline.entry.css +1 -0
  22. package/dist/assets/styles/less/components/tooltip/tooltip.entry.css +1 -1
  23. package/dist/assets/styles/less/components/typography/typography.entry.css +1 -1
  24. package/dist/assets/styles/less/tokens.entry.css +1 -0
  25. package/dist/components/base/icon/icon.js +4 -3
  26. package/dist/components/base/icon/icon.js.map +1 -1
  27. package/dist/components/base/ripple/ripple.js +4 -3
  28. package/dist/components/base/ripple/ripple.js.map +1 -1
  29. package/dist/components/dataDisplay/accordion/accordion.d.ts +18 -1
  30. package/dist/components/dataDisplay/accordion/accordion.js +91 -48
  31. package/dist/components/dataDisplay/accordion/accordion.js.map +1 -1
  32. package/dist/components/dataDisplay/assetGrid/assetGrid.js +14 -13
  33. package/dist/components/dataDisplay/assetGrid/assetGrid.js.map +1 -1
  34. package/dist/components/dataDisplay/avatar/avatar.d.ts +4 -0
  35. package/dist/components/dataDisplay/avatar/avatar.js +56 -40
  36. package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
  37. package/dist/components/dataDisplay/badge/badge.js +24 -20
  38. package/dist/components/dataDisplay/badge/badge.js.map +1 -1
  39. package/dist/components/dataDisplay/card/card.js +24 -23
  40. package/dist/components/dataDisplay/card/card.js.map +1 -1
  41. package/dist/components/dataDisplay/carousel/carousel.js +4 -3
  42. package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
  43. package/dist/components/dataDisplay/chart/chart.d.ts +65 -0
  44. package/dist/components/dataDisplay/chart/chartTheme.d.ts +35 -0
  45. package/dist/components/dataDisplay/chart/index.d.ts +4 -0
  46. package/dist/components/dataDisplay/chat/chat.js +52 -51
  47. package/dist/components/dataDisplay/chat/chat.js.map +1 -1
  48. package/dist/components/dataDisplay/chat/chatHeader.js +29 -29
  49. package/dist/components/dataDisplay/chat/chatHeader.js.map +1 -1
  50. package/dist/components/dataDisplay/chat/chatMessageBubble.js +28 -28
  51. package/dist/components/dataDisplay/chat/chatMessageBubble.js.map +1 -1
  52. package/dist/components/dataDisplay/chat/chatShell.js +54 -51
  53. package/dist/components/dataDisplay/chat/chatShell.js.map +1 -1
  54. package/dist/components/dataDisplay/chip/chip.js +79 -70
  55. package/dist/components/dataDisplay/chip/chip.js.map +1 -1
  56. package/dist/components/dataDisplay/chipGroup/chipGroup.js +9 -8
  57. package/dist/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
  58. package/dist/components/dataDisplay/descriptionList/descriptionList.d.ts +32 -0
  59. package/dist/components/dataDisplay/descriptionList/descriptionList.js +60 -0
  60. package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -0
  61. package/dist/components/dataDisplay/descriptionList/index.d.ts +2 -0
  62. package/dist/components/dataDisplay/expansionPanel/expansionPanel.js +4 -3
  63. package/dist/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
  64. package/dist/components/dataDisplay/imagesList/imagesList.js +8 -7
  65. package/dist/components/dataDisplay/imagesList/imagesList.js.map +1 -1
  66. package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js +29 -24
  67. package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js.map +1 -1
  68. package/dist/components/dataDisplay/kanban/index.d.ts +2 -0
  69. package/dist/components/dataDisplay/kanban/kanban.d.ts +42 -0
  70. package/dist/components/dataDisplay/kanban/kanban.js +133 -0
  71. package/dist/components/dataDisplay/kanban/kanban.js.map +1 -0
  72. package/dist/components/dataDisplay/lazyImage/lazyImage.js +30 -29
  73. package/dist/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
  74. package/dist/components/dataDisplay/list/list.js +17 -16
  75. package/dist/components/dataDisplay/list/list.js.map +1 -1
  76. package/dist/components/dataDisplay/meter/index.d.ts +2 -0
  77. package/dist/components/dataDisplay/meter/meter.d.ts +34 -0
  78. package/dist/components/dataDisplay/meter/meter.js +84 -0
  79. package/dist/components/dataDisplay/meter/meter.js.map +1 -0
  80. package/dist/components/dataDisplay/personChip/index.d.ts +2 -0
  81. package/dist/components/dataDisplay/personChip/personChip.d.ts +32 -0
  82. package/dist/components/dataDisplay/personChip/personChip.js +104 -0
  83. package/dist/components/dataDisplay/personChip/personChip.js.map +1 -0
  84. package/dist/components/dataDisplay/stat/index.d.ts +2 -0
  85. package/dist/components/dataDisplay/stat/stat.d.ts +33 -0
  86. package/dist/components/dataDisplay/stat/stat.js +101 -0
  87. package/dist/components/dataDisplay/stat/stat.js.map +1 -0
  88. package/dist/components/dataDisplay/table/table.d.ts +7 -0
  89. package/dist/components/dataDisplay/table/table.js +22 -21
  90. package/dist/components/dataDisplay/table/table.js.map +1 -1
  91. package/dist/components/dataDisplay/table/tableCell.d.ts +2 -0
  92. package/dist/components/dataDisplay/table/tableCell.js +9 -6
  93. package/dist/components/dataDisplay/table/tableCell.js.map +1 -1
  94. package/dist/components/dataDisplay/table/tableHeadCell.d.ts +11 -1
  95. package/dist/components/dataDisplay/table/tableHeadCell.js +26 -23
  96. package/dist/components/dataDisplay/table/tableHeadCell.js.map +1 -1
  97. package/dist/components/dataDisplay/table/tablePagination/tablePagination.js +4 -3
  98. package/dist/components/dataDisplay/table/tablePagination/tablePagination.js.map +1 -1
  99. package/dist/components/dataDisplay/thumbCard/thumbCard.js +54 -53
  100. package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
  101. package/dist/components/dataDisplay/timeline/index.d.ts +2 -0
  102. package/dist/components/dataDisplay/timeline/timeline.d.ts +38 -0
  103. package/dist/components/dataDisplay/timeline/timeline.js +89 -0
  104. package/dist/components/dataDisplay/timeline/timeline.js.map +1 -0
  105. package/dist/components/dataDisplay/treeView/treeView.js +4 -3
  106. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  107. package/dist/components/dataDisplay/typography/typography.d.ts +4 -0
  108. package/dist/components/dataDisplay/typography/typography.js +36 -22
  109. package/dist/components/dataDisplay/typography/typography.js.map +1 -1
  110. package/dist/components/feedBack/confirmDialog/confirmDialog.js +10 -9
  111. package/dist/components/feedBack/confirmDialog/confirmDialog.js.map +1 -1
  112. package/dist/components/feedBack/emptyState/emptyState.d.ts +25 -0
  113. package/dist/components/feedBack/emptyState/emptyState.js +86 -0
  114. package/dist/components/feedBack/emptyState/emptyState.js.map +1 -0
  115. package/dist/components/feedBack/emptyState/index.d.ts +2 -0
  116. package/dist/components/feedBack/message/message.js +4 -3
  117. package/dist/components/feedBack/message/message.js.map +1 -1
  118. package/dist/components/feedBack/modal/modal.js +4 -3
  119. package/dist/components/feedBack/modal/modal.js.map +1 -1
  120. package/dist/components/feedBack/progressIndicator/progressIndicator.d.ts +13 -0
  121. package/dist/components/feedBack/progressIndicator/progressIndicator.js +79 -46
  122. package/dist/components/feedBack/progressIndicator/progressIndicator.js.map +1 -1
  123. package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.js +20 -15
  124. package/dist/components/feedBack/saveAssetDialog/saveAssetDialog.js.map +1 -1
  125. package/dist/components/feedBack/skeleton/skeleton.js +4 -3
  126. package/dist/components/feedBack/skeleton/skeleton.js.map +1 -1
  127. package/dist/components/feedBack/snackbar/snackbar.js +18 -17
  128. package/dist/components/feedBack/snackbar/snackbar.js.map +1 -1
  129. package/dist/components/feedBack/tooltip/tooltip.js +41 -33
  130. package/dist/components/feedBack/tooltip/tooltip.js.map +1 -1
  131. package/dist/components/inputs/button/button.js +32 -30
  132. package/dist/components/inputs/button/button.js.map +1 -1
  133. package/dist/components/inputs/buttonGroups/buttonGroup.js +9 -8
  134. package/dist/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
  135. package/dist/components/inputs/checkbox/checkbox.js +4 -3
  136. package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
  137. package/dist/components/inputs/datePicker/dataPickerInput.js +23 -23
  138. package/dist/components/inputs/datePicker/dataPickerInput.js.map +1 -1
  139. package/dist/components/inputs/datePicker/datePicker.js +84 -83
  140. package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
  141. package/dist/components/inputs/fileDrop/fileDrop.js +4 -3
  142. package/dist/components/inputs/fileDrop/fileDrop.js.map +1 -1
  143. package/dist/components/inputs/fileInput/fileInput.js +11 -10
  144. package/dist/components/inputs/fileInput/fileInput.js.map +1 -1
  145. package/dist/components/inputs/floatingButton/floatingButton.js +9 -8
  146. package/dist/components/inputs/floatingButton/floatingButton.js.map +1 -1
  147. package/dist/components/inputs/radioButton/radioButton.js +9 -8
  148. package/dist/components/inputs/radioButton/radioButton.js.map +1 -1
  149. package/dist/components/inputs/rating/rating.js +41 -40
  150. package/dist/components/inputs/rating/rating.js.map +1 -1
  151. package/dist/components/inputs/selectField/selectField.d.ts +2 -0
  152. package/dist/components/inputs/selectField/selectField.js +55 -51
  153. package/dist/components/inputs/selectField/selectField.js.map +1 -1
  154. package/dist/components/inputs/slider/slider.js +4 -3
  155. package/dist/components/inputs/slider/slider.js.map +1 -1
  156. package/dist/components/inputs/textField/textField.js +38 -37
  157. package/dist/components/inputs/textField/textField.js.map +1 -1
  158. package/dist/components/inputs/textField/textFieldAdornment.js +9 -9
  159. package/dist/components/inputs/textField/textFieldAdornment.js.map +1 -1
  160. package/dist/components/inputs/textField/textFieldWrapper.js +41 -41
  161. package/dist/components/inputs/textField/textFieldWrapper.js.map +1 -1
  162. package/dist/components/inputs/timePicker/timePicker.js +12 -11
  163. package/dist/components/inputs/timePicker/timePicker.js.map +1 -1
  164. package/dist/components/inputs/toggle/toggle.js +4 -3
  165. package/dist/components/inputs/toggle/toggle.js.map +1 -1
  166. package/dist/components/inputs/valueSlider/valueSlider.js +26 -25
  167. package/dist/components/inputs/valueSlider/valueSlider.js.map +1 -1
  168. package/dist/components/layout/appLayout/appLayout.js +39 -38
  169. package/dist/components/layout/appLayout/appLayout.js.map +1 -1
  170. package/dist/components/layout/divider/divider.js +26 -22
  171. package/dist/components/layout/divider/divider.js.map +1 -1
  172. package/dist/components/layout/floatingWindow/floatingWindow.js +74 -73
  173. package/dist/components/layout/floatingWindow/floatingWindow.js.map +1 -1
  174. package/dist/components/layout/grid/grid.js +10 -9
  175. package/dist/components/layout/grid/grid.js.map +1 -1
  176. package/dist/components/layout/page/page.js +4 -3
  177. package/dist/components/layout/page/page.js.map +1 -1
  178. package/dist/components/layout/pageHeader/pageHeader.js +36 -35
  179. package/dist/components/layout/pageHeader/pageHeader.js.map +1 -1
  180. package/dist/components/layout/screenDivider/screenDivider.js +9 -8
  181. package/dist/components/layout/screenDivider/screenDivider.js.map +1 -1
  182. package/dist/components/layout/sectionHeader/index.d.ts +2 -0
  183. package/dist/components/layout/sectionHeader/sectionHeader.d.ts +30 -0
  184. package/dist/components/layout/sectionHeader/sectionHeader.js +100 -0
  185. package/dist/components/layout/sectionHeader/sectionHeader.js.map +1 -0
  186. package/dist/components/layout/sheet/sheet.js +4 -3
  187. package/dist/components/layout/sheet/sheet.js.map +1 -1
  188. package/dist/components/layout/stack/stack.js +31 -27
  189. package/dist/components/layout/stack/stack.js.map +1 -1
  190. package/dist/components/navigation/appBar/appBar.js +24 -23
  191. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  192. package/dist/components/navigation/bottomBar/bottomBar.js +57 -56
  193. package/dist/components/navigation/bottomBar/bottomBar.js.map +1 -1
  194. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +4 -3
  195. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  196. package/dist/components/navigation/menu/menu.js +10 -9
  197. package/dist/components/navigation/menu/menu.js.map +1 -1
  198. package/dist/components/navigation/overflowMenu/overflowMenu.js +4 -3
  199. package/dist/components/navigation/overflowMenu/overflowMenu.js.map +1 -1
  200. package/dist/components/navigation/pagination/pagination.js +14 -13
  201. package/dist/components/navigation/pagination/pagination.js.map +1 -1
  202. package/dist/components/navigation/sidebar/sidebar.js +4 -3
  203. package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
  204. package/dist/components/navigation/stepper/stepper.d.ts +10 -2
  205. package/dist/components/navigation/stepper/stepper.js +63 -47
  206. package/dist/components/navigation/stepper/stepper.js.map +1 -1
  207. package/dist/components/navigation/tabs/tab/tab.d.ts +2 -0
  208. package/dist/components/navigation/tabs/tab/tab.js +45 -44
  209. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  210. package/dist/components/navigation/tabs/tabs.d.ts +12 -0
  211. package/dist/components/navigation/tabs/tabs.js +142 -86
  212. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  213. package/dist/connects/rt/table/table.d.ts +2 -0
  214. package/dist/headless/components/dataDisplay/accordion/accordion.js +89 -47
  215. package/dist/headless/components/dataDisplay/accordion/accordion.js.map +1 -1
  216. package/dist/headless/components/dataDisplay/avatar/avatar.js +54 -39
  217. package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
  218. package/dist/headless/components/dataDisplay/badge/badge.js +22 -19
  219. package/dist/headless/components/dataDisplay/badge/badge.js.map +1 -1
  220. package/dist/headless/components/dataDisplay/card/card.js +22 -22
  221. package/dist/headless/components/dataDisplay/card/card.js.map +1 -1
  222. package/dist/headless/components/dataDisplay/chat/chat.js +50 -50
  223. package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
  224. package/dist/headless/components/dataDisplay/chat/chatHeader.js +29 -29
  225. package/dist/headless/components/dataDisplay/chat/chatHeader.js.map +1 -1
  226. package/dist/headless/components/dataDisplay/chat/chatMessageBubble.js +28 -28
  227. package/dist/headless/components/dataDisplay/chat/chatMessageBubble.js.map +1 -1
  228. package/dist/headless/components/dataDisplay/chat/chatShell.js +54 -51
  229. package/dist/headless/components/dataDisplay/chat/chatShell.js.map +1 -1
  230. package/dist/headless/components/dataDisplay/chip/chip.js +77 -69
  231. package/dist/headless/components/dataDisplay/chip/chip.js.map +1 -1
  232. package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js +58 -0
  233. package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js.map +1 -0
  234. package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js +28 -24
  235. package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItem.js.map +1 -1
  236. package/dist/headless/components/dataDisplay/kanban/kanban.js +131 -0
  237. package/dist/headless/components/dataDisplay/kanban/kanban.js.map +1 -0
  238. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js +28 -28
  239. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
  240. package/dist/headless/components/dataDisplay/list/list.js +15 -15
  241. package/dist/headless/components/dataDisplay/list/list.js.map +1 -1
  242. package/dist/headless/components/dataDisplay/meter/meter.js +82 -0
  243. package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -0
  244. package/dist/headless/components/dataDisplay/personChip/personChip.js +102 -0
  245. package/dist/headless/components/dataDisplay/personChip/personChip.js.map +1 -0
  246. package/dist/headless/components/dataDisplay/stat/stat.js +99 -0
  247. package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -0
  248. package/dist/headless/components/dataDisplay/table/table.js +20 -20
  249. package/dist/headless/components/dataDisplay/table/table.js.map +1 -1
  250. package/dist/headless/components/dataDisplay/table/tableCell.js +9 -6
  251. package/dist/headless/components/dataDisplay/table/tableCell.js.map +1 -1
  252. package/dist/headless/components/dataDisplay/table/tableHeadCell.js +26 -23
  253. package/dist/headless/components/dataDisplay/table/tableHeadCell.js.map +1 -1
  254. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js +53 -53
  255. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
  256. package/dist/headless/components/dataDisplay/timeline/timeline.js +87 -0
  257. package/dist/headless/components/dataDisplay/timeline/timeline.js.map +1 -0
  258. package/dist/headless/components/dataDisplay/typography/typography.js +34 -21
  259. package/dist/headless/components/dataDisplay/typography/typography.js.map +1 -1
  260. package/dist/headless/components/feedBack/confirmDialog/confirmDialog.js +1 -1
  261. package/dist/headless/components/feedBack/confirmDialog/confirmDialog.js.map +1 -1
  262. package/dist/headless/components/feedBack/emptyState/emptyState.js +84 -0
  263. package/dist/headless/components/feedBack/emptyState/emptyState.js.map +1 -0
  264. package/dist/headless/components/feedBack/progressIndicator/progressIndicator.js +77 -45
  265. package/dist/headless/components/feedBack/progressIndicator/progressIndicator.js.map +1 -1
  266. package/dist/headless/components/feedBack/saveAssetDialog/saveAssetDialog.js +18 -14
  267. package/dist/headless/components/feedBack/saveAssetDialog/saveAssetDialog.js.map +1 -1
  268. package/dist/headless/components/feedBack/tooltip/tooltip.js +33 -26
  269. package/dist/headless/components/feedBack/tooltip/tooltip.js.map +1 -1
  270. package/dist/headless/components/inputs/button/button.js +33 -32
  271. package/dist/headless/components/inputs/button/button.js.map +1 -1
  272. package/dist/headless/components/inputs/datePicker/dataPickerInput.js +23 -23
  273. package/dist/headless/components/inputs/datePicker/dataPickerInput.js.map +1 -1
  274. package/dist/headless/components/inputs/datePicker/datePicker.js +79 -79
  275. package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
  276. package/dist/headless/components/inputs/rating/rating.js +39 -39
  277. package/dist/headless/components/inputs/rating/rating.js.map +1 -1
  278. package/dist/headless/components/inputs/selectField/selectField.js +61 -58
  279. package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
  280. package/dist/headless/components/inputs/textField/textField.js +36 -36
  281. package/dist/headless/components/inputs/textField/textField.js.map +1 -1
  282. package/dist/headless/components/inputs/textField/textFieldAdornment.js +9 -9
  283. package/dist/headless/components/inputs/textField/textFieldAdornment.js.map +1 -1
  284. package/dist/headless/components/inputs/textField/textFieldWrapper.js +41 -41
  285. package/dist/headless/components/inputs/textField/textFieldWrapper.js.map +1 -1
  286. package/dist/headless/components/inputs/valueSlider/valueSlider.js +24 -24
  287. package/dist/headless/components/inputs/valueSlider/valueSlider.js.map +1 -1
  288. package/dist/headless/components/layout/appLayout/appLayout.js +39 -39
  289. package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
  290. package/dist/headless/components/layout/divider/divider.js +24 -21
  291. package/dist/headless/components/layout/divider/divider.js.map +1 -1
  292. package/dist/headless/components/layout/pageHeader/pageHeader.js +34 -34
  293. package/dist/headless/components/layout/pageHeader/pageHeader.js.map +1 -1
  294. package/dist/headless/components/layout/sectionHeader/sectionHeader.js +98 -0
  295. package/dist/headless/components/layout/sectionHeader/sectionHeader.js.map +1 -0
  296. package/dist/headless/components/layout/stack/stack.js +29 -26
  297. package/dist/headless/components/layout/stack/stack.js.map +1 -1
  298. package/dist/headless/components/navigation/appBar/appBar.js +22 -22
  299. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  300. package/dist/headless/components/navigation/bottomBar/bottomBar.js +51 -51
  301. package/dist/headless/components/navigation/bottomBar/bottomBar.js.map +1 -1
  302. package/dist/headless/components/navigation/stepper/stepper.js +61 -46
  303. package/dist/headless/components/navigation/stepper/stepper.js.map +1 -1
  304. package/dist/headless/components/navigation/tabs/tab/tab.js +44 -44
  305. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  306. package/dist/headless/components/navigation/tabs/tabs.js +140 -85
  307. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  308. package/dist/headless/icons/catalog.js +78 -1
  309. package/dist/headless/icons/catalog.js.map +1 -1
  310. package/dist/headless/icons/index.js +596 -574
  311. package/dist/headless/icons/index.js.map +1 -1
  312. package/dist/headless/icons/svg/accountTree.js +9 -0
  313. package/dist/headless/icons/svg/accountTree.js.map +1 -0
  314. package/dist/headless/icons/svg/callSplit.js +9 -0
  315. package/dist/headless/icons/svg/callSplit.js.map +1 -0
  316. package/dist/headless/icons/svg/deviceHub.js +8 -0
  317. package/dist/headless/icons/svg/deviceHub.js.map +1 -0
  318. package/dist/headless/icons/svg/editNote.js +9 -0
  319. package/dist/headless/icons/svg/editNote.js.map +1 -0
  320. package/dist/headless/icons/svg/filterList.js +9 -0
  321. package/dist/headless/icons/svg/filterList.js.map +1 -0
  322. package/dist/headless/icons/svg/forkRight.js +8 -0
  323. package/dist/headless/icons/svg/forkRight.js.map +1 -0
  324. package/dist/headless/icons/svg/groups.js +9 -0
  325. package/dist/headless/icons/svg/groups.js.map +1 -0
  326. package/dist/headless/icons/svg/hub.js +8 -0
  327. package/dist/headless/icons/svg/hub.js.map +1 -0
  328. package/dist/headless/icons/svg/index.js +598 -576
  329. package/dist/headless/icons/svg/index.js.map +1 -1
  330. package/dist/headless/icons/svg/lan.js +9 -0
  331. package/dist/headless/icons/svg/lan.js.map +1 -0
  332. package/dist/headless/icons/svg/personOff.js +9 -0
  333. package/dist/headless/icons/svg/personOff.js.map +1 -0
  334. package/dist/headless/icons/svg/schema.js +9 -0
  335. package/dist/headless/icons/svg/schema.js.map +1 -0
  336. package/dist/headless/index.js +281 -255
  337. package/dist/headless/index.js.map +1 -1
  338. package/dist/headless/source/components/dataDisplay/accordion/accordion.jsx +60 -18
  339. package/dist/headless/source/components/dataDisplay/accordion/accordion.jsx.map +1 -1
  340. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx +28 -3
  341. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  342. package/dist/headless/source/components/dataDisplay/badge/badge.jsx +8 -4
  343. package/dist/headless/source/components/dataDisplay/badge/badge.jsx.map +1 -1
  344. package/dist/headless/source/components/dataDisplay/card/card.jsx +4 -3
  345. package/dist/headless/source/components/dataDisplay/card/card.jsx.map +1 -1
  346. package/dist/headless/source/components/dataDisplay/chart/chart.jsx +168 -0
  347. package/dist/headless/source/components/dataDisplay/chart/chart.jsx.map +1 -0
  348. package/dist/headless/source/components/dataDisplay/chart/chartTheme.js +78 -0
  349. package/dist/headless/source/components/dataDisplay/chart/chartTheme.js.map +7 -0
  350. package/dist/headless/source/components/dataDisplay/chart/index.js +9 -0
  351. package/dist/headless/source/components/dataDisplay/chart/index.js.map +7 -0
  352. package/dist/headless/source/components/dataDisplay/chat/chat.jsx +4 -3
  353. package/dist/headless/source/components/dataDisplay/chat/chat.jsx.map +1 -1
  354. package/dist/headless/source/components/dataDisplay/chat/chatHeader.jsx +7 -5
  355. package/dist/headless/source/components/dataDisplay/chat/chatHeader.jsx.map +1 -1
  356. package/dist/headless/source/components/dataDisplay/chat/chatMessageBubble.jsx +4 -3
  357. package/dist/headless/source/components/dataDisplay/chat/chatMessageBubble.jsx.map +1 -1
  358. package/dist/headless/source/components/dataDisplay/chat/chatShell.jsx +30 -26
  359. package/dist/headless/source/components/dataDisplay/chat/chatShell.jsx.map +1 -1
  360. package/dist/headless/source/components/dataDisplay/chip/chip.jsx +11 -6
  361. package/dist/headless/source/components/dataDisplay/chip/chip.jsx.map +1 -1
  362. package/dist/headless/source/components/dataDisplay/descriptionList/descriptionList.jsx +42 -0
  363. package/dist/headless/source/components/dataDisplay/descriptionList/descriptionList.jsx.map +1 -0
  364. package/dist/headless/source/components/dataDisplay/descriptionList/index.js +7 -0
  365. package/dist/headless/source/components/dataDisplay/descriptionList/index.js.map +7 -0
  366. package/dist/headless/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx +10 -4
  367. package/dist/headless/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx.map +1 -1
  368. package/dist/headless/source/components/dataDisplay/kanban/index.js +8 -0
  369. package/dist/headless/source/components/dataDisplay/kanban/index.js.map +7 -0
  370. package/dist/headless/source/components/dataDisplay/kanban/kanban.jsx +99 -0
  371. package/dist/headless/source/components/dataDisplay/kanban/kanban.jsx.map +1 -0
  372. package/dist/headless/source/components/dataDisplay/lazyImage/lazyImage.jsx +4 -3
  373. package/dist/headless/source/components/dataDisplay/lazyImage/lazyImage.jsx.map +1 -1
  374. package/dist/headless/source/components/dataDisplay/list/list.jsx +4 -3
  375. package/dist/headless/source/components/dataDisplay/list/list.jsx.map +1 -1
  376. package/dist/headless/source/components/dataDisplay/meter/index.js +8 -0
  377. package/dist/headless/source/components/dataDisplay/meter/index.js.map +7 -0
  378. package/dist/headless/source/components/dataDisplay/meter/meter.jsx +80 -0
  379. package/dist/headless/source/components/dataDisplay/meter/meter.jsx.map +1 -0
  380. package/dist/headless/source/components/dataDisplay/personChip/index.js +8 -0
  381. package/dist/headless/source/components/dataDisplay/personChip/index.js.map +7 -0
  382. package/dist/headless/source/components/dataDisplay/personChip/personChip.jsx +71 -0
  383. package/dist/headless/source/components/dataDisplay/personChip/personChip.jsx.map +1 -0
  384. package/dist/headless/source/components/dataDisplay/stat/index.js +7 -0
  385. package/dist/headless/source/components/dataDisplay/stat/index.js.map +7 -0
  386. package/dist/headless/source/components/dataDisplay/stat/stat.jsx +72 -0
  387. package/dist/headless/source/components/dataDisplay/stat/stat.jsx.map +1 -0
  388. package/dist/headless/source/components/dataDisplay/table/table.jsx +11 -4
  389. package/dist/headless/source/components/dataDisplay/table/table.jsx.map +1 -1
  390. package/dist/headless/source/components/dataDisplay/table/tableCell.jsx +8 -2
  391. package/dist/headless/source/components/dataDisplay/table/tableCell.jsx.map +1 -1
  392. package/dist/headless/source/components/dataDisplay/table/tableHeadCell.jsx +37 -3
  393. package/dist/headless/source/components/dataDisplay/table/tableHeadCell.jsx.map +1 -1
  394. package/dist/headless/source/components/dataDisplay/thumbCard/thumbCard.jsx +10 -7
  395. package/dist/headless/source/components/dataDisplay/thumbCard/thumbCard.jsx.map +1 -1
  396. package/dist/headless/source/components/dataDisplay/timeline/index.js +8 -0
  397. package/dist/headless/source/components/dataDisplay/timeline/index.js.map +7 -0
  398. package/dist/headless/source/components/dataDisplay/timeline/timeline.jsx +64 -0
  399. package/dist/headless/source/components/dataDisplay/timeline/timeline.jsx.map +1 -0
  400. package/dist/headless/source/components/dataDisplay/typography/typography.jsx +17 -3
  401. package/dist/headless/source/components/dataDisplay/typography/typography.jsx.map +1 -1
  402. package/dist/headless/source/components/feedBack/confirmDialog/confirmDialog.jsx +1 -1
  403. package/dist/headless/source/components/feedBack/confirmDialog/confirmDialog.jsx.map +1 -1
  404. package/dist/headless/source/components/feedBack/emptyState/emptyState.jsx +47 -0
  405. package/dist/headless/source/components/feedBack/emptyState/emptyState.jsx.map +1 -0
  406. package/dist/headless/source/components/feedBack/emptyState/index.js +6 -0
  407. package/dist/headless/source/components/feedBack/emptyState/index.js.map +7 -0
  408. package/dist/headless/source/components/feedBack/progressIndicator/progressIndicator.jsx +52 -10
  409. package/dist/headless/source/components/feedBack/progressIndicator/progressIndicator.jsx.map +1 -1
  410. package/dist/headless/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx +4 -2
  411. package/dist/headless/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx.map +1 -1
  412. package/dist/headless/source/components/feedBack/tooltip/tooltip.jsx +4 -2
  413. package/dist/headless/source/components/feedBack/tooltip/tooltip.jsx.map +1 -1
  414. package/dist/headless/source/components/inputs/button/button.jsx +7 -3
  415. package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
  416. package/dist/headless/source/components/inputs/datePicker/dataPickerInput.jsx +4 -3
  417. package/dist/headless/source/components/inputs/datePicker/dataPickerInput.jsx.map +1 -1
  418. package/dist/headless/source/components/inputs/datePicker/datePicker.jsx +4 -6
  419. package/dist/headless/source/components/inputs/datePicker/datePicker.jsx.map +1 -1
  420. package/dist/headless/source/components/inputs/rating/rating.jsx +4 -3
  421. package/dist/headless/source/components/inputs/rating/rating.jsx.map +1 -1
  422. package/dist/headless/source/components/inputs/selectField/selectField.jsx +8 -2
  423. package/dist/headless/source/components/inputs/selectField/selectField.jsx.map +1 -1
  424. package/dist/headless/source/components/inputs/textField/textField.jsx +8 -6
  425. package/dist/headless/source/components/inputs/textField/textField.jsx.map +1 -1
  426. package/dist/headless/source/components/inputs/textField/textFieldAdornment.jsx +4 -3
  427. package/dist/headless/source/components/inputs/textField/textFieldAdornment.jsx.map +1 -1
  428. package/dist/headless/source/components/inputs/textField/textFieldWrapper.jsx +9 -6
  429. package/dist/headless/source/components/inputs/textField/textFieldWrapper.jsx.map +1 -1
  430. package/dist/headless/source/components/inputs/valueSlider/valueSlider.jsx +4 -3
  431. package/dist/headless/source/components/inputs/valueSlider/valueSlider.jsx.map +1 -1
  432. package/dist/headless/source/components/layout/appLayout/appLayout.jsx +3 -2
  433. package/dist/headless/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  434. package/dist/headless/source/components/layout/divider/divider.jsx +10 -6
  435. package/dist/headless/source/components/layout/divider/divider.jsx.map +1 -1
  436. package/dist/headless/source/components/layout/pageHeader/pageHeader.jsx +14 -10
  437. package/dist/headless/source/components/layout/pageHeader/pageHeader.jsx.map +1 -1
  438. package/dist/headless/source/components/layout/sectionHeader/index.js +6 -0
  439. package/dist/headless/source/components/layout/sectionHeader/index.js.map +7 -0
  440. package/dist/headless/source/components/layout/sectionHeader/sectionHeader.jsx +80 -0
  441. package/dist/headless/source/components/layout/sectionHeader/sectionHeader.jsx.map +1 -0
  442. package/dist/headless/source/components/layout/stack/stack.jsx +3 -2
  443. package/dist/headless/source/components/layout/stack/stack.jsx.map +1 -1
  444. package/dist/headless/source/components/navigation/appBar/appBar.jsx +7 -5
  445. package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
  446. package/dist/headless/source/components/navigation/bottomBar/bottomBar.jsx +4 -3
  447. package/dist/headless/source/components/navigation/bottomBar/bottomBar.jsx.map +1 -1
  448. package/dist/headless/source/components/navigation/stepper/stepper.jsx +14 -7
  449. package/dist/headless/source/components/navigation/stepper/stepper.jsx.map +1 -1
  450. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +7 -5
  451. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  452. package/dist/headless/source/components/navigation/tabs/tabs.jsx +84 -4
  453. package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
  454. package/dist/headless/source/connects/rt/table/table.jsx +9 -1
  455. package/dist/headless/source/connects/rt/table/table.jsx.map +1 -1
  456. package/dist/headless/source/icons/catalog.js +78 -1
  457. package/dist/headless/source/icons/catalog.js.map +2 -2
  458. package/dist/headless/source/icons/svg/accountTree.js +11 -0
  459. package/dist/headless/source/icons/svg/accountTree.js.map +7 -0
  460. package/dist/headless/source/icons/svg/callSplit.js +11 -0
  461. package/dist/headless/source/icons/svg/callSplit.js.map +7 -0
  462. package/dist/headless/source/icons/svg/deviceHub.js +10 -0
  463. package/dist/headless/source/icons/svg/deviceHub.js.map +7 -0
  464. package/dist/headless/source/icons/svg/editNote.js +11 -0
  465. package/dist/headless/source/icons/svg/editNote.js.map +7 -0
  466. package/dist/headless/source/icons/svg/filterList.js +11 -0
  467. package/dist/headless/source/icons/svg/filterList.js.map +7 -0
  468. package/dist/headless/source/icons/svg/forkRight.js +10 -0
  469. package/dist/headless/source/icons/svg/forkRight.js.map +7 -0
  470. package/dist/headless/source/icons/svg/groups.js +11 -0
  471. package/dist/headless/source/icons/svg/groups.js.map +7 -0
  472. package/dist/headless/source/icons/svg/hub.js +10 -0
  473. package/dist/headless/source/icons/svg/hub.js.map +7 -0
  474. package/dist/headless/source/icons/svg/index.js +22 -0
  475. package/dist/headless/source/icons/svg/index.js.map +2 -2
  476. package/dist/headless/source/icons/svg/lan.js +11 -0
  477. package/dist/headless/source/icons/svg/lan.js.map +7 -0
  478. package/dist/headless/source/icons/svg/personOff.js +11 -0
  479. package/dist/headless/source/icons/svg/personOff.js.map +7 -0
  480. package/dist/headless/source/icons/svg/schema.js +11 -0
  481. package/dist/headless/source/icons/svg/schema.js.map +7 -0
  482. package/dist/headless/source/index.js +33 -1
  483. package/dist/headless/source/index.js.map +2 -2
  484. package/dist/icons/catalog.d.ts +1 -1
  485. package/dist/icons/catalog.js +78 -1
  486. package/dist/icons/catalog.js.map +1 -1
  487. package/dist/icons/index.js +596 -574
  488. package/dist/icons/index.js.map +1 -1
  489. package/dist/icons/svg/accountTree.d.ts +4 -0
  490. package/dist/icons/svg/accountTree.js +9 -0
  491. package/dist/icons/svg/accountTree.js.map +1 -0
  492. package/dist/icons/svg/callSplit.d.ts +4 -0
  493. package/dist/icons/svg/callSplit.js +9 -0
  494. package/dist/icons/svg/callSplit.js.map +1 -0
  495. package/dist/icons/svg/deviceHub.d.ts +4 -0
  496. package/dist/icons/svg/deviceHub.js +8 -0
  497. package/dist/icons/svg/deviceHub.js.map +1 -0
  498. package/dist/icons/svg/editNote.d.ts +4 -0
  499. package/dist/icons/svg/editNote.js +9 -0
  500. package/dist/icons/svg/editNote.js.map +1 -0
  501. package/dist/icons/svg/filterList.d.ts +4 -0
  502. package/dist/icons/svg/filterList.js +9 -0
  503. package/dist/icons/svg/filterList.js.map +1 -0
  504. package/dist/icons/svg/forkRight.d.ts +4 -0
  505. package/dist/icons/svg/forkRight.js +8 -0
  506. package/dist/icons/svg/forkRight.js.map +1 -0
  507. package/dist/icons/svg/groups.d.ts +4 -0
  508. package/dist/icons/svg/groups.js +9 -0
  509. package/dist/icons/svg/groups.js.map +1 -0
  510. package/dist/icons/svg/hub.d.ts +4 -0
  511. package/dist/icons/svg/hub.js +8 -0
  512. package/dist/icons/svg/hub.js.map +1 -0
  513. package/dist/icons/svg/index.d.ts +11 -0
  514. package/dist/icons/svg/index.js +598 -576
  515. package/dist/icons/svg/index.js.map +1 -1
  516. package/dist/icons/svg/lan.d.ts +4 -0
  517. package/dist/icons/svg/lan.js +9 -0
  518. package/dist/icons/svg/lan.js.map +1 -0
  519. package/dist/icons/svg/personOff.d.ts +4 -0
  520. package/dist/icons/svg/personOff.js +9 -0
  521. package/dist/icons/svg/personOff.js.map +1 -0
  522. package/dist/icons/svg/schema.d.ts +4 -0
  523. package/dist/icons/svg/schema.js +9 -0
  524. package/dist/icons/svg/schema.js.map +1 -0
  525. package/dist/index.d.ts +21 -5
  526. package/dist/index.js +281 -255
  527. package/dist/index.js.map +1 -1
  528. package/dist/source/components/base/icon/icon.jsx +1 -0
  529. package/dist/source/components/base/icon/icon.jsx.map +1 -1
  530. package/dist/source/components/base/ripple/ripple.jsx +1 -0
  531. package/dist/source/components/base/ripple/ripple.jsx.map +1 -1
  532. package/dist/source/components/dataDisplay/accordion/accordion.jsx +61 -18
  533. package/dist/source/components/dataDisplay/accordion/accordion.jsx.map +1 -1
  534. package/dist/source/components/dataDisplay/assetGrid/assetGrid.jsx +1 -0
  535. package/dist/source/components/dataDisplay/assetGrid/assetGrid.jsx.map +1 -1
  536. package/dist/source/components/dataDisplay/avatar/avatar.jsx +29 -3
  537. package/dist/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  538. package/dist/source/components/dataDisplay/badge/badge.jsx +9 -4
  539. package/dist/source/components/dataDisplay/badge/badge.jsx.map +1 -1
  540. package/dist/source/components/dataDisplay/card/card.jsx +5 -3
  541. package/dist/source/components/dataDisplay/card/card.jsx.map +1 -1
  542. package/dist/source/components/dataDisplay/carousel/carousel.jsx +1 -0
  543. package/dist/source/components/dataDisplay/carousel/carousel.jsx.map +1 -1
  544. package/dist/source/components/dataDisplay/chart/chart.jsx +170 -0
  545. package/dist/source/components/dataDisplay/chart/chart.jsx.map +1 -0
  546. package/dist/source/components/dataDisplay/chart/chartTheme.js +78 -0
  547. package/dist/source/components/dataDisplay/chart/chartTheme.js.map +7 -0
  548. package/dist/source/components/dataDisplay/chart/index.js +9 -0
  549. package/dist/source/components/dataDisplay/chart/index.js.map +7 -0
  550. package/dist/source/components/dataDisplay/chat/chat.jsx +5 -3
  551. package/dist/source/components/dataDisplay/chat/chat.jsx.map +1 -1
  552. package/dist/source/components/dataDisplay/chat/chatHeader.jsx +7 -5
  553. package/dist/source/components/dataDisplay/chat/chatHeader.jsx.map +1 -1
  554. package/dist/source/components/dataDisplay/chat/chatMessageBubble.jsx +4 -3
  555. package/dist/source/components/dataDisplay/chat/chatMessageBubble.jsx.map +1 -1
  556. package/dist/source/components/dataDisplay/chat/chatShell.jsx +30 -26
  557. package/dist/source/components/dataDisplay/chat/chatShell.jsx.map +1 -1
  558. package/dist/source/components/dataDisplay/chip/chip.jsx +12 -6
  559. package/dist/source/components/dataDisplay/chip/chip.jsx.map +1 -1
  560. package/dist/source/components/dataDisplay/chipGroup/chipGroup.jsx +1 -0
  561. package/dist/source/components/dataDisplay/chipGroup/chipGroup.jsx.map +1 -1
  562. package/dist/source/components/dataDisplay/descriptionList/descriptionList.jsx +44 -0
  563. package/dist/source/components/dataDisplay/descriptionList/descriptionList.jsx.map +1 -0
  564. package/dist/source/components/dataDisplay/descriptionList/index.js +7 -0
  565. package/dist/source/components/dataDisplay/descriptionList/index.js.map +7 -0
  566. package/dist/source/components/dataDisplay/expansionPanel/expansionPanel.jsx +1 -0
  567. package/dist/source/components/dataDisplay/expansionPanel/expansionPanel.jsx.map +1 -1
  568. package/dist/source/components/dataDisplay/imagesList/imagesList.jsx +1 -0
  569. package/dist/source/components/dataDisplay/imagesList/imagesList.jsx.map +1 -1
  570. package/dist/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx +11 -4
  571. package/dist/source/components/dataDisplay/imagesList/imagesListItem/imagesListItem.jsx.map +1 -1
  572. package/dist/source/components/dataDisplay/kanban/index.js +8 -0
  573. package/dist/source/components/dataDisplay/kanban/index.js.map +7 -0
  574. package/dist/source/components/dataDisplay/kanban/kanban.jsx +101 -0
  575. package/dist/source/components/dataDisplay/kanban/kanban.jsx.map +1 -0
  576. package/dist/source/components/dataDisplay/lazyImage/lazyImage.jsx +5 -3
  577. package/dist/source/components/dataDisplay/lazyImage/lazyImage.jsx.map +1 -1
  578. package/dist/source/components/dataDisplay/list/list.jsx +5 -3
  579. package/dist/source/components/dataDisplay/list/list.jsx.map +1 -1
  580. package/dist/source/components/dataDisplay/meter/index.js +8 -0
  581. package/dist/source/components/dataDisplay/meter/index.js.map +7 -0
  582. package/dist/source/components/dataDisplay/meter/meter.jsx +82 -0
  583. package/dist/source/components/dataDisplay/meter/meter.jsx.map +1 -0
  584. package/dist/source/components/dataDisplay/personChip/index.js +8 -0
  585. package/dist/source/components/dataDisplay/personChip/index.js.map +7 -0
  586. package/dist/source/components/dataDisplay/personChip/personChip.jsx +73 -0
  587. package/dist/source/components/dataDisplay/personChip/personChip.jsx.map +1 -0
  588. package/dist/source/components/dataDisplay/stat/index.js +7 -0
  589. package/dist/source/components/dataDisplay/stat/index.js.map +7 -0
  590. package/dist/source/components/dataDisplay/stat/stat.jsx +74 -0
  591. package/dist/source/components/dataDisplay/stat/stat.jsx.map +1 -0
  592. package/dist/source/components/dataDisplay/table/table.jsx +12 -4
  593. package/dist/source/components/dataDisplay/table/table.jsx.map +1 -1
  594. package/dist/source/components/dataDisplay/table/tableCell.jsx +8 -2
  595. package/dist/source/components/dataDisplay/table/tableCell.jsx.map +1 -1
  596. package/dist/source/components/dataDisplay/table/tableHeadCell.jsx +37 -3
  597. package/dist/source/components/dataDisplay/table/tableHeadCell.jsx.map +1 -1
  598. package/dist/source/components/dataDisplay/table/tablePagination/tablePagination.jsx +1 -0
  599. package/dist/source/components/dataDisplay/table/tablePagination/tablePagination.jsx.map +1 -1
  600. package/dist/source/components/dataDisplay/thumbCard/thumbCard.jsx +11 -7
  601. package/dist/source/components/dataDisplay/thumbCard/thumbCard.jsx.map +1 -1
  602. package/dist/source/components/dataDisplay/timeline/index.js +8 -0
  603. package/dist/source/components/dataDisplay/timeline/index.js.map +7 -0
  604. package/dist/source/components/dataDisplay/timeline/timeline.jsx +66 -0
  605. package/dist/source/components/dataDisplay/timeline/timeline.jsx.map +1 -0
  606. package/dist/source/components/dataDisplay/treeView/treeView.jsx +1 -0
  607. package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  608. package/dist/source/components/dataDisplay/typography/typography.jsx +18 -3
  609. package/dist/source/components/dataDisplay/typography/typography.jsx.map +1 -1
  610. package/dist/source/components/feedBack/confirmDialog/confirmDialog.jsx +2 -1
  611. package/dist/source/components/feedBack/confirmDialog/confirmDialog.jsx.map +1 -1
  612. package/dist/source/components/feedBack/emptyState/emptyState.jsx +49 -0
  613. package/dist/source/components/feedBack/emptyState/emptyState.jsx.map +1 -0
  614. package/dist/source/components/feedBack/emptyState/index.js +6 -0
  615. package/dist/source/components/feedBack/emptyState/index.js.map +7 -0
  616. package/dist/source/components/feedBack/message/message.jsx +1 -0
  617. package/dist/source/components/feedBack/message/message.jsx.map +1 -1
  618. package/dist/source/components/feedBack/modal/modal.jsx +1 -0
  619. package/dist/source/components/feedBack/modal/modal.jsx.map +1 -1
  620. package/dist/source/components/feedBack/progressIndicator/progressIndicator.jsx +53 -10
  621. package/dist/source/components/feedBack/progressIndicator/progressIndicator.jsx.map +1 -1
  622. package/dist/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx +5 -2
  623. package/dist/source/components/feedBack/saveAssetDialog/saveAssetDialog.jsx.map +1 -1
  624. package/dist/source/components/feedBack/skeleton/skeleton.jsx +1 -0
  625. package/dist/source/components/feedBack/skeleton/skeleton.jsx.map +1 -1
  626. package/dist/source/components/feedBack/snackbar/snackbar.jsx +1 -0
  627. package/dist/source/components/feedBack/snackbar/snackbar.jsx.map +1 -1
  628. package/dist/source/components/feedBack/tooltip/tooltip.jsx +5 -2
  629. package/dist/source/components/feedBack/tooltip/tooltip.jsx.map +1 -1
  630. package/dist/source/components/inputs/button/button.jsx +8 -3
  631. package/dist/source/components/inputs/button/button.jsx.map +1 -1
  632. package/dist/source/components/inputs/buttonGroups/buttonGroup.jsx +1 -0
  633. package/dist/source/components/inputs/buttonGroups/buttonGroup.jsx.map +1 -1
  634. package/dist/source/components/inputs/checkbox/checkbox.jsx +1 -0
  635. package/dist/source/components/inputs/checkbox/checkbox.jsx.map +1 -1
  636. package/dist/source/components/inputs/datePicker/dataPickerInput.jsx +4 -3
  637. package/dist/source/components/inputs/datePicker/dataPickerInput.jsx.map +1 -1
  638. package/dist/source/components/inputs/datePicker/datePicker.jsx +5 -6
  639. package/dist/source/components/inputs/datePicker/datePicker.jsx.map +1 -1
  640. package/dist/source/components/inputs/fileDrop/fileDrop.jsx +1 -0
  641. package/dist/source/components/inputs/fileDrop/fileDrop.jsx.map +1 -1
  642. package/dist/source/components/inputs/fileInput/fileInput.jsx +1 -0
  643. package/dist/source/components/inputs/fileInput/fileInput.jsx.map +1 -1
  644. package/dist/source/components/inputs/floatingButton/floatingButton.jsx +1 -0
  645. package/dist/source/components/inputs/floatingButton/floatingButton.jsx.map +1 -1
  646. package/dist/source/components/inputs/radioButton/radioButton.jsx +1 -0
  647. package/dist/source/components/inputs/radioButton/radioButton.jsx.map +1 -1
  648. package/dist/source/components/inputs/rating/rating.jsx +5 -3
  649. package/dist/source/components/inputs/rating/rating.jsx.map +1 -1
  650. package/dist/source/components/inputs/selectField/selectField.jsx +9 -2
  651. package/dist/source/components/inputs/selectField/selectField.jsx.map +1 -1
  652. package/dist/source/components/inputs/slider/slider.jsx +1 -0
  653. package/dist/source/components/inputs/slider/slider.jsx.map +1 -1
  654. package/dist/source/components/inputs/textField/textField.jsx +9 -6
  655. package/dist/source/components/inputs/textField/textField.jsx.map +1 -1
  656. package/dist/source/components/inputs/textField/textFieldAdornment.jsx +4 -3
  657. package/dist/source/components/inputs/textField/textFieldAdornment.jsx.map +1 -1
  658. package/dist/source/components/inputs/textField/textFieldWrapper.jsx +9 -6
  659. package/dist/source/components/inputs/textField/textFieldWrapper.jsx.map +1 -1
  660. package/dist/source/components/inputs/timePicker/timePicker.jsx +1 -0
  661. package/dist/source/components/inputs/timePicker/timePicker.jsx.map +1 -1
  662. package/dist/source/components/inputs/toggle/toggle.jsx +1 -0
  663. package/dist/source/components/inputs/toggle/toggle.jsx.map +1 -1
  664. package/dist/source/components/inputs/valueSlider/valueSlider.jsx +5 -3
  665. package/dist/source/components/inputs/valueSlider/valueSlider.jsx.map +1 -1
  666. package/dist/source/components/layout/appLayout/appLayout.jsx +4 -2
  667. package/dist/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  668. package/dist/source/components/layout/divider/divider.jsx +11 -6
  669. package/dist/source/components/layout/divider/divider.jsx.map +1 -1
  670. package/dist/source/components/layout/floatingWindow/floatingWindow.jsx +1 -0
  671. package/dist/source/components/layout/floatingWindow/floatingWindow.jsx.map +1 -1
  672. package/dist/source/components/layout/grid/grid.jsx +1 -0
  673. package/dist/source/components/layout/grid/grid.jsx.map +1 -1
  674. package/dist/source/components/layout/page/page.jsx +1 -0
  675. package/dist/source/components/layout/page/page.jsx.map +1 -1
  676. package/dist/source/components/layout/pageHeader/pageHeader.jsx +15 -10
  677. package/dist/source/components/layout/pageHeader/pageHeader.jsx.map +1 -1
  678. package/dist/source/components/layout/screenDivider/screenDivider.jsx +1 -0
  679. package/dist/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
  680. package/dist/source/components/layout/sectionHeader/index.js +6 -0
  681. package/dist/source/components/layout/sectionHeader/index.js.map +7 -0
  682. package/dist/source/components/layout/sectionHeader/sectionHeader.jsx +82 -0
  683. package/dist/source/components/layout/sectionHeader/sectionHeader.jsx.map +1 -0
  684. package/dist/source/components/layout/sheet/sheet.jsx +1 -0
  685. package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
  686. package/dist/source/components/layout/stack/stack.jsx +4 -2
  687. package/dist/source/components/layout/stack/stack.jsx.map +1 -1
  688. package/dist/source/components/navigation/appBar/appBar.jsx +8 -5
  689. package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
  690. package/dist/source/components/navigation/bottomBar/bottomBar.jsx +5 -3
  691. package/dist/source/components/navigation/bottomBar/bottomBar.jsx.map +1 -1
  692. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx +1 -0
  693. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
  694. package/dist/source/components/navigation/menu/menu.jsx +1 -0
  695. package/dist/source/components/navigation/menu/menu.jsx.map +1 -1
  696. package/dist/source/components/navigation/overflowMenu/overflowMenu.jsx +1 -0
  697. package/dist/source/components/navigation/overflowMenu/overflowMenu.jsx.map +1 -1
  698. package/dist/source/components/navigation/pagination/pagination.jsx +1 -0
  699. package/dist/source/components/navigation/pagination/pagination.jsx.map +1 -1
  700. package/dist/source/components/navigation/sidebar/sidebar.jsx +1 -0
  701. package/dist/source/components/navigation/sidebar/sidebar.jsx.map +1 -1
  702. package/dist/source/components/navigation/stepper/stepper.jsx +15 -7
  703. package/dist/source/components/navigation/stepper/stepper.jsx.map +1 -1
  704. package/dist/source/components/navigation/tabs/tab/tab.jsx +8 -5
  705. package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  706. package/dist/source/components/navigation/tabs/tabs.jsx +85 -4
  707. package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
  708. package/dist/source/connects/rt/table/table.jsx +9 -1
  709. package/dist/source/connects/rt/table/table.jsx.map +1 -1
  710. package/dist/source/icons/catalog.js +78 -1
  711. package/dist/source/icons/catalog.js.map +2 -2
  712. package/dist/source/icons/svg/accountTree.js +11 -0
  713. package/dist/source/icons/svg/accountTree.js.map +7 -0
  714. package/dist/source/icons/svg/callSplit.js +11 -0
  715. package/dist/source/icons/svg/callSplit.js.map +7 -0
  716. package/dist/source/icons/svg/deviceHub.js +10 -0
  717. package/dist/source/icons/svg/deviceHub.js.map +7 -0
  718. package/dist/source/icons/svg/editNote.js +11 -0
  719. package/dist/source/icons/svg/editNote.js.map +7 -0
  720. package/dist/source/icons/svg/filterList.js +11 -0
  721. package/dist/source/icons/svg/filterList.js.map +7 -0
  722. package/dist/source/icons/svg/forkRight.js +10 -0
  723. package/dist/source/icons/svg/forkRight.js.map +7 -0
  724. package/dist/source/icons/svg/groups.js +11 -0
  725. package/dist/source/icons/svg/groups.js.map +7 -0
  726. package/dist/source/icons/svg/hub.js +10 -0
  727. package/dist/source/icons/svg/hub.js.map +7 -0
  728. package/dist/source/icons/svg/index.js +22 -0
  729. package/dist/source/icons/svg/index.js.map +2 -2
  730. package/dist/source/icons/svg/lan.js +11 -0
  731. package/dist/source/icons/svg/lan.js.map +7 -0
  732. package/dist/source/icons/svg/personOff.js +11 -0
  733. package/dist/source/icons/svg/personOff.js.map +7 -0
  734. package/dist/source/icons/svg/schema.js +11 -0
  735. package/dist/source/icons/svg/schema.js.map +7 -0
  736. package/dist/source/index.js +33 -1
  737. package/dist/source/index.js.map +2 -2
  738. package/package.json +79 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/dataDisplay/table/tableCell.tsx"],"sourcesContent":["import { type JSX, type ParentProps, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface TableCellProps extends JSX.TdHTMLAttributes<HTMLTableCellElement> {\n cellAlign?: \"left\" | \"right\" | \"center\";\n ref?: Ref<HTMLTableCellElement>;\n}\n\nexport function TableCell(props: ParentProps<TableCellProps>): JSX.Element {\n const merged = mergeProps({ cellAlign: \"left\" as const }, props);\n const [local, rest] = splitProps(merged, [\"children\", \"cellAlign\", \"class\", \"ref\"]);\n return (\n <td {...rest} ref={mergeRefs(local.ref)} class={cn(\"smwb-table__cell\", local.class)} align={local.cellAlign || \"left\"}>\n {local.children}\n </td>\n );\n}\n\nexport default TableCell;\n"],"mappings":"AAAA,SAAqC,YAAY,kBAAkB;AACnE,OAAO,QAAQ;AACf,SAAS,iBAA2B;AAO7B,SAAS,UAAU,OAAiD;AACzE,QAAM,SAAS,WAAW,EAAE,WAAW,OAAgB,GAAG,KAAK;AAC/D,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ,CAAC,YAAY,aAAa,SAAS,KAAK,CAAC;AAClF,SACE,CAAC,OAAO,MAAM,KAAK,UAAU,MAAM,GAAG,GAAG,OAAO,GAAG,oBAAoB,MAAM,KAAK,GAAG,OAAO,MAAM,aAAa,QAAQ;AAAA,OACpH,MAAM,SAAS;AAAA,IAClB,EAFC;AAIL;AAEA,IAAO,oBAAQ;","names":[],"file":"tableCell.jsx"}
1
+ {"version":3,"sources":["../../../../../src/components/dataDisplay/table/tableCell.tsx"],"sourcesContent":["import { type JSX, type ParentProps, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface TableCellProps extends JSX.TdHTMLAttributes<HTMLTableCellElement> {\n cellAlign?: \"left\" | \"right\" | \"center\";\n /** The column's name, shown next to the value when the table stacks rows as cards (`Table stackBelow`). */\n label?: string;\n ref?: Ref<HTMLTableCellElement>;\n}\n\nexport function TableCell(props: ParentProps<TableCellProps>): JSX.Element {\n const merged = mergeProps({ cellAlign: \"left\" as const }, props);\n const [local, rest] = splitProps(merged, [\"children\", \"cellAlign\", \"class\", \"label\", \"ref\"]);\n return (\n <td\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\"smwb-table__cell\", local.class)}\n align={local.cellAlign || \"left\"}\n data-label={local.label}\n >\n {local.children}\n </td>\n );\n}\n\nexport default TableCell;\n"],"mappings":"AAAA,SAAqC,YAAY,kBAAkB;AACnE,OAAO,QAAQ;AACf,SAAS,iBAA2B;AAS7B,SAAS,UAAU,OAAiD;AACzE,QAAM,SAAS,WAAW,EAAE,WAAW,OAAgB,GAAG,KAAK;AAC/D,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ,CAAC,YAAY,aAAa,SAAS,SAAS,KAAK,CAAC;AAC3F,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO,GAAG,oBAAoB,MAAM,KAAK;AAAA,IACzC,OAAO,MAAM,aAAa;AAAA,IAC1B,YAAY,MAAM;AAAA,GACnB;AAAA,OACE,MAAM,SAAS;AAAA,IAClB,EARC;AAUL;AAEA,IAAO,oBAAQ;","names":[],"file":"tableCell.jsx"}
@@ -2,6 +2,34 @@ import { Show, 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 INTERACTIVE = [
6
+ "a[href]",
7
+ "button",
8
+ "input",
9
+ "select",
10
+ "textarea",
11
+ "label",
12
+ "summary",
13
+ "[tabindex]",
14
+ "[contenteditable]:not([contenteditable='false'])",
15
+ ...[
16
+ "button",
17
+ "link",
18
+ "checkbox",
19
+ "radio",
20
+ "switch",
21
+ "textbox",
22
+ "searchbox",
23
+ "combobox",
24
+ "spinbutton",
25
+ "slider",
26
+ "menuitem",
27
+ "menuitemcheckbox",
28
+ "menuitemradio",
29
+ "option",
30
+ "tab"
31
+ ].map((role) => `[role='${role}']`)
32
+ ].join(",");
5
33
  function TableHeadCell(props) {
6
34
  const merged = mergeProps({ cellAlign: "left" }, props);
7
35
  const [local, rest] = splitProps(merged, [
@@ -19,11 +47,17 @@ function TableHeadCell(props) {
19
47
  const ariaSort = () => local.sortable ? direction() === "asc" ? "ascending" : direction() === "desc" ? "descending" : "none" : void 0;
20
48
  const iconName = () => direction() === "asc" ? "expand_more" : direction() === "desc" ? "expand_less" : "unfold_more";
21
49
  const onKeyDown = (event) => {
22
- if (local.sortable && local.onSort && (event.key === "Enter" || event.key === " ")) {
50
+ if (!local.sortable || event.target !== event.currentTarget) return;
51
+ if (local.onSort && (event.key === "Enter" || event.key === " ")) {
23
52
  event.preventDefault();
24
53
  local.onSort();
25
54
  }
26
55
  };
56
+ const onClick = (event) => {
57
+ if (!local.sortable || event.defaultPrevented) return;
58
+ if (event.target?.closest(INTERACTIVE) !== event.currentTarget) return;
59
+ local.onSort?.();
60
+ };
27
61
  return <th
28
62
  {...rest}
29
63
  ref={mergeRefs(local.ref)}
@@ -36,8 +70,8 @@ function TableHeadCell(props) {
36
70
  >
37
71
  <span
38
72
  class="smwb-head-cell__content"
39
- onClick={local.sortable ? () => local.onSort?.() : void 0}
40
- onKeyDown={local.sortable ? onKeyDown : void 0}
73
+ onClick={onClick}
74
+ onKeyDown={onKeyDown}
41
75
  role={local.sortable ? "button" : void 0}
42
76
  tabindex={local.sortable ? 0 : void 0}
43
77
  >
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/dataDisplay/table/tableHeadCell.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type SortDirection = \"asc\" | \"desc\" | false;\n\nexport interface TableHeadCellProps extends JSX.ThHTMLAttributes<HTMLTableCellElement> {\n cellAlign?: \"left\" | \"right\" | \"center\";\n /** @deprecated use `sortDirection=\"desc\"`. */\n isSortedByDesc?: boolean;\n /** @deprecated use `sortDirection=\"asc\"`. */\n isSortedByAsc?: boolean;\n /** Enables the interactive sort affordance with keyboard/aria support. */\n sortable?: boolean;\n /** Current sort direction for this column. */\n sortDirection?: SortDirection;\n /** Invoked when the user activates the sort control. */\n onSort?: () => void;\n ref?: Ref<HTMLTableCellElement>;\n}\n\nexport function TableHeadCell(props: ParentProps<TableHeadCellProps>): JSX.Element {\n const merged = mergeProps({ cellAlign: \"left\" as const }, props);\n const [local, rest] = splitProps(merged, [\n \"children\",\n \"class\",\n \"cellAlign\",\n \"isSortedByAsc\",\n \"isSortedByDesc\",\n \"sortable\",\n \"sortDirection\",\n \"onSort\",\n \"ref\",\n ]);\n\n const direction = (): SortDirection =>\n local.sortDirection !== undefined ? local.sortDirection : local.isSortedByAsc ? \"asc\" : local.isSortedByDesc ? \"desc\" : false;\n\n const ariaSort = (): \"ascending\" | \"descending\" | \"none\" | undefined =>\n local.sortable ? (direction() === \"asc\" ? \"ascending\" : direction() === \"desc\" ? \"descending\" : \"none\") : undefined;\n\n /**\n * A sortable column always shows a marker: the current direction once sorted,\n * and `unfold_more` before that — otherwise nothing tells the reader the column\n * can be sorted at all. A cell that is not sortable shows nothing; it used to\n * render an `<Icon name=\"\">`, which reserved a gap and warned about a missing\n * icon under `source: \"smwb\"`.\n */\n const iconName = (): string =>\n direction() === \"asc\" ? \"expand_more\" : direction() === \"desc\" ? \"expand_less\" : \"unfold_more\";\n\n const onKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (event) => {\n if (local.sortable && local.onSort && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n local.onSort();\n }\n };\n\n return (\n <th\n {...rest}\n ref={mergeRefs(local.ref)}\n aria-sort={ariaSort()}\n class={cn(\"smwb-table__cell\", \"smwb-head-cell\", local.class, {\n [`smwb-align_${local.cellAlign}`]: !!local.cellAlign,\n \"smwb-head-cell_sortable\": local.sortable,\n \"smwb-head-cell_sorted\": !!local.sortable && direction() !== false,\n })}\n >\n <span\n class=\"smwb-head-cell__content\"\n onClick={local.sortable ? () => local.onSort?.() : undefined}\n onKeyDown={local.sortable ? onKeyDown : undefined}\n role={local.sortable ? \"button\" : undefined}\n tabindex={local.sortable ? 0 : undefined}\n >\n {local.children}\n <Show when={local.sortable}>\n <Icon class=\"smwb-head-cell__icon\" name={iconName()} size={18} weight={800} />\n </Show>\n </span>\n </th>\n );\n}\n\nexport default TableHeadCell;\n"],"mappings":"AAAA,SAAqC,MAAM,YAAY,kBAAkB;AACzE,OAAO,QAAQ;AACf,SAAS,YAAY;AACrB,SAAS,iBAA2B;AAmB7B,SAAS,cAAc,OAAqD;AACjF,QAAM,SAAS,WAAW,EAAE,WAAW,OAAgB,GAAG,KAAK;AAC/D,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,EACF,CAAC;AAED,QAAM,YAAY,MAChB,MAAM,kBAAkB,SAAY,MAAM,gBAAgB,MAAM,gBAAgB,QAAQ,MAAM,iBAAiB,SAAS;AAE1H,QAAM,WAAW,MACf,MAAM,WAAY,UAAU,MAAM,QAAQ,cAAc,UAAU,MAAM,SAAS,eAAe,SAAU;AAS5G,QAAM,WAAW,MACf,UAAU,MAAM,QAAQ,gBAAgB,UAAU,MAAM,SAAS,gBAAgB;AAEnF,QAAM,YAA8D,CAAC,UAAU;AAC7E,QAAI,MAAM,YAAY,MAAM,WAAW,MAAM,QAAQ,WAAW,MAAM,QAAQ,MAAM;AAClF,YAAM,eAAe;AACrB,YAAM,OAAO;AAAA,IACf;AAAA,EACF;AAEA,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,WAAW,SAAS;AAAA,IACpB,OAAO,GAAG,oBAAoB,kBAAkB,MAAM,OAAO;AAAA,MAC3D,CAAC,cAAc,MAAM,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM;AAAA,MAC3C,2BAA2B,MAAM;AAAA,MACjC,yBAAyB,CAAC,CAAC,MAAM,YAAY,UAAU,MAAM;AAAA,IAC/D,CAAC;AAAA,GACF;AAAA,MACC,CAAC;AAAA,IACC,MAAM;AAAA,IACN,SAAS,MAAM,WAAW,MAAM,MAAM,SAAS,IAAI;AAAA,IACnD,WAAW,MAAM,WAAW,YAAY;AAAA,IACxC,MAAM,MAAM,WAAW,WAAW;AAAA,IAClC,UAAU,MAAM,WAAW,IAAI;AAAA,GAChC;AAAA,SACE,MAAM,SAAS;AAAA,QAChB,CAAC,KAAK,MAAM,MAAM,UAAU;AAAA,UAC1B,CAAC,KAAK,MAAM,uBAAuB,MAAM,SAAS,GAAG,MAAM,IAAI,QAAQ,KAAK,EAAE;AAAA,QAChF,EAFC,KAEM;AAAA,MACT,EAXC,KAWM;AAAA,IACT,EAtBC;AAwBL;AAEA,IAAO,wBAAQ;","names":[],"file":"tableHeadCell.jsx"}
1
+ {"version":3,"sources":["../../../../../src/components/dataDisplay/table/tableHeadCell.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type SortDirection = \"asc\" | \"desc\" | false;\n\nexport interface TableHeadCellProps extends JSX.ThHTMLAttributes<HTMLTableCellElement> {\n cellAlign?: \"left\" | \"right\" | \"center\";\n /** @deprecated use `sortDirection=\"desc\"`. */\n isSortedByDesc?: boolean;\n /** @deprecated use `sortDirection=\"asc\"`. */\n isSortedByAsc?: boolean;\n /**\n * Enables the interactive sort affordance with keyboard/aria support.\n *\n * The children sit inside the sort control, and controls among them keep\n * their own input: Enter and Space sort only while the sort control itself\n * has focus, and a click sorts unless it lands in a nested control (input,\n * button, link, label, anything focusable) or in a portal. Content that is not\n * a control, such as click-to-edit text, keeps its click from sorting by\n * calling `preventDefault()` on it. A nested control's name, or its value,\n * becomes part of the sort control's accessible name.\n */\n sortable?: boolean;\n /** Current sort direction for this column. */\n sortDirection?: SortDirection;\n /** Invoked when the user activates the sort control. */\n onSort?: () => void;\n ref?: Ref<HTMLTableCellElement>;\n}\n\n/**\n * Whatever takes a click of its own inside the sort control. The control\n * matches too (`role=\"button\"`), so it is the nearest match for a click on the\n * header's text or marker, and only then does the click sort.\n */\nconst INTERACTIVE = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"label\",\n \"summary\",\n \"[tabindex]\",\n \"[contenteditable]:not([contenteditable='false'])\",\n ...[\n \"button\",\n \"link\",\n \"checkbox\",\n \"radio\",\n \"switch\",\n \"textbox\",\n \"searchbox\",\n \"combobox\",\n \"spinbutton\",\n \"slider\",\n \"menuitem\",\n \"menuitemcheckbox\",\n \"menuitemradio\",\n \"option\",\n \"tab\",\n ].map((role) => `[role='${role}']`),\n].join(\",\");\n\nexport function TableHeadCell(props: ParentProps<TableHeadCellProps>): JSX.Element {\n const merged = mergeProps({ cellAlign: \"left\" as const }, props);\n const [local, rest] = splitProps(merged, [\n \"children\",\n \"class\",\n \"cellAlign\",\n \"isSortedByAsc\",\n \"isSortedByDesc\",\n \"sortable\",\n \"sortDirection\",\n \"onSort\",\n \"ref\",\n ]);\n\n const direction = (): SortDirection =>\n local.sortDirection !== undefined ? local.sortDirection : local.isSortedByAsc ? \"asc\" : local.isSortedByDesc ? \"desc\" : false;\n\n const ariaSort = (): \"ascending\" | \"descending\" | \"none\" | undefined =>\n local.sortable ? (direction() === \"asc\" ? \"ascending\" : direction() === \"desc\" ? \"descending\" : \"none\") : undefined;\n\n /**\n * A sortable column always shows a marker: the current direction once sorted,\n * and `unfold_more` before that — otherwise nothing tells the reader the column\n * can be sorted at all. A cell that is not sortable shows nothing; it used to\n * render an `<Icon name=\"\">`, which reserved a gap and warned about a missing\n * icon under `source: \"smwb\"`.\n */\n const iconName = (): string =>\n direction() === \"asc\" ? \"expand_more\" : direction() === \"desc\" ? \"expand_less\" : \"unfold_more\";\n\n // Solid binds event handlers once, so both are always attached and check\n // `sortable` themselves: a cell can turn sortable, or stop, after it renders.\n\n // Keys typed into an input or pressed on a button inside bubble up here too;\n // only the control's own keys sort.\n const onKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (event) => {\n if (!local.sortable || event.target !== event.currentTarget) return;\n if (local.onSort && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n local.onSort();\n }\n };\n\n // A click sorts only when the control is the nearest thing that takes it. A\n // click in a Portal rendered inside fails that too: Solid delivers it here,\n // though it landed outside the control.\n const onClick: JSX.EventHandler<HTMLSpanElement, MouseEvent> = (event) => {\n if (!local.sortable || event.defaultPrevented) return;\n if ((event.target as Element | null)?.closest(INTERACTIVE) !== event.currentTarget) return;\n local.onSort?.();\n };\n\n return (\n <th\n {...rest}\n ref={mergeRefs(local.ref)}\n aria-sort={ariaSort()}\n class={cn(\"smwb-table__cell\", \"smwb-head-cell\", local.class, {\n [`smwb-align_${local.cellAlign}`]: !!local.cellAlign,\n \"smwb-head-cell_sortable\": local.sortable,\n \"smwb-head-cell_sorted\": !!local.sortable && direction() !== false,\n })}\n >\n <span\n class=\"smwb-head-cell__content\"\n onClick={onClick}\n onKeyDown={onKeyDown}\n role={local.sortable ? \"button\" : undefined}\n tabindex={local.sortable ? 0 : undefined}\n >\n {local.children}\n <Show when={local.sortable}>\n <Icon class=\"smwb-head-cell__icon\" name={iconName()} size={18} weight={800} />\n </Show>\n </span>\n </th>\n );\n}\n\nexport default TableHeadCell;\n"],"mappings":"AAAA,SAAqC,MAAM,YAAY,kBAAkB;AACzE,OAAO,QAAQ;AACf,SAAS,YAAY;AACrB,SAAS,iBAA2B;AAkCpC,MAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,IAAI,CAAC,SAAS,UAAU,IAAI,IAAI;AACpC,EAAE,KAAK,GAAG;AAEH,SAAS,cAAc,OAAqD;AACjF,QAAM,SAAS,WAAW,EAAE,WAAW,OAAgB,GAAG,KAAK;AAC/D,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,EACF,CAAC;AAED,QAAM,YAAY,MAChB,MAAM,kBAAkB,SAAY,MAAM,gBAAgB,MAAM,gBAAgB,QAAQ,MAAM,iBAAiB,SAAS;AAE1H,QAAM,WAAW,MACf,MAAM,WAAY,UAAU,MAAM,QAAQ,cAAc,UAAU,MAAM,SAAS,eAAe,SAAU;AAS5G,QAAM,WAAW,MACf,UAAU,MAAM,QAAQ,gBAAgB,UAAU,MAAM,SAAS,gBAAgB;AAOnF,QAAM,YAA8D,CAAC,UAAU;AAC7E,QAAI,CAAC,MAAM,YAAY,MAAM,WAAW,MAAM,cAAe;AAC7D,QAAI,MAAM,WAAW,MAAM,QAAQ,WAAW,MAAM,QAAQ,MAAM;AAChE,YAAM,eAAe;AACrB,YAAM,OAAO;AAAA,IACf;AAAA,EACF;AAKA,QAAM,UAAyD,CAAC,UAAU;AACxE,QAAI,CAAC,MAAM,YAAY,MAAM,iBAAkB;AAC/C,QAAK,MAAM,QAA2B,QAAQ,WAAW,MAAM,MAAM,cAAe;AACpF,UAAM,SAAS;AAAA,EACjB;AAEA,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,WAAW,SAAS;AAAA,IACpB,OAAO,GAAG,oBAAoB,kBAAkB,MAAM,OAAO;AAAA,MAC3D,CAAC,cAAc,MAAM,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM;AAAA,MAC3C,2BAA2B,MAAM;AAAA,MACjC,yBAAyB,CAAC,CAAC,MAAM,YAAY,UAAU,MAAM;AAAA,IAC/D,CAAC;AAAA,GACF;AAAA,MACC,CAAC;AAAA,IACC,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,MAAM,MAAM,WAAW,WAAW;AAAA,IAClC,UAAU,MAAM,WAAW,IAAI;AAAA,GAChC;AAAA,SACE,MAAM,SAAS;AAAA,QAChB,CAAC,KAAK,MAAM,MAAM,UAAU;AAAA,UAC1B,CAAC,KAAK,MAAM,uBAAuB,MAAM,SAAS,GAAG,MAAM,IAAI,QAAQ,KAAK,EAAE;AAAA,QAChF,EAFC,KAEM;AAAA,MACT,EAXC,KAWM;AAAA,IACT,EAtBC;AAwBL;AAEA,IAAO,wBAAQ;","names":[],"file":"tableHeadCell.jsx"}
@@ -1,3 +1,4 @@
1
+ import "@smwb/ui-styles/less/tokens.entry.less";
1
2
  import "@smwb/ui-styles/less/components/table/tablePagination/tablePagination.entry.less";
2
3
  import { For, Show } from "solid-js";
3
4
  import cn from "clsx";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/dataDisplay/table/tablePagination/tablePagination.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/table/tablePagination/tablePagination.entry.less\";\nimport { type JSX, For, Show } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../../base/icon\";\n\nexport interface BaseTablePaginationProps {\n page: number;\n limit: number;\n onPrev?: () => void;\n onNext?: () => void;\n limitOptions?: number[];\n onLimitChange?: (limit: number) => void;\n}\n\ninterface WithTotalCount extends BaseTablePaginationProps {\n totalCount: number;\n hasNextPage?: never;\n}\n\ninterface WithHasNextPage extends BaseTablePaginationProps {\n totalCount?: never;\n hasNextPage: boolean;\n}\n\nexport type TablePaginationProps = WithTotalCount | WithHasNextPage;\n\nexport function TablePagination(props: TablePaginationProps): JSX.Element {\n const isInfiniteMode = (): boolean => typeof props.totalCount === \"undefined\";\n const isDisabledNext = (): boolean =>\n isInfiniteMode() ? !props.hasNextPage : props.page === Math.ceil((props.totalCount as number) / props.limit);\n\n const countText = (): string => {\n const from = props.page * props.limit - props.limit;\n const to = props.page * props.limit;\n return `${from}–${to}` + (isInfiniteMode() ? \"\" : ` of ${props.totalCount}`);\n };\n\n const onLimitChange: JSX.EventHandler<HTMLSelectElement, Event> = (event) => {\n props.onLimitChange?.(+event.currentTarget.value);\n };\n\n return (\n <div class=\"smwb-table__pagination\">\n <div class=\"smwb-table__pagination__controls\">\n <Show when={props.limitOptions && props.limitOptions.length > 1}>\n <div class=\"smwb-table__pagination__rows\">\n <span>Rows per page</span>\n <select id=\"rows\" class=\"smwb-table__pagination__select\" onChange={onLimitChange} value={props.limit}>\n <For each={props.limitOptions}>\n {(opt) => (\n <option value={opt} class={cn(\"smwb-select-option\", { selected: opt === props.limit })}>\n {opt}\n </option>\n )}\n </For>\n </select>\n </div>\n </Show>\n <div class=\"smwb-table__pagination__current-count\">{countText()}</div>\n <div class=\"smwb-table__pagination__buttons\">\n <button class=\"smwb-table__pagination__control\" onClick={() => props.onPrev?.()} disabled={props.page === 1}>\n <Icon name=\"chevron_left\" size={24} weight={600} />\n </button>\n <span class=\"smwb-table__pagination__page\">{props.page}</span>\n <button class=\"smwb-table__pagination__control\" onClick={() => props.onNext?.()} disabled={isDisabledNext()}>\n <Icon name=\"chevron_right\" size={24} weight={600} />\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default TablePagination;\n"],"mappings":"AAAA,OAAO;AACP,SAAmB,KAAK,YAAY;AACpC,OAAO,QAAQ;AACf,SAAS,YAAY;AAuBd,SAAS,gBAAgB,OAA0C;AACxE,QAAM,iBAAiB,MAAe,OAAO,MAAM,eAAe;AAClE,QAAM,iBAAiB,MACrB,eAAe,IAAI,CAAC,MAAM,cAAc,MAAM,SAAS,KAAK,KAAM,MAAM,aAAwB,MAAM,KAAK;AAE7G,QAAM,YAAY,MAAc;AAC9B,UAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,MAAM;AAC9C,UAAM,KAAK,MAAM,OAAO,MAAM;AAC9B,WAAO,GAAG,IAAI,SAAI,EAAE,MAAM,eAAe,IAAI,KAAK,OAAO,MAAM,UAAU;AAAA,EAC3E;AAEA,QAAM,gBAA4D,CAAC,UAAU;AAC3E,UAAM,gBAAgB,CAAC,MAAM,cAAc,KAAK;AAAA,EAClD;AAEA,SACE,CAAC,IAAI,MAAM,yBAAyB;AAAA,MAClC,CAAC,IAAI,MAAM,mCAAmC;AAAA,QAC5C,CAAC,KAAK,MAAM,MAAM,gBAAgB,MAAM,aAAa,SAAS,GAAG;AAAA,UAC/D,CAAC,IAAI,MAAM,+BAA+B;AAAA,YACxC,CAAC,KAAK,aAAa,EAAlB,KAAyB;AAAA,YAC1B,CAAC,OAAO,GAAG,OAAO,MAAM,iCAAiC,UAAU,eAAe,OAAO,MAAM,OAAO;AAAA,cACpG,CAAC,IAAI,MAAM,MAAM,cAAc;AAAA,iBAC5B,CAAC,QACA,CAAC,OAAO,OAAO,KAAK,OAAO,GAAG,sBAAsB,EAAE,UAAU,QAAQ,MAAM,MAAM,CAAC,GAAG;AAAA,qBACrF,IAAI;AAAA,kBACP,EAFC,QAGD;AAAA,cACJ,EANC,IAMK;AAAA,YACR,EARC,OAQQ;AAAA,UACX,EAXC,IAWK;AAAA,QACR,EAbC,KAaM;AAAA,QACP,CAAC,IAAI,MAAM,yCAAyC,UAAU,EAAE,EAA/D,IAAqE;AAAA,QACtE,CAAC,IAAI,MAAM,kCAAkC;AAAA,UAC3C,CAAC,OAAO,MAAM,kCAAkC,SAAS,MAAM,MAAM,SAAS,GAAG,UAAU,MAAM,SAAS,GAAG;AAAA,YAC3G,CAAC,KAAK,KAAK,eAAe,MAAM,IAAI,QAAQ,KAAK,EAAE;AAAA,UACrD,EAFC,OAEQ;AAAA,UACT,CAAC,KAAK,MAAM,gCAAgC,MAAM,KAAK,EAAtD,KAA6D;AAAA,UAC9D,CAAC,OAAO,MAAM,kCAAkC,SAAS,MAAM,MAAM,SAAS,GAAG,UAAU,eAAe,GAAG;AAAA,YAC3G,CAAC,KAAK,KAAK,gBAAgB,MAAM,IAAI,QAAQ,KAAK,EAAE;AAAA,UACtD,EAFC,OAEQ;AAAA,QACX,EARC,IAQK;AAAA,MACR,EAzBC,IAyBK;AAAA,IACR,EA3BC;AA6BL;AAEA,IAAO,0BAAQ;","names":[],"file":"tablePagination.jsx"}
1
+ {"version":3,"sources":["../../../../../../src/components/dataDisplay/table/tablePagination/tablePagination.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/table/tablePagination/tablePagination.entry.less\";\nimport { type JSX, For, Show } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../../base/icon\";\n\nexport interface BaseTablePaginationProps {\n page: number;\n limit: number;\n onPrev?: () => void;\n onNext?: () => void;\n limitOptions?: number[];\n onLimitChange?: (limit: number) => void;\n}\n\ninterface WithTotalCount extends BaseTablePaginationProps {\n totalCount: number;\n hasNextPage?: never;\n}\n\ninterface WithHasNextPage extends BaseTablePaginationProps {\n totalCount?: never;\n hasNextPage: boolean;\n}\n\nexport type TablePaginationProps = WithTotalCount | WithHasNextPage;\n\nexport function TablePagination(props: TablePaginationProps): JSX.Element {\n const isInfiniteMode = (): boolean => typeof props.totalCount === \"undefined\";\n const isDisabledNext = (): boolean =>\n isInfiniteMode() ? !props.hasNextPage : props.page === Math.ceil((props.totalCount as number) / props.limit);\n\n const countText = (): string => {\n const from = props.page * props.limit - props.limit;\n const to = props.page * props.limit;\n return `${from}–${to}` + (isInfiniteMode() ? \"\" : ` of ${props.totalCount}`);\n };\n\n const onLimitChange: JSX.EventHandler<HTMLSelectElement, Event> = (event) => {\n props.onLimitChange?.(+event.currentTarget.value);\n };\n\n return (\n <div class=\"smwb-table__pagination\">\n <div class=\"smwb-table__pagination__controls\">\n <Show when={props.limitOptions && props.limitOptions.length > 1}>\n <div class=\"smwb-table__pagination__rows\">\n <span>Rows per page</span>\n <select id=\"rows\" class=\"smwb-table__pagination__select\" onChange={onLimitChange} value={props.limit}>\n <For each={props.limitOptions}>\n {(opt) => (\n <option value={opt} class={cn(\"smwb-select-option\", { selected: opt === props.limit })}>\n {opt}\n </option>\n )}\n </For>\n </select>\n </div>\n </Show>\n <div class=\"smwb-table__pagination__current-count\">{countText()}</div>\n <div class=\"smwb-table__pagination__buttons\">\n <button class=\"smwb-table__pagination__control\" onClick={() => props.onPrev?.()} disabled={props.page === 1}>\n <Icon name=\"chevron_left\" size={24} weight={600} />\n </button>\n <span class=\"smwb-table__pagination__page\">{props.page}</span>\n <button class=\"smwb-table__pagination__control\" onClick={() => props.onNext?.()} disabled={isDisabledNext()}>\n <Icon name=\"chevron_right\" size={24} weight={600} />\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport default TablePagination;\n"],"mappings":"AAAA,OAAO;AACP,OAAO;AACP,SAAmB,KAAK,YAAY;AACpC,OAAO,QAAQ;AACf,SAAS,YAAY;AAuBd,SAAS,gBAAgB,OAA0C;AACxE,QAAM,iBAAiB,MAAe,OAAO,MAAM,eAAe;AAClE,QAAM,iBAAiB,MACrB,eAAe,IAAI,CAAC,MAAM,cAAc,MAAM,SAAS,KAAK,KAAM,MAAM,aAAwB,MAAM,KAAK;AAE7G,QAAM,YAAY,MAAc;AAC9B,UAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,MAAM;AAC9C,UAAM,KAAK,MAAM,OAAO,MAAM;AAC9B,WAAO,GAAG,IAAI,SAAI,EAAE,MAAM,eAAe,IAAI,KAAK,OAAO,MAAM,UAAU;AAAA,EAC3E;AAEA,QAAM,gBAA4D,CAAC,UAAU;AAC3E,UAAM,gBAAgB,CAAC,MAAM,cAAc,KAAK;AAAA,EAClD;AAEA,SACE,CAAC,IAAI,MAAM,yBAAyB;AAAA,MAClC,CAAC,IAAI,MAAM,mCAAmC;AAAA,QAC5C,CAAC,KAAK,MAAM,MAAM,gBAAgB,MAAM,aAAa,SAAS,GAAG;AAAA,UAC/D,CAAC,IAAI,MAAM,+BAA+B;AAAA,YACxC,CAAC,KAAK,aAAa,EAAlB,KAAyB;AAAA,YAC1B,CAAC,OAAO,GAAG,OAAO,MAAM,iCAAiC,UAAU,eAAe,OAAO,MAAM,OAAO;AAAA,cACpG,CAAC,IAAI,MAAM,MAAM,cAAc;AAAA,iBAC5B,CAAC,QACA,CAAC,OAAO,OAAO,KAAK,OAAO,GAAG,sBAAsB,EAAE,UAAU,QAAQ,MAAM,MAAM,CAAC,GAAG;AAAA,qBACrF,IAAI;AAAA,kBACP,EAFC,QAGD;AAAA,cACJ,EANC,IAMK;AAAA,YACR,EARC,OAQQ;AAAA,UACX,EAXC,IAWK;AAAA,QACR,EAbC,KAaM;AAAA,QACP,CAAC,IAAI,MAAM,yCAAyC,UAAU,EAAE,EAA/D,IAAqE;AAAA,QACtE,CAAC,IAAI,MAAM,kCAAkC;AAAA,UAC3C,CAAC,OAAO,MAAM,kCAAkC,SAAS,MAAM,MAAM,SAAS,GAAG,UAAU,MAAM,SAAS,GAAG;AAAA,YAC3G,CAAC,KAAK,KAAK,eAAe,MAAM,IAAI,QAAQ,KAAK,EAAE;AAAA,UACrD,EAFC,OAEQ;AAAA,UACT,CAAC,KAAK,MAAM,gCAAgC,MAAM,KAAK,EAAtD,KAA6D;AAAA,UAC9D,CAAC,OAAO,MAAM,kCAAkC,SAAS,MAAM,MAAM,SAAS,GAAG,UAAU,eAAe,GAAG;AAAA,YAC3G,CAAC,KAAK,KAAK,gBAAgB,MAAM,IAAI,QAAQ,KAAK,EAAE;AAAA,UACtD,EAFC,OAEQ;AAAA,QACX,EARC,IAQK;AAAA,MACR,EAzBC,IAyBK;AAAA,IACR,EA3BC;AA6BL;AAEA,IAAO,0BAAQ;","names":[],"file":"tablePagination.jsx"}
@@ -1,5 +1,6 @@
1
+ import "@smwb/ui-styles/less/tokens.entry.less";
1
2
  import "@smwb/ui-styles/less/components/thumbCard/thumbCard.entry.less";
2
- import { Show, createSignal, mergeProps, onCleanup, splitProps } from "solid-js";
3
+ import { Show, children, createSignal, mergeProps, onCleanup, splitProps } from "solid-js";
3
4
  import { Portal, isServer } from "solid-js/web";
4
5
  import cn from "clsx";
5
6
  import { createFloating } from "../../../primitives/createFloating";
@@ -22,6 +23,9 @@ function ThumbCard(props) {
22
23
  "class",
23
24
  "ref"
24
25
  ]);
26
+ const topStart = children(() => local.topStart);
27
+ const topEnd = children(() => local.topEnd);
28
+ const caption = children(() => local.caption);
25
29
  const floating = createFloating({ placement: () => "right" });
26
30
  const [previewOpen, setPreviewOpen] = createSignal(false);
27
31
  let hoverTimer;
@@ -67,15 +71,15 @@ function ThumbCard(props) {
67
71
  >
68
72
  <div class="smwb-thumb-card__media">
69
73
  <LazyImage src={local.src} lazy={local.lazy} fallback={local.fallback} />
70
- <Show when={local.topStart}>
71
- <div class="smwb-thumb-card__slot smwb-thumb-card__slot--start">{local.topStart}</div>
74
+ <Show when={topStart()}>
75
+ <div class="smwb-thumb-card__slot smwb-thumb-card__slot--start">{topStart()}</div>
72
76
  </Show>
73
- <Show when={local.topEnd}>
74
- <div class="smwb-thumb-card__slot smwb-thumb-card__slot--end">{local.topEnd}</div>
77
+ <Show when={topEnd()}>
78
+ <div class="smwb-thumb-card__slot smwb-thumb-card__slot--end">{topEnd()}</div>
75
79
  </Show>
76
80
  </div>
77
- <Show when={local.caption}>
78
- <div class="smwb-thumb-card__caption">{local.caption}</div>
81
+ <Show when={caption()}>
82
+ <div class="smwb-thumb-card__caption">{caption()}</div>
79
83
  </Show>
80
84
  <Show when={previewOpen() && !isServer}>
81
85
  <Portal>
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/dataDisplay/thumbCard/thumbCard.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/thumbCard/thumbCard.entry.less\";\nimport { type JSX, Show, createSignal, mergeProps, onCleanup, splitProps } from \"solid-js\";\nimport { Portal, isServer } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { createFloating } from \"../../../primitives/createFloating\";\nimport { LazyImage } from \"../lazyImage\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface ThumbCardProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Thumbnail URL; falls back to `fallback` when missing / failed. */\n src?: string;\n caption?: JSX.Element;\n selected?: boolean;\n /** Makes the card a selectable button (keyboard + `aria-pressed`). */\n onSelect?: () => void;\n /** Shown in place of the image when `src` is missing / fails. */\n fallback?: JSX.Element;\n /** A larger preview shown in a floating popup after a hover delay. */\n hoverPreview?: JSX.Element | string;\n /** Top-left overlay slot (e.g. a favourite star). */\n topStart?: JSX.Element;\n /** Top-right overlay slot (e.g. a kebab menu). */\n topEnd?: JSX.Element;\n lazy?: boolean;\n disabled?: boolean;\n /** Delay (ms) before the hover preview appears. Default 350. */\n hoverDelay?: number;\n ref?: Ref<HTMLDivElement>;\n}\n\n/**\n * A selectable gallery card: image with an `onError` fallback + optional lazy\n * load, keyboard/`aria-pressed` selection, corner action slots, and a delayed\n * floating hover-preview. The generic gallery-card behaviour every app rebuilds\n * on top of the primitives. SSR-safe — the hover preview is client-only.\n */\nexport function ThumbCard(props: ThumbCardProps): JSX.Element {\n const merged = mergeProps({ lazy: true, hoverDelay: 350 }, props);\n const [local, rest] = splitProps(merged, [\n \"src\",\n \"caption\",\n \"selected\",\n \"onSelect\",\n \"fallback\",\n \"hoverPreview\",\n \"topStart\",\n \"topEnd\",\n \"lazy\",\n \"disabled\",\n \"hoverDelay\",\n \"class\",\n \"ref\",\n ]);\n\n const floating = createFloating({ placement: () => \"right\" });\n const [previewOpen, setPreviewOpen] = createSignal(false);\n let hoverTimer: ReturnType<typeof setTimeout> | undefined;\n\n const clearTimer = (): void => {\n if (hoverTimer) {\n clearTimeout(hoverTimer);\n hoverTimer = undefined;\n }\n };\n const onEnter = (): void => {\n if (local.hoverPreview == null || local.disabled) return;\n clearTimer();\n hoverTimer = setTimeout(() => setPreviewOpen(true), local.hoverDelay);\n };\n const onLeave = (): void => {\n clearTimer();\n setPreviewOpen(false);\n };\n onCleanup(clearTimer);\n\n const interactive = (): boolean => !!local.onSelect && !local.disabled;\n const onKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (event) => {\n if (interactive() && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n local.onSelect?.();\n }\n };\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref, (el) => floating.setReference(el))}\n class={cn(\"smwb-thumb-card\", local.class, {\n \"smwb-thumb-card--selected\": local.selected,\n \"smwb-thumb-card--disabled\": local.disabled,\n \"smwb-thumb-card--interactive\": interactive(),\n })}\n role={interactive() ? \"button\" : undefined}\n tabindex={interactive() ? 0 : undefined}\n aria-pressed={local.onSelect ? (local.selected ?? false) : undefined}\n aria-disabled={local.disabled || undefined}\n onClick={interactive() ? () => local.onSelect?.() : undefined}\n onKeyDown={onKeyDown}\n onMouseEnter={onEnter}\n onMouseLeave={onLeave}\n >\n <div class=\"smwb-thumb-card__media\">\n <LazyImage src={local.src} lazy={local.lazy} fallback={local.fallback} />\n <Show when={local.topStart}>\n <div class=\"smwb-thumb-card__slot smwb-thumb-card__slot--start\">{local.topStart}</div>\n </Show>\n <Show when={local.topEnd}>\n <div class=\"smwb-thumb-card__slot smwb-thumb-card__slot--end\">{local.topEnd}</div>\n </Show>\n </div>\n <Show when={local.caption}>\n <div class=\"smwb-thumb-card__caption\">{local.caption}</div>\n </Show>\n <Show when={previewOpen() && !isServer}>\n <Portal>\n <div class=\"smwb-thumb-card__preview\" ref={(el) => floating.setFloating(el)} style={floating.floatingStyles()}>\n {typeof local.hoverPreview === \"string\" ? (\n <img src={local.hoverPreview} alt=\"\" />\n ) : (\n (local.hoverPreview as JSX.Element)\n )}\n </div>\n </Portal>\n </Show>\n </div>\n );\n}\n\nexport default ThumbCard;\n"],"mappings":"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","names":[],"file":"thumbCard.jsx"}
1
+ {"version":3,"sources":["../../../../../src/components/dataDisplay/thumbCard/thumbCard.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/thumbCard/thumbCard.entry.less\";\nimport { type JSX, Show, children, createSignal, mergeProps, onCleanup, splitProps } from \"solid-js\";\nimport { Portal, isServer } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { createFloating } from \"../../../primitives/createFloating\";\nimport { LazyImage } from \"../lazyImage\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface ThumbCardProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Thumbnail URL; falls back to `fallback` when missing / failed. */\n src?: string;\n caption?: JSX.Element;\n selected?: boolean;\n /** Makes the card a selectable button (keyboard + `aria-pressed`). */\n onSelect?: () => void;\n /** Shown in place of the image when `src` is missing / fails. */\n fallback?: JSX.Element;\n /** A larger preview shown in a floating popup after a hover delay. */\n hoverPreview?: JSX.Element | string;\n /** Top-left overlay slot (e.g. a favourite star). */\n topStart?: JSX.Element;\n /** Top-right overlay slot (e.g. a kebab menu). */\n topEnd?: JSX.Element;\n lazy?: boolean;\n disabled?: boolean;\n /** Delay (ms) before the hover preview appears. Default 350. */\n hoverDelay?: number;\n ref?: Ref<HTMLDivElement>;\n}\n\n/**\n * A selectable gallery card: image with an `onError` fallback + optional lazy\n * load, keyboard/`aria-pressed` selection, corner action slots, and a delayed\n * floating hover-preview. The generic gallery-card behaviour every app rebuilds\n * on top of the primitives. SSR-safe — the hover preview is client-only.\n */\nexport function ThumbCard(props: ThumbCardProps): JSX.Element {\n const merged = mergeProps({ lazy: true, hoverDelay: 350 }, props);\n const [local, rest] = splitProps(merged, [\n \"src\",\n \"caption\",\n \"selected\",\n \"onSelect\",\n \"fallback\",\n \"hoverPreview\",\n \"topStart\",\n \"topEnd\",\n \"lazy\",\n \"disabled\",\n \"hoverDelay\",\n \"class\",\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 // (The hover preview is read on hover only, after hydration.)\n const topStart = children(() => local.topStart);\n const topEnd = children(() => local.topEnd);\n const caption = children(() => local.caption);\n\n const floating = createFloating({ placement: () => \"right\" });\n const [previewOpen, setPreviewOpen] = createSignal(false);\n let hoverTimer: ReturnType<typeof setTimeout> | undefined;\n\n const clearTimer = (): void => {\n if (hoverTimer) {\n clearTimeout(hoverTimer);\n hoverTimer = undefined;\n }\n };\n const onEnter = (): void => {\n if (local.hoverPreview == null || local.disabled) return;\n clearTimer();\n hoverTimer = setTimeout(() => setPreviewOpen(true), local.hoverDelay);\n };\n const onLeave = (): void => {\n clearTimer();\n setPreviewOpen(false);\n };\n onCleanup(clearTimer);\n\n const interactive = (): boolean => !!local.onSelect && !local.disabled;\n const onKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (event) => {\n if (interactive() && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n local.onSelect?.();\n }\n };\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref, (el) => floating.setReference(el))}\n class={cn(\"smwb-thumb-card\", local.class, {\n \"smwb-thumb-card--selected\": local.selected,\n \"smwb-thumb-card--disabled\": local.disabled,\n \"smwb-thumb-card--interactive\": interactive(),\n })}\n role={interactive() ? \"button\" : undefined}\n tabindex={interactive() ? 0 : undefined}\n aria-pressed={local.onSelect ? (local.selected ?? false) : undefined}\n aria-disabled={local.disabled || undefined}\n onClick={interactive() ? () => local.onSelect?.() : undefined}\n onKeyDown={onKeyDown}\n onMouseEnter={onEnter}\n onMouseLeave={onLeave}\n >\n <div class=\"smwb-thumb-card__media\">\n <LazyImage src={local.src} lazy={local.lazy} fallback={local.fallback} />\n <Show when={topStart()}>\n <div class=\"smwb-thumb-card__slot smwb-thumb-card__slot--start\">{topStart()}</div>\n </Show>\n <Show when={topEnd()}>\n <div class=\"smwb-thumb-card__slot smwb-thumb-card__slot--end\">{topEnd()}</div>\n </Show>\n </div>\n <Show when={caption()}>\n <div class=\"smwb-thumb-card__caption\">{caption()}</div>\n </Show>\n <Show when={previewOpen() && !isServer}>\n <Portal>\n <div class=\"smwb-thumb-card__preview\" ref={(el) => floating.setFloating(el)} style={floating.floatingStyles()}>\n {typeof local.hoverPreview === \"string\" ? (\n <img src={local.hoverPreview} alt=\"\" />\n ) : (\n (local.hoverPreview as JSX.Element)\n )}\n </div>\n </Portal>\n </Show>\n </div>\n );\n}\n\nexport default ThumbCard;\n"],"mappings":"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","names":[],"file":"thumbCard.jsx"}
@@ -0,0 +1,8 @@
1
+ import { Timeline, TimelineGroup, TimelineItem, default as default2 } from "./timeline";
2
+ export {
3
+ Timeline,
4
+ TimelineGroup,
5
+ TimelineItem,
6
+ default2 as default
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/components/dataDisplay/timeline/index.ts"],
4
+ "sourcesContent": ["export { Timeline, TimelineGroup, TimelineItem, default } from \"./timeline\";\nexport type { TimelineProps, TimelineGroupProps, TimelineItemProps, TimelineTone } from \"./timeline\";\n"],
5
+ "mappings": "AAAA,SAAS,UAAU,eAAe,cAAc,WAAAA,gBAAe;",
6
+ "names": ["default"]
7
+ }
@@ -0,0 +1,66 @@
1
+ import "@smwb/ui-styles/less/tokens.entry.less";
2
+ import "@smwb/ui-styles/less/components/timeline/timeline.entry.less";
3
+ import { Show, children, mergeProps, splitProps } from "solid-js";
4
+ import cn from "clsx";
5
+ import { Icon } from "../../base/icon";
6
+ import { mergeRefs } from "../../../primitives/mergeRefs";
7
+ function Timeline(props) {
8
+ const [local, rest] = splitProps(props, ["class", "dense", "stickyLabels", "children", "ref"]);
9
+ return <ol
10
+ {...rest}
11
+ ref={mergeRefs(local.ref)}
12
+ class={cn(
13
+ "smwb-timeline",
14
+ { "smwb-timeline_dense": local.dense, "smwb-timeline_sticky-labels": local.stickyLabels },
15
+ local.class
16
+ )}
17
+ >
18
+ {local.children}
19
+ </ol>;
20
+ }
21
+ function TimelineGroup(props) {
22
+ const [local, rest] = splitProps(props, ["class", "label", "children", "ref"]);
23
+ return <li {...rest} ref={mergeRefs(local.ref)} class={cn("smwb-timeline__group", local.class)}>
24
+ <div class="smwb-timeline__label">{local.label}</div>
25
+ <ol class="smwb-timeline__items">{local.children}</ol>
26
+ </li>;
27
+ }
28
+ function TimelineItem(props) {
29
+ const merged = mergeProps({ tone: "neutral" }, props);
30
+ const [local, rest] = splitProps(merged, ["class", "title", "meta", "time", "icon", "tone", "children", "ref"]);
31
+ const meta = children(() => local.meta);
32
+ const time = children(() => local.time);
33
+ const icon = children(() => local.icon);
34
+ const content = children(() => local.children);
35
+ return <li
36
+ {...rest}
37
+ ref={mergeRefs(local.ref)}
38
+ class={cn("smwb-timeline__item", `smwb-timeline__item_tone-${local.tone}`, local.class)}
39
+ >
40
+ <span class="smwb-timeline__mark" aria-hidden="true">
41
+ <Show when={icon()} fallback={<span class="smwb-timeline__dot" />}>
42
+ {(resolved) => typeof resolved() === "string" ? <Icon name={resolved()} size={16} /> : resolved()}
43
+ </Show>
44
+ </span>
45
+ <div class="smwb-timeline__body">
46
+ <div class="smwb-timeline__title">{local.title}</div>
47
+ <Show when={meta()}>
48
+ <div class="smwb-timeline__meta">{meta()}</div>
49
+ </Show>
50
+ <Show when={content()}>
51
+ <div class="smwb-timeline__content">{content()}</div>
52
+ </Show>
53
+ </div>
54
+ <Show when={time()}>
55
+ <div class="smwb-timeline__time">{time()}</div>
56
+ </Show>
57
+ </li>;
58
+ }
59
+ var timeline_default = Timeline;
60
+ export {
61
+ Timeline,
62
+ TimelineGroup,
63
+ TimelineItem,
64
+ timeline_default as default
65
+ };
66
+ //# sourceMappingURL=timeline.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/dataDisplay/timeline/timeline.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/timeline/timeline.entry.less\";\nimport { type JSX, type ParentProps, Show, children, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport type TimelineTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"error\";\n\nexport interface TimelineProps extends JSX.HTMLAttributes<HTMLOListElement> {\n /** Tighter rows, for side panels. */\n dense?: boolean;\n /** Keep a group's label in view while its events scroll past (in a scrolling container). */\n stickyLabels?: boolean;\n ref?: Ref<HTMLOListElement>;\n}\n\nexport interface TimelineGroupProps extends Omit<JSX.HTMLAttributes<HTMLLIElement>, \"title\"> {\n /** What groups the events — a day, a week, a stage. */\n label: JSX.Element;\n ref?: Ref<HTMLLIElement>;\n}\n\nexport interface TimelineItemProps extends Omit<JSX.HTMLAttributes<HTMLLIElement>, \"title\"> {\n /** The event itself: a line of text, usually a link. */\n title: JSX.Element;\n /** A second line: who, what kind, where. */\n meta?: JSX.Element;\n /** When: a time or a date, at the end of the row. */\n time?: JSX.Element;\n /** The event's mark on the line: a Material Symbols name or an element. A dot without it. */\n icon?: string | JSX.Element;\n /** Colour of the mark. */\n tone?: TimelineTone;\n ref?: Ref<HTMLLIElement>;\n}\n\n/**\n * Events on a line, newest or oldest first as given: TimelineItem children,\n * optionally grouped by TimelineGroup (a day, a week).\n */\nexport function Timeline(props: ParentProps<TimelineProps>): JSX.Element {\n const [local, rest] = splitProps(props, [\"class\", \"dense\", \"stickyLabels\", \"children\", \"ref\"]);\n return (\n <ol\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\n \"smwb-timeline\",\n { \"smwb-timeline_dense\": local.dense, \"smwb-timeline_sticky-labels\": local.stickyLabels },\n local.class\n )}\n >\n {local.children}\n </ol>\n );\n}\n\n/** A labelled run of events: the label, then its TimelineItem children on the line. */\nexport function TimelineGroup(props: ParentProps<TimelineGroupProps>): JSX.Element {\n const [local, rest] = splitProps(props, [\"class\", \"label\", \"children\", \"ref\"]);\n return (\n <li {...rest} ref={mergeRefs(local.ref)} class={cn(\"smwb-timeline__group\", local.class)}>\n <div class=\"smwb-timeline__label\">{local.label}</div>\n <ol class=\"smwb-timeline__items\">{local.children}</ol>\n </li>\n );\n}\n\n/** One event: its mark on the line, the title and meta lines, the time; children below. */\nexport function TimelineItem(props: ParentProps<TimelineItemProps>): JSX.Element {\n const merged = mergeProps({ tone: \"neutral\" as TimelineTone }, props);\n const [local, rest] = splitProps(merged, [\"class\", \"title\", \"meta\", \"time\", \"icon\", \"tone\", \"children\", \"ref\"]);\n\n // Read each slot once: markup passed as a prop is created anew on every read,\n // and during hydration the copy made for a <Show> test has no server DOM node.\n const meta = children(() => local.meta);\n const time = children(() => local.time);\n const icon = children(() => local.icon);\n const content = children(() => local.children);\n\n return (\n <li\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\"smwb-timeline__item\", `smwb-timeline__item_tone-${local.tone}`, local.class)}\n >\n <span class=\"smwb-timeline__mark\" aria-hidden=\"true\">\n <Show when={icon()} fallback={<span class=\"smwb-timeline__dot\" />}>\n {(resolved) => (typeof resolved() === \"string\" ? <Icon name={resolved() as string} size={16} /> : resolved())}\n </Show>\n </span>\n <div class=\"smwb-timeline__body\">\n <div class=\"smwb-timeline__title\">{local.title}</div>\n <Show when={meta()}>\n <div class=\"smwb-timeline__meta\">{meta()}</div>\n </Show>\n <Show when={content()}>\n <div class=\"smwb-timeline__content\">{content()}</div>\n </Show>\n </div>\n <Show when={time()}>\n <div class=\"smwb-timeline__time\">{time()}</div>\n </Show>\n </li>\n );\n}\n\nexport default Timeline;\n"],"mappings":"AAAA,OAAO;AACP,OAAO;AACP,SAAqC,MAAM,UAAU,YAAY,kBAAkB;AACnF,OAAO,QAAQ;AACf,SAAS,YAAY;AACrB,SAAS,iBAA2B;AAoC7B,SAAS,SAAS,OAAgD;AACvE,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,SAAS,SAAS,gBAAgB,YAAY,KAAK,CAAC;AAC7F,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO;AAAA,MACL;AAAA,MACA,EAAE,uBAAuB,MAAM,OAAO,+BAA+B,MAAM,aAAa;AAAA,MACxF,MAAM;AAAA,IACR;AAAA,GACD;AAAA,OACE,MAAM,SAAS;AAAA,IAClB,EAVC;AAYL;AAGO,SAAS,cAAc,OAAqD;AACjF,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,OAAO,CAAC,SAAS,SAAS,YAAY,KAAK,CAAC;AAC7E,SACE,CAAC,OAAO,MAAM,KAAK,UAAU,MAAM,GAAG,GAAG,OAAO,GAAG,wBAAwB,MAAM,KAAK,GAAG;AAAA,MACvF,CAAC,IAAI,MAAM,wBAAwB,MAAM,MAAM,EAA9C,IAAoD;AAAA,MACrD,CAAC,GAAG,MAAM,wBAAwB,MAAM,SAAS,EAAhD,GAAqD;AAAA,IACxD,EAHC;AAKL;AAGO,SAAS,aAAa,OAAoD;AAC/E,QAAM,SAAS,WAAW,EAAE,MAAM,UAA0B,GAAG,KAAK;AACpE,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ,CAAC,SAAS,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,YAAY,KAAK,CAAC;AAI9G,QAAM,OAAO,SAAS,MAAM,MAAM,IAAI;AACtC,QAAM,OAAO,SAAS,MAAM,MAAM,IAAI;AACtC,QAAM,OAAO,SAAS,MAAM,MAAM,IAAI;AACtC,QAAM,UAAU,SAAS,MAAM,MAAM,QAAQ;AAE7C,SACE,CAAC;AAAA,QACK;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO,GAAG,uBAAuB,4BAA4B,MAAM,IAAI,IAAI,MAAM,KAAK;AAAA,GACvF;AAAA,MACC,CAAC,KAAK,MAAM,sBAAsB,YAAY,OAAO;AAAA,QACnD,CAAC,KAAK,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,MAAM,qBAAqB,IAAI;AAAA,WAChE,CAAC,aAAc,OAAO,SAAS,MAAM,WAAW,CAAC,KAAK,MAAM,SAAS,GAAa,MAAM,IAAI,KAAK,SAAS,EAAG;AAAA,QAChH,EAFC,KAEM;AAAA,MACT,EAJC,KAIM;AAAA,MACP,CAAC,IAAI,MAAM,sBAAsB;AAAA,QAC/B,CAAC,IAAI,MAAM,wBAAwB,MAAM,MAAM,EAA9C,IAAoD;AAAA,QACrD,CAAC,KAAK,MAAM,KAAK,GAAG;AAAA,UAClB,CAAC,IAAI,MAAM,uBAAuB,KAAK,EAAE,EAAxC,IAA8C;AAAA,QACjD,EAFC,KAEM;AAAA,QACP,CAAC,KAAK,MAAM,QAAQ,GAAG;AAAA,UACrB,CAAC,IAAI,MAAM,0BAA0B,QAAQ,EAAE,EAA9C,IAAoD;AAAA,QACvD,EAFC,KAEM;AAAA,MACT,EARC,IAQK;AAAA,MACN,CAAC,KAAK,MAAM,KAAK,GAAG;AAAA,QAClB,CAAC,IAAI,MAAM,uBAAuB,KAAK,EAAE,EAAxC,IAA8C;AAAA,MACjD,EAFC,KAEM;AAAA,IACT,EAtBC;AAwBL;AAEA,IAAO,mBAAQ;","names":[],"file":"timeline.jsx"}
@@ -1,3 +1,4 @@
1
+ import "@smwb/ui-styles/less/tokens.entry.less";
1
2
  import "@smwb/ui-styles/less/components/treeView/treeView.entry.less";
2
3
  import { For, Show, createContext, createSignal, mergeProps, splitProps, useContext } from "solid-js";
3
4
  import cn from "clsx";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/dataDisplay/treeView/treeView.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/treeView/treeView.entry.less\";\nimport { type Accessor, type JSX, For, Show, createContext, createSignal, mergeProps, splitProps, useContext } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface ITreeNodeItem {\n /** Stable identifier. Falls back to the positional path when omitted. */\n id?: string;\n label: string;\n children?: ITreeNodeItem[];\n /** Hint that the node is expandable even before its children are loaded. */\n hasChildren?: boolean;\n}\n\nexport interface TreeViewProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n nodeIcon?: { opened?: string; closed?: string };\n listIcon?: string;\n data: ITreeNodeItem[];\n expanded?: string[];\n defaultExpanded?: string[];\n onExpandedChange?: (expanded: string[]) => void;\n selected?: string[];\n defaultSelected?: string[];\n /** Reports the full selection plus, for user toggles, the node that just changed. */\n onSelectedChange?: (selected: string[], changed?: { id: string; selected: boolean }) => void;\n selectable?: boolean;\n checkboxes?: boolean;\n renderLabel?: (item: ITreeNodeItem, nodeId: string) => JSX.Element;\n loadChildren?: (item: ITreeNodeItem, nodeId: string) => Promise<ITreeNodeItem[]>;\n ref?: Ref<HTMLDivElement>;\n}\n\ninterface TreeContextValue {\n expandedIds: Accessor<string[]>;\n selectedIds: Accessor<string[]>;\n loadedChildren: Accessor<Record<string, ITreeNodeItem[]>>;\n loadingIds: Accessor<string[]>;\n toggleExpanded: (id: string) => void;\n setOpen: (id: string, open: boolean) => void;\n toggleSelected: (id: string) => void;\n ensureLoaded: (item: ITreeNodeItem, nodeId: string) => void;\n selectable: boolean;\n checkboxes: boolean;\n nodeIcon: { opened?: string; closed?: string };\n listIcon: string;\n renderLabel: ((item: ITreeNodeItem, nodeId: string) => JSX.Element) | undefined;\n hasLoader: boolean;\n}\n\nconst TreeContext = createContext<TreeContextValue>();\n\nfunction TreeNode(props: { item: ITreeNodeItem; path: string }): JSX.Element {\n const ctx = useContext(TreeContext)!;\n const nodeId = (): string => props.item.id ?? props.path;\n const resolvedChildren = (): ITreeNodeItem[] | undefined => props.item.children ?? ctx.loadedChildren()[nodeId()];\n const isLazy = (): boolean => ctx.hasLoader && (!!props.item.hasChildren || !!ctx.loadedChildren()[nodeId()]);\n const hasChildNodes = (): boolean => (!!resolvedChildren() && (resolvedChildren()?.length ?? 0) > 0) || isLazy();\n const isOpen = (): boolean => ctx.expandedIds().includes(nodeId());\n const isSelected = (): boolean => ctx.selectedIds().includes(nodeId());\n const isLoading = (): boolean => ctx.loadingIds().includes(nodeId());\n\n const onLabelClick = (): void => {\n if (hasChildNodes()) {\n if (!isOpen()) ctx.ensureLoaded(props.item, nodeId());\n ctx.toggleExpanded(nodeId());\n }\n if (ctx.selectable) ctx.toggleSelected(nodeId());\n };\n\n const onKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onLabelClick();\n } else if (event.key === \"ArrowRight\" && hasChildNodes()) {\n ctx.ensureLoaded(props.item, nodeId());\n ctx.setOpen(nodeId(), true);\n } else if (event.key === \"ArrowLeft\" && hasChildNodes()) {\n ctx.setOpen(nodeId(), false);\n }\n };\n\n return (\n <div\n class={cn(\"smwb-tree__node\", { \"smwb-tree__node_selected\": isSelected() })}\n role=\"treeitem\"\n aria-expanded={hasChildNodes() ? isOpen() : undefined}\n aria-selected={ctx.selectable || ctx.checkboxes ? isSelected() : undefined}\n >\n <span class=\"smwb-tree__node__content\" onClick={onLabelClick} onKeyDown={onKeyDown} tabindex={0} role=\"button\">\n <Show when={ctx.checkboxes}>\n <input\n type=\"checkbox\"\n class=\"smwb-tree__node__checkbox\"\n checked={isSelected()}\n onClick={(e) => e.stopPropagation()}\n onChange={() => ctx.toggleSelected(nodeId())}\n aria-label={props.item.label}\n />\n </Show>\n <span class=\"smwb-tree__node__label\">\n <Show when={hasChildNodes()} fallback={<Icon name={ctx.listIcon} size={20} />}>\n <Icon name={isOpen() ? ctx.nodeIcon.opened ?? \"folder_open\" : ctx.nodeIcon.closed ?? \"folder\"} fill={1} size={20} />\n </Show>\n {ctx.renderLabel ? ctx.renderLabel(props.item, nodeId()) : props.item.label}\n </span>\n </span>\n <Show when={hasChildNodes() && isOpen()}>\n <div role=\"group\">\n <Show\n when={!(isLoading() && !resolvedChildren())}\n fallback={\n <div class=\"smwb-tree__node__loading\" role=\"status\">\n Загрузка…\n </div>\n }\n >\n <For each={resolvedChildren() ?? []}>\n {(child, idx) => <TreeNode item={child} path={`${props.path}.${idx()}`} />}\n </For>\n </Show>\n </div>\n </Show>\n </div>\n );\n}\n\nexport function TreeView(props: TreeViewProps): JSX.Element {\n const merged = mergeProps(\n {\n listIcon: \"draft\",\n nodeIcon: { closed: \"folder\", opened: \"folder_open\" } as { opened?: string; closed?: string },\n data: [] as ITreeNodeItem[],\n defaultExpanded: [] as string[],\n defaultSelected: [] as string[],\n selectable: false,\n checkboxes: false,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"listIcon\",\n \"nodeIcon\",\n \"data\",\n \"expanded\",\n \"defaultExpanded\",\n \"onExpandedChange\",\n \"selected\",\n \"defaultSelected\",\n \"onSelectedChange\",\n \"selectable\",\n \"checkboxes\",\n \"renderLabel\",\n \"loadChildren\",\n \"ref\",\n ]);\n\n const [loadedChildren, setLoadedChildren] = createSignal<Record<string, ITreeNodeItem[]>>({});\n const [loadingIds, setLoadingIds] = createSignal<string[]>([]);\n const [expandedIds, setExpandedIds] = createControllableState<string[]>({\n value: () => local.expanded,\n defaultValue: local.defaultExpanded,\n onChange: (next) => local.onExpandedChange?.(next),\n });\n let lastToggled: { id: string; selected: boolean } | undefined;\n const [selectedIds, setSelectedIds] = createControllableState<string[]>({\n value: () => local.selected,\n defaultValue: local.defaultSelected,\n onChange: (next) => {\n // createControllableState calls onChange synchronously from the setter,\n // so lastToggled still refers to the toggle that caused this change.\n const changed = lastToggled;\n lastToggled = undefined;\n local.onSelectedChange?.(next, changed);\n },\n });\n\n const toggleExpanded = (id: string): void =>\n setExpandedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n\n const setOpen = (id: string, open: boolean): void =>\n setExpandedIds((prev) => {\n const has = prev.includes(id);\n if (open && !has) return [...prev, id];\n if (!open && has) return prev.filter((x) => x !== id);\n return prev;\n });\n\n const toggleSelected = (id: string): void => {\n lastToggled = { id, selected: !selectedIds().includes(id) };\n setSelectedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n };\n\n const ensureLoaded = (item: ITreeNodeItem, nodeId: string): void => {\n if (!local.loadChildren || loadedChildren()[nodeId] || (item.children && item.children.length > 0)) return;\n setLoadingIds((prev) => (prev.includes(nodeId) ? prev : [...prev, nodeId]));\n void local\n .loadChildren(item, nodeId)\n .then((children) => setLoadedChildren((prev) => ({ ...prev, [nodeId]: children })))\n .finally(() => setLoadingIds((prev) => prev.filter((x) => x !== nodeId)));\n };\n\n const contextValue: TreeContextValue = {\n expandedIds,\n selectedIds,\n loadedChildren,\n loadingIds,\n toggleExpanded,\n setOpen,\n toggleSelected,\n ensureLoaded,\n get selectable() {\n return local.selectable;\n },\n get checkboxes() {\n return local.checkboxes;\n },\n get nodeIcon() {\n return local.nodeIcon;\n },\n get listIcon() {\n return local.listIcon;\n },\n get renderLabel() {\n return local.renderLabel;\n },\n get hasLoader() {\n return !!local.loadChildren;\n },\n };\n\n return (\n <TreeContext.Provider value={contextValue}>\n <div {...rest} data-testid=\"tree-view\" ref={mergeRefs(local.ref)} role=\"tree\" class={cn(\"smwb-tree\", local.class)}>\n <For each={local.data}>\n {(node, idx) => (\n <div class=\"smwb-tree__wrapper\" role=\"presentation\">\n <TreeNode item={node} path={`${idx()}`} />\n </div>\n )}\n </For>\n </div>\n </TreeContext.Provider>\n );\n}\n\nexport default TreeView;\n"],"mappings":"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","names":[],"file":"treeView.jsx"}
1
+ {"version":3,"sources":["../../../../../src/components/dataDisplay/treeView/treeView.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/treeView/treeView.entry.less\";\nimport { type Accessor, type JSX, For, Show, createContext, createSignal, mergeProps, splitProps, useContext } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface ITreeNodeItem {\n /** Stable identifier. Falls back to the positional path when omitted. */\n id?: string;\n label: string;\n children?: ITreeNodeItem[];\n /** Hint that the node is expandable even before its children are loaded. */\n hasChildren?: boolean;\n}\n\nexport interface TreeViewProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n nodeIcon?: { opened?: string; closed?: string };\n listIcon?: string;\n data: ITreeNodeItem[];\n expanded?: string[];\n defaultExpanded?: string[];\n onExpandedChange?: (expanded: string[]) => void;\n selected?: string[];\n defaultSelected?: string[];\n /** Reports the full selection plus, for user toggles, the node that just changed. */\n onSelectedChange?: (selected: string[], changed?: { id: string; selected: boolean }) => void;\n selectable?: boolean;\n checkboxes?: boolean;\n renderLabel?: (item: ITreeNodeItem, nodeId: string) => JSX.Element;\n loadChildren?: (item: ITreeNodeItem, nodeId: string) => Promise<ITreeNodeItem[]>;\n ref?: Ref<HTMLDivElement>;\n}\n\ninterface TreeContextValue {\n expandedIds: Accessor<string[]>;\n selectedIds: Accessor<string[]>;\n loadedChildren: Accessor<Record<string, ITreeNodeItem[]>>;\n loadingIds: Accessor<string[]>;\n toggleExpanded: (id: string) => void;\n setOpen: (id: string, open: boolean) => void;\n toggleSelected: (id: string) => void;\n ensureLoaded: (item: ITreeNodeItem, nodeId: string) => void;\n selectable: boolean;\n checkboxes: boolean;\n nodeIcon: { opened?: string; closed?: string };\n listIcon: string;\n renderLabel: ((item: ITreeNodeItem, nodeId: string) => JSX.Element) | undefined;\n hasLoader: boolean;\n}\n\nconst TreeContext = createContext<TreeContextValue>();\n\nfunction TreeNode(props: { item: ITreeNodeItem; path: string }): JSX.Element {\n const ctx = useContext(TreeContext)!;\n const nodeId = (): string => props.item.id ?? props.path;\n const resolvedChildren = (): ITreeNodeItem[] | undefined => props.item.children ?? ctx.loadedChildren()[nodeId()];\n const isLazy = (): boolean => ctx.hasLoader && (!!props.item.hasChildren || !!ctx.loadedChildren()[nodeId()]);\n const hasChildNodes = (): boolean => (!!resolvedChildren() && (resolvedChildren()?.length ?? 0) > 0) || isLazy();\n const isOpen = (): boolean => ctx.expandedIds().includes(nodeId());\n const isSelected = (): boolean => ctx.selectedIds().includes(nodeId());\n const isLoading = (): boolean => ctx.loadingIds().includes(nodeId());\n\n const onLabelClick = (): void => {\n if (hasChildNodes()) {\n if (!isOpen()) ctx.ensureLoaded(props.item, nodeId());\n ctx.toggleExpanded(nodeId());\n }\n if (ctx.selectable) ctx.toggleSelected(nodeId());\n };\n\n const onKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onLabelClick();\n } else if (event.key === \"ArrowRight\" && hasChildNodes()) {\n ctx.ensureLoaded(props.item, nodeId());\n ctx.setOpen(nodeId(), true);\n } else if (event.key === \"ArrowLeft\" && hasChildNodes()) {\n ctx.setOpen(nodeId(), false);\n }\n };\n\n return (\n <div\n class={cn(\"smwb-tree__node\", { \"smwb-tree__node_selected\": isSelected() })}\n role=\"treeitem\"\n aria-expanded={hasChildNodes() ? isOpen() : undefined}\n aria-selected={ctx.selectable || ctx.checkboxes ? isSelected() : undefined}\n >\n <span class=\"smwb-tree__node__content\" onClick={onLabelClick} onKeyDown={onKeyDown} tabindex={0} role=\"button\">\n <Show when={ctx.checkboxes}>\n <input\n type=\"checkbox\"\n class=\"smwb-tree__node__checkbox\"\n checked={isSelected()}\n onClick={(e) => e.stopPropagation()}\n onChange={() => ctx.toggleSelected(nodeId())}\n aria-label={props.item.label}\n />\n </Show>\n <span class=\"smwb-tree__node__label\">\n <Show when={hasChildNodes()} fallback={<Icon name={ctx.listIcon} size={20} />}>\n <Icon name={isOpen() ? ctx.nodeIcon.opened ?? \"folder_open\" : ctx.nodeIcon.closed ?? \"folder\"} fill={1} size={20} />\n </Show>\n {ctx.renderLabel ? ctx.renderLabel(props.item, nodeId()) : props.item.label}\n </span>\n </span>\n <Show when={hasChildNodes() && isOpen()}>\n <div role=\"group\">\n <Show\n when={!(isLoading() && !resolvedChildren())}\n fallback={\n <div class=\"smwb-tree__node__loading\" role=\"status\">\n Загрузка…\n </div>\n }\n >\n <For each={resolvedChildren() ?? []}>\n {(child, idx) => <TreeNode item={child} path={`${props.path}.${idx()}`} />}\n </For>\n </Show>\n </div>\n </Show>\n </div>\n );\n}\n\nexport function TreeView(props: TreeViewProps): JSX.Element {\n const merged = mergeProps(\n {\n listIcon: \"draft\",\n nodeIcon: { closed: \"folder\", opened: \"folder_open\" } as { opened?: string; closed?: string },\n data: [] as ITreeNodeItem[],\n defaultExpanded: [] as string[],\n defaultSelected: [] as string[],\n selectable: false,\n checkboxes: false,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"class\",\n \"listIcon\",\n \"nodeIcon\",\n \"data\",\n \"expanded\",\n \"defaultExpanded\",\n \"onExpandedChange\",\n \"selected\",\n \"defaultSelected\",\n \"onSelectedChange\",\n \"selectable\",\n \"checkboxes\",\n \"renderLabel\",\n \"loadChildren\",\n \"ref\",\n ]);\n\n const [loadedChildren, setLoadedChildren] = createSignal<Record<string, ITreeNodeItem[]>>({});\n const [loadingIds, setLoadingIds] = createSignal<string[]>([]);\n const [expandedIds, setExpandedIds] = createControllableState<string[]>({\n value: () => local.expanded,\n defaultValue: local.defaultExpanded,\n onChange: (next) => local.onExpandedChange?.(next),\n });\n let lastToggled: { id: string; selected: boolean } | undefined;\n const [selectedIds, setSelectedIds] = createControllableState<string[]>({\n value: () => local.selected,\n defaultValue: local.defaultSelected,\n onChange: (next) => {\n // createControllableState calls onChange synchronously from the setter,\n // so lastToggled still refers to the toggle that caused this change.\n const changed = lastToggled;\n lastToggled = undefined;\n local.onSelectedChange?.(next, changed);\n },\n });\n\n const toggleExpanded = (id: string): void =>\n setExpandedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n\n const setOpen = (id: string, open: boolean): void =>\n setExpandedIds((prev) => {\n const has = prev.includes(id);\n if (open && !has) return [...prev, id];\n if (!open && has) return prev.filter((x) => x !== id);\n return prev;\n });\n\n const toggleSelected = (id: string): void => {\n lastToggled = { id, selected: !selectedIds().includes(id) };\n setSelectedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]));\n };\n\n const ensureLoaded = (item: ITreeNodeItem, nodeId: string): void => {\n if (!local.loadChildren || loadedChildren()[nodeId] || (item.children && item.children.length > 0)) return;\n setLoadingIds((prev) => (prev.includes(nodeId) ? prev : [...prev, nodeId]));\n void local\n .loadChildren(item, nodeId)\n .then((children) => setLoadedChildren((prev) => ({ ...prev, [nodeId]: children })))\n .finally(() => setLoadingIds((prev) => prev.filter((x) => x !== nodeId)));\n };\n\n const contextValue: TreeContextValue = {\n expandedIds,\n selectedIds,\n loadedChildren,\n loadingIds,\n toggleExpanded,\n setOpen,\n toggleSelected,\n ensureLoaded,\n get selectable() {\n return local.selectable;\n },\n get checkboxes() {\n return local.checkboxes;\n },\n get nodeIcon() {\n return local.nodeIcon;\n },\n get listIcon() {\n return local.listIcon;\n },\n get renderLabel() {\n return local.renderLabel;\n },\n get hasLoader() {\n return !!local.loadChildren;\n },\n };\n\n return (\n <TreeContext.Provider value={contextValue}>\n <div {...rest} data-testid=\"tree-view\" ref={mergeRefs(local.ref)} role=\"tree\" class={cn(\"smwb-tree\", local.class)}>\n <For each={local.data}>\n {(node, idx) => (\n <div class=\"smwb-tree__wrapper\" role=\"presentation\">\n <TreeNode item={node} path={`${idx()}`} />\n </div>\n )}\n </For>\n </div>\n </TreeContext.Provider>\n );\n}\n\nexport default TreeView;\n"],"mappings":"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","names":[],"file":"treeView.jsx"}
@@ -1,3 +1,4 @@
1
+ import "@smwb/ui-styles/less/tokens.entry.less";
1
2
  import "@smwb/ui-styles/less/components/typography/typography.entry.less";
2
3
  import { mergeProps, splitProps } from "solid-js";
3
4
  import { Dynamic } from "solid-js/web";
@@ -10,8 +11,9 @@ const defaultTag = {
10
11
  h4: "h4",
11
12
  h5: "h5",
12
13
  h6: "h6",
13
- subtitle1: "h6",
14
- subtitle2: "h6",
14
+ // A subtitle is not a heading: as h6 it would break the page's outline.
15
+ subtitle1: "p",
16
+ subtitle2: "p",
15
17
  body1: "p",
16
18
  body2: "p",
17
19
  caption: "span",
@@ -26,11 +28,21 @@ function Typography(props) {
26
28
  "align",
27
29
  "gutterBottom",
28
30
  "noWrap",
31
+ "lines",
32
+ "tabularNums",
29
33
  "component",
30
34
  "class",
35
+ "style",
31
36
  "children",
32
37
  "ref"
33
38
  ]);
39
+ const clamped = () => local.lines !== void 0 && local.lines > 0;
40
+ const style = () => {
41
+ if (!clamped()) return local.style;
42
+ const lines = String(local.lines);
43
+ if (typeof local.style === "string") return `${local.style};--smwb-typography-lines:${lines}`;
44
+ return { ...local.style, "--smwb-typography-lines": lines };
45
+ };
34
46
  return <Dynamic
35
47
  component={local.component ?? defaultTag[local.variant]}
36
48
  ref={mergeRefs(local.ref)}
@@ -41,10 +53,13 @@ function Typography(props) {
41
53
  local.align && `smwb-typography_align-${local.align}`,
42
54
  {
43
55
  "smwb-typography_gutter": local.gutterBottom,
44
- "smwb-typography_nowrap": local.noWrap
56
+ "smwb-typography_nowrap": local.noWrap,
57
+ "smwb-typography_clamp": clamped(),
58
+ "smwb-typography_tabular-nums": local.tabularNums
45
59
  },
46
60
  local.class
47
61
  )}
62
+ style={style()}
48
63
  {...rest}
49
64
  >
50
65
  {local.children}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/dataDisplay/typography/typography.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/typography/typography.entry.less\";\nimport { type JSX, type ParentProps, 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 TypographyVariant =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"subtitle1\"\n | \"subtitle2\"\n | \"body1\"\n | \"body2\"\n | \"caption\"\n | \"overline\"\n | \"button\";\n\nexport type TypographyColor =\n | \"inherit\"\n | \"primary\"\n | \"secondary\"\n | \"error\"\n | \"success\"\n | \"warning\"\n | \"info\"\n | \"textPrimary\"\n | \"textSecondary\"\n | \"disabled\";\n\nconst defaultTag: Record<TypographyVariant, string> = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n subtitle1: \"h6\",\n subtitle2: \"h6\",\n body1: \"p\",\n body2: \"p\",\n caption: \"span\",\n overline: \"span\",\n button: \"span\",\n};\n\nexport interface TypographyProps extends JSX.HTMLAttributes<HTMLElement> {\n variant?: TypographyVariant;\n color?: TypographyColor;\n align?: \"left\" | \"center\" | \"right\" | \"justify\";\n /** Add a bottom margin (block rhythm). */\n gutterBottom?: boolean;\n /** Truncate with an ellipsis on a single line. */\n noWrap?: boolean;\n /** Render as a different element. */\n component?: string;\n ref?: Ref<HTMLElement>;\n}\n\nexport function Typography(props: ParentProps<TypographyProps>): JSX.Element {\n const merged = mergeProps({ variant: \"body1\" as TypographyVariant, color: \"inherit\" as TypographyColor }, props);\n const [local, rest] = splitProps(merged, [\n \"variant\",\n \"color\",\n \"align\",\n \"gutterBottom\",\n \"noWrap\",\n \"component\",\n \"class\",\n \"children\",\n \"ref\",\n ]);\n\n return (\n <Dynamic\n component={local.component ?? defaultTag[local.variant]}\n ref={mergeRefs(local.ref)}\n class={cn(\n \"smwb-typography\",\n `smwb-typography_${local.variant}`,\n local.color !== \"inherit\" && `smwb-typography_color-${local.color}`,\n local.align && `smwb-typography_align-${local.align}`,\n {\n \"smwb-typography_gutter\": local.gutterBottom,\n \"smwb-typography_nowrap\": local.noWrap,\n },\n local.class\n )}\n {...rest}\n >\n {local.children}\n </Dynamic>\n );\n}\n\nexport default Typography;\n"],"mappings":"AAAA,OAAO;AACP,SAAqC,YAAY,kBAAkB;AACnE,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,SAAS,iBAA2B;AA6BpC,MAAM,aAAgD;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AACV;AAeO,SAAS,WAAW,OAAkD;AAC3E,QAAM,SAAS,WAAW,EAAE,SAAS,SAA8B,OAAO,UAA6B,GAAG,KAAK;AAC/G,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,EACF,CAAC;AAED,SACE,CAAC;AAAA,IACC,WAAW,MAAM,aAAa,WAAW,MAAM,OAAO;AAAA,IACtD,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO;AAAA,MACL;AAAA,MACA,mBAAmB,MAAM,OAAO;AAAA,MAChC,MAAM,UAAU,aAAa,yBAAyB,MAAM,KAAK;AAAA,MACjE,MAAM,SAAS,yBAAyB,MAAM,KAAK;AAAA,MACnD;AAAA,QACE,0BAA0B,MAAM;AAAA,QAChC,0BAA0B,MAAM;AAAA,MAClC;AAAA,MACA,MAAM;AAAA,IACR;AAAA,QACI;AAAA,GACL;AAAA,OACE,MAAM,SAAS;AAAA,IAClB,EAjBC;AAmBL;AAEA,IAAO,qBAAQ;","names":[],"file":"typography.jsx"}
1
+ {"version":3,"sources":["../../../../../src/components/dataDisplay/typography/typography.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/typography/typography.entry.less\";\nimport { type JSX, type ParentProps, 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 TypographyVariant =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"subtitle1\"\n | \"subtitle2\"\n | \"body1\"\n | \"body2\"\n | \"caption\"\n | \"overline\"\n | \"button\";\n\nexport type TypographyColor =\n | \"inherit\"\n | \"primary\"\n | \"secondary\"\n | \"error\"\n | \"success\"\n | \"warning\"\n | \"info\"\n | \"textPrimary\"\n | \"textSecondary\"\n | \"disabled\";\n\nconst defaultTag: Record<TypographyVariant, string> = {\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n // A subtitle is not a heading: as h6 it would break the page's outline.\n subtitle1: \"p\",\n subtitle2: \"p\",\n body1: \"p\",\n body2: \"p\",\n caption: \"span\",\n overline: \"span\",\n button: \"span\",\n};\n\nexport interface TypographyProps extends JSX.HTMLAttributes<HTMLElement> {\n variant?: TypographyVariant;\n color?: TypographyColor;\n align?: \"left\" | \"center\" | \"right\" | \"justify\";\n /** Add a bottom margin (block rhythm). */\n gutterBottom?: boolean;\n /** Truncate with an ellipsis on a single line. */\n noWrap?: boolean;\n /** Truncate with an ellipsis after this many lines. */\n lines?: number;\n /** Digits of equal width (`tabular-nums`), so figures line up in KPIs and tables. */\n tabularNums?: boolean;\n /** Render as a different element. */\n component?: string;\n ref?: Ref<HTMLElement>;\n}\n\nexport function Typography(props: ParentProps<TypographyProps>): JSX.Element {\n const merged = mergeProps({ variant: \"body1\" as TypographyVariant, color: \"inherit\" as TypographyColor }, props);\n const [local, rest] = splitProps(merged, [\n \"variant\",\n \"color\",\n \"align\",\n \"gutterBottom\",\n \"noWrap\",\n \"lines\",\n \"tabularNums\",\n \"component\",\n \"class\",\n \"style\",\n \"children\",\n \"ref\",\n ]);\n\n const clamped = (): boolean => local.lines !== undefined && local.lines > 0;\n // The line count travels as a custom property, merged into the caller's style.\n const style = (): JSX.CSSProperties | string | undefined => {\n if (!clamped()) return local.style;\n const lines = String(local.lines);\n if (typeof local.style === \"string\") return `${local.style};--smwb-typography-lines:${lines}`;\n return { ...local.style, \"--smwb-typography-lines\": lines };\n };\n\n return (\n <Dynamic\n component={local.component ?? defaultTag[local.variant]}\n ref={mergeRefs(local.ref)}\n class={cn(\n \"smwb-typography\",\n `smwb-typography_${local.variant}`,\n local.color !== \"inherit\" && `smwb-typography_color-${local.color}`,\n local.align && `smwb-typography_align-${local.align}`,\n {\n \"smwb-typography_gutter\": local.gutterBottom,\n \"smwb-typography_nowrap\": local.noWrap,\n \"smwb-typography_clamp\": clamped(),\n \"smwb-typography_tabular-nums\": local.tabularNums,\n },\n local.class\n )}\n style={style()}\n {...rest}\n >\n {local.children}\n </Dynamic>\n );\n}\n\nexport default Typography;\n"],"mappings":"AAAA,OAAO;AACP,OAAO;AACP,SAAqC,YAAY,kBAAkB;AACnE,SAAS,eAAe;AACxB,OAAO,QAAQ;AACf,SAAS,iBAA2B;AA6BpC,MAAM,aAAgD;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA;AAAA,EAEJ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AACV;AAmBO,SAAS,WAAW,OAAkD;AAC3E,QAAM,SAAS,WAAW,EAAE,SAAS,SAA8B,OAAO,UAA6B,GAAG,KAAK;AAC/G,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,QAAM,UAAU,MAAe,MAAM,UAAU,UAAa,MAAM,QAAQ;AAE1E,QAAM,QAAQ,MAA8C;AAC1D,QAAI,CAAC,QAAQ,EAAG,QAAO,MAAM;AAC7B,UAAM,QAAQ,OAAO,MAAM,KAAK;AAChC,QAAI,OAAO,MAAM,UAAU,SAAU,QAAO,GAAG,MAAM,KAAK,4BAA4B,KAAK;AAC3F,WAAO,EAAE,GAAG,MAAM,OAAO,2BAA2B,MAAM;AAAA,EAC5D;AAEA,SACE,CAAC;AAAA,IACC,WAAW,MAAM,aAAa,WAAW,MAAM,OAAO;AAAA,IACtD,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO;AAAA,MACL;AAAA,MACA,mBAAmB,MAAM,OAAO;AAAA,MAChC,MAAM,UAAU,aAAa,yBAAyB,MAAM,KAAK;AAAA,MACjE,MAAM,SAAS,yBAAyB,MAAM,KAAK;AAAA,MACnD;AAAA,QACE,0BAA0B,MAAM;AAAA,QAChC,0BAA0B,MAAM;AAAA,QAChC,yBAAyB,QAAQ;AAAA,QACjC,gCAAgC,MAAM;AAAA,MACxC;AAAA,MACA,MAAM;AAAA,IACR;AAAA,IACA,OAAO,MAAM;AAAA,QACT;AAAA,GACL;AAAA,OACE,MAAM,SAAS;AAAA,IAClB,EApBC;AAsBL;AAEA,IAAO,qBAAQ;","names":[],"file":"typography.jsx"}
@@ -1,3 +1,4 @@
1
+ import "@smwb/ui-styles/less/tokens.entry.less";
1
2
  import "@smwb/ui-styles/less/components/confirmDialog/confirmDialog.entry.less";
2
3
  import { Show, splitProps, createUniqueId } from "solid-js";
3
4
  import cn from "clsx";
@@ -27,7 +28,7 @@ function ConfirmDialog(props) {
27
28
  return <Modal
28
29
  open={local.open}
29
30
  onClose={() => local.onCancel()}
30
- size="small"
31
+ size="medium"
31
32
  role="alertdialog"
32
33
  backdrop="dark"
33
34
  closeOnEsc={!local.busy}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/feedBack/confirmDialog/confirmDialog.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/components/confirmDialog/confirmDialog.entry.less\";\nimport { type JSX, Show, splitProps, createUniqueId } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Modal } from \"../modal\";\nimport { Button } from \"../../inputs/button\";\nimport { Typography } from \"../../dataDisplay/typography\";\n\nexport interface ConfirmDialogProps {\n open: boolean;\n title: string;\n /** The subject of the action, shown emphasised on its own line (e.g. the asset name). */\n subject?: string;\n /** A secondary explanatory line (e.g. \"can't be undone\"). */\n message?: string;\n confirmLabel: string;\n cancelLabel?: string;\n /** Style the confirm button as destructive (red). */\n danger?: boolean;\n /** Disable the actions + gate Esc/outside-click while a confirm is in flight. */\n busy?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n class?: string;\n}\n\n/**\n * An alert/confirm dialog built on {@link Modal}: a title, an optional emphasised subject + secondary\n * message, and Cancel / Confirm actions. `role=\"alertdialog\"` with the subject + message wired to\n * `aria-describedby` so a screen reader announces the consequence, not just the title. While `busy`,\n * Escape + outside-click are gated and the buttons disabled. Pure presentation — the caller owns the\n * open state and the confirm/cancel handlers (and supplies localised labels).\n */\nexport function ConfirmDialog(props: ConfirmDialogProps): JSX.Element {\n const [local] = splitProps(props, [\n \"open\",\n \"title\",\n \"subject\",\n \"message\",\n \"confirmLabel\",\n \"cancelLabel\",\n \"danger\",\n \"busy\",\n \"onConfirm\",\n \"onCancel\",\n \"class\",\n ]);\n const subjectId = createUniqueId();\n const messageId = createUniqueId();\n // Only include aria-describedby when there's something to describe (the lib's exactOptionalPropertyTypes\n // forbids passing an explicit `undefined` to Modal's optional prop, so spread a precisely-typed object).\n const ariaDescribed = (): { \"aria-describedby\"?: string } => {\n const ids = [local.subject ? subjectId : \"\", local.message ? messageId : \"\"].filter(Boolean).join(\" \");\n return ids ? { \"aria-describedby\": ids } : {};\n };\n\n return (\n <Modal\n open={local.open}\n onClose={() => local.onCancel()}\n size=\"small\"\n role=\"alertdialog\"\n backdrop=\"dark\"\n closeOnEsc={!local.busy}\n closeOnOutsideClick={!local.busy}\n aria-label={local.title}\n {...ariaDescribed()}\n >\n <Modal.Header>{local.title}</Modal.Header>\n <Modal.Content>\n <div class={cn(\"smwb-confirm-dialog__body\", local.class)}>\n <Show when={local.subject}>\n <Typography id={subjectId} variant=\"body2\" color=\"textPrimary\" component=\"span\">\n {local.subject}\n </Typography>\n </Show>\n <Show when={local.message}>\n <Typography id={messageId} variant=\"caption\" color=\"textSecondary\" component=\"span\">\n {local.message}\n </Typography>\n </Show>\n </div>\n </Modal.Content>\n <Modal.Footer>\n <Button\n variant=\"text\"\n size=\"small\"\n disabled={!!local.busy}\n onClick={() => local.onCancel()}\n label={local.cancelLabel ?? \"Cancel\"}\n />\n <Button\n variant=\"contained\"\n size=\"small\"\n color={local.danger ? \"error\" : \"primary\"}\n disabled={!!local.busy}\n onClick={() => local.onConfirm()}\n label={local.confirmLabel}\n />\n </Modal.Footer>\n </Modal>\n );\n}\n\nexport default ConfirmDialog;\n"],"mappings":"AAAA,OAAO;AACP,SAAmB,MAAM,YAAY,sBAAsB;AAC3D,OAAO,QAAQ;AACf,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AA2BpB,SAAS,cAAc,OAAwC;AACpE,QAAM,CAAC,KAAK,IAAI,WAAW,OAAO;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,YAAY,eAAe;AACjC,QAAM,YAAY,eAAe;AAGjC,QAAM,gBAAgB,MAAuC;AAC3D,UAAM,MAAM,CAAC,MAAM,UAAU,YAAY,IAAI,MAAM,UAAU,YAAY,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACrG,WAAO,MAAM,EAAE,oBAAoB,IAAI,IAAI,CAAC;AAAA,EAC9C;AAEA,SACE,CAAC;AAAA,IACC,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM,MAAM,SAAS;AAAA,IAC9B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,IACT,YAAY,CAAC,MAAM;AAAA,IACnB,qBAAqB,CAAC,MAAM;AAAA,IAC5B,YAAY,MAAM;AAAA,QACd,cAAc;AAAA,GACnB;AAAA,MACC,CAAC,MAAM,QAAQ,MAAM,MAAM,EAA1B,MAAM,OAAmC;AAAA,MAC1C,CAAC,MAAM,QAAQ;AAAA,QACb,CAAC,IAAI,OAAO,GAAG,6BAA6B,MAAM,KAAK,GAAG;AAAA,UACxD,CAAC,KAAK,MAAM,MAAM,SAAS;AAAA,YACzB,CAAC,WAAW,IAAI,WAAW,QAAQ,QAAQ,MAAM,cAAc,UAAU,OAAO;AAAA,eAC7E,MAAM,QAAQ;AAAA,YACjB,EAFC,WAEY;AAAA,UACf,EAJC,KAIM;AAAA,UACP,CAAC,KAAK,MAAM,MAAM,SAAS;AAAA,YACzB,CAAC,WAAW,IAAI,WAAW,QAAQ,UAAU,MAAM,gBAAgB,UAAU,OAAO;AAAA,eACjF,MAAM,QAAQ;AAAA,YACjB,EAFC,WAEY;AAAA,UACf,EAJC,KAIM;AAAA,QACT,EAXC,IAWK;AAAA,MACR,EAbC,MAAM,QAaS;AAAA,MAChB,CAAC,MAAM,OAAO;AAAA,QACZ,CAAC;AAAA,IACC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,UAAU,CAAC,CAAC,MAAM;AAAA,IAClB,SAAS,MAAM,MAAM,SAAS;AAAA,IAC9B,OAAO,MAAM,eAAe;AAAA,EAC9B,EAAE;AAAA,QACF,CAAC;AAAA,IACC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,OAAO,MAAM,SAAS,UAAU;AAAA,IAChC,UAAU,CAAC,CAAC,MAAM;AAAA,IAClB,SAAS,MAAM,MAAM,UAAU;AAAA,IAC/B,OAAO,MAAM;AAAA,EACf,EAAE;AAAA,MACJ,EAhBC,MAAM,OAgBQ;AAAA,IACjB,EA3CC;AA6CL;AAEA,IAAO,wBAAQ;","names":[],"file":"confirmDialog.jsx"}
1
+ {"version":3,"sources":["../../../../../src/components/feedBack/confirmDialog/confirmDialog.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/confirmDialog/confirmDialog.entry.less\";\nimport { type JSX, Show, splitProps, createUniqueId } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Modal } from \"../modal\";\nimport { Button } from \"../../inputs/button\";\nimport { Typography } from \"../../dataDisplay/typography\";\n\nexport interface ConfirmDialogProps {\n open: boolean;\n title: string;\n /** The subject of the action, shown emphasised on its own line (e.g. the asset name). */\n subject?: string;\n /** A secondary explanatory line (e.g. \"can't be undone\"). */\n message?: string;\n confirmLabel: string;\n cancelLabel?: string;\n /** Style the confirm button as destructive (red). */\n danger?: boolean;\n /** Disable the actions + gate Esc/outside-click while a confirm is in flight. */\n busy?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n class?: string;\n}\n\n/**\n * An alert/confirm dialog built on {@link Modal}: a title, an optional emphasised subject + secondary\n * message, and Cancel / Confirm actions. `role=\"alertdialog\"` with the subject + message wired to\n * `aria-describedby` so a screen reader announces the consequence, not just the title. While `busy`,\n * Escape + outside-click are gated and the buttons disabled. Pure presentation — the caller owns the\n * open state and the confirm/cancel handlers (and supplies localised labels).\n */\nexport function ConfirmDialog(props: ConfirmDialogProps): JSX.Element {\n const [local] = splitProps(props, [\n \"open\",\n \"title\",\n \"subject\",\n \"message\",\n \"confirmLabel\",\n \"cancelLabel\",\n \"danger\",\n \"busy\",\n \"onConfirm\",\n \"onCancel\",\n \"class\",\n ]);\n const subjectId = createUniqueId();\n const messageId = createUniqueId();\n // Only include aria-describedby when there's something to describe (the lib's exactOptionalPropertyTypes\n // forbids passing an explicit `undefined` to Modal's optional prop, so spread a precisely-typed object).\n const ariaDescribed = (): { \"aria-describedby\"?: string } => {\n const ids = [local.subject ? subjectId : \"\", local.message ? messageId : \"\"].filter(Boolean).join(\" \");\n return ids ? { \"aria-describedby\": ids } : {};\n };\n\n return (\n <Modal\n open={local.open}\n onClose={() => local.onCancel()}\n size=\"medium\"\n role=\"alertdialog\"\n backdrop=\"dark\"\n closeOnEsc={!local.busy}\n closeOnOutsideClick={!local.busy}\n aria-label={local.title}\n {...ariaDescribed()}\n >\n <Modal.Header>{local.title}</Modal.Header>\n <Modal.Content>\n <div class={cn(\"smwb-confirm-dialog__body\", local.class)}>\n <Show when={local.subject}>\n <Typography id={subjectId} variant=\"body2\" color=\"textPrimary\" component=\"span\">\n {local.subject}\n </Typography>\n </Show>\n <Show when={local.message}>\n <Typography id={messageId} variant=\"caption\" color=\"textSecondary\" component=\"span\">\n {local.message}\n </Typography>\n </Show>\n </div>\n </Modal.Content>\n <Modal.Footer>\n <Button\n variant=\"text\"\n size=\"small\"\n disabled={!!local.busy}\n onClick={() => local.onCancel()}\n label={local.cancelLabel ?? \"Cancel\"}\n />\n <Button\n variant=\"contained\"\n size=\"small\"\n color={local.danger ? \"error\" : \"primary\"}\n disabled={!!local.busy}\n onClick={() => local.onConfirm()}\n label={local.confirmLabel}\n />\n </Modal.Footer>\n </Modal>\n );\n}\n\nexport default ConfirmDialog;\n"],"mappings":"AAAA,OAAO;AACP,OAAO;AACP,SAAmB,MAAM,YAAY,sBAAsB;AAC3D,OAAO,QAAQ;AACf,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AA2BpB,SAAS,cAAc,OAAwC;AACpE,QAAM,CAAC,KAAK,IAAI,WAAW,OAAO;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,YAAY,eAAe;AACjC,QAAM,YAAY,eAAe;AAGjC,QAAM,gBAAgB,MAAuC;AAC3D,UAAM,MAAM,CAAC,MAAM,UAAU,YAAY,IAAI,MAAM,UAAU,YAAY,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACrG,WAAO,MAAM,EAAE,oBAAoB,IAAI,IAAI,CAAC;AAAA,EAC9C;AAEA,SACE,CAAC;AAAA,IACC,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM,MAAM,SAAS;AAAA,IAC9B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,SAAS;AAAA,IACT,YAAY,CAAC,MAAM;AAAA,IACnB,qBAAqB,CAAC,MAAM;AAAA,IAC5B,YAAY,MAAM;AAAA,QACd,cAAc;AAAA,GACnB;AAAA,MACC,CAAC,MAAM,QAAQ,MAAM,MAAM,EAA1B,MAAM,OAAmC;AAAA,MAC1C,CAAC,MAAM,QAAQ;AAAA,QACb,CAAC,IAAI,OAAO,GAAG,6BAA6B,MAAM,KAAK,GAAG;AAAA,UACxD,CAAC,KAAK,MAAM,MAAM,SAAS;AAAA,YACzB,CAAC,WAAW,IAAI,WAAW,QAAQ,QAAQ,MAAM,cAAc,UAAU,OAAO;AAAA,eAC7E,MAAM,QAAQ;AAAA,YACjB,EAFC,WAEY;AAAA,UACf,EAJC,KAIM;AAAA,UACP,CAAC,KAAK,MAAM,MAAM,SAAS;AAAA,YACzB,CAAC,WAAW,IAAI,WAAW,QAAQ,UAAU,MAAM,gBAAgB,UAAU,OAAO;AAAA,eACjF,MAAM,QAAQ;AAAA,YACjB,EAFC,WAEY;AAAA,UACf,EAJC,KAIM;AAAA,QACT,EAXC,IAWK;AAAA,MACR,EAbC,MAAM,QAaS;AAAA,MAChB,CAAC,MAAM,OAAO;AAAA,QACZ,CAAC;AAAA,IACC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,UAAU,CAAC,CAAC,MAAM;AAAA,IAClB,SAAS,MAAM,MAAM,SAAS;AAAA,IAC9B,OAAO,MAAM,eAAe;AAAA,EAC9B,EAAE;AAAA,QACF,CAAC;AAAA,IACC,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,OAAO,MAAM,SAAS,UAAU;AAAA,IAChC,UAAU,CAAC,CAAC,MAAM;AAAA,IAClB,SAAS,MAAM,MAAM,UAAU;AAAA,IAC/B,OAAO,MAAM;AAAA,EACf,EAAE;AAAA,MACJ,EAhBC,MAAM,OAgBQ;AAAA,IACjB,EA3CC;AA6CL;AAEA,IAAO,wBAAQ;","names":[],"file":"confirmDialog.jsx"}
@@ -0,0 +1,49 @@
1
+ import "@smwb/ui-styles/less/tokens.entry.less";
2
+ import "@smwb/ui-styles/less/components/emptyState/emptyState.entry.less";
3
+ import { Show, children, mergeProps, splitProps } from "solid-js";
4
+ import cn from "clsx";
5
+ import { Icon } from "../../base/icon";
6
+ import { mergeRefs } from "../../../primitives/mergeRefs";
7
+ const ICON_SIZE = { block: { medium: 32, small: 24 }, inline: { medium: 18, small: 16 } };
8
+ const present = (value) => value !== void 0 && value !== null && value !== false && value !== "" && !(Array.isArray(value) && value.length === 0);
9
+ function EmptyState(props) {
10
+ const merged = mergeProps({ variant: "block", size: "medium" }, props);
11
+ const [local, rest] = splitProps(merged, ["class", "title", "icon", "actions", "variant", "size", "children", "ref"]);
12
+ const icon = children(() => local.icon);
13
+ const title = children(() => local.title);
14
+ const message = children(() => local.children);
15
+ const actions = children(() => local.actions);
16
+ const iconName = () => {
17
+ const resolved = icon();
18
+ return typeof resolved === "string" ? resolved : void 0;
19
+ };
20
+ return <div
21
+ data-testid="empty-state"
22
+ {...rest}
23
+ ref={mergeRefs(local.ref)}
24
+ class={cn("smwb-empty-state", `smwb-empty-state_${local.variant}`, `smwb-empty-state_${local.size}`, local.class)}
25
+ >
26
+ <Show when={present(icon())}>
27
+ <span class="smwb-empty-state__icon" aria-hidden="true">
28
+ <Show when={iconName()} fallback={icon()}>
29
+ {(name) => <Icon name={name()} size={ICON_SIZE[local.variant][local.size]} />}
30
+ </Show>
31
+ </span>
32
+ </Show>
33
+ <Show when={present(title())}>
34
+ <div class="smwb-empty-state__title">{title()}</div>
35
+ </Show>
36
+ <Show when={present(message())}>
37
+ <div class="smwb-empty-state__description">{message()}</div>
38
+ </Show>
39
+ <Show when={present(actions())}>
40
+ <div class="smwb-empty-state__actions">{actions()}</div>
41
+ </Show>
42
+ </div>;
43
+ }
44
+ var emptyState_default = EmptyState;
45
+ export {
46
+ EmptyState,
47
+ emptyState_default as default
48
+ };
49
+ //# sourceMappingURL=emptyState.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/feedBack/emptyState/emptyState.tsx"],"sourcesContent":["import \"@smwb/ui-styles/less/tokens.entry.less\";\nimport \"@smwb/ui-styles/less/components/emptyState/emptyState.entry.less\";\nimport { type JSX, type ParentProps, Show, children, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface EmptyStateProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** What is empty, e.g. \"No works yet\". */\n title?: JSX.Element;\n /** An icon name, or an icon element. Decorative: the title and the message say it all. */\n icon?: JSX.Element | string;\n /** What the reader can do about it: buttons or links. */\n actions?: JSX.Element;\n /**\n * `block` (default): centred, for an empty page, panel or card.\n * `inline`: a muted line of text, for a list, a table or a column that came\n * out empty; an action follows the last word.\n */\n variant?: \"block\" | \"inline\";\n /** `small`: tighter, for a narrow column or a card. */\n size?: \"small\" | \"medium\";\n ref?: Ref<HTMLDivElement>;\n}\n\nconst ICON_SIZE = { block: { medium: 32, small: 24 }, inline: { medium: 18, small: 16 } } as const;\n\nconst present = (value: unknown): boolean =>\n value !== undefined &&\n value !== null &&\n value !== false &&\n value !== \"\" &&\n !(Array.isArray(value) && value.length === 0);\n\n/**\n * What a list, a table or a panel shows when it has nothing: an icon, a title,\n * the message (the children) and actions.\n */\nexport function EmptyState(props: ParentProps<EmptyStateProps>): JSX.Element {\n const merged = mergeProps({ variant: \"block\" as const, size: \"medium\" as const }, props);\n const [local, rest] = splitProps(merged, [\"class\", \"title\", \"icon\", \"actions\", \"variant\", \"size\", \"children\", \"ref\"]);\n\n // Read each slot once: markup passed as a prop is created anew on every read,\n // and during hydration the copy made for a <Show> test has no server DOM node.\n const icon = children(() => local.icon);\n const title = children(() => local.title);\n const message = children(() => local.children);\n const actions = children(() => local.actions);\n const iconName = (): string | undefined => {\n const resolved = icon();\n return typeof resolved === \"string\" ? resolved : undefined;\n };\n\n return (\n <div\n data-testid=\"empty-state\"\n {...rest}\n ref={mergeRefs(local.ref)}\n class={cn(\"smwb-empty-state\", `smwb-empty-state_${local.variant}`, `smwb-empty-state_${local.size}`, local.class)}\n >\n <Show when={present(icon())}>\n <span class=\"smwb-empty-state__icon\" aria-hidden=\"true\">\n <Show when={iconName()} fallback={icon()}>\n {(name) => <Icon name={name()} size={ICON_SIZE[local.variant][local.size]} />}\n </Show>\n </span>\n </Show>\n <Show when={present(title())}>\n <div class=\"smwb-empty-state__title\">{title()}</div>\n </Show>\n <Show when={present(message())}>\n <div class=\"smwb-empty-state__description\">{message()}</div>\n </Show>\n <Show when={present(actions())}>\n <div class=\"smwb-empty-state__actions\">{actions()}</div>\n </Show>\n </div>\n );\n}\n\nexport default EmptyState;\n"],"mappings":"AAAA,OAAO;AACP,OAAO;AACP,SAAqC,MAAM,UAAU,YAAY,kBAAkB;AACnF,OAAO,QAAQ;AACf,SAAS,YAAY;AACrB,SAAS,iBAA2B;AAoBpC,MAAM,YAAY,EAAE,OAAO,EAAE,QAAQ,IAAI,OAAO,GAAG,GAAG,QAAQ,EAAE,QAAQ,IAAI,OAAO,GAAG,EAAE;AAExF,MAAM,UAAU,CAAC,UACf,UAAU,UACV,UAAU,QACV,UAAU,SACV,UAAU,MACV,EAAE,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW;AAMtC,SAAS,WAAW,OAAkD;AAC3E,QAAM,SAAS,WAAW,EAAE,SAAS,SAAkB,MAAM,SAAkB,GAAG,KAAK;AACvF,QAAM,CAAC,OAAO,IAAI,IAAI,WAAW,QAAQ,CAAC,SAAS,SAAS,QAAQ,WAAW,WAAW,QAAQ,YAAY,KAAK,CAAC;AAIpH,QAAM,OAAO,SAAS,MAAM,MAAM,IAAI;AACtC,QAAM,QAAQ,SAAS,MAAM,MAAM,KAAK;AACxC,QAAM,UAAU,SAAS,MAAM,MAAM,QAAQ;AAC7C,QAAM,UAAU,SAAS,MAAM,MAAM,OAAO;AAC5C,QAAM,WAAW,MAA0B;AACzC,UAAM,WAAW,KAAK;AACtB,WAAO,OAAO,aAAa,WAAW,WAAW;AAAA,EACnD;AAEA,SACE,CAAC;AAAA,IACC,YAAY;AAAA,QACR;AAAA,IACJ,KAAK,UAAU,MAAM,GAAG;AAAA,IACxB,OAAO,GAAG,oBAAoB,oBAAoB,MAAM,OAAO,IAAI,oBAAoB,MAAM,IAAI,IAAI,MAAM,KAAK;AAAA,GACjH;AAAA,MACC,CAAC,KAAK,MAAM,QAAQ,KAAK,CAAC,GAAG;AAAA,QAC3B,CAAC,KAAK,MAAM,yBAAyB,YAAY,OAAO;AAAA,UACtD,CAAC,KAAK,MAAM,SAAS,GAAG,UAAU,KAAK,GAAG;AAAA,aACvC,CAAC,SAAS,CAAC,KAAK,MAAM,KAAK,GAAG,MAAM,UAAU,MAAM,OAAO,EAAE,MAAM,IAAI,GAAG,GAAG;AAAA,UAChF,EAFC,KAEM;AAAA,QACT,EAJC,KAIM;AAAA,MACT,EANC,KAMM;AAAA,MACP,CAAC,KAAK,MAAM,QAAQ,MAAM,CAAC,GAAG;AAAA,QAC5B,CAAC,IAAI,MAAM,2BAA2B,MAAM,EAAE,EAA7C,IAAmD;AAAA,MACtD,EAFC,KAEM;AAAA,MACP,CAAC,KAAK,MAAM,QAAQ,QAAQ,CAAC,GAAG;AAAA,QAC9B,CAAC,IAAI,MAAM,iCAAiC,QAAQ,EAAE,EAArD,IAA2D;AAAA,MAC9D,EAFC,KAEM;AAAA,MACP,CAAC,KAAK,MAAM,QAAQ,QAAQ,CAAC,GAAG;AAAA,QAC9B,CAAC,IAAI,MAAM,6BAA6B,QAAQ,EAAE,EAAjD,IAAuD;AAAA,MAC1D,EAFC,KAEM;AAAA,IACT,EAtBC;AAwBL;AAEA,IAAO,qBAAQ;","names":[],"file":"emptyState.jsx"}