@smwb/ui-react 2.7.0 → 2.8.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 (414) hide show
  1. package/README.md +27 -0
  2. package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
  3. package/dist/assets/styles/less/components/card/card.entry.css +1 -1
  4. package/dist/assets/styles/less/components/checkbox/checkbox.entry.css +1 -1
  5. package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
  6. package/dist/assets/styles/less/components/menu/menu.entry.css +1 -1
  7. package/dist/assets/styles/less/components/personChip/personChip.entry.css +1 -1
  8. package/dist/assets/styles/less/components/radioButton/radioButton.entry.css +1 -1
  9. package/dist/assets/styles/less/components/rating/rating.entry.css +1 -1
  10. package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
  11. package/dist/assets/styles/less/components/table/table.entry.css +1 -1
  12. package/dist/assets/styles/less/components/thumbCard/thumbCard.entry.css +1 -1
  13. package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
  14. package/dist/assets/styles/less/components/typography/typography.entry.css +1 -1
  15. package/dist/assets/styles/less/connects/rt/table.entry.css +1 -1
  16. package/dist/components/base/icon/icon.d.ts +6 -2
  17. package/dist/components/base/icon/icon.js +49 -37
  18. package/dist/components/base/icon/icon.js.map +1 -1
  19. package/dist/components/base/ripple/ripple.d.ts +3 -0
  20. package/dist/components/base/ripple/ripple.js +38 -23
  21. package/dist/components/base/ripple/ripple.js.map +1 -1
  22. package/dist/components/dataDisplay/avatar/avatar.d.ts +4 -0
  23. package/dist/components/dataDisplay/avatar/avatar.js +50 -37
  24. package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
  25. package/dist/components/dataDisplay/badge/badge.js +37 -28
  26. package/dist/components/dataDisplay/badge/badge.js.map +1 -1
  27. package/dist/components/dataDisplay/card/card.d.ts +30 -2
  28. package/dist/components/dataDisplay/card/card.js +50 -23
  29. package/dist/components/dataDisplay/card/card.js.map +1 -1
  30. package/dist/components/dataDisplay/carousel/carousel.js +70 -70
  31. package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
  32. package/dist/components/dataDisplay/chart/chart.d.ts +2 -0
  33. package/dist/components/dataDisplay/chart/chart.js +66 -53
  34. package/dist/components/dataDisplay/chart/chart.js.map +1 -1
  35. package/dist/components/dataDisplay/chat/chatIconButton.d.ts +1 -1
  36. package/dist/components/dataDisplay/chat/chatIconButton.js +30 -26
  37. package/dist/components/dataDisplay/chat/chatIconButton.js.map +1 -1
  38. package/dist/components/dataDisplay/chat/chatLayout.d.ts +3 -1
  39. package/dist/components/dataDisplay/chat/chatLayout.js +56 -55
  40. package/dist/components/dataDisplay/chat/chatLayout.js.map +1 -1
  41. package/dist/components/dataDisplay/chat/chatOverlayLayout.d.ts +3 -1
  42. package/dist/components/dataDisplay/chip/chip.d.ts +31 -0
  43. package/dist/components/dataDisplay/chip/chip.js +110 -83
  44. package/dist/components/dataDisplay/chip/chip.js.map +1 -1
  45. package/dist/components/dataDisplay/chipGroup/chipGroup.js +34 -30
  46. package/dist/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
  47. package/dist/components/dataDisplay/descriptionList/descriptionList.d.ts +11 -3
  48. package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
  49. package/dist/components/dataDisplay/expansionPanel/expansionPanel.js +143 -98
  50. package/dist/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
  51. package/dist/components/dataDisplay/kanban/kanban.d.ts +6 -0
  52. package/dist/components/dataDisplay/kanban/kanban.js +46 -35
  53. package/dist/components/dataDisplay/kanban/kanban.js.map +1 -1
  54. package/dist/components/dataDisplay/lazyImage/lazyImage.js +31 -30
  55. package/dist/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
  56. package/dist/components/dataDisplay/list/list.d.ts +2 -0
  57. package/dist/components/dataDisplay/list/list.js +15 -14
  58. package/dist/components/dataDisplay/list/list.js.map +1 -1
  59. package/dist/components/dataDisplay/meter/meter.d.ts +2 -0
  60. package/dist/components/dataDisplay/meter/meter.js +24 -23
  61. package/dist/components/dataDisplay/meter/meter.js.map +1 -1
  62. package/dist/components/dataDisplay/personChip/personChip.d.ts +2 -0
  63. package/dist/components/dataDisplay/personChip/personChip.js +39 -27
  64. package/dist/components/dataDisplay/personChip/personChip.js.map +1 -1
  65. package/dist/components/dataDisplay/stat/stat.d.ts +2 -0
  66. package/dist/components/dataDisplay/stat/stat.js +25 -13
  67. package/dist/components/dataDisplay/stat/stat.js.map +1 -1
  68. package/dist/components/dataDisplay/table/table.d.ts +16 -1
  69. package/dist/components/dataDisplay/table/table.js +40 -36
  70. package/dist/components/dataDisplay/table/table.js.map +1 -1
  71. package/dist/components/dataDisplay/table/tableBody.js +10 -4
  72. package/dist/components/dataDisplay/table/tableBody.js.map +1 -1
  73. package/dist/components/dataDisplay/table/tableCell.d.ts +10 -2
  74. package/dist/components/dataDisplay/table/tableCell.js +20 -13
  75. package/dist/components/dataDisplay/table/tableCell.js.map +1 -1
  76. package/dist/components/dataDisplay/table/tableColumns.d.ts +83 -0
  77. package/dist/components/dataDisplay/table/tableColumns.js +112 -0
  78. package/dist/components/dataDisplay/table/tableColumns.js.map +1 -0
  79. package/dist/components/dataDisplay/table/tableHead.js +9 -3
  80. package/dist/components/dataDisplay/table/tableHead.js.map +1 -1
  81. package/dist/components/dataDisplay/table/tableHeadCell.d.ts +24 -3
  82. package/dist/components/dataDisplay/table/tableHeadCell.js +60 -65
  83. package/dist/components/dataDisplay/table/tableHeadCell.js.map +1 -1
  84. package/dist/components/dataDisplay/table/tableRow.d.ts +3 -1
  85. package/dist/components/dataDisplay/table/tableRow.js +28 -16
  86. package/dist/components/dataDisplay/table/tableRow.js.map +1 -1
  87. package/dist/components/dataDisplay/thumbCard/thumbCard.d.ts +44 -3
  88. package/dist/components/dataDisplay/thumbCard/thumbCard.js +79 -59
  89. package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
  90. package/dist/components/dataDisplay/treeView/treeView.d.ts +2 -0
  91. package/dist/components/dataDisplay/treeView/treeView.js +24 -23
  92. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  93. package/dist/components/feedBack/emptyState/emptyState.d.ts +2 -0
  94. package/dist/components/feedBack/emptyState/emptyState.js +22 -12
  95. package/dist/components/feedBack/emptyState/emptyState.js.map +1 -1
  96. package/dist/components/feedBack/message/message.d.ts +2 -0
  97. package/dist/components/feedBack/message/message.js +30 -19
  98. package/dist/components/feedBack/message/message.js.map +1 -1
  99. package/dist/components/feedBack/modal/modal.js +40 -40
  100. package/dist/components/feedBack/modal/modal.js.map +1 -1
  101. package/dist/components/feedBack/skeleton/skeleton.d.ts +10 -2
  102. package/dist/components/feedBack/skeleton/skeleton.js +37 -34
  103. package/dist/components/feedBack/skeleton/skeleton.js.map +1 -1
  104. package/dist/components/feedBack/snackbar/snackbar.js +104 -103
  105. package/dist/components/feedBack/snackbar/snackbar.js.map +1 -1
  106. package/dist/components/feedBack/tooltip/tooltip.d.ts +9 -1
  107. package/dist/components/feedBack/tooltip/tooltip.js +67 -47
  108. package/dist/components/feedBack/tooltip/tooltip.js.map +1 -1
  109. package/dist/components/inputs/button/button.d.ts +2 -0
  110. package/dist/components/inputs/button/button.js +62 -58
  111. package/dist/components/inputs/button/button.js.map +1 -1
  112. package/dist/components/inputs/buttonGroups/buttonGroup.d.ts +2 -0
  113. package/dist/components/inputs/buttonGroups/buttonGroup.js +40 -36
  114. package/dist/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
  115. package/dist/components/inputs/checkbox/checkbox.d.ts +10 -0
  116. package/dist/components/inputs/checkbox/checkbox.js +84 -59
  117. package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
  118. package/dist/components/inputs/datePicker/datePicker.js +170 -164
  119. package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
  120. package/dist/components/inputs/datePicker/datePickerDay.d.ts +1 -1
  121. package/dist/components/inputs/datePicker/datePickerDay.js +52 -44
  122. package/dist/components/inputs/datePicker/datePickerDay.js.map +1 -1
  123. package/dist/components/inputs/datePicker/datePickerIconButton.d.ts +1 -1
  124. package/dist/components/inputs/datePicker/datePickerIconButton.js +32 -28
  125. package/dist/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
  126. package/dist/components/inputs/dateTimePicker/dateTimePicker.js +160 -154
  127. package/dist/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
  128. package/dist/components/inputs/floatingButton/floatingButton.js +32 -30
  129. package/dist/components/inputs/floatingButton/floatingButton.js.map +1 -1
  130. package/dist/components/inputs/radioButton/radioButton.d.ts +9 -0
  131. package/dist/components/inputs/radioButton/radioButton.js +77 -58
  132. package/dist/components/inputs/radioButton/radioButton.js.map +1 -1
  133. package/dist/components/inputs/rating/rating.d.ts +8 -0
  134. package/dist/components/inputs/rating/rating.js +85 -70
  135. package/dist/components/inputs/rating/rating.js.map +1 -1
  136. package/dist/components/inputs/selectField/dropdownMenu.d.ts +20 -1
  137. package/dist/components/inputs/selectField/dropdownMenu.js +266 -113
  138. package/dist/components/inputs/selectField/dropdownMenu.js.map +1 -1
  139. package/dist/components/inputs/selectField/optionNavigation.d.ts +17 -0
  140. package/dist/components/inputs/selectField/optionNavigation.js +38 -0
  141. package/dist/components/inputs/selectField/optionNavigation.js.map +1 -0
  142. package/dist/components/inputs/selectField/selectField.d.ts +31 -1
  143. package/dist/components/inputs/selectField/selectField.js +358 -218
  144. package/dist/components/inputs/selectField/selectField.js.map +1 -1
  145. package/dist/components/inputs/slider/slider.d.ts +22 -1
  146. package/dist/components/inputs/slider/slider.js +330 -261
  147. package/dist/components/inputs/slider/slider.js.map +1 -1
  148. package/dist/components/inputs/textField/textField.d.ts +7 -0
  149. package/dist/components/inputs/textField/textField.js +118 -100
  150. package/dist/components/inputs/textField/textField.js.map +1 -1
  151. package/dist/components/inputs/textField/textFieldWrapper.d.ts +15 -1
  152. package/dist/components/inputs/textField/textFieldWrapper.js +45 -34
  153. package/dist/components/inputs/textField/textFieldWrapper.js.map +1 -1
  154. package/dist/components/inputs/timePicker/timePicker.js +91 -85
  155. package/dist/components/inputs/timePicker/timePicker.js.map +1 -1
  156. package/dist/components/inputs/toggle/toggle.d.ts +4 -0
  157. package/dist/components/inputs/toggle/toggle.js +80 -61
  158. package/dist/components/inputs/toggle/toggle.js.map +1 -1
  159. package/dist/components/inputs/valueSlider/valueSlider.d.ts +12 -0
  160. package/dist/components/inputs/valueSlider/valueSlider.js +23 -22
  161. package/dist/components/inputs/valueSlider/valueSlider.js.map +1 -1
  162. package/dist/components/layout/appLayout/appLayout.d.ts +2 -0
  163. package/dist/components/layout/appLayout/appLayout.js +25 -24
  164. package/dist/components/layout/appLayout/appLayout.js.map +1 -1
  165. package/dist/components/layout/divider/divider.d.ts +2 -0
  166. package/dist/components/layout/divider/divider.js +23 -22
  167. package/dist/components/layout/divider/divider.js.map +1 -1
  168. package/dist/components/layout/floatingWindow/floatingWindow.d.ts +2 -0
  169. package/dist/components/layout/floatingWindow/floatingWindow.js +145 -139
  170. package/dist/components/layout/floatingWindow/floatingWindow.js.map +1 -1
  171. package/dist/components/layout/grid/grid.d.ts +12 -1
  172. package/dist/components/layout/grid/grid.js +51 -36
  173. package/dist/components/layout/grid/grid.js.map +1 -1
  174. package/dist/components/layout/page/page.d.ts +2 -0
  175. package/dist/components/layout/page/page.js +16 -8
  176. package/dist/components/layout/page/page.js.map +1 -1
  177. package/dist/components/layout/pageHeader/pageHeader.d.ts +2 -0
  178. package/dist/components/layout/pageHeader/pageHeader.js +22 -13
  179. package/dist/components/layout/pageHeader/pageHeader.js.map +1 -1
  180. package/dist/components/layout/sectionHeader/sectionHeader.d.ts +2 -0
  181. package/dist/components/layout/sectionHeader/sectionHeader.js +37 -27
  182. package/dist/components/layout/sectionHeader/sectionHeader.js.map +1 -1
  183. package/dist/components/layout/sheet/sheet.d.ts +2 -0
  184. package/dist/components/layout/sheet/sheet.js +80 -79
  185. package/dist/components/layout/sheet/sheet.js.map +1 -1
  186. package/dist/components/layout/stack/stack.d.ts +2 -0
  187. package/dist/components/layout/stack/stack.js +29 -17
  188. package/dist/components/layout/stack/stack.js.map +1 -1
  189. package/dist/components/navigation/appBar/appBar.d.ts +2 -0
  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 +81 -77
  193. package/dist/components/navigation/bottomBar/bottomBar.js.map +1 -1
  194. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +2 -0
  195. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +29 -27
  196. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  197. package/dist/components/navigation/menu/menu.d.ts +12 -0
  198. package/dist/components/navigation/menu/menu.js.map +1 -1
  199. package/dist/components/navigation/menu/menuContext.d.ts +2 -0
  200. package/dist/components/navigation/menu/menuContext.js.map +1 -1
  201. package/dist/components/navigation/menu/menuFloating.js +42 -30
  202. package/dist/components/navigation/menu/menuFloating.js.map +1 -1
  203. package/dist/components/navigation/menu/menuItem.d.ts +4 -0
  204. package/dist/components/navigation/menu/menuItem.js +60 -48
  205. package/dist/components/navigation/menu/menuItem.js.map +1 -1
  206. package/dist/components/navigation/menu/menuList.d.ts +5 -1
  207. package/dist/components/navigation/menu/menuList.js +30 -19
  208. package/dist/components/navigation/menu/menuList.js.map +1 -1
  209. package/dist/components/navigation/menu/menuSubmenu.js +53 -40
  210. package/dist/components/navigation/menu/menuSubmenu.js.map +1 -1
  211. package/dist/components/navigation/pagination/pagination.d.ts +2 -0
  212. package/dist/components/navigation/pagination/pagination.js +51 -49
  213. package/dist/components/navigation/pagination/pagination.js.map +1 -1
  214. package/dist/components/navigation/sidebar/sidebar.js +39 -38
  215. package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
  216. package/dist/components/navigation/stepper/stepper.d.ts +2 -0
  217. package/dist/components/navigation/stepper/stepper.js +37 -28
  218. package/dist/components/navigation/stepper/stepper.js.map +1 -1
  219. package/dist/components/navigation/tabs/tab/tab.js +42 -40
  220. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  221. package/dist/components/navigation/tabs/tabs.d.ts +6 -0
  222. package/dist/components/navigation/tabs/tabs.js +83 -86
  223. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  224. package/dist/connects/rt/table/headerCellRenderer.d.ts +4 -1
  225. package/dist/connects/rt/table/headerCellRenderer.js +45 -15
  226. package/dist/connects/rt/table/headerCellRenderer.js.map +1 -1
  227. package/dist/connects/rt/table/table.d.ts +15 -1
  228. package/dist/connects/rt/table/table.js +125 -131
  229. package/dist/connects/rt/table/table.js.map +1 -1
  230. package/dist/headless/components/base/icon/icon.js +49 -37
  231. package/dist/headless/components/base/icon/icon.js.map +1 -1
  232. package/dist/headless/components/base/ripple/ripple.js +42 -27
  233. package/dist/headless/components/base/ripple/ripple.js.map +1 -1
  234. package/dist/headless/components/dataDisplay/avatar/avatar.js +51 -38
  235. package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
  236. package/dist/headless/components/dataDisplay/badge/badge.js +37 -28
  237. package/dist/headless/components/dataDisplay/badge/badge.js.map +1 -1
  238. package/dist/headless/components/dataDisplay/card/card.js +50 -23
  239. package/dist/headless/components/dataDisplay/card/card.js.map +1 -1
  240. package/dist/headless/components/dataDisplay/carousel/carousel.js +55 -55
  241. package/dist/headless/components/dataDisplay/carousel/carousel.js.map +1 -1
  242. package/dist/headless/components/dataDisplay/chat/chatIconButton.js +30 -26
  243. package/dist/headless/components/dataDisplay/chat/chatIconButton.js.map +1 -1
  244. package/dist/headless/components/dataDisplay/chat/chatLayout.js +56 -55
  245. package/dist/headless/components/dataDisplay/chat/chatLayout.js.map +1 -1
  246. package/dist/headless/components/dataDisplay/chip/chip.js +108 -81
  247. package/dist/headless/components/dataDisplay/chip/chip.js.map +1 -1
  248. package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js +35 -31
  249. package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
  250. package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
  251. package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js +143 -98
  252. package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
  253. package/dist/headless/components/dataDisplay/kanban/kanban.js +45 -34
  254. package/dist/headless/components/dataDisplay/kanban/kanban.js.map +1 -1
  255. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js +30 -29
  256. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
  257. package/dist/headless/components/dataDisplay/list/list.js +15 -14
  258. package/dist/headless/components/dataDisplay/list/list.js.map +1 -1
  259. package/dist/headless/components/dataDisplay/meter/meter.js +19 -18
  260. package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
  261. package/dist/headless/components/dataDisplay/personChip/personChip.js +39 -27
  262. package/dist/headless/components/dataDisplay/personChip/personChip.js.map +1 -1
  263. package/dist/headless/components/dataDisplay/stat/stat.js +27 -15
  264. package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -1
  265. package/dist/headless/components/dataDisplay/table/table.js +40 -36
  266. package/dist/headless/components/dataDisplay/table/table.js.map +1 -1
  267. package/dist/headless/components/dataDisplay/table/tableBody.js +10 -4
  268. package/dist/headless/components/dataDisplay/table/tableBody.js.map +1 -1
  269. package/dist/headless/components/dataDisplay/table/tableCell.js +20 -13
  270. package/dist/headless/components/dataDisplay/table/tableCell.js.map +1 -1
  271. package/dist/headless/components/dataDisplay/table/tableColumns.js +112 -0
  272. package/dist/headless/components/dataDisplay/table/tableColumns.js.map +1 -0
  273. package/dist/headless/components/dataDisplay/table/tableHead.js +9 -3
  274. package/dist/headless/components/dataDisplay/table/tableHead.js.map +1 -1
  275. package/dist/headless/components/dataDisplay/table/tableHeadCell.js +60 -65
  276. package/dist/headless/components/dataDisplay/table/tableHeadCell.js.map +1 -1
  277. package/dist/headless/components/dataDisplay/table/tableRow.js +28 -16
  278. package/dist/headless/components/dataDisplay/table/tableRow.js.map +1 -1
  279. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js +78 -58
  280. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
  281. package/dist/headless/components/dataDisplay/treeView/treeView.js +24 -23
  282. package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
  283. package/dist/headless/components/feedBack/emptyState/emptyState.js +21 -11
  284. package/dist/headless/components/feedBack/emptyState/emptyState.js.map +1 -1
  285. package/dist/headless/components/feedBack/message/message.js +31 -20
  286. package/dist/headless/components/feedBack/message/message.js.map +1 -1
  287. package/dist/headless/components/feedBack/modal/modal.js +44 -44
  288. package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
  289. package/dist/headless/components/feedBack/skeleton/skeleton.js +38 -35
  290. package/dist/headless/components/feedBack/skeleton/skeleton.js.map +1 -1
  291. package/dist/headless/components/feedBack/snackbar/snackbar.js +108 -107
  292. package/dist/headless/components/feedBack/snackbar/snackbar.js.map +1 -1
  293. package/dist/headless/components/feedBack/tooltip/tooltip.js +67 -47
  294. package/dist/headless/components/feedBack/tooltip/tooltip.js.map +1 -1
  295. package/dist/headless/components/inputs/button/button.js +62 -58
  296. package/dist/headless/components/inputs/button/button.js.map +1 -1
  297. package/dist/headless/components/inputs/buttonGroups/buttonGroup.js +40 -36
  298. package/dist/headless/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
  299. package/dist/headless/components/inputs/checkbox/checkbox.js +85 -60
  300. package/dist/headless/components/inputs/checkbox/checkbox.js.map +1 -1
  301. package/dist/headless/components/inputs/datePicker/datePicker.js +170 -164
  302. package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
  303. package/dist/headless/components/inputs/datePicker/datePickerDay.js +52 -44
  304. package/dist/headless/components/inputs/datePicker/datePickerDay.js.map +1 -1
  305. package/dist/headless/components/inputs/datePicker/datePickerIconButton.js +32 -28
  306. package/dist/headless/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
  307. package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js +160 -154
  308. package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
  309. package/dist/headless/components/inputs/floatingButton/floatingButton.js +32 -30
  310. package/dist/headless/components/inputs/floatingButton/floatingButton.js.map +1 -1
  311. package/dist/headless/components/inputs/radioButton/radioButton.js +77 -58
  312. package/dist/headless/components/inputs/radioButton/radioButton.js.map +1 -1
  313. package/dist/headless/components/inputs/rating/rating.js +85 -70
  314. package/dist/headless/components/inputs/rating/rating.js.map +1 -1
  315. package/dist/headless/components/inputs/selectField/dropdownMenu.js +266 -113
  316. package/dist/headless/components/inputs/selectField/dropdownMenu.js.map +1 -1
  317. package/dist/headless/components/inputs/selectField/optionNavigation.js +38 -0
  318. package/dist/headless/components/inputs/selectField/optionNavigation.js.map +1 -0
  319. package/dist/headless/components/inputs/selectField/selectField.js +358 -218
  320. package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
  321. package/dist/headless/components/inputs/slider/slider.js +330 -261
  322. package/dist/headless/components/inputs/slider/slider.js.map +1 -1
  323. package/dist/headless/components/inputs/textField/textField.js +118 -100
  324. package/dist/headless/components/inputs/textField/textField.js.map +1 -1
  325. package/dist/headless/components/inputs/textField/textFieldWrapper.js +45 -34
  326. package/dist/headless/components/inputs/textField/textFieldWrapper.js.map +1 -1
  327. package/dist/headless/components/inputs/timePicker/timePicker.js +91 -85
  328. package/dist/headless/components/inputs/timePicker/timePicker.js.map +1 -1
  329. package/dist/headless/components/inputs/toggle/toggle.js +79 -60
  330. package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
  331. package/dist/headless/components/inputs/valueSlider/valueSlider.js +25 -24
  332. package/dist/headless/components/inputs/valueSlider/valueSlider.js.map +1 -1
  333. package/dist/headless/components/layout/appLayout/appLayout.js +27 -26
  334. package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
  335. package/dist/headless/components/layout/divider/divider.js +18 -17
  336. package/dist/headless/components/layout/divider/divider.js.map +1 -1
  337. package/dist/headless/components/layout/floatingWindow/floatingWindow.js +145 -139
  338. package/dist/headless/components/layout/floatingWindow/floatingWindow.js.map +1 -1
  339. package/dist/headless/components/layout/grid/grid.js +48 -33
  340. package/dist/headless/components/layout/grid/grid.js.map +1 -1
  341. package/dist/headless/components/layout/page/page.js +15 -7
  342. package/dist/headless/components/layout/page/page.js.map +1 -1
  343. package/dist/headless/components/layout/pageHeader/pageHeader.js +20 -11
  344. package/dist/headless/components/layout/pageHeader/pageHeader.js.map +1 -1
  345. package/dist/headless/components/layout/sectionHeader/sectionHeader.js +36 -26
  346. package/dist/headless/components/layout/sectionHeader/sectionHeader.js.map +1 -1
  347. package/dist/headless/components/layout/sheet/sheet.js +80 -79
  348. package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
  349. package/dist/headless/components/layout/stack/stack.js +29 -17
  350. package/dist/headless/components/layout/stack/stack.js.map +1 -1
  351. package/dist/headless/components/navigation/appBar/appBar.js +15 -14
  352. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  353. package/dist/headless/components/navigation/bottomBar/bottomBar.js +81 -77
  354. package/dist/headless/components/navigation/bottomBar/bottomBar.js.map +1 -1
  355. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +32 -30
  356. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  357. package/dist/headless/components/navigation/menu/menu.js.map +1 -1
  358. package/dist/headless/components/navigation/menu/menuContext.js.map +1 -1
  359. package/dist/headless/components/navigation/menu/menuFloating.js +42 -30
  360. package/dist/headless/components/navigation/menu/menuFloating.js.map +1 -1
  361. package/dist/headless/components/navigation/menu/menuItem.js +60 -48
  362. package/dist/headless/components/navigation/menu/menuItem.js.map +1 -1
  363. package/dist/headless/components/navigation/menu/menuList.js +30 -19
  364. package/dist/headless/components/navigation/menu/menuList.js.map +1 -1
  365. package/dist/headless/components/navigation/menu/menuSubmenu.js +53 -40
  366. package/dist/headless/components/navigation/menu/menuSubmenu.js.map +1 -1
  367. package/dist/headless/components/navigation/pagination/pagination.js +51 -49
  368. package/dist/headless/components/navigation/pagination/pagination.js.map +1 -1
  369. package/dist/headless/components/navigation/sidebar/sidebar.js +29 -28
  370. package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
  371. package/dist/headless/components/navigation/stepper/stepper.js +42 -33
  372. package/dist/headless/components/navigation/stepper/stepper.js.map +1 -1
  373. package/dist/headless/components/navigation/tabs/tab/tab.js +41 -39
  374. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  375. package/dist/headless/components/navigation/tabs/tabs.js +95 -98
  376. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  377. package/dist/headless/hooks/useDismissOnEscape.js +16 -0
  378. package/dist/headless/hooks/useDismissOnEscape.js.map +1 -0
  379. package/dist/headless/hooks/useFocusTrap.js +1 -0
  380. package/dist/headless/hooks/useFocusTrap.js.map +1 -1
  381. package/dist/headless/hooks/useHelperText.js +13 -0
  382. package/dist/headless/hooks/useHelperText.js.map +1 -0
  383. package/dist/headless/utils/controlProps.js +14 -0
  384. package/dist/headless/utils/controlProps.js.map +1 -0
  385. package/dist/headless/utils/overlayLayer.js +14 -7
  386. package/dist/headless/utils/overlayLayer.js.map +1 -1
  387. package/dist/headless/utils/ownClick.js +40 -0
  388. package/dist/headless/utils/ownClick.js.map +1 -0
  389. package/dist/headless/utils/readOnlyToggle.js +14 -0
  390. package/dist/headless/utils/readOnlyToggle.js.map +1 -0
  391. package/dist/hooks/useDismissOnEscape.d.ts +11 -0
  392. package/dist/hooks/useDismissOnEscape.js +16 -0
  393. package/dist/hooks/useDismissOnEscape.js.map +1 -0
  394. package/dist/hooks/useFocusTrap.d.ts +2 -0
  395. package/dist/hooks/useFocusTrap.js +1 -0
  396. package/dist/hooks/useFocusTrap.js.map +1 -1
  397. package/dist/hooks/useHelperText.d.ts +21 -0
  398. package/dist/hooks/useHelperText.js +13 -0
  399. package/dist/hooks/useHelperText.js.map +1 -0
  400. package/dist/index.cjs +2 -2
  401. package/dist/index.cjs.map +1 -1
  402. package/dist/utils/controlProps.d.ts +16 -0
  403. package/dist/utils/controlProps.js +14 -0
  404. package/dist/utils/controlProps.js.map +1 -0
  405. package/dist/utils/overlayLayer.d.ts +15 -3
  406. package/dist/utils/overlayLayer.js +14 -7
  407. package/dist/utils/overlayLayer.js.map +1 -1
  408. package/dist/utils/ownClick.d.ts +16 -0
  409. package/dist/utils/ownClick.js +40 -0
  410. package/dist/utils/ownClick.js.map +1 -0
  411. package/dist/utils/readOnlyToggle.d.ts +15 -0
  412. package/dist/utils/readOnlyToggle.js +14 -0
  413. package/dist/utils/readOnlyToggle.js.map +1 -0
  414. package/package.json +2 -2
