@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,138 +1,291 @@
1
- import { jsxs as f, Fragment as K, jsx as t } from "react/jsx-runtime";
2
- import x, { useState as S, useEffect as q } from "react";
3
- import { useVirtualList as z } from "../../../hooks/useVirtualList.js";
4
- import { useSafeLayoutEffect as B } from "../../../hooks/useSafeLayoutEffect.js";
5
- import { ProgressIndicator as J } from "../../feedBack/progressIndicator/progressIndicator.js";
6
- import { createPortal as Q } from "react-dom";
7
- import { Menu as R } from "../../navigation/menu/menu.js";
8
- import { TextField as U } from "../textField/textField.js";
9
- import { MenuDivider as X } from "../../navigation/menu/menuDivider.js";
10
- import { MenuItem as N } from "../../navigation/menu/menuItem.js";
11
- function ae({
12
- menuMaxHeight: d,
13
- menuMiddleware: k,
14
- search: M,
15
- onSearchInputChange: n,
16
- items: l,
17
- searchValue: W,
18
- isOpen: s,
19
- onClose: m,
20
- anchorElementRef: i,
21
- value: c,
22
- onItemClick: D,
23
- isLoading: p,
24
- optionRenderer: E,
25
- menuNoItemsMessage: Y,
26
- container: o,
27
- createOption: a,
28
- virtualized: A,
29
- itemHeight: L = 40
30
- }) {
31
- const T = Array.isArray(c) ? c : [c], _ = l.some((e) => !!e.group);
32
- let h;
33
- const v = !!A && !_ && !p && l.length > 0, w = d || 240, { startIndex: j, endIndex: F, totalHeight: G, offsetY: H, onScroll: P } = z({
34
- itemCount: v ? l.length : 0,
35
- itemHeight: L,
36
- viewportHeight: w
37
- }), y = (e) => {
38
- var g;
39
- const r = [];
40
- return _ && e.group !== h && (h = e.group, r.push(
41
- /* @__PURE__ */ t("li", { className: "smwb-select-field__group-label", role: "presentation", children: e.group }, `group-${(g = e.group) != null ? g : "ungrouped"}`)
42
- )), r.push(
43
- /* @__PURE__ */ f(
44
- N,
1
+ import { jsx as o, jsxs as y, Fragment as H } from "react/jsx-runtime";
2
+ import C, { useRef as E, useState as L, useEffect as me } from "react";
3
+ import q from "clsx";
4
+ import { useVirtualList as fe } from "../../../hooks/useVirtualList.js";
5
+ import { useSafeLayoutEffect as z } from "../../../hooks/useSafeLayoutEffect.js";
6
+ import { useForkRef as J } from "../../../hooks/useForkRef.js";
7
+ import { ProgressIndicator as pe } from "../../feedBack/progressIndicator/progressIndicator.js";
8
+ import { Ripple as _e } from "../../base/ripple/ripple.js";
9
+ import { createPortal as he } from "react-dom";
10
+ import { Menu as be } from "../../navigation/menu/menu.js";
11
+ import { MenuDivider as we } from "../../navigation/menu/menuDivider.js";
12
+ import { TextFieldWrapper as ge } from "../textField/textFieldWrapper.js";
13
+ function A(c, m) {
14
+ return `${c}-option-${m}`;
15
+ }
16
+ function ve(c, m) {
17
+ for (let n = c.parentElement; n; n = n.parentElement) {
18
+ if (n.scrollHeight > n.clientHeight) {
19
+ const l = n.getBoundingClientRect(), r = c.getBoundingClientRect();
20
+ r.top < l.top ? n.scrollTop -= l.top - r.top : r.bottom > l.bottom && (n.scrollTop += r.bottom - l.bottom);
21
+ }
22
+ if (n === m)
23
+ break;
24
+ }
25
+ }
26
+ function K(c) {
27
+ const { children: m, className: n, disabled: l, selected: r, value: N, onClick: u, optionRenderer: p, ..._ } = c, i = E(null);
28
+ return /* @__PURE__ */ y(
29
+ "li",
30
+ {
31
+ ..._,
32
+ className: q("smwb-menu__item", n, {
33
+ "smwb-menu__item--disabled": l,
34
+ "smwb-menu__item--selected": r
35
+ }),
36
+ "data-value": N,
37
+ onClick: u,
38
+ onPointerDown: (f) => {
39
+ var h;
40
+ return (h = i.current) == null ? void 0 : h.onRipple(f);
41
+ },
42
+ children: [
43
+ /* @__PURE__ */ o("span", { className: "smwb-menu__item-inner", children: m }),
44
+ /* @__PURE__ */ o(_e, { actionRef: i })
45
+ ]
46
+ }
47
+ );
48
+ }
49
+ function ye(c) {
50
+ const { value: m, onChange: n, inputProps: l, inputRef: r } = c, [N, u] = L(!1), p = E(null), _ = J(r, p);
51
+ return /* @__PURE__ */ o(
52
+ ge,
53
+ {
54
+ className: "smwb-select-field__menu-search-input",
55
+ variant: "outlined",
56
+ fullWidth: !0,
57
+ isFilledState: !!m,
58
+ isFocused: N,
59
+ onHolderMouseDown: (i) => {
60
+ p.current && i.currentTarget === i.target && (i.preventDefault(), p.current.focus());
61
+ },
62
+ children: /* @__PURE__ */ o(
63
+ "input",
45
64
  {
46
- value: e.value,
47
- disabled: e.disabled,
48
- selected: !!T.find((u) => u === e.value),
49
- onClick: (u) => {
50
- e.disabled || D(u, e);
65
+ ...l,
66
+ ref: _,
67
+ type: "text",
68
+ className: "smwb-text-field__input smwb-text-field__input--show-placeholder",
69
+ placeholder: "Найти...",
70
+ autoComplete: "off",
71
+ value: m,
72
+ onChange: n,
73
+ onFocus: (i) => {
74
+ var f;
75
+ u(!0), (f = l == null ? void 0 : l.onFocus) == null || f.call(l, i);
51
76
  },
52
- optionRenderer: E,
53
- children: [
54
- e.text,
55
- e.helperText ? /* @__PURE__ */ t("span", { className: "smwb-select-field__option__helper-text", children: e.helperText }) : null
56
- ]
57
- },
58
- e.key || e.value
77
+ onBlur: (i) => {
78
+ var f;
79
+ u(!1), (f = l == null ? void 0 : l.onBlur) == null || f.call(l, i);
80
+ }
81
+ }
59
82
  )
60
- ), r;
61
- }, [V, $] = x.useState(), [b, I] = S();
62
- return B(() => {
63
- I(o != null ? o : document.body);
64
- }, [o]), q(() => {
65
- s && i.current && $(i.current.clientWidth);
66
- }, [i, s]), x.useEffect(() => {
67
- const e = (r) => {
68
- s && r.key === "Escape" && m();
83
+ }
84
+ );
85
+ }
86
+ function Ye({
87
+ menuMaxHeight: c,
88
+ menuMiddleware: m,
89
+ search: n,
90
+ onSearchInputChange: l,
91
+ items: r,
92
+ searchValue: N,
93
+ isOpen: u,
94
+ onClose: p,
95
+ anchorElementRef: _,
96
+ value: i,
97
+ onItemClick: f,
98
+ isLoading: h,
99
+ optionRenderer: F,
100
+ menuNoItemsMessage: Q,
101
+ container: k,
102
+ createOption: R,
103
+ virtualized: U,
104
+ itemHeight: g = 40,
105
+ listboxId: b,
106
+ labelledBy: X,
107
+ label: Z,
108
+ multiple: P,
109
+ activeIndex: v = -1,
110
+ showActive: M,
111
+ searchInputProps: I,
112
+ searchInputRef: O,
113
+ menuRef: ee
114
+ }) {
115
+ const te = Array.isArray(i) ? i : [i], Y = r.some((e) => !!e.group), le = r.length + (R ? 1 : 0), w = !!U && !Y && !h && r.length > 0, D = c || 240, { startIndex: x, endIndex: oe, totalHeight: re, offsetY: se, onScroll: $ } = fe({
116
+ itemCount: w ? r.length : 0,
117
+ itemHeight: g,
118
+ viewportHeight: D
119
+ }), G = E(null), ne = J(ee, G), S = E(null), V = (e, s, t, d) => ({
120
+ id: b ? A(b, e) : void 0,
121
+ role: "option",
122
+ "aria-selected": s,
123
+ "aria-disabled": t || void 0,
124
+ // With a virtual list only a window of the options exists.
125
+ "aria-setsize": w ? le : void 0,
126
+ "aria-posinset": w ? e + 1 : void 0,
127
+ // The virtual list places its rows at itemHeight: a row takes that height.
128
+ style: w && e < r.length ? { height: g } : void 0,
129
+ disabled: t,
130
+ selected: s,
131
+ ...d,
132
+ className: q(
133
+ "smwb-select-field__option",
134
+ d.className,
135
+ M && e === v && "smwb-select-field__option--active"
136
+ )
137
+ }), B = (e, s) => {
138
+ var a, T;
139
+ const t = V(
140
+ s,
141
+ te.some((W) => W === e.value),
142
+ e.disabled,
143
+ {
144
+ value: e.value,
145
+ onClick: (W) => {
146
+ e.disabled || f(W, e);
147
+ },
148
+ optionRenderer: F,
149
+ children: /* @__PURE__ */ y(H, { children: [
150
+ e.text,
151
+ e.helperText ? /* @__PURE__ */ o("span", { className: "smwb-select-field__option__helper-text", children: e.helperText }) : null
152
+ ] })
153
+ }
154
+ ), d = (T = (a = e.key) != null ? a : e.value) != null ? T : s;
155
+ return F ? /* @__PURE__ */ o(C.Fragment, { children: F(t) }, d) : /* @__PURE__ */ o(K, { ...t }, d);
156
+ }, ie = () => {
157
+ const e = [];
158
+ let s, t;
159
+ const d = () => {
160
+ if (t)
161
+ if (t.group === void 0)
162
+ t.start > 0 && e.push(/* @__PURE__ */ o("li", { className: "smwb-select-field__group-label", role: "presentation" }, `group-${t.start}`)), e.push(...t.options);
163
+ else {
164
+ const a = `${b}-group-${t.start}`;
165
+ e.push(
166
+ /* @__PURE__ */ y("li", { role: "group", "aria-labelledby": a, className: "smwb-select-field__group", children: [
167
+ /* @__PURE__ */ o("div", { id: a, className: "smwb-select-field__group-label", children: t.group }),
168
+ /* @__PURE__ */ o("ul", { role: "presentation", className: "smwb-select-field__group-options", children: t.options })
169
+ ] }, `group-${t.start}`)
170
+ );
171
+ }
172
+ };
173
+ return r.forEach((a, T) => {
174
+ (!t || a.group !== s) && (d(), s = a.group, t = { group: a.group, start: T, options: [] }), t.options.push(B(a, T));
175
+ }), d(), e;
176
+ }, [ae, ce] = C.useState(), [j, ue] = L();
177
+ if (z(() => {
178
+ ue(k != null ? k : document.body);
179
+ }, [k]), me(() => {
180
+ u && _.current && ce(_.current.clientWidth);
181
+ }, [_, u]), C.useEffect(() => {
182
+ const e = (s) => {
183
+ u && s.key === "Escape" && !s.defaultPrevented && p();
69
184
  };
70
185
  return document.addEventListener("keydown", e), () => {
71
186
  document.removeEventListener("keydown", e);
72
187
  };
73
- }, [s, m]), b ? Q(
74
- /* @__PURE__ */ f(
75
- R,
188
+ }, [u, p]), z(() => {
189
+ if (!u || !M || v < 0 || !b)
190
+ return;
191
+ const e = S.current;
192
+ if (w && e && v < r.length) {
193
+ const t = v * g, d = e.clientHeight || D, a = t < e.scrollTop ? t : t + g > e.scrollTop + d ? t + g - d : e.scrollTop;
194
+ a !== e.scrollTop && (e.scrollTop = a, $({ currentTarget: { scrollTop: a } }));
195
+ }
196
+ const s = document.getElementById(A(b, v));
197
+ s && ve(s, G.current);
198
+ }, [u, M, v, b, w, r.length, g, D, $]), !j)
199
+ return null;
200
+ const de = R ? /* @__PURE__ */ o(
201
+ K,
202
+ {
203
+ ...V(r.length, !1, !1, {
204
+ value: "__create__",
205
+ className: "smwb-select-field__create-option",
206
+ onClick: (e) => R.onCreate(e),
207
+ children: R.text
208
+ })
209
+ },
210
+ "__create__"
211
+ ) : null;
212
+ return he(
213
+ /* @__PURE__ */ y(
214
+ be,
76
215
  {
77
- isOpen: s,
78
- onClose: m,
79
- anchorElement: i.current,
80
- middleware: k,
216
+ ref: ne,
217
+ isOpen: u,
218
+ onClose: p,
219
+ anchorElement: _.current,
220
+ middleware: m,
81
221
  "data-smwb-overlay-layer": "",
222
+ listRole: "presentation",
223
+ tabIndex: -1,
224
+ onMouseDown: (e) => {
225
+ e.target instanceof HTMLInputElement || e.preventDefault();
226
+ },
82
227
  style: {
83
- minWidth: V,
84
- maxHeight: d || void 0,
85
- overflowY: d ? "auto" : void 0
228
+ minWidth: ae,
229
+ maxHeight: c || void 0,
230
+ overflowY: c ? "auto" : void 0
86
231
  },
87
232
  children: [
88
- M && /* @__PURE__ */ f(K, { children: [
89
- /* @__PURE__ */ t("li", { className: "smwb-select-field__menu-search", children: /* @__PURE__ */ t(
90
- U,
233
+ n && /* @__PURE__ */ y(H, { children: [
234
+ /* @__PURE__ */ o("li", { className: "smwb-select-field__menu-search", children: /* @__PURE__ */ o(
235
+ ye,
91
236
  {
92
- className: "smwb-select-field__menu-search-input",
93
- type: "text",
94
- placeholder: "Найти...",
95
- value: W,
96
- onChange: (e, r) => n == null ? void 0 : n(e, r.value),
97
- fullWidth: !0
237
+ value: N,
238
+ onChange: (e) => l == null ? void 0 : l(e, e.target.value),
239
+ inputProps: I,
240
+ inputRef: O
98
241
  }
99
242
  ) }),
100
- /* @__PURE__ */ t(X, {})
243
+ /* @__PURE__ */ o(we, {})
101
244
  ] }),
102
- p ? /* @__PURE__ */ t("div", { className: "smwb-select-field__menu-loading", children: /* @__PURE__ */ t(J, { type: "indeterminate", variant: "circular", className: "smwb-select-field__menu__loader" }) }) : v ? /* @__PURE__ */ t("li", { role: "presentation", className: "smwb-select-field__virtual-viewport", children: /* @__PURE__ */ t(
103
- "div",
245
+ h ? /* @__PURE__ */ o("li", { className: "smwb-select-field__menu-loading", children: /* @__PURE__ */ o(pe, { type: "indeterminate", variant: "circular", className: "smwb-select-field__menu__loader" }) }) : null,
246
+ /* @__PURE__ */ o("li", { children: /* @__PURE__ */ y(
247
+ "ul",
104
248
  {
105
- className: "smwb-select-field__virtual-scroller",
106
- style: { maxHeight: w, overflowY: "auto" },
107
- onScroll: P,
108
- children: /* @__PURE__ */ t("div", { style: { height: G, position: "relative" }, children: /* @__PURE__ */ t(
109
- "ul",
110
- {
111
- role: "presentation",
112
- className: "smwb-select-field__virtual-list",
113
- style: { transform: `translateY(${H}px)`, listStyle: "none", margin: 0, padding: 0 },
114
- children: l.slice(j, F).map((e) => y(e))
115
- }
116
- ) })
249
+ id: b,
250
+ role: "listbox",
251
+ className: "smwb-select-field__listbox",
252
+ "aria-labelledby": X,
253
+ "aria-label": Z,
254
+ "aria-multiselectable": P || void 0,
255
+ "aria-busy": h || void 0,
256
+ children: [
257
+ h ? null : w ? /* @__PURE__ */ o("li", { role: "presentation", className: "smwb-select-field__virtual-viewport", children: /* @__PURE__ */ o(
258
+ "div",
259
+ {
260
+ ref: S,
261
+ className: "smwb-select-field__virtual-scroller",
262
+ tabIndex: -1,
263
+ style: { maxHeight: D, overflowY: "auto" },
264
+ onScroll: $,
265
+ children: /* @__PURE__ */ o("div", { style: { height: re, position: "relative" }, children: /* @__PURE__ */ o(
266
+ "ul",
267
+ {
268
+ role: "presentation",
269
+ className: "smwb-select-field__virtual-list",
270
+ style: { transform: `translateY(${se}px)`, listStyle: "none", margin: 0, padding: 0 },
271
+ children: r.slice(x, oe).map((e, s) => B(e, x + s))
272
+ }
273
+ ) })
274
+ }
275
+ ) }) : Y ? ie() : r.map((e, s) => B(e, s)),
276
+ de
277
+ ]
117
278
  }
118
- ) }) : l.length ? l.map((e) => y(e)) : a ? null : /* @__PURE__ */ t("li", { className: "smwb-select-field__empty-items", children: Y || "Опций не найдено." }),
119
- a ? /* @__PURE__ */ t(
120
- N,
121
- {
122
- value: "__create__",
123
- onClick: (e) => a.onCreate(e),
124
- className: "smwb-select-field__create-option",
125
- children: a.text
126
- },
127
- "__create__"
128
- ) : null
279
+ ) }),
280
+ !h && !r.length && !R ? /* @__PURE__ */ o("li", { className: "smwb-select-field__empty-items", children: Q || "Опций не найдено." }) : null
129
281
  ]
130
282
  }
131
283
  ),
132
- b
133
- ) : null;
284
+ j
285
+ );
134
286
  }
135
287
  export {
136
- ae as DropdownMenu
288
+ Ye as DropdownMenu,
289
+ A as dropdownOptionId
137
290
  };
138
291
  //# sourceMappingURL=dropdownMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdownMenu.js","sources":["../../../../src/components/inputs/selectField/dropdownMenu.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useVirtualList } from \"../../../hooks/useVirtualList\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\nimport { Menu, MenuDivider, MenuItem, MenuItemProps } from \"../../navigation/menu\";\nimport { TextField } from \"../textField\";\nimport ProgressIndicator from \"../../feedBack/progressIndicator/progressIndicator\";\nimport { createPortal } from \"react-dom\";\nimport { MenuFloatingProps } from \"../../navigation/menu/menuFloating\";\n\nexport interface DropdownItem {\n key?: string | number;\n text: string;\n value: string | number | undefined | null;\n helperText?: string;\n /** Disables selection of this option. */\n disabled?: boolean;\n /** Optional group label; consecutive items sharing it get a group header. */\n group?: string;\n}\n\nexport interface DropdownItemProps<T extends HTMLElement = HTMLElement> {\n menuMaxHeight?: number;\n menuMiddleware?: MenuFloatingProps[\"middleware\"];\n menuNoItemsMessage?: React.ReactNode;\n search?: boolean;\n onSearchInputChange?: (event: React.ChangeEvent<HTMLInputElement>, value: string | number | undefined) => void;\n items: DropdownItem[];\n searchValue?: string | number;\n isOpen: boolean;\n onClose: () => void;\n anchorElementRef: React.RefObject<T>;\n value?: undefined | null | string | number | (undefined | null | string | number)[];\n onItemClick: (event: React.SyntheticEvent, item: DropdownItem) => void;\n isLoading?: boolean;\n optionRenderer?: (args: MenuItemProps) => React.ReactNode;\n container?: HTMLElement;\n /** Renders a trailing \"create\" affordance (used by `creatable` SelectField). */\n createOption?: { text: React.ReactNode; onCreate: (event: React.SyntheticEvent) => void };\n /** Windows the option list for large datasets (fixed row height). */\n virtualized?: boolean;\n /** Row height (px) used when `virtualized`. */\n itemHeight?: number;\n}\n\nexport function DropdownMenu<T extends HTMLElement>({\n menuMaxHeight,\n menuMiddleware,\n search,\n onSearchInputChange,\n items,\n searchValue,\n isOpen,\n onClose,\n anchorElementRef,\n value,\n onItemClick,\n isLoading,\n optionRenderer,\n menuNoItemsMessage,\n container,\n createOption,\n virtualized,\n itemHeight = 40,\n}: DropdownItemProps<T>) {\n const valueArray = Array.isArray(value) ? value : [value];\n const hasGroups = items.some((i) => !!i.group);\n let lastGroup: string | undefined;\n\n const useVirtual = !!virtualized && !hasGroups && !isLoading && items.length > 0;\n const viewportHeight = menuMaxHeight || 240;\n const { startIndex, endIndex, totalHeight, offsetY, onScroll } = useVirtualList({\n itemCount: useVirtual ? items.length : 0,\n itemHeight,\n viewportHeight,\n });\n\n const renderItem = (el: DropdownItem) => {\n const node: React.ReactNode[] = [];\n if (hasGroups && el.group !== lastGroup) {\n lastGroup = el.group;\n node.push(\n <li key={`group-${el.group ?? \"ungrouped\"}`} className=\"smwb-select-field__group-label\" role=\"presentation\">\n {el.group}\n </li>\n );\n }\n node.push(\n <MenuItem\n key={el.key || el.value}\n value={el.value}\n disabled={el.disabled}\n selected={!!valueArray.find((v) => v === el.value)}\n onClick={(e: React.SyntheticEvent) => {\n if (!el.disabled) {\n onItemClick(e, el);\n }\n }}\n optionRenderer={optionRenderer}\n >\n {el.text}\n {el.helperText ? <span className=\"smwb-select-field__option__helper-text\">{el.helperText}</span> : null}\n </MenuItem>\n );\n return node;\n };\n const [menuMinWidth, setMenuMinWidth] = React.useState<number>();\n // The menu is portalled: its target is resolved in the browser only. A server\n // render (no document) and the first client render emit nothing here, so the\n // select renders and hydrates on a server-rendered page.\n const [domRoot, setDomRoot] = useState<HTMLElement>();\n useSafeLayoutEffect(() => {\n setDomRoot(container ?? document.body);\n }, [container]);\n\n useEffect(() => {\n if (isOpen && anchorElementRef.current) {\n setMenuMinWidth(anchorElementRef.current.clientWidth);\n }\n }, [anchorElementRef, isOpen]);\n\n React.useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (isOpen && event.key === \"Escape\") {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen, onClose]);\n\n if (!domRoot) {\n return null;\n }\n\n return createPortal(\n <Menu\n isOpen={isOpen}\n onClose={onClose}\n anchorElement={anchorElementRef.current}\n middleware={menuMiddleware}\n data-smwb-overlay-layer=\"\"\n style={{\n minWidth: menuMinWidth,\n maxHeight: menuMaxHeight || undefined,\n overflowY: menuMaxHeight ? \"auto\" : undefined,\n }}\n >\n {search && (\n <>\n <li className=\"smwb-select-field__menu-search\">\n <TextField\n className=\"smwb-select-field__menu-search-input\"\n type=\"text\"\n placeholder=\"Найти...\"\n value={searchValue}\n onChange={(e, data) => onSearchInputChange?.(e, data.value)}\n fullWidth\n />\n </li>\n <MenuDivider />\n </>\n )}\n {isLoading ? (\n <div className=\"smwb-select-field__menu-loading\">\n <ProgressIndicator type=\"indeterminate\" variant=\"circular\" className=\"smwb-select-field__menu__loader\" />\n </div>\n ) : useVirtual ? (\n <li role=\"presentation\" className=\"smwb-select-field__virtual-viewport\">\n <div\n className=\"smwb-select-field__virtual-scroller\"\n style={{ maxHeight: viewportHeight, overflowY: \"auto\" }}\n onScroll={onScroll}\n >\n <div style={{ height: totalHeight, position: \"relative\" }}>\n <ul\n role=\"presentation\"\n className=\"smwb-select-field__virtual-list\"\n style={{ transform: `translateY(${offsetY}px)`, listStyle: \"none\", margin: 0, padding: 0 }}\n >\n {items.slice(startIndex, endIndex).map((el) => renderItem(el))}\n </ul>\n </div>\n </div>\n </li>\n ) : items.length ? (\n items.map((el) => renderItem(el))\n ) : !createOption ? (\n <li className=\"smwb-select-field__empty-items\">{menuNoItemsMessage || \"Опций не найдено.\"}</li>\n ) : null}\n {createOption ? (\n <MenuItem\n key=\"__create__\"\n value=\"__create__\"\n onClick={(e: React.SyntheticEvent) => createOption.onCreate(e)}\n className=\"smwb-select-field__create-option\"\n >\n {createOption.text}\n </MenuItem>\n ) : null}\n </Menu>,\n domRoot\n );\n}\n"],"names":["DropdownMenu","menuMaxHeight","menuMiddleware","search","onSearchInputChange","items","searchValue","isOpen","onClose","anchorElementRef","value","onItemClick","isLoading","optionRenderer","menuNoItemsMessage","container","createOption","virtualized","itemHeight","valueArray","hasGroups","i","lastGroup","useVirtual","viewportHeight","startIndex","endIndex","totalHeight","offsetY","onScroll","useVirtualList","renderItem","el","node","jsx","_a","jsxs","MenuItem","v","e","menuMinWidth","setMenuMinWidth","React","domRoot","setDomRoot","useState","useSafeLayoutEffect","useEffect","onKeyDown","event","createPortal","Menu","Fragment","TextField","data","MenuDivider","ProgressIndicator"],"mappings":"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"}
1
+ {"version":3,"file":"dropdownMenu.js","sources":["../../../../src/components/inputs/selectField/dropdownMenu.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport cn from \"clsx\";\nimport { useVirtualList } from \"../../../hooks/useVirtualList\";\nimport { useSafeLayoutEffect } from \"../../../hooks/useSafeLayoutEffect\";\nimport { useForkRef } from \"../../../hooks/useForkRef\";\nimport { Menu, MenuDivider, MenuItemProps } from \"../../navigation/menu\";\nimport { TextFieldWrapper } from \"../textField\";\nimport ProgressIndicator from \"../../feedBack/progressIndicator/progressIndicator\";\nimport { Ripple, RippleActionsRef } from \"../../base/ripple/ripple\";\nimport { createPortal } from \"react-dom\";\nimport { MenuFloatingProps } from \"../../navigation/menu/menuFloating\";\n\nexport interface DropdownItem {\n key?: string | number;\n text: string;\n value: string | number | undefined | null;\n helperText?: string;\n /** Disables selection of this option. */\n disabled?: boolean;\n /** Optional group label; consecutive items sharing it get a group header. */\n group?: string;\n}\n\nexport interface DropdownItemProps<T extends HTMLElement = HTMLElement> {\n menuMaxHeight?: number;\n menuMiddleware?: MenuFloatingProps[\"middleware\"];\n menuNoItemsMessage?: React.ReactNode;\n search?: boolean;\n onSearchInputChange?: (event: React.ChangeEvent<HTMLInputElement>, value: string | number | undefined) => void;\n items: DropdownItem[];\n searchValue?: string | number;\n isOpen: boolean;\n onClose: () => void;\n anchorElementRef: React.RefObject<T>;\n value?: undefined | null | string | number | (undefined | null | string | number)[];\n onItemClick: (event: React.SyntheticEvent, item: DropdownItem) => void;\n isLoading?: boolean;\n optionRenderer?: (args: MenuItemProps) => React.ReactNode;\n container?: HTMLElement;\n /** Renders a trailing \"create\" affordance (used by `creatable` SelectField). */\n createOption?: { text: React.ReactNode; onCreate: (event: React.SyntheticEvent) => void };\n /** Windows the option list for large datasets (fixed row height). */\n virtualized?: boolean;\n /** Row height (px) used when `virtualized`. */\n itemHeight?: number;\n /** Id of the listbox; the options' ids follow from it (`dropdownOptionId`). */\n listboxId?: string;\n /** Ids of the elements that name the listbox and the search box in the menu. */\n labelledBy?: string;\n /** Names the listbox and the search box in the menu when no element does. */\n label?: string;\n /** Several options can be selected (`aria-multiselectable`). */\n multiple?: boolean;\n /** Index of the active option, counting `items` and then the create option; -1 for none. */\n activeIndex?: number;\n /** Marks the active option and keeps it in view: the keyboard moved to it. */\n showActive?: boolean;\n /** Attributes and handlers of the search box in the menu, which the field makes a combobox. */\n searchInputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n searchInputRef?: React.Ref<HTMLInputElement>;\n /** The menu's root element. */\n menuRef?: React.Ref<HTMLDivElement>;\n}\n\n/** Id of the option at `index` in the listbox `listboxId`. */\nexport function dropdownOptionId(listboxId: string, index: number): string {\n return `${listboxId}-option-${index}`;\n}\n\n// Scrolls each scrolling box from the element up to `root` so the element shows.\nfunction keepInView(element: HTMLElement, root: HTMLElement | null) {\n for (let box = element.parentElement; box; box = box.parentElement) {\n if (box.scrollHeight > box.clientHeight) {\n const outer = box.getBoundingClientRect();\n const inner = element.getBoundingClientRect();\n if (inner.top < outer.top) {\n box.scrollTop -= outer.top - inner.top;\n } else if (inner.bottom > outer.bottom) {\n box.scrollTop += inner.bottom - outer.bottom;\n }\n }\n if (box === root) {\n break;\n }\n }\n}\n\n// An option of the listbox. It takes no focus: the field keeps it and points at\n// the active option with aria-activedescendant.\nfunction DropdownOption(props: MenuItemProps) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { children, className, disabled, selected, value, onClick, optionRenderer, ...rest } = props;\n const rippleRef = useRef<RippleActionsRef>(null);\n\n return (\n <li\n {...rest}\n className={cn(\"smwb-menu__item\", className, {\n \"smwb-menu__item--disabled\": disabled,\n \"smwb-menu__item--selected\": selected,\n })}\n data-value={value}\n onClick={onClick}\n onPointerDown={(event) => rippleRef.current?.onRipple(event)}\n >\n <span className=\"smwb-menu__item-inner\">{children}</span>\n <Ripple actionRef={rippleRef} />\n </li>\n );\n}\n\n// The search box at the top of the menu: drawn as a TextField, with the input\n// in the field's hands (TextField puts ARIA attributes on its wrapper).\nfunction MenuSearchInput(props: {\n value?: string | number;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n inputRef?: React.Ref<HTMLInputElement>;\n}) {\n const { value, onChange, inputProps, inputRef } = props;\n const [isFocused, setIsFocused] = useState(false);\n const ownRef = useRef<HTMLInputElement>(null);\n const ref = useForkRef<HTMLInputElement>(inputRef, ownRef);\n\n return (\n <TextFieldWrapper\n className=\"smwb-select-field__menu-search-input\"\n variant=\"outlined\"\n fullWidth\n isFilledState={Boolean(value)}\n isFocused={isFocused}\n onHolderMouseDown={(event) => {\n if (ownRef.current && event.currentTarget === event.target) {\n event.preventDefault();\n ownRef.current.focus();\n }\n }}\n >\n <input\n {...inputProps}\n ref={ref}\n type=\"text\"\n className=\"smwb-text-field__input smwb-text-field__input--show-placeholder\"\n placeholder=\"Найти...\"\n autoComplete=\"off\"\n value={value}\n onChange={onChange}\n onFocus={(event) => {\n setIsFocused(true);\n inputProps?.onFocus?.(event);\n }}\n onBlur={(event) => {\n setIsFocused(false);\n inputProps?.onBlur?.(event);\n }}\n />\n </TextFieldWrapper>\n );\n}\n\nexport function DropdownMenu<T extends HTMLElement>({\n menuMaxHeight,\n menuMiddleware,\n search,\n onSearchInputChange,\n items,\n searchValue,\n isOpen,\n onClose,\n anchorElementRef,\n value,\n onItemClick,\n isLoading,\n optionRenderer,\n menuNoItemsMessage,\n container,\n createOption,\n virtualized,\n itemHeight = 40,\n listboxId,\n labelledBy,\n label,\n multiple,\n activeIndex = -1,\n showActive,\n searchInputProps,\n searchInputRef,\n menuRef,\n}: DropdownItemProps<T>) {\n const valueArray = Array.isArray(value) ? value : [value];\n const hasGroups = items.some((i) => !!i.group);\n const optionCount = items.length + (createOption ? 1 : 0);\n\n const useVirtual = !!virtualized && !hasGroups && !isLoading && items.length > 0;\n const viewportHeight = menuMaxHeight || 240;\n const { startIndex, endIndex, totalHeight, offsetY, onScroll } = useVirtualList({\n itemCount: useVirtual ? items.length : 0,\n itemHeight,\n viewportHeight,\n });\n const menuElementRef = useRef<HTMLDivElement>(null);\n const forkedMenuRef = useForkRef<HTMLDivElement>(menuRef, menuElementRef);\n const scrollerRef = useRef<HTMLDivElement>(null);\n\n // Props of the option at `index`, as an optionRenderer gets them too: its\n // element needs the id, role and ARIA state for the field to point at it.\n const optionProps = (\n index: number,\n selected: boolean,\n disabled: boolean | undefined,\n extra: MenuItemProps\n ): MenuItemProps => ({\n id: listboxId ? dropdownOptionId(listboxId, index) : undefined,\n role: \"option\",\n \"aria-selected\": selected,\n \"aria-disabled\": disabled || undefined,\n // With a virtual list only a window of the options exists.\n \"aria-setsize\": useVirtual ? optionCount : undefined,\n \"aria-posinset\": useVirtual ? index + 1 : undefined,\n // The virtual list places its rows at itemHeight: a row takes that height.\n style: useVirtual && index < items.length ? { height: itemHeight } : undefined,\n disabled,\n selected,\n ...extra,\n className: cn(\n \"smwb-select-field__option\",\n extra.className,\n showActive && index === activeIndex && \"smwb-select-field__option--active\"\n ),\n });\n\n const renderItem = (el: DropdownItem, index: number) => {\n const props = optionProps(\n index,\n valueArray.some((v) => v === el.value),\n el.disabled,\n {\n value: el.value,\n onClick: (e: React.SyntheticEvent) => {\n if (!el.disabled) {\n onItemClick(e, el);\n }\n },\n optionRenderer,\n children: (\n <>\n {el.text}\n {el.helperText ? <span className=\"smwb-select-field__option__helper-text\">{el.helperText}</span> : null}\n </>\n ),\n }\n );\n const key = el.key ?? el.value ?? index;\n\n return optionRenderer ? (\n <React.Fragment key={key}>{optionRenderer(props)}</React.Fragment>\n ) : (\n <DropdownOption key={key} {...props} />\n );\n };\n\n // Consecutive items of one group sit in a `group` named by its header. Items\n // without a group before the first one stay loose; after a group, they get an\n // empty header, as they always did.\n const renderGroups = () => {\n const nodes: React.ReactNode[] = [];\n let lastGroup: string | undefined;\n let run: { group?: string; start: number; options: React.ReactNode[] } | undefined;\n const flush = () => {\n if (!run) {\n return;\n }\n if (run.group === undefined) {\n if (run.start > 0) {\n nodes.push(<li key={`group-${run.start}`} className=\"smwb-select-field__group-label\" role=\"presentation\" />);\n }\n nodes.push(...run.options);\n } else {\n const labelId = `${listboxId}-group-${run.start}`;\n nodes.push(\n <li key={`group-${run.start}`} role=\"group\" aria-labelledby={labelId} className=\"smwb-select-field__group\">\n <div id={labelId} className=\"smwb-select-field__group-label\">\n {run.group}\n </div>\n <ul role=\"presentation\" className=\"smwb-select-field__group-options\">\n {run.options}\n </ul>\n </li>\n );\n }\n };\n items.forEach((el, index) => {\n if (!run || el.group !== lastGroup) {\n flush();\n lastGroup = el.group;\n run = { group: el.group, start: index, options: [] };\n }\n run.options.push(renderItem(el, index));\n });\n flush();\n return nodes;\n };\n\n const [menuMinWidth, setMenuMinWidth] = React.useState<number>();\n // The menu is portalled: its target is resolved in the browser only. A server\n // render (no document) and the first client render emit nothing here, so the\n // select renders and hydrates on a server-rendered page.\n const [domRoot, setDomRoot] = useState<HTMLElement>();\n useSafeLayoutEffect(() => {\n setDomRoot(container ?? document.body);\n }, [container]);\n\n useEffect(() => {\n if (isOpen && anchorElementRef.current) {\n setMenuMinWidth(anchorElementRef.current.clientWidth);\n }\n }, [anchorElementRef, isOpen]);\n\n // An Escape the field did not take (the focus is elsewhere) still closes the menu.\n React.useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (isOpen && event.key === \"Escape\" && !event.defaultPrevented) {\n onClose();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isOpen, onClose]);\n\n // The keyboard's active option stays in view. In a virtual list it may not\n // exist yet: scroll the window to it first.\n useSafeLayoutEffect(() => {\n if (!isOpen || !showActive || activeIndex < 0 || !listboxId) {\n return;\n }\n const scroller = scrollerRef.current;\n if (useVirtual && scroller && activeIndex < items.length) {\n const top = activeIndex * itemHeight;\n const height = scroller.clientHeight || viewportHeight;\n const scrollTop =\n top < scroller.scrollTop\n ? top\n : top + itemHeight > scroller.scrollTop + height\n ? top + itemHeight - height\n : scroller.scrollTop;\n if (scrollTop !== scroller.scrollTop) {\n scroller.scrollTop = scrollTop;\n onScroll({ currentTarget: { scrollTop } });\n }\n }\n const option = document.getElementById(dropdownOptionId(listboxId, activeIndex));\n if (option) {\n keepInView(option, menuElementRef.current);\n }\n }, [isOpen, showActive, activeIndex, listboxId, useVirtual, items.length, itemHeight, viewportHeight, onScroll]);\n\n if (!domRoot) {\n return null;\n }\n\n const createNode = createOption ? (\n <DropdownOption\n key=\"__create__\"\n {...optionProps(items.length, false, false, {\n value: \"__create__\",\n className: \"smwb-select-field__create-option\",\n onClick: (e: React.SyntheticEvent) => createOption.onCreate(e),\n children: createOption.text,\n })}\n />\n ) : null;\n\n return createPortal(\n <Menu\n ref={forkedMenuRef}\n isOpen={isOpen}\n onClose={onClose}\n anchorElement={anchorElementRef.current}\n middleware={menuMiddleware}\n data-smwb-overlay-layer=\"\"\n // The menu is a surface: the options are a listbox of their own inside,\n // with the search box and the messages beside it.\n listRole=\"presentation\"\n // A menu that scrolls, with nothing in it that takes the focus, would be a\n // tab stop of its own (browsers make such scrollers one): Tab from the field\n // would land in the closing menu and drop to the page.\n tabIndex={-1}\n // The field keeps the focus while the menu is used with the pointer; only\n // the search box in the menu takes it.\n onMouseDown={(event) => {\n if (!(event.target instanceof HTMLInputElement)) {\n event.preventDefault();\n }\n }}\n style={{\n minWidth: menuMinWidth,\n maxHeight: menuMaxHeight || undefined,\n overflowY: menuMaxHeight ? \"auto\" : undefined,\n }}\n >\n {search && (\n <>\n <li className=\"smwb-select-field__menu-search\">\n <MenuSearchInput\n value={searchValue}\n onChange={(e) => onSearchInputChange?.(e, e.target.value)}\n inputProps={searchInputProps}\n inputRef={searchInputRef}\n />\n </li>\n <MenuDivider />\n </>\n )}\n {isLoading ? (\n <li className=\"smwb-select-field__menu-loading\">\n <ProgressIndicator type=\"indeterminate\" variant=\"circular\" className=\"smwb-select-field__menu__loader\" />\n </li>\n ) : null}\n <li>\n <ul\n id={listboxId}\n role=\"listbox\"\n className=\"smwb-select-field__listbox\"\n aria-labelledby={labelledBy}\n aria-label={label}\n aria-multiselectable={multiple || undefined}\n aria-busy={isLoading || undefined}\n >\n {isLoading ? null : useVirtual ? (\n <li role=\"presentation\" className=\"smwb-select-field__virtual-viewport\">\n <div\n ref={scrollerRef}\n className=\"smwb-select-field__virtual-scroller\"\n tabIndex={-1}\n style={{ maxHeight: viewportHeight, overflowY: \"auto\" }}\n onScroll={onScroll}\n >\n <div style={{ height: totalHeight, position: \"relative\" }}>\n <ul\n role=\"presentation\"\n className=\"smwb-select-field__virtual-list\"\n style={{ transform: `translateY(${offsetY}px)`, listStyle: \"none\", margin: 0, padding: 0 }}\n >\n {items.slice(startIndex, endIndex).map((el, i) => renderItem(el, startIndex + i))}\n </ul>\n </div>\n </div>\n </li>\n ) : hasGroups ? (\n renderGroups()\n ) : (\n items.map((el, index) => renderItem(el, index))\n )}\n {createNode}\n </ul>\n </li>\n {!isLoading && !items.length && !createOption ? (\n <li className=\"smwb-select-field__empty-items\">{menuNoItemsMessage || \"Опций не найдено.\"}</li>\n ) : null}\n </Menu>,\n domRoot\n );\n}\n"],"names":["dropdownOptionId","listboxId","index","keepInView","element","root","box","outer","inner","DropdownOption","props","children","className","disabled","selected","value","onClick","optionRenderer","rest","rippleRef","useRef","jsxs","cn","event","_a","jsx","Ripple","MenuSearchInput","onChange","inputProps","inputRef","isFocused","setIsFocused","useState","ownRef","ref","useForkRef","TextFieldWrapper","DropdownMenu","menuMaxHeight","menuMiddleware","search","onSearchInputChange","items","searchValue","isOpen","onClose","anchorElementRef","onItemClick","isLoading","menuNoItemsMessage","container","createOption","virtualized","itemHeight","labelledBy","label","multiple","activeIndex","showActive","searchInputProps","searchInputRef","menuRef","valueArray","hasGroups","i","optionCount","useVirtual","viewportHeight","startIndex","endIndex","totalHeight","offsetY","onScroll","useVirtualList","menuElementRef","forkedMenuRef","scrollerRef","optionProps","extra","renderItem","el","v","e","Fragment","key","_b","React","renderGroups","nodes","lastGroup","run","flush","labelId","menuMinWidth","setMenuMinWidth","domRoot","setDomRoot","useSafeLayoutEffect","useEffect","onKeyDown","scroller","top","height","scrollTop","option","createNode","createPortal","Menu","MenuDivider","ProgressIndicator"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type IsOptionEnabled = (index: number) => boolean;
2
+ /** The first enabled option, or -1. */
3
+ export declare function firstOption(count: number, isEnabled: IsOptionEnabled): number;
4
+ /** The last enabled option, or -1. */
5
+ export declare function lastOption(count: number, isEnabled: IsOptionEnabled): number;
6
+ /**
7
+ * The enabled option `steps` options after `from` (before it for a negative
8
+ * count), stopping at the first or the last one. With no active option, a move
9
+ * down starts at the first option and a move up at the last.
10
+ */
11
+ export declare function moveOption(count: number, isEnabled: IsOptionEnabled, from: number, steps: number): number;
12
+ /**
13
+ * Type-ahead: the next enabled option whose text starts with what was typed.
14
+ * One character typed again and again ("ttt") steps through the options that
15
+ * start with it; a longer string keeps the current option while it matches.
16
+ */
17
+ export declare function matchOption(texts: string[], isEnabled: IsOptionEnabled, typed: string, from: number): number;
@@ -0,0 +1,38 @@
1
+ function h(r, e) {
2
+ for (let t = 0; t < r; t++)
3
+ if (e(t))
4
+ return t;
5
+ return -1;
6
+ }
7
+ function s(r, e) {
8
+ for (let t = r - 1; t >= 0; t--)
9
+ if (e(t))
10
+ return t;
11
+ return -1;
12
+ }
13
+ function p(r, e, t, i) {
14
+ if (t < 0)
15
+ return i > 0 ? h(r, e) : s(r, e);
16
+ const n = i > 0 ? 1 : -1;
17
+ let f = t, c = Math.abs(i);
18
+ for (let o = t + n; o >= 0 && o < r && c > 0; o += n)
19
+ e(o) && (f = o, c--);
20
+ return f;
21
+ }
22
+ function x(r, e, t, i) {
23
+ var l;
24
+ const n = t.toLowerCase(), f = Array.from(n).every((a) => a === n.charAt(0)), c = f ? n.charAt(0) : n, o = f ? i + 1 : Math.max(i, 0);
25
+ for (let a = 0; a < r.length; a++) {
26
+ const u = (o + a) % r.length;
27
+ if (e(u) && ((l = r[u]) != null && l.toLowerCase().startsWith(c)))
28
+ return u;
29
+ }
30
+ return -1;
31
+ }
32
+ export {
33
+ h as firstOption,
34
+ s as lastOption,
35
+ x as matchOption,
36
+ p as moveOption
37
+ };
38
+ //# sourceMappingURL=optionNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionNavigation.js","sources":["../../../../src/components/inputs/selectField/optionNavigation.ts"],"sourcesContent":["// Moves of the active option over a select's options, by index in the order\n// they are drawn. A disabled option is passed over, as in a native select.\n\nexport type IsOptionEnabled = (index: number) => boolean;\n\n/** The first enabled option, or -1. */\nexport function firstOption(count: number, isEnabled: IsOptionEnabled): number {\n for (let index = 0; index < count; index++) {\n if (isEnabled(index)) {\n return index;\n }\n }\n return -1;\n}\n\n/** The last enabled option, or -1. */\nexport function lastOption(count: number, isEnabled: IsOptionEnabled): number {\n for (let index = count - 1; index >= 0; index--) {\n if (isEnabled(index)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The enabled option `steps` options after `from` (before it for a negative\n * count), stopping at the first or the last one. With no active option, a move\n * down starts at the first option and a move up at the last.\n */\nexport function moveOption(count: number, isEnabled: IsOptionEnabled, from: number, steps: number): number {\n if (from < 0) {\n return steps > 0 ? firstOption(count, isEnabled) : lastOption(count, isEnabled);\n }\n const direction = steps > 0 ? 1 : -1;\n let result = from;\n let left = Math.abs(steps);\n for (let index = from + direction; index >= 0 && index < count && left > 0; index += direction) {\n if (isEnabled(index)) {\n result = index;\n left--;\n }\n }\n return result;\n}\n\n/**\n * Type-ahead: the next enabled option whose text starts with what was typed.\n * One character typed again and again (\"ttt\") steps through the options that\n * start with it; a longer string keeps the current option while it matches.\n */\nexport function matchOption(texts: string[], isEnabled: IsOptionEnabled, typed: string, from: number): number {\n const query = typed.toLowerCase();\n const repeated = Array.from(query).every((char) => char === query.charAt(0));\n const prefix = repeated ? query.charAt(0) : query;\n const start = repeated ? from + 1 : Math.max(from, 0);\n for (let step = 0; step < texts.length; step++) {\n const index = (start + step) % texts.length;\n if (isEnabled(index) && texts[index]?.toLowerCase().startsWith(prefix)) {\n return index;\n }\n }\n return -1;\n}\n"],"names":["firstOption","count","isEnabled","index","lastOption","moveOption","from","steps","direction","result","left","matchOption","texts","typed","_a","query","repeated","char","prefix","start","step"],"mappings":"AAMO,SAASA,EAAYC,GAAeC,GAAoC;AAC7E,WAASC,IAAQ,GAAGA,IAAQF,GAAOE;AACjC,QAAID,EAAUC,CAAK;AACjB,aAAOA;AAGX,SAAO;AACT;AAGO,SAASC,EAAWH,GAAeC,GAAoC;AAC5E,WAASC,IAAQF,IAAQ,GAAGE,KAAS,GAAGA;AACtC,QAAID,EAAUC,CAAK;AACjB,aAAOA;AAGX,SAAO;AACT;AAOO,SAASE,EAAWJ,GAAeC,GAA4BI,GAAcC,GAAuB;AACzG,MAAID,IAAO;AACT,WAAOC,IAAQ,IAAIP,EAAYC,GAAOC,CAAS,IAAIE,EAAWH,GAAOC,CAAS;AAEhF,QAAMM,IAAYD,IAAQ,IAAI,IAAI;AAClC,MAAIE,IAASH,GACTI,IAAO,KAAK,IAAIH,CAAK;AACzB,WAASJ,IAAQG,IAAOE,GAAWL,KAAS,KAAKA,IAAQF,KAASS,IAAO,GAAGP,KAASK;AACnF,IAAIN,EAAUC,CAAK,MACjBM,IAASN,GACTO;AAGJ,SAAOD;AACT;AAOO,SAASE,EAAYC,GAAiBV,GAA4BW,GAAeP,GAAsB;AA7CvG,MAAAQ;AA8CL,QAAMC,IAAQF,EAAM,YAAA,GACdG,IAAW,MAAM,KAAKD,CAAK,EAAE,MAAM,CAACE,MAASA,MAASF,EAAM,OAAO,CAAC,CAAC,GACrEG,IAASF,IAAWD,EAAM,OAAO,CAAC,IAAIA,GACtCI,IAAQH,IAAWV,IAAO,IAAI,KAAK,IAAIA,GAAM,CAAC;AACpD,WAASc,IAAO,GAAGA,IAAOR,EAAM,QAAQQ,KAAQ;AAC9C,UAAMjB,KAASgB,IAAQC,KAAQR,EAAM;AACrC,QAAIV,EAAUC,CAAK,OAAKW,IAAAF,EAAMT,CAAK,MAAX,QAAAW,EAAc,cAAc,WAAWI;AAC7D,aAAOf;AAAA,EAEX;AACA,SAAO;AACT;"}
@@ -5,6 +5,13 @@ import { MenuItemProps } from "../../navigation/menu";
5
5
  export type OnSelectChange = (e: SyntheticEvent, data: SelectFieldProps) => void;
6
6
  export interface SelectFieldProps {
7
7
  className?: string;
8
+ /**
9
+ * The selected value, or the values of a `multiple` field. Any value but
10
+ * `undefined` makes the field controlled: it shows this value and nothing
11
+ * else, and a pick, a chip delete or a clear only asks for a change through
12
+ * `onChange`. `null` means nothing is selected. While `value` is `undefined`,
13
+ * the field keeps its own value, starting from `defaultValue`.
14
+ */
8
15
  value?: null | string | number | (string | number | undefined | null)[];
9
16
  defaultValue?: null | string | number | (string | number)[];
10
17
  onChange?: OnSelectChange;
@@ -16,11 +23,21 @@ export interface SelectFieldProps {
16
23
  menuMiddleware?: DropdownItemProps["menuMiddleware"];
17
24
  menuNoItemsMessage?: React.ReactNode;
18
25
  menuContainer?: HTMLElement;
26
+ /**
27
+ * A search box for the options: `true` puts it in the field, where it takes
28
+ * the focus and is the combobox; `"menu"` puts it at the top of the menu,
29
+ * which moves the focus into it when it opens.
30
+ */
19
31
  search?: true | false | "menu";
20
32
  chips?: boolean;
21
33
  isFocused?: boolean;
22
34
  error?: boolean;
23
35
  items: DropdownItem[];
36
+ /**
37
+ * Visible label, drawn above the field (an `inline` field draws none). It
38
+ * names the combobox, whose value is the selected text: "Country", "Russia".
39
+ * With `chips` the chips' texts follow it in the name: "Labels Backend Docs".
40
+ */
24
41
  label?: string;
25
42
  variant?: "outlined" | "filled";
26
43
  /** Height of the field, as for TextField: `small` (40px, for toolbars), `medium` (default) or `large`. */
@@ -33,6 +50,12 @@ export interface SelectFieldProps {
33
50
  inline?: boolean;
34
51
  endAdornment?: React.ReactNode;
35
52
  hideSelectArrowIcon?: boolean;
53
+ /**
54
+ * Draws an option in place of the default one. It gets the option's props
55
+ * and returns its `<li>`: pass `id`, `role`, `aria-selected`, `aria-disabled`,
56
+ * `className` and `onClick` on to it, so the option can be reached from the
57
+ * keyboard, read out and picked.
58
+ */
36
59
  optionRenderer?: (args: MenuItemProps) => React.ReactNode;
37
60
  /** Shows a clear button to reset the selection. */
38
61
  clearable?: boolean;
@@ -44,8 +67,15 @@ export interface SelectFieldProps {
44
67
  virtualized?: boolean;
45
68
  /** Row height (px) used when `virtualized`. */
46
69
  itemHeight?: number;
47
- /** Accessible label for the combobox control. */
70
+ /**
71
+ * Accessible name of the combobox. Replaces the name the visible `label`
72
+ * gives it; a field without a drawn label needs it.
73
+ */
48
74
  "aria-label"?: string;
75
+ /**
76
+ * Id of the control, the part of the field that holds the selected text. It is
77
+ * the combobox, unless `search` puts a search box in it: then the box is.
78
+ */
49
79
  id?: string;
50
80
  }
51
81
  export declare const SelectField: React.ForwardRefExoticComponent<SelectFieldProps & React.RefAttributes<HTMLSpanElement>>;