@rio-cloud/rio-uikit 2.1.0 → 2.2.1

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 (446) hide show
  1. package/CircularProgress.d.ts +2 -0
  2. package/CircularProgress.js +5 -0
  3. package/CircularProgress.js.map +1 -0
  4. package/RadioCardGroup.d.ts +2 -0
  5. package/RadioCardGroup.js +7 -0
  6. package/RadioCardGroup.js.map +1 -0
  7. package/SearchHighlightText.d.ts +2 -0
  8. package/SearchHighlightText.js +5 -0
  9. package/SearchHighlightText.js.map +1 -0
  10. package/TextTruncateMiddle.d.ts +2 -0
  11. package/TextTruncateMiddle.js +5 -0
  12. package/TextTruncateMiddle.js.map +1 -0
  13. package/Tracker.d.ts +2 -0
  14. package/Tracker.js +5 -0
  15. package/Tracker.js.map +1 -0
  16. package/classNames.d.ts +2 -0
  17. package/classNames.js +5 -0
  18. package/classNames.js.map +1 -0
  19. package/components/accentBar/AccentBar.js +1 -1
  20. package/components/accentBar/AccentBar.js.map +1 -1
  21. package/components/actionBarItem/ActionBarItem.js +7 -7
  22. package/components/actionBarItem/ActionBarItem.js.map +1 -1
  23. package/components/actionBarItem/ActionBarItemIcon.js +1 -1
  24. package/components/actionBarItem/ActionBarItemIcon.js.map +1 -1
  25. package/components/actionBarItem/ActionBarItemList.js +1 -1
  26. package/components/actionBarItem/ActionBarItemList.js.map +1 -1
  27. package/components/actionBarItem/ActionBarItemListItem.js +1 -1
  28. package/components/actionBarItem/ActionBarItemListItem.js.map +1 -1
  29. package/components/actionBarItem/ActionBarItemListSeparator.js +1 -1
  30. package/components/actionBarItem/ActionBarItemListSeparator.js.map +1 -1
  31. package/components/actionBarItem/ActionBarItemPopoverContent.js +3 -3
  32. package/components/actionBarItem/ActionBarItemPopoverContent.js.map +1 -1
  33. package/components/actionBarItem/ActionBarOverlay.js +1 -1
  34. package/components/actionBarItem/ActionBarOverlay.js.map +1 -1
  35. package/components/activity/Activity.js +1 -1
  36. package/components/activity/Activity.js.map +1 -1
  37. package/components/animatedTextReveal/AnimatedTextReveal.js +1 -1
  38. package/components/animatedTextReveal/AnimatedTextReveal.js.map +1 -1
  39. package/components/applicationHeader/AppMenu.js +2 -2
  40. package/components/applicationHeader/AppMenu.js.map +1 -1
  41. package/components/applicationHeader/AppMenuDropdown.js +13 -11
  42. package/components/applicationHeader/AppMenuDropdown.js.map +1 -1
  43. package/components/applicationHeader/ApplicationHeader.js +1 -1
  44. package/components/applicationHeader/ApplicationHeader.js.map +1 -1
  45. package/components/applicationHeader/MobileHeaderModal.js +8 -8
  46. package/components/applicationHeader/MobileHeaderModal.js.map +1 -1
  47. package/components/applicationHeader/MobileSubmoduleNavigation.js +1 -1
  48. package/components/applicationHeader/MobileSubmoduleNavigation.js.map +1 -1
  49. package/components/applicationHeader/NavItems.js +4 -4
  50. package/components/applicationHeader/NavItems.js.map +1 -1
  51. package/components/applicationLayout/ApplicationLayout.js +10 -10
  52. package/components/applicationLayout/ApplicationLayout.js.map +1 -1
  53. package/components/applicationLayout/ApplicationLayoutBody.js +2 -2
  54. package/components/applicationLayout/ApplicationLayoutBody.js.map +1 -1
  55. package/components/applicationLayout/ApplicationLayoutBodyBanner.js +1 -1
  56. package/components/applicationLayout/ApplicationLayoutBodyBanner.js.map +1 -1
  57. package/components/applicationLayout/ApplicationLayoutBodyBottomBar.js +1 -1
  58. package/components/applicationLayout/ApplicationLayoutBodyBottomBar.js.map +1 -1
  59. package/components/applicationLayout/ApplicationLayoutBodyNavigation.js +1 -1
  60. package/components/applicationLayout/ApplicationLayoutBodyNavigation.js.map +1 -1
  61. package/components/applicationLayout/ApplicationLayoutHeader.js +1 -1
  62. package/components/applicationLayout/ApplicationLayoutHeader.js.map +1 -1
  63. package/components/applicationLayout/ApplicationLayoutSidebar.js +1 -1
  64. package/components/applicationLayout/ApplicationLayoutSidebar.js.map +1 -1
  65. package/components/applicationLayout/SubNavigation.js +1 -1
  66. package/components/applicationLayout/SubNavigation.js.map +1 -1
  67. package/components/assetTree/AssetTree.js +1 -1
  68. package/components/assetTree/AssetTree.js.map +1 -1
  69. package/components/assetTree/Tree.js +1 -1
  70. package/components/assetTree/Tree.js.map +1 -1
  71. package/components/assetTree/TreeIcon.js +3 -3
  72. package/components/assetTree/TreeIcon.js.map +1 -1
  73. package/components/assetTree/TreeLeaf.js +4 -4
  74. package/components/assetTree/TreeLeaf.js.map +1 -1
  75. package/components/assetTree/TreeNode.js +1 -1
  76. package/components/assetTree/TreeNode.js.map +1 -1
  77. package/components/assetTree/TreeNodeContainer.js +1 -1
  78. package/components/assetTree/TreeNodeContainer.js.map +1 -1
  79. package/components/assetTree/TreeOption.js +3 -3
  80. package/components/assetTree/TreeOption.js.map +1 -1
  81. package/components/assetTree/TreeOptions.js +4 -4
  82. package/components/assetTree/TreeOptions.js.map +1 -1
  83. package/components/assetTree/TreeRoot.js +3 -3
  84. package/components/assetTree/TreeRoot.js.map +1 -1
  85. package/components/assetTree/TreeSearch.js +3 -3
  86. package/components/assetTree/TreeSearch.js.map +1 -1
  87. package/components/assetTree/TreeSidebar.js +1 -1
  88. package/components/assetTree/TreeSidebar.js.map +1 -1
  89. package/components/assetTree/TreeSidebarCategories.js +4 -4
  90. package/components/assetTree/TreeSidebarCategories.js.map +1 -1
  91. package/components/assetTree/TreeSummary.js +1 -1
  92. package/components/assetTree/TreeSummary.js.map +1 -1
  93. package/components/assetTree/TypeCounter.js +1 -1
  94. package/components/assetTree/TypeCounter.js.map +1 -1
  95. package/components/autosuggest/AutoSuggest.js +1 -1
  96. package/components/autosuggest/AutoSuggest.js.map +1 -1
  97. package/components/avatar/Avatar.js +1 -1
  98. package/components/avatar/Avatar.js.map +1 -1
  99. package/components/banner/Banner.js +1 -1
  100. package/components/banner/Banner.js.map +1 -1
  101. package/components/banner/BannerContent.js +1 -1
  102. package/components/banner/BannerContent.js.map +1 -1
  103. package/components/barList/BarList.js +1 -1
  104. package/components/barList/BarList.js.map +1 -1
  105. package/components/bottomSheet/BottomSheet.js +1 -1
  106. package/components/bottomSheet/BottomSheet.js.map +1 -1
  107. package/components/button/Button.d.ts +53 -7
  108. package/components/button/Button.js +87 -64
  109. package/components/button/Button.js.map +1 -1
  110. package/components/button/ButtonToolbar.js +1 -1
  111. package/components/button/ButtonToolbar.js.map +1 -1
  112. package/components/button/ToggleButton.d.ts +4 -1
  113. package/components/button/ToggleButton.js.map +1 -1
  114. package/components/calendarStripe/CalendarStripe.js +16 -16
  115. package/components/calendarStripe/CalendarStripe.js.map +1 -1
  116. package/components/card/Card.js +1 -1
  117. package/components/card/Card.js.map +1 -1
  118. package/components/charts/RadialBarChart.js +106 -103
  119. package/components/charts/RadialBarChart.js.map +1 -1
  120. package/components/checkbox/Checkbox.js +6 -6
  121. package/components/checkbox/Checkbox.js.map +1 -1
  122. package/components/circularProgress/CircularProgress.d.ts +139 -0
  123. package/components/circularProgress/CircularProgress.js +197 -0
  124. package/components/circularProgress/CircularProgress.js.map +1 -0
  125. package/components/clearableInput/ClearableInput.js +9 -9
  126. package/components/clearableInput/ClearableInput.js.map +1 -1
  127. package/components/dataTabs/DataTabHeader.js +1 -1
  128. package/components/dataTabs/DataTabHeader.js.map +1 -1
  129. package/components/dataTabs/DataTabs.js +4 -4
  130. package/components/dataTabs/DataTabs.js.map +1 -1
  131. package/components/datepicker/DatePicker.js +6 -6
  132. package/components/datepicker/DatePicker.js.map +1 -1
  133. package/components/datepicker/DateRangePicker.js +1 -1
  134. package/components/datepicker/DateRangePicker.js.map +1 -1
  135. package/components/datepicker/DayPicker.js +1 -1
  136. package/components/datepicker/DayPicker.js.map +1 -1
  137. package/components/dialog/Dialog.js +55 -55
  138. package/components/dialog/Dialog.js.map +1 -1
  139. package/components/dialog/DialogBody.js +1 -1
  140. package/components/dialog/DialogBody.js.map +1 -1
  141. package/components/dialog/DialogFooter.js +1 -1
  142. package/components/dialog/DialogFooter.js.map +1 -1
  143. package/components/dialog/DialogHeader.js +1 -1
  144. package/components/dialog/DialogHeader.js.map +1 -1
  145. package/components/dialog/MediaDialog.js +1 -1
  146. package/components/dialog/MediaDialog.js.map +1 -1
  147. package/components/dialog/SplitDialog.js +1 -1
  148. package/components/dialog/SplitDialog.js.map +1 -1
  149. package/components/divider/Divider.js +1 -1
  150. package/components/divider/Divider.js.map +1 -1
  151. package/components/dropdown/ButtonDropdown.js +1 -1
  152. package/components/dropdown/ButtonDropdown.js.map +1 -1
  153. package/components/dropdown/DropdownSubmenu.js +3 -3
  154. package/components/dropdown/DropdownSubmenu.js.map +1 -1
  155. package/components/dropdown/DropdownToggleButton.d.ts +1 -1
  156. package/components/dropdown/DropdownToggleButton.js +4 -3
  157. package/components/dropdown/DropdownToggleButton.js.map +1 -1
  158. package/components/dropdown/SplitCaretButton.js +6 -6
  159. package/components/dropdown/SplitCaretButton.js.map +1 -1
  160. package/components/editableContent/EditableContent.js +1 -1
  161. package/components/editableContent/EditableContent.js.map +1 -1
  162. package/components/ellipsis/TextTruncateMiddle.d.ts +23 -0
  163. package/components/ellipsis/TextTruncateMiddle.js +21 -0
  164. package/components/ellipsis/TextTruncateMiddle.js.map +1 -0
  165. package/components/expander/ExpanderList.js +5 -5
  166. package/components/expander/ExpanderList.js.map +1 -1
  167. package/components/expander/ExpanderPanel.js +1 -1
  168. package/components/expander/ExpanderPanel.js.map +1 -1
  169. package/components/feedback/FeedbackRating.js +1 -1
  170. package/components/feedback/FeedbackRating.js.map +1 -1
  171. package/components/feedback/FeedbackReactions.js +1 -1
  172. package/components/feedback/FeedbackReactions.js.map +1 -1
  173. package/components/formLabel/FormLabel.js +6 -9
  174. package/components/formLabel/FormLabel.js.map +1 -1
  175. package/components/formLabel/LabeledElement.js +1 -1
  176. package/components/formLabel/LabeledElement.js.map +1 -1
  177. package/components/listMenu/ListMenu.js +2 -5
  178. package/components/listMenu/ListMenu.js.map +1 -1
  179. package/components/listMenu/ListMenuGroup.js +2 -2
  180. package/components/listMenu/ListMenuGroup.js.map +1 -1
  181. package/components/loadMore/LoadMoreButton.js +1 -1
  182. package/components/loadMore/LoadMoreButton.js.map +1 -1
  183. package/components/loadMore/LoadMoreProgress.js +1 -1
  184. package/components/loadMore/LoadMoreProgress.js.map +1 -1
  185. package/components/map/components/features/MapSettings.js +4 -4
  186. package/components/map/components/features/MapSettings.js.map +1 -1
  187. package/components/map/components/features/settings/MapSettingsItem.js +1 -1
  188. package/components/map/components/features/settings/MapSettingsItem.js.map +1 -1
  189. package/components/map/components/features/settings/MapSettingsPanel.js +6 -20
  190. package/components/map/components/features/settings/MapSettingsPanel.js.map +1 -1
  191. package/components/map/components/features/settings/MapSettingsTile.js +87 -61
  192. package/components/map/components/features/settings/MapSettingsTile.js.map +1 -1
  193. package/components/map/components/features/settings/ZoomButtons.js +1 -1
  194. package/components/map/components/features/settings/ZoomButtons.js.map +1 -1
  195. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.d.ts +38 -1
  196. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js +128 -92
  197. package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js.map +1 -1
  198. package/components/map/utils/eventHandling.js +9 -9
  199. package/components/map/utils/eventHandling.js.map +1 -1
  200. package/components/map/utils/mapUtils.d.ts +6 -6
  201. package/components/map/utils/mapUtils.js +14 -19
  202. package/components/map/utils/mapUtils.js.map +1 -1
  203. package/components/mapMarker/ClusterMapMarker.js +1 -1
  204. package/components/mapMarker/ClusterMapMarker.js.map +1 -1
  205. package/components/mapMarker/SingleMapMarker.js +1 -1
  206. package/components/mapMarker/SingleMapMarker.js.map +1 -1
  207. package/components/menuItems/MenuItem.js +1 -1
  208. package/components/menuItems/MenuItem.js.map +1 -1
  209. package/components/menuItems/MenuItemList.js +1 -1
  210. package/components/menuItems/MenuItemList.js.map +1 -1
  211. package/components/navigation/AppNavigationBar.js +4 -4
  212. package/components/navigation/AppNavigationBar.js.map +1 -1
  213. package/components/noData/NoData.js +1 -1
  214. package/components/noData/NoData.js.map +1 -1
  215. package/components/numberControl/NumberControl.js +4 -4
  216. package/components/numberControl/NumberControl.js.map +1 -1
  217. package/components/numberInput/NumberInput.js +1 -1
  218. package/components/numberInput/NumberInput.js.map +1 -1
  219. package/components/onboarding/OnboardingTip.js +4 -4
  220. package/components/onboarding/OnboardingTip.js.map +1 -1
  221. package/components/page/Page.js +1 -1
  222. package/components/page/Page.js.map +1 -1
  223. package/components/pager/Pager.js +1 -1
  224. package/components/pager/Pager.js.map +1 -1
  225. package/components/radiobutton/RadioButton.d.ts +1 -1
  226. package/components/radiobutton/RadioButton.js +5 -5
  227. package/components/radiobutton/RadioButton.js.map +1 -1
  228. package/components/radiobutton/RadioCardGroup.d.ts +86 -0
  229. package/components/radiobutton/RadioCardGroup.js +110 -0
  230. package/components/radiobutton/RadioCardGroup.js.map +1 -0
  231. package/components/resizer/Resizer.js +1 -1
  232. package/components/resizer/Resizer.js.map +1 -1
  233. package/components/responsiveColumnStripe/ResponsiveColumnStripe.js +1 -1
  234. package/components/responsiveColumnStripe/ResponsiveColumnStripe.js.map +1 -1
  235. package/components/rioglyph/Rioglyph.js +1 -1
  236. package/components/rioglyph/Rioglyph.js.map +1 -1
  237. package/components/rioglyph/RioglyphIconType.d.ts +1 -1
  238. package/components/rules/RuleConnector.js +1 -1
  239. package/components/rules/RuleConnector.js.map +1 -1
  240. package/components/rules/RuleContainer.js +27 -27
  241. package/components/rules/RuleContainer.js.map +1 -1
  242. package/components/saveableInput/SaveableDateInput.js +1 -1
  243. package/components/saveableInput/SaveableDateInput.js.map +1 -1
  244. package/components/saveableInput/SaveableInput.js +49 -49
  245. package/components/saveableInput/SaveableInput.js.map +1 -1
  246. package/components/searchHighlight/SearchHighlightText.d.ts +28 -0
  247. package/components/searchHighlight/SearchHighlightText.js +15 -0
  248. package/components/searchHighlight/SearchHighlightText.js.map +1 -0
  249. package/components/selects/BaseSelectDropdown.js +1 -1
  250. package/components/selects/BaseSelectDropdown.js.map +1 -1
  251. package/components/selects/ClearButton.js +4 -4
  252. package/components/selects/ClearButton.js.map +1 -1
  253. package/components/selects/Multiselect.js +6 -6
  254. package/components/selects/Multiselect.js.map +1 -1
  255. package/components/selects/MultiselectToggleFilter.js +4 -4
  256. package/components/selects/MultiselectToggleFilter.js.map +1 -1
  257. package/components/selects/MultiselectToggleSelection.js +1 -1
  258. package/components/selects/MultiselectToggleSelection.js.map +1 -1
  259. package/components/selects/Select.js +6 -6
  260. package/components/selects/Select.js.map +1 -1
  261. package/components/selects/SelectFilter.js +1 -1
  262. package/components/selects/SelectFilter.js.map +1 -1
  263. package/components/selects/WithFeedbackAndAddon.js +1 -1
  264. package/components/selects/WithFeedbackAndAddon.js.map +1 -1
  265. package/components/sidebars/Sidebar.js +54 -54
  266. package/components/sidebars/Sidebar.js.map +1 -1
  267. package/components/sidebars/SidebarBackdrop.js +4 -4
  268. package/components/sidebars/SidebarBackdrop.js.map +1 -1
  269. package/components/sidebars/SidebarFooter.js +1 -1
  270. package/components/sidebars/SidebarFooter.js.map +1 -1
  271. package/components/sidebars/SidebarFullscreenToggle.js +4 -4
  272. package/components/sidebars/SidebarFullscreenToggle.js.map +1 -1
  273. package/components/slider/RangeSlider.js +1 -1
  274. package/components/slider/RangeSlider.js.map +1 -1
  275. package/components/slider/Slider.js +1 -1
  276. package/components/slider/Slider.js.map +1 -1
  277. package/components/smoothScrollbars/SmoothScrollbars.js +1 -1
  278. package/components/smoothScrollbars/SmoothScrollbars.js.map +1 -1
  279. package/components/spinner/Spinner.js +5 -4
  280. package/components/spinner/Spinner.js.map +1 -1
  281. package/components/states/CustomState.d.ts +69 -1
  282. package/components/states/CustomState.js +1 -1
  283. package/components/states/CustomState.js.map +1 -1
  284. package/components/states/EmptyState.d.ts +1 -1
  285. package/components/states/EmptyState.js.map +1 -1
  286. package/components/states/ErrorState.d.ts +1 -1
  287. package/components/states/ErrorState.js.map +1 -1
  288. package/components/states/ForbiddenState.d.ts +1 -1
  289. package/components/states/ForbiddenState.js.map +1 -1
  290. package/components/states/MaintenanceState.d.ts +1 -1
  291. package/components/states/MaintenanceState.js.map +1 -1
  292. package/components/states/NotBookedState.d.ts +1 -1
  293. package/components/states/NotBookedState.js.map +1 -1
  294. package/components/states/NotFoundState.d.ts +1 -1
  295. package/components/states/NotFoundState.js.map +1 -1
  296. package/components/states/StateButton.js +1 -1
  297. package/components/states/StateButton.js.map +1 -1
  298. package/components/statsWidget/StatsWidget.js +1 -1
  299. package/components/statsWidget/StatsWidget.js.map +1 -1
  300. package/components/statsWidget/StatsWidgetBody.js +1 -1
  301. package/components/statsWidget/StatsWidgetBody.js.map +1 -1
  302. package/components/statsWidget/StatsWidgetFooter.js +1 -1
  303. package/components/statsWidget/StatsWidgetFooter.js.map +1 -1
  304. package/components/statsWidget/StatsWidgetHeader.js +1 -1
  305. package/components/statsWidget/StatsWidgetHeader.js.map +1 -1
  306. package/components/statsWidget/StatsWidgetNumber.js +2 -2
  307. package/components/statsWidget/StatsWidgetNumber.js.map +1 -1
  308. package/components/statsWidget/StatsWidgetSpacer.js +1 -1
  309. package/components/statsWidget/StatsWidgetSpacer.js.map +1 -1
  310. package/components/statsWidget/StatsWidgets.js +1 -1
  311. package/components/statsWidget/StatsWidgets.js.map +1 -1
  312. package/components/statusBar/StatusBar.d.ts +126 -2
  313. package/components/statusBar/StatusBar.js +24 -17
  314. package/components/statusBar/StatusBar.js.map +1 -1
  315. package/components/statusBar/StatusBarIcon.d.ts +1 -1
  316. package/components/statusBar/StatusBarIcon.js +4 -4
  317. package/components/statusBar/StatusBarIcon.js.map +1 -1
  318. package/components/statusBar/StatusBarLabel.d.ts +1 -1
  319. package/components/statusBar/StatusBarLabel.js +5 -7
  320. package/components/statusBar/StatusBarLabel.js.map +1 -1
  321. package/components/statusBar/StatusBarProgressBar.d.ts +1 -1
  322. package/components/statusBar/StatusBarProgressBar.js +1 -1
  323. package/components/statusBar/StatusBarProgressBar.js.map +1 -1
  324. package/components/steppedProgressBar/SteppedProgressBar.js +1 -1
  325. package/components/steppedProgressBar/SteppedProgressBar.js.map +1 -1
  326. package/components/switch/Switch.d.ts +16 -1
  327. package/components/switch/Switch.js +77 -35
  328. package/components/switch/Switch.js.map +1 -1
  329. package/components/table/TableCardsSorting.js +4 -4
  330. package/components/table/TableCardsSorting.js.map +1 -1
  331. package/components/table/TableHead.js +1 -1
  332. package/components/table/TableHead.js.map +1 -1
  333. package/components/table/TableSearch.js +1 -1
  334. package/components/table/TableSearch.js.map +1 -1
  335. package/components/table/TableSettingsColumnButtons.d.ts +1 -1
  336. package/components/table/TableSettingsColumnButtons.js +1 -1
  337. package/components/table/TableSettingsColumnButtons.js.map +1 -1
  338. package/components/table/TableSettingsColumnDetails.d.ts +1 -1
  339. package/components/table/TableSettingsColumnDetails.js +1 -1
  340. package/components/table/TableSettingsColumnDetails.js.map +1 -1
  341. package/components/table/TableSettingsDialog.d.ts +51 -1
  342. package/components/table/TableSettingsDialog.js +170 -154
  343. package/components/table/TableSettingsDialog.js.map +1 -1
  344. package/components/table/TableSettingsDialogFooter.js +1 -1
  345. package/components/table/TableSettingsDialogFooter.js.map +1 -1
  346. package/components/table/TableSettingsListContainer.d.ts +1 -1
  347. package/components/table/TableSettingsListContainer.js +8 -8
  348. package/components/table/TableSettingsListContainer.js.map +1 -1
  349. package/components/table/TableSettingsListItem.d.ts +1 -1
  350. package/components/table/TableSettingsListItem.js +26 -26
  351. package/components/table/TableSettingsListItem.js.map +1 -1
  352. package/components/table/TableToolbar.js +1 -1
  353. package/components/table/TableToolbar.js.map +1 -1
  354. package/components/table/TableViewToggles.js +1 -1
  355. package/components/table/TableViewToggles.js.map +1 -1
  356. package/components/tag/Tag.js +1 -1
  357. package/components/tag/Tag.js.map +1 -1
  358. package/components/tag/TagList.js +1 -1
  359. package/components/tag/TagList.js.map +1 -1
  360. package/components/tagManager/CustomSuggestionItem.js +1 -1
  361. package/components/tagManager/CustomSuggestionItem.js.map +1 -1
  362. package/components/tagManager/TagManager.d.ts +14 -2
  363. package/components/tagManager/TagManager.js +6 -6
  364. package/components/tagManager/TagManager.js.map +1 -1
  365. package/components/tagManager/TagManagerItemList.d.ts +1 -1
  366. package/components/tagManager/TagManagerItemList.js +1 -1
  367. package/components/tagManager/TagManagerItemList.js.map +1 -1
  368. package/components/teaser/Teaser.js +1 -1
  369. package/components/teaser/Teaser.js.map +1 -1
  370. package/components/teaser/TeaserContainer.js +1 -1
  371. package/components/teaser/TeaserContainer.js.map +1 -1
  372. package/components/timepicker/TimePicker.d.ts +20 -0
  373. package/components/timepicker/TimePicker.js +153 -99
  374. package/components/timepicker/TimePicker.js.map +1 -1
  375. package/components/tooltip/Tooltip.js +1 -1
  376. package/components/tooltip/Tooltip.js.map +1 -1
  377. package/components/tracker/Tracker.d.ts +85 -0
  378. package/components/tracker/Tracker.js +54 -0
  379. package/components/tracker/Tracker.js.map +1 -0
  380. package/components/tracker/TrackerBlock.d.ts +11 -0
  381. package/components/tracker/TrackerBlock.js +34 -0
  382. package/components/tracker/TrackerBlock.js.map +1 -0
  383. package/components/video/ResponsiveVideo.js +1 -1
  384. package/components/video/ResponsiveVideo.js.map +1 -1
  385. package/hooks/useCookies.d.ts +79 -0
  386. package/hooks/useCookies.js +33 -0
  387. package/hooks/useCookies.js.map +1 -0
  388. package/hooks/useInterval.js +5 -5
  389. package/hooks/useInterval.js.map +1 -1
  390. package/hooks/useIsFocusWithin.js +3 -3
  391. package/hooks/useIsFocusWithin.js.map +1 -1
  392. package/hooks/useLatest.d.ts +16 -0
  393. package/hooks/useLatest.js +11 -0
  394. package/hooks/useLatest.js.map +1 -0
  395. package/hooks/usePostMessage.d.ts +2 -1
  396. package/hooks/usePostMessage.js.map +1 -1
  397. package/hooks/useRioCookieConsent.d.ts +49 -0
  398. package/hooks/useRioCookieConsent.js +44 -0
  399. package/hooks/useRioCookieConsent.js.map +1 -0
  400. package/hooks/useSearch.d.ts +1 -1
  401. package/hooks/useSearch.js +28 -17
  402. package/hooks/useSearch.js.map +1 -1
  403. package/hooks/useSearchHighlight.d.ts +60 -0
  404. package/hooks/useSearchHighlight.js +54 -0
  405. package/hooks/useSearchHighlight.js.map +1 -0
  406. package/hooks/useTimeout.js +11 -11
  407. package/hooks/useTimeout.js.map +1 -1
  408. package/hooks/useUrlState.d.ts +62 -0
  409. package/hooks/useUrlState.js +137 -0
  410. package/hooks/useUrlState.js.map +1 -0
  411. package/mergeClassNameOverrides.d.ts +1 -0
  412. package/mergeClassNameOverrides.js +5 -0
  413. package/mergeClassNameOverrides.js.map +1 -0
  414. package/package.json +17 -18
  415. package/routeUtils.js +11 -5
  416. package/routeUtils.js.map +1 -1
  417. package/themes/Volkswagen/components/applicationHeader/VolkswagenApplicationHeader.js +1 -1
  418. package/themes/Volkswagen/components/applicationHeader/VolkswagenApplicationHeader.js.map +1 -1
  419. package/useCookies.d.ts +2 -0
  420. package/useCookies.js +5 -0
  421. package/useCookies.js.map +1 -0
  422. package/useRioCookieConsent.d.ts +2 -0
  423. package/useRioCookieConsent.js +5 -0
  424. package/useRioCookieConsent.js.map +1 -0
  425. package/useSearchHighlight.d.ts +2 -0
  426. package/useSearchHighlight.js +6 -0
  427. package/useSearchHighlight.js.map +1 -0
  428. package/useUrlState.d.ts +2 -0
  429. package/useUrlState.js +5 -0
  430. package/useUrlState.js.map +1 -0
  431. package/utils/classNames.d.ts +3 -0
  432. package/utils/classNames.js +5 -0
  433. package/utils/classNames.js.map +1 -0
  434. package/utils/mergeClassNameOverrides.d.ts +1 -0
  435. package/utils/mergeClassNameOverrides.js +55 -0
  436. package/utils/mergeClassNameOverrides.js.map +1 -0
  437. package/utils/routeUtils.d.ts +122 -13
  438. package/utils/routeUtils.js +89 -31
  439. package/utils/routeUtils.js.map +1 -1
  440. package/version.d.ts +1 -1
  441. package/version.js +1 -1
  442. package/version.js.map +1 -1
  443. package/components/states/BaseStateProps.d.ts +0 -70
  444. package/components/statusBar/StatusBarProps.d.ts +0 -127
  445. package/components/table/TableSettingsDialog.types.d.ts +0 -39
  446. package/components/tagManager/TagManagerTag.d.ts +0 -14
