@rio-cloud/rio-uikit 2.3.0-beta.1 → 2.3.0-beta.2

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 (294) hide show
  1. package/DayPicker.js +6 -2
  2. package/DayPicker.js.map +1 -1
  3. package/DayPickerCalendar.d.ts +2 -0
  4. package/DayPickerCalendar.js +5 -0
  5. package/DayPickerCalendar.js.map +1 -0
  6. package/DayPickerPrototype.d.ts +2 -0
  7. package/DayPickerPrototype.js +5 -0
  8. package/DayPickerPrototype.js.map +1 -0
  9. package/TableNext.d.ts +2 -0
  10. package/TableNext.js +23 -0
  11. package/TableNext.js.map +1 -0
  12. package/TableToolbar.js +3 -2
  13. package/TableToolbar.js.map +1 -1
  14. package/components/assetTree/Tree.js +13 -13
  15. package/components/charts/Area.d.ts +5 -3
  16. package/components/charts/Area.js +4 -3
  17. package/components/charts/Area.js.map +1 -1
  18. package/components/charts/AreaChart.js.map +1 -1
  19. package/components/charts/ComposedChart.js.map +1 -1
  20. package/components/clearableInput/ClearableInput.d.ts +30 -0
  21. package/components/clearableInput/ClearableInput.js +81 -78
  22. package/components/clearableInput/ClearableInput.js.map +1 -1
  23. package/components/datepicker/DayPicker.d.ts +4 -51
  24. package/components/datepicker/DayPicker.js +264 -256
  25. package/components/datepicker/DayPicker.js.map +1 -1
  26. package/components/datepicker/DayPickerCalendar.d.ts +4 -0
  27. package/components/datepicker/DayPickerCalendar.js +129 -0
  28. package/components/datepicker/DayPickerCalendar.js.map +1 -0
  29. package/components/datepicker/DayPickerDropdown.d.ts +18 -0
  30. package/components/datepicker/DayPickerDropdown.js +75 -0
  31. package/components/datepicker/DayPickerDropdown.js.map +1 -0
  32. package/components/datepicker/DayPickerDropdownFooter.d.ts +7 -0
  33. package/components/datepicker/DayPickerDropdownFooter.js +7 -0
  34. package/components/datepicker/DayPickerDropdownFooter.js.map +1 -0
  35. package/components/datepicker/DayPickerDropdownSidebar.d.ts +8 -0
  36. package/components/datepicker/DayPickerDropdownSidebar.js +7 -0
  37. package/components/datepicker/DayPickerDropdownSidebar.js.map +1 -0
  38. package/components/datepicker/DayPickerInput.d.ts +28 -0
  39. package/components/datepicker/DayPickerInput.js +65 -0
  40. package/components/datepicker/DayPickerInput.js.map +1 -0
  41. package/components/datepicker/DayPickerPrototype.d.ts +53 -0
  42. package/components/datepicker/DayPickerPrototype.js +285 -0
  43. package/components/datepicker/DayPickerPrototype.js.map +1 -0
  44. package/components/datepicker/dayPickerRangeSelectionUtils.d.ts +15 -0
  45. package/components/datepicker/dayPickerRangeSelectionUtils.js +31 -0
  46. package/components/datepicker/dayPickerRangeSelectionUtils.js.map +1 -0
  47. package/components/datepicker/dayPickerTypes.d.ts +517 -0
  48. package/components/datepicker/dayPickerTypes.js +7 -0
  49. package/components/datepicker/dayPickerTypes.js.map +1 -0
  50. package/components/datepicker/dayPickerUtils.d.ts +10 -0
  51. package/components/datepicker/dayPickerUtils.js +92 -0
  52. package/components/datepicker/dayPickerUtils.js.map +1 -0
  53. package/components/datepicker/useDayPickerInputState.d.ts +32 -0
  54. package/components/datepicker/useDayPickerInputState.js +85 -0
  55. package/components/datepicker/useDayPickerInputState.js.map +1 -0
  56. package/components/datepicker/useStackedDayPickerCalendars.d.ts +5 -0
  57. package/components/datepicker/useStackedDayPickerCalendars.js +39 -0
  58. package/components/datepicker/useStackedDayPickerCalendars.js.map +1 -0
  59. package/components/divider/Divider.js +6 -6
  60. package/components/dropdown/ButtonDropdown.d.ts +4 -0
  61. package/components/dropdown/ButtonDropdown.js +70 -68
  62. package/components/dropdown/ButtonDropdown.js.map +1 -1
  63. package/components/dropdown/DropdownToggleButton.d.ts +1 -0
  64. package/components/dropdown/DropdownToggleButton.js +17 -15
  65. package/components/dropdown/DropdownToggleButton.js.map +1 -1
  66. package/components/fade/FadeExpander.js +17 -20
  67. package/components/fade/FadeExpander.js.map +1 -1
  68. package/components/loadMore/LoadMoreProgress.js +6 -7
  69. package/components/map/components/Map.js +3 -3
  70. package/components/map/utils/rendering.js +5 -5
  71. package/components/popover/Popover.js +4 -4
  72. package/components/radiobutton/RadioCardGroup.js +3 -3
  73. package/components/rioglyph/RioglyphIconType.d.ts +1 -1
  74. package/components/selects/Multiselect.d.ts +6 -0
  75. package/components/selects/Multiselect.js +164 -150
  76. package/components/selects/Multiselect.js.map +1 -1
  77. package/components/selects/Select.js +39 -37
  78. package/components/selects/Select.js.map +1 -1
  79. package/components/table/Table.d.ts +27 -248
  80. package/components/table/Table.js +237 -214
  81. package/components/table/Table.js.map +1 -1
  82. package/components/table/Table.types.d.ts +293 -121
  83. package/components/table/TableBody.d.ts +65 -5
  84. package/components/table/TableBody.js +132 -2
  85. package/components/table/TableBody.js.map +1 -1
  86. package/components/table/TableCardsSorting.js +25 -32
  87. package/components/table/TableCardsSorting.js.map +1 -1
  88. package/components/table/TableColumn.d.ts +13 -5
  89. package/components/table/TableColumn.js +112 -2
  90. package/components/table/TableColumn.js.map +1 -1
  91. package/components/table/TableExpandedContentRow.d.ts +7 -7
  92. package/components/table/TableExpandedContentRow.js +107 -2
  93. package/components/table/TableExpandedContentRow.js.map +1 -1
  94. package/components/table/TableExpandedRow.d.ts +9 -4
  95. package/components/table/TableExpandedRow.js +147 -2
  96. package/components/table/TableExpandedRow.js.map +1 -1
  97. package/components/table/TableExpanderButton.js +13 -11
  98. package/components/table/TableExpanderButton.js.map +1 -1
  99. package/components/table/TableFooter.d.ts +10 -6
  100. package/components/table/TableFooter.js +49 -2
  101. package/components/table/TableFooter.js.map +1 -1
  102. package/components/table/TableGroupFooterRow.d.ts +7 -7
  103. package/components/table/TableGroupFooterRow.js +27 -2
  104. package/components/table/TableGroupFooterRow.js.map +1 -1
  105. package/components/table/TableGroupRow.d.ts +7 -7
  106. package/components/table/TableGroupRow.js +33 -2
  107. package/components/table/TableGroupRow.js.map +1 -1
  108. package/components/table/TableHeader.d.ts +9 -4
  109. package/components/table/TableHeader.js +104 -2
  110. package/components/table/TableHeader.js.map +1 -1
  111. package/components/table/TableHeaderColumn.d.ts +14 -8
  112. package/components/table/TableHeaderColumn.js +78 -2
  113. package/components/table/TableHeaderColumn.js.map +1 -1
  114. package/components/table/TableHeaderRow.d.ts +1 -1
  115. package/components/table/TableHeaderRow.js +11 -2
  116. package/components/table/TableHeaderRow.js.map +1 -1
  117. package/components/table/TableRow.d.ts +9 -4
  118. package/components/table/TableRow.js +108 -2
  119. package/components/table/TableRow.js.map +1 -1
  120. package/components/table/TableSpacerRow.d.ts +3 -2
  121. package/components/table/TableSpacerRow.js +26 -2
  122. package/components/table/TableSpacerRow.js.map +1 -1
  123. package/components/table/TableToolbar.d.ts +4 -23
  124. package/components/table/TableToolbar.js +39 -28
  125. package/components/table/TableToolbar.js.map +1 -1
  126. package/components/table/TableToolbarColumn.d.ts +31 -0
  127. package/components/table/TableToolbarColumn.js +33 -0
  128. package/components/table/TableToolbarColumn.js.map +1 -0
  129. package/components/table/TableViewToggles.d.ts +3 -3
  130. package/components/table/TableViewToggles.js.map +1 -1
  131. package/components/table/context/TableInteractionContext.d.ts +26 -0
  132. package/components/table/context/TableInteractionContext.js +7 -0
  133. package/components/table/context/TableInteractionContext.js.map +1 -0
  134. package/components/table/context/TableLayoutContext.d.ts +25 -0
  135. package/components/table/context/TableLayoutContext.js +7 -0
  136. package/components/table/context/TableLayoutContext.js.map +1 -0
  137. package/components/table/context/TableRenderConfigContext.d.ts +27 -0
  138. package/components/table/context/TableRenderConfigContext.js +7 -0
  139. package/components/table/context/TableRenderConfigContext.js.map +1 -0
  140. package/components/table/context/TableRenderContext.d.ts +85 -0
  141. package/components/table/context/TableRenderContext.js +7 -0
  142. package/components/table/context/TableRenderContext.js.map +1 -0
  143. package/components/table/context/TableStructureContext.d.ts +31 -0
  144. package/components/table/context/TableStructureContext.js +17 -0
  145. package/components/table/context/TableStructureContext.js.map +1 -0
  146. package/components/table/layout/columnSizing.d.ts +2 -2
  147. package/components/table/layout/columnSizing.js.map +1 -1
  148. package/components/table/layout/useDraggableColumns.d.ts +3 -3
  149. package/components/table/layout/useDraggableColumns.js +17 -17
  150. package/components/table/layout/useDraggableColumns.js.map +1 -1
  151. package/components/table/layout/useHorizontalSectionSync.d.ts +3 -1
  152. package/components/table/layout/useHorizontalSectionSync.js +32 -28
  153. package/components/table/layout/useHorizontalSectionSync.js.map +1 -1
  154. package/components/table/layout/useMeasuredColumnMaxWidths.d.ts +3 -3
  155. package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
  156. package/components/table/layout/useResizableColumns.d.ts +5 -4
  157. package/components/table/layout/useResizableColumns.js +108 -67
  158. package/components/table/layout/useResizableColumns.js.map +1 -1
  159. package/components/table/layout/useTableBodyScrollBottom.d.ts +12 -0
  160. package/components/table/layout/useTableBodyScrollBottom.js +37 -0
  161. package/components/table/layout/useTableBodyScrollBottom.js.map +1 -0
  162. package/components/table/layout/useTableLayout.d.ts +17 -6
  163. package/components/table/layout/useTableLayout.js +41 -38
  164. package/components/table/layout/useTableLayout.js.map +1 -1
  165. package/components/table/layout/useTableVirtualization.d.ts +6 -6
  166. package/components/table/layout/useTableVirtualization.js +22 -22
  167. package/components/table/layout/useTableVirtualization.js.map +1 -1
  168. package/components/table/model/resolveRowMeta.d.ts +3 -2
  169. package/components/table/model/resolveRowMeta.js.map +1 -1
  170. package/components/table/model/resolveTableClassConfig.d.ts +2 -3
  171. package/components/table/model/resolveTableClassConfig.js.map +1 -1
  172. package/components/table/model/tableView.types.d.ts +41 -0
  173. package/components/table/native/TableSettingsListItem.js +1 -1
  174. package/components/table/native/TableSettingsListItem.js.map +1 -1
  175. package/components/table/render/body/TableBodyContent.d.ts +21 -0
  176. package/components/table/render/body/TableBodyContent.js +52 -0
  177. package/components/table/render/body/TableBodyContent.js.map +1 -0
  178. package/components/table/render/body/TableEmptyRow.js +2 -2
  179. package/components/table/render/body/TableEmptyRow.js.map +1 -1
  180. package/components/table/render/header/TableBatchDropdown.d.ts +5 -1
  181. package/components/table/render/header/TableBatchDropdown.js +17 -15
  182. package/components/table/render/header/TableBatchDropdown.js.map +1 -1
  183. package/components/table/render/header/TableColumnFilter.d.ts +2 -2
  184. package/components/table/render/header/TableColumnFilter.js +16 -14
  185. package/components/table/render/header/TableColumnFilter.js.map +1 -1
  186. package/components/table/render/header/TableDraggableHeaderCell.d.ts +2 -1
  187. package/components/table/render/header/TableDraggableHeaderCell.js +44 -34
  188. package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -1
  189. package/components/table/render/header/TableHeader.types.d.ts +11 -9
  190. package/components/table/render/header/TableHeaderCellContent.d.ts +2 -1
  191. package/components/table/render/header/TableHeaderCellContent.js.map +1 -1
  192. package/components/table/render/header/TableHeaderCellResizeHandle.d.ts +2 -1
  193. package/components/table/render/header/TableHeaderCellResizeHandle.js +8 -8
  194. package/components/table/render/header/TableHeaderCellResizeHandle.js.map +1 -1
  195. package/components/table/render/header/TableHeaderDragOverlay.d.ts +5 -4
  196. package/components/table/render/header/TableHeaderDragOverlay.js.map +1 -1
  197. package/components/table/render/header/TableStaticHeaderCell.d.ts +2 -1
  198. package/components/table/render/header/TableStaticHeaderCell.js +34 -22
  199. package/components/table/render/header/TableStaticHeaderCell.js.map +1 -1
  200. package/components/table/render/header/resolveAriaSort.d.ts +2 -1
  201. package/components/table/render/header/resolveAriaSort.js.map +1 -1
  202. package/components/table/render/header/resolveHeaderCellClassName.d.ts +4 -2
  203. package/components/table/render/header/resolveHeaderCellClassName.js +11 -10
  204. package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -1
  205. package/components/table/render/header/resolveHeaderCellStyle.d.ts +2 -1
  206. package/components/table/render/header/resolveHeaderCellStyle.js.map +1 -1
  207. package/components/table/runtime/shouldAnimateBodyRows.d.ts +17 -0
  208. package/components/table/runtime/shouldAnimateBodyRows.js +5 -0
  209. package/components/table/runtime/shouldAnimateBodyRows.js.map +1 -0
  210. package/components/table/runtime/useRenderDraftState.d.ts +14 -0
  211. package/components/table/runtime/useRenderDraftState.js +80 -0
  212. package/components/table/runtime/useRenderDraftState.js.map +1 -0
  213. package/components/table/runtime/useResolvedRenderColumns.d.ts +43 -0
  214. package/components/table/runtime/useResolvedRenderColumns.js +113 -0
  215. package/components/table/runtime/useResolvedRenderColumns.js.map +1 -0
  216. package/components/table/runtime/useResolvedRenderHeader.d.ts +27 -0
  217. package/components/table/runtime/useResolvedRenderHeader.js +67 -0
  218. package/components/table/runtime/useResolvedRenderHeader.js.map +1 -0
  219. package/components/table/selection/useInternalTableSelectionState.d.ts +17 -0
  220. package/components/table/selection/useInternalTableSelectionState.js +28 -0
  221. package/components/table/selection/useInternalTableSelectionState.js.map +1 -0
  222. package/components/table/selection/useTableSelection.d.ts +3 -3
  223. package/components/table/selection/useTableSelection.js.map +1 -1
  224. package/components/table/shared/getCellContentOverflowClassName.d.ts +3 -0
  225. package/components/table/shared/getCellContentOverflowClassName.js +18 -0
  226. package/components/table/shared/getCellContentOverflowClassName.js.map +1 -0
  227. package/components/table/shared/getInteractiveRowProps.d.ts +3 -2
  228. package/components/table/shared/getInteractiveRowProps.js.map +1 -1
  229. package/hooks/useUrlState.js +3 -3
  230. package/package.json +16 -17
  231. package/utils/analytics/createAnalyticsOverlayTooltip.js +57 -57
  232. package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -1
  233. package/utils/analytics/useAnalyticsOverlayDom.js +3 -3
  234. package/utils/routeUtils.d.ts +5 -2
  235. package/utils/routeUtils.js +17 -17
  236. package/utils/routeUtils.js.map +1 -1
  237. package/version.d.ts +1 -1
  238. package/version.js +1 -1
  239. package/version.js.map +1 -1
  240. package/components/table/TableCard.d.ts +0 -63
  241. package/components/table/TableCard.js +0 -150
  242. package/components/table/TableCard.js.map +0 -1
  243. package/components/table/model/buildTableViewModel.d.ts +0 -28
  244. package/components/table/model/buildTableViewModel.js +0 -221
  245. package/components/table/model/buildTableViewModel.js.map +0 -1
  246. package/components/table/model/resolveCellContent.d.ts +0 -2
  247. package/components/table/model/resolveCellContent.js +0 -5
  248. package/components/table/model/resolveCellContent.js.map +0 -1
  249. package/components/table/model/tableViewModel.types.d.ts +0 -153
  250. package/components/table/parse/parseBody.d.ts +0 -3
  251. package/components/table/parse/parseBody.js +0 -13
  252. package/components/table/parse/parseBody.js.map +0 -1
  253. package/components/table/parse/parseColumns.d.ts +0 -3
  254. package/components/table/parse/parseColumns.js +0 -81
  255. package/components/table/parse/parseColumns.js.map +0 -1
  256. package/components/table/parse/parseFooter.d.ts +0 -3
  257. package/components/table/parse/parseFooter.js +0 -39
  258. package/components/table/parse/parseFooter.js.map +0 -1
  259. package/components/table/parse/parseHeaders.d.ts +0 -4
  260. package/components/table/parse/parseHeaders.js +0 -89
  261. package/components/table/parse/parseHeaders.js.map +0 -1
  262. package/components/table/parse/parseRows.d.ts +0 -3
  263. package/components/table/parse/parseRows.js +0 -93
  264. package/components/table/parse/parseRows.js.map +0 -1
  265. package/components/table/parse/tableChildGuards.d.ts +0 -25
  266. package/components/table/parse/tableChildGuards.js +0 -29
  267. package/components/table/parse/tableChildGuards.js.map +0 -1
  268. package/components/table/render/body/TableBodyRow.d.ts +0 -16
  269. package/components/table/render/body/TableBodyRow.js +0 -84
  270. package/components/table/render/body/TableBodyRow.js.map +0 -1
  271. package/components/table/render/body/TableBodySection.d.ts +0 -20
  272. package/components/table/render/body/TableBodySection.js +0 -68
  273. package/components/table/render/body/TableBodySection.js.map +0 -1
  274. package/components/table/render/body/TableDataRow.d.ts +0 -15
  275. package/components/table/render/body/TableDataRow.js +0 -143
  276. package/components/table/render/body/TableDataRow.js.map +0 -1
  277. package/components/table/render/body/TableExpandedRow.d.ts +0 -8
  278. package/components/table/render/body/TableExpandedRow.js +0 -84
  279. package/components/table/render/body/TableExpandedRow.js.map +0 -1
  280. package/components/table/render/body/TableGroupRow.d.ts +0 -8
  281. package/components/table/render/body/TableGroupRow.js +0 -21
  282. package/components/table/render/body/TableGroupRow.js.map +0 -1
  283. package/components/table/render/body/TableSpacerRow.d.ts +0 -7
  284. package/components/table/render/body/TableSpacerRow.js +0 -15
  285. package/components/table/render/body/TableSpacerRow.js.map +0 -1
  286. package/components/table/render/footer/TableFooterCell.d.ts +0 -8
  287. package/components/table/render/footer/TableFooterCell.js +0 -31
  288. package/components/table/render/footer/TableFooterCell.js.map +0 -1
  289. package/components/table/render/footer/TableFooterSection.d.ts +0 -10
  290. package/components/table/render/footer/TableFooterSection.js +0 -28
  291. package/components/table/render/footer/TableFooterSection.js.map +0 -1
  292. package/components/table/render/header/TableHeaderSection.d.ts +0 -3
  293. package/components/table/render/header/TableHeaderSection.js +0 -104
  294. package/components/table/render/header/TableHeaderSection.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dayPickerUtils.js","sources":["../../../src/components/datepicker/dayPickerUtils.ts"],"sourcesContent":["import { format, isValid, parse, type Locale } from 'date-fns';\nimport * as locales from 'date-fns/locale';\n\nimport type { ClearableInputProps } from '../clearableInput/ClearableInput';\nimport type { DateRange, DayPickerMode } from './dayPickerTypes';\n\nconst localeFormatMap: Record<string, string> = {\n 'bg-BG': 'dd.MM.yyyy',\n 'cs-CZ': 'dd.MM.yyyy',\n 'da-DK': 'dd-MM-yyyy',\n 'de-DE': 'dd.MM.yyyy',\n 'el-GR': 'dd/MM/yyyy',\n 'en-GB': 'dd/MM/yyyy',\n 'es-ES': 'dd/MM/yyyy',\n 'et-EE': 'dd.MM.yyyy',\n 'fi-FI': 'dd.MM.yyyy',\n 'fr-FR': 'dd/MM/yyyy',\n 'hr-HR': 'dd.MM.yyyy',\n 'hu-HU': 'yyyy. MM. dd.',\n 'it-IT': 'dd/MM/yyyy',\n 'lt-LT': 'dd-MM-yyyy',\n 'lv-LV': 'dd.MM.yyyy',\n 'nb-NO': 'dd.MM.yyyy',\n 'nl-NL': 'dd-MM-yyyy',\n 'pl-PL': 'dd.MM.yyyy',\n 'pt-BR': 'dd/MM/yyyy',\n 'pt-PT': 'dd/MM/yyyy',\n 'ro-RO': 'dd.MM.yyyy',\n 'sk-SK': 'dd.MM.yyyy',\n 'sl-SI': 'dd.MM.yyyy',\n 'sv-SE': 'yyyy-MM-dd',\n};\n\nexport const supportedDayPickerLocales = Object.keys(localeFormatMap);\n\nexport const resolveLocale = (localeCode: string): Locale => {\n const normalizedLocaleCode = localeCode.trim();\n const dateFnsLocaleKey = normalizedLocaleCode.replace(/-([a-z])/gi, (_, segment: string) => segment.toUpperCase());\n const baseCode = normalizedLocaleCode.split('-')[0];\n\n return (\n (locales as Record<string, Locale>)[dateFnsLocaleKey] ||\n (locales as Record<string, Locale>)[normalizedLocaleCode] ||\n (locales as Record<string, Locale>)[baseCode] ||\n locales.enGB\n );\n};\n\nexport const formatDate = (date: Date | undefined, localeCode: string, dateFormat?: string): string => {\n if (!date) {\n return '';\n }\n\n return format(date, getInputFormat(localeCode, dateFormat));\n};\n\nexport const formatSelectionForInput = (\n selected: Date | Date[] | DateRange | undefined,\n localeCode: string,\n mode: DayPickerMode,\n dateFormat?: string\n): string => {\n if (!selected) {\n return '';\n }\n\n const formatFn = (date: Date) => formatDate(date, localeCode, dateFormat);\n\n if (mode === 'single' && selected instanceof Date) {\n return formatFn(selected);\n }\n\n if (mode === 'multiple' && Array.isArray(selected)) {\n return selected.map(formatFn).join(', ');\n }\n\n if (mode === 'range' && typeof selected === 'object' && 'from' in selected) {\n const from = selected.from ? formatFn(selected.from) : '...';\n const to = selected.to ? formatFn(selected.to) : '...';\n return `${from} - ${to}`;\n }\n\n return '';\n};\n\nexport const getInputFormat = (localeCode: string, dateFormat?: string) =>\n dateFormat || localeFormatMap[localeCode] || 'yyyy-MM-dd';\n\nconst getInputMaskPattern = (inputFormat: string) => {\n let pattern = '';\n\n for (let index = 0; index < inputFormat.length; ) {\n if (inputFormat.startsWith('dd', index)) {\n pattern += 'd';\n index += 2;\n continue;\n }\n\n if (inputFormat.startsWith('MM', index)) {\n pattern += 'm';\n index += 2;\n continue;\n }\n\n if (inputFormat.startsWith('yyyy', index)) {\n pattern += 'Y';\n index += 4;\n continue;\n }\n\n const currentChar = inputFormat[index];\n if (!currentChar) {\n break;\n }\n\n if (/[a-zA-Z]/.test(currentChar)) {\n return;\n }\n\n pattern += currentChar;\n index += 1;\n }\n\n return pattern;\n};\n\nexport const getInputMaskProps = (\n localeCode: string,\n dateFormat?: string\n): Pick<ClearableInputProps, 'mask' | 'pattern' | 'format' | 'parse'> | undefined => {\n const inputFormat = getInputFormat(localeCode, dateFormat);\n const pattern = getInputMaskPattern(inputFormat);\n if (!pattern) {\n return;\n }\n\n return {\n mask: Date,\n pattern,\n format: (value: Date | null) => {\n if (!value) {\n return '';\n }\n\n return format(value, inputFormat);\n },\n parse: (value: string) => parse(value, inputFormat, new Date()),\n };\n};\n\nexport const parseDateString = (\n value: string | undefined,\n localeCode: string,\n dateFormat?: string\n): Date | undefined => {\n if (!value) {\n return;\n }\n\n const expectedFormat = dateFormat || getInputFormat(localeCode);\n const parsed = parse(value, expectedFormat, new Date());\n if (!isValid(parsed)) {\n return;\n }\n\n if (format(parsed, expectedFormat) !== value) {\n return;\n }\n\n return parsed;\n};\n"],"names":["localeFormatMap","supportedDayPickerLocales","resolveLocale","localeCode","normalizedLocaleCode","dateFnsLocaleKey","_","segment","baseCode","locales","formatDate","date","dateFormat","format","getInputFormat","formatSelectionForInput","selected","mode","formatFn","from","to","getInputMaskPattern","inputFormat","pattern","index","currentChar","getInputMaskProps","value","parse","parseDateString","expectedFormat","parsed","isValid"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { ChangeEvent, FocusEvent, FocusEventHandler, KeyboardEvent, MouseEvent, RefObject } from 'react';
