@smwb/ui-react 2.7.0 → 2.9.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 (602) hide show
  1. package/AI_LESS_OVERRIDES.md +84 -21
  2. package/AI_THEMING.md +72 -28
  3. package/README.md +681 -0
  4. package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
  5. package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
  6. package/dist/assets/styles/less/components/button/button.entry.css +1 -1
  7. package/dist/assets/styles/less/components/card/card.entry.css +1 -1
  8. package/dist/assets/styles/less/components/checkbox/checkbox.entry.css +1 -1
  9. package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
  10. package/dist/assets/styles/less/components/commandPalette/commandPalette.entry.css +1 -0
  11. package/dist/assets/styles/less/components/composer/composer.entry.css +1 -0
  12. package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -0
  13. package/dist/assets/styles/less/components/diffStat/diffStat.entry.css +1 -0
  14. package/dist/assets/styles/less/components/kbd/kbd.entry.css +1 -0
  15. package/dist/assets/styles/less/components/list/list.entry.css +1 -1
  16. package/dist/assets/styles/less/components/menu/menu.entry.css +1 -1
  17. package/dist/assets/styles/less/components/personChip/personChip.entry.css +1 -1
  18. package/dist/assets/styles/less/components/qrCode/qrCode.entry.css +1 -0
  19. package/dist/assets/styles/less/components/radioButton/radioButton.entry.css +1 -1
  20. package/dist/assets/styles/less/components/rating/rating.entry.css +1 -1
  21. package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
  22. package/dist/assets/styles/less/components/sidebar/sidebar.entry.css +1 -1
  23. package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -0
  24. package/dist/assets/styles/less/components/swimlanes/swimlanes.entry.css +1 -0
  25. package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -0
  26. package/dist/assets/styles/less/components/table/table.entry.css +1 -1
  27. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  28. package/dist/assets/styles/less/components/tabs/tabPanel/tabPanel.entry.css +1 -0
  29. package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
  30. package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
  31. package/dist/assets/styles/less/components/thumbCard/thumbCard.entry.css +1 -1
  32. package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
  33. package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
  34. package/dist/assets/styles/less/components/typography/typography.entry.css +1 -1
  35. package/dist/assets/styles/less/connects/rt/table.entry.css +1 -1
  36. package/dist/assets/styles/less/tokens.entry.css +1 -1
  37. package/dist/components/base/icon/icon.d.ts +6 -2
  38. package/dist/components/base/icon/icon.js +49 -37
  39. package/dist/components/base/icon/icon.js.map +1 -1
  40. package/dist/components/base/ripple/ripple.d.ts +3 -0
  41. package/dist/components/base/ripple/ripple.js +38 -23
  42. package/dist/components/base/ripple/ripple.js.map +1 -1
  43. package/dist/components/dataDisplay/avatar/avatar.d.ts +4 -0
  44. package/dist/components/dataDisplay/avatar/avatar.js +50 -37
  45. package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
  46. package/dist/components/dataDisplay/badge/badge.js +37 -28
  47. package/dist/components/dataDisplay/badge/badge.js.map +1 -1
  48. package/dist/components/dataDisplay/card/card.d.ts +30 -2
  49. package/dist/components/dataDisplay/card/card.js +50 -23
  50. package/dist/components/dataDisplay/card/card.js.map +1 -1
  51. package/dist/components/dataDisplay/carousel/carousel.js +70 -70
  52. package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
  53. package/dist/components/dataDisplay/chart/chart.d.ts +2 -0
  54. package/dist/components/dataDisplay/chart/chart.js +66 -53
  55. package/dist/components/dataDisplay/chart/chart.js.map +1 -1
  56. package/dist/components/dataDisplay/chat/chat.d.ts +43 -1
  57. package/dist/components/dataDisplay/chat/chat.js +179 -150
  58. package/dist/components/dataDisplay/chat/chat.js.map +1 -1
  59. package/dist/components/dataDisplay/chat/chatComposer.d.ts +17 -0
  60. package/dist/components/dataDisplay/chat/chatComposer.js +31 -29
  61. package/dist/components/dataDisplay/chat/chatComposer.js.map +1 -1
  62. package/dist/components/dataDisplay/chat/chatIconButton.d.ts +1 -1
  63. package/dist/components/dataDisplay/chat/chatIconButton.js +30 -26
  64. package/dist/components/dataDisplay/chat/chatIconButton.js.map +1 -1
  65. package/dist/components/dataDisplay/chat/chatLayout.d.ts +3 -1
  66. package/dist/components/dataDisplay/chat/chatLayout.js +56 -55
  67. package/dist/components/dataDisplay/chat/chatLayout.js.map +1 -1
  68. package/dist/components/dataDisplay/chat/chatOverlayLayout.d.ts +3 -1
  69. package/dist/components/dataDisplay/chat/index.d.ts +1 -1
  70. package/dist/components/dataDisplay/chat/utils.d.ts +14 -0
  71. package/dist/components/dataDisplay/chat/utils.js.map +1 -1
  72. package/dist/components/dataDisplay/chip/chip.d.ts +31 -0
  73. package/dist/components/dataDisplay/chip/chip.js +110 -83
  74. package/dist/components/dataDisplay/chip/chip.js.map +1 -1
  75. package/dist/components/dataDisplay/chipGroup/chipGroup.js +34 -30
  76. package/dist/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
  77. package/dist/components/dataDisplay/dagView/dagLayout.d.ts +74 -0
  78. package/dist/components/dataDisplay/dagView/dagLayout.js +289 -0
  79. package/dist/components/dataDisplay/dagView/dagLayout.js.map +1 -0
  80. package/dist/components/dataDisplay/dagView/dagView.d.ts +157 -0
  81. package/dist/components/dataDisplay/dagView/dagView.js +543 -0
  82. package/dist/components/dataDisplay/dagView/dagView.js.map +1 -0
  83. package/dist/components/dataDisplay/dagView/index.d.ts +4 -0
  84. package/dist/components/dataDisplay/dagView/panZoom.d.ts +75 -0
  85. package/dist/components/dataDisplay/dagView/panZoom.js +171 -0
  86. package/dist/components/dataDisplay/dagView/panZoom.js.map +1 -0
  87. package/dist/components/dataDisplay/descriptionList/descriptionList.d.ts +11 -3
  88. package/dist/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
  89. package/dist/components/dataDisplay/diffStat/diffStat.d.ts +54 -0
  90. package/dist/components/dataDisplay/diffStat/diffStat.js +63 -0
  91. package/dist/components/dataDisplay/diffStat/diffStat.js.map +1 -0
  92. package/dist/components/dataDisplay/diffStat/index.d.ts +2 -0
  93. package/dist/components/dataDisplay/expansionPanel/expansionPanel.js +143 -98
  94. package/dist/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
  95. package/dist/components/dataDisplay/kanban/kanban.d.ts +6 -0
  96. package/dist/components/dataDisplay/kanban/kanban.js +46 -35
  97. package/dist/components/dataDisplay/kanban/kanban.js.map +1 -1
  98. package/dist/components/dataDisplay/kbd/index.d.ts +4 -0
  99. package/dist/components/dataDisplay/kbd/kbd.d.ts +40 -0
  100. package/dist/components/dataDisplay/kbd/kbd.js +27 -0
  101. package/dist/components/dataDisplay/kbd/kbd.js.map +1 -0
  102. package/dist/components/dataDisplay/kbd/kbdKeys.d.ts +18 -0
  103. package/dist/components/dataDisplay/kbd/kbdKeys.js +72 -0
  104. package/dist/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
  105. package/dist/components/dataDisplay/lazyImage/lazyImage.js +31 -30
  106. package/dist/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
  107. package/dist/components/dataDisplay/list/list.d.ts +2 -0
  108. package/dist/components/dataDisplay/list/list.js +15 -14
  109. package/dist/components/dataDisplay/list/list.js.map +1 -1
  110. package/dist/components/dataDisplay/list/listItem.d.ts +34 -0
  111. package/dist/components/dataDisplay/list/listItem.js +47 -24
  112. package/dist/components/dataDisplay/list/listItem.js.map +1 -1
  113. package/dist/components/dataDisplay/meter/meter.d.ts +2 -0
  114. package/dist/components/dataDisplay/meter/meter.js +24 -23
  115. package/dist/components/dataDisplay/meter/meter.js.map +1 -1
  116. package/dist/components/dataDisplay/personChip/personChip.d.ts +2 -0
  117. package/dist/components/dataDisplay/personChip/personChip.js +39 -27
  118. package/dist/components/dataDisplay/personChip/personChip.js.map +1 -1
  119. package/dist/components/dataDisplay/qrCode/index.d.ts +2 -0
  120. package/dist/components/dataDisplay/qrCode/qrCode.d.ts +28 -0
  121. package/dist/components/dataDisplay/qrCode/qrCode.js +78 -0
  122. package/dist/components/dataDisplay/qrCode/qrCode.js.map +1 -0
  123. package/dist/components/dataDisplay/qrCode/qrCodePath.d.ts +7 -0
  124. package/dist/components/dataDisplay/qrCode/qrCodePath.js +20 -0
  125. package/dist/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
  126. package/dist/components/dataDisplay/stat/stat.d.ts +2 -0
  127. package/dist/components/dataDisplay/stat/stat.js +25 -13
  128. package/dist/components/dataDisplay/stat/stat.js.map +1 -1
  129. package/dist/components/dataDisplay/statusDot/index.d.ts +2 -0
  130. package/dist/components/dataDisplay/statusDot/statusDot.d.ts +35 -0
  131. package/dist/components/dataDisplay/statusDot/statusDot.js +30 -0
  132. package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -0
  133. package/dist/components/dataDisplay/swimlanes/index.d.ts +2 -0
  134. package/dist/components/dataDisplay/swimlanes/swimlanes.d.ts +53 -0
  135. package/dist/components/dataDisplay/swimlanes/swimlanes.js +357 -0
  136. package/dist/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
  137. package/dist/components/dataDisplay/table/table.d.ts +16 -1
  138. package/dist/components/dataDisplay/table/table.js +40 -36
  139. package/dist/components/dataDisplay/table/table.js.map +1 -1
  140. package/dist/components/dataDisplay/table/tableBody.js +10 -4
  141. package/dist/components/dataDisplay/table/tableBody.js.map +1 -1
  142. package/dist/components/dataDisplay/table/tableCell.d.ts +10 -2
  143. package/dist/components/dataDisplay/table/tableCell.js +20 -13
  144. package/dist/components/dataDisplay/table/tableCell.js.map +1 -1
  145. package/dist/components/dataDisplay/table/tableColumns.d.ts +83 -0
  146. package/dist/components/dataDisplay/table/tableColumns.js +112 -0
  147. package/dist/components/dataDisplay/table/tableColumns.js.map +1 -0
  148. package/dist/components/dataDisplay/table/tableHead.js +9 -3
  149. package/dist/components/dataDisplay/table/tableHead.js.map +1 -1
  150. package/dist/components/dataDisplay/table/tableHeadCell.d.ts +24 -3
  151. package/dist/components/dataDisplay/table/tableHeadCell.js +60 -65
  152. package/dist/components/dataDisplay/table/tableHeadCell.js.map +1 -1
  153. package/dist/components/dataDisplay/table/tableRow.d.ts +3 -1
  154. package/dist/components/dataDisplay/table/tableRow.js +28 -16
  155. package/dist/components/dataDisplay/table/tableRow.js.map +1 -1
  156. package/dist/components/dataDisplay/thumbCard/thumbCard.d.ts +44 -3
  157. package/dist/components/dataDisplay/thumbCard/thumbCard.js +79 -59
  158. package/dist/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
  159. package/dist/components/dataDisplay/treeView/treeView.d.ts +19 -1
  160. package/dist/components/dataDisplay/treeView/treeView.js +113 -91
  161. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  162. package/dist/components/feedBack/emptyState/emptyState.d.ts +2 -0
  163. package/dist/components/feedBack/emptyState/emptyState.js +22 -12
  164. package/dist/components/feedBack/emptyState/emptyState.js.map +1 -1
  165. package/dist/components/feedBack/message/message.d.ts +2 -0
  166. package/dist/components/feedBack/message/message.js +30 -19
  167. package/dist/components/feedBack/message/message.js.map +1 -1
  168. package/dist/components/feedBack/modal/modal.js +84 -63
  169. package/dist/components/feedBack/modal/modal.js.map +1 -1
  170. package/dist/components/feedBack/skeleton/skeleton.d.ts +10 -2
  171. package/dist/components/feedBack/skeleton/skeleton.js +37 -34
  172. package/dist/components/feedBack/skeleton/skeleton.js.map +1 -1
  173. package/dist/components/feedBack/snackbar/snackbar.js +104 -103
  174. package/dist/components/feedBack/snackbar/snackbar.js.map +1 -1
  175. package/dist/components/feedBack/tooltip/tooltip.d.ts +9 -1
  176. package/dist/components/feedBack/tooltip/tooltip.js +67 -47
  177. package/dist/components/feedBack/tooltip/tooltip.js.map +1 -1
  178. package/dist/components/inputs/button/button.d.ts +15 -1
  179. package/dist/components/inputs/button/button.js +73 -63
  180. package/dist/components/inputs/button/button.js.map +1 -1
  181. package/dist/components/inputs/buttonGroups/buttonGroup.d.ts +2 -0
  182. package/dist/components/inputs/buttonGroups/buttonGroup.js +40 -36
  183. package/dist/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
  184. package/dist/components/inputs/checkbox/checkbox.d.ts +10 -0
  185. package/dist/components/inputs/checkbox/checkbox.js +84 -59
  186. package/dist/components/inputs/checkbox/checkbox.js.map +1 -1
  187. package/dist/components/inputs/composer/composer.d.ts +149 -0
  188. package/dist/components/inputs/composer/composer.js +219 -0
  189. package/dist/components/inputs/composer/composer.js.map +1 -0
  190. package/dist/components/inputs/composer/composerFiles.d.ts +26 -0
  191. package/dist/components/inputs/composer/composerFiles.js +19 -0
  192. package/dist/components/inputs/composer/composerFiles.js.map +1 -0
  193. package/dist/components/inputs/composer/composerKeys.d.ts +29 -0
  194. package/dist/components/inputs/composer/composerKeys.js +7 -0
  195. package/dist/components/inputs/composer/composerKeys.js.map +1 -0
  196. package/dist/components/inputs/composer/index.d.ts +3 -0
  197. package/dist/components/inputs/datePicker/datePicker.js +170 -164
  198. package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
  199. package/dist/components/inputs/datePicker/datePickerDay.d.ts +1 -1
  200. package/dist/components/inputs/datePicker/datePickerDay.js +52 -44
  201. package/dist/components/inputs/datePicker/datePickerDay.js.map +1 -1
  202. package/dist/components/inputs/datePicker/datePickerIconButton.d.ts +1 -1
  203. package/dist/components/inputs/datePicker/datePickerIconButton.js +32 -28
  204. package/dist/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
  205. package/dist/components/inputs/dateTimePicker/dateTimePicker.js +160 -154
  206. package/dist/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
  207. package/dist/components/inputs/floatingButton/floatingButton.js +32 -30
  208. package/dist/components/inputs/floatingButton/floatingButton.js.map +1 -1
  209. package/dist/components/inputs/radioButton/radioButton.d.ts +9 -0
  210. package/dist/components/inputs/radioButton/radioButton.js +77 -58
  211. package/dist/components/inputs/radioButton/radioButton.js.map +1 -1
  212. package/dist/components/inputs/rating/rating.d.ts +8 -0
  213. package/dist/components/inputs/rating/rating.js +85 -70
  214. package/dist/components/inputs/rating/rating.js.map +1 -1
  215. package/dist/components/inputs/selectField/dropdownMenu.d.ts +20 -1
  216. package/dist/components/inputs/selectField/dropdownMenu.js +266 -113
  217. package/dist/components/inputs/selectField/dropdownMenu.js.map +1 -1
  218. package/dist/components/inputs/selectField/optionNavigation.d.ts +17 -0
  219. package/dist/components/inputs/selectField/optionNavigation.js +38 -0
  220. package/dist/components/inputs/selectField/optionNavigation.js.map +1 -0
  221. package/dist/components/inputs/selectField/selectField.d.ts +31 -1
  222. package/dist/components/inputs/selectField/selectField.js +358 -218
  223. package/dist/components/inputs/selectField/selectField.js.map +1 -1
  224. package/dist/components/inputs/slider/slider.d.ts +22 -1
  225. package/dist/components/inputs/slider/slider.js +330 -261
  226. package/dist/components/inputs/slider/slider.js.map +1 -1
  227. package/dist/components/inputs/textField/textField.d.ts +7 -0
  228. package/dist/components/inputs/textField/textField.js +118 -100
  229. package/dist/components/inputs/textField/textField.js.map +1 -1
  230. package/dist/components/inputs/textField/textFieldWrapper.d.ts +15 -1
  231. package/dist/components/inputs/textField/textFieldWrapper.js +45 -34
  232. package/dist/components/inputs/textField/textFieldWrapper.js.map +1 -1
  233. package/dist/components/inputs/timePicker/timePicker.js +91 -85
  234. package/dist/components/inputs/timePicker/timePicker.js.map +1 -1
  235. package/dist/components/inputs/toggle/toggle.d.ts +4 -0
  236. package/dist/components/inputs/toggle/toggle.js +80 -61
  237. package/dist/components/inputs/toggle/toggle.js.map +1 -1
  238. package/dist/components/inputs/valueSlider/valueSlider.d.ts +12 -0
  239. package/dist/components/inputs/valueSlider/valueSlider.js +23 -22
  240. package/dist/components/inputs/valueSlider/valueSlider.js.map +1 -1
  241. package/dist/components/layout/appLayout/appLayout.d.ts +2 -0
  242. package/dist/components/layout/appLayout/appLayout.js +25 -24
  243. package/dist/components/layout/appLayout/appLayout.js.map +1 -1
  244. package/dist/components/layout/divider/divider.d.ts +2 -0
  245. package/dist/components/layout/divider/divider.js +23 -22
  246. package/dist/components/layout/divider/divider.js.map +1 -1
  247. package/dist/components/layout/floatingWindow/floatingWindow.d.ts +2 -0
  248. package/dist/components/layout/floatingWindow/floatingWindow.js +145 -139
  249. package/dist/components/layout/floatingWindow/floatingWindow.js.map +1 -1
  250. package/dist/components/layout/grid/grid.d.ts +12 -1
  251. package/dist/components/layout/grid/grid.js +51 -36
  252. package/dist/components/layout/grid/grid.js.map +1 -1
  253. package/dist/components/layout/page/page.d.ts +2 -0
  254. package/dist/components/layout/page/page.js +16 -8
  255. package/dist/components/layout/page/page.js.map +1 -1
  256. package/dist/components/layout/pageHeader/pageHeader.d.ts +2 -0
  257. package/dist/components/layout/pageHeader/pageHeader.js +22 -13
  258. package/dist/components/layout/pageHeader/pageHeader.js.map +1 -1
  259. package/dist/components/layout/sectionHeader/sectionHeader.d.ts +2 -0
  260. package/dist/components/layout/sectionHeader/sectionHeader.js +37 -27
  261. package/dist/components/layout/sectionHeader/sectionHeader.js.map +1 -1
  262. package/dist/components/layout/sheet/sheet.d.ts +14 -0
  263. package/dist/components/layout/sheet/sheet.js +148 -132
  264. package/dist/components/layout/sheet/sheet.js.map +1 -1
  265. package/dist/components/layout/stack/stack.d.ts +2 -0
  266. package/dist/components/layout/stack/stack.js +29 -17
  267. package/dist/components/layout/stack/stack.js.map +1 -1
  268. package/dist/components/layout/tabGroups/index.d.ts +4 -0
  269. package/dist/components/layout/tabGroups/tabGroups.d.ts +94 -0
  270. package/dist/components/layout/tabGroups/tabGroups.js +783 -0
  271. package/dist/components/layout/tabGroups/tabGroups.js.map +1 -0
  272. package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +55 -0
  273. package/dist/components/layout/tabGroups/tabGroupsFocus.js +199 -0
  274. package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
  275. package/dist/components/layout/tabGroups/tabGroupsLayout.d.ts +250 -0
  276. package/dist/components/layout/tabGroups/tabGroupsLayout.js +497 -0
  277. package/dist/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
  278. package/dist/components/navigation/appBar/appBar.d.ts +24 -0
  279. package/dist/components/navigation/appBar/appBar.js +39 -33
  280. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  281. package/dist/components/navigation/bottomBar/bottomBar.js +81 -77
  282. package/dist/components/navigation/bottomBar/bottomBar.js.map +1 -1
  283. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +2 -0
  284. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +29 -27
  285. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  286. package/dist/components/navigation/commandPalette/commandPalette.d.ts +111 -0
  287. package/dist/components/navigation/commandPalette/commandPalette.js +337 -0
  288. package/dist/components/navigation/commandPalette/commandPalette.js.map +1 -0
  289. package/dist/components/navigation/commandPalette/commandPaletteFilter.d.ts +11 -0
  290. package/dist/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
  291. package/dist/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
  292. package/dist/components/navigation/commandPalette/commandPaletteNavigation.d.ts +13 -0
  293. package/dist/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
  294. package/dist/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
  295. package/dist/components/navigation/commandPalette/commandPaletteTypes.d.ts +39 -0
  296. package/dist/components/navigation/commandPalette/index.d.ts +4 -0
  297. package/dist/components/navigation/menu/menu.d.ts +12 -0
  298. package/dist/components/navigation/menu/menu.js.map +1 -1
  299. package/dist/components/navigation/menu/menuContext.d.ts +2 -0
  300. package/dist/components/navigation/menu/menuContext.js.map +1 -1
  301. package/dist/components/navigation/menu/menuFloating.js +42 -30
  302. package/dist/components/navigation/menu/menuFloating.js.map +1 -1
  303. package/dist/components/navigation/menu/menuItem.d.ts +4 -0
  304. package/dist/components/navigation/menu/menuItem.js +60 -48
  305. package/dist/components/navigation/menu/menuItem.js.map +1 -1
  306. package/dist/components/navigation/menu/menuList.d.ts +5 -1
  307. package/dist/components/navigation/menu/menuList.js +30 -19
  308. package/dist/components/navigation/menu/menuList.js.map +1 -1
  309. package/dist/components/navigation/menu/menuSubmenu.js +53 -40
  310. package/dist/components/navigation/menu/menuSubmenu.js.map +1 -1
  311. package/dist/components/navigation/pagination/pagination.d.ts +2 -0
  312. package/dist/components/navigation/pagination/pagination.js +51 -49
  313. package/dist/components/navigation/pagination/pagination.js.map +1 -1
  314. package/dist/components/navigation/sidebar/sidebar.d.ts +10 -0
  315. package/dist/components/navigation/sidebar/sidebar.js +65 -62
  316. package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
  317. package/dist/components/navigation/stepper/stepper.d.ts +2 -0
  318. package/dist/components/navigation/stepper/stepper.js +37 -28
  319. package/dist/components/navigation/stepper/stepper.js.map +1 -1
  320. package/dist/components/navigation/tabs/index.d.ts +3 -1
  321. package/dist/components/navigation/tabs/tab/tab.d.ts +88 -1
  322. package/dist/components/navigation/tabs/tab/tab.js +116 -35
  323. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  324. package/dist/components/navigation/tabs/tabPanel/tabPanel.d.ts +19 -0
  325. package/dist/components/navigation/tabs/tabPanel/tabPanel.js +27 -0
  326. package/dist/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
  327. package/dist/components/navigation/tabs/tabs.d.ts +80 -4
  328. package/dist/components/navigation/tabs/tabs.js +369 -148
  329. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  330. package/dist/components/navigation/tabs/tabs.utils.d.ts +20 -0
  331. package/dist/components/navigation/tabs/tabs.utils.js +11 -0
  332. package/dist/components/navigation/tabs/tabs.utils.js.map +1 -0
  333. package/dist/components/navigation/tabs/tabsContext.d.ts +11 -0
  334. package/dist/components/navigation/tabs/tabsContext.js +6 -0
  335. package/dist/components/navigation/tabs/tabsContext.js.map +1 -0
  336. package/dist/connects/rt/table/headerCellRenderer.d.ts +4 -1
  337. package/dist/connects/rt/table/headerCellRenderer.js +45 -15
  338. package/dist/connects/rt/table/headerCellRenderer.js.map +1 -1
  339. package/dist/connects/rt/table/table.d.ts +15 -1
  340. package/dist/connects/rt/table/table.js +125 -131
  341. package/dist/connects/rt/table/table.js.map +1 -1
  342. package/dist/headless/components/base/icon/icon.js +49 -37
  343. package/dist/headless/components/base/icon/icon.js.map +1 -1
  344. package/dist/headless/components/base/ripple/ripple.js +42 -27
  345. package/dist/headless/components/base/ripple/ripple.js.map +1 -1
  346. package/dist/headless/components/dataDisplay/avatar/avatar.js +51 -38
  347. package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
  348. package/dist/headless/components/dataDisplay/badge/badge.js +37 -28
  349. package/dist/headless/components/dataDisplay/badge/badge.js.map +1 -1
  350. package/dist/headless/components/dataDisplay/card/card.js +50 -23
  351. package/dist/headless/components/dataDisplay/card/card.js.map +1 -1
  352. package/dist/headless/components/dataDisplay/carousel/carousel.js +55 -55
  353. package/dist/headless/components/dataDisplay/carousel/carousel.js.map +1 -1
  354. package/dist/headless/components/dataDisplay/chat/chat.js +179 -150
  355. package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
  356. package/dist/headless/components/dataDisplay/chat/chatComposer.js +31 -29
  357. package/dist/headless/components/dataDisplay/chat/chatComposer.js.map +1 -1
  358. package/dist/headless/components/dataDisplay/chat/chatIconButton.js +30 -26
  359. package/dist/headless/components/dataDisplay/chat/chatIconButton.js.map +1 -1
  360. package/dist/headless/components/dataDisplay/chat/chatLayout.js +56 -55
  361. package/dist/headless/components/dataDisplay/chat/chatLayout.js.map +1 -1
  362. package/dist/headless/components/dataDisplay/chat/utils.js.map +1 -1
  363. package/dist/headless/components/dataDisplay/chip/chip.js +108 -81
  364. package/dist/headless/components/dataDisplay/chip/chip.js.map +1 -1
  365. package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js +35 -31
  366. package/dist/headless/components/dataDisplay/chipGroup/chipGroup.js.map +1 -1
  367. package/dist/headless/components/dataDisplay/dagView/dagLayout.js +289 -0
  368. package/dist/headless/components/dataDisplay/dagView/dagLayout.js.map +1 -0
  369. package/dist/headless/components/dataDisplay/dagView/dagView.js +541 -0
  370. package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -0
  371. package/dist/headless/components/dataDisplay/dagView/panZoom.js +171 -0
  372. package/dist/headless/components/dataDisplay/dagView/panZoom.js.map +1 -0
  373. package/dist/headless/components/dataDisplay/descriptionList/descriptionList.js.map +1 -1
  374. package/dist/headless/components/dataDisplay/diffStat/diffStat.js +61 -0
  375. package/dist/headless/components/dataDisplay/diffStat/diffStat.js.map +1 -0
  376. package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js +143 -98
  377. package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
  378. package/dist/headless/components/dataDisplay/kanban/kanban.js +45 -34
  379. package/dist/headless/components/dataDisplay/kanban/kanban.js.map +1 -1
  380. package/dist/headless/components/dataDisplay/kbd/kbd.js +25 -0
  381. package/dist/headless/components/dataDisplay/kbd/kbd.js.map +1 -0
  382. package/dist/headless/components/dataDisplay/kbd/kbdKeys.js +72 -0
  383. package/dist/headless/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
  384. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js +30 -29
  385. package/dist/headless/components/dataDisplay/lazyImage/lazyImage.js.map +1 -1
  386. package/dist/headless/components/dataDisplay/list/list.js +15 -14
  387. package/dist/headless/components/dataDisplay/list/list.js.map +1 -1
  388. package/dist/headless/components/dataDisplay/list/listItem.js +47 -24
  389. package/dist/headless/components/dataDisplay/list/listItem.js.map +1 -1
  390. package/dist/headless/components/dataDisplay/meter/meter.js +19 -18
  391. package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
  392. package/dist/headless/components/dataDisplay/personChip/personChip.js +39 -27
  393. package/dist/headless/components/dataDisplay/personChip/personChip.js.map +1 -1
  394. package/dist/headless/components/dataDisplay/qrCode/qrCode.js +76 -0
  395. package/dist/headless/components/dataDisplay/qrCode/qrCode.js.map +1 -0
  396. package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js +20 -0
  397. package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
  398. package/dist/headless/components/dataDisplay/stat/stat.js +27 -15
  399. package/dist/headless/components/dataDisplay/stat/stat.js.map +1 -1
  400. package/dist/headless/components/dataDisplay/statusDot/statusDot.js +28 -0
  401. package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -0
  402. package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js +355 -0
  403. package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
  404. package/dist/headless/components/dataDisplay/table/table.js +40 -36
  405. package/dist/headless/components/dataDisplay/table/table.js.map +1 -1
  406. package/dist/headless/components/dataDisplay/table/tableBody.js +10 -4
  407. package/dist/headless/components/dataDisplay/table/tableBody.js.map +1 -1
  408. package/dist/headless/components/dataDisplay/table/tableCell.js +20 -13
  409. package/dist/headless/components/dataDisplay/table/tableCell.js.map +1 -1
  410. package/dist/headless/components/dataDisplay/table/tableColumns.js +112 -0
  411. package/dist/headless/components/dataDisplay/table/tableColumns.js.map +1 -0
  412. package/dist/headless/components/dataDisplay/table/tableHead.js +9 -3
  413. package/dist/headless/components/dataDisplay/table/tableHead.js.map +1 -1
  414. package/dist/headless/components/dataDisplay/table/tableHeadCell.js +60 -65
  415. package/dist/headless/components/dataDisplay/table/tableHeadCell.js.map +1 -1
  416. package/dist/headless/components/dataDisplay/table/tableRow.js +28 -16
  417. package/dist/headless/components/dataDisplay/table/tableRow.js.map +1 -1
  418. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js +78 -58
  419. package/dist/headless/components/dataDisplay/thumbCard/thumbCard.js.map +1 -1
  420. package/dist/headless/components/dataDisplay/treeView/treeView.js +113 -91
  421. package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
  422. package/dist/headless/components/feedBack/emptyState/emptyState.js +21 -11
  423. package/dist/headless/components/feedBack/emptyState/emptyState.js.map +1 -1
  424. package/dist/headless/components/feedBack/message/message.js +31 -20
  425. package/dist/headless/components/feedBack/message/message.js.map +1 -1
  426. package/dist/headless/components/feedBack/modal/modal.js +84 -63
  427. package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
  428. package/dist/headless/components/feedBack/skeleton/skeleton.js +38 -35
  429. package/dist/headless/components/feedBack/skeleton/skeleton.js.map +1 -1
  430. package/dist/headless/components/feedBack/snackbar/snackbar.js +108 -107
  431. package/dist/headless/components/feedBack/snackbar/snackbar.js.map +1 -1
  432. package/dist/headless/components/feedBack/tooltip/tooltip.js +67 -47
  433. package/dist/headless/components/feedBack/tooltip/tooltip.js.map +1 -1
  434. package/dist/headless/components/inputs/button/button.js +73 -63
  435. package/dist/headless/components/inputs/button/button.js.map +1 -1
  436. package/dist/headless/components/inputs/buttonGroups/buttonGroup.js +40 -36
  437. package/dist/headless/components/inputs/buttonGroups/buttonGroup.js.map +1 -1
  438. package/dist/headless/components/inputs/checkbox/checkbox.js +85 -60
  439. package/dist/headless/components/inputs/checkbox/checkbox.js.map +1 -1
  440. package/dist/headless/components/inputs/composer/composer.js +217 -0
  441. package/dist/headless/components/inputs/composer/composer.js.map +1 -0
  442. package/dist/headless/components/inputs/composer/composerFiles.js +19 -0
  443. package/dist/headless/components/inputs/composer/composerFiles.js.map +1 -0
  444. package/dist/headless/components/inputs/composer/composerKeys.js +7 -0
  445. package/dist/headless/components/inputs/composer/composerKeys.js.map +1 -0
  446. package/dist/headless/components/inputs/datePicker/datePicker.js +170 -164
  447. package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
  448. package/dist/headless/components/inputs/datePicker/datePickerDay.js +52 -44
  449. package/dist/headless/components/inputs/datePicker/datePickerDay.js.map +1 -1
  450. package/dist/headless/components/inputs/datePicker/datePickerIconButton.js +32 -28
  451. package/dist/headless/components/inputs/datePicker/datePickerIconButton.js.map +1 -1
  452. package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js +160 -154
  453. package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
  454. package/dist/headless/components/inputs/floatingButton/floatingButton.js +32 -30
  455. package/dist/headless/components/inputs/floatingButton/floatingButton.js.map +1 -1
  456. package/dist/headless/components/inputs/radioButton/radioButton.js +77 -58
  457. package/dist/headless/components/inputs/radioButton/radioButton.js.map +1 -1
  458. package/dist/headless/components/inputs/rating/rating.js +85 -70
  459. package/dist/headless/components/inputs/rating/rating.js.map +1 -1
  460. package/dist/headless/components/inputs/selectField/dropdownMenu.js +266 -113
  461. package/dist/headless/components/inputs/selectField/dropdownMenu.js.map +1 -1
  462. package/dist/headless/components/inputs/selectField/optionNavigation.js +38 -0
  463. package/dist/headless/components/inputs/selectField/optionNavigation.js.map +1 -0
  464. package/dist/headless/components/inputs/selectField/selectField.js +358 -218
  465. package/dist/headless/components/inputs/selectField/selectField.js.map +1 -1
  466. package/dist/headless/components/inputs/slider/slider.js +330 -261
  467. package/dist/headless/components/inputs/slider/slider.js.map +1 -1
  468. package/dist/headless/components/inputs/textField/textField.js +118 -100
  469. package/dist/headless/components/inputs/textField/textField.js.map +1 -1
  470. package/dist/headless/components/inputs/textField/textFieldWrapper.js +45 -34
  471. package/dist/headless/components/inputs/textField/textFieldWrapper.js.map +1 -1
  472. package/dist/headless/components/inputs/timePicker/timePicker.js +91 -85
  473. package/dist/headless/components/inputs/timePicker/timePicker.js.map +1 -1
  474. package/dist/headless/components/inputs/toggle/toggle.js +79 -60
  475. package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
  476. package/dist/headless/components/inputs/valueSlider/valueSlider.js +25 -24
  477. package/dist/headless/components/inputs/valueSlider/valueSlider.js.map +1 -1
  478. package/dist/headless/components/layout/appLayout/appLayout.js +27 -26
  479. package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
  480. package/dist/headless/components/layout/divider/divider.js +18 -17
  481. package/dist/headless/components/layout/divider/divider.js.map +1 -1
  482. package/dist/headless/components/layout/floatingWindow/floatingWindow.js +145 -139
  483. package/dist/headless/components/layout/floatingWindow/floatingWindow.js.map +1 -1
  484. package/dist/headless/components/layout/grid/grid.js +48 -33
  485. package/dist/headless/components/layout/grid/grid.js.map +1 -1
  486. package/dist/headless/components/layout/page/page.js +15 -7
  487. package/dist/headless/components/layout/page/page.js.map +1 -1
  488. package/dist/headless/components/layout/pageHeader/pageHeader.js +20 -11
  489. package/dist/headless/components/layout/pageHeader/pageHeader.js.map +1 -1
  490. package/dist/headless/components/layout/sectionHeader/sectionHeader.js +36 -26
  491. package/dist/headless/components/layout/sectionHeader/sectionHeader.js.map +1 -1
  492. package/dist/headless/components/layout/sheet/sheet.js +156 -140
  493. package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
  494. package/dist/headless/components/layout/stack/stack.js +29 -17
  495. package/dist/headless/components/layout/stack/stack.js.map +1 -1
  496. package/dist/headless/components/layout/tabGroups/tabGroups.js +781 -0
  497. package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -0
  498. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +199 -0
  499. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
  500. package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js +497 -0
  501. package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
  502. package/dist/headless/components/navigation/appBar/appBar.js +35 -29
  503. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  504. package/dist/headless/components/navigation/bottomBar/bottomBar.js +81 -77
  505. package/dist/headless/components/navigation/bottomBar/bottomBar.js.map +1 -1
  506. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +32 -30
  507. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  508. package/dist/headless/components/navigation/commandPalette/commandPalette.js +335 -0
  509. package/dist/headless/components/navigation/commandPalette/commandPalette.js.map +1 -0
  510. package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
  511. package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
  512. package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
  513. package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
  514. package/dist/headless/components/navigation/menu/menu.js.map +1 -1
  515. package/dist/headless/components/navigation/menu/menuContext.js.map +1 -1
  516. package/dist/headless/components/navigation/menu/menuFloating.js +42 -30
  517. package/dist/headless/components/navigation/menu/menuFloating.js.map +1 -1
  518. package/dist/headless/components/navigation/menu/menuItem.js +60 -48
  519. package/dist/headless/components/navigation/menu/menuItem.js.map +1 -1
  520. package/dist/headless/components/navigation/menu/menuList.js +30 -19
  521. package/dist/headless/components/navigation/menu/menuList.js.map +1 -1
  522. package/dist/headless/components/navigation/menu/menuSubmenu.js +53 -40
  523. package/dist/headless/components/navigation/menu/menuSubmenu.js.map +1 -1
  524. package/dist/headless/components/navigation/pagination/pagination.js +51 -49
  525. package/dist/headless/components/navigation/pagination/pagination.js.map +1 -1
  526. package/dist/headless/components/navigation/sidebar/sidebar.js +55 -52
  527. package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
  528. package/dist/headless/components/navigation/stepper/stepper.js +42 -33
  529. package/dist/headless/components/navigation/stepper/stepper.js.map +1 -1
  530. package/dist/headless/components/navigation/tabs/tab/tab.js +117 -36
  531. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  532. package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js +25 -0
  533. package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
  534. package/dist/headless/components/navigation/tabs/tabs.js +362 -141
  535. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  536. package/dist/headless/components/navigation/tabs/tabs.utils.js +11 -0
  537. package/dist/headless/components/navigation/tabs/tabs.utils.js.map +1 -0
  538. package/dist/headless/components/navigation/tabs/tabsContext.js +6 -0
  539. package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -0
  540. package/dist/headless/hooks/useDismissOnEscape.js +16 -0
  541. package/dist/headless/hooks/useDismissOnEscape.js.map +1 -0
  542. package/dist/headless/hooks/useFocusTrap.js +24 -20
  543. package/dist/headless/hooks/useFocusTrap.js.map +1 -1
  544. package/dist/headless/hooks/useHelperText.js +13 -0
  545. package/dist/headless/hooks/useHelperText.js.map +1 -0
  546. package/dist/headless/hooks/useKeyboardShortcut.js +19 -0
  547. package/dist/headless/hooks/useKeyboardShortcut.js.map +1 -0
  548. package/dist/headless/index.js +360 -316
  549. package/dist/headless/index.js.map +1 -1
  550. package/dist/headless/utils/controlProps.js +14 -0
  551. package/dist/headless/utils/controlProps.js.map +1 -0
  552. package/dist/headless/utils/keyboardShortcut.js +49 -0
  553. package/dist/headless/utils/keyboardShortcut.js.map +1 -0
  554. package/dist/headless/utils/linkAttrs.js +13 -0
  555. package/dist/headless/utils/linkAttrs.js.map +1 -0
  556. package/dist/headless/utils/overlayLayer.js +14 -7
  557. package/dist/headless/utils/overlayLayer.js.map +1 -1
  558. package/dist/headless/utils/ownClick.js +40 -0
  559. package/dist/headless/utils/ownClick.js.map +1 -0
  560. package/dist/headless/utils/readOnlyToggle.js +14 -0
  561. package/dist/headless/utils/readOnlyToggle.js.map +1 -0
  562. package/dist/headless/utils/restoreFocus.js +10 -0
  563. package/dist/headless/utils/restoreFocus.js.map +1 -0
  564. package/dist/hooks/useDismissOnEscape.d.ts +11 -0
  565. package/dist/hooks/useDismissOnEscape.js +16 -0
  566. package/dist/hooks/useDismissOnEscape.js.map +1 -0
  567. package/dist/hooks/useFocusTrap.d.ts +8 -1
  568. package/dist/hooks/useFocusTrap.js +24 -20
  569. package/dist/hooks/useFocusTrap.js.map +1 -1
  570. package/dist/hooks/useHelperText.d.ts +21 -0
  571. package/dist/hooks/useHelperText.js +13 -0
  572. package/dist/hooks/useHelperText.js.map +1 -0
  573. package/dist/hooks/useKeyboardShortcut.d.ts +30 -0
  574. package/dist/hooks/useKeyboardShortcut.js +19 -0
  575. package/dist/hooks/useKeyboardShortcut.js.map +1 -0
  576. package/dist/index.cjs +3 -2
  577. package/dist/index.cjs.map +1 -1
  578. package/dist/index.d.ts +24 -3
  579. package/dist/index.js +360 -316
  580. package/dist/index.js.map +1 -1
  581. package/dist/utils/controlProps.d.ts +16 -0
  582. package/dist/utils/controlProps.js +14 -0
  583. package/dist/utils/controlProps.js.map +1 -0
  584. package/dist/utils/keyboardShortcut.d.ts +12 -0
  585. package/dist/utils/keyboardShortcut.js +49 -0
  586. package/dist/utils/keyboardShortcut.js.map +1 -0
  587. package/dist/utils/linkAttrs.d.ts +13 -0
  588. package/dist/utils/linkAttrs.js +13 -0
  589. package/dist/utils/linkAttrs.js.map +1 -0
  590. package/dist/utils/overlayLayer.d.ts +15 -3
  591. package/dist/utils/overlayLayer.js +14 -7
  592. package/dist/utils/overlayLayer.js.map +1 -1
  593. package/dist/utils/ownClick.d.ts +16 -0
  594. package/dist/utils/ownClick.js +40 -0
  595. package/dist/utils/ownClick.js.map +1 -0
  596. package/dist/utils/readOnlyToggle.d.ts +15 -0
  597. package/dist/utils/readOnlyToggle.js +14 -0
  598. package/dist/utils/readOnlyToggle.js.map +1 -0
  599. package/dist/utils/restoreFocus.d.ts +8 -0
  600. package/dist/utils/restoreFocus.js +10 -0
  601. package/dist/utils/restoreFocus.js.map +1 -0
  602. package/package.json +5 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,14 @@
