@geotab/zenith 3.1.1-beta.6 → 3.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/README.md +20 -0
  2. package/dist/advancedGroupsFilter/advancedGroupsFilter.js +136 -30
  3. package/dist/advancedGroupsFilter/advancedGroupsFilterForm.js +139 -34
  4. package/dist/advancedGroupsFilter/advancedGroupsFilterFormSection.js +352 -87
  5. package/dist/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.d.ts +0 -1
  6. package/dist/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.js +83 -9
  7. package/dist/alertRaw/alertRaw.js +175 -54
  8. package/dist/banner/bannerMultipLine.js +131 -23
  9. package/dist/banner/bannerSingleLine.js +110 -16
  10. package/dist/betaPill/betaPill.js +111 -20
  11. package/dist/bookmark/bookmark.js +95 -28
  12. package/dist/bulkEditControl/bulkEditControl.js +167 -34
  13. package/dist/calendar/calendar.js +943 -273
  14. package/dist/calendar/calendarUtils.js +157 -85
  15. package/dist/card/card.js +268 -123
  16. package/dist/chart/accessibleChart/accessibleChartNarrative.js +648 -555
  17. package/dist/chart/accessibleChart/accessibleChartTable.js +245 -86
  18. package/dist/chart/chart.js +36 -21
  19. package/dist/chart/chartAxis/chartAxis.js +85 -7
  20. package/dist/checkboxListWithAction/checkboxListWithAction.js +224 -69
  21. package/dist/chip/chip.js +195 -91
  22. package/dist/columnsSelector/columnsSelector.js +97 -12
  23. package/dist/columnsSelector/columnsTab/columnsTab.js +59 -15
  24. package/dist/columnsSelector/columnsTabGroup/columnsTabGroup.js +81 -34
  25. package/dist/comboboxSelected/comboboxSelected.js +1 -3
  26. package/dist/dataFeed/feedExpandControl/feedExpandControl.js +25 -10
  27. package/dist/dataGrid/columns/checkboxColumn/checkboxHeaderCell.js +92 -11
  28. package/dist/dataGrid/dataGrid.js +227 -117
  29. package/dist/dataGrid/emptySearchList/emptySearchList.js +56 -9
  30. package/dist/dataGrid/entitiesListActions/actions/columnsListButton.js +51 -7
  31. package/dist/dataGrid/entitiesListActions/actions/fullscreenButton.js +64 -18
  32. package/dist/dataGrid/withFlexibleColumns/components/columnSettings.js +84 -10
  33. package/dist/dataGrid/withFlexibleColumns/components/columnSettingsSidePanel.js +48 -16
  34. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +223 -32
  35. package/dist/dataGrid/withSelectableRows/withSelectableRows.js +286 -213
  36. package/dist/dataGrid/withSortableColumns/columns/sortableColumnWrapper.js +178 -95
  37. package/dist/dateInputInner/dateInputInner.js +791 -476
  38. package/dist/dateInputInner/dateInputInnerControlBlock.js +125 -22
  39. package/dist/dateInputRaw/dateInputRaw.js +315 -104
  40. package/dist/dateInputRaw/utils/getLabel.js +38 -7
  41. package/dist/dateRangeInner/dateRangeInner.js +172 -58
  42. package/dist/dateRangeRaw/dateRangeRaw.js +601 -239
  43. package/dist/dateRangeRaw/utils/dateRangeUtils.js +629 -241
  44. package/dist/dateSelectionWrapper/dateSelectionWrapper.js +152 -14
  45. package/dist/dialog/dialogContent.js +123 -40
  46. package/dist/dropdownRaw/dropdownHelper.d.ts +2 -2
  47. package/dist/dropdownRaw/dropdownHelper.js +9 -9
  48. package/dist/dropdownRaw/dropdownList.js +447 -78
  49. package/dist/dropdownRaw/dropdownPopup.js +218 -20
  50. package/dist/dropdownRaw/dropdownRaw.js +866 -506
  51. package/dist/dropdownRaw/dropdownSearchableTrigger.js +223 -46
  52. package/dist/dropdownRaw/stateReducer/stateAction.d.ts +5 -1
  53. package/dist/dropdownRaw/stateReducer/stateActionType.d.ts +2 -1
  54. package/dist/dropdownRaw/stateReducer/stateActionType.js +1 -0
  55. package/dist/dropdownRaw/stateReducer/stateReducer.d.ts +6 -1
  56. package/dist/dropdownRaw/stateReducer/stateReducer.js +24 -12
  57. package/dist/dropdownRaw/stateReducer/stateReducerHelper.d.ts +2 -0
  58. package/dist/dropdownRaw/stateReducer/stateReducerHelper.js +20 -1
  59. package/dist/dropdownRaw/stateReducer/stateReducerTestData.d.ts +39 -0
  60. package/dist/dropdownRaw/stateReducer/stateReducerTestData.js +74 -0
  61. package/dist/dropdownRaw/types.d.ts +1 -0
  62. package/dist/favoriteButton/favoriteButton.js +59 -10
  63. package/dist/filters/components/filtersContainer.js +151 -64
  64. package/dist/filters/components/filtersEmptySelectedList.js +30 -4
  65. package/dist/filters/components/filtersSaveModal.js +140 -42
  66. package/dist/filters/components/filtersSavedChipComponent.js +318 -108
  67. package/dist/filters/components/filtersSearchItemData.js +127 -47
  68. package/dist/filters/components/filtersSearchList.js +381 -179
  69. package/dist/filters/components/filtersSelect.js +128 -61
  70. package/dist/filters/components/filtersSelectListItem.js +125 -13
  71. package/dist/filters/components/filtersSidePanel.js +510 -178
  72. package/dist/filters/filters.js +445 -268
  73. package/dist/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +729 -272
  74. package/dist/filtersBar/components/resetComponentButton.js +45 -5
  75. package/dist/filtersBar/filtersBarActions/filtersBarActions.js +126 -15
  76. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +155 -49
  77. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +360 -104
  78. package/dist/filtersBar/filtersContainer/filtersContainer.js +204 -134
  79. package/dist/formField/components/formFieldWithLabel.d.ts +2 -1
  80. package/dist/formField/components/formFieldWithLabel.js +3 -2
  81. package/dist/formField/components/formFieldWithoutLabel.d.ts +2 -1
  82. package/dist/formField/components/formFieldWithoutLabel.js +3 -3
  83. package/dist/formField/components/trailingComponent.d.ts +8 -0
  84. package/dist/formField/components/trailingComponent.js +11 -0
  85. package/dist/formField/formField.js +12 -11
  86. package/dist/formField/hooks/useError.js +100 -36
  87. package/dist/formGroup/components/reviewListToggle/reviewListToggle.js +72 -7
  88. package/dist/formGroup/hooks/useToggle.js +37 -11
  89. package/dist/formGroup/utils/getControls.js +8 -7
  90. package/dist/formLayout/hooks/useError.js +55 -15
  91. package/dist/formLayout/hooks/useFormButtons.js +128 -27
  92. package/dist/formSection/components/formSectionModal.js +1 -1
  93. package/dist/formSection/formSection.js +1 -1
  94. package/dist/formSection/hooks/useError.js +70 -22
  95. package/dist/formStepper/components/formStep.js +65 -10
  96. package/dist/formStepper/formStepper.js +129 -33
  97. package/dist/formStepperButtons/formStepperButtons.js +184 -38
  98. package/dist/groupsFilter/groupsHelper.d.ts +1 -1
  99. package/dist/groupsFilterRaw/groupsFilterAdjustmentState.js +162 -17
  100. package/dist/groupsFilterRaw/groupsFilterBox.js +137 -32
  101. package/dist/groupsFilterRaw/groupsFilterCommon.js +75 -8
  102. package/dist/groupsFilterRaw/groupsFilterCurrentlySelectedState.js +184 -25
  103. package/dist/groupsFilterRaw/groupsFilterHelper.d.ts +2 -1
  104. package/dist/groupsFilterRaw/groupsFilterHelper.js +284 -168
  105. package/dist/groupsFilterRaw/groupsFilterInitialState.js +266 -18
  106. package/dist/groupsFilterRaw/groupsFilterMenu.js +124 -9
  107. package/dist/groupsFilterRaw/groupsFilterRaw.d.ts +1 -0
  108. package/dist/groupsFilterRaw/groupsFilterRaw.js +816 -308
  109. package/dist/groupsFilterRaw/groupsFilterTestData.d.ts +155 -2
  110. package/dist/groupsFilterRaw/groupsFilterTestData.js +153 -58
  111. package/dist/groupsFilterRaw/groupsFilterTrigger.js +139 -35
  112. package/dist/groupsFilterRaw/groupsHelper.js +739 -208
  113. package/dist/groupsFilterRaw/stateReducer/stateReducerHelper.js +3 -1
  114. package/dist/groupsFilterRaw/types.d.ts +1 -0
  115. package/dist/header/components/collapsedItemsControl/collapsedItemsControl.js +107 -52
  116. package/dist/header/components/mobileFilterControl/mobileFilterControl.js +62 -9
  117. package/dist/header/components/mobileSearchControl/mobileSearchControl.js +119 -14
  118. package/dist/header/headerBack.js +64 -20
  119. package/dist/index.css +110 -71
  120. package/dist/index.d.ts +1 -0
  121. package/dist/index.js +4 -1
  122. package/dist/list/itemData/itemDataInternal.js +216 -51
  123. package/dist/list/listItem/listItem.js +168 -55
  124. package/dist/menu/components/menuErrorItem.js +33 -5
  125. package/dist/mobileSheet/mobileSheet.js +195 -69
  126. package/dist/modal/modal.js +300 -142
  127. package/dist/nav/nav.js +1 -1
  128. package/dist/nav/navFooter/navFooter.js +82 -39
  129. package/dist/nav/navFooter/navFooterAction/navFooterAction.js +52 -13
  130. package/dist/nav/navHeader/navHeader.js +86 -36
  131. package/dist/nav/navHeader/navHeaderSearch/navHeaderSearch.js +88 -29
  132. package/dist/nav/navItem/navItem.d.ts +3 -3
  133. package/dist/nav/navItem/navItem.js +35 -33
  134. package/dist/nav/navMobileBar/navMobileBar.js +67 -21
  135. package/dist/notification/notification.js +124 -21
  136. package/dist/pagination/paginationArrow.js +81 -11
  137. package/dist/pagination/paginationText/paginationText.js +45 -11
  138. package/dist/pill/components/pillNonActionable/pillNonActionable.js +93 -24
  139. package/dist/pillBox/components/pillBoxItem.js +52 -9
  140. package/dist/pillBox/pillBox.js +121 -20
  141. package/dist/pillExpandable/pillExpandable.js +333 -139
  142. package/dist/rangeRaw/rangeRaw.js +486 -141
  143. package/dist/rangeRaw/utils/rangeHelper.js +209 -39
  144. package/dist/searchInputRaw/searchInputRaw.js +180 -65
  145. package/dist/skeleton/skeleton.js +51 -6
  146. package/dist/sortControl/sortControl.js +152 -42
  147. package/dist/stepperRaw/stepperRaw.js +116 -42
  148. package/dist/summary/summary.js +94 -8
  149. package/dist/table/actions/actionsMenu.js +171 -78
  150. package/dist/table/flexible/columnSettings.js +80 -10
  151. package/dist/table/flexible/columnsList.js +110 -43
  152. package/dist/table/flexible/columnsPopup.js +77 -20
  153. package/dist/table/nested/useNestedRows.js +167 -77
  154. package/dist/table/selectable/selectableHeader.js +180 -41
  155. package/dist/table/selectable/useSelectableRows.js +270 -191
  156. package/dist/table/sortable/sortableHeader.js +153 -75
  157. package/dist/tabs/tabs.js +227 -118
  158. package/dist/timePickerRaw/timePickerRaw.js +278 -58
  159. package/dist/toastRaw/toastRaw.js +138 -32
  160. package/dist/toggleButton/toggleButton.d.ts +0 -1
  161. package/dist/toggleButtonRaw/toggleButtonRaw.d.ts +1 -0
  162. package/dist/toggleButtonRaw/toggleButtonRaw.js +146 -40
  163. package/dist/utils/formatDate.js +1001 -117
  164. package/{esm/utils/localization/translations/cs-json.js → dist/utils/localization/translations/cs.json} +11 -12
  165. package/{esm/utils/localization/translations/da-DK-json.js → dist/utils/localization/translations/da-DK.json} +31 -23
  166. package/{esm/utils/localization/translations/de-json.js → dist/utils/localization/translations/de.json} +12 -13
  167. package/dist/utils/localization/translations/en.json +308 -0
  168. package/{esm/utils/localization/translations/es-json.js → dist/utils/localization/translations/es.json} +11 -12
  169. package/{esm/utils/localization/translations/fi-FI-json.js → dist/utils/localization/translations/fi-FI.json} +31 -23
  170. package/{esm/utils/localization/translations/fr-FR-json.js → dist/utils/localization/translations/fr-FR.json} +12 -12
  171. package/{esm/utils/localization/translations/fr-json.js → dist/utils/localization/translations/fr.json} +11 -12
  172. package/{esm/utils/localization/translations/hu-HU-json.js → dist/utils/localization/translations/hu-HU.json} +31 -23
  173. package/{esm/utils/localization/translations/id-json.js → dist/utils/localization/translations/id.json} +11 -13
  174. package/{esm/utils/localization/translations/it-json.js → dist/utils/localization/translations/it.json} +11 -12
  175. package/{esm/utils/localization/translations/ja-json.js → dist/utils/localization/translations/ja.json} +11 -12
  176. package/{esm/utils/localization/translations/ko-KR-json.js → dist/utils/localization/translations/ko-KR.json} +24 -23
  177. package/{esm/utils/localization/translations/ms-json.js → dist/utils/localization/translations/ms.json} +11 -12
  178. package/{esm/utils/localization/translations/nb-NO-json.js → dist/utils/localization/translations/nb-NO.json} +31 -23
  179. package/{esm/utils/localization/translations/nl-json.js → dist/utils/localization/translations/nl.json} +11 -12
  180. package/{esm/utils/localization/translations/pl-json.js → dist/utils/localization/translations/pl.json} +11 -12
  181. package/{esm/utils/localization/translations/pt-BR-json.js → dist/utils/localization/translations/pt-BR.json} +11 -12
  182. package/{esm/utils/localization/translations/sk-SK-json.js → dist/utils/localization/translations/sk-SK.json} +31 -23
  183. package/{esm/utils/localization/translations/sv-json.js → dist/utils/localization/translations/sv.json} +11 -12
  184. package/{esm/utils/localization/translations/th-json.js → dist/utils/localization/translations/th.json} +11 -12
  185. package/{esm/utils/localization/translations/tr-json.js → dist/utils/localization/translations/tr.json} +11 -12
  186. package/{esm/utils/localization/translations/zh-Hans-json.js → dist/utils/localization/translations/zh-Hans.json} +11 -12
  187. package/{esm/utils/localization/translations/zh-TW-json.js → dist/utils/localization/translations/zh-TW.json} +11 -23
  188. package/dist/utils/localization/translationsDictionary.d.ts +2 -0
  189. package/dist/utils/localization/translationsDictionary.js +63 -0
  190. package/dist/utils/localization/useLanguage.js +2 -74
  191. package/esm/advancedGroupsFilter/advancedGroupsFilter.js +130 -29
  192. package/esm/advancedGroupsFilter/advancedGroupsFilterForm.js +133 -33
  193. package/esm/advancedGroupsFilter/advancedGroupsFilterFormSection.js +317 -65
  194. package/esm/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.d.ts +0 -1
  195. package/esm/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.js +77 -8
  196. package/esm/alertRaw/alertRaw.js +165 -51
  197. package/esm/banner/bannerMultipLine.js +121 -20
  198. package/esm/banner/bannerSingleLine.js +100 -13
  199. package/esm/betaPill/betaPill.js +105 -19
  200. package/esm/bookmark/bookmark.js +89 -27
  201. package/esm/bulkEditControl/bulkEditControl.js +161 -33
  202. package/esm/calendar/calendar.js +937 -272
  203. package/esm/calendar/calendarUtils.js +151 -84
  204. package/esm/card/card.js +233 -101
  205. package/esm/chart/accessibleChart/accessibleChartNarrative.js +642 -554
  206. package/esm/chart/accessibleChart/accessibleChartTable.js +239 -85
  207. package/esm/chart/chart.js +30 -20
  208. package/esm/chart/chartAxis/chartAxis.js +79 -6
  209. package/esm/checkboxListWithAction/checkboxListWithAction.js +218 -68
  210. package/esm/chip/chip.js +189 -90
  211. package/esm/columnsSelector/columnsSelector.js +91 -11
  212. package/esm/columnsSelector/columnsTab/columnsTab.js +53 -14
  213. package/esm/columnsSelector/columnsTabGroup/columnsTabGroup.js +75 -33
  214. package/esm/comboboxSelected/comboboxSelected.js +1 -3
  215. package/esm/dataFeed/feedExpandControl/feedExpandControl.js +21 -9
  216. package/esm/dataGrid/columns/checkboxColumn/checkboxHeaderCell.js +86 -10
  217. package/esm/dataGrid/dataGrid.js +221 -116
  218. package/esm/dataGrid/emptySearchList/emptySearchList.js +50 -8
  219. package/esm/dataGrid/entitiesListActions/actions/columnsListButton.js +45 -6
  220. package/esm/dataGrid/entitiesListActions/actions/fullscreenButton.js +58 -17
  221. package/esm/dataGrid/withFlexibleColumns/components/columnSettings.js +78 -9
  222. package/esm/dataGrid/withFlexibleColumns/components/columnSettingsSidePanel.js +44 -15
  223. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +217 -31
  224. package/esm/dataGrid/withSelectableRows/withSelectableRows.js +280 -212
  225. package/esm/dataGrid/withSortableColumns/columns/sortableColumnWrapper.js +172 -94
  226. package/esm/dateInputInner/dateInputInner.js +785 -475
  227. package/esm/dateInputInner/dateInputInnerControlBlock.js +119 -21
  228. package/esm/dateInputRaw/dateInputRaw.js +309 -103
  229. package/esm/dateInputRaw/utils/getLabel.js +32 -6
  230. package/esm/dateRangeInner/dateRangeInner.js +166 -57
  231. package/esm/dateRangeRaw/dateRangeRaw.js +595 -238
  232. package/esm/dateRangeRaw/utils/dateRangeUtils.js +622 -239
  233. package/esm/dateSelectionWrapper/dateSelectionWrapper.js +146 -13
  234. package/esm/dialog/dialogContent.js +117 -39
  235. package/esm/dropdownRaw/dropdownHelper.d.ts +2 -2
  236. package/esm/dropdownRaw/dropdownHelper.js +10 -10
  237. package/esm/dropdownRaw/dropdownList.js +412 -56
  238. package/esm/dropdownRaw/dropdownPopup.js +212 -19
  239. package/esm/dropdownRaw/dropdownRaw.js +862 -507
  240. package/esm/dropdownRaw/dropdownSearchableTrigger.js +217 -45
  241. package/esm/dropdownRaw/stateReducer/stateAction.d.ts +5 -1
  242. package/esm/dropdownRaw/stateReducer/stateActionType.d.ts +2 -1
  243. package/esm/dropdownRaw/stateReducer/stateActionType.js +1 -0
  244. package/esm/dropdownRaw/stateReducer/stateReducer.d.ts +6 -1
  245. package/esm/dropdownRaw/stateReducer/stateReducer.js +24 -12
  246. package/esm/dropdownRaw/stateReducer/stateReducerHelper.d.ts +2 -0
  247. package/esm/dropdownRaw/stateReducer/stateReducerHelper.js +18 -0
  248. package/esm/dropdownRaw/stateReducer/stateReducerTestData.d.ts +39 -0
  249. package/esm/dropdownRaw/stateReducer/stateReducerTestData.js +71 -0
  250. package/esm/dropdownRaw/types.d.ts +1 -0
  251. package/esm/favoriteButton/favoriteButton.js +53 -9
  252. package/esm/filters/components/filtersContainer.js +141 -61
  253. package/esm/filters/components/filtersEmptySelectedList.js +24 -3
  254. package/esm/filters/components/filtersSaveModal.js +134 -41
  255. package/esm/filters/components/filtersSavedChipComponent.js +312 -107
  256. package/esm/filters/components/filtersSearchItemData.js +121 -46
  257. package/esm/filters/components/filtersSearchList.js +375 -178
  258. package/esm/filters/components/filtersSelect.js +122 -60
  259. package/esm/filters/components/filtersSelectListItem.js +119 -12
  260. package/esm/filters/components/filtersSidePanel.js +504 -177
  261. package/esm/filters/filters.js +435 -265
  262. package/esm/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +722 -270
  263. package/esm/filtersBar/components/resetComponentButton.js +39 -4
  264. package/esm/filtersBar/filtersBarActions/filtersBarActions.js +120 -14
  265. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +149 -48
  266. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +354 -103
  267. package/esm/filtersBar/filtersContainer/filtersContainer.js +198 -133
  268. package/esm/formField/components/formFieldWithLabel.d.ts +2 -1
  269. package/esm/formField/components/formFieldWithLabel.js +3 -2
  270. package/esm/formField/components/formFieldWithoutLabel.d.ts +2 -1
  271. package/esm/formField/components/formFieldWithoutLabel.js +3 -3
  272. package/esm/formField/components/trailingComponent.d.ts +8 -0
  273. package/esm/formField/components/trailingComponent.js +7 -0
  274. package/esm/formField/formField.js +12 -11
  275. package/esm/formField/hooks/useError.js +94 -35
  276. package/esm/formGroup/components/reviewListToggle/reviewListToggle.js +66 -6
  277. package/esm/formGroup/hooks/useToggle.js +31 -10
  278. package/esm/formGroup/utils/getControls.js +8 -7
  279. package/esm/formLayout/hooks/useError.js +49 -14
  280. package/esm/formLayout/hooks/useFormButtons.js +122 -26
  281. package/esm/formSection/components/formSectionModal.js +1 -1
  282. package/esm/formSection/formSection.js +1 -1
  283. package/esm/formSection/hooks/useError.js +64 -21
  284. package/esm/formStepper/components/formStep.js +59 -9
  285. package/esm/formStepper/formStepper.js +123 -32
  286. package/esm/formStepperButtons/formStepperButtons.js +178 -37
  287. package/esm/groupsFilter/groupsHelper.d.ts +1 -1
  288. package/esm/groupsFilterRaw/groupsFilterAdjustmentState.js +152 -14
  289. package/esm/groupsFilterRaw/groupsFilterBox.js +131 -31
  290. package/esm/groupsFilterRaw/groupsFilterCommon.js +69 -7
  291. package/esm/groupsFilterRaw/groupsFilterCurrentlySelectedState.js +178 -24
  292. package/esm/groupsFilterRaw/groupsFilterHelper.d.ts +2 -1
  293. package/esm/groupsFilterRaw/groupsFilterHelper.js +279 -168
  294. package/esm/groupsFilterRaw/groupsFilterInitialState.js +260 -17
  295. package/esm/groupsFilterRaw/groupsFilterMenu.js +118 -8
  296. package/esm/groupsFilterRaw/groupsFilterRaw.d.ts +1 -0
  297. package/esm/groupsFilterRaw/groupsFilterRaw.js +811 -308
  298. package/esm/groupsFilterRaw/groupsFilterTestData.d.ts +155 -2
  299. package/esm/groupsFilterRaw/groupsFilterTestData.js +152 -57
  300. package/esm/groupsFilterRaw/groupsFilterTrigger.js +133 -34
  301. package/esm/groupsFilterRaw/groupsHelper.js +733 -207
  302. package/esm/groupsFilterRaw/stateReducer/stateReducerHelper.js +3 -1
  303. package/esm/groupsFilterRaw/types.d.ts +1 -0
  304. package/esm/header/components/collapsedItemsControl/collapsedItemsControl.js +101 -51
  305. package/esm/header/components/mobileFilterControl/mobileFilterControl.js +56 -8
  306. package/esm/header/components/mobileSearchControl/mobileSearchControl.js +113 -13
  307. package/esm/header/headerBack.js +58 -19
  308. package/esm/index.d.ts +1 -0
  309. package/esm/index.js +1 -0
  310. package/esm/list/itemData/itemDataInternal.js +210 -50
  311. package/esm/list/listItem/listItem.js +162 -54
  312. package/esm/menu/components/menuErrorItem.js +27 -4
  313. package/esm/mobileSheet/mobileSheet.js +189 -68
  314. package/esm/modal/modal.js +265 -120
  315. package/esm/nav/nav.js +1 -1
  316. package/esm/nav/navFooter/navFooter.js +76 -38
  317. package/esm/nav/navFooter/navFooterAction/navFooterAction.js +46 -12
  318. package/esm/nav/navHeader/navHeader.js +80 -35
  319. package/esm/nav/navHeader/navHeaderSearch/navHeaderSearch.js +82 -28
  320. package/esm/nav/navItem/navItem.d.ts +3 -3
  321. package/esm/nav/navItem/navItem.js +35 -33
  322. package/esm/nav/navMobileBar/navMobileBar.js +61 -20
  323. package/esm/notification/notification.js +114 -18
  324. package/esm/pagination/paginationArrow.js +75 -10
  325. package/esm/pagination/paginationText/paginationText.js +39 -10
  326. package/esm/pill/components/pillNonActionable/pillNonActionable.js +87 -23
  327. package/esm/pillBox/components/pillBoxItem.js +46 -8
  328. package/esm/pillBox/pillBox.js +115 -19
  329. package/esm/pillExpandable/pillExpandable.js +327 -138
  330. package/esm/rangeRaw/rangeRaw.js +480 -140
  331. package/esm/rangeRaw/utils/rangeHelper.js +203 -38
  332. package/esm/searchInputRaw/searchInputRaw.js +145 -43
  333. package/esm/skeleton/skeleton.js +45 -5
  334. package/esm/sortControl/sortControl.js +146 -41
  335. package/esm/stepperRaw/stepperRaw.js +112 -41
  336. package/esm/storybookHelpers/dataGridWithDifferentCellOptions/components/EntitiesListAction.js +178 -19
  337. package/esm/summary/summary.js +88 -7
  338. package/esm/table/actions/actionsMenu.js +165 -77
  339. package/esm/table/flexible/columnSettings.js +74 -9
  340. package/esm/table/flexible/columnsList.js +104 -42
  341. package/esm/table/flexible/columnsPopup.js +71 -19
  342. package/esm/table/nested/useNestedRows.js +161 -76
  343. package/esm/table/selectable/selectableHeader.js +174 -40
  344. package/esm/table/selectable/useSelectableRows.js +264 -190
  345. package/esm/table/sortable/sortableHeader.js +147 -74
  346. package/esm/tabs/tabs.js +221 -117
  347. package/esm/timePickerRaw/timePickerRaw.js +272 -57
  348. package/esm/toastRaw/toastRaw.js +132 -31
  349. package/esm/toggleButton/toggleButton.d.ts +0 -1
  350. package/esm/toggleButtonRaw/toggleButtonRaw.d.ts +1 -0
  351. package/esm/toggleButtonRaw/toggleButtonRaw.js +111 -18
  352. package/esm/utils/formatDate.js +995 -116
  353. package/{dist/utils/localization/translations/cs-json.js → esm/utils/localization/translations/cs.json} +11 -15
  354. package/{dist/utils/localization/translations/da-DK-json.js → esm/utils/localization/translations/da-DK.json} +31 -26
  355. package/{dist/utils/localization/translations/de-json.js → esm/utils/localization/translations/de.json} +12 -16
  356. package/esm/utils/localization/translations/en.json +308 -0
  357. package/{dist/utils/localization/translations/es-json.js → esm/utils/localization/translations/es.json} +11 -15
  358. package/{dist/utils/localization/translations/fi-FI-json.js → esm/utils/localization/translations/fi-FI.json} +31 -26
  359. package/{dist/utils/localization/translations/fr-FR-json.js → esm/utils/localization/translations/fr-FR.json} +12 -15
  360. package/{dist/utils/localization/translations/fr-json.js → esm/utils/localization/translations/fr.json} +11 -15
  361. package/{dist/utils/localization/translations/hu-HU-json.js → esm/utils/localization/translations/hu-HU.json} +31 -26
  362. package/{dist/utils/localization/translations/id-json.js → esm/utils/localization/translations/id.json} +11 -16
  363. package/{dist/utils/localization/translations/it-json.js → esm/utils/localization/translations/it.json} +11 -15
  364. package/{dist/utils/localization/translations/ja-json.js → esm/utils/localization/translations/ja.json} +11 -15
  365. package/{dist/utils/localization/translations/ko-KR-json.js → esm/utils/localization/translations/ko-KR.json} +24 -26
  366. package/{dist/utils/localization/translations/ms-json.js → esm/utils/localization/translations/ms.json} +11 -15
  367. package/{dist/utils/localization/translations/nb-NO-json.js → esm/utils/localization/translations/nb-NO.json} +31 -26
  368. package/{dist/utils/localization/translations/nl-json.js → esm/utils/localization/translations/nl.json} +11 -15
  369. package/{dist/utils/localization/translations/pl-json.js → esm/utils/localization/translations/pl.json} +11 -15
  370. package/{dist/utils/localization/translations/pt-BR-json.js → esm/utils/localization/translations/pt-BR.json} +11 -15
  371. package/{dist/utils/localization/translations/sk-SK-json.js → esm/utils/localization/translations/sk-SK.json} +31 -26
  372. package/{dist/utils/localization/translations/sv-json.js → esm/utils/localization/translations/sv.json} +11 -15
  373. package/{dist/utils/localization/translations/th-json.js → esm/utils/localization/translations/th.json} +11 -15
  374. package/{dist/utils/localization/translations/tr-json.js → esm/utils/localization/translations/tr.json} +11 -15
  375. package/{dist/utils/localization/translations/zh-Hans-json.js → esm/utils/localization/translations/zh-Hans.json} +11 -15
  376. package/{dist/utils/localization/translations/zh-TW-json.js → esm/utils/localization/translations/zh-TW.json} +11 -26
  377. package/esm/utils/localization/translationsDictionary.d.ts +2 -0
  378. package/esm/utils/localization/translationsDictionary.js +59 -0
  379. package/esm/utils/localization/useLanguage.js +1 -50
  380. package/package.json +17 -10
  381. package/dist/utils/localization/translations/cs-json.d.ts +0 -251
  382. package/dist/utils/localization/translations/da-DK-json.d.ts +0 -252
  383. package/dist/utils/localization/translations/de-json.d.ts +0 -251
  384. package/dist/utils/localization/translations/en-json.d.ts +0 -314
  385. package/dist/utils/localization/translations/en-json.js +0 -317
  386. package/dist/utils/localization/translations/es-json.d.ts +0 -251
  387. package/dist/utils/localization/translations/fi-FI-json.d.ts +0 -252
  388. package/dist/utils/localization/translations/fr-FR-json.d.ts +0 -250
  389. package/dist/utils/localization/translations/fr-json.d.ts +0 -251
  390. package/dist/utils/localization/translations/hu-HU-json.d.ts +0 -252
  391. package/dist/utils/localization/translations/id-json.d.ts +0 -252
  392. package/dist/utils/localization/translations/it-json.d.ts +0 -251
  393. package/dist/utils/localization/translations/ja-json.d.ts +0 -251
  394. package/dist/utils/localization/translations/ko-KR-json.d.ts +0 -258
  395. package/dist/utils/localization/translations/ms-json.d.ts +0 -251
  396. package/dist/utils/localization/translations/nb-NO-json.d.ts +0 -252
  397. package/dist/utils/localization/translations/nl-json.d.ts +0 -251
  398. package/dist/utils/localization/translations/pl-json.d.ts +0 -251
  399. package/dist/utils/localization/translations/pt-BR-json.d.ts +0 -251
  400. package/dist/utils/localization/translations/sk-SK-json.d.ts +0 -251
  401. package/dist/utils/localization/translations/sv-json.d.ts +0 -251
  402. package/dist/utils/localization/translations/th-json.d.ts +0 -251
  403. package/dist/utils/localization/translations/tr-json.d.ts +0 -251
  404. package/dist/utils/localization/translations/zh-Hans-json.d.ts +0 -251
  405. package/dist/utils/localization/translations/zh-TW-json.d.ts +0 -271
  406. package/esm/utils/localization/translations/cs-json.d.ts +0 -251
  407. package/esm/utils/localization/translations/da-DK-json.d.ts +0 -252
  408. package/esm/utils/localization/translations/de-json.d.ts +0 -251
  409. package/esm/utils/localization/translations/en-json.d.ts +0 -314
  410. package/esm/utils/localization/translations/en-json.js +0 -314
  411. package/esm/utils/localization/translations/es-json.d.ts +0 -251
  412. package/esm/utils/localization/translations/fi-FI-json.d.ts +0 -252
  413. package/esm/utils/localization/translations/fr-FR-json.d.ts +0 -250
  414. package/esm/utils/localization/translations/fr-json.d.ts +0 -251
  415. package/esm/utils/localization/translations/hu-HU-json.d.ts +0 -252
  416. package/esm/utils/localization/translations/id-json.d.ts +0 -252
  417. package/esm/utils/localization/translations/it-json.d.ts +0 -251
  418. package/esm/utils/localization/translations/ja-json.d.ts +0 -251
  419. package/esm/utils/localization/translations/ko-KR-json.d.ts +0 -258
  420. package/esm/utils/localization/translations/ms-json.d.ts +0 -251
  421. package/esm/utils/localization/translations/nb-NO-json.d.ts +0 -252
  422. package/esm/utils/localization/translations/nl-json.d.ts +0 -251
  423. package/esm/utils/localization/translations/pl-json.d.ts +0 -251
  424. package/esm/utils/localization/translations/pt-BR-json.d.ts +0 -251
  425. package/esm/utils/localization/translations/sk-SK-json.d.ts +0 -251
  426. package/esm/utils/localization/translations/sv-json.d.ts +0 -251
  427. package/esm/utils/localization/translations/th-json.d.ts +0 -251
  428. package/esm/utils/localization/translations/tr-json.d.ts +0 -251
  429. package/esm/utils/localization/translations/zh-Hans-json.d.ts +0 -251
  430. package/esm/utils/localization/translations/zh-TW-json.d.ts +0 -271
