@geotab/zenith 3.16.0-beta.0 → 3.16.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 (335) hide show
  1. package/README.md +25 -0
  2. package/dist/advancedGroupsFilter/advancedGroupsFilter.js +3 -3
  3. package/dist/advancedGroupsFilter/advancedGroupsFilterForm.js +2 -2
  4. package/dist/advancedGroupsFilter/advancedGroupsFilterFormSection.js +7 -7
  5. package/dist/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.js +1 -1
  6. package/dist/alertRaw/alertRaw.js +1 -1
  7. package/dist/banner/bannerMultipLine.js +1 -1
  8. package/dist/banner/bannerSingleLine.js +1 -1
  9. package/dist/banner/utils/useSummaryBannerProp.js +1 -1
  10. package/dist/betaPill/betaPill.js +4 -4
  11. package/dist/bookmark/bookmark.js +2 -2
  12. package/dist/bulkEditControl/bulkEditControl.js +5 -5
  13. package/dist/calendar/calendar.js +30 -30
  14. package/dist/calendar/calendarUtils.js +6 -6
  15. package/dist/card/card.js +1 -1
  16. package/dist/chart/accessibleChart/accessibleChartNarrative.js +13 -13
  17. package/dist/chart/accessibleChart/accessibleChartTable.js +5 -5
  18. package/dist/chart/accessibleChart/generatePieNarrative.js +6 -6
  19. package/dist/chart/barChart.js +1 -1
  20. package/dist/chart/chart.js +1 -1
  21. package/dist/chart/chartAxis/chartAxis.js +2 -2
  22. package/dist/chart/lineChart.js +1 -1
  23. package/dist/chart/pieChart.js +1 -1
  24. package/dist/checkboxListWithAction/checkboxListWithAction.js +4 -4
  25. package/dist/chip/chip.js +1 -1
  26. package/dist/columnsSelector/columnsSelector.js +2 -2
  27. package/dist/columnsSelector/columnsTab/columnsTab.js +1 -1
  28. package/dist/columnsSelector/columnsTabGroup/columnsTabGroup.js +1 -1
  29. package/dist/controlledPopup/controlledPopup.d.ts +1 -1
  30. package/dist/controlledPopup/controlledPopup.js +17 -3
  31. package/dist/dataFeed/feedExpandControl/feedExpandControl.js +2 -2
  32. package/dist/dataGrid/columns/checkboxColumn/checkboxHeaderCell.js +1 -1
  33. package/dist/dataGrid/dataGrid.js +1 -1
  34. package/dist/dataGrid/emptySearchList/emptySearchList.js +1 -1
  35. package/dist/dataGrid/entitiesListActions/actions/columnsListButton.js +1 -1
  36. package/dist/dataGrid/entitiesListActions/actions/fullscreenButton.js +2 -2
  37. package/dist/dataGrid/withFlexibleColumns/components/columnSettings.js +2 -2
  38. package/dist/dataGrid/withFlexibleColumns/components/columnSettingsSidePanel.js +1 -1
  39. package/dist/dataGrid/withFlexibleColumns/withFlexibleColumns.js +1 -1
  40. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +5 -5
  41. package/dist/dataGrid/withSelectableRows/withSelectableRows.js +4 -4
  42. package/dist/dataGrid/withSortableColumns/columns/sortableColumnWrapper.js +2 -2
  43. package/dist/dateInputInner/dateInputInner.js +7 -7
  44. package/dist/dateInputInner/dateInputInnerControlBlock.js +2 -2
  45. package/dist/dateInputRaw/dateInputRaw.js +3 -3
  46. package/dist/dateInputRaw/utils/getLabel.js +2 -2
  47. package/dist/dateRangeInner/dateRangeInner.js +1 -1
  48. package/dist/dateRangeRaw/dateRangeRaw.js +10 -10
  49. package/dist/dateRangeRaw/utils/dateRangeUtils.js +17 -17
  50. package/dist/dateSelectionWrapper/dateSelectionWrapper.js +4 -4
  51. package/dist/dialog/dialogContent.js +1 -1
  52. package/dist/dropdown/dropdownTrigger.d.ts +1 -1
  53. package/dist/dropdownRaw/dropdownList.js +9 -9
  54. package/dist/dropdownRaw/dropdownPopup.js +3 -3
  55. package/dist/dropdownRaw/dropdownRaw.js +249 -3
  56. package/dist/dropdownRaw/dropdownSearchableTrigger.d.ts +2 -1
  57. package/dist/dropdownRaw/dropdownSearchableTrigger.js +8 -6
  58. package/dist/dropdownRaw/dropdownTrigger.d.ts +2 -1
  59. package/dist/dropdownRaw/dropdownTrigger.js +2 -2
  60. package/dist/dropdownRaw/types.d.ts +7 -0
  61. package/dist/favoriteButton/favoriteButton.js +1 -1
  62. package/dist/fileUpload/components/dropZoneContent.js +4 -4
  63. package/dist/fileUpload/components/templateDownloadSection.js +1 -1
  64. package/dist/fileUpload/components/uploadedFilesSection.js +2 -2
  65. package/dist/fileUpload/fileUpload.js +6 -6
  66. package/dist/filters/components/filtersContainer.js +3 -3
  67. package/dist/filters/components/filtersEmptyState.js +2 -2
  68. package/dist/filters/components/filtersSaveModal.js +5 -5
  69. package/dist/filters/components/filtersSavedChipComponent.js +11 -11
  70. package/dist/filters/components/filtersSearchItemData.js +1 -1
  71. package/dist/filters/components/filtersSearchList.js +9 -9
  72. package/dist/filters/components/filtersSelect.js +1 -1
  73. package/dist/filters/components/filtersSelectListItem.js +2 -2
  74. package/dist/filters/components/filtersSidePanel.js +8 -8
  75. package/dist/filters/filters.js +4 -3
  76. package/dist/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +18 -18
  77. package/dist/filtersBar/components/resetComponentButton.js +1 -1
  78. package/dist/filtersBar/filtersBarActions/filtersBarActions.js +4 -4
  79. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +2 -2
  80. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +5 -5
  81. package/dist/filtersBar/filtersContainer/filtersContainer.js +2 -2
  82. package/dist/formField/hooks/useError.js +3 -3
  83. package/dist/formGroup/components/reviewListToggle/reviewListToggle.js +2 -2
  84. package/dist/formGroup/hooks/useToggle.js +1 -1
  85. package/dist/formLayout/hooks/useError.js +3 -3
  86. package/dist/formLayout/hooks/useFormButtons.js +3 -3
  87. package/dist/formSection/hooks/useError.js +3 -3
  88. package/dist/formStepper/components/formStep.js +1 -1
  89. package/dist/formStepper/formStepper.js +2 -2
  90. package/dist/formStepperButtons/formStepperButtons.js +4 -4
  91. package/dist/groupsFilterRaw/groupsFilterAdjustmentState.js +4 -4
  92. package/dist/groupsFilterRaw/groupsFilterBox.js +3 -3
  93. package/dist/groupsFilterRaw/groupsFilterCommon.js +2 -2
  94. package/dist/groupsFilterRaw/groupsFilterCurrentlySelectedState.js +5 -5
  95. package/dist/groupsFilterRaw/groupsFilterHelper.js +2 -2
  96. package/dist/groupsFilterRaw/groupsFilterInitialState.js +8 -8
  97. package/dist/groupsFilterRaw/groupsFilterMenu.js +3 -3
  98. package/dist/groupsFilterRaw/groupsFilterRaw.js +8 -8
  99. package/dist/groupsFilterRaw/groupsFilterTrigger.js +2 -2
  100. package/dist/groupsFilterRaw/groupsHelper.js +22 -22
  101. package/dist/header/components/collapsedItemsControl/collapsedItemsControl.js +1 -1
  102. package/dist/header/components/mobileFilterControl/mobileFilterControl.js +1 -1
  103. package/dist/header/components/mobileSearchControl/mobileSearchControl.js +3 -3
  104. package/dist/header/headerBack.js +1 -1
  105. package/dist/index.css +89 -83
  106. package/dist/index.d.ts +3 -0
  107. package/dist/index.js +8 -3
  108. package/dist/lineChart/lineChart.js +1 -1
  109. package/dist/lineChartMini/lineChartMini.js +1 -1
  110. package/dist/list/itemData/itemDataInternal.js +2 -2
  111. package/dist/list/listItem/listItem.js +2 -2
  112. package/dist/menu/components/menuErrorItem.js +2 -2
  113. package/dist/mobileSheet/mobileSheet.js +2 -2
  114. package/dist/modal/modal.js +1 -1
  115. package/dist/nav/navFooter/navEditFooter/navEditFooter.js +2 -2
  116. package/dist/nav/navFooter/navFooter.js +1 -1
  117. package/dist/nav/navFooter/navFooterAction/navFooterAction.js +1 -1
  118. package/dist/nav/navHeader/navHeader.js +2 -2
  119. package/dist/nav/navHeader/navHeaderSearch/navHeaderSearch.js +2 -2
  120. package/dist/nav/navMobileBar/navMobileBar.js +1 -1
  121. package/dist/notification/notification.js +1 -1
  122. package/dist/pagination/paginationArrow.js +2 -2
  123. package/dist/pagination/paginationText/paginationText.js +1 -1
  124. package/dist/pill/components/pillNonActionable/pillNonActionable.js +1 -1
  125. package/dist/pillBox/components/pillBoxItem.js +1 -1
  126. package/dist/pillBox/pillBox.js +3 -3
  127. package/dist/pillExpandable/pillExpandable.js +1 -1
  128. package/dist/pillExpandable/pillExpandableAlignments.js +65 -48
  129. package/dist/progressIndicator/progressIndicator.d.ts +4 -4
  130. package/dist/progressIndicator/progressIndicator.js +4 -4
  131. package/dist/rangeRaw/rangeRaw.js +7 -7
  132. package/dist/rangeRaw/utils/rangeHelper.js +7 -7
  133. package/dist/searchInputRaw/searchInputRaw.js +2 -2
  134. package/dist/selectList/selectList.js +2 -2
  135. package/dist/skeleton/skeleton.js +1 -1
  136. package/dist/sortControl/sortControl.js +5 -5
  137. package/dist/stepperRaw/stepperRaw.js +2 -2
  138. package/dist/summary/summary.js +2 -2
  139. package/dist/summaryTile/summaryTile.js +1 -1
  140. package/dist/table/actions/actionsMenu.js +2 -2
  141. package/dist/table/detailPanel/detailPanel.js +1 -1
  142. package/dist/table/detailPanel/detailPanelHeader.js +2 -2
  143. package/dist/table/flexible/columnSettings.js +2 -2
  144. package/dist/table/flexible/columnsPopup.js +1 -1
  145. package/dist/table/nested/useNestedRows.js +2 -2
  146. package/dist/table/selectable/selectableHeader.js +5 -5
  147. package/dist/table/selectable/useSelectableRows.js +2 -2
  148. package/dist/table/sortable/mobileSortControl.js +3 -3
  149. package/dist/table/sortable/sortableHeader.js +2 -2
  150. package/dist/table/table.d.ts +4 -0
  151. package/dist/table/table.js +10 -6
  152. package/dist/tabs/tabs.js +2 -2
  153. package/dist/tag/tag.d.ts +3 -2
  154. package/dist/tag/tag.js +3 -2
  155. package/dist/timePickerRaw/timePickerRaw.js +7 -7
  156. package/dist/toastRaw/toastRaw.js +1 -1
  157. package/dist/toggleButtonRaw/toggleButtonRaw.js +2 -2
  158. package/dist/tooltip/tooltip.js +5 -2
  159. package/dist/utils/formatDate.js +37 -37
  160. package/dist/utils/localization/flipAlignment.js +5 -1
  161. package/dist/utils/localization/getSupportedLanguage.d.ts +1 -1
  162. package/dist/utils/localization/getSupportedLanguage.js +8 -2
  163. package/dist/utils/localization/getTextDirection.js +1 -1
  164. package/dist/utils/localization/languageContext.d.ts +1 -1
  165. package/dist/utils/localization/translations/{ar.json → ar-001.json} +54 -53
  166. package/dist/utils/localization/translationsDictionary.js +1 -1
  167. package/dist/utils/localization/useRTLAlignment.d.ts +6 -0
  168. package/dist/utils/localization/useRTLAlignment.js +6 -0
  169. package/esm/advancedGroupsFilter/advancedGroupsFilter.js +3 -3
  170. package/esm/advancedGroupsFilter/advancedGroupsFilterForm.js +2 -2
  171. package/esm/advancedGroupsFilter/advancedGroupsFilterFormSection.js +7 -7
  172. package/esm/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.js +1 -1
  173. package/esm/alertRaw/alertRaw.js +1 -1
  174. package/esm/banner/bannerMultipLine.js +1 -1
  175. package/esm/banner/bannerSingleLine.js +1 -1
  176. package/esm/banner/utils/useSummaryBannerProp.js +1 -1
  177. package/esm/betaPill/betaPill.js +4 -4
  178. package/esm/bookmark/bookmark.js +2 -2
  179. package/esm/bulkEditControl/bulkEditControl.js +5 -5
  180. package/esm/calendar/calendar.js +30 -30
  181. package/esm/calendar/calendarUtils.js +6 -6
  182. package/esm/card/card.js +1 -1
  183. package/esm/chart/accessibleChart/accessibleChartNarrative.js +13 -13
  184. package/esm/chart/accessibleChart/accessibleChartTable.js +5 -5
  185. package/esm/chart/accessibleChart/generatePieNarrative.js +6 -6
  186. package/esm/chart/barChart.js +1 -1
  187. package/esm/chart/chart.js +1 -1
  188. package/esm/chart/chartAxis/chartAxis.js +2 -2
  189. package/esm/chart/lineChart.js +1 -1
  190. package/esm/chart/pieChart.js +1 -1
  191. package/esm/checkboxListWithAction/checkboxListWithAction.js +4 -4
  192. package/esm/chip/chip.js +1 -1
  193. package/esm/columnsSelector/columnsSelector.js +2 -2
  194. package/esm/columnsSelector/columnsTab/columnsTab.js +1 -1
  195. package/esm/columnsSelector/columnsTabGroup/columnsTabGroup.js +1 -1
  196. package/esm/controlledPopup/controlledPopup.d.ts +1 -1
  197. package/esm/controlledPopup/controlledPopup.js +17 -3
  198. package/esm/dataFeed/feedExpandControl/feedExpandControl.js +2 -2
  199. package/esm/dataGrid/columns/checkboxColumn/checkboxHeaderCell.js +1 -1
  200. package/esm/dataGrid/dataGrid.js +1 -1
  201. package/esm/dataGrid/emptySearchList/emptySearchList.js +1 -1
  202. package/esm/dataGrid/entitiesListActions/actions/columnsListButton.js +1 -1
  203. package/esm/dataGrid/entitiesListActions/actions/fullscreenButton.js +2 -2
  204. package/esm/dataGrid/withFlexibleColumns/components/columnSettings.js +2 -2
  205. package/esm/dataGrid/withFlexibleColumns/components/columnSettingsSidePanel.js +1 -1
  206. package/esm/dataGrid/withFlexibleColumns/withFlexibleColumns.js +1 -1
  207. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +5 -5
  208. package/esm/dataGrid/withSelectableRows/withSelectableRows.js +4 -4
  209. package/esm/dataGrid/withSortableColumns/columns/sortableColumnWrapper.js +2 -2
  210. package/esm/dateInputInner/dateInputInner.js +7 -7
  211. package/esm/dateInputInner/dateInputInnerControlBlock.js +2 -2
  212. package/esm/dateInputRaw/dateInputRaw.js +3 -3
  213. package/esm/dateInputRaw/utils/getLabel.js +2 -2
  214. package/esm/dateRangeInner/dateRangeInner.js +1 -1
  215. package/esm/dateRangeRaw/dateRangeRaw.js +10 -10
  216. package/esm/dateRangeRaw/utils/dateRangeUtils.js +17 -17
  217. package/esm/dateSelectionWrapper/dateSelectionWrapper.js +4 -4
  218. package/esm/dialog/dialogContent.js +1 -1
  219. package/esm/dropdown/dropdownTrigger.d.ts +1 -1
  220. package/esm/dropdownRaw/dropdownList.js +9 -9
  221. package/esm/dropdownRaw/dropdownPopup.js +3 -3
  222. package/esm/dropdownRaw/dropdownRaw.js +249 -3
  223. package/esm/dropdownRaw/dropdownSearchableTrigger.d.ts +2 -1
  224. package/esm/dropdownRaw/dropdownSearchableTrigger.js +8 -6
  225. package/esm/dropdownRaw/dropdownTrigger.d.ts +2 -1
  226. package/esm/dropdownRaw/dropdownTrigger.js +2 -2
  227. package/esm/dropdownRaw/types.d.ts +7 -0
  228. package/esm/favoriteButton/favoriteButton.js +1 -1
  229. package/esm/fileUpload/components/dropZoneContent.js +4 -4
  230. package/esm/fileUpload/components/templateDownloadSection.js +1 -1
  231. package/esm/fileUpload/components/uploadedFilesSection.js +2 -2
  232. package/esm/fileUpload/fileUpload.js +6 -6
  233. package/esm/filters/components/filtersContainer.js +3 -3
  234. package/esm/filters/components/filtersEmptyState.js +2 -2
  235. package/esm/filters/components/filtersSaveModal.js +5 -5
  236. package/esm/filters/components/filtersSavedChipComponent.js +11 -11
  237. package/esm/filters/components/filtersSearchItemData.js +1 -1
  238. package/esm/filters/components/filtersSearchList.js +9 -9
  239. package/esm/filters/components/filtersSelect.js +1 -1
  240. package/esm/filters/components/filtersSelectListItem.js +2 -2
  241. package/esm/filters/components/filtersSidePanel.js +8 -8
  242. package/esm/filters/filters.js +4 -3
  243. package/esm/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +18 -18
  244. package/esm/filtersBar/components/resetComponentButton.js +1 -1
  245. package/esm/filtersBar/filtersBarActions/filtersBarActions.js +4 -4
  246. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +2 -2
  247. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +5 -5
  248. package/esm/filtersBar/filtersContainer/filtersContainer.js +2 -2
  249. package/esm/formField/hooks/useError.js +3 -3
  250. package/esm/formGroup/components/reviewListToggle/reviewListToggle.js +2 -2
  251. package/esm/formGroup/hooks/useToggle.js +1 -1
  252. package/esm/formLayout/hooks/useError.js +3 -3
  253. package/esm/formLayout/hooks/useFormButtons.js +3 -3
  254. package/esm/formSection/hooks/useError.js +3 -3
  255. package/esm/formStepper/components/formStep.js +1 -1
  256. package/esm/formStepper/formStepper.js +2 -2
  257. package/esm/formStepperButtons/formStepperButtons.js +4 -4
  258. package/esm/groupsFilterRaw/groupsFilterAdjustmentState.js +4 -4
  259. package/esm/groupsFilterRaw/groupsFilterBox.js +3 -3
  260. package/esm/groupsFilterRaw/groupsFilterCommon.js +2 -2
  261. package/esm/groupsFilterRaw/groupsFilterCurrentlySelectedState.js +5 -5
  262. package/esm/groupsFilterRaw/groupsFilterHelper.js +2 -2
  263. package/esm/groupsFilterRaw/groupsFilterInitialState.js +8 -8
  264. package/esm/groupsFilterRaw/groupsFilterMenu.js +3 -3
  265. package/esm/groupsFilterRaw/groupsFilterRaw.js +8 -8
  266. package/esm/groupsFilterRaw/groupsFilterTrigger.js +2 -2
  267. package/esm/groupsFilterRaw/groupsHelper.js +22 -22
  268. package/esm/header/components/collapsedItemsControl/collapsedItemsControl.js +1 -1
  269. package/esm/header/components/mobileFilterControl/mobileFilterControl.js +1 -1
  270. package/esm/header/components/mobileSearchControl/mobileSearchControl.js +3 -3
  271. package/esm/header/headerBack.js +1 -1
  272. package/esm/index.d.ts +3 -0
  273. package/esm/index.js +2 -0
  274. package/esm/lineChart/lineChart.js +1 -1
  275. package/esm/lineChartMini/lineChartMini.js +1 -1
  276. package/esm/list/itemData/itemDataInternal.js +2 -2
  277. package/esm/list/listItem/listItem.js +2 -2
  278. package/esm/menu/components/menuErrorItem.js +2 -2
  279. package/esm/mobileSheet/mobileSheet.js +2 -2
  280. package/esm/modal/modal.js +1 -1
  281. package/esm/nav/navFooter/navEditFooter/navEditFooter.js +2 -2
  282. package/esm/nav/navFooter/navFooter.js +1 -1
  283. package/esm/nav/navFooter/navFooterAction/navFooterAction.js +1 -1
  284. package/esm/nav/navHeader/navHeader.js +2 -2
  285. package/esm/nav/navHeader/navHeaderSearch/navHeaderSearch.js +2 -2
  286. package/esm/nav/navMobileBar/navMobileBar.js +1 -1
  287. package/esm/notification/notification.js +1 -1
  288. package/esm/pagination/paginationArrow.js +2 -2
  289. package/esm/pagination/paginationText/paginationText.js +1 -1
  290. package/esm/pill/components/pillNonActionable/pillNonActionable.js +1 -1
  291. package/esm/pillBox/components/pillBoxItem.js +1 -1
  292. package/esm/pillBox/pillBox.js +3 -3
  293. package/esm/pillExpandable/pillExpandable.js +1 -1
  294. package/esm/pillExpandable/pillExpandableAlignments.js +65 -48
  295. package/esm/progressIndicator/progressIndicator.d.ts +4 -4
  296. package/esm/progressIndicator/progressIndicator.js +4 -4
  297. package/esm/rangeRaw/rangeRaw.js +7 -7
  298. package/esm/rangeRaw/utils/rangeHelper.js +7 -7
  299. package/esm/searchInputRaw/searchInputRaw.js +2 -2
  300. package/esm/selectList/selectList.js +2 -2
  301. package/esm/skeleton/skeleton.js +1 -1
  302. package/esm/sortControl/sortControl.js +5 -5
  303. package/esm/stepperRaw/stepperRaw.js +2 -2
  304. package/esm/summary/summary.js +2 -2
  305. package/esm/summaryTile/summaryTile.js +1 -1
  306. package/esm/table/actions/actionsMenu.js +2 -2
  307. package/esm/table/detailPanel/detailPanel.js +1 -1
  308. package/esm/table/detailPanel/detailPanelHeader.js +2 -2
  309. package/esm/table/flexible/columnSettings.js +2 -2
  310. package/esm/table/flexible/columnsPopup.js +1 -1
  311. package/esm/table/nested/useNestedRows.js +2 -2
  312. package/esm/table/selectable/selectableHeader.js +5 -5
  313. package/esm/table/selectable/useSelectableRows.js +2 -2
  314. package/esm/table/sortable/mobileSortControl.js +3 -3
  315. package/esm/table/sortable/sortableHeader.js +2 -2
  316. package/esm/table/table.d.ts +4 -0
  317. package/esm/table/table.js +9 -5
  318. package/esm/tabs/tabs.js +2 -2
  319. package/esm/tag/tag.d.ts +3 -2
  320. package/esm/tag/tag.js +3 -2
  321. package/esm/timePickerRaw/timePickerRaw.js +7 -7
  322. package/esm/toastRaw/toastRaw.js +1 -1
  323. package/esm/toggleButtonRaw/toggleButtonRaw.js +2 -2
  324. package/esm/tooltip/tooltip.js +5 -2
  325. package/esm/utils/formatDate.js +37 -37
  326. package/esm/utils/localization/flipAlignment.js +5 -1
  327. package/esm/utils/localization/getSupportedLanguage.d.ts +1 -1
  328. package/esm/utils/localization/getSupportedLanguage.js +8 -2
  329. package/esm/utils/localization/getTextDirection.js +1 -1
  330. package/esm/utils/localization/languageContext.d.ts +1 -1
  331. package/esm/utils/localization/translations/{ar.json → ar-001.json} +54 -53
  332. package/esm/utils/localization/translationsDictionary.js +1 -1
  333. package/esm/utils/localization/useRTLAlignment.d.ts +6 -0
  334. package/esm/utils/localization/useRTLAlignment.js +6 -0
  335. package/package.json +1 -1