1
+ function u(o) {
2
+ return o === "role" || o === "tabIndex" || o === "onFocus" || o === "onBlur" || o.startsWith("aria-") && o !== "aria-hidden";
3
+ }
4
+ function c(o, i = !0) {
5
+ if (!i) return [{}, o];
6
+ const t = {}, r = {};
7
+ for (const [n, s] of Object.entries(o))
8
+ (u(n) ? t : r)[n] = s;
9
+ return [t, r];
10
+ }
11
+ export {
12
+ c as splitControlProps
13
+ };
14
+ //# sourceMappingURL=controlProps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controlProps.js","sources":["../../../src/utils/controlProps.ts"],"sourcesContent":["import type React from \"react\";\n\n/** What an element is to the keyboard and to assistive tech. */\nexport type ControlProps = Pick<React.HTMLAttributes<HTMLElement>, \"role\" | \"tabIndex\" | \"onFocus\" | \"onBlur\"> &\n React.AriaAttributes;\n\nfunction isControlProp(key: string): boolean {\n return (\n key === \"role\" ||\n key === \"tabIndex\" ||\n key === \"onFocus\" ||\n key === \"onBlur\" ||\n (key.startsWith(\"aria-\") && key !== \"aria-hidden\")\n );\n}\n\n/**\n * Splits the caller's props of a component whose root is a box around its\n * control and other content beside it: a card's button and its footer or\n * corner slots, a chip's button and its delete button.\n *\n * What the component is to the keyboard and to assistive tech goes to the\n * control, the element that takes focus: `role`, `tabIndex`, `onFocus`,\n * `onBlur` and the `aria-*` attributes. The rest stays on the box, and so does\n * `aria-hidden`, which hides the whole component. While `toControl` is false\n * (the component is not a control, e.g. a card without `onClick`), all of them\n * stay on the box.\n */\nexport function splitControlProps<T extends object>(props: T, toControl = true): [ControlProps, T] {\n if (!toControl) return [{}, props];\n const control: Record<string, unknown> = {};\n const box: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n (isControlProp(key) ? control : box)[key] = value;\n }\n return [control, box as T];\n}\n"],"names":["isControlProp","key","splitControlProps","props","toControl","control","box","value"],"mappings":"AAMA,SAASA,EAAcC,GAAsB;AAC3C,SACEA,MAAQ,UACRA,MAAQ,cACRA,MAAQ,aACRA,MAAQ,YACPA,EAAI,WAAW,OAAO,KAAKA,MAAQ;AAExC;AAcO,SAASC,EAAoCC,GAAUC,IAAY,IAAyB;AACjG,MAAI,CAACA,EAAW,QAAO,CAAC,CAAA,GAAID,CAAK;AACjC,QAAME,IAAmC,CAAA,GACnCC,IAA+B,CAAA;AACrC,aAAW,CAACL,GAAKM,CAAK,KAAK,OAAO,QAAQJ,CAAK;AAC7C,KAACH,EAAcC,CAAG,IAAII,IAAUC,GAAKL,CAAG,IAAIM;AAE9C,SAAO,CAACF,GAASC,CAAQ;AAC3B;"}
@@ -0,0 +1,49 @@
1
+ import { detectKbdPlatform as d } from "../components/dataDisplay/kbd/kbdKeys.js";
2
+ const p = {
3
+ mod: "mod",
4
+ ctrl: "ctrl",
5
+ control: "ctrl",
6
+ alt: "alt",
7
+ option: "alt",
8
+ shift: "shift",
9
+ meta: "meta",
10
+ cmd: "meta",
11
+ command: "meta"
12
+ }, h = {
13
+ esc: "escape",
14
+ space: " ",
15
+ spacebar: " ",
16
+ up: "arrowup",
17
+ down: "arrowdown",
18
+ left: "arrowleft",
19
+ right: "arrowright",
20
+ plus: "+",
21
+ return: "enter",
22
+ del: "delete"
23
+ };
24
+ function y(t, m, n = d()) {
25
+ var i, c;
26
+ let l = !1, s = !1, f = !1, a = !1, e = null;
27
+ for (const u of m) {
28
+ const o = u.trim().toLowerCase() || u, r = p[o];
29
+ if (r === "mod")
30
+ n === "mac" ? a = !0 : l = !0;
31
+ else if (r === "ctrl")
32
+ l = !0;
33
+ else if (r === "alt")
34
+ s = !0;
35
+ else if (r === "shift")
36
+ f = !0;
37
+ else if (r === "meta")
38
+ a = !0;
39
+ else if (e === null)
40
+ e = (i = h[o]) != null ? i : o;
41
+ else
42
+ return !1;
43
+ }
44
+ return e === null || t.ctrlKey !== l || t.altKey !== s || t.shiftKey !== f || t.metaKey !== a ? !1 : ((c = t.key) != null ? c : "").toLowerCase() === e ? !0 : /^[a-z]$/.test(e) ? t.code === `Key${e.toUpperCase()}` : /^[0-9]$/.test(e) ? t.code === `Digit${e}` : !1;
45
+ }
46
+ export {
47
+ y as matchesKeyboardShortcut
48
+ };
49
+ //# sourceMappingURL=keyboardShortcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboardShortcut.js","sources":["../../../src/utils/keyboardShortcut.ts"],"sourcesContent":["import { detectKbdPlatform, type KbdPlatform } from \"../components/dataDisplay/kbd/kbdKeys\";\n\ntype ShortcutEvent = Pick<KeyboardEvent, \"key\" | \"code\" | \"ctrlKey\" | \"metaKey\" | \"altKey\" | \"shiftKey\">;\n\n// Modifier names (lower case) and the flag each one asks for. `mod` is resolved per platform.\nconst MODIFIERS: Record<string, \"mod\" | \"ctrl\" | \"alt\" | \"shift\" | \"meta\"> = {\n mod: \"mod\",\n ctrl: \"ctrl\",\n control: \"ctrl\",\n alt: \"alt\",\n option: \"alt\",\n shift: \"shift\",\n meta: \"meta\",\n cmd: \"meta\",\n command: \"meta\",\n};\n\n// Names (lower case) that stand for another `KeyboardEvent.key`.\nconst KEY_ALIASES: Record<string, string> = {\n esc: \"escape\",\n space: \" \",\n spacebar: \" \",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\",\n plus: \"+\",\n return: \"enter\",\n del: \"delete\",\n};\n\n/**\n * Whether a keyboard event is the shortcut `keys` (in `Kbd` key names, e.g. `[\"Mod\", \"K\"]`).\n * `Mod` is Meta on `mac` and Ctrl elsewhere. The modifiers must match exactly, so Mod+K does not\n * match Mod+Shift+K. The list needs exactly one key that is not a modifier. It is compared with\n * `event.key` ignoring case; a single ASCII letter or digit also matches `event.code`\n * (`KeyK`, `Digit1`), so a shortcut keeps working on a layout that types other letters.\n * `platform` is the running browser's by default.\n */\nexport function matchesKeyboardShortcut(\n event: ShortcutEvent,\n keys: string[],\n platform: KbdPlatform = detectKbdPlatform()\n): boolean {\n let ctrl = false;\n let alt = false;\n let shift = false;\n let meta = false;\n let main: string | null = null;\n for (const key of keys) {\n const lower = key.trim().toLowerCase() || key; // a lone \" \" is the space bar\n const modifier = MODIFIERS[lower];\n if (modifier === \"mod\") {\n if (platform === \"mac\") {\n meta = true;\n } else {\n ctrl = true;\n }\n } else if (modifier === \"ctrl\") {\n ctrl = true;\n } else if (modifier === \"alt\") {\n alt = true;\n } else if (modifier === \"shift\") {\n shift = true;\n } else if (modifier === \"meta\") {\n meta = true;\n } else if (main === null) {\n main = KEY_ALIASES[lower] ?? lower;\n } else {\n return false;\n }\n }\n if (main === null) {\n return false;\n }\n if (event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift || event.metaKey !== meta) {\n return false;\n }\n if ((event.key ?? \"\").toLowerCase() === main) {\n return true;\n }\n if (/^[a-z]$/.test(main)) {\n return event.code === `Key${main.toUpperCase()}`;\n }\n if (/^[0-9]$/.test(main)) {\n return event.code === `Digit${main}`;\n }\n return false;\n}\n"],"names":["MODIFIERS","KEY_ALIASES","matchesKeyboardShortcut","event","keys","platform","detectKbdPlatform","ctrl","alt","shift","meta","main","key","lower","modifier","_a","_b"],"mappings":";AAKA,MAAMA,IAAuE;AAAA,EAC3E,KAAK;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,SAAS;AACX,GAGMC,IAAsC;AAAA,EAC1C,KAAK;AAAA,EACL,OAAO;AAAA,EACP,UAAU;AAAA,EACV,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,KAAK;AACP;AAUO,SAASC,EACdC,GACAC,GACAC,IAAwBC,KACf;;AACT,MAAIC,IAAO,IACPC,IAAM,IACNC,IAAQ,IACRC,IAAO,IACPC,IAAsB;AAC1B,aAAWC,KAAOR,GAAM;AACtB,UAAMS,IAAQD,EAAI,KAAA,EAAO,iBAAiBA,GACpCE,IAAWd,EAAUa,CAAK;AAChC,QAAIC,MAAa;AACf,MAAIT,MAAa,QACfK,IAAO,KAEPH,IAAO;AAAA,aAEAO,MAAa;AACtB,MAAAP,IAAO;AAAA,aACEO,MAAa;AACtB,MAAAN,IAAM;AAAA,aACGM,MAAa;AACtB,MAAAL,IAAQ;AAAA,aACCK,MAAa;AACtB,MAAAJ,IAAO;AAAA,aACEC,MAAS;AAClB,MAAAA,KAAOI,IAAAd,EAAYY,CAAK,MAAjB,OAAAE,IAAsBF;AAAA;AAE7B,aAAO;AAAA,EAEX;AAIA,SAHIF,MAAS,QAGTR,EAAM,YAAYI,KAAQJ,EAAM,WAAWK,KAAOL,EAAM,aAAaM,KAASN,EAAM,YAAYO,IAC3F,OAEJM,IAAAb,EAAM,QAAN,OAAAa,IAAa,IAAI,YAAA,MAAkBL,IAC/B,KAEL,UAAU,KAAKA,CAAI,IACdR,EAAM,SAAS,MAAMQ,EAAK,aAAa,KAE5C,UAAU,KAAKA,CAAI,IACdR,EAAM,SAAS,QAAQQ,CAAI,KAE7B;AACT;"}
@@ -0,0 +1,13 @@
1
+ const o = "_blank";
2
+ function r(e) {
3
+ return e === void 0 ? o : e === null || e === "" ? void 0 : e;
4
+ }
5
+ function l(e, n) {
6
+ return e !== void 0 ? e || void 0 : n !== void 0 && n !== "_self" && n !== "_parent" && n !== "_top" ? "noreferrer" : void 0;
7
+ }
8
+ export {
9
+ o as DEFAULT_LINK_TARGET,
10
+ l as resolveLinkRel,
11
+ r as resolveLinkTarget
12
+ };
13
+ //# sourceMappingURL=linkAttrs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkAttrs.js","sources":["../../../src/utils/linkAttrs.ts"],"sourcesContent":["/** Where a link opens unless its `target` says otherwise. */\nexport const DEFAULT_LINK_TARGET = \"_blank\";\n\n/**\n * The `target` attribute for a link: `undefined` (not given) keeps `\"_blank\"`, `null` (or an\n * empty string) leaves the attribute out so the link opens in place, any other string is used as is.\n */\nexport function resolveLinkTarget(target: string | null | undefined): string | undefined {\n if (target === undefined) return DEFAULT_LINK_TARGET;\n return target === null || target === \"\" ? undefined : target;\n}\n\n/**\n * The `rel` attribute for a link: the caller's wins (an empty string drops it), `undefined` keeps the\n * default. The default is `\"noreferrer\"` for a link that opens another browsing context (a new tab or\n * a named window), which also implies `noopener`, and none for a link that opens in place.\n */\nexport function resolveLinkRel(rel: string | undefined, target: string | undefined): string | undefined {\n if (rel !== undefined) return rel || undefined;\n const elsewhere = target !== undefined && target !== \"_self\" && target !== \"_parent\" && target !== \"_top\";\n return elsewhere ? \"noreferrer\" : undefined;\n}\n"],"names":["DEFAULT_LINK_TARGET","resolveLinkTarget","target","resolveLinkRel","rel"],"mappings":"AACO,MAAMA,IAAsB;AAM5B,SAASC,EAAkBC,GAAuD;AACvF,SAAIA,MAAW,SAAkBF,IAC1BE,MAAW,QAAQA,MAAW,KAAK,SAAYA;AACxD;AAOO,SAASC,EAAeC,GAAyBF,GAAgD;AACtG,SAAIE,MAAQ,SAAkBA,KAAO,SACnBF,MAAW,UAAaA,MAAW,WAAWA,MAAW,aAAaA,MAAW,SAChF,eAAe;AACpC;"}
@@ -1,11 +1,18 @@
1
- const e = "data-smwb-overlay-layer", r = () => typeof document == "undefined" ? [] : Array.from(document.querySelectorAll(`[${e}]`)), a = (n, o) => typeof n.composedPath != "function" ? !1 : n.composedPath().some((t) => t instanceof Element && t.hasAttribute(e) && !t.contains(o)), s = (n) => {
2
- if (!n) return !0;
3
- const o = r(), t = o[o.length - 1];
4
- return !t || t === n || t.contains(n) || n.contains(t);
5
- };
1
+ const r = "data-smwb-overlay-layer", s = () => typeof document == "undefined" ? [] : Array.from(document.querySelectorAll(`[${r}]`)), a = (o, e) => {
2
+ if (typeof o.composedPath != "function") return !1;
3
+ const t = Node.DOCUMENT_POSITION_FOLLOWING | Node.DOCUMENT_POSITION_DISCONNECTED;
4
+ return o.composedPath().some(
5
+ (n) => n instanceof Element && n.hasAttribute(r) && (e.compareDocumentPosition(n) & t) !== 0
6
+ );
7
+ }, c = (o) => {
8
+ if (!o) return !0;
9
+ const e = s(), t = e[e.length - 1];
10
+ return !t || t === o || t.contains(o);
11
+ }, O = (o) => !o || !o.isConnected ? !1 : s().some((e) => (o.compareDocumentPosition(e) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0);
6
12
  export {
7
- e as OVERLAY_LAYER_ATTR,
13
+ r as OVERLAY_LAYER_ATTR,
14
+ O as hasOverlayLayerAbove,
8
15
  a as isEventInForeignOverlay,
9
- s as isTopOverlayLayer
16
+ c as isTopOverlayLayer
10
17
  };
11
18
  //# sourceMappingURL=overlayLayer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"overlayLayer.js","sources":["../../../src/utils/overlayLayer.ts"],"sourcesContent":["/** Attribute marking the root of a portaled overlay layer (modal, sheet wrapper, dropdown, …). */\nexport const OVERLAY_LAYER_ATTR = \"data-smwb-overlay-layer\";\n\n/** All open overlay layers in document order (last = topmost). */\nconst overlayLayers = (): Element[] =>\n typeof document === \"undefined\" ? [] : Array.from(document.querySelectorAll(`[${OVERLAY_LAYER_ATTR}]`));\n\n/**\n * True when `event` happened inside an overlay layer that does NOT contain\n * `node` — i.e. `node` sits underneath that layer, so the interaction is not\n * a \"click away\" from `node`.\n */\nexport const isEventInForeignOverlay = (event: Event, node: Element): boolean => {\n if (typeof event.composedPath !== \"function\") return false;\n return event\n .composedPath()\n .some((el) => el instanceof Element && el.hasAttribute(OVERLAY_LAYER_ATTR) && !el.contains(node));\n};\n\n/**\n * True when `el` belongs to the topmost open overlay layer (or no layers are\n * open). Used to make Escape close only the top layer instead of every layer.\n */\nexport const isTopOverlayLayer = (el: Element | null | undefined): boolean => {\n if (!el) return true;\n const all = overlayLayers();\n const top = all[all.length - 1];\n return !top || top === el || top.contains(el) || el.contains(top);\n};\n"],"names":["OVERLAY_LAYER_ATTR","overlayLayers","isEventInForeignOverlay","event","node","el","isTopOverlayLayer","all","top"],"mappings":"AACO,MAAMA,IAAqB,2BAG5BC,IAAgB,MACpB,OAAO,YAAa,cAAc,CAAA,IAAK,MAAM,KAAK,SAAS,iBAAiB,IAAID,CAAkB,GAAG,CAAC,GAO3FE,IAA0B,CAACC,GAAcC,MAChD,OAAOD,EAAM,gBAAiB,aAAmB,KAC9CA,EACJ,aAAA,EACA,KAAK,CAACE,MAAOA,aAAc,WAAWA,EAAG,aAAaL,CAAkB,KAAK,CAACK,EAAG,SAASD,CAAI,CAAC,GAOvFE,IAAoB,CAACD,MAA4C;AAC5E,MAAI,CAACA,EAAI,QAAO;AAChB,QAAME,IAAMN,EAAA,GACNO,IAAMD,EAAIA,EAAI,SAAS,CAAC;AAC9B,SAAO,CAACC,KAAOA,MAAQH,KAAMG,EAAI,SAASH,CAAE,KAAKA,EAAG,SAASG,CAAG;AAClE;"}
1
+ {"version":3,"file":"overlayLayer.js","sources":["../../../src/utils/overlayLayer.ts"],"sourcesContent":["/** Attribute marking the root of a portaled overlay layer (modal, sheet wrapper, dropdown, …). */\nexport const OVERLAY_LAYER_ATTR = \"data-smwb-overlay-layer\";\n\n/** All open overlay layers in document order (last = topmost). */\nconst overlayLayers = (): Element[] =>\n typeof document === \"undefined\" ? [] : Array.from(document.querySelectorAll(`[${OVERLAY_LAYER_ATTR}]`));\n\n/**\n * True when `event` happened inside an overlay layer above `node`, so the\n * interaction is not a \"click away\" from `node`. A layer is above `node` when it\n * comes later in document order (portaled after it, as everything opened from\n * inside `node` is) or sits inside it. A layer that holds `node` or comes before\n * it is below: a click in the Modal a select menu was opened from is a click away\n * from the menu.\n */\nexport const isEventInForeignOverlay = (event: Event, node: Element): boolean => {\n if (typeof event.composedPath !== \"function\") return false;\n // A layer detached during the dispatch can't be ranked; it counts as above.\n const above = Node.DOCUMENT_POSITION_FOLLOWING | Node.DOCUMENT_POSITION_DISCONNECTED;\n return event\n .composedPath()\n .some(\n (el) =>\n el instanceof Element && el.hasAttribute(OVERLAY_LAYER_ATTR) && (node.compareDocumentPosition(el) & above) !== 0\n );\n};\n\n/**\n * True when `el` belongs to the topmost open overlay layer (or no layers are\n * open). Used to make Escape close only the top layer instead of every layer.\n * A layer inside `el`, such as a select menu rendered into a Modal through\n * `menuContainer`, is above `el` rather than part of it.\n */\nexport const isTopOverlayLayer = (el: Element | null | undefined): boolean => {\n if (!el) return true;\n const all = overlayLayers();\n const top = all[all.length - 1];\n return !top || top === el || top.contains(el);\n};\n\n/**\n * True when an open overlay layer other than `el` sits above it: inside it, or\n * later in document order (portaled after it). FloatingWindow and the fullscreen\n * ExpansionPanel leave Escape to such a layer, e.g. a select menu opened from\n * inside them. Layers earlier in document order are below `el`.\n */\nexport const hasOverlayLayerAbove = (el: Element | null | undefined): boolean => {\n if (!el || !el.isConnected) return false;\n return overlayLayers().some((layer) => (el.compareDocumentPosition(layer) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0);\n};\n"],"names":["OVERLAY_LAYER_ATTR","overlayLayers","isEventInForeignOverlay","event","node","above","el","isTopOverlayLayer","all","top","hasOverlayLayerAbove","layer"],"mappings":"AACO,MAAMA,IAAqB,2BAG5BC,IAAgB,MACpB,OAAO,YAAa,cAAc,CAAA,IAAK,MAAM,KAAK,SAAS,iBAAiB,IAAID,CAAkB,GAAG,CAAC,GAU3FE,IAA0B,CAACC,GAAcC,MAA2B;AAC/E,MAAI,OAAOD,EAAM,gBAAiB,WAAY,QAAO;AAErD,QAAME,IAAQ,KAAK,8BAA8B,KAAK;AACtD,SAAOF,EACJ,eACA;AAAA,IACC,CAACG,MACCA,aAAc,WAAWA,EAAG,aAAaN,CAAkB,MAAMI,EAAK,wBAAwBE,CAAE,IAAID,OAAW;AAAA,EAAA;AAEvH,GAQaE,IAAoB,CAACD,MAA4C;AAC5E,MAAI,CAACA,EAAI,QAAO;AAChB,QAAME,IAAMP,EAAA,GACNQ,IAAMD,EAAIA,EAAI,SAAS,CAAC;AAC9B,SAAO,CAACC,KAAOA,MAAQH,KAAMG,EAAI,SAASH,CAAE;AAC9C,GAQaI,IAAuB,CAACJ,MAC/B,CAACA,KAAM,CAACA,EAAG,cAAoB,KAC5BL,EAAA,EAAgB,KAAK,CAACU,OAAWL,EAAG,wBAAwBK,CAAK,IAAI,KAAK,iCAAiC,CAAC;"}
@@ -0,0 +1,40 @@
1
+ const a = [
2
+ "a[href]",
3
+ "button",
4
+ "input",
5
+ "select",
6
+ "textarea",
7
+ "label",
8
+ "summary",
9
+ "[tabindex]",
10
+ "[contenteditable]:not([contenteditable='false'])",
11
+ ...[
12
+ "button",
13
+ "link",
14
+ "checkbox",
15
+ "radio",
16
+ "switch",
17
+ "textbox",
18
+ "searchbox",
19
+ "combobox",
20
+ "spinbutton",
21
+ "slider",
22
+ "menuitem",
23
+ "menuitemcheckbox",
24
+ "menuitemradio",
25
+ "option",
26
+ "tab"
27
+ ].map((t) => `[role='${t}']`)
28
+ ].join(",");
29
+ function c(t, r = t.currentTarget) {
30
+ var i;
31
+ if (t.defaultPrevented) return !1;
32
+ const e = t.target, o = (i = e == null ? void 0 : e.closest(a)) != null ? i : null;
33
+ if (o !== null && o === r) return !0;
34
+ const n = t.currentTarget;
35
+ return r === n || !e || !(n != null && n.contains(e)) ? !1 : !(o && n.contains(o));
36
+ }
37
+ export {
38
+ c as isOwnClick
39
+ };
40
+ //# sourceMappingURL=ownClick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownClick.js","sources":["../../../src/utils/ownClick.ts"],"sourcesContent":["/**\n * Whatever takes a click of its own: a native control or link, a label,\n * anything focusable, a widget role, editable content.\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\n/**\n * Whether a click belongs to the control that listens for it on a wrapper (a\n * sortable header, a selectable card) rather than to something inside it.\n *\n * The control must match `INTERACTIVE` itself (`role=\"button\"`, `tabindex`), and\n * then a click is its own when it is the nearest match from the click's target\n * up, and no handler has prevented the click's default yet. So a click in a\n * nested control is that control's, and so is a click in a portal rendered\n * inside: React delivers it to the wrapper, though it landed outside.\n *\n * The control is the element that listens (`currentTarget`), unless the caller\n * passes another: a box that holds a control and other content beside it (a\n * card's button and its corner slots) listens for both. A click on that content\n * is then the control's too, unless it lands in a control of its own there.\n */\nexport function isOwnClick(\n event: Pick<Event, \"target\" | \"currentTarget\" | \"defaultPrevented\">,\n control: Element | null = event.currentTarget as Element | null\n): boolean {\n if (event.defaultPrevented) return false;\n const target = event.target as Element | null;\n const nearest = target?.closest(INTERACTIVE) ?? null;\n if (nearest !== null && nearest === control) return true;\n const box = event.currentTarget as Element | null;\n if (control === box || !target || !box?.contains(target)) return false;\n return !(nearest && box.contains(nearest));\n}\n"],"names":["INTERACTIVE","role","isOwnClick","event","control","_a","target","nearest","box"],"mappings":"AAIA,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;AAiBH,SAASC,EACdC,GACAC,IAA0BD,EAAM,eACvB;AA/CX,MAAAE;AAgDE,MAAIF,EAAM,iBAAkB,QAAO;AACnC,QAAMG,IAASH,EAAM,QACfI,KAAUF,IAAAC,KAAA,gBAAAA,EAAQ,QAAQN,OAAhB,OAAAK,IAAgC;AAChD,MAAIE,MAAY,QAAQA,MAAYH,EAAS,QAAO;AACpD,QAAMI,IAAML,EAAM;AAClB,SAAIC,MAAYI,KAAO,CAACF,KAAU,EAACE,KAAA,QAAAA,EAAK,SAASF,MAAgB,KAC1D,EAAEC,KAAWC,EAAI,SAASD,CAAO;AAC1C;"}
@@ -0,0 +1,14 @@
1
+ function r(e, t) {
2
+ t == null && e.preventDefault();
3
+ }
4
+ function g(e, t) {
5
+ var l, o;
6
+ if (t != null) return;
7
+ const c = e.currentTarget, n = c.checked;
8
+ c.checked = !n, (o = (l = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "checked")) == null ? void 0 : l.set) == null || o.call(c, n);
9
+ }
10
+ export {
11
+ r as cancelToggle,
12
+ g as forgetCancelledToggle
13
+ };
14
+ //# sourceMappingURL=readOnlyToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readOnlyToggle.js","sources":["../../../src/utils/readOnlyToggle.ts"],"sourcesContent":["import type React from \"react\";\n\n// `readonly` means nothing to a checkbox or radio input: a click on it or on its label, Space, and\n// the arrow keys in a radio group still toggle it, each through a click on the input. Checkbox,\n// RadioButton and Toggle call these two while read-only.\n//\n// A controlled input (`checked` given) needs neither: after every click React puts it back to\n// `checked`, and the rest of its named radio group to theirs. Cancelling the click as well would\n// give the last word to the browser, which restores the state from before the click even when the\n// click changed `checked` (say, a row that selects itself on click).\n\n/**\n * Call from the input's `onClick`. Cancels the click on an uncontrolled input; the browser then\n * restores its previous state, and re-checks the radio that was checked before.\n */\nexport function cancelToggle(event: React.MouseEvent<HTMLInputElement>, checked: boolean | null | undefined): void {\n if (checked == null) event.preventDefault();\n}\n\n/**\n * Call from the input's `onChange`. React has recorded the toggled state of an uncontrolled input,\n * and the browser puts the old one back after the cancelled click without React noticing; React\n * would then take the next real change for no change and skip `onChange`. Record the old state\n * instead: set it through the input's own `checked` (the property React watches), then put the\n * toggled one back through the prototype's setter, which React doesn't watch, so the input stays\n * as it is until the browser restores it.\n */\nexport function forgetCancelledToggle(\n event: React.ChangeEvent<HTMLInputElement>,\n checked: boolean | null | undefined\n): void {\n if (checked != null) return;\n const input = event.currentTarget;\n const toggled = input.checked;\n input.checked = !toggled;\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, \"checked\")?.set?.call(input, toggled);\n}\n"],"names":["cancelToggle","event","checked","forgetCancelledToggle","_a","_b","input","toggled"],"mappings":"AAeO,SAASA,EAAaC,GAA2CC,GAA2C;AACjH,EAAIA,KAAW,QAAMD,EAAM,eAAA;AAC7B;AAUO,SAASE,EACdF,GACAC,GACM;AAfD,MAAAE,GAAAC;AAgBL,MAAIH,KAAW,KAAM;AACrB,QAAMI,IAAQL,EAAM,eACdM,IAAUD,EAAM;AACtB,EAAAA,EAAM,UAAU,CAACC,IACjBF,KAAAD,IAAA,OAAO,yBAAyB,iBAAiB,WAAW,SAAS,MAArE,gBAAAA,EAAwE,QAAxE,QAAAC,EAA6E,KAAKC,GAAOC;AAC3F;"}
@@ -0,0 +1,10 @@
1
+ function c(e, n) {
2
+ if (!(e instanceof HTMLElement) || e === document.body || !e.isConnected)
3
+ return;
4
+ const t = document.activeElement;
5
+ t && t !== document.body && !(n != null && n.contains(t)) || e.focus({ preventScroll: !0 });
6
+ }
7
+ export {
8
+ c as restoreFocus
9
+ };
10
+ //# sourceMappingURL=restoreFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restoreFocus.js","sources":["../../../src/utils/restoreFocus.ts"],"sourcesContent":["/**\n * Hands focus back to `opener`, the element that had it when an overlay opened, once the\n * overlay `root` closes. Focus the app moved elsewhere on purpose stays where it is: it\n * is restored only while it is still inside `root` or has been dropped on the body (the\n * root is gone, or the element that had it was removed). An opener that left the document\n * is skipped, and one that cannot take focus (disabled, hidden) simply ignores the call.\n */\nexport function restoreFocus(opener: Element | null, root: Element | null | undefined): void {\n if (!(opener instanceof HTMLElement) || opener === document.body || !opener.isConnected) {\n return;\n }\n const active = document.activeElement;\n if (active && active !== document.body && !root?.contains(active)) {\n return;\n }\n opener.focus({ preventScroll: true });\n}\n"],"names":["restoreFocus","opener","root","active"],"mappings":"AAOO,SAASA,EAAaC,GAAwBC,GAAwC;AAC3F,MAAI,EAAED,aAAkB,gBAAgBA,MAAW,SAAS,QAAQ,CAACA,EAAO;AAC1E;AAEF,QAAME,IAAS,SAAS;AACxB,EAAIA,KAAUA,MAAW,SAAS,QAAQ,EAACD,KAAA,QAAAA,EAAM,SAASC,OAG1DF,EAAO,MAAM,EAAE,eAAe,GAAA,CAAM;AACtC;"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * While `active`, Escape calls `onDismiss` wherever focus is and is marked as handled
3
+ * (`preventDefault()`), so a window, fullscreen panel, Modal or Sheet around stays open
4
+ * until the next press. For content shown on hover or focus, such as a tooltip, which
5
+ * Escape must hide without moving the pointer or focus (WCAG 1.4.13).
6
+ *
7
+ * The listener runs in the capture phase on `document`: those surfaces listen on
8
+ * `document` in the bubble phase, and one opened before the content showed would
9
+ * otherwise see the key first.
10
+ */
11
+ export declare function useDismissOnEscape(active: boolean, onDismiss: () => void): void;
@@ -0,0 +1,16 @@
1
+ import { useEffect as s } from "react";
2
+ import { useEventCallback as u } from "./useEventCallback.js";
3
+ function c(e, o) {
4
+ const n = u(o);
5
+ s(() => {
6
+ if (!e) return;
7
+ const t = (r) => {
8
+ r.key === "Escape" && (r.preventDefault(), n());
9
+ };
10
+ return document.addEventListener("keydown", t, !0), () => document.removeEventListener("keydown", t, !0);
11
+ }, [e, n]);
12
+ }
13
+ export {
14
+ c as useDismissOnEscape
15
+ };
16
+ //# sourceMappingURL=useDismissOnEscape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDismissOnEscape.js","sources":["../../src/hooks/useDismissOnEscape.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useEventCallback } from \"./useEventCallback\";\n\n/**\n * While `active`, Escape calls `onDismiss` wherever focus is and is marked as handled\n * (`preventDefault()`), so a window, fullscreen panel, Modal or Sheet around stays open\n * until the next press. For content shown on hover or focus, such as a tooltip, which\n * Escape must hide without moving the pointer or focus (WCAG 1.4.13).\n *\n * The listener runs in the capture phase on `document`: those surfaces listen on\n * `document` in the bubble phase, and one opened before the content showed would\n * otherwise see the key first.\n */\nexport function useDismissOnEscape(active: boolean, onDismiss: () => void): void {\n const dismiss = useEventCallback(onDismiss);\n useEffect(() => {\n if (!active) return undefined;\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n dismiss();\n };\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => document.removeEventListener(\"keydown\", onKeyDown, true);\n }, [active, dismiss]);\n}\n"],"names":["useDismissOnEscape","active","onDismiss","dismiss","useEventCallback","useEffect","onKeyDown","event"],"mappings":";;AAaO,SAASA,EAAmBC,GAAiBC,GAA6B;AAC/E,QAAMC,IAAUC,EAAiBF,CAAS;AAC1C,EAAAG,EAAU,MAAM;AACd,QAAI,CAACJ,EAAQ;AACb,UAAMK,IAAY,CAACC,MAA+B;AAChD,MAAIA,EAAM,QAAQ,aAClBA,EAAM,eAAA,GACNJ,EAAA;AAAA,IACF;AACA,oBAAS,iBAAiB,WAAWG,GAAW,EAAI,GAC7C,MAAM,SAAS,oBAAoB,WAAWA,GAAW,EAAI;AAAA,EACtE,GAAG,CAACL,GAAQE,CAAO,CAAC;AACtB;"}
@@ -1,4 +1,6 @@
1
1
  import { RefObject } from "react";