@@ -1,10 +1,10 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
- import a from "classnames";
3
- import { isNil as l } from "es-toolkit/predicate";
2
+ import { isNil as a } from "es-toolkit/predicate";
3
+ import l from "../../utils/classNames.js";
4
4
  const p = (o) => {
5
- const { showClear: s, selectedItem: t, onClear: r } = o, n = a(
5
+ const { showClear: s, selectedItem: t, onClear: r } = o, n = l(
6
6
  "clearButton",
7
- (!s || l(t)) && "hide pointer-events-none"
7
+ (!s || a(t)) && "hide pointer-events-none"
8
8
  );
9
9
  return /* @__PURE__ */ e("span", { className: n, onClick: r, children: /* @__PURE__ */ e("span", { className: "clearButtonIcon rioglyph rioglyph-remove-sign" }) });
10
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ClearButton.js","sources":["../../../src/components/selects/ClearButton.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport { isNil } from 'es-toolkit/predicate';\n\nimport type { SelectOption } from './Select';\n\nexport type ClearButtonProps = {\n showClear: boolean;\n selectedItem: SelectOption | null;\n onClear: () => void;\n};\n\nconst ClearButton = (props: ClearButtonProps) => {\n const { showClear, selectedItem, onClear } = props;\n\n const clearButtonClassNames = classNames(\n 'clearButton',\n (!showClear || isNil(selectedItem)) && 'hide pointer-events-none'\n );\n\n return (\n <span className={clearButtonClassNames} onClick={onClear}>\n <span className='clearButtonIcon rioglyph rioglyph-remove-sign' />\n </span>\n );\n};\n\nexport default ClearButton;\n"],"names":["ClearButton","props","showClear","selectedItem","onClear","clearButtonClassNames","classNames","isNil","jsx"],"mappings":";;;AAWA,MAAMA,IAAc,CAACC,MAA4B;AAC7C,QAAM,EAAE,WAAAC,GAAW,cAAAC,GAAc,SAAAC,EAAA,IAAYH,GAEvCI,IAAwBC;AAAA,IAC1B;AAAA,KACC,CAACJ,KAAaK,EAAMJ,CAAY,MAAM;AAAA,EAAA;AAG3C,SACI,gBAAAK,EAAC,QAAA,EAAK,WAAWH,GAAuB,SAASD,GAC7C,UAAA,gBAAAI,EAAC,QAAA,EAAK,WAAU,gDAAA,CAAgD,EAAA,CACpE;AAER;"}
1
+ {"version":3,"file":"ClearButton.js","sources":["../../../src/components/selects/ClearButton.tsx"],"sourcesContent":["import { isNil } from 'es-toolkit/predicate';\n\nimport classNames from '../../utils/classNames';\nimport type { SelectOption } from './Select';\n\nexport type ClearButtonProps = {\n showClear: boolean;\n selectedItem: SelectOption | null;\n onClear: () => void;\n};\n\nconst ClearButton = (props: ClearButtonProps) => {\n const { showClear, selectedItem, onClear } = props;\n\n const clearButtonClassNames = classNames(\n 'clearButton',\n (!showClear || isNil(selectedItem)) && 'hide pointer-events-none'\n );\n\n return (\n <span className={clearButtonClassNames} onClick={onClear}>\n <span className='clearButtonIcon rioglyph rioglyph-remove-sign' />\n </span>\n );\n};\n\nexport default ClearButton;\n"],"names":["ClearButton","props","showClear","selectedItem","onClear","clearButtonClassNames","classNames","isNil","jsx"],"mappings":";;;AAWA,MAAMA,IAAc,CAACC,MAA4B;AAC7C,QAAM,EAAE,WAAAC,GAAW,cAAAC,GAAc,SAAAC,EAAA,IAAYH,GAEvCI,IAAwBC;AAAA,IAC1B;AAAA,KACC,CAACJ,KAAaK,EAAMJ,CAAY,MAAM;AAAA,EAAA;AAG3C,SACI,gBAAAK,EAAC,QAAA,EAAK,WAAWH,GAAuB,SAASD,GAC7C,UAAA,gBAAAI,EAAC,QAAA,EAAK,WAAU,gDAAA,CAAgD,EAAA,CACpE;AAER;"}
@@ -1,9 +1,9 @@
1
1
  import { jsxs as C, jsx as c, Fragment as xe } from "react/jsx-runtime";
2
2
  import { useState as n, useRef as x } from "react";
3
- import L from "classnames";
4
- import { isEqual as q } from "es-toolkit/predicate";
3
+ import { isEqual as L } from "es-toolkit/predicate";
5
4
  import { isEmpty as ve } from "es-toolkit/compat";
6
5
  import { noop as Ae } from "es-toolkit/function";
6
+ import q from "../../utils/classNames.js";
7
7
  import Te, { filterOptions as ye } from "./BaseSelectDropdown.js";
8
8
  import Ne from "./MultiselectToggleCounter.js";
9
9
  import Re from "./MultiselectToggleSelection.js";
@@ -55,9 +55,9 @@ const z = -1, Ze = (X) => {
55
55
  }, W = x(!0);
56
56
  W.current && (O(o, a), W.current = !1);
57
57
  const [pe, me] = n(a);
58
- q(a, pe) || (O(o, a), me(a));
58
+ L(a, pe) || (O(o, a), me(a));
59
59
  const [ge, he] = n(o);
60
- q(o, ge) || (O(o, a), f(o), he(o));
60
+ L(o, ge) || (O(o, a), f(o), he(o));
61
61
  const Ie = (e = []) => {
62
62
  ae(e);
63
63
  }, D = () => /* @__PURE__ */ c(
@@ -89,7 +89,7 @@ const z = -1, Ze = (X) => {
89
89
  children: d && D()
90
90
  }
91
91
  ), Fe = () => {
92
- const e = L(
92
+ const e = q(
93
93
  "dropdown-toggle",
94
94
  "form-control",
95
95
  "text-left",
@@ -188,7 +188,7 @@ const z = -1, Ze = (X) => {
188
188
  I((s) => !s), S(t);
189
189
  }, j = () => {
190
190
  r && (I(!1), w(!1), F(""), f(o), K(z), S(!1), B?.current?.focus());
191
- }, Ce = L(
191
+ }, Ce = q(
192
192
  "select",
193
193
  "multiselect",
194
194
  "dropdown",
@@ -1 +1 @@
1
- {"version":3,"file":"Multiselect.js","sources":["../../../src/components/selects/Multiselect.tsx"],"sourcesContent":["import type React from 'react';\nimport { useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { isEqual } from 'es-toolkit/predicate';\nimport { isEmpty } from 'es-toolkit/compat';\nimport { noop } from 'es-toolkit/function';\n\nimport BaseSelectDropdown, { filterOptions, type OptionDOMValue, type SelectOption } from './BaseSelectDropdown';\nimport MultiselectToggleCounter from './MultiselectToggleCounter';\nimport MultiselectToggleSelection from './MultiselectToggleSelection';\nimport MultiselectToggleFilter from './MultiselectToggleFilter';\nimport MultiselectTogglePlaceholder from './MultiselectTogglePlaceholder';\nimport useClickOutside from '../../useClickOutside';\nimport useMergeRefs from '../../hooks/useMergeRefs';\nimport WithFeedbackAndAddon, { type WithFeedbackAndAddonProps } from './WithFeedbackAndAddon';\n\nconst DEFAULT_FOCUSED_ITEM_INDEX = -1;\n\nexport type MultiselectCounterMessage = {\n /**\n * Text that will be used when a single item is selected.\n */\n one: string | React.ReactNode;\n\n /**\n * Text that will be used when multiple item are selected.\n */\n many: string | React.ReactNode;\n};\n\nexport type MultiselectOption = SelectOption & {};\n\nexport type MultiselectProps<T extends MultiselectOption> = Omit<WithFeedbackAndAddonProps, 'bsSize'> & {\n /**\n * Passed through as HTML attribute to the toggle button.\n */\n name?: string;\n\n /**\n * Passed as HTML attribute to the toggle button.\n *\n * @default Uses the value given to `name` if not provided explicitly.\n */\n id?: string;\n\n /**\n * Items to display in the dropdown menu.\n *\n * @default []\n */\n options?: T[];\n\n /**\n * Sets the ids of the selected options when the component is already mounted.\n */\n value?: string[];\n\n /**\n * Callback function triggered when an item is selected.\n *\n * @param selectedItemIds Array containing all the IDs that have been selected.\n *\n * @default () => {}\n */\n onChange?: (selectedItemIds: string[]) => void;\n\n /**\n * Text to display when nothing is selected.\n */\n placeholder?: string | React.ReactNode;\n\n /**\n * Defines whether the dropdown opens upwards.\n *\n * Set to `true` additionally disables autoDrop feature.\n *\n * @default false\n */\n dropup?: boolean;\n\n /**\n * Defines whether the dropdown opens right aligned to the dropdown toggle.\n *\n * Set to 'true' additionally disables autoDrop feature.\n *\n * @default false\n */\n pullRight?: boolean;\n\n /**\n * Enables or disables the autoDrop positioning feature.\n *\n * When enabled, the option list opens below or above the input depending on the surrounding space.\n *\n * @default true\n */\n autoDropDirection?: boolean;\n\n /**\n * Shows a loading spinner instead of the menu items if set to true.\n * @default false\n */\n isLoading?: boolean;\n\n /**\n * Defines the size of the select to be rendered.\n *\n * @default 'md'\n */\n bsSize?: 'sm' | 'md' | 'lg';\n\n /**\n * Option to disable the opening of the option list.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Sets the input's tabindex attribute.\n *\n * The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being\n * sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for\n * sequential focus navigation.\n *\n * @default 0\n */\n tabIndex?: number;\n\n /**\n * Defines whether the Bootstrap error classes shall be added to the toggle element.\n *\n * @default false\n */\n hasError?: boolean;\n\n /**\n * Defines whether the selected items wrap around within the dropdown toggle.\n *\n * @default false\n */\n multiline?: boolean;\n\n /**\n * Defines whether the component should be filterable.\n *\n * @default false\n */\n useFilter?: boolean;\n\n /**\n * Text that shall be shown when not match was found when filtering.\n */\n noItemMessage?: string | React.ReactNode;\n\n /**\n * Object that will render the number of selected items instead of individual items.\n *\n * Using this prop will disable the filter functionality.\n */\n counterMessage?: MultiselectCounterMessage;\n\n /**\n * Optional render function that is used to render the message how many items have been selected.\n *\n * Using this prop will disable the filter functionality.\n *\n * @param selectedAmount The total amount of selected items.\n */\n renderCounterMessage?: (selectedAmount: number) => React.ReactNode;\n\n /**\n * Set to show only the icon and not the label of selected item.\n *\n * @default false\n */\n showSelectedItemIcon?: boolean;\n\n /**\n * Set to show all item icons within the toggle element.\n *\n * Selected items are highlighted and unselected items are shown as inactive.\n *\n * @default false\n */\n showUnselectedItemIcons?: boolean;\n\n /**\n * Additional classes to be set to the dropdown.\n */\n dropdownClassName?: string;\n\n /**\n * Additional classes to be set to the select/input.\n */\n btnClassName?: string;\n\n /**\n * Additional classes to be set to the select wrapper\n */\n className?: string;\n};\n\nconst Multiselect = (props: MultiselectProps<MultiselectOption>) => {\n const {\n name,\n id = name,\n options = [],\n value,\n onChange = noop,\n placeholder,\n isLoading = false,\n dropup = false,\n pullRight = false,\n autoDropDirection = true,\n bsSize = 'md',\n disabled = false,\n tabIndex = 0,\n hasError = false,\n useFilter = false,\n multiline = false,\n noItemMessage,\n counterMessage,\n renderCounterMessage,\n showSelectedItemIcon = false,\n showUnselectedItemIcons = false,\n className,\n inputAddon,\n errorMessage,\n warningMessage,\n messageWhiteSpace = 'normal',\n btnClassName,\n dropdownClassName,\n ...remainingProps\n } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedItemIds, setSelectedItemIds] = useState<string[]>(value || []);\n const [isFilterActive, setIsFilterActive] = useState(false);\n const [filterValue, setFilterValue] = useState('');\n const [filteredOptions, setFilteredOptions] = useState<MultiselectOption[]>(options);\n const [itemDOMValues, setItemDOMValues] = useState<OptionDOMValue[]>([]);\n const [focusedItemIndex, setFocusedItemIndex] = useState(DEFAULT_FOCUSED_ITEM_INDEX);\n const [keyboardUsed, setKeyboardUsed] = useState(false);\n\n const refToggle = useRef<HTMLButtonElement>(null);\n const refMultiSelectWrapper = useRef<HTMLDivElement>(null);\n\n const ref = useClickOutside(event => {\n // Check if the click is truly outside the multiselect wrapper\n if (refMultiSelectWrapper.current && !refMultiSelectWrapper.current.contains(event.target as Node)) {\n closeMenu();\n }\n });\n\n const mergedSelectRefs = useMergeRefs(refMultiSelectWrapper, ref);\n\n const updateSelectedItems = (optionsToCheck: MultiselectOption[], selectedItem: string[] | undefined) => {\n if (selectedItem) {\n setSelectedItemIds(selectedItem);\n } else if (optionsToCheck) {\n const filteredBySelection = optionsToCheck.filter(item => item.selected);\n setSelectedItemIds(filteredBySelection.map(option => option.id));\n }\n };\n\n // Update the selectedItems on first render.\n // Note, we use a ref instead of an effect as the effect is triggered too late\n const firstRenderRef = useRef<boolean>(true);\n if (firstRenderRef.current) {\n updateSelectedItems(options, value);\n firstRenderRef.current = false;\n }\n\n // Update selection based on changed value prop\n const [previousValue, setPreviousValue] = useState(value);\n if (!isEqual(value, previousValue)) {\n updateSelectedItems(options, value);\n setPreviousValue(value);\n }\n\n // Update options when they have changed from the outside\n const [previousOptions, setPreviousOptions] = useState(options);\n if (!isEqual(options, previousOptions)) {\n updateSelectedItems(options, value);\n setFilteredOptions(options);\n setPreviousOptions(options);\n }\n\n const updateDOMValues = (updatedItemDOMValues: OptionDOMValue[] = []) => {\n setItemDOMValues(updatedItemDOMValues);\n };\n\n const renderFilter = () => (\n <MultiselectToggleFilter\n isActive={isFilterActive || !!filterValue}\n selectedItemIds={selectedItemIds}\n filterValue={filterValue}\n onFilterChange={handleFilterChange}\n />\n );\n\n const renderSelection = () => {\n if (counterMessage || renderCounterMessage) {\n return (\n <MultiselectToggleCounter\n selectedAmount={selectedItemIds.length}\n counterMessage={counterMessage}\n customRenderer={renderCounterMessage}\n />\n );\n }\n\n return (\n <MultiselectToggleSelection\n options={options}\n selectedItemIds={selectedItemIds}\n showSelectedItemIcon={showSelectedItemIcon}\n showUnselectedItemIcons={showUnselectedItemIcons}\n onRemoveItem={handleRemoveSelectedItem}\n multiline={multiline}\n hasInputAddon={!!inputAddon}\n hasFilter={useFilter}\n >\n {multiline && renderFilter()}\n </MultiselectToggleSelection>\n );\n };\n\n const renderToggle = () => {\n const wrapperClassNames = classNames(\n 'dropdown-toggle',\n 'form-control',\n 'text-left',\n btnClassName && btnClassName,\n bsSize === 'sm' && 'input-sm',\n bsSize === 'lg' && 'input-lg',\n multiline && 'height-auto',\n disabled && 'disabled'\n );\n\n const showPlaceholder = isEmpty(selectedItemIds) && !showUnselectedItemIcons;\n const showFilter = useFilter && isOpen && !counterMessage && !renderCounterMessage;\n\n const toggleButton = (\n <button\n type='button'\n id={id}\n name={name}\n className={wrapperClassNames}\n data-toggle='dropdown'\n tabIndex={tabIndex}\n aria-haspopup='true'\n aria-expanded={isOpen}\n onClick={onToggle}\n onKeyDown={handleToggleKeyDown}\n ref={refToggle}\n >\n {showPlaceholder ? (\n <>\n <MultiselectTogglePlaceholder placeholder={placeholder} />\n {showFilter && renderFilter()}\n </>\n ) : (\n renderSelection()\n )}\n {showFilter && !multiline && renderFilter()}\n <span className='caret' />\n </button>\n );\n\n if (!inputAddon && !errorMessage && !warningMessage) {\n return toggleButton;\n }\n\n return (\n <WithFeedbackAndAddon\n bsSize={bsSize}\n inputAddon={inputAddon}\n errorMessage={errorMessage}\n warningMessage={warningMessage}\n messageWhiteSpace={messageWhiteSpace}\n >\n {toggleButton}\n </WithFeedbackAndAddon>\n );\n };\n\n const renderDropdownMenu = () => {\n const nonSelectedOptions = filteredOptions.map(option => {\n option.selected = selectedItemIds.indexOf(option.id) !== -1;\n return option;\n });\n\n return (\n <BaseSelectDropdown\n isOpen={isOpen}\n isLoading={isLoading}\n options={nonSelectedOptions}\n focusedItemIndex={focusedItemIndex}\n keyboardUsed={keyboardUsed}\n updateDOMValues={updateDOMValues}\n onSelect={onOptionChange}\n onClose={closeMenu}\n noItemMessage={noItemMessage}\n pullRight={pullRight}\n useActiveClass\n dropup={dropup}\n autoDropDirection={autoDropDirection}\n dropdownClassName={dropdownClassName}\n />\n );\n };\n\n const handleFilterChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n\n const targetFilterValue = event.currentTarget.value;\n const optionsFiltered = filterOptions(itemDOMValues, targetFilterValue, options);\n\n if (!isOpen) {\n // Ensure dropdown stays open when filtering\n setIsOpen(true);\n }\n\n const newFocusedItemIndex = optionsFiltered.length > 0 ? 0 : -1;\n\n setIsFilterActive(true);\n setFilterValue(targetFilterValue);\n setFilteredOptions(optionsFiltered);\n\n if (optionsFiltered.length > 0) {\n // Only set keyboard used if there are filtered options\n setKeyboardUsed(true);\n }\n\n setFocusedItemIndex(newFocusedItemIndex);\n };\n\n const onOptionChange = (currentSelectedItem: MultiselectOption | undefined) => {\n // prevent selecting disabled Items via keyboard\n if (currentSelectedItem?.disabled) {\n return;\n }\n\n const updatedSelectedItems = currentSelectedItem ? updateSelection(currentSelectedItem.id) : selectedItemIds;\n\n // Reset everything after an option was selected. Remove the filter again.\n setSelectedItemIds(updatedSelectedItems);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n\n onChange(updatedSelectedItems);\n };\n\n const updateSelection = (selectedItemId: string) => {\n const newSelectedItems = [...selectedItemIds];\n const itemIndex = selectedItemIds.indexOf(selectedItemId);\n\n if (itemIndex !== -1) {\n newSelectedItems.splice(itemIndex, 1);\n } else {\n newSelectedItems.push(selectedItemId);\n }\n\n return newSelectedItems;\n };\n\n const handleRemoveSelectedItem = (event: React.MouseEvent<HTMLSpanElement>, itemId: string) => {\n event.stopPropagation();\n\n const newSelectedItems = updateSelection(itemId);\n setSelectedItemIds(newSelectedItems);\n\n onChange(newSelectedItems);\n };\n\n const handleToggleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'Space':\n if (!isOpen) {\n // open on space\n event.preventDefault();\n onToggle(event);\n }\n break;\n case 'Enter':\n if (!isOpen) {\n // open on enter\n event.preventDefault();\n onToggle(event);\n }\n break;\n default:\n break;\n }\n };\n\n const onToggle = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n // Don't toggle when component is disabled or an item in the toggle was clicked in order to remove from\n // selection neither close when filter is active, means entering some filter value\n // in order to avoid closing menu on space but allow to use it for filtering\n if (disabled || isFilterActive) {\n return;\n }\n\n // using the enter key on the toggle button will trigger a synthetic click event as all buttons are of\n // type submit by default in HTML. In order to differentiate between real click and a synthetic event\n // caused by they keyboard, use the event details. A synthetic event is always 0.\n const isKeyboardUsed = event.detail === 0;\n\n setIsOpen(prevValue => !prevValue);\n setKeyboardUsed(isKeyboardUsed);\n };\n\n const closeMenu = () => {\n if (isOpen) {\n setIsOpen(false);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n setFocusedItemIndex(DEFAULT_FOCUSED_ITEM_INDEX);\n setKeyboardUsed(false);\n\n refToggle?.current?.focus();\n }\n };\n\n const wrapperClasses = classNames(\n 'select',\n 'multiselect',\n 'dropdown',\n isOpen && 'open',\n hasError && 'has-error',\n className && className\n );\n\n return (\n <div {...remainingProps} className={wrapperClasses} ref={mergedSelectRefs}>\n {renderToggle()}\n {renderDropdownMenu()}\n </div>\n );\n};\n\nexport default Multiselect;\n"],"names":["DEFAULT_FOCUSED_ITEM_INDEX","Multiselect","props","name","id","options","value","onChange","noop","placeholder","isLoading","dropup","pullRight","autoDropDirection","bsSize","disabled","tabIndex","hasError","useFilter","multiline","noItemMessage","counterMessage","renderCounterMessage","showSelectedItemIcon","showUnselectedItemIcons","className","inputAddon","errorMessage","warningMessage","messageWhiteSpace","btnClassName","dropdownClassName","remainingProps","isOpen","setIsOpen","useState","selectedItemIds","setSelectedItemIds","isFilterActive","setIsFilterActive","filterValue","setFilterValue","filteredOptions","setFilteredOptions","itemDOMValues","setItemDOMValues","focusedItemIndex","setFocusedItemIndex","keyboardUsed","setKeyboardUsed","refToggle","useRef","refMultiSelectWrapper","ref","useClickOutside","event","closeMenu","mergedSelectRefs","useMergeRefs","updateSelectedItems","optionsToCheck","selectedItem","filteredBySelection","item","option","firstRenderRef","previousValue","setPreviousValue","isEqual","previousOptions","setPreviousOptions","updateDOMValues","updatedItemDOMValues","renderFilter","jsx","MultiselectToggleFilter","handleFilterChange","renderSelection","MultiselectToggleCounter","MultiselectToggleSelection","handleRemoveSelectedItem","renderToggle","wrapperClassNames","classNames","showPlaceholder","isEmpty","showFilter","toggleButton","jsxs","onToggle","handleToggleKeyDown","Fragment","MultiselectTogglePlaceholder","WithFeedbackAndAddon","renderDropdownMenu","nonSelectedOptions","BaseSelectDropdown","onOptionChange","targetFilterValue","optionsFiltered","filterOptions","newFocusedItemIndex","currentSelectedItem","updatedSelectedItems","updateSelection","selectedItemId","newSelectedItems","itemIndex","itemId","isKeyboardUsed","prevValue","wrapperClasses"],"mappings":"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"}
1
+ {"version":3,"file":"Multiselect.js","sources":["../../../src/components/selects/Multiselect.tsx"],"sourcesContent":["import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { isEqual } from 'es-toolkit/predicate';\nimport { isEmpty } from 'es-toolkit/compat';\nimport { noop } from 'es-toolkit/function';\n\nimport classNames from '../../utils/classNames';\nimport BaseSelectDropdown, { filterOptions, type OptionDOMValue, type SelectOption } from './BaseSelectDropdown';\nimport MultiselectToggleCounter from './MultiselectToggleCounter';\nimport MultiselectToggleSelection from './MultiselectToggleSelection';\nimport MultiselectToggleFilter from './MultiselectToggleFilter';\nimport MultiselectTogglePlaceholder from './MultiselectTogglePlaceholder';\nimport useClickOutside from '../../useClickOutside';\nimport useMergeRefs from '../../hooks/useMergeRefs';\nimport WithFeedbackAndAddon, { type WithFeedbackAndAddonProps } from './WithFeedbackAndAddon';\n\nconst DEFAULT_FOCUSED_ITEM_INDEX = -1;\n\nexport type MultiselectCounterMessage = {\n /**\n * Text that will be used when a single item is selected.\n */\n one: string | React.ReactNode;\n\n /**\n * Text that will be used when multiple item are selected.\n */\n many: string | React.ReactNode;\n};\n\nexport type MultiselectOption = SelectOption & {};\n\nexport type MultiselectProps<T extends MultiselectOption> = Omit<WithFeedbackAndAddonProps, 'bsSize'> & {\n /**\n * Passed through as HTML attribute to the toggle button.\n */\n name?: string;\n\n /**\n * Passed as HTML attribute to the toggle button.\n *\n * @default Uses the value given to `name` if not provided explicitly.\n */\n id?: string;\n\n /**\n * Items to display in the dropdown menu.\n *\n * @default []\n */\n options?: T[];\n\n /**\n * Sets the ids of the selected options when the component is already mounted.\n */\n value?: string[];\n\n /**\n * Callback function triggered when an item is selected.\n *\n * @param selectedItemIds Array containing all the IDs that have been selected.\n *\n * @default () => {}\n */\n onChange?: (selectedItemIds: string[]) => void;\n\n /**\n * Text to display when nothing is selected.\n */\n placeholder?: string | React.ReactNode;\n\n /**\n * Defines whether the dropdown opens upwards.\n *\n * Set to `true` additionally disables autoDrop feature.\n *\n * @default false\n */\n dropup?: boolean;\n\n /**\n * Defines whether the dropdown opens right aligned to the dropdown toggle.\n *\n * Set to 'true' additionally disables autoDrop feature.\n *\n * @default false\n */\n pullRight?: boolean;\n\n /**\n * Enables or disables the autoDrop positioning feature.\n *\n * When enabled, the option list opens below or above the input depending on the surrounding space.\n *\n * @default true\n */\n autoDropDirection?: boolean;\n\n /**\n * Shows a loading spinner instead of the menu items if set to true.\n * @default false\n */\n isLoading?: boolean;\n\n /**\n * Defines the size of the select to be rendered.\n *\n * @default 'md'\n */\n bsSize?: 'sm' | 'md' | 'lg';\n\n /**\n * Option to disable the opening of the option list.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Sets the input's tabindex attribute.\n *\n * The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being\n * sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for\n * sequential focus navigation.\n *\n * @default 0\n */\n tabIndex?: number;\n\n /**\n * Defines whether the Bootstrap error classes shall be added to the toggle element.\n *\n * @default false\n */\n hasError?: boolean;\n\n /**\n * Defines whether the selected items wrap around within the dropdown toggle.\n *\n * @default false\n */\n multiline?: boolean;\n\n /**\n * Defines whether the component should be filterable.\n *\n * @default false\n */\n useFilter?: boolean;\n\n /**\n * Text that shall be shown when not match was found when filtering.\n */\n noItemMessage?: string | React.ReactNode;\n\n /**\n * Object that will render the number of selected items instead of individual items.\n *\n * Using this prop will disable the filter functionality.\n */\n counterMessage?: MultiselectCounterMessage;\n\n /**\n * Optional render function that is used to render the message how many items have been selected.\n *\n * Using this prop will disable the filter functionality.\n *\n * @param selectedAmount The total amount of selected items.\n */\n renderCounterMessage?: (selectedAmount: number) => React.ReactNode;\n\n /**\n * Set to show only the icon and not the label of selected item.\n *\n * @default false\n */\n showSelectedItemIcon?: boolean;\n\n /**\n * Set to show all item icons within the toggle element.\n *\n * Selected items are highlighted and unselected items are shown as inactive.\n *\n * @default false\n */\n showUnselectedItemIcons?: boolean;\n\n /**\n * Additional classes to be set to the dropdown.\n */\n dropdownClassName?: string;\n\n /**\n * Additional classes to be set to the select/input.\n */\n btnClassName?: string;\n\n /**\n * Additional classes to be set to the select wrapper\n */\n className?: string;\n};\n\nconst Multiselect = (props: MultiselectProps<MultiselectOption>) => {\n const {\n name,\n id = name,\n options = [],\n value,\n onChange = noop,\n placeholder,\n isLoading = false,\n dropup = false,\n pullRight = false,\n autoDropDirection = true,\n bsSize = 'md',\n disabled = false,\n tabIndex = 0,\n hasError = false,\n useFilter = false,\n multiline = false,\n noItemMessage,\n counterMessage,\n renderCounterMessage,\n showSelectedItemIcon = false,\n showUnselectedItemIcons = false,\n className,\n inputAddon,\n errorMessage,\n warningMessage,\n messageWhiteSpace = 'normal',\n btnClassName,\n dropdownClassName,\n ...remainingProps\n } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedItemIds, setSelectedItemIds] = useState<string[]>(value || []);\n const [isFilterActive, setIsFilterActive] = useState(false);\n const [filterValue, setFilterValue] = useState('');\n const [filteredOptions, setFilteredOptions] = useState<MultiselectOption[]>(options);\n const [itemDOMValues, setItemDOMValues] = useState<OptionDOMValue[]>([]);\n const [focusedItemIndex, setFocusedItemIndex] = useState(DEFAULT_FOCUSED_ITEM_INDEX);\n const [keyboardUsed, setKeyboardUsed] = useState(false);\n\n const refToggle = useRef<HTMLButtonElement>(null);\n const refMultiSelectWrapper = useRef<HTMLDivElement>(null);\n\n const ref = useClickOutside(event => {\n // Check if the click is truly outside the multiselect wrapper\n if (refMultiSelectWrapper.current && !refMultiSelectWrapper.current.contains(event.target as Node)) {\n closeMenu();\n }\n });\n\n const mergedSelectRefs = useMergeRefs(refMultiSelectWrapper, ref);\n\n const updateSelectedItems = (optionsToCheck: MultiselectOption[], selectedItem: string[] | undefined) => {\n if (selectedItem) {\n setSelectedItemIds(selectedItem);\n } else if (optionsToCheck) {\n const filteredBySelection = optionsToCheck.filter(item => item.selected);\n setSelectedItemIds(filteredBySelection.map(option => option.id));\n }\n };\n\n // Update the selectedItems on first render.\n // Note, we use a ref instead of an effect as the effect is triggered too late\n const firstRenderRef = useRef<boolean>(true);\n if (firstRenderRef.current) {\n updateSelectedItems(options, value);\n firstRenderRef.current = false;\n }\n\n // Update selection based on changed value prop\n const [previousValue, setPreviousValue] = useState(value);\n if (!isEqual(value, previousValue)) {\n updateSelectedItems(options, value);\n setPreviousValue(value);\n }\n\n // Update options when they have changed from the outside\n const [previousOptions, setPreviousOptions] = useState(options);\n if (!isEqual(options, previousOptions)) {\n updateSelectedItems(options, value);\n setFilteredOptions(options);\n setPreviousOptions(options);\n }\n\n const updateDOMValues = (updatedItemDOMValues: OptionDOMValue[] = []) => {\n setItemDOMValues(updatedItemDOMValues);\n };\n\n const renderFilter = () => (\n <MultiselectToggleFilter\n isActive={isFilterActive || !!filterValue}\n selectedItemIds={selectedItemIds}\n filterValue={filterValue}\n onFilterChange={handleFilterChange}\n />\n );\n\n const renderSelection = () => {\n if (counterMessage || renderCounterMessage) {\n return (\n <MultiselectToggleCounter\n selectedAmount={selectedItemIds.length}\n counterMessage={counterMessage}\n customRenderer={renderCounterMessage}\n />\n );\n }\n\n return (\n <MultiselectToggleSelection\n options={options}\n selectedItemIds={selectedItemIds}\n showSelectedItemIcon={showSelectedItemIcon}\n showUnselectedItemIcons={showUnselectedItemIcons}\n onRemoveItem={handleRemoveSelectedItem}\n multiline={multiline}\n hasInputAddon={!!inputAddon}\n hasFilter={useFilter}\n >\n {multiline && renderFilter()}\n </MultiselectToggleSelection>\n );\n };\n\n const renderToggle = () => {\n const wrapperClassNames = classNames(\n 'dropdown-toggle',\n 'form-control',\n 'text-left',\n btnClassName && btnClassName,\n bsSize === 'sm' && 'input-sm',\n bsSize === 'lg' && 'input-lg',\n multiline && 'height-auto',\n disabled && 'disabled'\n );\n\n const showPlaceholder = isEmpty(selectedItemIds) && !showUnselectedItemIcons;\n const showFilter = useFilter && isOpen && !counterMessage && !renderCounterMessage;\n\n const toggleButton = (\n <button\n type='button'\n id={id}\n name={name}\n className={wrapperClassNames}\n data-toggle='dropdown'\n tabIndex={tabIndex}\n aria-haspopup='true'\n aria-expanded={isOpen}\n onClick={onToggle}\n onKeyDown={handleToggleKeyDown}\n ref={refToggle}\n >\n {showPlaceholder ? (\n <>\n <MultiselectTogglePlaceholder placeholder={placeholder} />\n {showFilter && renderFilter()}\n </>\n ) : (\n renderSelection()\n )}\n {showFilter && !multiline && renderFilter()}\n <span className='caret' />\n </button>\n );\n\n if (!inputAddon && !errorMessage && !warningMessage) {\n return toggleButton;\n }\n\n return (\n <WithFeedbackAndAddon\n bsSize={bsSize}\n inputAddon={inputAddon}\n errorMessage={errorMessage}\n warningMessage={warningMessage}\n messageWhiteSpace={messageWhiteSpace}\n >\n {toggleButton}\n </WithFeedbackAndAddon>\n );\n };\n\n const renderDropdownMenu = () => {\n const nonSelectedOptions = filteredOptions.map(option => {\n option.selected = selectedItemIds.indexOf(option.id) !== -1;\n return option;\n });\n\n return (\n <BaseSelectDropdown\n isOpen={isOpen}\n isLoading={isLoading}\n options={nonSelectedOptions}\n focusedItemIndex={focusedItemIndex}\n keyboardUsed={keyboardUsed}\n updateDOMValues={updateDOMValues}\n onSelect={onOptionChange}\n onClose={closeMenu}\n noItemMessage={noItemMessage}\n pullRight={pullRight}\n useActiveClass\n dropup={dropup}\n autoDropDirection={autoDropDirection}\n dropdownClassName={dropdownClassName}\n />\n );\n };\n\n const handleFilterChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n\n const targetFilterValue = event.currentTarget.value;\n const optionsFiltered = filterOptions(itemDOMValues, targetFilterValue, options);\n\n if (!isOpen) {\n // Ensure dropdown stays open when filtering\n setIsOpen(true);\n }\n\n const newFocusedItemIndex = optionsFiltered.length > 0 ? 0 : -1;\n\n setIsFilterActive(true);\n setFilterValue(targetFilterValue);\n setFilteredOptions(optionsFiltered);\n\n if (optionsFiltered.length > 0) {\n // Only set keyboard used if there are filtered options\n setKeyboardUsed(true);\n }\n\n setFocusedItemIndex(newFocusedItemIndex);\n };\n\n const onOptionChange = (currentSelectedItem: MultiselectOption | undefined) => {\n // prevent selecting disabled Items via keyboard\n if (currentSelectedItem?.disabled) {\n return;\n }\n\n const updatedSelectedItems = currentSelectedItem ? updateSelection(currentSelectedItem.id) : selectedItemIds;\n\n // Reset everything after an option was selected. Remove the filter again.\n setSelectedItemIds(updatedSelectedItems);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n\n onChange(updatedSelectedItems);\n };\n\n const updateSelection = (selectedItemId: string) => {\n const newSelectedItems = [...selectedItemIds];\n const itemIndex = selectedItemIds.indexOf(selectedItemId);\n\n if (itemIndex !== -1) {\n newSelectedItems.splice(itemIndex, 1);\n } else {\n newSelectedItems.push(selectedItemId);\n }\n\n return newSelectedItems;\n };\n\n const handleRemoveSelectedItem = (event: React.MouseEvent<HTMLSpanElement>, itemId: string) => {\n event.stopPropagation();\n\n const newSelectedItems = updateSelection(itemId);\n setSelectedItemIds(newSelectedItems);\n\n onChange(newSelectedItems);\n };\n\n const handleToggleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'Space':\n if (!isOpen) {\n // open on space\n event.preventDefault();\n onToggle(event);\n }\n break;\n case 'Enter':\n if (!isOpen) {\n // open on enter\n event.preventDefault();\n onToggle(event);\n }\n break;\n default:\n break;\n }\n };\n\n const onToggle = (event: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>) => {\n // Don't toggle when component is disabled or an item in the toggle was clicked in order to remove from\n // selection neither close when filter is active, means entering some filter value\n // in order to avoid closing menu on space but allow to use it for filtering\n if (disabled || isFilterActive) {\n return;\n }\n\n // using the enter key on the toggle button will trigger a synthetic click event as all buttons are of\n // type submit by default in HTML. In order to differentiate between real click and a synthetic event\n // caused by they keyboard, use the event details. A synthetic event is always 0.\n const isKeyboardUsed = event.detail === 0;\n\n setIsOpen(prevValue => !prevValue);\n setKeyboardUsed(isKeyboardUsed);\n };\n\n const closeMenu = () => {\n if (isOpen) {\n setIsOpen(false);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n setFocusedItemIndex(DEFAULT_FOCUSED_ITEM_INDEX);\n setKeyboardUsed(false);\n\n refToggle?.current?.focus();\n }\n };\n\n const wrapperClasses = classNames(\n 'select',\n 'multiselect',\n 'dropdown',\n isOpen && 'open',\n hasError && 'has-error',\n className && className\n );\n\n return (\n <div {...remainingProps} className={wrapperClasses} ref={mergedSelectRefs}>\n {renderToggle()}\n {renderDropdownMenu()}\n </div>\n );\n};\n\nexport default Multiselect;\n"],"names":["DEFAULT_FOCUSED_ITEM_INDEX","Multiselect","props","name","id","options","value","onChange","noop","placeholder","isLoading","dropup","pullRight","autoDropDirection","bsSize","disabled","tabIndex","hasError","useFilter","multiline","noItemMessage","counterMessage","renderCounterMessage","showSelectedItemIcon","showUnselectedItemIcons","className","inputAddon","errorMessage","warningMessage","messageWhiteSpace","btnClassName","dropdownClassName","remainingProps","isOpen","setIsOpen","useState","selectedItemIds","setSelectedItemIds","isFilterActive","setIsFilterActive","filterValue","setFilterValue","filteredOptions","setFilteredOptions","itemDOMValues","setItemDOMValues","focusedItemIndex","setFocusedItemIndex","keyboardUsed","setKeyboardUsed","refToggle","useRef","refMultiSelectWrapper","ref","useClickOutside","event","closeMenu","mergedSelectRefs","useMergeRefs","updateSelectedItems","optionsToCheck","selectedItem","filteredBySelection","item","option","firstRenderRef","previousValue","setPreviousValue","isEqual","previousOptions","setPreviousOptions","updateDOMValues","updatedItemDOMValues","renderFilter","jsx","MultiselectToggleFilter","handleFilterChange","renderSelection","MultiselectToggleCounter","MultiselectToggleSelection","handleRemoveSelectedItem","renderToggle","wrapperClassNames","classNames","showPlaceholder","isEmpty","showFilter","toggleButton","jsxs","onToggle","handleToggleKeyDown","Fragment","MultiselectTogglePlaceholder","WithFeedbackAndAddon","renderDropdownMenu","nonSelectedOptions","BaseSelectDropdown","onOptionChange","targetFilterValue","optionsFiltered","filterOptions","newFocusedItemIndex","currentSelectedItem","updatedSelectedItems","updateSelection","selectedItemId","newSelectedItems","itemIndex","itemId","isKeyboardUsed","prevValue","wrapperClasses"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as o } from "react/jsx-runtime";
2
- import u from "classnames";
3
- import { isEmpty as a } from "es-toolkit/compat";
2
+ import { isEmpty as u } from "es-toolkit/compat";
3
+ import a from "../../utils/classNames.js";
4
4
  const p = (e) => {
5
- const { isActive: t, selectedItemIds: l, filterValue: s, onFilterChange: i } = e, r = u(
5
+ const { isActive: t, selectedItemIds: l, filterValue: s, onFilterChange: i } = e, r = a(
6
6
  "multiselect-filter-input",
7
- a(l) && "multiselect-filter-input-placeholder",
7
+ u(l) && "multiselect-filter-input-placeholder",
8
8
  t && "multiselect-filter-input-active"
9
9
  );
10
10
  return /* @__PURE__ */ o(
@@ -1 +1 @@
1
- {"version":3,"file":"MultiselectToggleFilter.js","sources":["../../../src/components/selects/MultiselectToggleFilter.tsx"],"sourcesContent":["import type React from 'react';\nimport classNames from 'classnames';\nimport { isEmpty } from 'es-toolkit/compat';\n\nexport type MultiselectToggleFilterProps = {\n isActive: boolean;\n selectedItemIds?: string[];\n filterValue: string;\n onFilterChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\nconst MultiselectToggleFilter = (props: MultiselectToggleFilterProps) => {\n const { isActive, selectedItemIds, filterValue, onFilterChange } = props;\n\n const inputClasses = classNames(\n 'multiselect-filter-input',\n isEmpty(selectedItemIds) && 'multiselect-filter-input-placeholder',\n isActive && 'multiselect-filter-input-active'\n );\n return (\n <input\n type='text'\n role='searchbox'\n className={inputClasses}\n // biome-ignore lint/a11y/noAutofocus: autofocus is intentionally set to allow instant typing to filter\n autoFocus\n onChange={onFilterChange}\n value={filterValue}\n />\n );\n};\n\nexport default MultiselectToggleFilter;\n"],"names":["MultiselectToggleFilter","props","isActive","selectedItemIds","filterValue","onFilterChange","inputClasses","classNames","isEmpty","jsx"],"mappings":";;;AAWA,MAAMA,IAA0B,CAACC,MAAwC;AACrE,QAAM,EAAE,UAAAC,GAAU,iBAAAC,GAAiB,aAAAC,GAAa,gBAAAC,MAAmBJ,GAE7DK,IAAeC;AAAA,IACjB;AAAA,IACAC,EAAQL,CAAe,KAAK;AAAA,IAC5BD,KAAY;AAAA,EAAA;AAEhB,SACI,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAK;AAAA,MACL,MAAK;AAAA,MACL,WAAWH;AAAA,MAEX,WAAS;AAAA,MACT,UAAUD;AAAA,MACV,OAAOD;AAAA,IAAA;AAAA,EAAA;AAGnB;"}
1
+ {"version":3,"file":"MultiselectToggleFilter.js","sources":["../../../src/components/selects/MultiselectToggleFilter.tsx"],"sourcesContent":["import type React from 'react';\nimport { isEmpty } from 'es-toolkit/compat';\n\nimport classNames from '../../utils/classNames';\n\nexport type MultiselectToggleFilterProps = {\n isActive: boolean;\n selectedItemIds?: string[];\n filterValue: string;\n onFilterChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\nconst MultiselectToggleFilter = (props: MultiselectToggleFilterProps) => {\n const { isActive, selectedItemIds, filterValue, onFilterChange } = props;\n\n const inputClasses = classNames(\n 'multiselect-filter-input',\n isEmpty(selectedItemIds) && 'multiselect-filter-input-placeholder',\n isActive && 'multiselect-filter-input-active'\n );\n return (\n <input\n type='text'\n role='searchbox'\n className={inputClasses}\n // biome-ignore lint/a11y/noAutofocus: autofocus is intentionally set to allow instant typing to filter\n autoFocus\n onChange={onFilterChange}\n value={filterValue}\n />\n );\n};\n\nexport default MultiselectToggleFilter;\n"],"names":["MultiselectToggleFilter","props","isActive","selectedItemIds","filterValue","onFilterChange","inputClasses","classNames","isEmpty","jsx"],"mappings":";;;AAYA,MAAMA,IAA0B,CAACC,MAAwC;AACrE,QAAM,EAAE,UAAAC,GAAU,iBAAAC,GAAiB,aAAAC,GAAa,gBAAAC,MAAmBJ,GAE7DK,IAAeC;AAAA,IACjB;AAAA,IACAC,EAAQL,CAAe,KAAK;AAAA,IAC5BD,KAAY;AAAA,EAAA;AAEhB,SACI,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAK;AAAA,MACL,MAAK;AAAA,MACL,WAAWH;AAAA,MAEX,WAAS;AAAA,MACT,UAAUD;AAAA,MACV,OAAOD;AAAA,IAAA;AAAA,EAAA;AAGnB;"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as a, jsx as s } from "react/jsx-runtime";
2
- import r from "classnames";
3
2
  import { isEmpty as v } from "es-toolkit/compat";
3
+ import r from "../../utils/classNames.js";
4
4
  const y = (d) => {
5
5
  const {
6
6
  options: n,
@@ -1 +1 @@
1
- {"version":3,"file":"MultiselectToggleSelection.js","sources":["../../../src/components/selects/MultiselectToggleSelection.tsx"],"sourcesContent":["import type React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport classNames from 'classnames';\nimport { isEmpty } from 'es-toolkit/compat';\n\nimport type { SelectOption } from './BaseSelectDropdown';\n\nexport type MultiselectToggleSelectionProps = {\n options: SelectOption[];\n selectedItemIds: string[];\n showSelectedItemIcon: boolean;\n showUnselectedItemIcons: boolean;\n multiline: boolean;\n hasInputAddon: boolean;\n hasFilter: boolean;\n onRemoveItem: (event: React.MouseEvent<HTMLSpanElement>, itemId: string) => void;\n};\n\nconst MultiselectToggleSelection = (props: PropsWithChildren<MultiselectToggleSelectionProps>) => {\n const {\n options,\n selectedItemIds,\n showSelectedItemIcon,\n showUnselectedItemIcons,\n multiline,\n hasInputAddon,\n hasFilter,\n onRemoveItem,\n children,\n } = props;\n\n if (!options || isEmpty(options)) {\n return null;\n }\n\n const isItemSelected = (item: SelectOption) => {\n return selectedItemIds.indexOf(item.id) !== -1;\n };\n\n const renderSelectionItem = (item: SelectOption, index: number) => {\n if (showSelectedItemIcon) {\n const inactiveClassNames = classNames('margin-right-5', !isItemSelected(item) && 'inactiveIcon');\n\n return (\n <span key={item.id} className={inactiveClassNames}>\n {item.icon}\n </span>\n );\n }\n\n return (\n <span key={index} className='selected-option'>\n <span className='selected-label'>\n {item.icon && <span className='margin-right-5'>{item.icon}</span>}\n {item.label}\n </span>\n <span\n className='removeIcon'\n onClick={event => {\n onRemoveItem(event, item.id);\n }}\n >\n <span className='rioglyph rioglyph-remove' />\n </span>\n </span>\n );\n };\n\n const optionListClassNames = classNames(\n !showSelectedItemIcon && !showUnselectedItemIcons && 'selected-option-list',\n multiline && 'flex-wrap',\n hasInputAddon && 'margin-left-0',\n hasFilter && 'padding-left-1'\n );\n\n return (\n <span className={optionListClassNames}>\n {options\n .filter(option => (showUnselectedItemIcons ? !option.header : isItemSelected(option)))\n .map((option, index) => renderSelectionItem(option, index))}\n {children}\n </span>\n );\n};\n\nexport default MultiselectToggleSelection;\n"],"names":["MultiselectToggleSelection","props","options","selectedItemIds","showSelectedItemIcon","showUnselectedItemIcons","multiline","hasInputAddon","hasFilter","onRemoveItem","children","isEmpty","isItemSelected","item","renderSelectionItem","index","inactiveClassNames","classNames","jsxs","jsx","event","optionListClassNames","option"],"mappings":";;;AAkBA,MAAMA,IAA6B,CAACC,MAA8D;AAC9F,QAAM;AAAA,IACF,SAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,IACAT;AAEJ,MAAI,CAACC,KAAWS,EAAQT,CAAO;AAC3B,WAAO;AAGX,QAAMU,IAAiB,CAACC,MACbV,EAAgB,QAAQU,EAAK,EAAE,MAAM,IAG1CC,IAAsB,CAACD,GAAoBE,MAAkB;AAC/D,QAAIX,GAAsB;AACtB,YAAMY,IAAqBC,EAAW,kBAAkB,CAACL,EAAeC,CAAI,KAAK,cAAc;AAE/F,+BACK,QAAA,EAAmB,WAAWG,GAC1B,UAAAH,EAAK,KAAA,GADCA,EAAK,EAEhB;AAAA,IAER;AAEA,WACI,gBAAAK,EAAC,QAAA,EAAiB,WAAU,mBACxB,UAAA;AAAA,MAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,kBACX,UAAA;AAAA,QAAAL,EAAK,QAAQ,gBAAAM,EAAC,QAAA,EAAK,WAAU,kBAAkB,YAAK,MAAK;AAAA,QACzDN,EAAK;AAAA,MAAA,GACV;AAAA,MACA,gBAAAM;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SAAS,CAAAC,MAAS;AACd,YAAAX,EAAaW,GAAOP,EAAK,EAAE;AAAA,UAC/B;AAAA,UAEA,UAAA,gBAAAM,EAAC,QAAA,EAAK,WAAU,2BAAA,CAA2B;AAAA,QAAA;AAAA,MAAA;AAAA,IAC/C,EAAA,GAZOJ,CAaX;AAAA,EAER,GAEMM,IAAuBJ;AAAA,IACzB,CAACb,KAAwB,CAACC,KAA2B;AAAA,IACrDC,KAAa;AAAA,IACbC,KAAiB;AAAA,IACjBC,KAAa;AAAA,EAAA;AAGjB,SACI,gBAAAU,EAAC,QAAA,EAAK,WAAWG,GACZ,UAAA;AAAA,IAAAnB,EACI,OAAO,CAAAoB,MAAWjB,IAA0B,CAACiB,EAAO,SAASV,EAAeU,CAAM,CAAE,EACpF,IAAI,CAACA,GAAQP,MAAUD,EAAoBQ,GAAQP,CAAK,CAAC;AAAA,IAC7DL;AAAA,EAAA,GACL;AAER;"}
1
+ {"version":3,"file":"MultiselectToggleSelection.js","sources":["../../../src/components/selects/MultiselectToggleSelection.tsx"],"sourcesContent":["import type React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { isEmpty } from 'es-toolkit/compat';\n\nimport classNames from '../../utils/classNames';\nimport type { SelectOption } from './BaseSelectDropdown';\n\nexport type MultiselectToggleSelectionProps = {\n options: SelectOption[];\n selectedItemIds: string[];\n showSelectedItemIcon: boolean;\n showUnselectedItemIcons: boolean;\n multiline: boolean;\n hasInputAddon: boolean;\n hasFilter: boolean;\n onRemoveItem: (event: React.MouseEvent<HTMLSpanElement>, itemId: string) => void;\n};\n\nconst MultiselectToggleSelection = (props: PropsWithChildren<MultiselectToggleSelectionProps>) => {\n const {\n options,\n selectedItemIds,\n showSelectedItemIcon,\n showUnselectedItemIcons,\n multiline,\n hasInputAddon,\n hasFilter,\n onRemoveItem,\n children,\n } = props;\n\n if (!options || isEmpty(options)) {\n return null;\n }\n\n const isItemSelected = (item: SelectOption) => {\n return selectedItemIds.indexOf(item.id) !== -1;\n };\n\n const renderSelectionItem = (item: SelectOption, index: number) => {\n if (showSelectedItemIcon) {\n const inactiveClassNames = classNames('margin-right-5', !isItemSelected(item) && 'inactiveIcon');\n\n return (\n <span key={item.id} className={inactiveClassNames}>\n {item.icon}\n </span>\n );\n }\n\n return (\n <span key={index} className='selected-option'>\n <span className='selected-label'>\n {item.icon && <span className='margin-right-5'>{item.icon}</span>}\n {item.label}\n </span>\n <span\n className='removeIcon'\n onClick={event => {\n onRemoveItem(event, item.id);\n }}\n >\n <span className='rioglyph rioglyph-remove' />\n </span>\n </span>\n );\n };\n\n const optionListClassNames = classNames(\n !showSelectedItemIcon && !showUnselectedItemIcons && 'selected-option-list',\n multiline && 'flex-wrap',\n hasInputAddon && 'margin-left-0',\n hasFilter && 'padding-left-1'\n );\n\n return (\n <span className={optionListClassNames}>\n {options\n .filter(option => (showUnselectedItemIcons ? !option.header : isItemSelected(option)))\n .map((option, index) => renderSelectionItem(option, index))}\n {children}\n </span>\n );\n};\n\nexport default MultiselectToggleSelection;\n"],"names":["MultiselectToggleSelection","props","options","selectedItemIds","showSelectedItemIcon","showUnselectedItemIcons","multiline","hasInputAddon","hasFilter","onRemoveItem","children","isEmpty","isItemSelected","item","renderSelectionItem","index","inactiveClassNames","classNames","jsxs","jsx","event","optionListClassNames","option"],"mappings":";;;AAkBA,MAAMA,IAA6B,CAACC,MAA8D;AAC9F,QAAM;AAAA,IACF,SAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,EAAA,IACAT;AAEJ,MAAI,CAACC,KAAWS,EAAQT,CAAO;AAC3B,WAAO;AAGX,QAAMU,IAAiB,CAACC,MACbV,EAAgB,QAAQU,EAAK,EAAE,MAAM,IAG1CC,IAAsB,CAACD,GAAoBE,MAAkB;AAC/D,QAAIX,GAAsB;AACtB,YAAMY,IAAqBC,EAAW,kBAAkB,CAACL,EAAeC,CAAI,KAAK,cAAc;AAE/F,+BACK,QAAA,EAAmB,WAAWG,GAC1B,UAAAH,EAAK,KAAA,GADCA,EAAK,EAEhB;AAAA,IAER;AAEA,WACI,gBAAAK,EAAC,QAAA,EAAiB,WAAU,mBACxB,UAAA;AAAA,MAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,kBACX,UAAA;AAAA,QAAAL,EAAK,QAAQ,gBAAAM,EAAC,QAAA,EAAK,WAAU,kBAAkB,YAAK,MAAK;AAAA,QACzDN,EAAK;AAAA,MAAA,GACV;AAAA,MACA,gBAAAM;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SAAS,CAAAC,MAAS;AACd,YAAAX,EAAaW,GAAOP,EAAK,EAAE;AAAA,UAC/B;AAAA,UAEA,UAAA,gBAAAM,EAAC,QAAA,EAAK,WAAU,2BAAA,CAA2B;AAAA,QAAA;AAAA,MAAA;AAAA,IAC/C,EAAA,GAZOJ,CAaX;AAAA,EAER,GAEMM,IAAuBJ;AAAA,IACzB,CAACb,KAAwB,CAACC,KAA2B;AAAA,IACrDC,KAAa;AAAA,IACbC,KAAiB;AAAA,IACjBC,KAAa;AAAA,EAAA;AAGjB,SACI,gBAAAU,EAAC,QAAA,EAAK,WAAWG,GACZ,UAAA;AAAA,IAAAnB,EACI,OAAO,CAAAoB,MAAWjB,IAA0B,CAACiB,EAAO,SAASV,EAAeU,CAAM,CAAE,EACpF,IAAI,CAACA,GAAQP,MAAUD,EAAoBQ,GAAQP,CAAK,CAAC;AAAA,IAC7DL;AAAA,EAAA,GACL;AAER;"}
@@ -1,8 +1,8 @@
1
1
  import { jsxs as U, jsx as i } from "react/jsx-runtime";
2
2
  import { useState as o, useRef as V } from "react";
3
- import k from "classnames";
4
- import { isEqual as K } from "es-toolkit/predicate";
3
+ import { isEqual as k } from "es-toolkit/predicate";
5
4
  import { noop as Oe, isEmpty as be } from "es-toolkit/compat";
5
+ import K from "../../utils/classNames.js";
6
6
  import ve, { filterOptions as xe } from "./BaseSelectDropdown.js";
7
7
  import we from "../../hooks/useClickOutside.js";
8
8
  import De from "../../hooks/useEffectOnce.js";
@@ -49,15 +49,15 @@ const u = -1, ze = (R) => {
49
49
  C(t, n);
50
50
  });
51
51
  const [ie, ce] = o(t);
52
- K(t, ie) || (C(t, n), l(t), ce(t));
52
+ k(t, ie) || (C(t, n), l(t), ce(t));
53
53
  const [de, fe] = o(n);
54
- K(n, de) || (C(t, n), fe(n));
54
+ k(n, de) || (C(t, n), fe(n));
55
55
  const ue = (e = []) => {
56
56
  !e.length || (I || A) && T.length > 0 || oe(e);
57
57
  }, pe = () => {
58
58
  p(null), c(!1), d(""), l(t), f(!1), m(u), O(void 0);
59
59
  }, me = () => {
60
- const e = k(
60
+ const e = K(
61
61
  "dropdown-toggle",
62
62
  "form-control",
63
63
  "text-left",
@@ -152,7 +152,7 @@ const u = -1, ze = (R) => {
152
152
  N(!r), f(s);
153
153
  }, S = () => {
154
154
  r && (N(!1), c(!1), d(""), l(t), f(!1), m(u), P.current?.focus());
155
- }, Se = k("select", "dropdown", r && "open", G && "has-error", w && w);
155
+ }, Se = K("select", "dropdown", r && "open", G && "has-error", w && w);
156
156
  return /* @__PURE__ */ U("div", { ...te, className: Se, ref: ae, children: [
157
157
  me(),
158
158
  ge()
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sources":["../../../src/components/selects/Select.tsx"],"sourcesContent":["import type React from 'react';\nimport { useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { isEqual } from 'es-toolkit/predicate';\nimport { isEmpty, noop } from 'es-toolkit/compat';\n\nimport BaseSelectDropdown, { filterOptions, type OptionDOMValue, type SelectOption } from './BaseSelectDropdown';\nimport useClickOutside from '../../useClickOutside';\nimport useEffectOnce from '../../hooks/useEffectOnce';\nimport useMergeRefs from '../../hooks/useMergeRefs';\nimport ClearButton from './ClearButton';\nimport SelectFilter from './SelectFilter';\nimport SelectedOption from './SelectedOption';\nimport WithFeedbackAndAddon, { type WithFeedbackAndAddonProps } from './WithFeedbackAndAddon';\n\nexport type { SelectOption } from './BaseSelectDropdown';\n\nconst DEFAULT_FOCUSED_ITEM_INDEX = -1;\n\n/**\n * Note: Even with a pre-selected item, when it first opens the dropdown it renders the full options list,\n * not just the selected one. The filter is only usable while the dropdown is open.\n */\nexport type SelectProps<T extends SelectOption> = Omit<WithFeedbackAndAddonProps, 'bsSize'> & {\n /**\n * Passed through as HTML attribute to the toggle button.\n */\n name?: string;\n\n /**\n * Passed through as HTML attribute to the toggle button.\n *\n * @default Uses the value given to `name` if not provided explicitly.\n */\n id?: string;\n\n /**\n * The toggle label in front of the selected text.\n */\n label?: string | React.ReactNode;\n\n /**\n * Items to display in the dropdown menu.\n *\n * @default []\n */\n options?: T[];\n\n /**\n * Sets the ids of the selected options when the component is already mounted.\n */\n value?: string[];\n\n /**\n * Callback function triggered when an item is selected.\n *\n * @param selectedOption The option that was selected (or undefined if none was).\n *\n * @default () => {}\n */\n onChange?: (selectOption: T | undefined) => void;\n\n /**\n * Text to display when nothing is selected.\n */\n placeholder?: string | React.ReactNode;\n\n /**\n * Defines whether the dropdown opens upwards.\n *\n * Set to `true` additionally disables autoDrop feature.\n *\n * @default false\n */\n dropup?: boolean;\n\n /**\n * Defines whether the dropdown opens right aligned to the dropdown toggle.\n *\n * Set to 'true' additionally disables autoDrop feature.\n *\n * @default false\n */\n pullRight?: boolean;\n\n /**\n * Enables or disables the autoDrop positioning feature.\n *\n * When enabled, the option list opens below or above the input depending on the surrounding space.\n *\n * @default true\n */\n autoDropDirection?: boolean;\n\n /**\n * Defines the size of the select to be rendered.\n *\n * @default 'md'\n */\n bsSize?: 'sm' | 'md' | 'lg';\n\n /**\n * Option to disable the opening of the option list.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Sets the input's tabindex attribute.\n *\n * The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being\n * sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for\n * sequential focus navigation.\n *\n * @default 0\n */\n tabIndex?: number;\n\n /**\n * Defines whether the Bootstrap error classes shall be added to the toggle element.\n *\n * @default false\n */\n hasError?: boolean;\n\n /**\n * Defines whether the component should be filterable.\n *\n * @default false\n */\n useFilter?: boolean;\n\n /**\n * Set to show a clear button.\n *\n * @default false\n */\n useClear?: boolean;\n\n /**\n * Shows a loading spinner instead of the menu items if set to true.\n *\n * @default false\n */\n isLoading?: boolean;\n\n /**\n * Text that shall be shown when not match was found when filtering.\n */\n noItemMessage?: string | React.ReactNode;\n\n /**\n * Text or node to be rendered on the toggle select instead of the selected item label.\n */\n selectedOptionText?: string | React.ReactNode;\n\n /**\n * Set to show only the icon and not the label of selected item.\n *\n * @default false\n */\n showSelectedItemIcon?: boolean;\n\n /**\n * Set to show all item icons within the toggle element.\n *\n * Selected items are highlighted and unselected items are shown as inactive.\n *\n * @default false\n */\n showUnselectedItemIcons?: boolean;\n\n /**\n * Additional classes to be set to the dropdown.\n */\n dropdownClassName?: string;\n\n /**\n * Additional classes to be set to the select/input.\n */\n btnClassName?: string;\n\n /**\n * Additional classes to be set to the select wrapper.\n */\n className?: string;\n};\n\nconst Select = <T extends SelectOption>(props: SelectProps<T>) => {\n const {\n name,\n id = name,\n label,\n options = [],\n value,\n onChange = noop,\n placeholder,\n isLoading = false,\n dropup = false,\n pullRight = false,\n autoDropDirection = true,\n bsSize = 'md',\n disabled = false,\n tabIndex = 0,\n hasError = false,\n useFilter = false,\n useClear = false,\n noItemMessage,\n selectedOptionText,\n showSelectedItemIcon = false,\n showUnselectedItemIcons = false,\n dropdownClassName,\n btnClassName,\n className,\n\n inputAddon,\n errorMessage,\n warningMessage,\n messageWhiteSpace = 'normal',\n\n ...remainingProps\n } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedItem, setSelectedItem] = useState<SelectOption | null>(null);\n const [isFilterActive, setIsFilterActive] = useState(false);\n const [filterValue, setFilterValue] = useState('');\n const [filteredOptions, setFilteredOptions] = useState(options);\n const [itemDOMValues, setItemDOMValues] = useState<OptionDOMValue[]>([]);\n const [focusedItemIndex, setFocusedItemIndex] = useState(DEFAULT_FOCUSED_ITEM_INDEX);\n const [keyboardUsed, setKeyboardUsed] = useState(false);\n\n const refSelect = useRef();\n const refToggle = useRef<HTMLButtonElement>(null);\n\n const ref = useClickOutside(() => closeMenu());\n const mergedSelectRefs = useMergeRefs(refSelect, ref);\n\n const updateSelectedItem = (selectOptions: SelectOption[], updatedValue: string[] | undefined) => {\n if (updatedValue && !isEmpty(updatedValue)) {\n setSelectedItem(selectOptions.find(item => item.id === updatedValue[0]) || null);\n } else if (selectOptions) {\n setSelectedItem(selectOptions.find(item => item.selected) || null);\n }\n };\n\n useEffectOnce(() => {\n updateSelectedItem(options, value);\n });\n\n const [previousOptions, setPreviousOptions] = useState(options);\n if (!isEqual(options, previousOptions)) {\n updateSelectedItem(options, value);\n setFilteredOptions(options);\n setPreviousOptions(options);\n }\n\n const [previousValue, setPreviousValue] = useState(value);\n if (!isEqual(value, previousValue)) {\n updateSelectedItem(options, value);\n setPreviousValue(value);\n }\n\n const updateDOMValues = (itemDOMValuesToUpdated: OptionDOMValue[] = []) => {\n // Skip updates when we have nothing new, or when filtering is active and we already hold a full snapshot.\n if (!itemDOMValuesToUpdated.length) {\n return;\n }\n\n const shouldKeepPreviousSnapshot = (isFilterActive || filterValue) && itemDOMValues.length > 0;\n if (shouldKeepPreviousSnapshot) {\n return;\n }\n\n setItemDOMValues(itemDOMValuesToUpdated);\n };\n\n const handleClearSelectedItem = () => {\n setSelectedItem(null);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n setKeyboardUsed(false);\n setFocusedItemIndex(DEFAULT_FOCUSED_ITEM_INDEX);\n\n onChange(undefined);\n };\n\n const renderToggle = () => {\n const toggleClasses = classNames(\n 'dropdown-toggle',\n 'form-control',\n 'text-left',\n btnClassName && btnClassName,\n bsSize === 'sm' && 'input-sm',\n bsSize === 'lg' && 'input-lg',\n disabled && 'disabled'\n );\n\n const toggleButton = (\n <button\n type='button'\n id={id}\n name={name}\n className={toggleClasses}\n data-toggle='dropdown'\n tabIndex={tabIndex}\n aria-haspopup='true'\n aria-expanded={isOpen}\n onClick={onToggle}\n ref={refToggle}\n >\n {useFilter && isOpen && (\n <SelectFilter\n isFilterActive={isFilterActive}\n filterValue={filterValue}\n onChange={handleFilterChange}\n />\n )}\n {selectedOptionText ? (\n selectedOptionText\n ) : (\n <SelectedOption\n label={label}\n placeholder={placeholder}\n selectedItem={selectedItem}\n options={options}\n showSelectedItemIcon={showSelectedItemIcon}\n showUnselectedItemIcons={showUnselectedItemIcons}\n />\n )}\n <ClearButton showClear={useClear} selectedItem={selectedItem} onClear={handleClearSelectedItem} />\n <span className='caret' />\n </button>\n );\n\n if (!inputAddon && !errorMessage && !warningMessage) {\n return toggleButton;\n }\n\n return (\n <WithFeedbackAndAddon\n bsSize={bsSize}\n inputAddon={inputAddon}\n errorMessage={errorMessage}\n warningMessage={warningMessage}\n messageWhiteSpace={messageWhiteSpace}\n >\n {toggleButton}\n </WithFeedbackAndAddon>\n );\n };\n\n const renderDropdownMenu = () => {\n // Start from the last tracked focus; only default to the first item when opened via keyboard and nothing is selected.\n let currentFocusedItemIndex = focusedItemIndex;\n\n // Do not auto-highlight a selected item on open; let keyboard navigation start from \"no focus\".\n // Only default to the first item when opened via keyboard and nothing was selected.\n if (keyboardUsed && !selectedItem) {\n currentFocusedItemIndex = 0;\n }\n\n return (\n <BaseSelectDropdown\n isOpen={isOpen}\n isLoading={isLoading}\n options={filteredOptions}\n focusedItemIndex={currentFocusedItemIndex}\n keyboardUsed={keyboardUsed}\n updateDOMValues={updateDOMValues}\n onSelect={onOptionChange}\n onClose={closeMenu}\n noItemMessage={noItemMessage}\n pullRight={pullRight}\n dropup={dropup}\n autoDropDirection={autoDropDirection}\n dropdownClassName={dropdownClassName}\n />\n );\n };\n\n const handleFilterChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n\n const targetFilterValue = event.currentTarget.value;\n\n // if cleared: reset to defaults and bail early\n if (targetFilterValue === '') {\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n setKeyboardUsed(false);\n setFocusedItemIndex(DEFAULT_FOCUSED_ITEM_INDEX);\n return;\n }\n\n // otherwise: filter against the last known non-empty DOM snapshot\n const currentFilteredOptions = filterOptions(itemDOMValues, targetFilterValue, options);\n\n // highlight the first item of the search result if at least one item was found\n const newFocusedItemIndex = currentFilteredOptions.length > 0 ? 0 : DEFAULT_FOCUSED_ITEM_INDEX;\n\n setIsFilterActive(true);\n setFilterValue(targetFilterValue);\n setFilteredOptions(currentFilteredOptions);\n setKeyboardUsed(true);\n setFocusedItemIndex(newFocusedItemIndex);\n };\n\n const onOptionChange = (currentSelectedItem: T | undefined) => {\n setSelectedItem(currentSelectedItem || null);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n\n onChange(currentSelectedItem);\n\n closeMenu();\n };\n\n const onToggle = (event: React.MouseEvent<HTMLButtonElement>) => {\n // Don't toggle when component is disabled or\n // when filter is active, means entering some filter value\n // in order to avoid closing menu on space but allow to use it for filtering\n if (disabled || isFilterActive) {\n return;\n }\n\n // using the enter key on the toggle button will trigger a synthetic click event as all buttons are of\n // type submit by default in HTML. In order to differentiate between real click and a synthetic event\n // caused by they keyboard, use the event details. A synthetic event is always 0.\n const isKeyboardUsed = event.detail === 0;\n\n setIsOpen(!isOpen);\n setKeyboardUsed(isKeyboardUsed);\n };\n\n const closeMenu = () => {\n if (isOpen) {\n setIsOpen(false);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n setKeyboardUsed(false);\n setFocusedItemIndex(DEFAULT_FOCUSED_ITEM_INDEX);\n refToggle.current?.focus();\n }\n };\n\n const classes = classNames('select', 'dropdown', isOpen && 'open', hasError && 'has-error', className && className);\n\n return (\n <div {...remainingProps} className={classes} ref={mergedSelectRefs}>\n {renderToggle()}\n {renderDropdownMenu()}\n </div>\n );\n};\n\nexport default Select;\n"],"names":["DEFAULT_FOCUSED_ITEM_INDEX","Select","props","name","id","label","options","value","onChange","noop","placeholder","isLoading","dropup","pullRight","autoDropDirection","bsSize","disabled","tabIndex","hasError","useFilter","useClear","noItemMessage","selectedOptionText","showSelectedItemIcon","showUnselectedItemIcons","dropdownClassName","btnClassName","className","inputAddon","errorMessage","warningMessage","messageWhiteSpace","remainingProps","isOpen","setIsOpen","useState","selectedItem","setSelectedItem","isFilterActive","setIsFilterActive","filterValue","setFilterValue","filteredOptions","setFilteredOptions","itemDOMValues","setItemDOMValues","focusedItemIndex","setFocusedItemIndex","keyboardUsed","setKeyboardUsed","refSelect","useRef","refToggle","ref","useClickOutside","closeMenu","mergedSelectRefs","useMergeRefs","updateSelectedItem","selectOptions","updatedValue","isEmpty","item","useEffectOnce","previousOptions","setPreviousOptions","isEqual","previousValue","setPreviousValue","updateDOMValues","itemDOMValuesToUpdated","handleClearSelectedItem","renderToggle","toggleClasses","classNames","toggleButton","jsxs","onToggle","jsx","SelectFilter","handleFilterChange","SelectedOption","ClearButton","WithFeedbackAndAddon","renderDropdownMenu","currentFocusedItemIndex","BaseSelectDropdown","onOptionChange","event","targetFilterValue","currentFilteredOptions","filterOptions","newFocusedItemIndex","currentSelectedItem","isKeyboardUsed","classes"],"mappings":"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"}
1
+ {"version":3,"file":"Select.js","sources":["../../../src/components/selects/Select.tsx"],"sourcesContent":["import type React from 'react';\nimport { useRef, useState } from 'react';\nimport { isEqual } from 'es-toolkit/predicate';\nimport { isEmpty, noop } from 'es-toolkit/compat';\n\nimport classNames from '../../utils/classNames';\nimport BaseSelectDropdown, { filterOptions, type OptionDOMValue, type SelectOption } from './BaseSelectDropdown';\nimport useClickOutside from '../../useClickOutside';\nimport useEffectOnce from '../../hooks/useEffectOnce';\nimport useMergeRefs from '../../hooks/useMergeRefs';\nimport ClearButton from './ClearButton';\nimport SelectFilter from './SelectFilter';\nimport SelectedOption from './SelectedOption';\nimport WithFeedbackAndAddon, { type WithFeedbackAndAddonProps } from './WithFeedbackAndAddon';\n\nexport type { SelectOption } from './BaseSelectDropdown';\n\nconst DEFAULT_FOCUSED_ITEM_INDEX = -1;\n\n/**\n * Note: Even with a pre-selected item, when it first opens the dropdown it renders the full options list,\n * not just the selected one. The filter is only usable while the dropdown is open.\n */\nexport type SelectProps<T extends SelectOption> = Omit<WithFeedbackAndAddonProps, 'bsSize'> & {\n /**\n * Passed through as HTML attribute to the toggle button.\n */\n name?: string;\n\n /**\n * Passed through as HTML attribute to the toggle button.\n *\n * @default Uses the value given to `name` if not provided explicitly.\n */\n id?: string;\n\n /**\n * The toggle label in front of the selected text.\n */\n label?: string | React.ReactNode;\n\n /**\n * Items to display in the dropdown menu.\n *\n * @default []\n */\n options?: T[];\n\n /**\n * Sets the ids of the selected options when the component is already mounted.\n */\n value?: string[];\n\n /**\n * Callback function triggered when an item is selected.\n *\n * @param selectedOption The option that was selected (or undefined if none was).\n *\n * @default () => {}\n */\n onChange?: (selectOption: T | undefined) => void;\n\n /**\n * Text to display when nothing is selected.\n */\n placeholder?: string | React.ReactNode;\n\n /**\n * Defines whether the dropdown opens upwards.\n *\n * Set to `true` additionally disables autoDrop feature.\n *\n * @default false\n */\n dropup?: boolean;\n\n /**\n * Defines whether the dropdown opens right aligned to the dropdown toggle.\n *\n * Set to 'true' additionally disables autoDrop feature.\n *\n * @default false\n */\n pullRight?: boolean;\n\n /**\n * Enables or disables the autoDrop positioning feature.\n *\n * When enabled, the option list opens below or above the input depending on the surrounding space.\n *\n * @default true\n */\n autoDropDirection?: boolean;\n\n /**\n * Defines the size of the select to be rendered.\n *\n * @default 'md'\n */\n bsSize?: 'sm' | 'md' | 'lg';\n\n /**\n * Option to disable the opening of the option list.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Sets the input's tabindex attribute.\n *\n * The tabindex attribute allows developers to make HTML elements focusable, allow or prevent them from being\n * sequentially focusable (usually with the Tab key, hence the name) and determine their relative ordering for\n * sequential focus navigation.\n *\n * @default 0\n */\n tabIndex?: number;\n\n /**\n * Defines whether the Bootstrap error classes shall be added to the toggle element.\n *\n * @default false\n */\n hasError?: boolean;\n\n /**\n * Defines whether the component should be filterable.\n *\n * @default false\n */\n useFilter?: boolean;\n\n /**\n * Set to show a clear button.\n *\n * @default false\n */\n useClear?: boolean;\n\n /**\n * Shows a loading spinner instead of the menu items if set to true.\n *\n * @default false\n */\n isLoading?: boolean;\n\n /**\n * Text that shall be shown when not match was found when filtering.\n */\n noItemMessage?: string | React.ReactNode;\n\n /**\n * Text or node to be rendered on the toggle select instead of the selected item label.\n */\n selectedOptionText?: string | React.ReactNode;\n\n /**\n * Set to show only the icon and not the label of selected item.\n *\n * @default false\n */\n showSelectedItemIcon?: boolean;\n\n /**\n * Set to show all item icons within the toggle element.\n *\n * Selected items are highlighted and unselected items are shown as inactive.\n *\n * @default false\n */\n showUnselectedItemIcons?: boolean;\n\n /**\n * Additional classes to be set to the dropdown.\n */\n dropdownClassName?: string;\n\n /**\n * Additional classes to be set to the select/input.\n */\n btnClassName?: string;\n\n /**\n * Additional classes to be set to the select wrapper.\n */\n className?: string;\n};\n\nconst Select = <T extends SelectOption>(props: SelectProps<T>) => {\n const {\n name,\n id = name,\n label,\n options = [],\n value,\n onChange = noop,\n placeholder,\n isLoading = false,\n dropup = false,\n pullRight = false,\n autoDropDirection = true,\n bsSize = 'md',\n disabled = false,\n tabIndex = 0,\n hasError = false,\n useFilter = false,\n useClear = false,\n noItemMessage,\n selectedOptionText,\n showSelectedItemIcon = false,\n showUnselectedItemIcons = false,\n dropdownClassName,\n btnClassName,\n className,\n\n inputAddon,\n errorMessage,\n warningMessage,\n messageWhiteSpace = 'normal',\n\n ...remainingProps\n } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedItem, setSelectedItem] = useState<SelectOption | null>(null);\n const [isFilterActive, setIsFilterActive] = useState(false);\n const [filterValue, setFilterValue] = useState('');\n const [filteredOptions, setFilteredOptions] = useState(options);\n const [itemDOMValues, setItemDOMValues] = useState<OptionDOMValue[]>([]);\n const [focusedItemIndex, setFocusedItemIndex] = useState(DEFAULT_FOCUSED_ITEM_INDEX);\n const [keyboardUsed, setKeyboardUsed] = useState(false);\n\n const refSelect = useRef();\n const refToggle = useRef<HTMLButtonElement>(null);\n\n const ref = useClickOutside(() => closeMenu());\n const mergedSelectRefs = useMergeRefs(refSelect, ref);\n\n const updateSelectedItem = (selectOptions: SelectOption[], updatedValue: string[] | undefined) => {\n if (updatedValue && !isEmpty(updatedValue)) {\n setSelectedItem(selectOptions.find(item => item.id === updatedValue[0]) || null);\n } else if (selectOptions) {\n setSelectedItem(selectOptions.find(item => item.selected) || null);\n }\n };\n\n useEffectOnce(() => {\n updateSelectedItem(options, value);\n });\n\n const [previousOptions, setPreviousOptions] = useState(options);\n if (!isEqual(options, previousOptions)) {\n updateSelectedItem(options, value);\n setFilteredOptions(options);\n setPreviousOptions(options);\n }\n\n const [previousValue, setPreviousValue] = useState(value);\n if (!isEqual(value, previousValue)) {\n updateSelectedItem(options, value);\n setPreviousValue(value);\n }\n\n const updateDOMValues = (itemDOMValuesToUpdated: OptionDOMValue[] = []) => {\n // Skip updates when we have nothing new, or when filtering is active and we already hold a full snapshot.\n if (!itemDOMValuesToUpdated.length) {\n return;\n }\n\n const shouldKeepPreviousSnapshot = (isFilterActive || filterValue) && itemDOMValues.length > 0;\n if (shouldKeepPreviousSnapshot) {\n return;\n }\n\n setItemDOMValues(itemDOMValuesToUpdated);\n };\n\n const handleClearSelectedItem = () => {\n setSelectedItem(null);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n setKeyboardUsed(false);\n setFocusedItemIndex(DEFAULT_FOCUSED_ITEM_INDEX);\n\n onChange(undefined);\n };\n\n const renderToggle = () => {\n const toggleClasses = classNames(\n 'dropdown-toggle',\n 'form-control',\n 'text-left',\n btnClassName && btnClassName,\n bsSize === 'sm' && 'input-sm',\n bsSize === 'lg' && 'input-lg',\n disabled && 'disabled'\n );\n\n const toggleButton = (\n <button\n type='button'\n id={id}\n name={name}\n className={toggleClasses}\n data-toggle='dropdown'\n tabIndex={tabIndex}\n aria-haspopup='true'\n aria-expanded={isOpen}\n onClick={onToggle}\n ref={refToggle}\n >\n {useFilter && isOpen && (\n <SelectFilter\n isFilterActive={isFilterActive}\n filterValue={filterValue}\n onChange={handleFilterChange}\n />\n )}\n {selectedOptionText ? (\n selectedOptionText\n ) : (\n <SelectedOption\n label={label}\n placeholder={placeholder}\n selectedItem={selectedItem}\n options={options}\n showSelectedItemIcon={showSelectedItemIcon}\n showUnselectedItemIcons={showUnselectedItemIcons}\n />\n )}\n <ClearButton showClear={useClear} selectedItem={selectedItem} onClear={handleClearSelectedItem} />\n <span className='caret' />\n </button>\n );\n\n if (!inputAddon && !errorMessage && !warningMessage) {\n return toggleButton;\n }\n\n return (\n <WithFeedbackAndAddon\n bsSize={bsSize}\n inputAddon={inputAddon}\n errorMessage={errorMessage}\n warningMessage={warningMessage}\n messageWhiteSpace={messageWhiteSpace}\n >\n {toggleButton}\n </WithFeedbackAndAddon>\n );\n };\n\n const renderDropdownMenu = () => {\n // Start from the last tracked focus; only default to the first item when opened via keyboard and nothing is selected.\n let currentFocusedItemIndex = focusedItemIndex;\n\n // Do not auto-highlight a selected item on open; let keyboard navigation start from \"no focus\".\n // Only default to the first item when opened via keyboard and nothing was selected.\n if (keyboardUsed && !selectedItem) {\n currentFocusedItemIndex = 0;\n }\n\n return (\n <BaseSelectDropdown\n isOpen={isOpen}\n isLoading={isLoading}\n options={filteredOptions}\n focusedItemIndex={currentFocusedItemIndex}\n keyboardUsed={keyboardUsed}\n updateDOMValues={updateDOMValues}\n onSelect={onOptionChange}\n onClose={closeMenu}\n noItemMessage={noItemMessage}\n pullRight={pullRight}\n dropup={dropup}\n autoDropDirection={autoDropDirection}\n dropdownClassName={dropdownClassName}\n />\n );\n };\n\n const handleFilterChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n\n const targetFilterValue = event.currentTarget.value;\n\n // if cleared: reset to defaults and bail early\n if (targetFilterValue === '') {\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n setKeyboardUsed(false);\n setFocusedItemIndex(DEFAULT_FOCUSED_ITEM_INDEX);\n return;\n }\n\n // otherwise: filter against the last known non-empty DOM snapshot\n const currentFilteredOptions = filterOptions(itemDOMValues, targetFilterValue, options);\n\n // highlight the first item of the search result if at least one item was found\n const newFocusedItemIndex = currentFilteredOptions.length > 0 ? 0 : DEFAULT_FOCUSED_ITEM_INDEX;\n\n setIsFilterActive(true);\n setFilterValue(targetFilterValue);\n setFilteredOptions(currentFilteredOptions);\n setKeyboardUsed(true);\n setFocusedItemIndex(newFocusedItemIndex);\n };\n\n const onOptionChange = (currentSelectedItem: T | undefined) => {\n setSelectedItem(currentSelectedItem || null);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n\n onChange(currentSelectedItem);\n\n closeMenu();\n };\n\n const onToggle = (event: React.MouseEvent<HTMLButtonElement>) => {\n // Don't toggle when component is disabled or\n // when filter is active, means entering some filter value\n // in order to avoid closing menu on space but allow to use it for filtering\n if (disabled || isFilterActive) {\n return;\n }\n\n // using the enter key on the toggle button will trigger a synthetic click event as all buttons are of\n // type submit by default in HTML. In order to differentiate between real click and a synthetic event\n // caused by they keyboard, use the event details. A synthetic event is always 0.\n const isKeyboardUsed = event.detail === 0;\n\n setIsOpen(!isOpen);\n setKeyboardUsed(isKeyboardUsed);\n };\n\n const closeMenu = () => {\n if (isOpen) {\n setIsOpen(false);\n setIsFilterActive(false);\n setFilterValue('');\n setFilteredOptions(options);\n setKeyboardUsed(false);\n setFocusedItemIndex(DEFAULT_FOCUSED_ITEM_INDEX);\n refToggle.current?.focus();\n }\n };\n\n const classes = classNames('select', 'dropdown', isOpen && 'open', hasError && 'has-error', className && className);\n\n return (\n <div {...remainingProps} className={classes} ref={mergedSelectRefs}>\n {renderToggle()}\n {renderDropdownMenu()}\n </div>\n );\n};\n\nexport default Select;\n"],"names":["DEFAULT_FOCUSED_ITEM_INDEX","Select","props","name","id","label","options","value","onChange","noop","placeholder","isLoading","dropup","pullRight","autoDropDirection","bsSize","disabled","tabIndex","hasError","useFilter","useClear","noItemMessage","selectedOptionText","showSelectedItemIcon","showUnselectedItemIcons","dropdownClassName","btnClassName","className","inputAddon","errorMessage","warningMessage","messageWhiteSpace","remainingProps","isOpen","setIsOpen","useState","selectedItem","setSelectedItem","isFilterActive","setIsFilterActive","filterValue","setFilterValue","filteredOptions","setFilteredOptions","itemDOMValues","setItemDOMValues","focusedItemIndex","setFocusedItemIndex","keyboardUsed","setKeyboardUsed","refSelect","useRef","refToggle","ref","useClickOutside","closeMenu","mergedSelectRefs","useMergeRefs","updateSelectedItem","selectOptions","updatedValue","isEmpty","item","useEffectOnce","previousOptions","setPreviousOptions","isEqual","previousValue","setPreviousValue","updateDOMValues","itemDOMValuesToUpdated","handleClearSelectedItem","renderToggle","toggleClasses","classNames","toggleButton","jsxs","onToggle","jsx","SelectFilter","handleFilterChange","SelectedOption","ClearButton","WithFeedbackAndAddon","renderDropdownMenu","currentFocusedItemIndex","BaseSelectDropdown","onOptionChange","event","targetFilterValue","currentFilteredOptions","filterOptions","newFocusedItemIndex","currentSelectedItem","isKeyboardUsed","classes"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as r } from "react/jsx-runtime";
2
- import a from "classnames";
2
+ import a from "../../utils/classNames.js";
3
3
  const u = (e) => {
4
4
  const { isFilterActive: s, filterValue: t, onChange: i } = e, l = a(
5
5
  "select-filter-input",
@@ -1 +1 @@
1
- {"version":3,"file":"SelectFilter.js","sources":["../../../src/components/selects/SelectFilter.tsx"],"sourcesContent":["import type React from 'react';\nimport classNames from 'classnames';\n\nexport type SelectFilterProps = {\n isFilterActive: boolean;\n filterValue: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\nconst SelectFilter = (props: SelectFilterProps) => {\n const { isFilterActive, filterValue, onChange } = props;\n\n const inputClasses = classNames(\n 'select-filter-input',\n (isFilterActive || filterValue) && 'select-filter-input-active'\n );\n\n // biome-ignore lint/a11y/noAutofocus: autofocus is intentionally set to allow instant typing to filter\n return <input type='text' className={inputClasses} autoFocus onChange={onChange} value={filterValue} />;\n};\n\nexport default SelectFilter;\n"],"names":["SelectFilter","props","isFilterActive","filterValue","onChange","inputClasses","classNames","jsx"],"mappings":";;AASA,MAAMA,IAAe,CAACC,MAA6B;AAC/C,QAAM,EAAE,gBAAAC,GAAgB,aAAAC,GAAa,UAAAC,EAAA,IAAaH,GAE5CI,IAAeC;AAAA,IACjB;AAAA,KACCJ,KAAkBC,MAAgB;AAAA,EAAA;AAIvC,SAAO,gBAAAI,EAAC,SAAA,EAAM,MAAK,QAAO,WAAWF,GAAc,WAAS,IAAC,UAAAD,GAAoB,OAAOD,EAAA,CAAa;AACzG;"}
1
+ {"version":3,"file":"SelectFilter.js","sources":["../../../src/components/selects/SelectFilter.tsx"],"sourcesContent":["import type React from 'react';\n\nimport classNames from '../../utils/classNames';\n\nexport type SelectFilterProps = {\n isFilterActive: boolean;\n filterValue: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\nconst SelectFilter = (props: SelectFilterProps) => {\n const { isFilterActive, filterValue, onChange } = props;\n\n const inputClasses = classNames(\n 'select-filter-input',\n (isFilterActive || filterValue) && 'select-filter-input-active'\n );\n\n // biome-ignore lint/a11y/noAutofocus: autofocus is intentionally set to allow instant typing to filter\n return <input type='text' className={inputClasses} autoFocus onChange={onChange} value={filterValue} />;\n};\n\nexport default SelectFilter;\n"],"names":["SelectFilter","props","isFilterActive","filterValue","onChange","inputClasses","classNames","jsx"],"mappings":";;AAUA,MAAMA,IAAe,CAACC,MAA6B;AAC/C,QAAM,EAAE,gBAAAC,GAAgB,aAAAC,GAAa,UAAAC,EAAA,IAAaH,GAE5CI,IAAeC;AAAA,IACjB;AAAA,KACCJ,KAAkBC,MAAgB;AAAA,EAAA;AAIvC,SAAO,gBAAAI,EAAC,SAAA,EAAM,MAAK,QAAO,WAAWF,GAAc,WAAS,IAAC,UAAAD,GAAoB,OAAOD,EAAA,CAAa;AACzG;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as s, jsxs as r, Fragment as t } from "react/jsx-runtime";
2
- import c from "classnames";
2
+ import c from "../../utils/classNames.js";
3
3
  const f = (i) => {
4
4
  const { bsSize: n = "md", inputAddon: o, errorMessage: e, warningMessage: a, messageWhiteSpace: l = "normal", children: p } = i, d = c(
5
5
  "form-group margin-bottom-0",
@@ -1 +1 @@
1
- {"version":3,"file":"WithFeedbackAndAddon.js","sources":["../../../src/components/selects/WithFeedbackAndAddon.tsx"],"sourcesContent":["import type React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport classNames from 'classnames';\n\nexport type WithFeedbackAndAddonProps = {\n /**\n * Defines the size of the select to be rendered.\n *\n * @default 'md'\n */\n bsSize?: 'sm' | 'md' | 'lg';\n\n /**\n * Option to add an icon as a leading input addon to the select or multiselect component.\n */\n inputAddon?: string;\n\n /**\n * Input error message.\n */\n errorMessage?: string | React.ReactNode;\n\n /**\n * Input warning message.\n */\n warningMessage?: string | React.ReactNode;\n\n /**\n * Optional warning message white-space setting.\n *\n * @default 'normal'\n */\n messageWhiteSpace?: 'normal' | 'nowrap' | 'pre-line';\n};\n\nconst WithFeedbackAndAddon = (props: PropsWithChildren<WithFeedbackAndAddonProps>) => {\n const { bsSize = 'md', inputAddon, errorMessage, warningMessage, messageWhiteSpace = 'normal', children } = props;\n\n const formGroupClassName = classNames(\n 'form-group margin-bottom-0',\n (errorMessage || warningMessage) && 'has-feedback',\n errorMessage && 'has-error',\n warningMessage && 'has-warning'\n );\n\n const inputGroupClassNames = classNames(\n 'input-group',\n bsSize === 'sm' && 'input-group-sm',\n bsSize === 'lg' && 'input-group-lg'\n );\n\n const hasFeedbackMessage = errorMessage || warningMessage;\n\n return (\n <div className={formGroupClassName}>\n <div className={inputGroupClassNames}>\n {inputAddon && (\n <div className='input-group-addon'>\n <span className={inputAddon} />\n </div>\n )}\n <div className='form-control-feedback-wrapper'>\n {children}\n {hasFeedbackMessage && (\n <>\n {errorMessage && <span className='form-control-feedback rioglyph rioglyph-error-sign' />}\n {warningMessage && (\n <span className='form-control-feedback rioglyph rioglyph-warning-sign' />\n )}\n <span className={`help-block white-space-${messageWhiteSpace}`}>\n <span>{errorMessage || warningMessage}</span>\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default WithFeedbackAndAddon;\n"],"names":["WithFeedbackAndAddon","props","bsSize","inputAddon","errorMessage","warningMessage","messageWhiteSpace","children","formGroupClassName","classNames","inputGroupClassNames","jsxs","jsx","Fragment"],"mappings":";;AAmCA,MAAMA,IAAuB,CAACC,MAAwD;AAClF,QAAM,EAAE,QAAAC,IAAS,MAAM,YAAAC,GAAY,cAAAC,GAAc,gBAAAC,GAAgB,mBAAAC,IAAoB,UAAU,UAAAC,EAAA,IAAaN,GAEtGO,IAAqBC;AAAA,IACvB;AAAA,KACCL,KAAgBC,MAAmB;AAAA,IACpCD,KAAgB;AAAA,IAChBC,KAAkB;AAAA,EAAA,GAGhBK,IAAuBD;AAAA,IACzB;AAAA,IACAP,MAAW,QAAQ;AAAA,IACnBA,MAAW,QAAQ;AAAA,EAAA;AAKvB,2BACK,OAAA,EAAI,WAAWM,GACZ,UAAA,gBAAAG,EAAC,OAAA,EAAI,WAAWD,GACX,UAAA;AAAA,IAAAP,KACG,gBAAAS,EAAC,SAAI,WAAU,qBACX,4BAAC,QAAA,EAAK,WAAWT,GAAY,EAAA,CACjC;AAAA,IAEJ,gBAAAQ,EAAC,OAAA,EAAI,WAAU,iCACV,UAAA;AAAA,MAAAJ;AAAA,OAXUH,KAAgBC,MAavB,gBAAAM,EAAAE,GAAA,EACK,UAAA;AAAA,QAAAT,KAAgB,gBAAAQ,EAAC,QAAA,EAAK,WAAU,qDAAA,CAAqD;AAAA,QACrFP,KACG,gBAAAO,EAAC,QAAA,EAAK,WAAU,uDAAA,CAAuD;AAAA,QAE3E,gBAAAA,EAAC,QAAA,EAAK,WAAW,0BAA0BN,CAAiB,IACxD,UAAA,gBAAAM,EAAC,QAAA,EAAM,UAAAR,KAAgBC,EAAA,CAAe,EAAA,CAC1C;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CAER;AAAA,EAAA,EAAA,CACJ,EAAA,CACJ;AAER;"}
1
+ {"version":3,"file":"WithFeedbackAndAddon.js","sources":["../../../src/components/selects/WithFeedbackAndAddon.tsx"],"sourcesContent":["import type React from 'react';\nimport type { PropsWithChildren } from 'react';\n\nimport classNames from '../../utils/classNames';\n\nexport type WithFeedbackAndAddonProps = {\n /**\n * Defines the size of the select to be rendered.\n *\n * @default 'md'\n */\n bsSize?: 'sm' | 'md' | 'lg';\n\n /**\n * Option to add an icon as a leading input addon to the select or multiselect component.\n */\n inputAddon?: string;\n\n /**\n * Input error message.\n */\n errorMessage?: string | React.ReactNode;\n\n /**\n * Input warning message.\n */\n warningMessage?: string | React.ReactNode;\n\n /**\n * Optional warning message white-space setting.\n *\n * @default 'normal'\n */\n messageWhiteSpace?: 'normal' | 'nowrap' | 'pre-line';\n};\n\nconst WithFeedbackAndAddon = (props: PropsWithChildren<WithFeedbackAndAddonProps>) => {\n const { bsSize = 'md', inputAddon, errorMessage, warningMessage, messageWhiteSpace = 'normal', children } = props;\n\n const formGroupClassName = classNames(\n 'form-group margin-bottom-0',\n (errorMessage || warningMessage) && 'has-feedback',\n errorMessage && 'has-error',\n warningMessage && 'has-warning'\n );\n\n const inputGroupClassNames = classNames(\n 'input-group',\n bsSize === 'sm' && 'input-group-sm',\n bsSize === 'lg' && 'input-group-lg'\n );\n\n const hasFeedbackMessage = errorMessage || warningMessage;\n\n return (\n <div className={formGroupClassName}>\n <div className={inputGroupClassNames}>\n {inputAddon && (\n <div className='input-group-addon'>\n <span className={inputAddon} />\n </div>\n )}\n <div className='form-control-feedback-wrapper'>\n {children}\n {hasFeedbackMessage && (\n <>\n {errorMessage && <span className='form-control-feedback rioglyph rioglyph-error-sign' />}\n {warningMessage && (\n <span className='form-control-feedback rioglyph rioglyph-warning-sign' />\n )}\n <span className={`help-block white-space-${messageWhiteSpace}`}>\n <span>{errorMessage || warningMessage}</span>\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default WithFeedbackAndAddon;\n"],"names":["WithFeedbackAndAddon","props","bsSize","inputAddon","errorMessage","warningMessage","messageWhiteSpace","children","formGroupClassName","classNames","inputGroupClassNames","jsxs","jsx","Fragment"],"mappings":";;AAoCA,MAAMA,IAAuB,CAACC,MAAwD;AAClF,QAAM,EAAE,QAAAC,IAAS,MAAM,YAAAC,GAAY,cAAAC,GAAc,gBAAAC,GAAgB,mBAAAC,IAAoB,UAAU,UAAAC,EAAA,IAAaN,GAEtGO,IAAqBC;AAAA,IACvB;AAAA,KACCL,KAAgBC,MAAmB;AAAA,IACpCD,KAAgB;AAAA,IAChBC,KAAkB;AAAA,EAAA,GAGhBK,IAAuBD;AAAA,IACzB;AAAA,IACAP,MAAW,QAAQ;AAAA,IACnBA,MAAW,QAAQ;AAAA,EAAA;AAKvB,2BACK,OAAA,EAAI,WAAWM,GACZ,UAAA,gBAAAG,EAAC,OAAA,EAAI,WAAWD,GACX,UAAA;AAAA,IAAAP,KACG,gBAAAS,EAAC,SAAI,WAAU,qBACX,4BAAC,QAAA,EAAK,WAAWT,GAAY,EAAA,CACjC;AAAA,IAEJ,gBAAAQ,EAAC,OAAA,EAAI,WAAU,iCACV,UAAA;AAAA,MAAAJ;AAAA,OAXUH,KAAgBC,MAavB,gBAAAM,EAAAE,GAAA,EACK,UAAA;AAAA,QAAAT,KAAgB,gBAAAQ,EAAC,QAAA,EAAK,WAAU,qDAAA,CAAqD;AAAA,QACrFP,KACG,gBAAAO,EAAC,QAAA,EAAK,WAAU,uDAAA,CAAuD;AAAA,QAE3E,gBAAAA,EAAC,QAAA,EAAK,WAAW,0BAA0BN,CAAiB,IACxD,UAAA,gBAAAM,EAAC,QAAA,EAAM,UAAAR,KAAgBC,EAAA,CAAe,EAAA,CAC1C;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CAER;AAAA,EAAA,EAAA,CACJ,EAAA,CACJ;AAER;"}