@@ -1,11 +1,24 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
2
+
3
+ const {
4
+ injectString
5
+ } = require("../utils/localization/translationsDictionary");
6
+ var __importDefault = this && this.__importDefault || function (mod) {
7
+ return mod && mod.__esModule ? mod : {
8
+ "default": mod
9
+ };
4
10
  };
5
- Object.defineProperty(exports, "__esModule", { value: true });
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
6
14
  exports.Filters = exports.FiltersDisplayName = void 0;
7
15
  const jsx_runtime_1 = require("react/jsx-runtime");
8
16
  /* eslint-disable @typescript-eslint/no-explicit-any */
17
+ injectString("en", "Search page", "Search page");
18
+ injectString("en", "Close setting conditions popup", "Close setting conditions popup");
19
+ injectString("en", "Search by", "Search by");
20
+ injectString("en", "Open setting conditions popup", "Open setting conditions popup");
21
+ injectString("en", "Setting conditions", "Setting conditions");
9
22
  const react_1 = require("react");
10
23
  const react_dom_1 = require("react-dom");
11
24
  const headerHelpers_1 = require("../header/headerHelpers");
@@ -40,272 +53,436 @@ exports.FiltersDisplayName = "Filters";
40
53
  /**
41
54
  * @beta This component is currently in beta.
42
55
  */