@@ -36,7 +36,7 @@ injectString("tr", "Close", "Kapat");
36
36
  injectString("zh-Hans", "Close", "\u5173\u95ED");
37
37
  injectString("zh-TW", "Close", "\u95DC\u9589");
38
38
  injectString("ro-RO", "Close", "\xCEnchide");
39
- injectString("ar", "Close", "\u0625\u063A\u0644\u0627\u0642");
39
+ injectString("ar-001", "Close", "\u0625\u063A\u0644\u0627\u0642");
40
40
  injectString("lt-LT", "Close", "U\u017Edaryti");
41
41
  injectString("lv-LV", "Close", "Aizv\u0113rt");
42
42
  injectString("ka-GE", "Close", "\u10D3\u10D0\u10EE\u10E3\u10E0\u10D5\u10D0");
@@ -1 +1 @@
1
- export declare const DropdownTrigger: ({ name, onBlur, isActive, id, triggerRef, searchField, placeholder, disabled, fullWidth, currentSelection, handleClick, inputValue, className, onSearchChange, width, title, triggerAriaLabel, count, inputRef, buttonType, isError, popupId, handleFocusOnPopup, allyPattern, dataAnalyticsId, ...otherProps }: import("../dropdownRaw/dropdownTrigger").IDropdownTrigger) => import("react/jsx-runtime").JSX.Element;
1
+ export declare const DropdownTrigger: ({ name, onBlur, isActive, id, triggerRef, searchField, placeholder, disabled, fullWidth, currentSelection, handleClick, inputValue, className, onSearchChange, width, title, triggerAriaLabel, count, inputRef, autocomplete, buttonType, isError, popupId, handleFocusOnPopup, allyPattern, dataAnalyticsId, ...otherProps }: import("../dropdownRaw/dropdownTrigger").IDropdownTrigger) => import("react/jsx-runtime").JSX.Element;
@@ -75,7 +75,7 @@ injectString("tr", "Error Loading Items", "Error Loading Items");
75
75
  injectString("zh-Hans", "Error Loading Items", "Error Loading Items");