2
+ import { DayPickerProps, DayPickerSelection, Modifiers } from './dayPickerTypes';
3
+ type UseDayPickerInputStateParams = {
4
+ props: DayPickerProps;
5
+ locale: string;
6
+ dateFormat?: string;
7
+ inputProps?: DayPickerProps['inputProps'];
8
+ onBlur?: FocusEventHandler<HTMLInputElement>;
9
+ isDropdownOpen: boolean;
10
+ isSingleMode: boolean;
11
+ selectionBehavior: 'immediate' | 'deferred';
12
+ closeOnOutsideClick: boolean;
13
+ committedValue: DayPickerSelection;
14
+ draftValue: DayPickerSelection;
15
+ setDraftValue: (value: DayPickerSelection) => void;
16
+ commitValue: (value: DayPickerSelection, modifiers?: Modifiers) => void;
17
+ clearValue: () => void;
18
+ openDropdown: () => void;
19
+ closeDropdown: () => void;
20
+ applyDraftValue: () => void;
21
+ popperElementRef: RefObject<HTMLElement | null>;
22
+ };
23
+ declare const useDayPickerInputState: ({ props, locale, dateFormat, inputProps, onBlur, isDropdownOpen, isSingleMode, selectionBehavior, closeOnOutsideClick, committedValue, draftValue, setDraftValue, commitValue, clearValue, openDropdown, closeDropdown, applyDraftValue, popperElementRef, }: UseDayPickerInputStateParams) => {
24
+ displayValue: string;
25
+ handleInputBlur: (event: FocusEvent<HTMLInputElement>) => void;
26
+ handleInputChange: (nextValue: string, _event?: ChangeEvent<HTMLInputElement> | MouseEvent<HTMLSpanElement>) => void;
27
+ handleClearInput: () => void;
28
+ handleInputFocus: (event: FocusEvent<HTMLInputElement>) => void;
29
+ handleInputKeyDown: (event: KeyboardEvent<HTMLInputElement>) => void;
30
+ inputMaskProps: Pick<import('../clearableInput/ClearableInput').ClearableInputProps, "pattern" | "mask" | "format" | "parse"> | undefined;
31
+ };
32
+ export default useDayPickerInputState;
@@ -0,0 +1,85 @@
1
+ import { useState as R, useEffect as H } from "react";
2
+ import { isSingleDayPickerProps as d, isMultipleDayPickerProps as U, isRangeDayPickerProps as V } from "./dayPickerTypes.js";
3
+ import { getInputMaskProps as W, formatSelectionForInput as C, parseDateString as X } from "./dayPickerUtils.js";
4
+ const x = ({
5
+ props: n,
6
+ locale: e,
7
+ dateFormat: r,
8
+ inputProps: f,
9
+ onBlur: b,
10
+ isDropdownOpen: a,
11
+ isSingleMode: I,
12
+ selectionBehavior: s,
13
+ closeOnOutsideClick: j,
14
+ committedValue: y,
15
+ draftValue: k,
16
+ setDraftValue: S,
17
+ commitValue: F,
18
+ clearValue: D,
19
+ openDropdown: l,
20
+ closeDropdown: E,
21
+ applyDraftValue: m,
22
+ popperElementRef: q
23
+ }) => {
24
+ const [g, P] = R(""), [K, c] = R(!1);
25
+ H(() => {
26
+ I && c(!1);
27
+ }, [y, I]), H(() => {
28
+ const t = a && s === "deferred" ? k : y;
29
+ I && K || P(_(t, n, e, r));
30
+ }, [
31
+ y,
32
+ k,
33
+ K,
34
+ a,
35
+ e,
36
+ r,
37
+ s,
38
+ I,
39
+ n
40
+ ]);
41
+ const z = (t) => {
42
+ f?.onFocus?.(t), a || l();
43
+ }, A = (t) => {
44
+ b?.(t), f?.onBlur?.(t);
45
+ const h = t.relatedTarget;
46
+ if (!(h && q.current?.contains(h))) {
47
+ if (d(n)) {
48
+ const u = T(n, g, e), i = u instanceof Date;
49
+ n.onInputChange?.(g, u, i), g === "" ? D() : i ? (c(!1), s === "immediate" ? F(u, {}) : S(u)) : c(!0);
50
+ }
51
+ j && E();
52
+ }
53
+ }, G = (t) => {
54
+ if (f?.onKeyDown?.(t), t.key === "Enter") {
55
+ if (t.preventDefault(), !a) {
56
+ l();
57
+ return;
58
+ }
59
+ s === "deferred" ? m() : E();
60
+ }
61
+ }, J = (t, h) => {
62
+ if (P(t), !d(n))
63
+ return;
64
+ const u = T(n, t, e), i = u instanceof Date;
65
+ n.onInputChange?.(t, u, i), c(t !== "" && !i), t === "" ? D() : i && s === "immediate" ? F(u, {}) : i && S(u);
66
+ }, L = () => {
67
+ c(!1), P(""), D();
68
+ }, N = I ? g : _(a && s === "deferred" ? k : y, n, e, r), Q = d(n) && !n.parseInput && !n.renderValue ? W(e, r) : void 0;
69
+ return {
70
+ displayValue: N,
71
+ handleInputBlur: A,
72
+ handleInputChange: J,
73
+ handleClearInput: L,
74
+ handleInputFocus: z,
75
+ handleInputKeyDown: G,
76
+ inputMaskProps: Q
77
+ };
78
+ }, T = (n, e, r) => {
79
+ if (d(n))
80
+ return n.parseInput ? n.parseInput(e, r) : X(e, r, n.dateFormat);
81
+ }, _ = (n, e, r, f) => d(e) ? e.renderValue ? e.renderValue(n, r) : C(n, r, "single", f) : U(e) ? e.renderValue ? e.renderValue(n, r) : C(n, r, "multiple", f) : V(e) ? e.renderValue ? e.renderValue(n, r) : C(n, r, "range", f) : "";
82
+ export {
83
+ x as default
84
+ };
85
+ //# sourceMappingURL=useDayPickerInputState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDayPickerInputState.js","sources":["../../../src/components/datepicker/useDayPickerInputState.ts"],"sourcesContent":["import {\n useEffect,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type FocusEventHandler,\n type KeyboardEvent,\n type MouseEvent,\n type RefObject,\n} from 'react';\n\nimport {\n isMultipleDayPickerProps,\n isRangeDayPickerProps,\n isSingleDayPickerProps,\n type DateRange,\n type DayPickerProps,\n type DayPickerSelection,\n type Modifiers,\n} from './dayPickerTypes';\nimport { formatSelectionForInput, getInputMaskProps, parseDateString } from './dayPickerUtils';\n\ntype UseDayPickerInputStateParams = {\n props: DayPickerProps;\n locale: string;\n dateFormat?: string;\n inputProps?: DayPickerProps['inputProps'];\n onBlur?: FocusEventHandler<HTMLInputElement>;\n isDropdownOpen: boolean;\n isSingleMode: boolean;\n selectionBehavior: 'immediate' | 'deferred';\n closeOnOutsideClick: boolean;\n committedValue: DayPickerSelection;\n draftValue: DayPickerSelection;\n setDraftValue: (value: DayPickerSelection) => void;\n commitValue: (value: DayPickerSelection, modifiers?: Modifiers) => void;\n clearValue: () => void;\n openDropdown: () => void;\n closeDropdown: () => void;\n applyDraftValue: () => void;\n popperElementRef: RefObject<HTMLElement | null>;\n};\n\nconst useDayPickerInputState = ({\n props,\n locale,\n dateFormat,\n inputProps,\n onBlur,\n isDropdownOpen,\n isSingleMode,\n selectionBehavior,\n closeOnOutsideClick,\n committedValue,\n draftValue,\n setDraftValue,\n commitValue,\n clearValue,\n openDropdown,\n closeDropdown,\n applyDraftValue,\n popperElementRef,\n}: UseDayPickerInputStateParams) => {\n const [rawInputValue, setRawInputValue] = useState('');\n const [hasInvalidSingleInput, setHasInvalidSingleInput] = useState(false);\n\n useEffect(() => {\n if (isSingleMode) {\n setHasInvalidSingleInput(false);\n }\n }, [committedValue, isSingleMode]);\n\n useEffect(() => {\n const selectionForDisplay = isDropdownOpen && selectionBehavior === 'deferred' ? draftValue : committedValue;\n\n if (isSingleMode && hasInvalidSingleInput) {\n return;\n }\n\n setRawInputValue(getDisplayValue(selectionForDisplay, props, locale, dateFormat));\n }, [\n committedValue,\n draftValue,\n hasInvalidSingleInput,\n isDropdownOpen,\n locale,\n dateFormat,\n selectionBehavior,\n isSingleMode,\n props,\n ]);\n\n const handleInputFocus = (event: FocusEvent<HTMLInputElement>) => {\n inputProps?.onFocus?.(event);\n if (!isDropdownOpen) {\n openDropdown();\n }\n };\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n onBlur?.(event);\n inputProps?.onBlur?.(event);\n\n const nextFocused = event.relatedTarget as Node | null;\n if (nextFocused && popperElementRef.current?.contains(nextFocused)) {\n return;\n }\n\n if (isSingleDayPickerProps(props)) {\n // Blur is the final validation point for manual input:\n // the mask narrows input, but only parsing decides whether it becomes a real Date value.\n const parsed = parseSingleInputValue(props, rawInputValue, locale);\n const isValid = parsed instanceof Date;\n props.onInputChange?.(rawInputValue, parsed, isValid);\n\n if (rawInputValue === '') {\n clearValue();\n } else if (isValid) {\n setHasInvalidSingleInput(false);\n if (selectionBehavior === 'immediate') {\n commitValue(parsed, {});\n } else {\n setDraftValue(parsed);\n }\n } else {\n setHasInvalidSingleInput(true);\n }\n }\n\n if (!closeOnOutsideClick) {\n return;\n }\n\n closeDropdown();\n };\n\n const handleInputKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n inputProps?.onKeyDown?.(event);\n\n if (event.key === 'Enter') {\n event.preventDefault();\n\n if (!isDropdownOpen) {\n openDropdown();\n return;\n }\n\n if (selectionBehavior === 'deferred') {\n applyDraftValue();\n } else {\n closeDropdown();\n }\n }\n };\n\n const handleInputChange = (\n nextValue: string,\n _event?: ChangeEvent<HTMLInputElement> | MouseEvent<HTMLSpanElement>\n ) => {\n setRawInputValue(nextValue);\n\n if (!isSingleDayPickerProps(props)) {\n return;\n }\n\n // Parse on every change so consumers can react to incomplete/invalid intermediate input\n // while only valid dates are promoted into picker state.\n const parsed = parseSingleInputValue(props, nextValue, locale);\n const isValid = parsed instanceof Date;\n\n props.onInputChange?.(nextValue, parsed, isValid);\n setHasInvalidSingleInput(nextValue !== '' && !isValid);\n\n if (nextValue === '') {\n clearValue();\n } else if (isValid && selectionBehavior === 'immediate') {\n commitValue(parsed, {});\n } else if (isValid) {\n setDraftValue(parsed);\n }\n };\n\n const handleClearInput = () => {\n setHasInvalidSingleInput(false);\n setRawInputValue('');\n clearValue();\n };\n\n const selectionForDisplay = isDropdownOpen && selectionBehavior === 'deferred' ? draftValue : committedValue;\n const displayValue = isSingleMode ? rawInputValue : getDisplayValue(selectionForDisplay, props, locale, dateFormat);\n const inputMaskProps =\n isSingleDayPickerProps(props) && !props.parseInput && !props.renderValue\n ? getInputMaskProps(locale, dateFormat)\n : undefined;\n\n return {\n displayValue,\n handleInputBlur,\n handleInputChange,\n handleClearInput,\n handleInputFocus,\n handleInputKeyDown,\n inputMaskProps,\n };\n};\n\nconst parseSingleInputValue = (props: DayPickerProps, rawValue: string, locale: string) => {\n if (!isSingleDayPickerProps(props)) {\n return;\n }\n\n // A custom parser fully owns validation semantics for manual single-date input.\n if (props.parseInput) {\n return props.parseInput(rawValue, locale);\n }\n\n // Default parsing still runs after the input mask and is the final source of truth for validity.\n return parseDateString(rawValue, locale, props.dateFormat);\n};\n\nconst getDisplayValue = (value: DayPickerSelection, props: DayPickerProps, locale: string, dateFormat?: string) => {\n if (isSingleDayPickerProps(props)) {\n return props.renderValue\n ? props.renderValue(value as Date | undefined, locale)\n : formatSelectionForInput(value, locale, 'single', dateFormat);\n }\n\n if (isMultipleDayPickerProps(props)) {\n return props.renderValue\n ? props.renderValue(value as Date[] | undefined, locale)\n : formatSelectionForInput(value, locale, 'multiple', dateFormat);\n }\n\n if (isRangeDayPickerProps(props)) {\n return props.renderValue\n ? props.renderValue(value as DateRange | undefined, locale)\n : formatSelectionForInput(value, locale, 'range', dateFormat);\n }\n\n return '';\n};\n\nexport default useDayPickerInputState;\n"],"names":["useDayPickerInputState","props","locale","dateFormat","inputProps","onBlur","isDropdownOpen","isSingleMode","selectionBehavior","closeOnOutsideClick","committedValue","draftValue","setDraftValue","commitValue","clearValue","openDropdown","closeDropdown","applyDraftValue","popperElementRef","rawInputValue","setRawInputValue","useState","hasInvalidSingleInput","setHasInvalidSingleInput","useEffect","selectionForDisplay","getDisplayValue","handleInputFocus","event","handleInputBlur","nextFocused","isSingleDayPickerProps","parsed","parseSingleInputValue","isValid","handleInputKeyDown","handleInputChange","nextValue","_event","handleClearInput","displayValue","inputMaskProps","getInputMaskProps","rawValue","parseDateString","value","formatSelectionForInput","isMultipleDayPickerProps","isRangeDayPickerProps"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare const useStackedDayPickerCalendars: (dependencies?: readonly unknown[]) => {
2
+ calendarsRef: import('react').MutableRefObject<HTMLDivElement | null>;
3
+ stackCalendars: boolean;
4
+ };
5
+ export default useStackedDayPickerCalendars;
@@ -0,0 +1,39 @@
1
+ import { useState as S, useCallback as E, useEffect as y } from "react";
2
+ import R from "../../hooks/useResizeObserver.js";
3
+ import W from "../../hooks/useWindowResize.js";
4
+ const A = 480, B = (m = []) => {
5
+ const [r, , { inlineSize: a }] = R(), [f, n] = S(!1), o = E(() => {
6
+ const e = r.current;
7
+ if (!e || typeof window > "u")
8
+ return;
9
+ const t = e.querySelector(".rdp-months"), s = t ? Array.from(t.querySelectorAll(".rdp-month")) : [], d = s[0];
10
+ if (!t || !d) {
11
+ n(!1);
12
+ return;
13
+ }
14
+ const l = e.parentElement, i = window.document.documentElement.clientWidth;
15
+ if (!l || !a || !i) {
16
+ n(!1);
17
+ return;
18
+ }
19
+ if (i < A) {
20
+ n(!1);
21
+ return;
22
+ }
23
+ const h = Number.parseFloat(window.getComputedStyle(t).columnGap || "0") || 0, p = d.getBoundingClientRect().width, w = Math.max(
24
+ 0,
25
+ e.getBoundingClientRect().width - t.getBoundingClientRect().width
26
+ ), C = p * s.length + h * (s.length - 1) + w, g = Array.from(l.children).reduce((c, u) => u === e ? c : c + u.getBoundingClientRect().width, 0);
27
+ n(C + g > i - 32);
28
+ }, [a, r]);
29
+ return W(o), y(() => {
30
+ o();
31
+ }, [o, ...m]), {
32
+ calendarsRef: r,
33
+ stackCalendars: f
34
+ };
35
+ };
36
+ export {
37
+ B as default
38
+ };
39
+ //# sourceMappingURL=useStackedDayPickerCalendars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStackedDayPickerCalendars.js","sources":["../../../src/components/datepicker/useStackedDayPickerCalendars.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport useResizeObserver from '../../hooks/useResizeObserver';\nimport useWindowResize from '../../hooks/useWindowResize';\n\nconst STACKED_CALENDARS_XS_MAX = 480;\n\nconst useStackedDayPickerCalendars = (dependencies: readonly unknown[] = []) => {\n const [calendarsRef, , { inlineSize: calendarsInlineSize }] = useResizeObserver<HTMLDivElement>();\n const [stackCalendars, setStackCalendars] = useState(false);\n\n const updateCalendarLayout = useCallback(() => {\n const calendarsElement = calendarsRef.current;\n if (!calendarsElement || typeof window === 'undefined') {\n return;\n }\n\n const monthsWrapper = calendarsElement.querySelector<HTMLElement>('.rdp-months');\n const monthElements = monthsWrapper\n ? Array.from(monthsWrapper.querySelectorAll<HTMLElement>('.rdp-month'))\n : [];\n const firstMonthElement = monthElements[0];\n\n if (!monthsWrapper || !firstMonthElement) {\n setStackCalendars(false);\n return;\n }\n\n const rowElement = calendarsElement.parentElement;\n const viewportWidth = window.document.documentElement.clientWidth;\n\n if (!rowElement || !calendarsInlineSize || !viewportWidth) {\n setStackCalendars(false);\n return;\n }\n\n // XS layouts are always stacked via CSS so Popper measures the compact layout immediately.\n if (viewportWidth < STACKED_CALENDARS_XS_MAX) {\n setStackCalendars(false);\n return;\n }\n\n const monthsGap = Number.parseFloat(window.getComputedStyle(monthsWrapper).columnGap || '0') || 0;\n const monthWidth = firstMonthElement.getBoundingClientRect().width;\n const calendarsExtraWidth = Math.max(\n 0,\n calendarsElement.getBoundingClientRect().width - monthsWrapper.getBoundingClientRect().width\n );\n const requiredCalendarsWidth =\n monthWidth * monthElements.length + monthsGap * (monthElements.length - 1) + calendarsExtraWidth;\n const siblingWidth = Array.from(rowElement.children).reduce((sum, child) => {\n if (child === calendarsElement) {\n return sum;\n }\n\n return sum + (child as HTMLElement).getBoundingClientRect().width;\n }, 0);\n\n setStackCalendars(requiredCalendarsWidth + siblingWidth > viewportWidth - 32);\n }, [calendarsInlineSize, calendarsRef]);\n\n useWindowResize(updateCalendarLayout);\n\n useEffect(() => {\n updateCalendarLayout();\n }, [updateCalendarLayout, ...dependencies]);\n\n return {\n calendarsRef,\n stackCalendars,\n };\n};\n\nexport default useStackedDayPickerCalendars;\n"],"names":["STACKED_CALENDARS_XS_MAX","useStackedDayPickerCalendars","dependencies","calendarsRef","calendarsInlineSize","useResizeObserver","stackCalendars","setStackCalendars","useState","updateCalendarLayout","useCallback","calendarsElement","monthsWrapper","monthElements","firstMonthElement","rowElement","viewportWidth","monthsGap","monthWidth","calendarsExtraWidth","requiredCalendarsWidth","siblingWidth","sum","child","useWindowResize","useEffect"],"mappings":";;;AAKA,MAAMA,IAA2B,KAE3BC,IAA+B,CAACC,IAAmC,OAAO;AAC5E,QAAM,CAACC,KAAgB,EAAE,YAAYC,EAAA,CAAqB,IAAIC,EAAA,GACxD,CAACC,GAAgBC,CAAiB,IAAIC,EAAS,EAAK,GAEpDC,IAAuBC,EAAY,MAAM;AAC3C,UAAMC,IAAmBR,EAAa;AACtC,QAAI,CAACQ,KAAoB,OAAO,SAAW;AACvC;AAGJ,UAAMC,IAAgBD,EAAiB,cAA2B,aAAa,GACzEE,IAAgBD,IAChB,MAAM,KAAKA,EAAc,iBAA8B,YAAY,CAAC,IACpE,CAAA,GACAE,IAAoBD,EAAc,CAAC;AAEzC,QAAI,CAACD,KAAiB,CAACE,GAAmB;AACtC,MAAAP,EAAkB,EAAK;AACvB;AAAA,IACJ;AAEA,UAAMQ,IAAaJ,EAAiB,eAC9BK,IAAgB,OAAO,SAAS,gBAAgB;AAEtD,QAAI,CAACD,KAAc,CAACX,KAAuB,CAACY,GAAe;AACvD,MAAAT,EAAkB,EAAK;AACvB;AAAA,IACJ;AAGA,QAAIS,IAAgBhB,GAA0B;AAC1C,MAAAO,EAAkB,EAAK;AACvB;AAAA,IACJ;AAEA,UAAMU,IAAY,OAAO,WAAW,OAAO,iBAAiBL,CAAa,EAAE,aAAa,GAAG,KAAK,GAC1FM,IAAaJ,EAAkB,sBAAA,EAAwB,OACvDK,IAAsB,KAAK;AAAA,MAC7B;AAAA,MACAR,EAAiB,sBAAA,EAAwB,QAAQC,EAAc,wBAAwB;AAAA,IAAA,GAErFQ,IACFF,IAAaL,EAAc,SAASI,KAAaJ,EAAc,SAAS,KAAKM,GAC3EE,IAAe,MAAM,KAAKN,EAAW,QAAQ,EAAE,OAAO,CAACO,GAAKC,MAC1DA,MAAUZ,IACHW,IAGJA,IAAOC,EAAsB,sBAAA,EAAwB,OAC7D,CAAC;AAEJ,IAAAhB,EAAkBa,IAAyBC,IAAeL,IAAgB,EAAE;AAAA,EAChF,GAAG,CAACZ,GAAqBD,CAAY,CAAC;AAEtC,SAAAqB,EAAgBf,CAAoB,GAEpCgB,EAAU,MAAM;AACZ,IAAAhB,EAAA;AAAA,EACJ,GAAG,CAACA,GAAsB,GAAGP,CAAY,CAAC,GAEnC;AAAA,IACH,cAAAC;AAAA,IACA,gBAAAG;AAAA,EAAA;AAER;"}
@@ -1,4 +1,4 @@
1
- import { jsxs as t, jsx as r, Fragment as c } from "react/jsx-runtime";
1
+ import { jsxs as t, Fragment as r, jsx as c } from "react/jsx-runtime";
2
2
  import o from "../../utils/classNames.js";