43
- const Filters = ({ className, children, isPinned, onPinChange, keyword, setKeyword, searchTypes, searchType, setSearchType, allFiltersState, setAllFiltersState, onToggleView, searchSelection, setSearchSelection, recentSearches, onRemoveRecentSearchItem, onSaveRecentSearch, savedFilters, onRemoveSavedFilter, onSaveFilter }) => {
44
- const [isOpen, setIsOpen] = (0, react_1.useState)(false);
45
- const isSavedFiltersMode = Boolean(savedFilters && onRemoveSavedFilter && onSaveFilter);
46
- const isPinMode = Boolean(typeof isPinned === "boolean" && onPinChange);
47
- const isRecentSearchesMode = Boolean(recentSearches && onRemoveRecentSearchItem && onSaveRecentSearch);
48
- const uniqueKey = (0, useUniqueId_1.useUniqueId)();
49
- const isMobile = (0, useMobile_1.useMobile)();
50
- const [isSidePanelOpen, setIsSidePanelOpen] = (0, react_1.useState)(false);
51
- const triggerRef = react_2.default.useRef(null);
52
- const sidePanelTriggerRef = react_2.default.useRef(null);
53
- const searchPopupTriggerRef = react_2.default.useRef(null);
54
- const searchListRef = react_2.default.useRef(null);
55
- const selectListRef = react_2.default.useRef(null);
56
- const searchTriggerRef = react_2.default.useRef(null);
57
- const prevIsOpenRef = react_2.default.useRef(isOpen);
58
- const [savedFiltersStates, setSavedFiltersStates] = (0, react_1.useState)(new Map());
59
- const { translate } = (0, useLanguage_1.useLanguage)();
60
- const searchTypesArray = (0, react_1.useMemo)(() => (0, filtersHelper_1.getArrayOfElements)(searchTypes), [searchTypes]);
61
- const searchOnlyOneType = (0, react_1.useMemo)(() => searchTypesArray.length === 1 ? searchTypesArray[0].id : undefined, [searchTypesArray]);
62
- const searchTypesMap = (0, react_1.useMemo)(() => {
63
- const map = new Map();
64
- searchTypesArray.forEach(el => {
65
- map.set(el.id, el.name);
66
- });
67
- return map;
68
- }, [searchTypesArray]);
69
- const searchTypesToSelect = (0, react_1.useMemo)(() => searchTypesArray.map(el => ({ id: el.id, name: el.name, subItems: el.subItems ? [...el.subItems] : undefined })), [searchTypesArray]);
70
- const filters = (0, react_1.useMemo)(() => {
71
- const childrenArray = (0, headerHelpers_1.getArrayOfChildren)(children);
72
- return (0, filtersItem_1.getAllowedFilters)(childrenArray);
73
- }, [children]);
74
- (0, react_1.useEffect)(() => {
75
- if (!isSavedFiltersMode) {
76
- return;
56
+ const Filters = ({
57
+ className,
58
+ children,
59
+ isPinned,
60
+ onPinChange,
61
+ keyword,
62
+ setKeyword,
63
+ searchTypes,
64
+ searchType,
65
+ setSearchType,
66
+ allFiltersState,
67
+ setAllFiltersState,
68
+ onToggleView,
69
+ searchSelection,
70
+ setSearchSelection,
71
+ recentSearches,
72
+ onRemoveRecentSearchItem,
73
+ onSaveRecentSearch,
74
+ savedFilters,
75
+ onRemoveSavedFilter,
76
+ onSaveFilter
77
+ }) => {
78
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
79
+ const isSavedFiltersMode = Boolean(savedFilters && onRemoveSavedFilter && onSaveFilter);
80
+ const isPinMode = Boolean(typeof isPinned === "boolean" && onPinChange);
81
+ const isRecentSearchesMode = Boolean(recentSearches && onRemoveRecentSearchItem && onSaveRecentSearch);
82
+ const uniqueKey = (0, useUniqueId_1.useUniqueId)();
83
+ const isMobile = (0, useMobile_1.useMobile)();
84
+ const [isSidePanelOpen, setIsSidePanelOpen] = (0, react_1.useState)(false);
85
+ const triggerRef = react_2.default.useRef(null);
86
+ const sidePanelTriggerRef = react_2.default.useRef(null);
87
+ const searchPopupTriggerRef = react_2.default.useRef(null);
88
+ const searchListRef = react_2.default.useRef(null);
89
+ const selectListRef = react_2.default.useRef(null);
90
+ const searchTriggerRef = react_2.default.useRef(null);
91
+ const prevIsOpenRef = react_2.default.useRef(isOpen);
92
+ const [savedFiltersStates, setSavedFiltersStates] = (0, react_1.useState)(new Map());
93
+ const {
94
+ translate
95
+ } = (0, useLanguage_1.useLanguage)();
96
+ const searchTypesArray = (0, react_1.useMemo)(() => (0, filtersHelper_1.getArrayOfElements)(searchTypes), [searchTypes]);
97
+ const searchOnlyOneType = (0, react_1.useMemo)(() => searchTypesArray.length === 1 ? searchTypesArray[0].id : undefined, [searchTypesArray]);
98
+ const searchTypesMap = (0, react_1.useMemo)(() => {
99
+ const map = new Map();
100
+ searchTypesArray.forEach(el => {
101
+ map.set(el.id, el.name);
102
+ });
103
+ return map;
104
+ }, [searchTypesArray]);
105
+ const searchTypesToSelect = (0, react_1.useMemo)(() => searchTypesArray.map(el => ({
106
+ id: el.id,
107
+ name: el.name,
108
+ subItems: el.subItems ? [...el.subItems] : undefined
109
+ })), [searchTypesArray]);
110
+ const filters = (0, react_1.useMemo)(() => {
111
+ const childrenArray = (0, headerHelpers_1.getArrayOfChildren)(children);
112
+ return (0, filtersItem_1.getAllowedFilters)(childrenArray);
113
+ }, [children]);
114
+ (0, react_1.useEffect)(() => {
115
+ if (!isSavedFiltersMode) {
116
+ return;
117
+ }
118
+ const error = savedFilters.error;
119
+ if (error) {
120
+ console.error("Failed to fetch saved filters. Error:", error);
121
+ } else if (savedFilters && savedFilters.data) {
122
+ setSavedFiltersStates(new Map(savedFilters.data.map(item => [item.name, {
123
+ id: item.id,
124
+ state: item.state
125
+ }])));
126
+ }
127
+ }, [isSavedFiltersMode, savedFilters]);
128
+ const handleSaveRecentSearch = (0, react_1.useCallback)(searchValue => {
129
+ if (!onSaveRecentSearch) {
130
+ return;
131
+ }
132
+ if (!(searchSelection === null || searchSelection === void 0 ? void 0 : searchSelection.length) && !searchValue) {
133
+ return;
134
+ }
135
+ const entries = searchSelection || [];
136
+ const keywordEntry = searchValue ? {
137
+ id: filtersSearchList_1.KEYWORD_ID,
138
+ name: searchValue,
139
+ type: filtersSearchList_1.KEYWORD_TYPE
140
+ } : entries.find(item => item.id === filtersSearchList_1.KEYWORD_ID);
141
+ const preparedItemsArray = [...entries].filter(el => el.id !== filtersSearchList_1.KEYWORD_ID).map(el => Object.assign(Object.assign({}, el), {
142
+ type: el.type || filtersSearchList_1.NO_TYPED_SEARCH_ITEM
143
+ }));
144
+ const isTyped = preparedItemsArray.length ? preparedItemsArray.every(el => el.type === preparedItemsArray[0].type) : false;
145
+ if (keywordEntry) {
146
+ preparedItemsArray.push(Object.assign(Object.assign({}, keywordEntry), {
147
+ type: filtersSearchList_1.KEYWORD_TYPE
148
+ }));
149
+ }
150
+ const newRecentSearchNamesArr = preparedItemsArray.filter(el => el.id !== filtersSearchList_1.KEYWORD_ID).map(el => el.name || el.id);
151
+ keywordEntry && newRecentSearchNamesArr.push(`\%${keywordEntry.name}\%`);
152
+ const newRecentSearchName = newRecentSearchNamesArr.join(", ");
153
+ const newRecentSearch = {
154
+ name: newRecentSearchName,
155
+ type: isTyped ? preparedItemsArray[0].type : filtersSearchList_1.NO_TYPED_SEARCH_ITEM,
156
+ description: Array.from(new Set(entries.filter(el => el.type && el.type !== filtersSearchList_1.NO_TYPED_SEARCH_ITEM && el.type !== filtersSearchList_1.KEYWORD_TYPE).map(el => searchTypesMap.get(el.type) || ""))).join(", "),
157
+ itemsArray: [...preparedItemsArray]
158
+ };
159
+ onSaveRecentSearch(Object.assign({}, newRecentSearch));
160
+ }, [onSaveRecentSearch, searchSelection, searchTypesMap]);
161
+ (0, react_1.useEffect)(() => {
162
+ var _a, _b;
163
+ if (isOpen) {
164
+ (_a = searchPopupTriggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
165
+ } else {
166
+ prevIsOpenRef.current && ((_b = searchTriggerRef.current) === null || _b === void 0 ? void 0 : _b.focus());
167
+ }
168
+ }, [isOpen, searchPopupTriggerRef, searchTriggerRef]);
169
+ (0, react_1.useEffect)(() => {
170
+ if (!isOpen && prevIsOpenRef.current) {
171
+ prevIsOpenRef.current = false;
172
+ isRecentSearchesMode && handleSaveRecentSearch();
173
+ }
174
+ if (isOpen) {
175
+ prevIsOpenRef.current = true;
176
+ }
177
+ }, [isOpen, isRecentSearchesMode, handleSaveRecentSearch]);
178
+ const selectState = (0, react_1.useMemo)(() => Object.keys(searchType), [searchType]);
179
+ const onClearSearchSelection = (0, react_1.useCallback)(() => {
180
+ setSearchSelection && setSearchSelection([]);
181
+ }, [setSearchSelection]);
182
+ const onSearchItemClick = (0, react_1.useCallback)(item => {
183
+ if (!(searchSelection && setSearchSelection)) {
184
+ return;
185
+ }
186
+ const typeKey = item.type || filtersSearchList_1.NO_TYPED_SEARCH_ITEM;
187
+ const currentItem = searchOnlyOneType ? searchSelection.find(el => el.id === item.id) : searchSelection.find(el => el.id === item.id && (el.type || filtersSearchList_1.NO_TYPED_SEARCH_ITEM) === typeKey);
188
+ if (currentItem) {
189
+ const newValue = searchOnlyOneType ? searchSelection.filter(el => el.id !== currentItem.id) : searchSelection.filter(el => !(el.id === currentItem.id && (el.type || filtersSearchList_1.NO_TYPED_SEARCH_ITEM) === typeKey));
190
+ currentItem.id === filtersSearchList_1.KEYWORD_ID && setKeyword("");
191
+ setSearchSelection(newValue);
192
+ } else {
193
+ setSearchSelection([...searchSelection, Object.assign(Object.assign({}, item), {
194
+ type: item.type || searchOnlyOneType || filtersSearchList_1.NO_TYPED_SEARCH_ITEM
195
+ })]);
196
+ }
197
+ }, [searchOnlyOneType, searchSelection, setKeyword, setSearchSelection]);
198
+ const handleTriggerClick = (0, react_1.useCallback)(() => {
199
+ if (!document.startViewTransition) {
200
+ setIsOpen(prevState => !prevState);
201
+ return;
202
+ }
203
+ document.startViewTransition(() => {
204
+ (0, react_dom_1.flushSync)(() => {
205
+ setIsOpen(prevState => !prevState);
206
+ });
207
+ });
208
+ }, []);
209
+ const handleViewState = (0, react_1.useCallback)(() => {
210
+ onToggleView && onToggleView(!isSidePanelOpen);
211
+ setIsSidePanelOpen(val => !val);
212
+ }, [isSidePanelOpen, onToggleView]);
213
+ const handleOpenChange = (0, react_1.useCallback)(open => {
214
+ if (!document.startViewTransition) {
215
+ setIsOpen(open);
216
+ return;
217
+ }
218
+ document.startViewTransition(() => {
219
+ (0, react_dom_1.flushSync)(() => {
220
+ setIsOpen(open);
221
+ });
222
+ });
223
+ }, []);
224
+ const handleSidePanelApply = (0, react_1.useCallback)(state => {
225
+ filters.forEach(filter => {
226
+ const filterProps = filter.props;
227
+ const newState = state[filterProps.id];
228
+ if (filterProps.id && state.hasOwnProperty(filterProps.id) && filterProps.onChange) {
229
+ filterProps.onChange(newState);
230
+ }
231
+ });
232
+ }, [filters]);
233
+ const handleSaveFilters = (0, react_1.useCallback)((filterName, filterState) => {
234
+ const stateForSave = filterState || (0, filtersHelper_1.createStateObject)(filters, "state");
235
+ onSaveFilter && onSaveFilter({
236
+ name: filterName,
237
+ state: stateForSave
238
+ }).then(id => {
239
+ setSavedFiltersStates(prevStates => new Map(prevStates).set(filterName, {
240
+ state: stateForSave,
241
+ id: id
242
+ }));
243
+ }).catch(error => {
244
+ console.error("Could not save the following filter configuration:", "name", filterName, "state", stateForSave, "Error:", error);
245
+ });
246
+ }, [filters, onSaveFilter]);
247
+ const handleRecentSearchItemClick = (0, react_1.useCallback)(item => {
248
+ const newSearchSelection = item.itemsArray;
249
+ const newItemSearch = item.itemsArray.find(el => el.id === filtersSearchList_1.KEYWORD_ID);
250
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
251
+ if (newSearchSelection) {
252
+ setSearchSelection === null || setSearchSelection === void 0 ? void 0 : setSearchSelection([...newSearchSelection]);
253
+ }
254
+ newItemSearch && setKeyword(newItemSearch.name);
255
+ handleOpenChange(false);
256
+ }, [handleOpenChange, setKeyword, setSearchSelection]);
257
+ const handlePinChange = (0, react_1.useCallback)(() => {
258
+ onPinChange && onPinChange(!isPinned);
259
+ }, [onPinChange, isPinned]);
260
+ const handleSearchKeyDown = (0, react_1.useCallback)(event => {
261
+ var _a, _b;
262
+ if (event.code === "Enter") {
263
+ isRecentSearchesMode && handleSaveRecentSearch(event.currentTarget.value);
264
+ !isOpen && handleTriggerClick();
265
+ }
266
+ if (event.code === "ArrowDown" && !isOpen) {
267
+ handleTriggerClick();
268
+ }
269
+ if (event.code === "ArrowDown" && isOpen) {
270
+ const firstItem = (_a = searchListRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(focusableSelector_1.FOCUSABLE_SELECTOR);
271
+ firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
272
+ }
273
+ if (event.code === "ArrowLeft" && isOpen && event.currentTarget.value === "") {
274
+ const firstItem = (_b = selectListRef.current) === null || _b === void 0 ? void 0 : _b.querySelector(focusableSelector_1.FOCUSABLE_SELECTOR);
275
+ firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
276
+ }
277
+ }, [isOpen, isRecentSearchesMode, handleSaveRecentSearch, handleTriggerClick]);
278
+ const getIconByType = (0, react_1.useCallback)(type => {
279
+ if (!type) {
280
+ return iconFilter_1.IconFilter;
281
+ }
282
+ const foundType = searchTypesArray.find(item => item.id === type);
283
+ return foundType && foundType.icon ? foundType.icon : iconFilter_1.IconFilter;
284
+ }, [searchTypesArray]);
285
+ const combinedData = (0, filtersHelper_1.useCombineData)(searchTypesArray);
286
+ const memoizedSelect = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(filtersSelect_1.FiltersSelect, {
287
+ value: searchType,
288
+ selectListRef: selectListRef,
289
+ onChange: setSearchType,
290
+ items: searchTypesToSelect
291
+ }), [searchType, searchTypesToSelect, setSearchType]);
292
+ const handleSearchKeywordChange = (0, react_1.useCallback)(newKeyword => {
293
+ setKeyword(newKeyword);
294
+ !isOpen && handleOpenChange(true);
295
+ }, [setKeyword, isOpen, handleOpenChange]);
296
+ const memoizedSearch = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(filtersSearch_1.FiltersSearch, {
297
+ id: `filtersSearch_${uniqueKey}`,
298
+ ref: searchTriggerRef,
299
+ name: translate("Search page"),
300
+ value: keyword,
301
+ onSearchKeyDown: handleSearchKeyDown,
302
+ onOpenPopup: isOpen ? undefined : handleTriggerClick,
303
+ onChange: handleSearchKeywordChange,
304
+ handleRemove: onSearchItemClick,
305
+ searchSelection: searchSelection,
306
+ className: "zen-filters__search-with-pills"
307
+ }), [uniqueKey, translate, keyword, handleSearchKeyDown, isOpen, handleTriggerClick, handleSearchKeywordChange, onSearchItemClick, searchSelection]);
308
+ const memoizedSearchPopup = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(filtersSearch_1.FiltersSearch, {
309
+ id: `filtersSearch_${uniqueKey}_popup`,
310
+ ref: searchPopupTriggerRef,
311
+ name: translate("Search page"),
312
+ value: keyword,
313
+ onChange: setKeyword,
314
+ onSearchKeyDown: handleSearchKeyDown,
315
+ handleRemove: onSearchItemClick,
316
+ searchSelection: searchSelection,
317
+ className: "zen-filters-popup__search-with-pills"
318
+ }), [uniqueKey, translate, keyword, setKeyword, handleSearchKeyDown, onSearchItemClick, searchSelection]);
319
+ const memoizedSearchList = (0, react_1.useMemo)(() => !isOpen ? null : (0, jsx_runtime_1.jsx)(filtersSearchList_1.FiltersSearchList, {
320
+ searchValue: keyword,
321
+ searchListRef: searchListRef,
322
+ searchData: combinedData,
323
+ searchSelection: searchSelection,
324
+ onlyOneType: searchOnlyOneType,
325
+ getIconByType: getIconByType,
326
+ handleSearchItemClick: onSearchItemClick,
327
+ handleClearSearchSelection: onClearSearchSelection,
328
+ recentSearches: isRecentSearchesMode ? recentSearches : undefined,
329
+ onRemoveRecentSearchItem: isRecentSearchesMode ? onRemoveRecentSearchItem : undefined,
330
+ handleRecentSearchItemClick: isRecentSearchesMode ? handleRecentSearchItemClick : undefined
331
+ }), [isOpen, keyword, combinedData, searchSelection, getIconByType, onSearchItemClick, onClearSearchSelection, isRecentSearchesMode, recentSearches, onRemoveRecentSearchItem, handleRecentSearchItemClick, searchOnlyOneType, searchListRef]);
332
+ const allOption = (0, react_1.useMemo)(() => (0, filtersSelect_1.getAllOption)(translate), [translate]);
333
+ const selectTriggerPopup = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(textIconButton_1.TextIconButton, {
334
+ className: "zen-filters__select-trigger",
335
+ iconClasses: "zen-filters__select-trigger-icon",
336
+ contentClasses: "zen-filters__select-trigger-content",
337
+ title: translate("Close setting conditions popup"),
338
+ onClick: handleTriggerClick,
339
+ icon: iconChevronTopSmall_1.IconChevronTopSmall,
340
+ iconPosition: "end",
341
+ children: translate("Search by")
342
+ }), [handleTriggerClick, translate]);
343
+ // added onMouseDown to prevent focus
344
+ const selectTrigger = (0, react_1.useMemo)(() => {
345
+ var _a;
346
+ return isMobile ? null : (0, jsx_runtime_1.jsx)(textIconButton_1.TextIconButton, {
347
+ tabIndex: -1,
348
+ onMouseDown: e => e.preventDefault(),
349
+ className: "zen-filters__select-trigger",
350
+ iconClasses: "zen-filters__select-trigger-icon",
351
+ contentClasses: "zen-filters__select-trigger-content",
352
+ title: translate("Open setting conditions popup"),
353
+ onClick: handleTriggerClick,
354
+ icon: iconChevronDownSmall_1.IconChevronDownSmall,
355
+ iconPosition: "end",
356
+ children: selectState[0] === filtersSelect_1.ALL_SELECT_OPTION_ID ? allOption.name : (_a = searchTypesArray.find(item => item.id === selectState[0])) === null || _a === void 0 ? void 0 : _a.name
357
+ });
358
+ }, [translate, handleTriggerClick, selectState, allOption.name, searchTypesArray, isMobile]);
359
+ const memoizedPopup = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(controlledPopup_1.ControlledPopup, {
360
+ paddingY: -34,
361
+ isOpen: isOpen,
362
+ className: (0, classNames_1.classNames)(["zen-filters-popup"]),
363
+ onOpenChange: handleOpenChange,
364
+ useTrapFocusWithTrigger: "on",
365
+ alignment: "bottom",
366
+ shouldHoldScroll: true,
367
+ triggerRef: triggerRef,
368
+ ariaLabel: translate("Setting conditions"),
369
+ recalculateOnScroll: true,
370
+ children: (0, jsx_runtime_1.jsxs)("div", {
371
+ className: "zen-filters-popup__content",
372
+ children: [(0, jsx_runtime_1.jsxs)("div", {
373
+ className: "zen-filters-popup__left-panel",
374
+ children: [selectTriggerPopup, memoizedSelect]
375
+ }), (0, jsx_runtime_1.jsxs)("div", {
376
+ className: "zen-filters-popup__right-panel",
377
+ children: [memoizedSearchPopup, memoizedSearchList]
378
+ })]
379
+ })
380
+ }), [isOpen, handleOpenChange, translate, selectTriggerPopup, memoizedSelect, memoizedSearchPopup, memoizedSearchList]);
381
+ const filtersForRender = (0, react_1.useMemo)(() => filters.filter(el => {
382
+ const elProps = el.props;
383
+ return typeof elProps.visible === "boolean" ? elProps.visible : elProps.visible === undefined ? false : elProps.visible(Array.from(selectState), undefined);
384
+ }), [filters, selectState]);
385
+ // The sidePanel has a full set of filters, so we need to calculate the number of changed filters based on all filters, not just the visible ones
386
+ const filtersForCalculation = (0, react_1.useMemo)(() => {
387
+ const stateObj = (0, filtersHelper_1.createStateObject)(filters, "state");
388
+ return filters.filter(el => {
389
+ const elProps = el.props;
390
+ return typeof elProps.visible === "boolean" ? elProps.visible : elProps.visible === undefined ? true : elProps.visible(Array.from(selectState), stateObj) || elProps.visible(Array.from(selectState));
391
+ });
392
+ }, [filters, selectState]);
393
+ const hasSavedFilters = savedFiltersStates.size > 0;
394
+ const hasFilters = filtersForCalculation.length > 0;
395
+ const memoizedFiltersContainer = (0, react_1.useMemo)(() => hasFilters ? (0, jsx_runtime_1.jsx)(filtersContainer_1.FiltersContainer, {
396
+ filtersChipRef: sidePanelTriggerRef,
397
+ filtersClickHandler: handleViewState,
398
+ filtersForCalculation: filtersForCalculation,
399
+ isPinned: isPinMode ? isPinned : undefined,
400
+ onPinChange: isPinMode ? onPinChange : undefined,
401
+ hasSavedFilters: hasSavedFilters,
402
+ children: filtersForRender
403
+ }) : null, [handleViewState, filtersForCalculation, isPinMode, isPinned, onPinChange, hasSavedFilters, filtersForRender, hasFilters]);
404
+ const memoizedSidePanel = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(filtersSidePanel_1.FiltersSidePanel, {
405
+ isOpen: isSidePanelOpen,
406
+ onApply: handleSidePanelApply,
407
+ onClose: handleViewState,
408
+ onPin: isPinMode ? handlePinChange : undefined,
409
+ isPinned: isPinMode ? isPinned : undefined,
410
+ filters: filters,
411
+ externalState: allFiltersState,
412
+ setExternalState: setAllFiltersState,
413
+ triggerRef: sidePanelTriggerRef
414
+ }), [isSidePanelOpen, handleSidePanelApply, handleViewState, handlePinChange, isPinned, isPinMode, filters, allFiltersState, setAllFiltersState, sidePanelTriggerRef]);
415
+ const memoizedStatus = (0, react_1.useMemo)(() => isPinned && isPinMode ? "accent" : undefined, [isPinned, isPinMode]);
416
+ const memoizedSavedFiltersItems = (0, react_1.useMemo)(() => new Set(savedFiltersStates.keys()), [savedFiltersStates]);
417
+ const memoizedSavedFiltersActive = (0, react_1.useMemo)(() => {
418
+ const activeSet = new Set();
419
+ const currentState = (0, filtersHelper_1.createStateObject)(filters, "state");
420
+ Array.from(savedFiltersStates.keys()).forEach(key => {
421
+ var _a;
422
+ const savedState = (_a = savedFiltersStates.get(key)) === null || _a === void 0 ? void 0 : _a.state;
423
+ if (savedState) {
424
+ if ((0, isElementsEqual_1.isElementsEqual)(currentState, savedState)) {
425
+ activeSet.add(key);
77
426
  }
78
- const error = savedFilters.error;
79
- if (error) {
80
- console.error("Failed to fetch saved filters. Error:", error);
427
+ }
428
+ });
429
+ return activeSet;
430
+ }, [savedFiltersStates, filters]);
431
+ const removeSavedFiltersState = (0, react_1.useCallback)(item => {
432
+ var _a;
433
+ setSavedFiltersStates(prev => {
434
+ const newState = new Map(prev);
435
+ newState.delete(item);
436
+ return newState;
437
+ });
438
+ const filterId = (_a = savedFiltersStates.get(item)) === null || _a === void 0 ? void 0 : _a.id;
439
+ if (filterId) {
440
+ onRemoveSavedFilter && onRemoveSavedFilter(filterId);
441
+ }
442
+ }, [onRemoveSavedFilter, savedFiltersStates]);
443
+ const applySavedFiltersState = (0, react_1.useCallback)(item => {
444
+ var _a;
445
+ const newState = (_a = savedFiltersStates.get(item)) === null || _a === void 0 ? void 0 : _a.state;
446
+ if (newState) {
447
+ filters.forEach(filter => {
448
+ const filterProps = filter.props;
449
+ const stateForFilter = newState[filterProps.id];
450
+ if (filterProps.id && newState.hasOwnProperty(filterProps.id) && filterProps.onChange) {
451
+ filterProps.onChange(stateForFilter);
81
452
  }
82
- else if (savedFilters && savedFilters.data) {
83
- setSavedFiltersStates(new Map(savedFilters.data.map(item => [item.name, { id: item.id, state: item.state }])));
84
- }
85
- }, [isSavedFiltersMode, savedFilters]);
86
- const handleSaveRecentSearch = (0, react_1.useCallback)((searchValue) => {
87
- if (!onSaveRecentSearch) {
88
- return;
89
- }
90
- if (!(searchSelection === null || searchSelection === void 0 ? void 0 : searchSelection.length) && !searchValue) {
91
- return;
92
- }
93
- const entries = searchSelection || [];
94
- const keywordEntry = searchValue ? { id: filtersSearchList_1.KEYWORD_ID, name: searchValue, type: filtersSearchList_1.KEYWORD_TYPE } : entries.find((item) => item.id === filtersSearchList_1.KEYWORD_ID);
95
- const preparedItemsArray = [...entries].filter(el => el.id !== filtersSearchList_1.KEYWORD_ID).map(el => (Object.assign(Object.assign({}, el), { type: el.type || filtersSearchList_1.NO_TYPED_SEARCH_ITEM })));
96
- const isTyped = preparedItemsArray.length ? preparedItemsArray.every(el => el.type === preparedItemsArray[0].type) : false;
97
- if (keywordEntry) {
98
- preparedItemsArray.push(Object.assign(Object.assign({}, keywordEntry), { type: filtersSearchList_1.KEYWORD_TYPE }));
99
- }
100
- const newRecentSearchNamesArr = preparedItemsArray.filter(el => el.id !== filtersSearchList_1.KEYWORD_ID).map(el => el.name || el.id);
101
- keywordEntry && newRecentSearchNamesArr.push(`\%${keywordEntry.name}\%`);
102
- const newRecentSearchName = newRecentSearchNamesArr.join(", ");
103
- const newRecentSearch = { name: newRecentSearchName, type: isTyped ? preparedItemsArray[0].type : filtersSearchList_1.NO_TYPED_SEARCH_ITEM,
104
- description: Array.from(new Set(entries.filter(el => el.type && el.type !== filtersSearchList_1.NO_TYPED_SEARCH_ITEM && el.type !== filtersSearchList_1.KEYWORD_TYPE)
105
- .map(el => searchTypesMap.get(el.type) || ""))).join(", "),
106
- itemsArray: [...preparedItemsArray] };
107
- onSaveRecentSearch(Object.assign({}, newRecentSearch));
108
- }, [onSaveRecentSearch, searchSelection, searchTypesMap]);
109
- (0, react_1.useEffect)(() => {
110
- var _a, _b;
111
- if (isOpen) {
112
- (_a = searchPopupTriggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
113
- }
114
- else {
115
- prevIsOpenRef.current && ((_b = searchTriggerRef.current) === null || _b === void 0 ? void 0 : _b.focus());
116
- }
117
- }, [isOpen, searchPopupTriggerRef, searchTriggerRef]);
118
- (0, react_1.useEffect)(() => {
119
- if (!isOpen && prevIsOpenRef.current) {
120
- prevIsOpenRef.current = false;
121
- isRecentSearchesMode && handleSaveRecentSearch();
122
- }
123
- if (isOpen) {
124
- prevIsOpenRef.current = true;
125
- }
126
- }, [isOpen, isRecentSearchesMode, handleSaveRecentSearch]);
127
- const selectState = (0, react_1.useMemo)(() => Object.keys(searchType), [searchType]);
128
- const onClearSearchSelection = (0, react_1.useCallback)(() => {
129
- setSearchSelection && setSearchSelection([]);
130
- }, [setSearchSelection]);
131
- const onSearchItemClick = (0, react_1.useCallback)((item) => {
132
- if (!(searchSelection && setSearchSelection)) {
133
- return;
134
- }
135
- const typeKey = item.type || filtersSearchList_1.NO_TYPED_SEARCH_ITEM;
136
- const currentItem = searchOnlyOneType ? searchSelection.find(el => el.id === item.id)
137
- : searchSelection.find(el => el.id === item.id && (el.type || filtersSearchList_1.NO_TYPED_SEARCH_ITEM) === typeKey);
138
- if (currentItem) {
139
- const newValue = searchOnlyOneType ? searchSelection.filter(el => el.id !== currentItem.id)
140
- : searchSelection.filter(el => !(el.id === currentItem.id && (el.type || filtersSearchList_1.NO_TYPED_SEARCH_ITEM) === typeKey));
141
- currentItem.id === filtersSearchList_1.KEYWORD_ID && setKeyword("");
142
- setSearchSelection(newValue);
143
- }
144
- else {
145
- setSearchSelection([...searchSelection, Object.assign(Object.assign({}, item), { type: item.type || searchOnlyOneType || filtersSearchList_1.NO_TYPED_SEARCH_ITEM })]);
146
- }
147
- }, [searchOnlyOneType, searchSelection, setKeyword, setSearchSelection]);
148
- const handleTriggerClick = (0, react_1.useCallback)(() => {
149
- if (!document.startViewTransition) {
150
- setIsOpen(prevState => !prevState);
151
- return;
152
- }
153
- document.startViewTransition(() => {
154
- (0, react_dom_1.flushSync)(() => {
155
- setIsOpen(prevState => !prevState);
156
- });
157
- });
158
- }, []);
159
- const handleViewState = (0, react_1.useCallback)(() => {
160
- onToggleView && onToggleView(!isSidePanelOpen);
161
- setIsSidePanelOpen(val => !val);
162
- }, [isSidePanelOpen, onToggleView]);
163
- const handleOpenChange = (0, react_1.useCallback)((open) => {
164
- if (!document.startViewTransition) {
165
- setIsOpen(open);
166
- return;
167
- }
168
- document.startViewTransition(() => {
169
- (0, react_dom_1.flushSync)(() => {
170
- setIsOpen(open);
171
- });
172
- });
173
- }, []);
174
- const handleSidePanelApply = (0, react_1.useCallback)((state) => {
175
- filters.forEach((filter) => {
176
- const filterProps = filter.props;
177
- const newState = state[filterProps.id];
178
- if (filterProps.id && state.hasOwnProperty(filterProps.id) && filterProps.onChange) {
179
- filterProps.onChange(newState);
180
- }
181
- });
182
- }, [filters]);
183
- const handleSaveFilters = (0, react_1.useCallback)((filterName, filterState) => {
184
- const stateForSave = filterState || (0, filtersHelper_1.createStateObject)(filters, "state");
185
- onSaveFilter && onSaveFilter({ name: filterName, state: stateForSave }).then((id) => {
186
- setSavedFiltersStates(prevStates => new Map(prevStates).set(filterName, { state: stateForSave, id: id }));
187
- }).catch(error => {
188
- console.error("Could not save the following filter configuration:", "name", filterName, "state", stateForSave, "Error:", error);
189
- });
190
- }, [filters, onSaveFilter]);
191
- const handleRecentSearchItemClick = (0, react_1.useCallback)((item) => {
192
- const newSearchSelection = item.itemsArray;
193
- const newItemSearch = item.itemsArray.find(el => el.id === filtersSearchList_1.KEYWORD_ID);
194
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
195
- if (newSearchSelection) {
196
- setSearchSelection === null || setSearchSelection === void 0 ? void 0 : setSearchSelection([...newSearchSelection]);
197
- }
198
- newItemSearch && setKeyword(newItemSearch.name);
199
- handleOpenChange(false);
200
- }, [handleOpenChange, setKeyword, setSearchSelection]);
201
- const handlePinChange = (0, react_1.useCallback)(() => {
202
- onPinChange && onPinChange(!isPinned);
203
- }, [onPinChange, isPinned]);
204
- const handleSearchKeyDown = (0, react_1.useCallback)((event) => {
205
- var _a, _b;
206
- if (event.code === "Enter") {
207
- isRecentSearchesMode && handleSaveRecentSearch(event.currentTarget.value);
208
- !isOpen && handleTriggerClick();
209
- }
210
- if (event.code === "ArrowDown" && !isOpen) {
211
- handleTriggerClick();
212
- }
213
- if (event.code === "ArrowDown" && isOpen) {
214
- const firstItem = (_a = searchListRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(focusableSelector_1.FOCUSABLE_SELECTOR);
215
- firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
216
- }
217
- if (event.code === "ArrowLeft" && isOpen && event.currentTarget.value === "") {
218
- const firstItem = (_b = selectListRef.current) === null || _b === void 0 ? void 0 : _b.querySelector(focusableSelector_1.FOCUSABLE_SELECTOR);
219
- firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
220
- }
221
- }, [isOpen, isRecentSearchesMode, handleSaveRecentSearch, handleTriggerClick]);
222
- const getIconByType = (0, react_1.useCallback)((type) => {
223
- if (!type) {
224
- return iconFilter_1.IconFilter;
225
- }
226
- const foundType = searchTypesArray.find((item) => item.id === type);
227
- return foundType && foundType.icon ? foundType.icon : iconFilter_1.IconFilter;
228
- }, [searchTypesArray]);
229
- const combinedData = (0, filtersHelper_1.useCombineData)(searchTypesArray);
230
- const memoizedSelect = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(filtersSelect_1.FiltersSelect, { value: searchType, selectListRef: selectListRef, onChange: setSearchType, items: searchTypesToSelect }), [searchType, searchTypesToSelect, setSearchType]);
231
- const handleSearchKeywordChange = (0, react_1.useCallback)((newKeyword) => {
232
- setKeyword(newKeyword);
233
- !isOpen && handleOpenChange(true);
234
- }, [setKeyword, isOpen, handleOpenChange]);
235
- const memoizedSearch = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(filtersSearch_1.FiltersSearch, { id: `filtersSearch_${uniqueKey}`, ref: searchTriggerRef, name: translate("Search page"), value: keyword, onSearchKeyDown: handleSearchKeyDown, onOpenPopup: isOpen ? undefined : handleTriggerClick, onChange: handleSearchKeywordChange, handleRemove: onSearchItemClick, searchSelection: searchSelection, className: "zen-filters__search-with-pills" }), [uniqueKey, translate, keyword, handleSearchKeyDown, isOpen, handleTriggerClick, handleSearchKeywordChange, onSearchItemClick, searchSelection]);
236
- const memoizedSearchPopup = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(filtersSearch_1.FiltersSearch, { id: `filtersSearch_${uniqueKey}_popup`, ref: searchPopupTriggerRef, name: translate("Search page"), value: keyword, onChange: setKeyword, onSearchKeyDown: handleSearchKeyDown, handleRemove: onSearchItemClick, searchSelection: searchSelection, className: "zen-filters-popup__search-with-pills" }), [uniqueKey, translate, keyword, setKeyword, handleSearchKeyDown, onSearchItemClick, searchSelection]);
237
- const memoizedSearchList = (0, react_1.useMemo)(() => !isOpen ? null :
238
- (0, jsx_runtime_1.jsx)(filtersSearchList_1.FiltersSearchList, { searchValue: keyword, searchListRef: searchListRef, searchData: combinedData, searchSelection: searchSelection, onlyOneType: searchOnlyOneType, getIconByType: getIconByType, handleSearchItemClick: onSearchItemClick, handleClearSearchSelection: onClearSearchSelection, recentSearches: isRecentSearchesMode ? recentSearches : undefined, onRemoveRecentSearchItem: isRecentSearchesMode ? onRemoveRecentSearchItem : undefined, handleRecentSearchItemClick: isRecentSearchesMode ? handleRecentSearchItemClick : undefined }), [isOpen, keyword, combinedData, searchSelection, getIconByType, onSearchItemClick, onClearSearchSelection, isRecentSearchesMode, recentSearches,
239
- onRemoveRecentSearchItem, handleRecentSearchItemClick, searchOnlyOneType, searchListRef]);
240
- const allOption = (0, react_1.useMemo)(() => (0, filtersSelect_1.getAllOption)(translate), [translate]);
241
- const selectTriggerPopup = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(textIconButton_1.TextIconButton, { className: "zen-filters__select-trigger", iconClasses: "zen-filters__select-trigger-icon", contentClasses: "zen-filters__select-trigger-content", title: translate("Close setting conditions popup"), onClick: handleTriggerClick, icon: iconChevronTopSmall_1.IconChevronTopSmall, iconPosition: "end", children: translate("Search by") }), [handleTriggerClick, translate]);
242
- // added onMouseDown to prevent focus
243
- const selectTrigger = (0, react_1.useMemo)(() => {
244
- var _a;
245
- return isMobile ? null : (0, jsx_runtime_1.jsx)(textIconButton_1.TextIconButton, { tabIndex: -1, onMouseDown: e => e.preventDefault(), className: "zen-filters__select-trigger", iconClasses: "zen-filters__select-trigger-icon", contentClasses: "zen-filters__select-trigger-content", title: translate("Open setting conditions popup"), onClick: handleTriggerClick, icon: iconChevronDownSmall_1.IconChevronDownSmall, iconPosition: "end", children: selectState[0] === filtersSelect_1.ALL_SELECT_OPTION_ID ? allOption.name :
246
- (_a = searchTypesArray.find((item) => item.id === selectState[0])) === null || _a === void 0 ? void 0 : _a.name });
247
- }, [translate, handleTriggerClick, selectState, allOption.name, searchTypesArray, isMobile]);
248
- const memoizedPopup = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(controlledPopup_1.ControlledPopup, { paddingY: -34, isOpen: isOpen, className: (0, classNames_1.classNames)(["zen-filters-popup"]), onOpenChange: handleOpenChange, useTrapFocusWithTrigger: "on", alignment: "bottom", shouldHoldScroll: true, triggerRef: triggerRef, ariaLabel: translate("Setting conditions"), recalculateOnScroll: true, children: (0, jsx_runtime_1.jsxs)("div", { className: "zen-filters-popup__content", children: [(0, jsx_runtime_1.jsxs)("div", { className: "zen-filters-popup__left-panel", children: [selectTriggerPopup, memoizedSelect] }), (0, jsx_runtime_1.jsxs)("div", { className: "zen-filters-popup__right-panel", children: [memoizedSearchPopup, memoizedSearchList] })] }) }), [isOpen, handleOpenChange, translate, selectTriggerPopup, memoizedSelect, memoizedSearchPopup, memoizedSearchList]);
249
- const filtersForRender = (0, react_1.useMemo)(() => filters.filter(el => {
250
- const elProps = el.props;
251
- return typeof elProps.visible === "boolean" ? elProps.visible
252
- : elProps.visible === undefined ? false : elProps.visible(Array.from(selectState), undefined);
253
- }), [filters, selectState]);
254
- // The sidePanel has a full set of filters, so we need to calculate the number of changed filters based on all filters, not just the visible ones
255
- const filtersForCalculation = (0, react_1.useMemo)(() => {
256
- const stateObj = (0, filtersHelper_1.createStateObject)(filters, "state");
257
- return filters.filter(el => {
258
- const elProps = el.props;
259
- return typeof elProps.visible === "boolean" ? elProps.visible
260
- : elProps.visible === undefined ? true : (elProps.visible(Array.from(selectState), stateObj) || elProps.visible(Array.from(selectState)));
261
- });
262
- }, [filters, selectState]);
263
- const hasSavedFilters = savedFiltersStates.size > 0;
264
- const hasFilters = filtersForCalculation.length > 0;
265
- const memoizedFiltersContainer = (0, react_1.useMemo)(() => hasFilters ? (0, jsx_runtime_1.jsx)(filtersContainer_1.FiltersContainer, { filtersChipRef: sidePanelTriggerRef, filtersClickHandler: handleViewState, filtersForCalculation: filtersForCalculation, isPinned: isPinMode ? isPinned : undefined, onPinChange: isPinMode ? onPinChange : undefined, hasSavedFilters: hasSavedFilters, children: filtersForRender }) : null, [handleViewState, filtersForCalculation, isPinMode, isPinned, onPinChange, hasSavedFilters, filtersForRender, hasFilters]);
266
- const memoizedSidePanel = (0, react_1.useMemo)(() => (0, jsx_runtime_1.jsx)(filtersSidePanel_1.FiltersSidePanel, { isOpen: isSidePanelOpen, onApply: handleSidePanelApply, onClose: handleViewState, onPin: isPinMode ? handlePinChange : undefined, isPinned: isPinMode ? isPinned : undefined, filters: filters, externalState: allFiltersState, setExternalState: setAllFiltersState, triggerRef: sidePanelTriggerRef }), [isSidePanelOpen, handleSidePanelApply, handleViewState, handlePinChange, isPinned, isPinMode, filters, allFiltersState, setAllFiltersState, sidePanelTriggerRef]);
267
- const memoizedStatus = (0, react_1.useMemo)(() => isPinned && isPinMode ? "accent" : undefined, [isPinned, isPinMode]);
268
- const memoizedSavedFiltersItems = (0, react_1.useMemo)(() => new Set(savedFiltersStates.keys()), [savedFiltersStates]);
269
- const memoizedSavedFiltersActive = (0, react_1.useMemo)(() => {
270
- const activeSet = new Set();
271
- const currentState = (0, filtersHelper_1.createStateObject)(filters, "state");
272
- Array.from(savedFiltersStates.keys()).forEach(key => {
273
- var _a;
274
- const savedState = (_a = savedFiltersStates.get(key)) === null || _a === void 0 ? void 0 : _a.state;
275
- if (savedState) {
276
- if ((0, isElementsEqual_1.isElementsEqual)(currentState, savedState)) {
277
- activeSet.add(key);
278
- }
279
- }
280
- });
281
- return activeSet;
282
- }, [savedFiltersStates, filters]);
283
- const removeSavedFiltersState = (0, react_1.useCallback)((item) => {
284
- var _a;
285
- setSavedFiltersStates((prev) => {
286
- const newState = new Map(prev);
287
- newState.delete(item);
288
- return newState;
289
- });
290
- const filterId = (_a = savedFiltersStates.get(item)) === null || _a === void 0 ? void 0 : _a.id;
291
- if (filterId) {
292
- onRemoveSavedFilter && onRemoveSavedFilter(filterId);
293
- }
294
- }, [onRemoveSavedFilter, savedFiltersStates]);
295
- const applySavedFiltersState = (0, react_1.useCallback)((item) => {
296
- var _a;
297
- const newState = (_a = savedFiltersStates.get(item)) === null || _a === void 0 ? void 0 : _a.state;
298
- if (newState) {
299
- filters.forEach((filter) => {
300
- const filterProps = filter.props;
301
- const stateForFilter = newState[filterProps.id];
302
- if (filterProps.id && newState.hasOwnProperty(filterProps.id) && filterProps.onChange) {
303
- filterProps.onChange(stateForFilter);
304
- }
305
- });
306
- }
307
- }, [filters, savedFiltersStates]);
308
- return (0, jsx_runtime_1.jsxs)("div", { className: (0, classNames_1.classNames)(["zen-filters", className || ""]), children: [(0, jsx_runtime_1.jsxs)("div", { className: (0, classNames_1.classNames)(["zen-filters__main-row", isOpen ? "" : "zen-filters__main-row--initial"]), ref: triggerRef, role: "combobox", "aria-label": translate("Open setting conditions popup"), children: [selectTrigger, memoizedSearch] }), (0, jsx_runtime_1.jsx)(filtersSavedItemsProvider_1.FiltersSavedItemsProvider, { items: memoizedSavedFiltersItems, active: memoizedSavedFiltersActive, onRemove: isSavedFiltersMode ? removeSavedFiltersState : undefined, onApply: isSavedFiltersMode ? applySavedFiltersState : undefined, onSave: isSavedFiltersMode ? handleSaveFilters : undefined, children: (0, jsx_runtime_1.jsx)(chipStatusProvider_1.ChipStatusProvider, { status: memoizedStatus, children: memoizedFiltersContainer }) }), memoizedPopup, (0, jsx_runtime_1.jsx)(filtersSavedItemsProvider_1.FiltersSavedItemsProvider, { items: memoizedSavedFiltersItems, active: memoizedSavedFiltersActive, onRemove: isSavedFiltersMode ? removeSavedFiltersState : undefined, onApply: isSavedFiltersMode ? applySavedFiltersState : undefined, onSave: isSavedFiltersMode ? handleSaveFilters : undefined, children: (0, jsx_runtime_1.jsx)(chipStatusProvider_1.ChipStatusProvider, { status: memoizedStatus, children: memoizedSidePanel }) })] });
453
+ });
454
+ }
455
+ }, [filters, savedFiltersStates]);
456
+ return (0, jsx_runtime_1.jsxs)("div", {
457
+ className: (0, classNames_1.classNames)(["zen-filters", className || ""]),
458
+ children: [(0, jsx_runtime_1.jsxs)("div", {
459
+ className: (0, classNames_1.classNames)(["zen-filters__main-row", isOpen ? "" : "zen-filters__main-row--initial"]),
460
+ ref: triggerRef,
461
+ role: "combobox",
462
+ "aria-label": translate("Open setting conditions popup"),
463
+ children: [selectTrigger, memoizedSearch]
464
+ }), (0, jsx_runtime_1.jsx)(filtersSavedItemsProvider_1.FiltersSavedItemsProvider, {
465
+ items: memoizedSavedFiltersItems,
466
+ active: memoizedSavedFiltersActive,
467
+ onRemove: isSavedFiltersMode ? removeSavedFiltersState : undefined,
468
+ onApply: isSavedFiltersMode ? applySavedFiltersState : undefined,
469
+ onSave: isSavedFiltersMode ? handleSaveFilters : undefined,
470
+ children: (0, jsx_runtime_1.jsx)(chipStatusProvider_1.ChipStatusProvider, {
471
+ status: memoizedStatus,
472
+ children: memoizedFiltersContainer
473
+ })
474
+ }), memoizedPopup, (0, jsx_runtime_1.jsx)(filtersSavedItemsProvider_1.FiltersSavedItemsProvider, {
475
+ items: memoizedSavedFiltersItems,
476
+ active: memoizedSavedFiltersActive,
477
+ onRemove: isSavedFiltersMode ? removeSavedFiltersState : undefined,
478
+ onApply: isSavedFiltersMode ? applySavedFiltersState : undefined,
479
+ onSave: isSavedFiltersMode ? handleSaveFilters : undefined,
480
+ children: (0, jsx_runtime_1.jsx)(chipStatusProvider_1.ChipStatusProvider, {
481
+ status: memoizedStatus,
482
+ children: memoizedSidePanel
483
+ })
484
+ })]
485
+ });
309
486
  };
310
487
  exports.Filters = Filters;
311
488
  exports.Filters.Chip = filtersChip_1.FiltersChip;
@@ -315,4 +492,4 @@ exports.Filters.Dropdown = filtersDropdown_1.FiltersDropdown;
315
492
  exports.Filters.Groups = filtersGroups_1.FiltersGroups;
316
493
  exports.Filters.Range = filtersRange_1.FiltersRange;
317
494
  // Filters.Custom = FiltersCustom;
318
- exports.Filters.displayName = exports.FiltersDisplayName;
495
+ exports.Filters.displayName = exports.FiltersDisplayName;