76
76
  injectString("zh-TW", "Error Loading Items", "Error Loading Items");
77
77
  injectString("ro-RO", "Error Loading Items", "Eroare la \xEEnc\u0103rcarea articolelor");
78
- injectString("ar", "Error Loading Items", "\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0639\u0646\u0627\u0635\u0631");
78
+ injectString("ar-001", "Error Loading Items", "\u062E\u0637\u0623 \u0641\u064A \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0639\u0646\u0627\u0635\u0631");
79
79
  injectString("lt-LT", "Error Loading Items", "Element\u0173 \u012Fk\u0117limo klaida");
80
80
  injectString("lv-LV", "Error Loading Items", "K\u013C\u016Bda iel\u0101d\u0113jot vienumus");
81
81
  injectString("ka-GE", "Error Loading Items", "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D4\u10D1\u10D8\u10E1 \u10E9\u10D0\u10E2\u10D5\u10D8\u10E0\u10D7\u10D5\u10D8\u10E1 \u10E8\u10D4\u10EA\u10D3\u10DD\u10DB\u10D0");
@@ -108,7 +108,7 @@ injectString("tr", "No data", "Veri yok");
108
108
  injectString("zh-Hans", "No data", "\u65E0\u6570\u636E");
109
109
  injectString("zh-TW", "No data", "\u7121\u8CC7\u6599");
110
110
  injectString("ro-RO", "No data", "Nu exist\u0103 date");
111
- injectString("ar", "No data", "\u0644\u0627 \u062A\u0648\u062C\u062F \u0628\u064A\u0627\u0646\u0627\u062A");
111
+ injectString("ar-001", "No data", "\u0644\u0627 \u062A\u0648\u062C\u062F \u0628\u064A\u0627\u0646\u0627\u062A");
112
112
  injectString("lt-LT", "No data", "N\u0117ra duomen\u0173");
113
113
  injectString("lv-LV", "No data", "Nav datu");
114
114
  injectString("ka-GE", "No data", "\u10DB\u10DD\u10DC\u10D0\u10EA\u10D4\u10DB\u10D4\u10D1\u10D8 \u10D0\u10E0 \u10D0\u10E0\u10D8\u10E1");
@@ -141,7 +141,7 @@ injectString("tr", "Clear", "Temizle");
141
141
  injectString("zh-Hans", "Clear", "\u6E05\u9664");
142
142
  injectString("zh-TW", "Clear", "\u6E05\u9664");
143
143
  injectString("ro-RO", "Clear", "\u0218terge\u021Bi");
144
- injectString("ar", "Clear", "\u0645\u0633\u062D");
144
+ injectString("ar-001", "Clear", "\u0645\u0633\u062D");
145
145
  injectString("lt-LT", "Clear", "I\u0161valyti");
146
146
  injectString("lv-LV", "Clear", "Not\u012Br\u012Bt");
147
147
  injectString("ka-GE", "Clear", "\u10D2\u10D0\u10E1\u10E3\u10E4\u10D7\u10D0\u10D5\u10D4\u10D1\u10D0");