3
3
  const L = (h) => {
4
4
  const {
@@ -12,7 +12,7 @@ const L = (h) => {
12
12
  children: s
13
13
  } = h, N = o("Divider", "position-relative", !i && "width-100pct", x), l = `${m}px`, e = {};
14
14
  i && (e.paddingLeft = l, e.paddingRight = l), i || (e.paddingTop = l, e.paddingBottom = l);
15
- const y = o("divider-line", `bg-${v}`), $ = typeof s == "string", g = /* @__PURE__ */ r(
15
+ const y = o("divider-line", `bg-${v}`), $ = typeof s == "string", g = /* @__PURE__ */ c(
16
16
  "div",
17
17
  {
18
18
  className: y,
@@ -21,20 +21,20 @@ const L = (h) => {
21
21
  height: i ? "100%" : `${p}px`
22
22
  }
23
23
  }
24
- ), d = /* @__PURE__ */ r("div", { className: "flex-1-0", children: g }), a = /* @__PURE__ */ r("div", { className: $ ? "padding-x-10" : "", children: s }), u = o("divider-title", "display-flex", "align-items-center");
24
+ ), d = /* @__PURE__ */ c("div", { className: "flex-1-0", children: g }), a = /* @__PURE__ */ c("div", { className: $ ? "padding-x-10" : "", children: s }), u = o("divider-title", "display-flex", "align-items-center");
25
25
  return /* @__PURE__ */ t("div", { className: N, style: e, children: [
26
26
  !f && !s && g,
27
27
  s && /* @__PURE__ */ t("div", { className: u, children: [
28
- n === "left" && /* @__PURE__ */ t(c, { children: [
28
+ n === "left" && /* @__PURE__ */ t(r, { children: [
29
29
  a,
30
30
  d
31
31
  ] }),
32
- n === "center" && /* @__PURE__ */ t(c, { children: [
32
+ n === "center" && /* @__PURE__ */ t(r, { children: [
33
33
  d,
34
34
  a,
35
35
  d
36
36
  ] }),
37
- n === "right" && /* @__PURE__ */ t(c, { children: [
37
+ n === "right" && /* @__PURE__ */ t(r, { children: [
38
38
  d,
39
39
  a
40
40
  ] })
@@ -65,6 +65,10 @@ export type ButtonDropdownProps<T extends DropdownToggleButtonType = 'button'> =
65
65
  * @default false
66
66
  */
67
67
  iconOnly?: boolean;
68
+ /**
69
+ * Optional rioglyph icon name forwarded to the underlying button toggle.
70
+ */
71
+ iconName?: string;
68
72
  /**
69
73
  * Defines whether the caret is shown or not.
70
74
  *
@@ -1,18 +1,18 @@
1
1
  import { jsx as i, jsxs as h } from "react/jsx-runtime";
2
- import { forwardRef as ro, useState as f, useEffect as so } from "react";
3
- import lo from "react-dom";
4
- import { usePopper as po } from "react-popper";
2
+ import { forwardRef as so, useState as c, useEffect as lo } from "react";
3
+ import po from "react-dom";
4
+ import { usePopper as ao } from "react-popper";
5
5
  import { noop as u } from "es-toolkit/function";
6
- import { isNil as ao } from "es-toolkit/predicate";
6
+ import { isNil as io } from "es-toolkit/predicate";
7
7
  import P from "../../utils/classNames.js";
8
- import { getOrCreatePortalRoot as io } from "../../utils/portalRoot.js";
9
- import fo, { DEFAULT_EVENT_TYPES as co } from "../../hooks/useClickOutside.js";
10
- import mo from "../menuItems/MenuItems.js";
11
- import uo from "../menuItems/MenuItemList.js";
12
- import go from "./DropdownToggleButton.js";
13
- import wo from "./SplitCaretButton.js";
14
- import Co from "./Caret.js";
15
- const Bo = (r, s) => r && s ? "top-end" : !r && s ? "top-start" : r && !s ? "bottom-end" : "bottom-start", Do = () => ro((r, s) => {
8
+ import { getOrCreatePortalRoot as co } from "../../utils/portalRoot.js";
9
+ import fo, { DEFAULT_EVENT_TYPES as mo } from "../../hooks/useClickOutside.js";
10
+ import uo from "../menuItems/MenuItems.js";
11
+ import go from "../menuItems/MenuItemList.js";
12
+ import wo from "./DropdownToggleButton.js";
13
+ import Co from "./SplitCaretButton.js";
14
+ import Bo from "./Caret.js";
15
+ const Do = (r, s) => r && s ? "top-end" : !r && s ? "top-start" : r && !s ? "bottom-end" : "bottom-start", No = () => so((r, s) => {
16
16
  const {
17
17
  id: g = Math.random().toString(36).slice(2, 16),
18
18
  items: R = [],
@@ -20,67 +20,68 @@ const Bo = (r, s) => r && s ? "top-end" : !r && s ? "top-start" : r && !s ? "bot
20
20
  bsStyle: C = "default",
21
21
  variant: T,
22
22
  disabled: B = !1,
23
+ iconName: k,
23
24
  iconOnly: D = !1,
24
- title: k,
25
+ title: y,
25
26
  splitButton: t = !1,
26
- customDropdown: O,
27
+ customDropdown: N,
27
28
  open: e,
28
- dropup: y = !1,
29
- pullRight: c = !1,
30
- noCaret: E = !1,
31
- onOpen: L = u,
32
- onClose: x = u,
33
- onLabelButtonClick: I = u,
29
+ dropup: E = !1,
30
+ pullRight: f = !1,
31
+ noCaret: L = !1,
32
+ onOpen: x = u,
33
+ onClose: I = u,
34
+ onLabelButtonClick: j = u,
34
35
  usePortal: l = !1,
35
- popperConfig: j,
36
- toggleButtonType: U = "button",
37
- toggleClassName: S = "",
38
- dropdownClassName: _,
39
- className: v = "",
40
- ...z
41
- } = r, [b, m] = f(e), [A, F] = f(null), [M, V] = f(null), [Y, q] = f(null), G = {
42
- placement: Bo(c, y),
36
+ popperConfig: U,
37
+ toggleButtonType: _ = "button",
38
+ toggleClassName: O = "",
39
+ dropdownClassName: v,
40
+ className: z = "",
41
+ ...A
42
+ } = r, [S, m] = c(e), [F, V] = c(null), [b, Y] = c(null), [q, G] = c(null), H = {
43
+ placement: Do(f, E),
43
44
  modifiers: []
44
- }, H = t && c ? Y : A, { styles: J, attributes: K } = po(H, M, j || G), n = ao(e), p = n ? b : e, Q = fo(
45
+ }, J = t && f ? q : F, { styles: K, attributes: Q } = ao(J, b, U || H), n = io(e), p = n ? S : e, W = fo(
45
46
  (o) => {
46
- l && M?.contains(o.target) || a();
47
+ l && b?.contains(o.target) || a();
47
48
  },
48
- co,
49
+ mo,
49
50
  !!p
50
51
  // only listen to clicks outside when the dropdown is open
51
- ), W = io(), X = !E && !t && !D;
52
- so(() => {
52
+ ), X = co(), Z = !L && !t && !D;
53
+ lo(() => {
53
54
  n || m(e);
54
55
  }, [n, e]);
55
56
  const d = (o) => {
56
- (n ? b : e) ? a() : Z(o);
57
- }, Z = (o) => {
58
- n && m(!0), o && L(o);
57
+ (n ? S : e) ? a() : $(o);
58
+ }, $ = (o) => {
59
+ n && m(!0), o && x(o);
59
60
  }, a = () => {
60
- n && m(!1), x();
61
- }, $ = () => {
62
- a(), I();
63
- }, oo = (o) => {
64
- d(o);
61
+ n && m(!1), I();
62
+ }, oo = () => {
63
+ a(), j();
65
64
  }, to = (o) => {
66
- t ? $() : d(o);
67
- }, eo = P("dropdown", "btn-group", p && "open", v), no = P(
65
+ d(o);
66
+ }, eo = (o) => {
67
+ t ? oo() : d(o);
68
+ }, no = P("dropdown", "btn-group", p && "open", z), ro = P(
68
69
  l && "dropdown-portal",
69
- t && c && "pull-right",
70
- _
71
- ), N = /* @__PURE__ */ i(
72
- uo,
70
+ t && f && "pull-right",
71
+ v
72
+ ), M = /* @__PURE__ */ i(
73
+ go,
73
74
  {
74
- className: no,
75
- ref: V,
76
- style: J.popper,
77
- ...K.popper,
78
- children: O || /* @__PURE__ */ i(mo, { items: R, closeMenu: d })
75
+ className: ro,
76
+ ref: Y,
77
+ style: K.popper,
78
+ ...Q.popper,
79
+ children: N || /* @__PURE__ */ i(uo, { items: R, closeMenu: d })
79
80
  }
80
81
  );
81
- return /* @__PURE__ */ h("div", { ...z, className: eo, ref: Q, children: [
82
+ return /* @__PURE__ */ h("div", { ...A, className: no, ref: W, children: [
82
83
  /* @__PURE__ */ h(
83
- go,
84
+ wo,
84
85
  {
85
86
  id: g,
86
87
  splitButton: t,
@@ -88,35 +89,36 @@ const Bo = (r, s) => r && s ? "top-end" : !r && s ? "top-start" : r && !s ? "bot
88
89
  bsSize: w,
89
90
  variant: T,
90
91
  iconOnly: D,
92
+ iconName: k,
91
93
  disabled: B,
92
- ref: F,
93
- onClick: to,
94
+ ref: V,
95
+ onClick: eo,
94
96
  outerRef: s,
95
- toggleButtonType: U,
96
- className: S,
97
+ toggleButtonType: _,
98
+ className: O,
97
99
  children: [
98
- k,
99
- X && /* @__PURE__ */ i(Co, {})
100
+ y,
101
+ Z && /* @__PURE__ */ i(Bo, {})
100
102
  ]
101
103
  }
102
104
  ),
103
105
  t && /* @__PURE__ */ i(
104
- wo,
106
+ Co,
105
107
  {
106
108
  id: g,
107
109
  bsStyle: C,
108
110
  bsSize: w,
109
111
  disabled: B,
110
- className: S,
111
- onClick: oo,
112
- ref: q
112
+ className: O,
113
+ onClick: to,
114
+ ref: G
113
115
  }
114
116
  ),
115
- p && l && lo.createPortal(N, W),
116
- p && !l && N
117
+ p && l && po.createPortal(M, X),
118
+ p && !l && M
117
119
  ] });
118
- }), jo = Do();
120
+ }), Uo = No();
119
121
  export {
120
- jo as default
122
+ Uo as default
121
123
  };
122
124
  //# sourceMappingURL=ButtonDropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonDropdown.js","sources":["../../../src/components/dropdown/ButtonDropdown.tsx"],"sourcesContent":["import React, { useState, useEffect, forwardRef, type PropsWithChildren } from 'react';\nimport ReactDOM from 'react-dom';\nimport { usePopper } from 'react-popper';\nimport { noop } from 'es-toolkit/function';\nimport { isNil } from 'es-toolkit/predicate';\n\nimport classNames from '../../utils/classNames';\nimport { getOrCreatePortalRoot } from '../../utils/portalRoot';\nimport useClickOutside, { DEFAULT_EVENT_TYPES } from '../../hooks/useClickOutside';\nimport MenuItems from '../menuItems/MenuItems';\nimport MenuItemList from '../menuItems/MenuItemList';\nimport DropdownToggleButton, { type DropdownToggleEvent, type DropdownToggleButtonType } from './DropdownToggleButton';\nimport SplitCaretButton from './SplitCaretButton';\nimport Caret from './Caret';\nimport type { MenuItemProps as MenuItem } from '../menuItems/MenuItem';\nimport type { BUTTON_SIZE, BUTTON_STYLE, BUTTON_VARIANT } from '../button/Button';\n\nconst getPlacement = (pullRight: boolean, dropup: boolean) => {\n if (pullRight && dropup) {\n return 'top-end';\n }\n if (!pullRight && dropup) {\n return 'top-start';\n }\n if (pullRight && !dropup) {\n return 'bottom-end';\n }\n return 'bottom-start';\n};\n\nexport type ButtonDropdownProps<T extends DropdownToggleButtonType = 'button'> = {\n /**\n * Unique button id. If not present a random id is generated.\n */\n id?: string;\n\n /**\n * The button title. This may be also a node, like a <span> or a <FormattedMessage>.\n */\n title: string | React.ReactNode;\n\n /**\n * Defined weather or not the menu is rendered.\n * Use this to control the component from the outside.\n *\n * @default undefined\n */\n open?: boolean;\n\n /**\n * Defines whether the dropdown opens above or below.\n * Set it to \"true\" additionally disables the automatic position feature.\n *\n * @default false\n */\n dropup?: boolean;\n\n /**\n * Defines whether the dropdown opens right aligned to the dropdown or not.\n */\n pullRight?: boolean;\n\n /**\n * Defines how large the button will be rendered.\n *\n * Possible values are: `xs`, `sm`, `md`, `lg`\n *\n * @default 'md'\n */\n bsSize?: BUTTON_SIZE;\n\n /**\n * Defines the button color.\n *\n * Possible values are: `default`, `primary`, `secondary`, `info`, `warning`, `danger`, `success`, `muted`\n *\n * @default 'default'\n */\n bsStyle?: BUTTON_STYLE;\n\n /**\n * Defines the variation of the button design.\n *\n * Possible values are: `link`, `link-inline`, `outline`, `action`\n */\n variant?: BUTTON_VARIANT;\n\n /**\n * Specify the toggle element type.\n * It supports the following types: \"button\" | \"tag\" | \"label\"\n *\n * @default 'button'\n */\n toggleButtonType?: DropdownToggleButtonType;\n\n /**\n * Optional prop to defines whether the dropdown title is icon only which\n * applies different padding so the button is a square.\n *\n * @default false\n */\n iconOnly?: boolean;\n\n /**\n * Defines whether the caret is shown or not.\n *\n * @default false\n */\n noCaret?: boolean;\n\n /**\n * Defines whether the dropdown-toggle (with caret) should be in a separate button.\n *\n * @default false\n */\n splitButton?: boolean;\n\n /**\n * Renders the dropdown into a dedicated react portal\n *\n * @default false\n */\n usePortal?: boolean;\n\n /**\n * Items to display in the dropdown menu. If you use a custom dropdown you can skip this prop.\n */\n items?: MenuItem[];\n\n /**\n * Disables the dropdown button.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Callback for splitButton label button click.\n */\n onLabelButtonClick?: () => void;\n\n /**\n * Callback for when the toggle button was clicked to open it.\n * @param event\n * @returns\n */\n onOpen?: (event: DropdownToggleEvent<T>) => void;\n\n /**\n * Callback for when the toggle button was clicked to close it.\n * @returns\n */\n onClose?: () => void;\n\n /**\n * Allows to pass in custom dropdown menu content.\n */\n customDropdown?: React.ReactNode;\n\n /**\n * Define custom popper.js configuration for dropdown placement and modifiers.\n */\n popperConfig?: object;\n\n /**\n * Additional classes to be set on the dropdown-toggle button.\n */\n toggleClassName?: string;\n\n /**\n * Additional classes to be set on the dropdown.\n */\n dropdownClassName?: string;\n\n /**\n * Additional classes to be set to the wrapper element.\n */\n className?: string;\n};\n\nconst createButtonDropdown = <T extends DropdownToggleButtonType = 'button'>() => {\n return forwardRef<\n T extends 'button' ? HTMLButtonElement : HTMLDivElement,\n PropsWithChildren<ButtonDropdownProps<T>>\n >((props, ref) => {\n const {\n id = Math.random().toString(36).slice(2, 16),\n items = [],\n bsSize = 'md',\n bsStyle = 'default',\n variant,\n disabled = false,\n iconOnly = false,\n title,\n splitButton = false,\n customDropdown,\n open,\n dropup = false,\n pullRight = false,\n noCaret = false,\n onOpen = noop,\n onClose = noop,\n onLabelButtonClick = noop,\n usePortal = false,\n popperConfig,\n toggleButtonType = 'button',\n toggleClassName = '',\n dropdownClassName,\n className = '',\n ...remainingProps\n } = props;\n\n const [internalOpen, setInternalOpen] = useState(open);\n\n const [refDropdownToggle, setRefDropdownToggle] = useState<HTMLButtonElement | HTMLDivElement | null>(null);\n const [refDropdownMenu, setRefDropdownMenu] = useState<HTMLUListElement | null>(null);\n const [refSplitButtonToggle, setRefSplitButtonToggle] = useState<HTMLButtonElement | null>(null);\n\n const defaultPopperConfig = {\n placement: getPlacement(pullRight, dropup),\n modifiers: [],\n };\n\n const popperParentRef = splitButton && pullRight ? refSplitButtonToggle : refDropdownToggle;\n\n const { styles, attributes } = usePopper(popperParentRef, refDropdownMenu, popperConfig || defaultPopperConfig);\n\n const isUncontrolled = isNil(open);\n const isOpen = isUncontrolled ? internalOpen : open;\n\n const wrapperRef = useClickOutside(\n event => {\n if (usePortal) {\n // In case the dropdown is rendered via portal the clickOutside the toggle button element is\n // triggered since the dropdown is not a child of the wrapper element.\n // In this case we need to check if the event target is inside the dropdown-menu and prevent closing\n // the dropdown\n if (!refDropdownMenu?.contains(event.target as Node)) {\n closeMenu();\n }\n } else {\n closeMenu();\n }\n },\n DEFAULT_EVENT_TYPES,\n Boolean(isOpen) // only listen to clicks outside when the dropdown is open\n );\n\n const dropdownRoot = getOrCreatePortalRoot();\n\n const shouldShowCaret = !noCaret && !splitButton && !iconOnly;\n\n useEffect(() => {\n if (!isUncontrolled) {\n setInternalOpen(open);\n }\n }, [isUncontrolled, open]);\n\n const toggleOpen = (event?: DropdownToggleEvent<T>) => {\n const isDropdownOpen = isUncontrolled ? internalOpen : open;\n\n if (isDropdownOpen) {\n closeMenu();\n } else {\n openMenu(event);\n }\n };\n\n const openMenu = (event?: DropdownToggleEvent<T>) => {\n if (isUncontrolled) {\n setInternalOpen(true);\n }\n if (event) {\n onOpen(event);\n }\n };\n\n const closeMenu = () => {\n if (isUncontrolled) {\n setInternalOpen(false);\n }\n onClose();\n };\n\n const handleSplitLabelButtonClick = () => {\n closeMenu();\n onLabelButtonClick();\n };\n\n const handleSplitCaretButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n toggleOpen(event as any);\n };\n\n const handleDropdownButtonClick = (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement>) => {\n if (splitButton) {\n handleSplitLabelButtonClick();\n } else {\n toggleOpen(event as DropdownToggleEvent<T>);\n }\n };\n\n const wrapperClasses = classNames('dropdown', 'btn-group', isOpen && 'open', className);\n\n const dropdownClasses = classNames(\n usePortal && 'dropdown-portal',\n splitButton && pullRight && 'pull-right',\n dropdownClassName\n );\n\n const dropdownMenu = (\n <MenuItemList\n className={dropdownClasses}\n ref={setRefDropdownMenu}\n style={styles.popper}\n {...attributes.popper}\n >\n {customDropdown ? customDropdown : <MenuItems items={items} closeMenu={toggleOpen} />}\n </MenuItemList>\n );\n\n return (\n <div {...remainingProps} className={wrapperClasses} ref={wrapperRef}>\n <DropdownToggleButton\n id={id}\n splitButton={splitButton}\n bsStyle={bsStyle}\n bsSize={bsSize}\n variant={variant}\n iconOnly={iconOnly}\n disabled={disabled}\n ref={setRefDropdownToggle}\n onClick={handleDropdownButtonClick}\n outerRef={ref}\n toggleButtonType={toggleButtonType}\n className={toggleClassName}\n >\n {title}\n {shouldShowCaret && <Caret />}\n </DropdownToggleButton>\n {splitButton && (\n <SplitCaretButton\n id={id}\n bsStyle={bsStyle}\n bsSize={bsSize}\n disabled={disabled}\n className={toggleClassName}\n onClick={handleSplitCaretButtonClick}\n ref={setRefSplitButtonToggle}\n />\n )}\n {isOpen && usePortal && ReactDOM.createPortal(dropdownMenu, dropdownRoot)}\n {isOpen && !usePortal && dropdownMenu}\n </div>\n );\n });\n};\n\nconst ButtonDropdown = createButtonDropdown();\n\nexport default ButtonDropdown;\n"],"names":["getPlacement","pullRight","dropup","createButtonDropdown","forwardRef","props","ref","id","items","bsSize","bsStyle","variant","disabled","iconOnly","title","splitButton","customDropdown","open","noCaret","onOpen","noop","onClose","onLabelButtonClick","usePortal","popperConfig","toggleButtonType","toggleClassName","dropdownClassName","className","remainingProps","internalOpen","setInternalOpen","useState","refDropdownToggle","setRefDropdownToggle","refDropdownMenu","setRefDropdownMenu","refSplitButtonToggle","setRefSplitButtonToggle","defaultPopperConfig","popperParentRef","styles","attributes","usePopper","isUncontrolled","isNil","isOpen","wrapperRef","useClickOutside","event","closeMenu","DEFAULT_EVENT_TYPES","dropdownRoot","getOrCreatePortalRoot","shouldShowCaret","useEffect","toggleOpen","openMenu","handleSplitLabelButtonClick","handleSplitCaretButtonClick","handleDropdownButtonClick","wrapperClasses","classNames","dropdownClasses","dropdownMenu","jsx","MenuItemList","MenuItems","jsxs","DropdownToggleButton","Caret","SplitCaretButton","ReactDOM","ButtonDropdown"],"mappings":"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"}
1
+ {"version":3,"file":"ButtonDropdown.js","sources":["../../../src/components/dropdown/ButtonDropdown.tsx"],"sourcesContent":["import React, { useState, useEffect, forwardRef, type PropsWithChildren } from 'react';\nimport ReactDOM from 'react-dom';\nimport { usePopper } from 'react-popper';\nimport { noop } from 'es-toolkit/function';\nimport { isNil } from 'es-toolkit/predicate';\n\nimport classNames from '../../utils/classNames';\nimport { getOrCreatePortalRoot } from '../../utils/portalRoot';\nimport useClickOutside, { DEFAULT_EVENT_TYPES } from '../../hooks/useClickOutside';\nimport MenuItems from '../menuItems/MenuItems';\nimport MenuItemList from '../menuItems/MenuItemList';\nimport DropdownToggleButton, { type DropdownToggleEvent, type DropdownToggleButtonType } from './DropdownToggleButton';\nimport SplitCaretButton from './SplitCaretButton';\nimport Caret from './Caret';\nimport type { MenuItemProps as MenuItem } from '../menuItems/MenuItem';\nimport type { BUTTON_SIZE, BUTTON_STYLE, BUTTON_VARIANT } from '../button/Button';\n\nconst getPlacement = (pullRight: boolean, dropup: boolean) => {\n if (pullRight && dropup) {\n return 'top-end';\n }\n if (!pullRight && dropup) {\n return 'top-start';\n }\n if (pullRight && !dropup) {\n return 'bottom-end';\n }\n return 'bottom-start';\n};\n\nexport type ButtonDropdownProps<T extends DropdownToggleButtonType = 'button'> = {\n /**\n * Unique button id. If not present a random id is generated.\n */\n id?: string;\n\n /**\n * The button title. This may be also a node, like a <span> or a <FormattedMessage>.\n */\n title: string | React.ReactNode;\n\n /**\n * Defined weather or not the menu is rendered.\n * Use this to control the component from the outside.\n *\n * @default undefined\n */\n open?: boolean;\n\n /**\n * Defines whether the dropdown opens above or below.\n * Set it to \"true\" additionally disables the automatic position feature.\n *\n * @default false\n */\n dropup?: boolean;\n\n /**\n * Defines whether the dropdown opens right aligned to the dropdown or not.\n */\n pullRight?: boolean;\n\n /**\n * Defines how large the button will be rendered.\n *\n * Possible values are: `xs`, `sm`, `md`, `lg`\n *\n * @default 'md'\n */\n bsSize?: BUTTON_SIZE;\n\n /**\n * Defines the button color.\n *\n * Possible values are: `default`, `primary`, `secondary`, `info`, `warning`, `danger`, `success`, `muted`\n *\n * @default 'default'\n */\n bsStyle?: BUTTON_STYLE;\n\n /**\n * Defines the variation of the button design.\n *\n * Possible values are: `link`, `link-inline`, `outline`, `action`\n */\n variant?: BUTTON_VARIANT;\n\n /**\n * Specify the toggle element type.\n * It supports the following types: \"button\" | \"tag\" | \"label\"\n *\n * @default 'button'\n */\n toggleButtonType?: DropdownToggleButtonType;\n\n /**\n * Optional prop to defines whether the dropdown title is icon only which\n * applies different padding so the button is a square.\n *\n * @default false\n */\n iconOnly?: boolean;\n\n /**\n * Optional rioglyph icon name forwarded to the underlying button toggle.\n */\n iconName?: string;\n\n /**\n * Defines whether the caret is shown or not.\n *\n * @default false\n */\n noCaret?: boolean;\n\n /**\n * Defines whether the dropdown-toggle (with caret) should be in a separate button.\n *\n * @default false\n */\n splitButton?: boolean;\n\n /**\n * Renders the dropdown into a dedicated react portal\n *\n * @default false\n */\n usePortal?: boolean;\n\n /**\n * Items to display in the dropdown menu. If you use a custom dropdown you can skip this prop.\n */\n items?: MenuItem[];\n\n /**\n * Disables the dropdown button.\n *\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Callback for splitButton label button click.\n */\n onLabelButtonClick?: () => void;\n\n /**\n * Callback for when the toggle button was clicked to open it.\n * @param event\n * @returns\n */\n onOpen?: (event: DropdownToggleEvent<T>) => void;\n\n /**\n * Callback for when the toggle button was clicked to close it.\n * @returns\n */\n onClose?: () => void;\n\n /**\n * Allows to pass in custom dropdown menu content.\n */\n customDropdown?: React.ReactNode;\n\n /**\n * Define custom popper.js configuration for dropdown placement and modifiers.\n */\n popperConfig?: object;\n\n /**\n * Additional classes to be set on the dropdown-toggle button.\n */\n toggleClassName?: string;\n\n /**\n * Additional classes to be set on the dropdown.\n */\n dropdownClassName?: string;\n\n /**\n * Additional classes to be set to the wrapper element.\n */\n className?: string;\n};\n\nconst createButtonDropdown = <T extends DropdownToggleButtonType = 'button'>() => {\n return forwardRef<\n T extends 'button' ? HTMLButtonElement : HTMLDivElement,\n PropsWithChildren<ButtonDropdownProps<T>>\n >((props, ref) => {\n const {\n id = Math.random().toString(36).slice(2, 16),\n items = [],\n bsSize = 'md',\n bsStyle = 'default',\n variant,\n disabled = false,\n iconName,\n iconOnly = false,\n title,\n splitButton = false,\n customDropdown,\n open,\n dropup = false,\n pullRight = false,\n noCaret = false,\n onOpen = noop,\n onClose = noop,\n onLabelButtonClick = noop,\n usePortal = false,\n popperConfig,\n toggleButtonType = 'button',\n toggleClassName = '',\n dropdownClassName,\n className = '',\n ...remainingProps\n } = props;\n\n const [internalOpen, setInternalOpen] = useState(open);\n\n const [refDropdownToggle, setRefDropdownToggle] = useState<HTMLButtonElement | HTMLDivElement | null>(null);\n const [refDropdownMenu, setRefDropdownMenu] = useState<HTMLUListElement | null>(null);\n const [refSplitButtonToggle, setRefSplitButtonToggle] = useState<HTMLButtonElement | null>(null);\n\n const defaultPopperConfig = {\n placement: getPlacement(pullRight, dropup),\n modifiers: [],\n };\n\n const popperParentRef = splitButton && pullRight ? refSplitButtonToggle : refDropdownToggle;\n\n const { styles, attributes } = usePopper(popperParentRef, refDropdownMenu, popperConfig || defaultPopperConfig);\n\n const isUncontrolled = isNil(open);\n const isOpen = isUncontrolled ? internalOpen : open;\n\n const wrapperRef = useClickOutside(\n event => {\n if (usePortal) {\n // In case the dropdown is rendered via portal the clickOutside the toggle button element is\n // triggered since the dropdown is not a child of the wrapper element.\n // In this case we need to check if the event target is inside the dropdown-menu and prevent closing\n // the dropdown\n if (!refDropdownMenu?.contains(event.target as Node)) {\n closeMenu();\n }\n } else {\n closeMenu();\n }\n },\n DEFAULT_EVENT_TYPES,\n Boolean(isOpen) // only listen to clicks outside when the dropdown is open\n );\n\n const dropdownRoot = getOrCreatePortalRoot();\n\n const shouldShowCaret = !noCaret && !splitButton && !iconOnly;\n\n useEffect(() => {\n if (!isUncontrolled) {\n setInternalOpen(open);\n }\n }, [isUncontrolled, open]);\n\n const toggleOpen = (event?: DropdownToggleEvent<T>) => {\n const isDropdownOpen = isUncontrolled ? internalOpen : open;\n\n if (isDropdownOpen) {\n closeMenu();\n } else {\n openMenu(event);\n }\n };\n\n const openMenu = (event?: DropdownToggleEvent<T>) => {\n if (isUncontrolled) {\n setInternalOpen(true);\n }\n if (event) {\n onOpen(event);\n }\n };\n\n const closeMenu = () => {\n if (isUncontrolled) {\n setInternalOpen(false);\n }\n onClose();\n };\n\n const handleSplitLabelButtonClick = () => {\n closeMenu();\n onLabelButtonClick();\n };\n\n const handleSplitCaretButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n toggleOpen(event as DropdownToggleEvent<T>);\n };\n\n const handleDropdownButtonClick = (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement>) => {\n if (splitButton) {\n handleSplitLabelButtonClick();\n } else {\n toggleOpen(event as DropdownToggleEvent<T>);\n }\n };\n\n const wrapperClasses = classNames('dropdown', 'btn-group', isOpen && 'open', className);\n\n const dropdownClasses = classNames(\n usePortal && 'dropdown-portal',\n splitButton && pullRight && 'pull-right',\n dropdownClassName\n );\n\n const dropdownMenu = (\n <MenuItemList\n className={dropdownClasses}\n ref={setRefDropdownMenu}\n style={styles.popper}\n {...attributes.popper}\n >\n {customDropdown ? customDropdown : <MenuItems items={items} closeMenu={toggleOpen} />}\n </MenuItemList>\n );\n\n return (\n <div {...remainingProps} className={wrapperClasses} ref={wrapperRef}>\n <DropdownToggleButton\n id={id}\n splitButton={splitButton}\n bsStyle={bsStyle}\n bsSize={bsSize}\n variant={variant}\n iconOnly={iconOnly}\n iconName={iconName}\n disabled={disabled}\n ref={setRefDropdownToggle}\n onClick={handleDropdownButtonClick}\n outerRef={ref}\n toggleButtonType={toggleButtonType}\n className={toggleClassName}\n >\n {title}\n {shouldShowCaret && <Caret />}\n </DropdownToggleButton>\n {splitButton && (\n <SplitCaretButton\n id={id}\n bsStyle={bsStyle}\n bsSize={bsSize}\n disabled={disabled}\n className={toggleClassName}\n onClick={handleSplitCaretButtonClick}\n ref={setRefSplitButtonToggle}\n />\n )}\n {isOpen && usePortal && ReactDOM.createPortal(dropdownMenu, dropdownRoot)}\n {isOpen && !usePortal && dropdownMenu}\n </div>\n );\n });\n};\n\nconst ButtonDropdown = createButtonDropdown();\n\nexport default ButtonDropdown;\n"],"names":["getPlacement","pullRight","dropup","createButtonDropdown","forwardRef","props","ref","id","items","bsSize","bsStyle","variant","disabled","iconName","iconOnly","title","splitButton","customDropdown","open","noCaret","onOpen","noop","onClose","onLabelButtonClick","usePortal","popperConfig","toggleButtonType","toggleClassName","dropdownClassName","className","remainingProps","internalOpen","setInternalOpen","useState","refDropdownToggle","setRefDropdownToggle","refDropdownMenu","setRefDropdownMenu","refSplitButtonToggle","setRefSplitButtonToggle","defaultPopperConfig","popperParentRef","styles","attributes","usePopper","isUncontrolled","isNil","isOpen","wrapperRef","useClickOutside","event","closeMenu","DEFAULT_EVENT_TYPES","dropdownRoot","getOrCreatePortalRoot","shouldShowCaret","useEffect","toggleOpen","openMenu","handleSplitLabelButtonClick","handleSplitCaretButtonClick","handleDropdownButtonClick","wrapperClasses","classNames","dropdownClasses","dropdownMenu","jsx","MenuItemList","MenuItems","jsxs","DropdownToggleButton","Caret","SplitCaretButton","ReactDOM","ButtonDropdown"],"mappings":"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"}
@@ -5,6 +5,7 @@ export type DropdownToggleEvent<T extends DropdownToggleButtonType = 'button'> =
5
5
  export type DropdownToggleButtonProps = HTMLProps<HTMLButtonElement> & {
6
6
  id?: string;
7
7
  disabled?: boolean;
8
+ iconName?: string;
8
9
  splitButton?: boolean;
9
10
  iconOnly?: boolean;
10
11
  onClick: (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement>) => void;