@@ -1,78 +1,73 @@
1
- import { jsx as d, jsxs as p } from "react/jsx-runtime";
2
- import _ from "clsx";
3
- import { Icon as w } from "../../base/icon/icon.js";
4
- const g = [
5
- "a[href]",
6
- "button",
7
- "input",
8
- "select",
9
- "textarea",
10
- "label",
11
- "summary",
12
- "[tabindex]",
13
- "[contenteditable]:not([contenteditable='false'])",
14
- ...[
15
- "button",
16
- "link",
17
- "checkbox",
18
- "radio",
19
- "switch",
20
- "textbox",
21
- "searchbox",
22
- "combobox",
23
- "spinbutton",
24
- "slider",
25
- "menuitem",
26
- "menuitemcheckbox",
27
- "menuitemradio",
28
- "option",
29
- "tab"
30
- ].map((c) => `[role='${c}']`)
31
- ].join(","), T = ({
32
- children: c,
33
- className: l,
34
- cellAlign: s = "left",
35
- isSortedByAsc: m,
36
- isSortedByDesc: r,
1
+ import { jsxs as x, jsx as h } from "react/jsx-runtime";
2
+ import { useContext as b, useEffect as k } from "react";
3
+ import N from "clsx";
4
+ import { isOwnClick as T } from "../../../utils/ownClick.js";
5
+ import { Icon as I } from "../../base/icon/icon.js";
6
+ import { useId as H } from "../../../hooks/useId.js";
7
+ import { TableLabelsContext as j, TableColumnContext as D, TableHeadContext as E, cellSpan as K, textOf as L } from "./tableColumns.js";
8
+ function O(t, u, f) {
9
+ var s, m;
10
+ const n = b(j), a = b(D), e = b(E), i = n != null && a != null && e && K(u) === 1, l = (s = a == null ? void 0 : a.column) != null ? s : -1, c = (m = a == null ? void 0 : a.row) != null ? m : -1, o = i && f() || void 0;
11
+ i && n.set(l, c, t, o), k(() => {
12
+ if (i)
13
+ return n.set(l, c, t, o), n.notify(), () => {
14
+ n.remove(l, c, t), n.notify();
15
+ };
16
+ }, [n, l, c, t, i, o]);
17
+ }
18
+ const J = ({
19
+ children: t,
20
+ className: u,
21
+ cellAlign: f = "left",
22
+ isSortedByAsc: n,
23
+ isSortedByDesc: a,
37
24
  sortable: e,
38
25
  sortDirection: i,
39
- onSort: t,
40
- ...u
26
+ onSort: l,
27
+ actions: c,
28
+ label: o,
29
+ ...s
41
30
  }) => {
42
- const a = i !== void 0 ? i : m ? "asc" : r ? "desc" : !1, b = e ? a === "asc" ? "ascending" : a === "desc" ? "descending" : "none" : void 0, f = a === "asc" ? "expand_more" : a === "desc" ? "expand_less" : "unfold_more", h = (n) => {
43
- n.target === n.currentTarget && e && t && (n.key === "Enter" || n.key === " ") && (n.preventDefault(), t());
44
- }, x = (n) => {
45
- var o;
46
- n.defaultPrevented || ((o = n.target) == null ? void 0 : o.closest(g)) === n.currentTarget && (t == null || t());
47
- };
48
- return /* @__PURE__ */ d(
31
+ const m = H();
32
+ O(m, s.colSpan, () => o != null ? o : L(t));
33
+ const r = i !== void 0 ? i : n ? "asc" : a ? "desc" : !1, C = e ? r === "asc" ? "ascending" : r === "desc" ? "descending" : "none" : s["aria-sort"], y = r === "asc" ? "expand_more" : r === "desc" ? "expand_less" : "unfold_more", v = (d) => {
34
+ d.target === d.currentTarget && e && l && (d.key === "Enter" || d.key === " ") && (d.preventDefault(), l());
35
+ }, g = (d) => {
36
+ T(d) && (l == null || l());
37
+ }, _ = `${m}-label`, w = !!c && s["aria-label"] == null && s["aria-labelledby"] == null;
38
+ return /* @__PURE__ */ x(
49
39
  "th",
50
40
  {
51
- ...u,
52
- "aria-sort": b,
53
- className: _("smwb-table__cell", "smwb-head-cell", l, {
54
- [`smwb-align_${s}`]: !!s,
41
+ ...s,
42
+ "aria-labelledby": w ? _ : s["aria-labelledby"],
43
+ "aria-sort": C,
44
+ className: N("smwb-table__cell", "smwb-head-cell", u, {
45
+ [`smwb-align_${f}`]: !!f,
55
46
  "smwb-head-cell_sortable": e,
56
- "smwb-head-cell_sorted": !!e && a !== !1
47
+ "smwb-head-cell_sorted": !!e && r !== !1
57
48
  }),
58
- children: /* @__PURE__ */ p(
59
- "span",
60
- {
61
- className: "smwb-head-cell__content",
62
- onClick: e ? x : void 0,
63
- onKeyDown: e ? h : void 0,
64
- role: e ? "button" : void 0,
65
- tabIndex: e ? 0 : void 0,
66
- children: [
67
- c,
68
- e && /* @__PURE__ */ d(w, { className: "smwb-head-cell__icon", name: f, size: 18, weight: 800 })
69
- ]
70
- }
71
- )
49
+ children: [
50
+ /* @__PURE__ */ x(
51
+ "span",
52
+ {
53
+ id: w ? _ : void 0,
54
+ className: "smwb-head-cell__content",
55
+ onClick: e ? g : void 0,
56
+ onKeyDown: e ? v : void 0,
57
+ role: e ? "button" : void 0,
58
+ tabIndex: e ? 0 : void 0,
59
+ children: [
60
+ t,
61
+ e && /* @__PURE__ */ h(I, { className: "smwb-head-cell__icon", name: y, size: 18, weight: 800 })
62
+ ]
63
+ }
64
+ ),
65
+ c ? /* @__PURE__ */ h("div", { className: "smwb-head-cell__actions", children: c }) : null
66
+ ]
72
67
  }
73
68
  );
74
69
  };
75
70
  export {
76
- T as default
71
+ J as default
77
72
  };
78
73
  //# sourceMappingURL=tableHeadCell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tableHeadCell.js","sources":["../../../../src/components/dataDisplay/table/tableHeadCell.tsx"],"sourcesContent":["import React, { PropsWithChildren, ThHTMLAttributes } from \"react\";\nimport cn from \"clsx\";\nimport Icon from \"../../base/icon/icon\";\n\nexport type SortDirection = \"asc\" | \"desc\" | false;\n\nexport interface TableHeadCellProps extends ThHTMLAttributes<HTMLTableCellElement> {\n className?: string;\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}\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\nconst TableHeadCell = ({\n children,\n className,\n cellAlign = \"left\",\n isSortedByAsc,\n isSortedByDesc,\n sortable,\n sortDirection,\n onSort,\n ...props\n}: PropsWithChildren<TableHeadCellProps>) => {\n const direction: SortDirection =\n sortDirection !== undefined ? sortDirection : isSortedByAsc ? \"asc\" : isSortedByDesc ? \"desc\" : false;\n\n const ariaSort = sortable\n ? direction === \"asc\"\n ? \"ascending\"\n : direction === \"desc\"\n ? \"descending\"\n : \"none\"\n : 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 = direction === \"asc\" ? \"expand_more\" : direction === \"desc\" ? \"expand_less\" : \"unfold_more\";\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 = (event: React.KeyboardEvent<HTMLSpanElement>) => {\n if (event.target !== event.currentTarget) return;\n if (sortable && onSort && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n 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: React delivers it here,\n // though it landed outside the control.\n const onClick = (event: React.MouseEvent<HTMLSpanElement>) => {\n if (event.defaultPrevented) return;\n if ((event.target as Element | null)?.closest(INTERACTIVE) !== event.currentTarget) return;\n onSort?.();\n };\n\n return (\n <th\n {...props}\n aria-sort={ariaSort}\n className={cn(\"smwb-table__cell\", \"smwb-head-cell\", className, {\n [`smwb-align_${cellAlign}`]: !!cellAlign,\n \"smwb-head-cell_sortable\": sortable,\n \"smwb-head-cell_sorted\": !!sortable && direction !== false,\n })}\n >\n <span\n className=\"smwb-head-cell__content\"\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n role={sortable ? \"button\" : undefined}\n tabIndex={sortable ? 0 : undefined}\n >\n {children}\n {sortable && <Icon className=\"smwb-head-cell__icon\" name={iconName} size={18} weight={800} />}\n </span>\n </th>\n );\n};\n\nexport default TableHeadCell;\n"],"names":["INTERACTIVE","role","TableHeadCell","children","className","cellAlign","isSortedByAsc","isSortedByDesc","sortable","sortDirection","onSort","props","direction","ariaSort","iconName","onKeyDown","event","onClick","_a","jsx","cn","jsxs","Icon"],"mappings":";;;AAoCA,MAAMA,IAAc;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,EAAA,EACA,IAAI,CAACC,MAAS,UAAUA,CAAI,IAAI;AACpC,EAAE,KAAK,GAAG,GAEJC,IAAgB,CAAC;AAAA,EACrB,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGC;AACL,MAA6C;AAC3C,QAAMC,IACJH,MAAkB,SAAYA,IAAgBH,IAAgB,QAAQC,IAAiB,SAAS,IAE5FM,IAAWL,IACbI,MAAc,QACZ,cACAA,MAAc,SACZ,eACA,SACJ,QASEE,IAAWF,MAAc,QAAQ,gBAAgBA,MAAc,SAAS,gBAAgB,eAIxFG,IAAY,CAACC,MAAgD;AACjE,IAAIA,EAAM,WAAWA,EAAM,iBACvBR,KAAYE,MAAWM,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SAChEA,EAAM,eAAA,GACNN,EAAA;AAAA,EAEJ,GAKMO,IAAU,CAACD,MAA6C;;AAC5D,IAAIA,EAAM,sBACLE,IAAAF,EAAM,WAAN,gBAAAE,EAAiC,QAAQlB,QAAiBgB,EAAM,kBACrEN,KAAA,QAAAA;AAAA,EACF;AAEA,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGR;AAAA,MACJ,aAAWE;AAAA,MACX,WAAWO,EAAG,oBAAoB,kBAAkBhB,GAAW;AAAA,QAC7D,CAAC,cAAcC,CAAS,EAAE,GAAG,CAAC,CAACA;AAAA,QAC/B,2BAA2BG;AAAA,QAC3B,yBAAyB,CAAC,CAACA,KAAYI,MAAc;AAAA,MAAA,CACtD;AAAA,MAED,UAAA,gBAAAS;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAASb,IAAWS,IAAU;AAAA,UAC9B,WAAWT,IAAWO,IAAY;AAAA,UAClC,MAAMP,IAAW,WAAW;AAAA,UAC5B,UAAUA,IAAW,IAAI;AAAA,UAExB,UAAA;AAAA,YAAAL;AAAA,YACAK,KAAY,gBAAAW,EAACG,GAAA,EAAK,WAAU,wBAAuB,MAAMR,GAAU,MAAM,IAAI,QAAQ,IAAA,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAC7F;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"tableHeadCell.js","sources":["../../../../src/components/dataDisplay/table/tableHeadCell.tsx"],"sourcesContent":["import React, { PropsWithChildren, ReactNode, ThHTMLAttributes, useContext, useEffect } from \"react\";\nimport cn from \"clsx\";\nimport { isOwnClick } from \"../../../utils/ownClick\";\nimport Icon from \"../../base/icon/icon\";\nimport { useId } from \"../../../hooks/useId\";\nimport { TableColumnContext, TableHeadContext, TableLabelsContext, cellSpan, textOf } from \"./tableColumns\";\n\nexport type SortDirection = \"asc\" | \"desc\" | false;\n\nexport interface TableHeadCellProps extends ThHTMLAttributes<HTMLTableCellElement> {\n className?: string;\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: put controls in\n * `actions` instead.\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 /**\n * The column's controls — a filter field, a menu button, a column resizer —\n * drawn after the sort control, outside it. Their names and values stay out\n * of the sort control's accessible name, and their keys and clicks never\n * reach it. Rendered whether or not the cell is sortable.\n *\n * The column header is then named after the children alone: the cell's\n * `aria-labelledby` points at the sort control, unless the cell is given\n * `aria-label` or `aria-labelledby`. Named from its content, the header would\n * take in the controls' names and values too.\n */\n actions?: ReactNode;\n /**\n * The column's name for its body cells while the table stacks rows as cards\n * (`Table stackBelow`). Without it, the text of the children is the name; give\n * `label` where they hold no text of their own (an icon, a translated message\n * component) or more than the name. An empty `label` leaves the column's cells\n * unlabelled, so they fill the card's width.\n */\n label?: string;\n}\n\n/**\n * A head cell of a stacked table labels its column, for its own head row: the\n * lowest row's label wins. It writes the label while it renders, for the body\n * cells that render after it, and again from an effect: that also tells body\n * cells which rendered before a change.\n */\nfunction useColumnLabel(owner: string, colSpan: number | string | undefined, text: () => string): void {\n const labels = useContext(TableLabelsContext);\n const place = useContext(TableColumnContext);\n const inHead = useContext(TableHeadContext);\n const labelling = labels != null && place != null && inHead && cellSpan(colSpan) === 1;\n const column = place?.column ?? -1;\n const row = place?.row ?? -1;\n const label = labelling ? text() || undefined : undefined;\n // Written during render so the server markup has the labels: see ColumnLabels.\n if (labelling) labels.set(column, row, owner, label);\n useEffect(() => {\n if (!labelling) return;\n labels.set(column, row, owner, label);\n labels.notify();\n return () => {\n labels.remove(column, row, owner);\n labels.notify();\n };\n }, [labels, column, row, owner, labelling, label]);\n}\n\nconst TableHeadCell = ({\n children,\n className,\n cellAlign = \"left\",\n isSortedByAsc,\n isSortedByDesc,\n sortable,\n sortDirection,\n onSort,\n actions,\n label,\n ...props\n}: PropsWithChildren<TableHeadCellProps>) => {\n const id = useId();\n useColumnLabel(id, props.colSpan, () => label ?? textOf(children));\n\n const direction: SortDirection =\n sortDirection !== undefined ? sortDirection : isSortedByAsc ? \"asc\" : isSortedByDesc ? \"desc\" : false;\n\n // A sortable cell's sort state wins over the caller's aria-sort; a cell that\n // is not sortable keeps the caller's.\n const ariaSort = sortable\n ? direction === \"asc\"\n ? \"ascending\"\n : direction === \"desc\"\n ? \"descending\"\n : \"none\"\n : props[\"aria-sort\"];\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 = direction === \"asc\" ? \"expand_more\" : direction === \"desc\" ? \"expand_less\" : \"unfold_more\";\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 = (event: React.KeyboardEvent<HTMLSpanElement>) => {\n if (event.target !== event.currentTarget) return;\n if (sortable && onSort && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n 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: React delivers it here,\n // though it landed outside the control.\n const onClick = (event: React.MouseEvent<HTMLSpanElement>) => {\n if (!isOwnClick(event)) return;\n onSort?.();\n };\n\n // With actions drawn, the column header is named after the content of its\n // sort control, not after the whole cell: the controls' names and the text\n // typed into them would join the header's name.\n const labelId = `${id}-label`;\n const labelled = !!actions && props[\"aria-label\"] == null && props[\"aria-labelledby\"] == null;\n\n return (\n <th\n {...props}\n aria-labelledby={labelled ? labelId : props[\"aria-labelledby\"]}\n aria-sort={ariaSort}\n className={cn(\"smwb-table__cell\", \"smwb-head-cell\", className, {\n [`smwb-align_${cellAlign}`]: !!cellAlign,\n \"smwb-head-cell_sortable\": sortable,\n \"smwb-head-cell_sorted\": !!sortable && direction !== false,\n })}\n >\n <span\n id={labelled ? labelId : undefined}\n className=\"smwb-head-cell__content\"\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n role={sortable ? \"button\" : undefined}\n tabIndex={sortable ? 0 : undefined}\n >\n {children}\n {sortable && <Icon className=\"smwb-head-cell__icon\" name={iconName} size={18} weight={800} />}\n </span>\n {actions ? <div className=\"smwb-head-cell__actions\">{actions}</div> : null}\n </th>\n );\n};\n\nexport default TableHeadCell;\n"],"names":["useColumnLabel","owner","colSpan","text","labels","useContext","TableLabelsContext","place","TableColumnContext","inHead","TableHeadContext","labelling","cellSpan","column","_a","row","_b","label","useEffect","TableHeadCell","children","className","cellAlign","isSortedByAsc","isSortedByDesc","sortable","sortDirection","onSort","actions","props","id","useId","textOf","direction","ariaSort","iconName","onKeyDown","event","onClick","isOwnClick","labelId","labelled","jsxs","cn","jsx","Icon"],"mappings":"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"}
@@ -5,6 +5,8 @@ export interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {
5
5
  selected?: boolean;
6
6
  /** Reflects expandable-row state (adds aria-expanded + styling). */
7
7
  expanded?: boolean;
8
+ /** Test id of the `<tr>`; `table-row` unless given. */
9
+ "data-testid"?: string;
8
10
  }
9
- declare const TableRow: ({ children, className, selected, expanded, ...props }: PropsWithChildren<TableRowProps>) => import("react/jsx-runtime").JSX.Element;
11
+ declare const TableRow: ({ children, className, selected, expanded, "data-testid": dataTestId, ...props }: PropsWithChildren<TableRowProps>) => import("react/jsx-runtime").JSX.Element;
10
12
  export default TableRow;
@@ -1,20 +1,32 @@
1
- import { jsx as m } from "react/jsx-runtime";
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import { useContext as r } from "react";
2
3
  import w from "clsx";
3
- const s = ({ children: a, className: t, selected: r, expanded: o, ...b }) => /* @__PURE__ */ m(
4
- "tr",
5
- {
6
- "data-testid": "table-row",
7
- className: w("smwb-table__row", t, {
8
- "smwb-table__row_selected": r,
9
- "smwb-table__row_expanded": o
10
- }),
11
- "aria-selected": r != null ? r : void 0,
12
- "aria-expanded": o != null ? o : void 0,
13
- ...b,
14
- children: a
15
- }
16
- );
4
+ import { TableLabelsContext as c, TableRowPlaceContext as _, useCellPlaces as u, withColumns as f } from "./tableColumns.js";
5
+ const k = ({
6
+ children: e,
7
+ className: l,
8
+ selected: t,
9
+ expanded: a,
10
+ "data-testid": s = "table-row",
11
+ ...o
12
+ }) => {
13
+ const m = r(c) != null, i = r(_), b = u();
14
+ return /* @__PURE__ */ n(
15
+ "tr",
16
+ {
17
+ "data-testid": s,
18
+ className: w("smwb-table__row", l, {
19
+ "smwb-table__row_selected": t,
20
+ "smwb-table__row_expanded": a
21
+ }),
22
+ ...o,
23
+ "aria-selected": t != null ? t : o["aria-selected"],
24
+ "aria-expanded": a != null ? a : o["aria-expanded"],
25
+ children: f(e, m, i, b)
26
+ }
27
+ );
28
+ };
17
29
  export {
18
- s as default
30
+ k as default
19
31
  };
20
32
  //# sourceMappingURL=tableRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tableRow.js","sources":["../../../../src/components/dataDisplay/table/tableRow.tsx"],"sourcesContent":["import React, { HTMLAttributes, PropsWithChildren } from \"react\";\nimport cn from \"clsx\";\n\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n className?: string;\n /** Marks the row as selected (adds aria-selected + styling). */\n selected?: boolean;\n /** Reflects expandable-row state (adds aria-expanded + styling). */\n expanded?: boolean;\n}\n\nconst TableRow = ({ children, className, selected, expanded, ...props }: PropsWithChildren<TableRowProps>) => {\n return (\n <tr\n data-testid=\"table-row\"\n className={cn(\"smwb-table__row\", className, {\n \"smwb-table__row_selected\": selected,\n \"smwb-table__row_expanded\": expanded,\n })}\n aria-selected={selected ?? undefined}\n aria-expanded={expanded ?? undefined}\n {...props}\n >\n {children}\n </tr>\n );\n};\nexport default TableRow;\n"],"names":["TableRow","children","className","selected","expanded","props","jsx","cn"],"mappings":";;AAWA,MAAMA,IAAW,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,UAAAC,GAAU,UAAAC,GAAU,GAAGC,QAE5D,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAWC,EAAG,mBAAmBL,GAAW;AAAA,MAC1C,4BAA4BC;AAAA,MAC5B,4BAA4BC;AAAA,IAAA,CAC7B;AAAA,IACD,iBAAeD,KAAA,OAAAA,IAAY;AAAA,IAC3B,iBAAeC,KAAA,OAAAA,IAAY;AAAA,IAC1B,GAAGC;AAAA,IAEH,UAAAJ;AAAA,EAAA;AAAA;"}
1
+ {"version":3,"file":"tableRow.js","sources":["../../../../src/components/dataDisplay/table/tableRow.tsx"],"sourcesContent":["import React, { HTMLAttributes, PropsWithChildren, useContext } from \"react\";\nimport cn from \"clsx\";\nimport { TableLabelsContext, TableRowPlaceContext, useCellPlaces, withColumns } from \"./tableColumns\";\n\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n className?: string;\n /** Marks the row as selected (adds aria-selected + styling). */\n selected?: boolean;\n /** Reflects expandable-row state (adds aria-expanded + styling). */\n expanded?: boolean;\n /** Test id of the `<tr>`; `table-row` unless given. */\n \"data-testid\"?: string;\n}\n\nconst TableRow = ({\n children,\n className,\n selected,\n expanded,\n \"data-testid\": dataTestId = \"table-row\",\n ...props\n}: PropsWithChildren<TableRowProps>) => {\n // In a stacked table each cell learns its column, by which a body cell finds\n // its label in the head.\n const stacked = useContext(TableLabelsContext) != null;\n const place = useContext(TableRowPlaceContext);\n const keep = useCellPlaces();\n return (\n <tr\n data-testid={dataTestId}\n className={cn(\"smwb-table__row\", className, {\n \"smwb-table__row_selected\": selected,\n \"smwb-table__row_expanded\": expanded,\n })}\n {...props}\n // `selected` and `expanded` win over the caller's aria-selected and\n // aria-expanded; without them, the caller's stay.\n aria-selected={selected ?? props[\"aria-selected\"]}\n aria-expanded={expanded ?? props[\"aria-expanded\"]}\n >\n {withColumns(children, stacked, place, keep)}\n </tr>\n );\n};\nexport default TableRow;\n"],"names":["TableRow","children","className","selected","expanded","dataTestId","props","stacked","useContext","TableLabelsContext","place","TableRowPlaceContext","keep","useCellPlaces","jsx","cn","withColumns"],"mappings":";;;;AAcA,MAAMA,IAAW,CAAC;AAAA,EAChB,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAeC,IAAa;AAAA,EAC5B,GAAGC;AACL,MAAwC;AAGtC,QAAMC,IAAUC,EAAWC,CAAkB,KAAK,MAC5CC,IAAQF,EAAWG,CAAoB,GACvCC,IAAOC,EAAA;AACb,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAaT;AAAA,MACb,WAAWU,EAAG,mBAAmBb,GAAW;AAAA,QAC1C,4BAA4BC;AAAA,QAC5B,4BAA4BC;AAAA,MAAA,CAC7B;AAAA,MACA,GAAGE;AAAA,MAGJ,iBAAeH,KAAA,OAAAA,IAAYG,EAAM,eAAe;AAAA,MAChD,iBAAeF,KAAA,OAAAA,IAAYE,EAAM,eAAe;AAAA,MAE/C,UAAAU,EAAYf,GAAUM,GAASG,GAAOE,CAAI;AAAA,IAAA;AAAA,EAAA;AAGjD;"}
@@ -1,20 +1,57 @@
1
1
  import React from "react";
2
2
  export interface ThumbCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect"> {
3
+ /**
4
+ * Class name(s) for the root `<div>`, the card's box. `style`, `id`, `data-*`, `aria-hidden`, `ref` and event
5
+ * handlers go to the root too, but `role`, `tabIndex`, `onFocus`, `onBlur` and the other `aria-*` attributes go to
6
+ * the card's content, `.smwb-thumb-card__content` (the image and the caption): that is the card's button when it has
7
+ * `onSelect`, and the element to focus.
8
+ */
9
+ className?: string;
3
10
  /** Thumbnail URL; falls back to `fallback` when missing / failed. */
4
11
  src?: string;
12
+ /**
13
+ * Text under the image. With `onSelect` it is part of the card's button and names it, so keep controls out of it:
14
+ * they go in `topStart` / `topEnd`.
15
+ */
5
16
  caption?: React.ReactNode;
17
+ /** Outlines the image; with `onSelect`, the card's button is also `aria-pressed="true"`. */
6
18
  selected?: boolean;
7
- /** Makes the card a selectable button (keyboard + `aria-pressed`). */
19
+ /**
20
+ * Makes the card selectable: its content (the image and the caption) becomes a toggle button with `aria-pressed`,
21
+ * selected by a click and by Enter / Space. The corner slots are not part of that button but its siblings, laid over
22
+ * the image, so their controls keep their own names, clicks and keys.
23
+ *
24
+ * A click selects the card unless it lands in a control in a slot (button, link, input, anything focusable) or in a
25
+ * portal opened from the card. Slot content that is not a control keeps its click from selecting the card by calling
26
+ * `preventDefault()` on it.
27
+ */
8
28
  onSelect?: () => void;
29
+ /**
30
+ * Runs on each click on the card, before `onSelect`, but not while the card is `disabled`.
31
+ * A click on a control in a slot runs it too, without selecting the card.
32
+ * Enter / Space select the card without a click, so they call only `onSelect`.
33
+ */
34
+ onClick?: React.MouseEventHandler<HTMLDivElement> | undefined;
9
35
  /** Shown in place of the image when `src` is missing / fails. */
10
36
  fallback?: React.ReactNode;
11
37
  /** A larger preview shown in a floating popup after a hover delay. */
12
38
  hoverPreview?: React.ReactNode | string;
13
- /** Top-left overlay slot (e.g. a favourite star). */
39
+ /**
40
+ * Top-left overlay slot (e.g. a favourite star). It sits over the image, outside the card's button, so controls here
41
+ * keep their own names, clicks and keys; see `onSelect`.
42
+ */
14
43
  topStart?: React.ReactNode;
15
- /** Top-right overlay slot (e.g. a kebab menu). */
44
+ /**
45
+ * Top-right overlay slot (e.g. a kebab menu). It sits over the image, outside the card's button, so controls here
46
+ * keep their own names, clicks and keys; see `onSelect`.
47
+ */
16
48
  topEnd?: React.ReactNode;
17
49
  lazy?: boolean;
50
+ /**
51
+ * Dims the card and ignores clicks on it: neither `onClick` nor `onSelect` runs.
52
+ * Keys do not select it either, and there is no hover preview. With `onSelect`
53
+ * the card is still a button, `aria-disabled` and out of the tab order.
54
+ */
18
55
  disabled?: boolean;
19
56
  /** Delay (ms) before the hover preview appears. Default 350. */
20
57
  hoverDelay?: number;
@@ -24,6 +61,10 @@ export interface ThumbCardProps extends Omit<React.HTMLAttributes<HTMLDivElement
24
61
  * load, keyboard/`aria-pressed` selection, corner action slots, and a delayed
25
62
  * floating hover-preview. The generic gallery-card behaviour every app rebuilds
26
63
  * on top of the primitives. SSR-safe — the hover preview is client-only.
64
+ *
65
+ * The root is a box around the card's content (the image and the caption, the
66
+ * card's button when it is selectable) and the corner slots, which are laid
67
+ * over the image beside that button rather than inside it.
27
68
  */
28
69
  export declare const ThumbCard: React.ForwardRefExoticComponent<ThumbCardProps & React.RefAttributes<HTMLDivElement>>;
29
70
  export default ThumbCard;
@@ -1,73 +1,93 @@
1
- import { jsxs as h, jsx as s } from "react/jsx-runtime";
1
+ import { jsxs as C, jsx as s } from "react/jsx-runtime";
2
2
  import '../../../assets/styles/less/components/thumbCard/thumbCard.entry.css';import '../../../assets/styles/less/tokens.entry.css';/* empty css */
3
3
  /* empty css */
4
- import { forwardRef as L, useRef as _, useState as j, useEffect as D } from "react";
5
- import { createPortal as I } from "react-dom";
6
- import M from "clsx";
7
- import { useForkRef as z } from "../../../hooks/useForkRef.js";
8
- import { LazyImage as B } from "../lazyImage/lazyImage.js";
9
- const U = L(function({
10
- src: w,
11
- caption: c,
12
- selected: i,
4
+ import { forwardRef as J, useRef as w, useState as L, useEffect as Q } from "react";
5
+ import { createPortal as U } from "react-dom";
6
+ import V from "clsx";
7
+ import { useForkRef as W } from "../../../hooks/useForkRef.js";
8
+ import { isOwnClick as X } from "../../../utils/ownClick.js";
9
+ import { splitControlProps as Y } from "../../../utils/controlProps.js";
10
+ import { LazyImage as Z } from "../lazyImage/lazyImage.js";
11
+ const at = J(function({
12
+ src: I,
13
+ caption: g,
14
+ selected: c,
13
15
  onSelect: r,
14
- fallback: v,
15
- hoverPreview: a,
16
- topStart: d,
17
- topEnd: l,
18
- lazy: y = !0,
19
- disabled: n,
20
- hoverDelay: g = 350,
21
- className: N,
22
- ...R
23
- }, x) {
24
- const f = _(null), T = z(x, f), [u, b] = j(null), o = _(null), e = () => {
25
- o.current && (clearTimeout(o.current), o.current = null);
26
- }, k = () => {
27
- a == null || n || (e(), o.current = setTimeout(() => {
28
- var p;
29
- const t = (p = f.current) == null ? void 0 : p.getBoundingClientRect();
30
- t && b({ top: t.top, left: t.right + 8 });
31
- }, g));
32
- }, C = () => {
33
- e(), b(null);
16
+ fallback: j,
17
+ hoverPreview: u,
18
+ topStart: p,
19
+ topEnd: x,
20
+ lazy: k = !0,
21
+ disabled: m,
22
+ hoverDelay: v = 350,
23
+ className: z,
24
+ // The card sets these on its root too; its own handlers call the caller's.
25
+ onClick: l,
26
+ onKeyDown: d,
27
+ onMouseEnter: f,
28
+ onMouseLeave: e,
29
+ ...B
30
+ }, F) {
31
+ var y;
32
+ const [i, O] = Y(B), N = w(null), b = w(null), q = W(F, N), [o, R] = L(null), n = w(null), h = () => {
33
+ n.current && (clearTimeout(n.current), n.current = null);
34
+ }, A = (t) => {
35
+ f == null || f(t), !(u == null || m) && (h(), n.current = setTimeout(() => {
36
+ var T;
37
+ const a = (T = N.current) == null ? void 0 : T.getBoundingClientRect();
38
+ a && R({ top: a.top, left: a.right + 8 });
39
+ }, v));
40
+ }, E = (t) => {
41
+ e == null || e(t), h(), R(null);
34
42
  };
35
- D(() => e, []);
36
- const m = !!r && !n, E = (t) => {
37
- m && (t.key === "Enter" || t.key === " ") && (t.preventDefault(), r == null || r());
43
+ Q(() => h, []);
44
+ const _ = !!r && !m, G = (t) => {
45
+ if (m) return;
46
+ const a = X(t, b.current);
47
+ l == null || l(t), a && (r == null || r());
48
+ }, H = (t) => {
49
+ d == null || d(t), !(!_ || t.target !== b.current) && (t.key === "Enter" || t.key === " ") && (t.preventDefault(), r == null || r());
38
50
  };
39
- return /* @__PURE__ */ h(
51
+ return /* @__PURE__ */ C(
40
52
  "div",
41
53
  {
42
- ...R,
43
- ref: T,
44
- className: M("smwb-thumb-card", N, {
45
- "smwb-thumb-card--selected": i,
46
- "smwb-thumb-card--disabled": n,
47
- "smwb-thumb-card--interactive": m
54
+ ...O,
55
+ ref: q,
56
+ className: V("smwb-thumb-card", z, {
57
+ "smwb-thumb-card--selected": c,
58
+ "smwb-thumb-card--disabled": m,
59
+ "smwb-thumb-card--interactive": _
48
60
  }),
49
- role: m ? "button" : void 0,
50
- tabIndex: m ? 0 : void 0,
51
- "aria-pressed": r ? i != null ? i : !1 : void 0,
52
- "aria-disabled": n || void 0,
53
- onClick: m ? () => r == null ? void 0 : r() : void 0,
54
- onKeyDown: E,
55
- onMouseEnter: k,
56
- onMouseLeave: C,
61
+ onClick: G,
62
+ onKeyDown: H,
63
+ onMouseEnter: A,
64
+ onMouseLeave: E,
57
65
  children: [
58
- /* @__PURE__ */ h("div", { className: "smwb-thumb-card__media", children: [
59
- /* @__PURE__ */ s(B, { src: w, lazy: y, fallback: v }),
60
- d ? /* @__PURE__ */ s("div", { className: "smwb-thumb-card__slot smwb-thumb-card__slot--start", children: d }) : null,
61
- l ? /* @__PURE__ */ s("div", { className: "smwb-thumb-card__slot smwb-thumb-card__slot--end", children: l }) : null
62
- ] }),
63
- c ? /* @__PURE__ */ s("div", { className: "smwb-thumb-card__caption", children: c }) : null,
64
- u && typeof document != "undefined" ? I(
66
+ /* @__PURE__ */ C(
67
+ "div",
68
+ {
69
+ ...i,
70
+ ref: b,
71
+ className: "smwb-thumb-card__content",
72
+ role: r ? "button" : i.role,
73
+ tabIndex: (y = i.tabIndex) != null ? y : _ ? 0 : void 0,
74
+ "aria-pressed": r ? c != null ? c : !1 : i["aria-pressed"],
75
+ "aria-disabled": m || i["aria-disabled"],
76
+ children: [
77
+ /* @__PURE__ */ s("div", { className: "smwb-thumb-card__media", children: /* @__PURE__ */ s(Z, { src: I, lazy: k, fallback: j }) }),
78
+ g ? /* @__PURE__ */ s("div", { className: "smwb-thumb-card__caption", children: g }) : null
79
+ ]
80
+ }
81
+ ),
82
+ p ? /* @__PURE__ */ s("div", { className: "smwb-thumb-card__slot smwb-thumb-card__slot--start", children: p }) : null,
83
+ x ? /* @__PURE__ */ s("div", { className: "smwb-thumb-card__slot smwb-thumb-card__slot--end", children: x }) : null,
84
+ o && typeof document != "undefined" ? U(
65
85
  /* @__PURE__ */ s(
66
86
  "div",
67
87
  {
68
88
  className: "smwb-thumb-card__preview",
69
- style: { position: "fixed", top: u.top, left: u.left },
70
- children: typeof a == "string" ? /* @__PURE__ */ s("img", { src: a, alt: "" }) : a
89
+ style: { position: "fixed", top: o.top, left: o.left },
90
+ children: typeof u == "string" ? /* @__PURE__ */ s("img", { src: u, alt: "" }) : u
71
91
  }
72
92
  ),
73
93
  document.body
@@ -77,7 +97,7 @@ const U = L(function({
77
97
  );
78
98
  });
79
99
  export {
80
- U as ThumbCard,
81
- U as default
100
+ at as ThumbCard,
101
+ at as default
82
102
  };
83
103
  //# sourceMappingURL=thumbCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"thumbCard.js","sources":["../../../../src/components/dataDisplay/thumbCard/thumbCard.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport cn from \"clsx\";\nimport { LazyImage } from \"../lazyImage\";\nimport { useForkRef } from \"../../../hooks/useForkRef\";\n\nexport interface ThumbCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /** Thumbnail URL; falls back to `fallback` when missing / failed. */\n src?: string;\n caption?: React.ReactNode;\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?: React.ReactNode;\n /** A larger preview shown in a floating popup after a hover delay. */\n hoverPreview?: React.ReactNode | string;\n /** Top-left overlay slot (e.g. a favourite star). */\n topStart?: React.ReactNode;\n /** Top-right overlay slot (e.g. a kebab menu). */\n topEnd?: React.ReactNode;\n lazy?: boolean;\n disabled?: boolean;\n /** Delay (ms) before the hover preview appears. Default 350. */\n hoverDelay?: number;\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 const ThumbCard = forwardRef<HTMLDivElement, ThumbCardProps>(function ThumbCard(\n {\n src,\n caption,\n selected,\n onSelect,\n fallback,\n hoverPreview,\n topStart,\n topEnd,\n lazy = true,\n disabled,\n hoverDelay = 350,\n className,\n ...rest\n },\n ref\n) {\n const cardRef = useRef<HTMLDivElement | null>(null);\n const setRefs = useForkRef(ref, cardRef);\n const [preview, setPreview] = useState<{ top: number; left: number } | null>(null);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearTimer = (): void => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n };\n const onEnter = (): void => {\n if (hoverPreview == null || disabled) return;\n clearTimer();\n timer.current = setTimeout(() => {\n const rect = cardRef.current?.getBoundingClientRect();\n if (rect) setPreview({ top: rect.top, left: rect.right + 8 });\n }, hoverDelay);\n };\n const onLeave = (): void => {\n clearTimer();\n setPreview(null);\n };\n useEffect(() => clearTimer, []);\n\n const interactive = !!onSelect && !disabled;\n const onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n if (interactive && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n onSelect?.();\n }\n };\n\n return (\n <div\n {...rest}\n ref={setRefs}\n className={cn(\"smwb-thumb-card\", className, {\n \"smwb-thumb-card--selected\": selected,\n \"smwb-thumb-card--disabled\": disabled,\n \"smwb-thumb-card--interactive\": interactive,\n })}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n aria-pressed={onSelect ? (selected ?? false) : undefined}\n aria-disabled={disabled || undefined}\n onClick={interactive ? () => onSelect?.() : undefined}\n onKeyDown={onKeyDown}\n onMouseEnter={onEnter}\n onMouseLeave={onLeave}\n >\n <div className=\"smwb-thumb-card__media\">\n <LazyImage src={src} lazy={lazy} fallback={fallback} />\n {topStart ? <div className=\"smwb-thumb-card__slot smwb-thumb-card__slot--start\">{topStart}</div> : null}\n {topEnd ? <div className=\"smwb-thumb-card__slot smwb-thumb-card__slot--end\">{topEnd}</div> : null}\n </div>\n {caption ? <div className=\"smwb-thumb-card__caption\">{caption}</div> : null}\n {preview && typeof document !== \"undefined\"\n ? createPortal(\n <div\n className=\"smwb-thumb-card__preview\"\n style={{ position: \"fixed\", top: preview.top, left: preview.left }}\n >\n {typeof hoverPreview === \"string\" ? <img src={hoverPreview} alt=\"\" /> : hoverPreview}\n </div>,\n document.body\n )\n : null}\n </div>\n );\n});\n\nexport default ThumbCard;\n"],"names":["ThumbCard","forwardRef","src","caption","selected","onSelect","fallback","hoverPreview","topStart","topEnd","lazy","disabled","hoverDelay","className","rest","ref","cardRef","useRef","setRefs","useForkRef","preview","setPreview","useState","timer","clearTimer","onEnter","rect","_a","onLeave","useEffect","interactive","onKeyDown","event","jsxs","cn","jsx","LazyImage","createPortal"],"mappings":"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"}
1
+ {"version":3,"file":"thumbCard.js","sources":["../../../../src/components/dataDisplay/thumbCard/thumbCard.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport cn from \"clsx\";\nimport { LazyImage } from \"../lazyImage\";\nimport { useForkRef } from \"../../../hooks/useForkRef\";\nimport { isOwnClick } from \"../../../utils/ownClick\";\nimport { splitControlProps } from \"../../../utils/controlProps\";\n\nexport interface ThumbCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n /**\n * Class name(s) for the root `<div>`, the card's box. `style`, `id`, `data-*`, `aria-hidden`, `ref` and event\n * handlers go to the root too, but `role`, `tabIndex`, `onFocus`, `onBlur` and the other `aria-*` attributes go to\n * the card's content, `.smwb-thumb-card__content` (the image and the caption): that is the card's button when it has\n * `onSelect`, and the element to focus.\n */\n className?: string;\n /** Thumbnail URL; falls back to `fallback` when missing / failed. */\n src?: string;\n /**\n * Text under the image. With `onSelect` it is part of the card's button and names it, so keep controls out of it:\n * they go in `topStart` / `topEnd`.\n */\n caption?: React.ReactNode;\n /** Outlines the image; with `onSelect`, the card's button is also `aria-pressed=\"true\"`. */\n selected?: boolean;\n /**\n * Makes the card selectable: its content (the image and the caption) becomes a toggle button with `aria-pressed`,\n * selected by a click and by Enter / Space. The corner slots are not part of that button but its siblings, laid over\n * the image, so their controls keep their own names, clicks and keys.\n *\n * A click selects the card unless it lands in a control in a slot (button, link, input, anything focusable) or in a\n * portal opened from the card. Slot content that is not a control keeps its click from selecting the card by calling\n * `preventDefault()` on it.\n */\n onSelect?: () => void;\n /**\n * Runs on each click on the card, before `onSelect`, but not while the card is `disabled`.\n * A click on a control in a slot runs it too, without selecting the card.\n * Enter / Space select the card without a click, so they call only `onSelect`.\n */\n onClick?: React.MouseEventHandler<HTMLDivElement> | undefined;\n /** Shown in place of the image when `src` is missing / fails. */\n fallback?: React.ReactNode;\n /** A larger preview shown in a floating popup after a hover delay. */\n hoverPreview?: React.ReactNode | string;\n /**\n * Top-left overlay slot (e.g. a favourite star). It sits over the image, outside the card's button, so controls here\n * keep their own names, clicks and keys; see `onSelect`.\n */\n topStart?: React.ReactNode;\n /**\n * Top-right overlay slot (e.g. a kebab menu). It sits over the image, outside the card's button, so controls here\n * keep their own names, clicks and keys; see `onSelect`.\n */\n topEnd?: React.ReactNode;\n lazy?: boolean;\n /**\n * Dims the card and ignores clicks on it: neither `onClick` nor `onSelect` runs.\n * Keys do not select it either, and there is no hover preview. With `onSelect`\n * the card is still a button, `aria-disabled` and out of the tab order.\n */\n disabled?: boolean;\n /** Delay (ms) before the hover preview appears. Default 350. */\n hoverDelay?: number;\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 *\n * The root is a box around the card's content (the image and the caption, the\n * card's button when it is selectable) and the corner slots, which are laid\n * over the image beside that button rather than inside it.\n */\nexport const ThumbCard = forwardRef<HTMLDivElement, ThumbCardProps>(function ThumbCard(\n {\n src,\n caption,\n selected,\n onSelect,\n fallback,\n hoverPreview,\n topStart,\n topEnd,\n lazy = true,\n disabled,\n hoverDelay = 350,\n className,\n // The card sets these on its root too; its own handlers call the caller's.\n onClick: onClickProp,\n onKeyDown: onKeyDownProp,\n onMouseEnter: onMouseEnterProp,\n onMouseLeave: onMouseLeaveProp,\n ...rest\n },\n ref\n) {\n // What the card is to the keyboard and to assistive tech goes to its\n // content, the element that is its button; the rest stays on the root.\n const [control, box] = splitControlProps(rest);\n const cardRef = useRef<HTMLDivElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const setRefs = useForkRef(ref, cardRef);\n const [preview, setPreview] = useState<{ top: number; left: number } | null>(null);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearTimer = (): void => {\n if (timer.current) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n };\n const onEnter = (event: React.MouseEvent<HTMLDivElement>): void => {\n onMouseEnterProp?.(event);\n if (hoverPreview == null || disabled) return;\n clearTimer();\n timer.current = setTimeout(() => {\n const rect = cardRef.current?.getBoundingClientRect();\n if (rect) setPreview({ top: rect.top, left: rect.right + 8 });\n }, hoverDelay);\n };\n const onLeave = (event: React.MouseEvent<HTMLDivElement>): void => {\n onMouseLeaveProp?.(event);\n clearTimer();\n setPreview(null);\n };\n useEffect(() => clearTimer, []);\n\n const interactive = !!onSelect && !disabled;\n // A disabled card ignores clicks, the caller's onClick included: it says\n // aria-disabled, and its styles turn pointer events off. The caller's onClick\n // sees every other click, those in the slots too, but only clicks on the\n // card's content and on what is not a control in a slot select it: not one\n // on a control in a slot, nor one in a portal opened from the card. That is\n // settled before onClick runs, so what onClick does to the event or the DOM\n // does not change it.\n const onClick = (event: React.MouseEvent<HTMLDivElement>): void => {\n if (disabled) return;\n const selects = isOwnClick(event, contentRef.current);\n onClickProp?.(event);\n if (selects) onSelect?.();\n };\n // Keys pressed on a control in a slot bubble up here too; only the keys of\n // the card's button select it.\n const onKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\n onKeyDownProp?.(event);\n if (!interactive || event.target !== contentRef.current) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onSelect?.();\n }\n };\n\n return (\n <div\n {...box}\n ref={setRefs}\n className={cn(\"smwb-thumb-card\", className, {\n \"smwb-thumb-card--selected\": selected,\n \"smwb-thumb-card--disabled\": disabled,\n \"smwb-thumb-card--interactive\": interactive,\n })}\n onClick={onClick}\n onKeyDown={onKeyDown}\n onMouseEnter={onEnter}\n onMouseLeave={onLeave}\n >\n <div\n {...control}\n ref={contentRef}\n className=\"smwb-thumb-card__content\"\n // With onSelect the content is the card's button and says whether it is\n // pressed, and a disabled card says so: these win over the caller's, and\n // where the card sets none, the caller's stay. Its tabIndex is a\n // default: the caller's wins, e.g. for roving focus.\n role={onSelect ? \"button\" : control.role}\n tabIndex={control.tabIndex ?? (interactive ? 0 : undefined)}\n aria-pressed={onSelect ? (selected ?? false) : control[\"aria-pressed\"]}\n aria-disabled={disabled || control[\"aria-disabled\"]}\n >\n <div className=\"smwb-thumb-card__media\">\n <LazyImage src={src} lazy={lazy} fallback={fallback} />\n </div>\n {caption ? <div className=\"smwb-thumb-card__caption\">{caption}</div> : null}\n </div>\n {/* Beside the button, not in it: controls here keep their names and input. */}\n {topStart ? <div className=\"smwb-thumb-card__slot smwb-thumb-card__slot--start\">{topStart}</div> : null}\n {topEnd ? <div className=\"smwb-thumb-card__slot smwb-thumb-card__slot--end\">{topEnd}</div> : null}\n {preview && typeof document !== \"undefined\"\n ? createPortal(\n <div\n className=\"smwb-thumb-card__preview\"\n style={{ position: \"fixed\", top: preview.top, left: preview.left }}\n >\n {typeof hoverPreview === \"string\" ? <img src={hoverPreview} alt=\"\" /> : hoverPreview}\n </div>,\n document.body\n )\n : null}\n </div>\n );\n});\n\nexport default ThumbCard;\n"],"names":["ThumbCard","forwardRef","src","caption","selected","onSelect","fallback","hoverPreview","topStart","topEnd","lazy","disabled","hoverDelay","className","onClickProp","onKeyDownProp","onMouseEnterProp","onMouseLeaveProp","rest","ref","control","box","splitControlProps","cardRef","useRef","contentRef","setRefs","useForkRef","preview","setPreview","useState","timer","clearTimer","onEnter","event","rect","_a","onLeave","useEffect","interactive","onClick","selects","isOwnClick","onKeyDown","jsxs","cn","jsx","LazyImage","createPortal"],"mappings":"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"}
@@ -37,6 +37,8 @@ export interface TreeViewProps extends Omit<React.HTMLAttributes<HTMLDivElement>
37
37
  renderLabel?: (item: ITreeNodeItem, nodeId: string) => ReactNode;
38
38
  /** Lazily resolves children the first time a node is expanded. */
39
39
  loadChildren?: (item: ITreeNodeItem, nodeId: string) => Promise<ITreeNodeItem[]>;
40
+ /** Test id of the root `<div>`; `tree-view` unless given. */
41
+ "data-testid"?: string;
40
42
  }
41
43
  export declare const TreeView: React.ForwardRefExoticComponent<TreeViewProps & React.RefAttributes<HTMLDivElement>>;
42
44
  export default TreeView;