@@ -174,7 +174,7 @@ injectString("tr", "Cancel", "\u0130ptal");
174
174
  injectString("zh-Hans", "Cancel", "\u53D6\u6D88");
175
175
  injectString("zh-TW", "Cancel", "\u53D6\u6D88");
176
176
  injectString("ro-RO", "Cancel", "Anula\u021Bi");
177
- injectString("ar", "Cancel", "\u0625\u0644\u063A\u0627\u0621");
177
+ injectString("ar-001", "Cancel", "\u0625\u0644\u063A\u0627\u0621");
178
178
  injectString("lt-LT", "Cancel", "At\u0161aukti");
179
179
  injectString("lv-LV", "Cancel", "Atcelt");
180
180
  injectString("ka-GE", "Cancel", "\u10D2\u10D0\u10E3\u10E5\u10DB\u10D4\u10D1\u10D0");
@@ -207,7 +207,7 @@ injectString("tr", "Apply", "Uygula");
207
207
  injectString("zh-Hans", "Apply", "\u5E94\u7528");
208
208
  injectString("zh-TW", "Apply", "\u5957\u7528");
209
209
  injectString("ro-RO", "Apply", "Aplica\u021Bi");
210
- injectString("ar", "Apply", "\u062A\u0637\u0628\u064A\u0642");
210
+ injectString("ar-001", "Apply", "\u062A\u0637\u0628\u064A\u0642");
211
211
  injectString("lt-LT", "Apply", "Taikyti");
212
212
  injectString("lv-LV", "Apply", "Lietot");
213
213
  injectString("ka-GE", "Apply", "\u10D2\u10D0\u10DB\u10DD\u10E7\u10D4\u10DC\u10D4\u10D1\u10D0");
@@ -240,7 +240,7 @@ injectString("tr", "Deselect all", "T\xFCm\xFCn\xFCn se\xE7imini iptal et");
240
240
  injectString("zh-Hans", "Deselect all", "\u53D6\u6D88\u5168\u9009");
241
241
  injectString("zh-TW", "Deselect all", "\u53D6\u6D88\u5168\u9078");
242
242
  injectString("ro-RO", "Deselect all", "Deselecta\u021Bi tot");
243
- injectString("ar", "Deselect all", "\u0625\u0644\u063A\u0627\u0621 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644");
243
+ injectString("ar-001", "Deselect all", "\u0625\u0644\u063A\u0627\u0621 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644");
244
244
  injectString("lt-LT", "Deselect all", "At\u017Eym\u0117ti visus");
245
245
  injectString("lv-LV", "Deselect all", "Atcelt visas atlases");
246
246
  injectString("ka-GE", "Deselect all", "\u10E7\u10D5\u10D4\u10DA\u10D0\u10E1 \u10DB\u10DD\u10EE\u10E1\u10DC\u10D0");
@@ -273,7 +273,7 @@ injectString("tr", "Select all", "T\xFCm\xFCn\xFC se\xE7");
273
273
  injectString("zh-Hans", "Select all", "\u5168\u9009");
274
274
  injectString("zh-TW", "Select all", "\u5168\u9078");
275
275
  injectString("ro-RO", "Select all", "Selecta\u021Bi tot");
276
- injectString("ar", "Select all", "\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644");
276
+ injectString("ar-001", "Select all", "\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644");
277
277
  injectString("lt-LT", "Select all", "Pasirinkti visus");
278
278
  injectString("lv-LV", "Select all", "Atlas\u012Bt visus");
279
279
  injectString("ka-GE", "Select all", "\u10E7\u10D5\u10D4\u10DA\u10D0\u10E1 \u10D0\u10E0\u10E9\u10D4\u10D5\u10D0");
@@ -306,7 +306,7 @@ injectString("tr", "Select option", "Se\xE7enek belirleyin");
306
306
  injectString("zh-Hans", "Select option", "\u9009\u62E9\u9009\u9879");
307
307
  injectString("zh-TW", "Select option", "\u9078\u53D6\u9078\u9805");
308
308
  injectString("ro-RO", "Select option", "Selecta\u021Bi op\u021Biunea");
309
- injectString("ar", "Select option", "\u062A\u062D\u062F\u064A\u062F \u062E\u064A\u0627\u0631");
309
+ injectString("ar-001", "Select option", "\u062A\u062D\u062F\u064A\u062F \u062E\u064A\u0627\u0631");
310
310
  injectString("lt-LT", "Select option", "Pasirinkti parinkt\u012F");
311
311
  injectString("lv-LV", "Select option", "Atlas\u012Bt opciju");
312
312
  injectString("ka-GE", "Select option", "\u10DE\u10D0\u10E0\u10D0\u10DB\u10D4\u10E2\u10E0\u10D8\u10E1 \u10D0\u10E0\u10E9\u10D4\u10D5\u10D0");
@@ -339,7 +339,7 @@ injectString("tr", "Back", "Geri");
339
339
  injectString("zh-Hans", "Back", "\u8FD4\u56DE");
340
340
  injectString("zh-TW", "Back", "\u8FD4\u56DE");
341
341
  injectString("ro-RO", "Back", "\xCEnapoi");
342
- injectString("ar", "Back", "\u0631\u062C\u0648\u0639");
342
+ injectString("ar-001", "Back", "\u0631\u062C\u0648\u0639");
343
343
  injectString("lt-LT", "Back", "Atgal");
344
344
  injectString("lv-LV", "Back", "Atpaka\u013C");
345
345
  injectString("ka-GE", "Back", "\u10E3\u10D9\u10D0\u10DC");
@@ -46,7 +46,7 @@ injectString("tr", "Filter by group", "Gruba g\xF6re filtrele");
46
46
  injectString("zh-Hans", "Filter by group", "\u6309\u7EC4\u8FC7\u6EE4");
47
47
  injectString("zh-TW", "Filter by group", "\u4F9D\u7FA4\u7D44\u7BE9\u9078");
48
48
  injectString("ro-RO", "Filter by group", "Filtra\u021Bi dup\u0103 grup");
49
- injectString("ar", "Filter by group", "\u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u062D\u0633\u0628 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629");
49
+ injectString("ar-001", "Filter by group", "\u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u062D\u0633\u0628 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629");
50
50
  injectString("lt-LT", "Filter by group", "Filtruoti pagal grup\u0119");
51
51
  injectString("lv-LV", "Filter by group", "Filtr\u0113t p\u0113c grupas");
52
52
  injectString("ka-GE", "Filter by group", "\u10EF\u10D2\u10E3\u10E4\u10D8\u10E1 \u10DB\u10D8\u10EE\u10D4\u10D3\u10D5\u10D8\u10D7 \u10E4\u10D8\u10DA\u10E2\u10E0\u10D0\u10EA\u10D8\u10D0");
@@ -79,7 +79,7 @@ injectString("tr", "Apply", "Uygula");
79
79
  injectString("zh-Hans", "Apply", "\u5E94\u7528");
80
80
  injectString("zh-TW", "Apply", "\u5957\u7528");
81
81
  injectString("ro-RO", "Apply", "Aplica\u021Bi");
82
- injectString("ar", "Apply", "\u062A\u0637\u0628\u064A\u0642");
82
+ injectString("ar-001", "Apply", "\u062A\u0637\u0628\u064A\u0642");
83
83
  injectString("lt-LT", "Apply", "Taikyti");
84
84
  injectString("lv-LV", "Apply", "Lietot");
85
85
  injectString("ka-GE", "Apply", "\u10D2\u10D0\u10DB\u10DD\u10E7\u10D4\u10DC\u10D4\u10D1\u10D0");
@@ -112,7 +112,7 @@ injectString("tr", "Clear", "Temizle");
112
112
  injectString("zh-Hans", "Clear", "\u6E05\u9664");
113
113
  injectString("zh-TW", "Clear", "\u6E05\u9664");
114
114
  injectString("ro-RO", "Clear", "\u0218terge\u021Bi");
115
- injectString("ar", "Clear", "\u0645\u0633\u062D");
115
+ injectString("ar-001", "Clear", "\u0645\u0633\u062D");
116
116
  injectString("lt-LT", "Clear", "I\u0161valyti");
117
117
  injectString("lv-LV", "Clear", "Not\u012Br\u012Bt");
118
118
  injectString("ka-GE", "Clear", "\u10D2\u10D0\u10E1\u10E3\u10E4\u10D7\u10D0\u10D5\u10D4\u10D1\u10D0");
@@ -36,7 +36,7 @@ injectString("tr", "Filter by group", "Gruba g\xF6re filtrele");
36
36
  injectString("zh-Hans", "Filter by group", "\u6309\u7EC4\u8FC7\u6EE4");
37
37
  injectString("zh-TW", "Filter by group", "\u4F9D\u7FA4\u7D44\u7BE9\u9078");
38
38
  injectString("ro-RO", "Filter by group", "Filtra\u021Bi dup\u0103 grup");
39
- injectString("ar", "Filter by group", "\u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u062D\u0633\u0628 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629");
39
+ injectString("ar-001", "Filter by group", "\u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u062D\u0633\u0628 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629");
40
40
  injectString("lt-LT", "Filter by group", "Filtruoti pagal grup\u0119");
41
41
  injectString("lv-LV", "Filter by group", "Filtr\u0113t p\u0113c grupas");
42
42
  injectString("ka-GE", "Filter by group", "\u10EF\u10D2\u10E3\u10E4\u10D8\u10E1 \u10DB\u10D8\u10EE\u10D4\u10D3\u10D5\u10D8\u10D7 \u10E4\u10D8\u10DA\u10E2\u10E0\u10D0\u10EA\u10D8\u10D0");
@@ -71,6 +71,23 @@ const dropdown_1 = require("../dropdown/dropdown");
71
71
  const zen_1 = require("../utils/zen");
72
72
  const isChildOf_1 = require("../utils/isChildOf");