2
+ /** Elements in the Tab order (hidden ones match too). */
3
+ export declare const FOCUSABLE = "a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])";
2
4
  export interface UseFocusTrapOptions {
3
5
  /** Trap is active only while true. */
4
6
  active: boolean;
@@ -6,10 +8,15 @@ export interface UseFocusTrapOptions {
6
8
  restoreFocus?: boolean;
7
9
  /** Focus the first focusable element on activate. */
8
10
  autoFocus?: boolean;
11
+ /**
12
+ * Checked on every Tab. While it returns false the trap leaves the key alone, so a trap stacked above
13
+ * this one (a dialog opened from inside the container) handles it. Defaults to always true.
14
+ */
15
+ isTopmost?: () => boolean;
9
16
  }
10
17
  /**
11
18
  * Confines Tab/Shift+Tab focus within `containerRef` while `active`.
12
19
  * Restores focus to the previously focused element on teardown.
13
20
  */
14
- export declare function useFocusTrap<T extends HTMLElement>(containerRef: RefObject<T>, { active, restoreFocus, autoFocus }: UseFocusTrapOptions): void;
21
+ export declare function useFocusTrap<T extends HTMLElement>(containerRef: RefObject<T>, { active, restoreFocus, autoFocus, isTopmost }: UseFocusTrapOptions): void;
15
22
  export default useFocusTrap;
@@ -1,38 +1,42 @@
1
- import { useRef as m, useEffect as p } from "react";
2
- const b = 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])';
3
- function E(c, { active: s, restoreFocus: f = !0, autoFocus: l = !0 }) {
4
- const r = m(null);
5
- p(() => {
6
- if (!s)
1
+ import { useRef as y, useEffect as E } from "react";
2
+ const v = 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex="-1"])';
3
+ function D(s, { active: f, restoreFocus: l = !0, autoFocus: i = !0, isTopmost: a }) {
4
+ const u = y(null), d = y(a);
5
+ d.current = a, E(() => {
6
+ if (!f)
7
7
  return;
8
- const t = c.current;
8
+ const t = s.current;
9
9
  if (!t)
10
10
  return;
11
- r.current = document.activeElement;
12
- const i = () => Array.from(t.querySelectorAll(b)).filter(
11
+ u.current = document.activeElement;
12
+ const m = () => Array.from(t.querySelectorAll(v)).filter(
13
13
  (e) => e.offsetParent !== null || e === document.activeElement
14
14
  );
15
- if (l) {
16
- const e = i()[0];
15
+ if (i && !t.contains(document.activeElement)) {
16
+ const e = m()[0];
17
17
  (e != null ? e : t).focus({ preventScroll: !0 });
18
18
  }
19
- const a = (e) => {
19
+ const p = (e) => {
20
20
  if (e.key !== "Tab")
21
21
  return;
22
- const n = i();
22
+ const b = d.current;
23
+ if (b && !b())
24
+ return;
25
+ const n = m();
23
26
  if (n.length === 0) {
24
- e.preventDefault();
27
+ e.preventDefault(), t.focus({ preventScroll: !0 });
25
28
  return;
26
29
  }
27
- const o = n[0], d = n[n.length - 1], u = document.activeElement;
28
- e.shiftKey && u === o ? (e.preventDefault(), d.focus()) : !e.shiftKey && u === d ? (e.preventDefault(), o.focus()) : t.contains(u) || (e.preventDefault(), o.focus());
30
+ const r = n[0], c = n[n.length - 1], o = document.activeElement;
31
+ o === t ? (e.preventDefault(), (e.shiftKey ? c : r).focus()) : e.shiftKey && o === r ? (e.preventDefault(), c.focus()) : !e.shiftKey && o === c ? (e.preventDefault(), r.focus()) : t.contains(o) || (e.preventDefault(), r.focus());
29
32
  };
30
- return document.addEventListener("keydown", a, !0), () => {
31
- document.removeEventListener("keydown", a, !0), f && r.current && r.current.focus({ preventScroll: !0 });
33
+ return document.addEventListener("keydown", p, !0), () => {
34
+ document.removeEventListener("keydown", p, !0), l && u.current && u.current.focus({ preventScroll: !0 });
32
35
  };
33
- }, [s, l, f, c]);
36
+ }, [f, i, l, s]);
34
37
  }
35
38
  export {
36
- E as useFocusTrap
39
+ v as FOCUSABLE,
40
+ D as useFocusTrap
37
41
  };
38
42
  //# sourceMappingURL=useFocusTrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusTrap.js","sources":["../../src/hooks/useFocusTrap.ts"],"sourcesContent":["import { RefObject, useEffect, useRef } from \"react\";\n\nconst FOCUSABLE =\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nexport interface UseFocusTrapOptions {\n /** Trap is active only while true. */\n active: boolean;\n /** Restore focus to the previously focused element on deactivate. */\n restoreFocus?: boolean;\n /** Focus the first focusable element on activate. */\n autoFocus?: boolean;\n}\n\n/**\n * Confines Tab/Shift+Tab focus within `containerRef` while `active`.\n * Restores focus to the previously focused element on teardown.\n */\nexport function useFocusTrap<T extends HTMLElement>(\n containerRef: RefObject<T>,\n { active, restoreFocus = true, autoFocus = true }: UseFocusTrapOptions\n): void {\n const prevFocused = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!active) {\n return;\n }\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n prevFocused.current = document.activeElement as HTMLElement | null;\n\n const focusables = () =>\n Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement\n );\n\n if (autoFocus) {\n const first = focusables()[0];\n (first ?? container).focus({ preventScroll: true });\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") {\n return;\n }\n const items = focusables();\n if (items.length === 0) {\n event.preventDefault();\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n const activeEl = document.activeElement;\n\n if (event.shiftKey && activeEl === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && activeEl === last) {\n event.preventDefault();\n first.focus();\n } else if (!container.contains(activeEl)) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown, true);\n if (restoreFocus && prevFocused.current) {\n prevFocused.current.focus({ preventScroll: true });\n }\n };\n }, [active, autoFocus, restoreFocus, containerRef]);\n}\n\nexport default useFocusTrap;\n"],"names":["FOCUSABLE","useFocusTrap","containerRef","active","restoreFocus","autoFocus","prevFocused","useRef","useEffect","container","focusables","el","first","onKeyDown","event","items","last","activeEl"],"mappings":";AAEA,MAAMA,IACJ;AAeK,SAASC,EACdC,GACA,EAAE,QAAAC,GAAQ,cAAAC,IAAe,IAAM,WAAAC,IAAY,MACrC;AACN,QAAMC,IAAcC,EAA2B,IAAI;AAEnD,EAAAC,EAAU,MAAM;AACd,QAAI,CAACL;AACH;AAEF,UAAMM,IAAYP,EAAa;AAC/B,QAAI,CAACO;AACH;AAGF,IAAAH,EAAY,UAAU,SAAS;AAE/B,UAAMI,IAAa,MACjB,MAAM,KAAKD,EAAU,iBAA8BT,CAAS,CAAC,EAAE;AAAA,MAC7D,CAACW,MAAOA,EAAG,iBAAiB,QAAQA,MAAO,SAAS;AAAA,IAAA;AAGxD,QAAIN,GAAW;AACb,YAAMO,IAAQF,EAAA,EAAa,CAAC;AAC5B,OAACE,KAAA,OAAAA,IAASH,GAAW,MAAM,EAAE,eAAe,IAAM;AAAA,IACpD;AAEA,UAAMI,IAAY,CAACC,MAAyB;AAC1C,UAAIA,EAAM,QAAQ;AAChB;AAEF,YAAMC,IAAQL,EAAA;AACd,UAAIK,EAAM,WAAW,GAAG;AACtB,QAAAD,EAAM,eAAA;AACN;AAAA,MACF;AACA,YAAMF,IAAQG,EAAM,CAAC,GACfC,IAAOD,EAAMA,EAAM,SAAS,CAAC,GAC7BE,IAAW,SAAS;AAE1B,MAAIH,EAAM,YAAYG,MAAaL,KACjCE,EAAM,eAAA,GACNE,EAAK,MAAA,KACI,CAACF,EAAM,YAAYG,MAAaD,KACzCF,EAAM,eAAA,GACNF,EAAM,MAAA,KACIH,EAAU,SAASQ,CAAQ,MACrCH,EAAM,eAAA,GACNF,EAAM,MAAA;AAAA,IAEV;AAEA,oBAAS,iBAAiB,WAAWC,GAAW,EAAI,GAC7C,MAAM;AACX,eAAS,oBAAoB,WAAWA,GAAW,EAAI,GACnDT,KAAgBE,EAAY,WAC9BA,EAAY,QAAQ,MAAM,EAAE,eAAe,IAAM;AAAA,IAErD;AAAA,EACF,GAAG,CAACH,GAAQE,GAAWD,GAAcF,CAAY,CAAC;AACpD;"}
1
+ {"version":3,"file":"useFocusTrap.js","sources":["../../src/hooks/useFocusTrap.ts"],"sourcesContent":["import { RefObject, useEffect, useRef } from \"react\";\n\n/** Elements in the Tab order (hidden ones match too). */\nexport const FOCUSABLE =\n 'a[href],button:not([disabled]),textarea:not([disabled]),input:not([disabled]),select:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nexport interface UseFocusTrapOptions {\n /** Trap is active only while true. */\n active: boolean;\n /** Restore focus to the previously focused element on deactivate. */\n restoreFocus?: boolean;\n /** Focus the first focusable element on activate. */\n autoFocus?: boolean;\n /**\n * Checked on every Tab. While it returns false the trap leaves the key alone, so a trap stacked above\n * this one (a dialog opened from inside the container) handles it. Defaults to always true.\n */\n isTopmost?: () => boolean;\n}\n\n/**\n * Confines Tab/Shift+Tab focus within `containerRef` while `active`.\n * Restores focus to the previously focused element on teardown.\n */\nexport function useFocusTrap<T extends HTMLElement>(\n containerRef: RefObject<T>,\n { active, restoreFocus = true, autoFocus = true, isTopmost }: UseFocusTrapOptions\n): void {\n const prevFocused = useRef<HTMLElement | null>(null);\n // Read at key time, never as an effect dependency: an inline callback would re-arm the trap on every\n // render and re-run `autoFocus`.\n const isTopmostRef = useRef(isTopmost);\n isTopmostRef.current = isTopmost;\n\n useEffect(() => {\n if (!active) {\n return;\n }\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n prevFocused.current = document.activeElement as HTMLElement | null;\n\n const focusables = () =>\n Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement\n );\n\n // A child that has already taken the focus (an `autoFocus` field, or one focusing itself in an\n // effect) keeps it; the trap only brings in a focus that is still outside.\n if (autoFocus && !container.contains(document.activeElement)) {\n const first = focusables()[0];\n (first ?? container).focus({ preventScroll: true });\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") {\n return;\n }\n const isTopmost = isTopmostRef.current;\n if (isTopmost && !isTopmost()) {\n return;\n }\n const items = focusables();\n if (items.length === 0) {\n event.preventDefault();\n // Nothing left to tab through (e.g. every control disabled) and Chromium has dropped the\n // focus to <body>: pull it back into the container instead of leaving it behind the dialog.\n container.focus({ preventScroll: true });\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n const activeEl = document.activeElement;\n\n if (activeEl === container) {\n // The container itself holds the focus (a press on its empty area, or the `autoFocus`\n // fallback): it is not a tab stop, so the browser would step to the page behind it.\n event.preventDefault();\n (event.shiftKey ? last : first).focus();\n } else if (event.shiftKey && activeEl === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && activeEl === last) {\n event.preventDefault();\n first.focus();\n } else if (!container.contains(activeEl)) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown, true);\n if (restoreFocus && prevFocused.current) {\n prevFocused.current.focus({ preventScroll: true });\n }\n };\n }, [active, autoFocus, restoreFocus, containerRef]);\n}\n\nexport default useFocusTrap;\n"],"names":["FOCUSABLE","useFocusTrap","containerRef","active","restoreFocus","autoFocus","isTopmost","prevFocused","useRef","isTopmostRef","useEffect","container","focusables","el","first","onKeyDown","event","items","last","activeEl"],"mappings":";AAGO,MAAMA,IACX;AAoBK,SAASC,EACdC,GACA,EAAE,QAAAC,GAAQ,cAAAC,IAAe,IAAM,WAAAC,IAAY,IAAM,WAAAC,KAC3C;AACN,QAAMC,IAAcC,EAA2B,IAAI,GAG7CC,IAAeD,EAAOF,CAAS;AACrC,EAAAG,EAAa,UAAUH,GAEvBI,EAAU,MAAM;AACd,QAAI,CAACP;AACH;AAEF,UAAMQ,IAAYT,EAAa;AAC/B,QAAI,CAACS;AACH;AAGF,IAAAJ,EAAY,UAAU,SAAS;AAE/B,UAAMK,IAAa,MACjB,MAAM,KAAKD,EAAU,iBAA8BX,CAAS,CAAC,EAAE;AAAA,MAC7D,CAACa,MAAOA,EAAG,iBAAiB,QAAQA,MAAO,SAAS;AAAA,IAAA;AAKxD,QAAIR,KAAa,CAACM,EAAU,SAAS,SAAS,aAAa,GAAG;AAC5D,YAAMG,IAAQF,EAAA,EAAa,CAAC;AAC5B,OAACE,KAAA,OAAAA,IAASH,GAAW,MAAM,EAAE,eAAe,IAAM;AAAA,IACpD;AAEA,UAAMI,IAAY,CAACC,MAAyB;AAC1C,UAAIA,EAAM,QAAQ;AAChB;AAEF,YAAMV,IAAYG,EAAa;AAC/B,UAAIH,KAAa,CAACA;AAChB;AAEF,YAAMW,IAAQL,EAAA;AACd,UAAIK,EAAM,WAAW,GAAG;AACtB,QAAAD,EAAM,eAAA,GAGNL,EAAU,MAAM,EAAE,eAAe,GAAA,CAAM;AACvC;AAAA,MACF;AACA,YAAMG,IAAQG,EAAM,CAAC,GACfC,IAAOD,EAAMA,EAAM,SAAS,CAAC,GAC7BE,IAAW,SAAS;AAE1B,MAAIA,MAAaR,KAGfK,EAAM,eAAA,IACLA,EAAM,WAAWE,IAAOJ,GAAO,MAAA,KACvBE,EAAM,YAAYG,MAAaL,KACxCE,EAAM,eAAA,GACNE,EAAK,MAAA,KACI,CAACF,EAAM,YAAYG,MAAaD,KACzCF,EAAM,eAAA,GACNF,EAAM,MAAA,KACIH,EAAU,SAASQ,CAAQ,MACrCH,EAAM,eAAA,GACNF,EAAM,MAAA;AAAA,IAEV;AAEA,oBAAS,iBAAiB,WAAWC,GAAW,EAAI,GAC7C,MAAM;AACX,eAAS,oBAAoB,WAAWA,GAAW,EAAI,GACnDX,KAAgBG,EAAY,WAC9BA,EAAY,QAAQ,MAAM,EAAE,eAAe,IAAM;AAAA,IAErD;AAAA,EACF,GAAG,CAACJ,GAAQE,GAAWD,GAAcF,CAAY,CAAC;AACpD;"}
@@ -0,0 +1,21 @@
1
+ import type React from "react";
2
+ /**
3
+ * Whether `helperText` is shown under its control, so that it describes the control. TextFieldWrapper shows none for
4
+ * an inline field, and without helper text it draws a blank line in its place, which describes nothing.
5
+ */
6
+ export declare function hasHelperText(helperText: React.ReactNode, inline?: boolean): boolean;
7
+ export interface HelperTextOptions {
8
+ /** The field is inline: TextFieldWrapper draws no helper text for it. */
9
+ inline?: boolean;
10
+ /** The caller's own `aria-describedby`, kept after the helper text. */
11
+ describedBy?: string;
12
+ }
13
+ /**
14
+ * Links a control to the helper text drawn under it, by TextFieldWrapper or by the component itself (Rating). Put
15
+ * `id` on the helper text (TextFieldWrapper takes it as `helperTextId`) and `describedBy` on the control's
16
+ * `aria-describedby`: the helper text's id while it is shown, then the caller's own ids.
17
+ */
18
+ export declare function useHelperText(helperText: React.ReactNode, { inline, describedBy }?: HelperTextOptions): {
19
+ id: string;
20
+ describedBy: string | undefined;
21
+ };
@@ -0,0 +1,13 @@
1
+ import { useId as n } from "./useId.js";
2
+ function d(e, o) {
3
+ return !o && !!e;
4
+ }
5
+ function l(e, { inline: o, describedBy: r } = {}) {
6
+ const t = n(void 0, "smwb-helper-text"), i = [d(e, o) ? t : void 0, r].filter(Boolean).join(" ");
7
+ return { id: t, describedBy: i || void 0 };
8
+ }
9
+ export {
10
+ d as hasHelperText,
11
+ l as useHelperText
12
+ };
13
+ //# sourceMappingURL=useHelperText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHelperText.js","sources":["../../src/hooks/useHelperText.ts"],"sourcesContent":["import type React from \"react\";\nimport { useId } from \"./useId\";\n\n/**\n * Whether `helperText` is shown under its control, so that it describes the control. TextFieldWrapper shows none for\n * an inline field, and without helper text it draws a blank line in its place, which describes nothing.\n */\nexport function hasHelperText(helperText: React.ReactNode, inline?: boolean): boolean {\n return !inline && Boolean(helperText);\n}\n\nexport interface HelperTextOptions {\n /** The field is inline: TextFieldWrapper draws no helper text for it. */\n inline?: boolean;\n /** The caller's own `aria-describedby`, kept after the helper text. */\n describedBy?: string;\n}\n\n/**\n * Links a control to the helper text drawn under it, by TextFieldWrapper or by the component itself (Rating). Put\n * `id` on the helper text (TextFieldWrapper takes it as `helperTextId`) and `describedBy` on the control's\n * `aria-describedby`: the helper text's id while it is shown, then the caller's own ids.\n */\nexport function useHelperText(\n helperText: React.ReactNode,\n { inline, describedBy }: HelperTextOptions = {}\n): { id: string; describedBy: string | undefined } {\n const id = useId(undefined, \"smwb-helper-text\");\n const ids = [hasHelperText(helperText, inline) ? id : undefined, describedBy].filter(Boolean).join(\" \");\n return { id, describedBy: ids || undefined };\n}\n"],"names":["hasHelperText","helperText","inline","useHelperText","describedBy","id","useId","ids"],"mappings":";AAOO,SAASA,EAAcC,GAA6BC,GAA2B;AACpF,SAAO,CAACA,KAAU,EAAQD;AAC5B;AAcO,SAASE,EACdF,GACA,EAAE,QAAAC,GAAQ,aAAAE,EAAA,IAAmC,CAAA,GACI;AACjD,QAAMC,IAAKC,EAAM,QAAW,kBAAkB,GACxCC,IAAM,CAACP,EAAcC,GAAYC,CAAM,IAAIG,IAAK,QAAWD,CAAW,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACtG,SAAO,EAAE,IAAAC,GAAI,aAAaE,KAAO,OAAA;AACnC;"}
@@ -0,0 +1,30 @@
1
+ export interface UseKeyboardShortcutOptions {
2
+ /** The shortcut in `Kbd` key names, e.g. `["Mod", "K"]` (Command on macOS, Ctrl elsewhere). */
3
+ keys: string[];
4
+ /** Runs on a matching keydown anywhere in the document; the event's default action is prevented. */
5
+ onTrigger: (event: KeyboardEvent) => void;
6
+ /** Listen only while true; `true` by default. */
7
+ enabled?: boolean;
8
+ }
9
+ /**
10
+ * Binds a global keyboard shortcut while the component is mounted — the Mod+K that opens a
11
+ * `CommandPalette`, or any other app-wide key. One `keydown` listener on the document, added while
12
+ * `enabled` and removed on cleanup; nothing runs on the server.
13
+ *
14
+ * An event another handler already used (`defaultPrevented`), a key repeat and an IME composition
15
+ * are ignored. On a match the default action is prevented first — Chrome and Firefox otherwise take
16
+ * Ctrl+K for their own search — and then `onTrigger` runs. Modifiers must match exactly, so Mod+K
17
+ * does not fire on Mod+Shift+K, and a single letter or digit also matches by `event.code`, so the
18
+ * shortcut keeps working on a keyboard layout that types other letters.
19
+ *
20
+ * `keys` and `onTrigger` are read when the event arrives, so a new function identity on each render
21
+ * never re-subscribes the listener.
22
+ *
23
+ * ```tsx
24
+ * const [open, setOpen] = useState(false);
25
+ * useKeyboardShortcut({ keys: ["Mod", "K"], onTrigger: () => setOpen((was) => !was) });
26
+ * <Kbd keys={["Mod", "K"]} />
27
+ * ```
28
+ */
29
+ export declare function useKeyboardShortcut({ keys, onTrigger, enabled }: UseKeyboardShortcutOptions): void;
30
+ export default useKeyboardShortcut;
@@ -0,0 +1,19 @@
1
+ import { useRef as c, useEffect as f } from "react";
2
+ import { matchesKeyboardShortcut as s } from "../utils/keyboardShortcut.js";
3
+ function m({ keys: t, onTrigger: o, enabled: u = !0 }) {
4
+ const e = c({ keys: t, onTrigger: o });
5
+ e.current = { keys: t, onTrigger: o }, f(() => {
6
+ if (!u)
7
+ return;
8
+ const n = (r) => {
9
+ r.defaultPrevented || r.repeat || r.isComposing || r.keyCode === 229 || s(r, e.current.keys) && (r.preventDefault(), e.current.onTrigger(r));
10
+ };
11
+ return document.addEventListener("keydown", n), () => {
12
+ document.removeEventListener("keydown", n);
13
+ };
14
+ }, [u]);
15
+ }
16
+ export {
17
+ m as useKeyboardShortcut
18
+ };
19
+ //# sourceMappingURL=useKeyboardShortcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardShortcut.js","sources":["../../src/hooks/useKeyboardShortcut.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { matchesKeyboardShortcut } from \"../utils/keyboardShortcut\";\n\nexport interface UseKeyboardShortcutOptions {\n /** The shortcut in `Kbd` key names, e.g. `[\"Mod\", \"K\"]` (Command on macOS, Ctrl elsewhere). */\n keys: string[];\n /** Runs on a matching keydown anywhere in the document; the event's default action is prevented. */\n onTrigger: (event: KeyboardEvent) => void;\n /** Listen only while true; `true` by default. */\n enabled?: boolean;\n}\n\n/**\n * Binds a global keyboard shortcut while the component is mounted — the Mod+K that opens a\n * `CommandPalette`, or any other app-wide key. One `keydown` listener on the document, added while\n * `enabled` and removed on cleanup; nothing runs on the server.\n *\n * An event another handler already used (`defaultPrevented`), a key repeat and an IME composition\n * are ignored. On a match the default action is prevented first — Chrome and Firefox otherwise take\n * Ctrl+K for their own search — and then `onTrigger` runs. Modifiers must match exactly, so Mod+K\n * does not fire on Mod+Shift+K, and a single letter or digit also matches by `event.code`, so the\n * shortcut keeps working on a keyboard layout that types other letters.\n *\n * `keys` and `onTrigger` are read when the event arrives, so a new function identity on each render\n * never re-subscribes the listener.\n *\n * ```tsx\n * const [open, setOpen] = useState(false);\n * useKeyboardShortcut({ keys: [\"Mod\", \"K\"], onTrigger: () => setOpen((was) => !was) });\n * <Kbd keys={[\"Mod\", \"K\"]} />\n * ```\n */\nexport function useKeyboardShortcut({ keys, onTrigger, enabled = true }: UseKeyboardShortcutOptions): void {\n const latest = useRef({ keys, onTrigger });\n latest.current = { keys, onTrigger };\n\n useEffect(() => {\n if (!enabled) {\n return;\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.repeat || event.isComposing || event.keyCode === 229) {\n return;\n }\n if (!matchesKeyboardShortcut(event, latest.current.keys)) {\n return;\n }\n event.preventDefault();\n latest.current.onTrigger(event);\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [enabled]);\n}\n\nexport default useKeyboardShortcut;\n"],"names":["useKeyboardShortcut","keys","onTrigger","enabled","latest","useRef","useEffect","onKeyDown","event","matchesKeyboardShortcut"],"mappings":";;AAgCO,SAASA,EAAoB,EAAE,MAAAC,GAAM,WAAAC,GAAW,SAAAC,IAAU,MAA0C;AACzG,QAAMC,IAASC,EAAO,EAAE,MAAAJ,GAAM,WAAAC,GAAW;AACzC,EAAAE,EAAO,UAAU,EAAE,MAAAH,GAAM,WAAAC,EAAA,GAEzBI,EAAU,MAAM;AACd,QAAI,CAACH;AACH;AAEF,UAAMI,IAAY,CAACC,MAAyB;AAC1C,MAAIA,EAAM,oBAAoBA,EAAM,UAAUA,EAAM,eAAeA,EAAM,YAAY,OAGhFC,EAAwBD,GAAOJ,EAAO,QAAQ,IAAI,MAGvDI,EAAM,eAAA,GACNJ,EAAO,QAAQ,UAAUI,CAAK;AAAA,IAChC;AACA,oBAAS,iBAAiB,WAAWD,CAAS,GACvC,MAAM;AACX,eAAS,oBAAoB,WAAWA,CAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAACJ,CAAO,CAAC;AACd;"}