73
73
  const keyboardHelpers_1 = require("../utils/keyboardHelpers");
74
+ const useIsomorphicLayoutEffect_1 = require("../commonHelpers/hooks/useIsomorphicLayoutEffect");
75
+ /**
76
+ * Returns the first groupsMap key whose `name` exactly matches `text` (case-insensitive),
77
+ * restricted to leaf items (no children) and excluding the internal ROOT_GROUP_ID sentinel.
78
+ * Only matching leaves prevents accidentally dispatching a group-container ID for grouped
79
+ * dropdowns where a continent/category name might equal the AutoFill text.
80
+ */
81
+ function findAutoFillMatch(groupsMap, text) {
82
+ return Object.keys(groupsMap).find(id => {
83
+ var _a;
84
+ if (id === stateReducer_1.ROOT_GROUP_ID) return false;
85
+ const item = groupsMap[id];
86
+ // Skip group-container nodes — only selectable leaf items should be auto-selected.
87
+ if ((_a = item === null || item === void 0 ? void 0 : item.children) === null || _a === void 0 ? void 0 : _a.length) return false;
88
+ return (item === null || item === void 0 ? void 0 : item.name) && item.name.toLocaleLowerCase() === text.toLocaleLowerCase();
89
+ });
90
+ }
74
91
  const DropdownRaw = props => {
75
92
  var _a, _b;
76
93
  const {
@@ -89,6 +106,7 @@ const DropdownRaw = props => {
89
106
  triggerAriaLabel,
90
107
  id: propId,
91
108
  inputId,
109
+ autocomplete,
92
110
  filterName,
93
111
  showCounterPill = true,
94
112
  showSelection,
@@ -166,6 +184,19 @@ const DropdownRaw = props => {
166
184
  const comboboxRef = (0, react_1.useRef)(null);
167
185
  const inputRef = (0, react_1.useRef)(null);
168
186
  const contentRef = (0, react_1.useRef)(null);
187
+ // Tracks isOpenCombo without stale closures in native DOM event handlers
188
+ const isOpenComboRef = (0, react_1.useRef)(false);
189
+ // Stores the value set by browser AutoFill so onSearchChange can detect and consume it
190
+ const pendingAutoFillValueRef = (0, react_1.useRef)(null);
191
+ // Tracks the last AutoFill value that was directly dispatched by the native listener.
192
+ // Prevents double-dispatch when Chrome/Firefox fire both 'input' and 'change' for the same fill.
193
+ const autoFillJustHandledRef = (0, react_1.useRef)(null);
194
+ // Mirror of state.groupsMap kept current by useLayoutEffect so callbacks that need
195
+ // it don't depend on state directly (avoids memoisation busting on every data fetch)
196
+ const groupsMapRef = (0, react_1.useRef)(state.groupsMap);
197
+ // Mirror of state.selectedIds for the native listener and deferred effect, which run
198
+ // outside React's event cycle and cannot read state directly without stale closure risk.
199
+ const selectedIdsRef = (0, react_1.useRef)(state.selectedIds);
169
200
  const prevSelectedIds = (0, react_1.useRef)({
170
201
  selected: [],
171
202
  isAllSelected: undefined,
@@ -375,6 +406,12 @@ const DropdownRaw = props => {
375
406
  (focusable[0] || triggerRef.current).focus();
376
407
  }, []);
377
408
  const handleEscape = (0, react_1.useCallback)(() => {
409
+ // Clear any pending AutoFill. The user escaped — they don't want an auto-selection,
410
+ // regardless of whether groupsMap is already populated or not. Clearing here makes
411
+ // the AutoFill lifecycle explicit: the pending intent is cancelled on every close,
412
+ // preventing the deferred effect from selecting an item after a user dismissal.
413
+ pendingAutoFillValueRef.current = null;
414
+ autoFillJustHandledRef.current = null;
378
415
  dispatchState({
379
416
  type: stateActionType_1.StateActionType.SetIsOpenCombo,
380
417
  payload: false
@@ -690,15 +727,216 @@ const DropdownRaw = props => {
690
727
  controlData(currentAbort.signal, state.inputValue, state.isChecked);
691
728
  }, [controlData, state.inputValue, state.isChecked, isCheckboxMode]);
692
729
  (0, useEscape_1.useEscape)(triggerRef, handleEscape, state.isOpenCombo);
730
+ // useIsomorphicLayoutEffect (falls back to useEffect on SSR) keeps the refs current
731
+ // before any paint so there is no one-render gap where a same-frame AutoFill event
732
+ // could read stale values. The isomorphic variant avoids React's SSR warning.
733
+ (0, useIsomorphicLayoutEffect_1.useIsomorphicLayoutEffect)(() => {
734
+ isOpenComboRef.current = state.isOpenCombo;
735
+ }, [state.isOpenCombo]);
736
+ (0, useIsomorphicLayoutEffect_1.useIsomorphicLayoutEffect)(() => {
737
+ groupsMapRef.current = state.groupsMap;
738
+ }, [state.groupsMap]);
739
+ (0, useIsomorphicLayoutEffect_1.useIsomorphicLayoutEffect)(() => {
740
+ selectedIdsRef.current = state.selectedIds;
741
+ }, [state.selectedIds]);
742
+ // Handle browser AutoFill on searchable dropdown triggers.
743
+ // We listen to BOTH 'input' and 'change' because browser behaviour varies:
744
+ // • Chrome/Firefox fire 'input' then 'change' for autofill
745
+ // • Safari fires only 'change' (React's onChange, mapped to 'input', never fires)
746
+ // By listening to both and dispatching directly when data is available, we handle all
747
+ // browsers without depending on React's synthetic onChange reaching onSearchChange.
748
+ //
749
+ // Double-dispatch guard (Chrome/Firefox): autoFillJustHandledRef records the value that
750
+ // was just dispatched. The second event of the same autofill pair sees the same value and
751
+ // skips, then resets the guard for the next autofill.
752
+ //
753
+ // Known limitation — browser text-autocomplete history (per-field suggestions shown when
754
+ // a user re-visits a field they have typed into before) also fires these events while the
755
+ // popup is closed, making it indistinguishable from real AutoFill. There is no cross-browser
756
+ // API to distinguish the two cases reliably; this is an accepted trade-off for the AutoFill UX.
757
+ (0, react_1.useEffect)(() => {
758
+ // inputRef uses a non-null cast (MutableRefObject<HTMLInputElement>), so we need an
759
+ // explicit nullable cast to safely guard against the ref not yet being populated.
760
+ const input = inputRef.current;
761
+ // isReadOnly renders ReviewTextControl instead of the trigger input — the input element
762
+ // doesn't exist. Including isReadOnly in the deps ensures the listener re-attaches
763
+ // when a view/edit toggle transitions the dropdown from read-only to editable.
764
+ if (!input || !searchField || chip || isMobile || isReadOnly) {
765
+ return;
766
+ }
767
+ const handleNativeAutoFill = e => {
768
+ const autoFillValue = e.target.value;
769
+ if (!autoFillValue || isOpenComboRef.current) return;
770
+ // Double-dispatch guard: skip the second event of the same autofill pair
771
+ // (Chrome/Firefox fire both 'input' and 'change' for one fill).
772
+ if (autoFillJustHandledRef.current === autoFillValue) {
773
+ // Do NOT re-set pendingAutoFillValueRef here. Doing so would leave it alive
774
+ // after the immediate dispatch and allow a later state.groupsMap change (e.g.
775
+ // an external data refresh) to wake the deferred effect and re-dispatch
776
+ // ChangeSelection — toggling a multiselect item back off.
777
+ // Do NOT clear autoFillJustHandledRef here either. Clearing it would allow the
778
+ // native 'change' listener of this same pair to fall through and dispatch a second
779
+ // time (in Chrome/Firefox the guard fires for the 'change' event; if cleared, the
780
+ // listener would treat it as a new autofill and dispatch again — toggle-off bug).
781
+ // Known limitation: if the browser re-fills the same value without any popup
782
+ // interaction between fills, autoFillJustHandledRef is still set and the refill
783
+ // is silently dropped. handleEscape and handleTriggerClick clear the guard for
784
+ // the common case; a timestamp-based expiry could address the edge case later.
785
+ return;
786
+ }
787
+ // Always record the pending value so onSearchChange can skip controlData
788
+ // and the deferred effect can retry if data isn't loaded yet.
789
+ pendingAutoFillValueRef.current = autoFillValue;
790
+ const currentGroupsMap = groupsMapRef.current;
791
+ if (Object.keys(currentGroupsMap).length === 0) {
792
+ // getData hasn't resolved yet — deferred useEffect handles it once data arrives.
793
+ return;
794
+ }
795
+ const matchedId = findAutoFillMatch(currentGroupsMap, autoFillValue);
796
+ if (matchedId) {
797
+ // Dispatch directly so selection works even when React's onChange doesn't fire
798
+ // (Safari autofill fires 'change' but not 'input', so onSearchChange may not run).
799
+ autoFillJustHandledRef.current = autoFillValue; // guard for onSearchChange + second event
800
+ // Clear pendingRef immediately after dispatch. In Safari, onSearchChange never
801
+ // runs after a native 'change', so pendingRef would remain set indefinitely. A
802
+ // later state.groupsMap change (e.g. external data refresh) would then re-trigger
803
+ // the deferred effect, which dispatches ChangeSelection again — toggling a
804
+ // multiselect item back off. Clearing here prevents that ghost re-dispatch.
805
+ pendingAutoFillValueRef.current = null;
806
+ if (multiselect) {
807
+ // ChangeSelection has toggle semantics — dispatching when the item is already
808
+ // selected would deselect it, emitting an incorrect onChange in edit forms.
809
+ // AutoFill must be idempotent: if the item is already selected, no-op.
810
+ if (!selectedIdsRef.current.includes(matchedId)) {
811
+ dispatchState({
812
+ type: stateActionType_1.StateActionType.ChangeSelection,
813
+ payload: {
814
+ value: true,
815
+ itemId: matchedId
816
+ }
817
+ });
818
+ }
819
+ } else {
820
+ // Dispatch directly instead of via handleSingleSelection to avoid the
821
+ // focus hijack: handleSingleSelection → handleEscape → triggerRef.focus()
822
+ // steals browser focus mid-form fill and disrupts tab order for the user.
823
+ dispatchState({
824
+ type: stateActionType_1.StateActionType.ChangeSingleSelection,
825
+ payload: {
826
+ value: matchedId,
827
+ reset: false
828
+ }
829
+ });
830
+ }
831
+ // Clear the AutoFill text from the search input (same for both modes).
832
+ dispatchState({
833
+ type: stateActionType_1.StateActionType.SetInputValue,
834
+ payload: ""
835
+ });
836
+ return;
837
+ }
838
+ // No match: pendingAutoFillValueRef stays set; onSearchChange will clear it and
839
+ // return early without calling controlData, leaving the text visible for the user.
840
+ };
841
+ input.addEventListener("input", handleNativeAutoFill);
842
+ input.addEventListener("change", handleNativeAutoFill);
843
+ // eslint-disable-next-line consistent-return
844
+ return () => {
845
+ input.removeEventListener("input", handleNativeAutoFill);
846
+ input.removeEventListener("change", handleNativeAutoFill);
847
+ };
848
+ // inputRef is a stable MutableRefObject (never changes identity), so it is not listed
849
+ // as a dep. isReadOnly is listed so the effect re-runs when a view/edit toggle
850
+ // transitions the dropdown to editable — without it the listener never attaches.
851
+ // multiselect is listed because the listener dispatches different actions for each mode.
852
+ }, [searchField, chip, isMobile, isReadOnly, multiselect]);
853
+ // Deferred AutoFill: for getData-based dropdowns, groupsMap may be empty when AutoFill
854
+ // fires on page load (data hasn't resolved yet). onSearchChange keeps pendingAutoFillValueRef
855
+ // alive in that case and sets inputValue as a placeholder. This effect retries the lookup
856
+ // every time groupsMap is updated; it exits immediately when there is nothing pending.
857
+ (0, react_1.useEffect)(() => {
858
+ // Defensive guard matching the native listener: only process deferred AutoFill for
859
+ // searchable non-chip desktop triggers. isReadOnly is included so the deferred effect
860
+ // does not dispatch when the component renders in read-only mode (no input mounted).
861
+ if (!searchField || chip || isMobile || isReadOnly) return;
862
+ const pendingValue = pendingAutoFillValueRef.current;
863
+ if (!pendingValue || Object.keys(groupsMapRef.current).length === 0) return;
864
+ pendingAutoFillValueRef.current = null;
865
+ const matchedId = findAutoFillMatch(groupsMapRef.current, pendingValue);
866
+ if (matchedId) {
867
+ if (multiselect) {
868
+ // Same idempotency guard as the native listener: skip if already selected to
869
+ // avoid toggling the item off in an edit form that pre-populates the value.
870
+ if (!selectedIdsRef.current.includes(matchedId)) {
871
+ dispatchState({
872
+ type: stateActionType_1.StateActionType.ChangeSelection,
873
+ payload: {
874
+ value: true,
875
+ itemId: matchedId
876
+ }
877
+ });
878
+ }
879
+ } else {
880
+ dispatchState({
881
+ type: stateActionType_1.StateActionType.ChangeSingleSelection,
882
+ payload: {
883
+ value: matchedId,
884
+ reset: false
885
+ }
886
+ });
887
+ }
888
+ // Clear the placeholder inputValue that onSearchChange set while data was loading.
889
+ dispatchState({
890
+ type: stateActionType_1.StateActionType.SetInputValue,
891
+ payload: ""
892
+ });
893
+ }
894
+ // No match: leave inputValue at the AutoFill text so the user can see what was tried.
895
+ // onSearchChange already set it to pendingValue; not clearing it is intentional.
896
+ }, [state.groupsMap, multiselect, searchField, chip, isMobile, isReadOnly]);
693
897
  const onSearchChange = (0, react_1.useCallback)(event => {
694
- const newValue = event ? event.currentTarget.value : "";
898
+ // Use event.target (not currentTarget) to match the native listener which also
899
+ // reads e.target.value — the two must read the same property when comparing.
900
+ const newValue = event ? event.target.value : "";
901
+ // AutoFill path — two distinct cases, checked in order:
902
+ //
903
+ // 1. Native listener dispatched (data was available, autoFillJustHandledRef set):
904
+ // Skip SetInputValue entirely — the listener already sent SetInputValue("") and
905
+ // pendingRef was cleared right after dispatch. React 18 batches same-tick dispatches
906
+ // and the last wins, so dispatching the autofill text here would override "".
907
+ // This branch fires for every onChange that belongs to the same autofill pair
908
+ // (e.g. from 'input' then 'change' in Chrome/Firefox).
909
+ // Note — hasApplyButton: AutoFill bypasses the staged-selection flow because user
910
+ // intent is unambiguous. The "when change inside" effect already gates onChangeInner
911
+ // behind hasApplyButton, so external onChange is still withheld until Apply is clicked.
912
+ if (autoFillJustHandledRef.current === newValue) {
913
+ // Do NOT clear autoFillJustHandledRef — the guard in handleNativeAutoFill
914
+ // still needs it for the second native event (Chrome/Firefox 'change' after 'input').
915
+ // It is cleared by handleEscape / handleTriggerClick on the next user interaction.
916
+ return;
917
+ }
918
+ // 2. getData pending or no-match (pendingRef set by native listener, no dispatch yet):
919
+ // Keep pendingRef alive for the deferred useEffect; show the autofill text and
920
+ // skip controlData to avoid an unexpected search API call with the raw text.
921
+ if (pendingAutoFillValueRef.current !== null && pendingAutoFillValueRef.current === newValue) {
922
+ dispatchState({
923
+ type: stateActionType_1.StateActionType.SetInputValue,
924
+ payload: newValue
925
+ });
926
+ return;
927
+ }
928
+ // Normal search path (not an AutoFill event).
929
+ pendingAutoFillValueRef.current = null;
695
930
  dispatchState({
696
931
  type: stateActionType_1.StateActionType.SetInputValue,
697
932
  payload: newValue
698
933
  });
699
934
  const currentAbort = abortToken.current;
700
935
  controlData(currentAbort.signal, newValue, state.isChecked);
701
- }, [controlData, state.isChecked]);
936
+ },
937
+ // state.groupsMap and multiselect intentionally omitted: lookup and dispatch now happen
938
+ // in the native listener. This callback only needs to skip controlData cleanly.
939
+ [controlData, state.isChecked]);
702
940
  const onInputChange = (0, react_1.useCallback)(newValue => {
703
941
  dispatchState({
704
942
  type: stateActionType_1.StateActionType.SetInputValue,
@@ -720,6 +958,13 @@ const DropdownRaw = props => {
720
958
  controlData(currentAbort.signal, state.inputValue, isChecked);
721
959
  }, [controlData, state.inputValue]);
722
960
  const handleTriggerClick = (0, react_1.useCallback)(newVal => {
961
+ if (newVal) {
962
+ // User is manually opening the dropdown to browse. Cancel any pending AutoFill
963
+ // so the deferred useEffect doesn't auto-select once getData resolves — the user
964
+ // is now in control and an invisible selection would be surprising.
965
+ pendingAutoFillValueRef.current = null;
966
+ autoFillJustHandledRef.current = null;
967
+ }
723
968
  const currentAbort = abortToken.current;
724
969
  dispatchState({
725
970
  type: stateActionType_1.StateActionType.SetCurrentId,
@@ -985,6 +1230,7 @@ const DropdownRaw = props => {
985
1230
  triggerAriaLabel: triggerAriaLabel,
986
1231
  triggerRef: triggerRef,
987
1232
  inputRef: inputRef,
1233
+ autocomplete: autocomplete,
988
1234
  buttonType: buttonType,
989
1235
  handleFocusOnPopup: handleFocusOnPopup,
990
1236
  popupId: memoizedAllyPattern === "selectOnlyCombobox" ? selectListId : popupId,
@@ -20,11 +20,12 @@ interface IDropdownSearchableTrigger {
20
20
  name?: string;
21
21
  onBlur?: () => void;
22
22
  popupId?: string;
23
+ autocomplete?: string;
23
24
  handleFocusOnPopup?: () => void;
24
25
  dataAnalyticsId?: string;
25
26
  }
26
27
  export declare const DropdownSearchableTrigger: {
27
- ({ value, className, onChange, placeholder, isOpenPopup, inputRef, handleClick, width, title, id, disabled, count, currentSelection, isError, fullWidth, ref, name, onBlur, popupId, handleFocusOnPopup, dataAnalyticsId, ...otherProps }: IDropdownSearchableTrigger): import("react/jsx-runtime").JSX.Element;
28
+ ({ value, className, onChange, placeholder, isOpenPopup, inputRef, handleClick, width, title, id, disabled, count, currentSelection, isError, fullWidth, ref, name, onBlur, popupId, autocomplete, handleFocusOnPopup, dataAnalyticsId, ...otherProps }: IDropdownSearchableTrigger): import("react/jsx-runtime").JSX.Element;
28
29
  displayName: string;
29
30
  };
30
31
  export declare const TRANSLATIONS: string[];
@@ -44,7 +44,7 @@ injectString("tr", "Filter by group", "Gruba g\xF6re filtrele");
44
44
  injectString("zh-Hans", "Filter by group", "\u6309\u7EC4\u8FC7\u6EE4");
45
45
  injectString("zh-TW", "Filter by group", "\u4F9D\u7FA4\u7D44\u7BE9\u9078");
46
46
  injectString("ro-RO", "Filter by group", "Filtra\u021Bi dup\u0103 grup");
47
- injectString("ar", "Filter by group", "\u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u062D\u0633\u0628 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629");
47
+ injectString("ar-001", "Filter by group", "\u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u062D\u0633\u0628 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629");
48
48
  injectString("lt-LT", "Filter by group", "Filtruoti pagal grup\u0119");
49
49
  injectString("lv-LV", "Filter by group", "Filtr\u0113t p\u0113c grupas");
50
50
  injectString("ka-GE", "Filter by group", "\u10EF\u10D2\u10E3\u10E4\u10D8\u10E1 \u10DB\u10D8\u10EE\u10D4\u10D3\u10D5\u10D8\u10D7 \u10E4\u10D8\u10DA\u10E2\u10E0\u10D0\u10EA\u10D8\u10D0");
@@ -77,7 +77,7 @@ injectString("tr", "Clear search", "Aramay\u0131 temizle");
77
77
  injectString("zh-Hans", "Clear search", "\u6E05\u9664\u641C\u7D22");
78
78
  injectString("zh-TW", "Clear search", "\u6E05\u9664\u641C\u5C0B");
79
79
  injectString("ro-RO", "Clear search", "\u0218terge\u021Bi c\u0103utarea");
80
- injectString("ar", "Clear search", "\u0645\u0633\u062D \u0627\u0644\u0628\u062D\u062B");
80
+ injectString("ar-001", "Clear search", "\u0645\u0633\u062D \u0627\u0644\u0628\u062D\u062B");
81
81
  injectString("lt-LT", "Clear search", "I\u0161valyti paie\u0161k\u0105");
82
82
  injectString("lv-LV", "Clear search", "Not\u012Br\u012Bt mekl\u0113\u0161anu");
83
83
  injectString("ka-GE", "Clear search", "\u10EB\u10D8\u10D4\u10D1\u10D8\u10E1 \u10D2\u10D0\u10E1\u10E3\u10E4\u10D7\u10D0\u10D5\u10D4\u10D1\u10D0");
@@ -110,7 +110,7 @@ injectString("tr", "Close filter", "Filtreyi kapat");
110
110
  injectString("zh-Hans", "Close filter", "\u5173\u95ED\u7B5B\u9009\u5668");
111
111
  injectString("zh-TW", "Close filter", "\u95DC\u9589\u7BE9\u9078\u5668");
112
112
  injectString("ro-RO", "Close filter", "\xCEnchide\u021Bi filtrul");
113
- injectString("ar", "Close filter", "\u0625\u063A\u0644\u0627\u0642 \u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0635\u0641\u064A\u0629");
113
+ injectString("ar-001", "Close filter", "\u0625\u063A\u0644\u0627\u0642 \u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0635\u0641\u064A\u0629");
114
114
  injectString("lt-LT", "Close filter", "U\u017Edaryti filtr\u0105");
115
115
  injectString("lv-LV", "Close filter", "Aizv\u0113rt filtru");
116
116
  injectString("ka-GE", "Close filter", "\u10E4\u10D8\u10DA\u10E2\u10E0\u10D8\u10E1 \u10D3\u10D0\u10EE\u10E3\u10E0\u10D5\u10D0");
@@ -143,7 +143,7 @@ injectString("tr", "Open filter", "Filtreyi a\xE7");
143
143
  injectString("zh-Hans", "Open filter", "\u6253\u5F00\u7B5B\u9009\u5668");
144
144
  injectString("zh-TW", "Open filter", "\u958B\u555F\u7BE9\u9078\u689D\u4EF6");
145
145
  injectString("ro-RO", "Open filter", "Deschide\u021Bi filtrul");
146
- injectString("ar", "Open filter", "\u0641\u062A\u062D \u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0635\u0641\u064A\u0629");
146
+ injectString("ar-001", "Open filter", "\u0641\u062A\u062D \u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0635\u0641\u064A\u0629");
147
147
  injectString("lt-LT", "Open filter", "Atidaryti filtr\u0105");
148
148
  injectString("lv-LV", "Open filter", "Atv\u0113rt filtru");
149
149
  injectString("ka-GE", "Open filter", "\u10E4\u10D8\u10DA\u10E2\u10E0\u10D8\u10E1 \u10D2\u10D0\u10EE\u10E1\u10DC\u10D0");
@@ -178,10 +178,11 @@ const DropdownSearchableTrigger = _a => {
178
178
  name,
179
179
  onBlur,
180
180
  popupId,
181
+ autocomplete,
181
182
  handleFocusOnPopup,
182
183
  dataAnalyticsId
183
184
  } = _a,
184
- otherProps = __rest(_a, ["value", "className", "onChange", "placeholder", "isOpenPopup", "inputRef", "handleClick", "width", "title", "id", "disabled", "count", "currentSelection", "isError", "fullWidth", "ref", "name", "onBlur", "popupId", "handleFocusOnPopup", "dataAnalyticsId"])
185
+ otherProps = __rest(_a, ["value", "className", "onChange", "placeholder", "isOpenPopup", "inputRef", "handleClick", "width", "title", "id", "disabled", "count", "currentSelection", "isError", "fullWidth", "ref", "name", "onBlur", "popupId", "autocomplete", "handleFocusOnPopup", "dataAnalyticsId"])
185
186
  // eslint-disable-next-line complexity
186
187
  ;
187
188
  const {
@@ -255,7 +256,8 @@ const DropdownSearchableTrigger = _a => {
255
256
  ariaLabel: placeholder,
256
257
  ariaAutocomplete: "list",
257
258
  ariaHaspopup: "dialog",
258
- role: "combobox"
259
+ role: "combobox",
260
+ autocomplete: autocomplete
259
261
  })
260
262
  }), count ? (0, jsx_runtime_1.jsx)("div", {
261
263
  className: "zen-dropdown-searchable-trigger__label-element",
@@ -18,6 +18,7 @@ export interface IDropdownTrigger extends IZenComponentProps {
18
18
  triggerAriaLabel?: string;
19
19
  triggerRef: React.RefObject<HTMLElement | null>;
20
20
  inputRef?: React.RefObject<HTMLInputElement | null>;
21
+ autocomplete?: string;
21
22
  buttonType?: TFilterButton;
22
23
  isError?: boolean;
23
24
  name?: string;
@@ -27,5 +28,5 @@ export interface IDropdownTrigger extends IZenComponentProps {
27
28
  allyPattern?: "selectOnlyCombobox" | "comboboxWithDialog" | "buttonWithDialog" | "buttonWithMenu";
28
29
  dataAnalyticsId?: string;
29
30
  }
30
- export declare const DropdownTrigger: ({ name, onBlur, isActive, id, triggerRef, searchField, placeholder, disabled, fullWidth, currentSelection, handleClick, inputValue, className, onSearchChange, width, title, triggerAriaLabel, count, inputRef, buttonType, isError, popupId, handleFocusOnPopup, allyPattern, dataAnalyticsId, ...otherProps }: IDropdownTrigger) => import("react/jsx-runtime").JSX.Element;
31
+ export declare const DropdownTrigger: ({ name, onBlur, isActive, id, triggerRef, searchField, placeholder, disabled, fullWidth, currentSelection, handleClick, inputValue, className, onSearchChange, width, title, triggerAriaLabel, count, inputRef, autocomplete, buttonType, isError, popupId, handleFocusOnPopup, allyPattern, dataAnalyticsId, ...otherProps }: IDropdownTrigger) => import("react/jsx-runtime").JSX.Element;
31
32
  export declare const TRANSLATIONS: string[];
@@ -19,13 +19,13 @@ const react_1 = require("react");
19
19
  const classNames_1 = require("../commonHelpers/classNames/classNames");
20
20
  const dropdownHelper_1 = require("./dropdownHelper");
21
21
  const DropdownTrigger = (_a) => {
22
- var { name, onBlur, isActive, id, triggerRef, searchField, placeholder, disabled, fullWidth, currentSelection, handleClick, inputValue, className, onSearchChange = () => { }, width, title, triggerAriaLabel, count, inputRef, buttonType, isError, popupId, handleFocusOnPopup, allyPattern = "buttonWithDialog", dataAnalyticsId } = _a, otherProps = __rest(_a, ["name", "onBlur", "isActive", "id", "triggerRef", "searchField", "placeholder", "disabled", "fullWidth", "currentSelection", "handleClick", "inputValue", "className", "onSearchChange", "width", "title", "triggerAriaLabel", "count", "inputRef", "buttonType", "isError", "popupId", "handleFocusOnPopup", "allyPattern", "dataAnalyticsId"]);
22
+ var { name, onBlur, isActive, id, triggerRef, searchField, placeholder, disabled, fullWidth, currentSelection, handleClick, inputValue, className, onSearchChange = () => { }, width, title, triggerAriaLabel, count, inputRef, autocomplete, buttonType, isError, popupId, handleFocusOnPopup, allyPattern = "buttonWithDialog", dataAnalyticsId } = _a, otherProps = __rest(_a, ["name", "onBlur", "isActive", "id", "triggerRef", "searchField", "placeholder", "disabled", "fullWidth", "currentSelection", "handleClick", "inputValue", "className", "onSearchChange", "width", "title", "triggerAriaLabel", "count", "inputRef", "autocomplete", "buttonType", "isError", "popupId", "handleFocusOnPopup", "allyPattern", "dataAnalyticsId"]);
23
23
  const elInpRef = (0, react_1.useRef)(null);
24
24
  const handleButtonClick = () => {
25
25
  handleClick(!isActive);
26
26
  };
27
27
  const allyTriggerProps = (0, react_1.useMemo)(() => (0, dropdownHelper_1.getAllyTriggerProps)(allyPattern), [allyPattern]);
28
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: searchField ? ((0, jsx_runtime_1.jsx)(dropdownSearchableTrigger_1.DropdownSearchableTrigger, Object.assign({ value: inputValue || "", name: name, onChange: onSearchChange, isOpenPopup: isActive, inputRef: inputRef || elInpRef, handleClick: handleClick, handleFocusOnPopup: handleFocusOnPopup, ref: triggerRef, width: width, placeholder: placeholder, disabled: disabled, id: id, title: title, count: count, currentSelection: currentSelection, className: className, isError: isError, fullWidth: fullWidth, popupId: popupId, dataAnalyticsId: dataAnalyticsId }, otherProps))) : ((0, jsx_runtime_1.jsx)(filterButton_1.FilterButton, Object.assign({ ref: triggerRef, id: id, name: name, onBlur: onBlur, className: (0, classNames_1.classNames)(["zen-dropdown__trigger-button", isError ? "zen-dropdown__trigger-button--error" : "", className || ""]), onClick: handleButtonClick, disabled: disabled, isActive: isActive, fullWidth: width ? true : fullWidth, maxWidth: width, minWidth: width, quantity: count || undefined, type: buttonType, title: title, ariaLabel: triggerAriaLabel || currentSelection || placeholder, "aria-expanded": isActive, "aria-controls": popupId }, allyTriggerProps, { dataAnalyticsId: dataAnalyticsId }, otherProps, { children: currentSelection ? ((0, jsx_runtime_1.jsx)("span", { className: (0, classNames_1.classNames)([
28
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: searchField ? ((0, jsx_runtime_1.jsx)(dropdownSearchableTrigger_1.DropdownSearchableTrigger, Object.assign({ value: inputValue || "", name: name, onChange: onSearchChange, isOpenPopup: isActive, inputRef: inputRef || elInpRef, handleClick: handleClick, handleFocusOnPopup: handleFocusOnPopup, ref: triggerRef, width: width, placeholder: placeholder, disabled: disabled, id: id, title: title, count: count, currentSelection: currentSelection, className: className, isError: isError, fullWidth: fullWidth, popupId: popupId, autocomplete: autocomplete, dataAnalyticsId: dataAnalyticsId }, otherProps))) : ((0, jsx_runtime_1.jsx)(filterButton_1.FilterButton, Object.assign({ ref: triggerRef, id: id, name: name, onBlur: onBlur, className: (0, classNames_1.classNames)(["zen-dropdown__trigger-button", isError ? "zen-dropdown__trigger-button--error" : "", className || ""]), onClick: handleButtonClick, disabled: disabled, isActive: isActive, fullWidth: width ? true : fullWidth, maxWidth: width, minWidth: width, quantity: count || undefined, type: buttonType, title: title, ariaLabel: triggerAriaLabel || currentSelection || placeholder, "aria-expanded": isActive, "aria-controls": popupId }, allyTriggerProps, { dataAnalyticsId: dataAnalyticsId }, otherProps, { children: currentSelection ? ((0, jsx_runtime_1.jsx)("span", { className: (0, classNames_1.classNames)([
29
29
  "zen-dropdown__trigger-button-text",
30
30
  buttonType ? `zen-dropdown__trigger-button-text--${buttonType.toString()}` : ""
31
31
  ]), children: currentSelection })) : (placeholder) }))) }));
@@ -42,6 +42,13 @@ interface IDropdownBase extends IChipsParent {
42
42
  title?: string;
43
43
  triggerAriaLabel?: string;
44
44
  inputId?: string;
45
+ /**
46
+ * HTML `autocomplete` attribute forwarded to the searchable trigger input.
47
+ * Use tokens such as `"country-name"` or `"address-level1"` to participate in
48
+ * browser AutoFill section grouping and improve fill accuracy. Only applies when
49
+ * `searchField={true}`.
50
+ */
51
+ autocomplete?: string;
45
52
  filterName?: string;
46
53
  showCounterPill?: boolean;
47
54
  showSelection?: boolean;
@@ -39,7 +39,7 @@ injectString("tr", "Favorite", "Favori");
39
39
  injectString("zh-Hans", "Favorite", "\u6536\u85CF");
40
40
  injectString("zh-TW", "Favorite", "\u6211\u7684\u6700\u611B");
41
41
  injectString("ro-RO", "Favorite", "Preferat");
42
- injectString("ar", "Favorite", "\u0645\u0641\u0636\u0644");
42
+ injectString("ar-001", "Favorite", "\u0645\u0641\u0636\u0644");
43
43
  injectString("lt-LT", "Favorite", "M\u0117gstamas");
44
44
  injectString("lv-LV", "Favorite", "Favor\u012Bts");
45
45
  injectString("ka-GE", "Favorite", "\u10E0\u10E9\u10D4\u10E3\u10DA\u10D8");
@@ -38,7 +38,7 @@ injectString("tr", "Tap to add files", "Dosya eklemek i\xE7in dokunun");
38
38
  injectString("zh-Hans", "Tap to add files", "\u70B9\u51FB\u6DFB\u52A0\u6587\u4EF6");
39
39
  injectString("zh-TW", "Tap to add files", "\u9EDE\u9078\u4EE5\u65B0\u589E\u6A94\u6848");
40
40
  injectString("ro-RO", "Tap to add files", "Atinge\u021Bi pentru a ad\u0103uga fi\u0219iere");
41
- injectString("ar", "Tap to add files", "\u0627\u0646\u0642\u0631 \u0644\u0625\u0636\u0627\u0641\u0629 \u0645\u0644\u0641\u0627\u062A");
41
+ injectString("ar-001", "Tap to add files", "\u0627\u0646\u0642\u0631 \u0644\u0625\u0636\u0627\u0641\u0629 \u0645\u0644\u0641\u0627\u062A");
42
42
  injectString("lt-LT", "Tap to add files", "Bakstel\u0117kite, kad prid\u0117tum\u0117te fail\u0173");
43
43
  injectString("lv-LV", "Tap to add files", "Pieskarieties, lai pievienotu failus");
44
44
  injectString("ka-GE", "Tap to add files", "\u10E4\u10D0\u10D8\u10DA\u10D4\u10D1\u10D8\u10E1 \u10D3\u10D0\u10E1\u10D0\u10DB\u10D0\u10E2\u10D4\u10D1\u10DA\u10D0\u10D3 \u10E8\u10D4\u10D4\u10EE\u10D4\u10D7");
@@ -71,7 +71,7 @@ injectString("tr", "Drag & drop files or", "Dosyalar\u0131 s\xFCr\xFCkleyip b\u0
71
71
  injectString("zh-Hans", "Drag & drop files or", "\u62D6\u653E\u6587\u4EF6\u6216");
72
72
  injectString("zh-TW", "Drag & drop files or", "\u62D6\u653E\u6A94\u6848\u6216");
73
73
  injectString("ro-RO", "Drag & drop files or", "Glisa\u021Bi \u0219i fixa\u021Bi fi\u0219iere sau");
74
- injectString("ar", "Drag & drop files or", "\u0633\u062D\u0628 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0648\u0625\u0641\u0644\u0627\u062A\u0647\u0627 \u0623\u0648");
74
+ injectString("ar-001", "Drag & drop files or", "\u0633\u062D\u0628 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0648\u0625\u0641\u0644\u0627\u062A\u0647\u0627 \u0623\u0648");
75
75
  injectString("lt-LT", "Drag & drop files or", "Nuvilkite failus arba");
76
76
  injectString("lv-LV", "Drag & drop files or", "Velciet un nometiet failus vai");
77
77
  injectString("ka-GE", "Drag & drop files or", "\u10E4\u10D0\u10D8\u10DA\u10D4\u10D1\u10D8\u10E1 \u10D2\u10D0\u10D3\u10DB\u10DD\u10D7\u10E0\u10D4\u10D5\u10D0 \u10D0\u10DC");
@@ -104,7 +104,7 @@ injectString("tr", "Browse", "G\xF6zat");
104
104
  injectString("zh-Hans", "Browse", "\u6D4F\u89C8");
105
105
  injectString("zh-TW", "Browse", "\u700F\u89BD");
106
106
  injectString("ro-RO", "Browse", "R\u0103sfoire");
107
- injectString("ar", "Browse", "\u062A\u0635\u0641\u062D");
107
+ injectString("ar-001", "Browse", "\u062A\u0635\u0641\u062D");
108
108
  injectString("lt-LT", "Browse", "Nar\u0161yti");
109
109
  injectString("lv-LV", "Browse", "P\u0101rl\u016Bkot");
110
110
  injectString("ka-GE", "Browse", "\u10D3\u10D0\u10D7\u10D5\u10D0\u10DA\u10D8\u10D4\u10E0\u10D4\u10D1\u10D0");
@@ -137,7 +137,7 @@ injectString("tr", "Supported Formats:", "Desteklenen Bi\xE7imler:");
137
137
  injectString("zh-Hans", "Supported Formats:", "\u652F\u6301\u7684\u683C\u5F0F\uFF1A");
138
138
  injectString("zh-TW", "Supported Formats:", "\u652F\u63F4\u7684\u683C\u5F0F\uFF1A");
139
139
  injectString("ro-RO", "Supported Formats:", "Formate acceptate:");
140
- injectString("ar", "Supported Formats:", "\u0627\u0644\u0635\u064A\u063A \u0627\u0644\u0645\u062F\u0639\u0648\u0645\u0629:");
140
+ injectString("ar-001", "Supported Formats:", "\u0627\u0644\u0635\u064A\u063A \u0627\u0644\u0645\u062F\u0639\u0648\u0645\u0629:");
141
141
  injectString("lt-LT", "Supported Formats:", "Palaikomi formatai:");
142
142
  injectString("lv-LV", "Supported Formats:", "Atbalst\u012Btie form\u0101ti:");
143
143
  injectString("ka-GE", "Supported Formats:", "\u10DB\u10EE\u10D0\u10E0\u10D3\u10D0\u10ED\u10D4\u10E0\u10D8\u10DA\u10D8 \u10E4\u10DD\u10E0\u10DB\u10D0\u10E2\u10D4\u10D1\u10D8:");