@geotab/zenith 3.11.1 → 3.12.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 (636) hide show
  1. package/README.md +70 -0
  2. package/dist/absolute/absolute.d.ts +21 -1
  3. package/dist/absolute/absolute.js +46 -6
  4. package/dist/advancedGroupsFilter/advancedGroupsFilter.js +3 -3
  5. package/dist/advancedGroupsFilter/advancedGroupsFilterForm.js +2 -2
  6. package/dist/advancedGroupsFilter/advancedGroupsFilterFormSection.js +7 -7
  7. package/dist/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.js +1 -1
  8. package/dist/alert/banner.d.ts +3 -1
  9. package/dist/alertRaw/alertRaw.js +1 -1
  10. package/dist/banner/banner.d.ts +5 -2
  11. package/dist/banner/banner.js +13 -2
  12. package/dist/banner/bannerErrorSummary.d.ts +7 -0
  13. package/dist/banner/bannerErrorSummary.js +8 -0
  14. package/dist/banner/bannerMultipLine.js +1 -1
  15. package/dist/banner/bannerSingleLine.js +1 -1
  16. package/dist/banner/utils/buildSummaryErrorList.d.ts +1 -0
  17. package/dist/banner/utils/buildSummaryErrorList.js +16 -0
  18. package/dist/banner/utils/hasSummaryErrorChild.d.ts +1 -0
  19. package/dist/banner/utils/hasSummaryErrorChild.js +7 -0
  20. package/dist/banner/utils/isSummaryErrorBanner.d.ts +2 -0
  21. package/dist/banner/utils/isSummaryErrorBanner.js +6 -0
  22. package/dist/banner/utils/isSummaryErrorElement.d.ts +3 -0
  23. package/dist/banner/utils/isSummaryErrorElement.js +7 -0
  24. package/dist/banner/utils/useSummaryBannerProp.d.ts +6 -0
  25. package/dist/banner/utils/useSummaryBannerProp.js +34 -0
  26. package/dist/betaPill/betaPill.js +4 -4
  27. package/dist/bookmark/bookmark.js +2 -2
  28. package/dist/bulkEditControl/bulkEditControl.js +5 -5
  29. package/dist/calendar/calendar.js +37 -34
  30. package/dist/calendar/calendarUtils.js +6 -4
  31. package/dist/card/card.js +1 -1
  32. package/dist/card/components/title.js +4 -1
  33. package/dist/card/components/titleLink.js +5 -2
  34. package/dist/chart/accessibleChart/accessibleChartNarrative.js +13 -13
  35. package/dist/chart/accessibleChart/accessibleChartTable.js +5 -5
  36. package/dist/chart/barChart/getDefaultOptions.d.ts +2 -1
  37. package/dist/chart/barChart/getDefaultOptions.js +5 -2
  38. package/dist/chart/barChart.js +6 -4
  39. package/dist/chart/chart.js +1 -1
  40. package/dist/chart/chartAxis/chartAxis.js +2 -2
  41. package/dist/chart/lineChart/getDefaultOptions.d.ts +4 -1
  42. package/dist/chart/lineChart/getDefaultOptions.js +7 -2
  43. package/dist/chart/lineChart.js +7 -3
  44. package/dist/chart/plugins/linePlugin/linePlugin.js +5 -4
  45. package/dist/chart/utils/getXAxisMeta.js +8 -5
  46. package/dist/chart/utils/isDateRange.js +1 -1
  47. package/dist/chart/utils/useHidden.d.ts +1 -0
  48. package/dist/chart/utils/useHidden.js +1 -1
  49. package/dist/chart/utils/useLastVisibleXAxisMeta.d.ts +2 -0
  50. package/dist/chart/utils/useLastVisibleXAxisMeta.js +15 -0
  51. package/dist/checkboxListWithAction/checkboxListWithAction.js +8 -5
  52. package/dist/chip/chip.js +1 -1
  53. package/dist/columnsSelector/columnsSelector.js +2 -2
  54. package/dist/columnsSelector/columnsTab/columnsTab.js +1 -1
  55. package/dist/columnsSelector/columnsTabGroup/columnsTabGroup.js +1 -1
  56. package/dist/commonHelpers/arrowNavigation/components/arrowButton/arrowButton.js +4 -1
  57. package/dist/commonStyles/columnsList.less +59 -0
  58. package/dist/commonStyles/link/link.less +1 -1
  59. package/dist/commonStyles/pillStyles/pillContent.less +14 -15
  60. package/dist/commonStyles/pillStyles/pillStyles.less +4 -5
  61. package/dist/commonStyles/pillStyles/pillTextContent.less +2 -2
  62. package/dist/commonStyles/pillStyles/pillTypes.less +1 -1
  63. package/dist/commonStyles/popupMixin.less +1 -1
  64. package/dist/commonStyles/selectButton.less +1 -1
  65. package/dist/commonStyles/typography/typography.less +545 -19
  66. package/dist/controlledPopup/controlledPopup.d.ts +1 -0
  67. package/dist/controlledPopup/controlledPopup.js +3 -1
  68. package/dist/dataFeed/feedExpandControl/feedExpandControl.js +5 -0
  69. package/dist/dataGrid/cell/cell.d.ts +2 -1
  70. package/dist/dataGrid/cell/cell.js +2 -2
  71. package/dist/dataGrid/columns/checkboxColumn/checkboxHeaderCell.js +1 -1
  72. package/dist/dataGrid/dataGrid.js +8 -5
  73. package/dist/dataGrid/emptySearchList/emptySearchList.js +1 -1
  74. package/dist/dataGrid/entitiesListActions/actions/columnsListButton.js +1 -1
  75. package/dist/dataGrid/entitiesListActions/actions/fullscreenButton.js +2 -2
  76. package/dist/dataGrid/listColumn.d.ts +2 -0
  77. package/dist/dataGrid/row/row.d.ts +2 -1
  78. package/dist/dataGrid/row/row.js +13 -9
  79. package/dist/dataGrid/withFlexibleColumns/components/columnSettings.js +2 -2
  80. package/dist/dataGrid/withFlexibleColumns/components/columnSettingsList.d.ts +1 -1
  81. package/dist/dataGrid/withFlexibleColumns/components/columnSettingsList.js +45 -116
  82. package/dist/dataGrid/withFlexibleColumns/components/columnSettingsSidePanel.js +4 -0
  83. package/dist/dataGrid/withFlexibleColumns/withFlexibleColumns.js +1 -1
  84. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +4 -0
  85. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +5 -5
  86. package/dist/dataGrid/withSelectableRows/withSelectableRows.js +4 -3
  87. package/dist/dataGrid/withSortableColumns/columns/sortableColumnWrapper.js +2 -2
  88. package/dist/dateInputInner/dateInputInner.js +7 -7
  89. package/dist/dateInputInner/dateInputInnerControlBlock.js +2 -2
  90. package/dist/dateInputRaw/dateInputRaw.js +4 -4
  91. package/dist/dateInputRaw/utils/getLabel.js +2 -2
  92. package/dist/dateRangeInner/dateRangeInner.js +6 -3
  93. package/dist/dateRangeRaw/dateRangeRaw.d.ts +1 -0
  94. package/dist/dateRangeRaw/dateRangeRaw.js +21 -15
  95. package/dist/dateRangeRaw/types.d.ts +1 -0
  96. package/dist/dateRangeRaw/utils/dateRangeUtils.js +17 -17
  97. package/dist/dateRangeRaw/utils/parseLabel.js +1 -1
  98. package/dist/dateSelectionWrapper/dateSelectionWrapper.js +4 -4
  99. package/dist/dialog/dialogContent.js +1 -1
  100. package/dist/dropdown/dropdownTrigger.d.ts +1 -1
  101. package/dist/dropdownRaw/dropdownList.js +9 -9
  102. package/dist/dropdownRaw/dropdownPopup.js +3 -3
  103. package/dist/dropdownRaw/dropdownRaw.js +34 -17
  104. package/dist/dropdownRaw/dropdownSearchableTrigger.d.ts +2 -1
  105. package/dist/dropdownRaw/dropdownSearchableTrigger.js +8 -6
  106. package/dist/dropdownRaw/dropdownTrigger.d.ts +2 -1
  107. package/dist/dropdownRaw/dropdownTrigger.js +2 -2
  108. package/dist/dropdownRaw/types.d.ts +2 -0
  109. package/dist/favoriteButton/favoriteButton.js +1 -1
  110. package/dist/fileUpload/components/dropZoneContent.js +104 -104
  111. package/dist/fileUpload/components/templateDownloadSection.js +1 -1
  112. package/dist/fileUpload/components/uploadedFilesSection.js +2 -2
  113. package/dist/fileUpload/fileUpload.js +106 -106
  114. package/dist/filterButton/filterButton.d.ts +1 -0
  115. package/dist/filters/components/filtersContainer.js +2 -2
  116. package/dist/filters/components/filtersDropdown.d.ts +1 -1
  117. package/dist/filters/components/filtersEmptyState.js +2 -2
  118. package/dist/filters/components/filtersSaveModal.js +5 -5
  119. package/dist/filters/components/filtersSavedChipComponent.js +11 -11
  120. package/dist/filters/components/filtersSearchItemData.js +1 -1
  121. package/dist/filters/components/filtersSearchList.js +14 -11
  122. package/dist/filters/components/filtersSelect.js +1 -1
  123. package/dist/filters/components/filtersSelectListItem.js +2 -2
  124. package/dist/filters/components/filtersSidePanel.js +8 -8
  125. package/dist/filters/filters.js +7 -7
  126. package/dist/filtersBar/components/filtersBarGroupsFilter/filtersBarGroupsFilter.d.ts +1 -1
  127. package/dist/filtersBar/components/filtersBarPeriodPicker/filtersBarPeriodPicker.d.ts +1 -0
  128. package/dist/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +18 -18
  129. package/dist/filtersBar/components/resetComponentButton.js +1 -1
  130. package/dist/filtersBar/filtersBarActions/filtersBarActions.js +3 -3
  131. package/dist/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +2 -2
  132. package/dist/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +5 -5
  133. package/dist/filtersBar/filtersContainer/filtersContainer.js +62 -61
  134. package/dist/formField/hooks/useError.js +3 -3
  135. package/dist/formField/hooks/useFormFieldProps.d.ts +1 -1
  136. package/dist/formField/hooks/useFormFieldProps.js +4 -2
  137. package/dist/formGroup/components/reviewListToggle/reviewListToggle.js +2 -2
  138. package/dist/formGroup/hooks/useCustomRow.js +46 -32
  139. package/dist/formGroup/hooks/useRowElements.js +9 -6
  140. package/dist/formGroup/hooks/useToggle.js +1 -1
  141. package/dist/formGroup/types.d.ts +4 -0
  142. package/dist/formGroup/utils/normalizeFieldId.d.ts +1 -0
  143. package/dist/formGroup/utils/normalizeFieldId.js +5 -0
  144. package/dist/formGroup/utils/resolveId.d.ts +7 -0
  145. package/dist/formGroup/utils/resolveId.js +6 -0
  146. package/dist/formLayout/components/getLayoutColumns.js +4 -2
  147. package/dist/formLayout/hooks/useError.js +3 -3
  148. package/dist/formLayout/hooks/useErrorSummary.d.ts +6 -0
  149. package/dist/formLayout/hooks/useErrorSummary.js +34 -0
  150. package/dist/formLayout/hooks/useFormButtons.js +3 -3
  151. package/dist/formLayout/utils/applyGridPropsStatic.js +1 -1
  152. package/dist/formLayout/utils/flattenErrors.d.ts +5 -0
  153. package/dist/formLayout/utils/flattenErrors.js +14 -0
  154. package/dist/formLayout/utils/getChildrenWithCustomColumns.js +3 -0
  155. package/dist/formLayout/utils/getFieldLabel.d.ts +1 -0
  156. package/dist/formLayout/utils/getFieldLabel.js +26 -0
  157. package/dist/formSection/hooks/useError.js +3 -3
  158. package/dist/formStepper/components/formStep.js +1 -1
  159. package/dist/formStepper/formStepper.js +2 -2
  160. package/dist/formStepperButtons/formStepperButtons.js +8 -5
  161. package/dist/gridLayout/hooks/useGridClasses.js +3 -9
  162. package/dist/groupButtonRaw/groupButtonRaw.js +2 -2
  163. package/dist/groupButtonRaw/types.d.ts +1 -0
  164. package/dist/groupsFilterRaw/groupsFilterAdjustmentState.js +8 -5
  165. package/dist/groupsFilterRaw/groupsFilterBox.js +3 -3
  166. package/dist/groupsFilterRaw/groupsFilterCommon.js +2 -2
  167. package/dist/groupsFilterRaw/groupsFilterCurrentlySelectedState.js +5 -5
  168. package/dist/groupsFilterRaw/groupsFilterHelper.js +2 -2
  169. package/dist/groupsFilterRaw/groupsFilterInitialState.js +12 -9
  170. package/dist/groupsFilterRaw/groupsFilterMenu.js +3 -3
  171. package/dist/groupsFilterRaw/groupsFilterRaw.d.ts +1 -0
  172. package/dist/groupsFilterRaw/groupsFilterRaw.js +15 -10
  173. package/dist/groupsFilterRaw/groupsFilterTrigger.d.ts +2 -1
  174. package/dist/groupsFilterRaw/groupsFilterTrigger.js +8 -5
  175. package/dist/groupsFilterRaw/groupsHelper.js +22 -22
  176. package/dist/groupsFilterRaw/types.d.ts +2 -0
  177. package/dist/header/components/collapsedItemsControl/collapsedItemsControl.js +1 -1
  178. package/dist/header/components/mobileFilterControl/mobileFilterControl.js +1 -1
  179. package/dist/header/components/mobileSearchControl/mobileSearchControl.js +3 -3
  180. package/dist/header/header.js +1 -1
  181. package/dist/header/headerBack.js +5 -2
  182. package/dist/header/headerHelpers.d.ts +1 -0
  183. package/dist/header/headerHelpers.js +10 -1
  184. package/dist/header/hooks/useNonFittingElements.js +1 -1
  185. package/dist/icons/iconAlignLeft.js +1 -3
  186. package/dist/icons/iconAlignmentLeft.js +1 -3
  187. package/dist/icons/iconAlignmentRight.js +1 -3
  188. package/dist/icons/iconArrowBottomLeft.js +1 -3
  189. package/dist/icons/iconArrowBottomRight.js +1 -3
  190. package/dist/icons/iconArrowLeftPath.js +1 -3
  191. package/dist/icons/iconArrowRight.js +1 -3
  192. package/dist/icons/iconArrowRightCircle.js +1 -3
  193. package/dist/icons/iconArrowRightPath.js +1 -3
  194. package/dist/icons/iconArrowTopLeft.js +1 -3
  195. package/dist/icons/iconArrowTopRight.js +1 -3
  196. package/dist/icons/iconChevronDoubleRight.js +1 -3
  197. package/dist/icons/iconChevronRight.js +1 -3
  198. package/dist/icons/iconChevronRightSmall.js +1 -3
  199. package/dist/icons/iconCornerDownLeft.js +1 -3
  200. package/dist/icons/iconCornerDownRight.js +1 -3
  201. package/dist/icons/iconCornerLeftDown.js +1 -3
  202. package/dist/icons/iconCornerLeftUp.js +1 -3
  203. package/dist/icons/iconCornerRightDown.js +1 -3
  204. package/dist/icons/iconCornerRightUp.js +1 -3
  205. package/dist/icons/iconCornerUpLeft.js +1 -3
  206. package/dist/icons/iconCornerUpRight.js +1 -3
  207. package/dist/index.css +3628 -3321
  208. package/dist/index.d.ts +1 -0
  209. package/dist/index.js +16 -14
  210. package/dist/lineChartMini/lineChartMini.js +15 -3
  211. package/dist/list/itemData/itemDataInternal.js +6 -3
  212. package/dist/list/listItem/listItem.js +6 -3
  213. package/dist/menu/components/controlledMenuList/controlledMenuList.js +4 -1
  214. package/dist/menu/components/menuButton.d.ts +2 -1
  215. package/dist/menu/components/menuButton.js +7 -4
  216. package/dist/menu/components/menuErrorItem.js +2 -2
  217. package/dist/menu/components/menuItem.js +4 -4
  218. package/dist/menu/utils/useMenuItemCore.js +4 -3
  219. package/dist/miniTabs/miniTabs.d.ts +1 -0
  220. package/dist/miniTabs/miniTabs.js +1 -1
  221. package/dist/miniTabs/miniTabsHeaderItem.d.ts +2 -1
  222. package/dist/miniTabs/miniTabsHeaderItem.js +1 -1
  223. package/dist/miniTabs/miniTabsItem.d.ts +1 -0
  224. package/dist/mobileSheet/mobileSheet.js +2 -2
  225. package/dist/modal/modal.js +1 -1
  226. package/dist/nav/navFooter/navEditFooter/navEditFooter.js +2 -2
  227. package/dist/nav/navFooter/navFooter.js +1 -1
  228. package/dist/nav/navFooter/navFooterAction/navFooterAction.js +1 -1
  229. package/dist/nav/navHeader/navHeader.js +2 -2
  230. package/dist/nav/navHeader/navHeaderSearch/navHeaderSearch.js +2 -2
  231. package/dist/nav/navItem/navItem.js +4 -1
  232. package/dist/nav/navMobileBar/navMobileBar.js +1 -1
  233. package/dist/notification/notification.js +1 -1
  234. package/dist/pagination/paginationArrow.js +12 -5
  235. package/dist/pagination/paginationText/paginationText.js +1 -1
  236. package/dist/pill/components/pillNonActionable/pillNonActionable.js +1 -1
  237. package/dist/pillBox/components/pillBoxItem.js +1 -1
  238. package/dist/pillBox/pillBox.js +3 -3
  239. package/dist/pillExpandable/pillContent.js +12 -3
  240. package/dist/pillExpandable/pillExpandable.d.ts +4 -1
  241. package/dist/pillExpandable/pillExpandable.js +5 -3
  242. package/dist/pillExpandable/pillExpandableSimple.d.ts +1 -1
  243. package/dist/pillExpandable/pillExpandableSimple.js +4 -4
  244. package/dist/radioGroupRaw/radioGroupRaw.js +2 -1
  245. package/dist/rangeRaw/rangeRaw.js +7 -8
  246. package/dist/rangeRaw/utils/rangeHelper.js +7 -7
  247. package/dist/searchInputRaw/searchInputRaw.js +6 -3
  248. package/dist/selectList/selectList.js +2 -2
  249. package/dist/selectList/selectListItem.js +4 -1
  250. package/dist/skeleton/skeleton.js +1 -1
  251. package/dist/sortControl/sortControl.js +6 -7
  252. package/dist/stepperRaw/stepperRaw.js +5 -0
  253. package/dist/summary/summary.js +2 -2
  254. package/dist/summaryTile/summaryTile.d.ts +4 -2
  255. package/dist/summaryTile/summaryTile.js +59 -26
  256. package/dist/summaryTileBar/summaryTileBar.d.ts +4 -2
  257. package/dist/summaryTileBar/summaryTileBar.js +2 -2
  258. package/dist/table/actions/actionsMenu.js +2 -2
  259. package/dist/table/children/useTableChildren.d.ts +1 -1
  260. package/dist/table/children/useTableChildren.js +3 -3
  261. package/dist/table/detailPanel/detailPanel.js +1 -1
  262. package/dist/table/detailPanel/detailPanelHeader.js +2 -2
  263. package/dist/table/flexible/columnSettings.js +2 -2
  264. package/dist/table/flexible/columnsList.js +47 -117
  265. package/dist/table/flexible/columnsPopup.d.ts +1 -1
  266. package/dist/table/flexible/columnsPopup.js +1 -1
  267. package/dist/table/nested/useNestedRows.js +2 -2
  268. package/dist/table/selectable/selectableHeader.js +5 -4
  269. package/dist/table/selectable/useSelectableRows.d.ts +8 -0
  270. package/dist/table/selectable/useSelectableRows.js +16 -8
  271. package/dist/table/sortable/mobileSortControl.js +1 -1
  272. package/dist/table/sortable/sortableHeader.js +2 -2
  273. package/dist/table/table.js +3 -9
  274. package/dist/tabs/tabItem/tabItem.d.ts +2 -1
  275. package/dist/tabs/tabItem/tabItem.js +7 -2
  276. package/dist/tabs/tabs.d.ts +2 -1
  277. package/dist/tabs/tabs.js +71 -61
  278. package/dist/tabs/tabsTestHelper.js +2 -2
  279. package/dist/timePickerRaw/timePickerRaw.js +11 -9
  280. package/dist/timePickerRaw/types.d.ts +1 -0
  281. package/dist/toastRaw/toastRaw.js +1 -1
  282. package/dist/toggleButtonRaw/toggleButtonRaw.js +7 -4
  283. package/dist/tooltip/tooltip.js +13 -5
  284. package/dist/utils/formatDate.js +37 -37
  285. package/dist/utils/localization/flipAlignment.js +12 -1
  286. package/dist/utils/localization/languageContext.d.ts +1 -1
  287. package/dist/utils/localization/translations/cs.json +7 -5
  288. package/dist/utils/localization/translations/da-DK.json +7 -5
  289. package/dist/utils/localization/translations/de.json +7 -5
  290. package/dist/utils/localization/translations/en.json +12 -1
  291. package/dist/utils/localization/translations/es.json +7 -5
  292. package/dist/utils/localization/translations/fi-FI.json +7 -5
  293. package/dist/utils/localization/translations/fr-FR.json +7 -5
  294. package/dist/utils/localization/translations/fr.json +7 -5
  295. package/dist/utils/localization/translations/hu-HU.json +7 -5
  296. package/dist/utils/localization/translations/id.json +7 -5
  297. package/dist/utils/localization/translations/it.json +7 -5
  298. package/dist/utils/localization/translations/ja.json +7 -5
  299. package/dist/utils/localization/translations/ko-KR.json +7 -5
  300. package/dist/utils/localization/translations/ms.json +7 -5
  301. package/dist/utils/localization/translations/nb-NO.json +7 -5
  302. package/dist/utils/localization/translations/nl.json +7 -5
  303. package/dist/utils/localization/translations/pl.json +7 -5
  304. package/dist/utils/localization/translations/pt-BR.json +7 -5
  305. package/dist/utils/localization/translations/pt-PT.json +7 -5
  306. package/dist/utils/localization/translations/ro-RO.json +7 -5
  307. package/dist/utils/localization/translations/sk-SK.json +7 -5
  308. package/dist/utils/localization/translations/sv.json +7 -5
  309. package/dist/utils/localization/translations/th.json +7 -5
  310. package/dist/utils/localization/translations/tr.json +7 -5
  311. package/dist/utils/localization/translations/zh-Hans.json +7 -5
  312. package/dist/utils/localization/translations/zh-TW.json +7 -5
  313. package/dist/utils/localization/useDirectionalIcon.d.ts +3 -0
  314. package/dist/utils/localization/useDirectionalIcon.js +9 -0
  315. package/dist/utils/positioningUtils/alignments.d.ts +2 -2
  316. package/dist/utils/positioningUtils/alignments.js +2 -2
  317. package/dist/utils/positioningUtils/calculatePosition.d.ts +2 -1
  318. package/dist/utils/positioningUtils/calculatePosition.js +11 -11
  319. package/dist/utils/positioningUtils/normalizeLogicalAlignment.d.ts +4 -0
  320. package/dist/utils/positioningUtils/normalizeLogicalAlignment.js +36 -0
  321. package/esm/absolute/absolute.d.ts +21 -1
  322. package/esm/absolute/absolute.js +46 -6
  323. package/esm/advancedGroupsFilter/advancedGroupsFilter.js +3 -3
  324. package/esm/advancedGroupsFilter/advancedGroupsFilterForm.js +2 -2
  325. package/esm/advancedGroupsFilter/advancedGroupsFilterFormSection.js +7 -7
  326. package/esm/advancedGroupsFilter/advancedGroupsFilterSectionTooltip.js +1 -1
  327. package/esm/alert/banner.d.ts +3 -1
  328. package/esm/alertRaw/alertRaw.js +1 -1
  329. package/esm/banner/banner.d.ts +5 -2
  330. package/esm/banner/banner.js +13 -2
  331. package/esm/banner/bannerErrorSummary.d.ts +7 -0
  332. package/esm/banner/bannerErrorSummary.js +4 -0
  333. package/esm/banner/bannerMultipLine.js +1 -1
  334. package/esm/banner/bannerSingleLine.js +1 -1
  335. package/esm/banner/utils/buildSummaryErrorList.d.ts +1 -0
  336. package/esm/banner/utils/buildSummaryErrorList.js +12 -0
  337. package/esm/banner/utils/hasSummaryErrorChild.d.ts +1 -0
  338. package/esm/banner/utils/hasSummaryErrorChild.js +3 -0
  339. package/esm/banner/utils/isSummaryErrorBanner.d.ts +2 -0
  340. package/esm/banner/utils/isSummaryErrorBanner.js +2 -0
  341. package/esm/banner/utils/isSummaryErrorElement.d.ts +3 -0
  342. package/esm/banner/utils/isSummaryErrorElement.js +3 -0
  343. package/esm/banner/utils/useSummaryBannerProp.d.ts +6 -0
  344. package/esm/banner/utils/useSummaryBannerProp.js +25 -0
  345. package/esm/betaPill/betaPill.js +4 -4
  346. package/esm/bookmark/bookmark.js +2 -2
  347. package/esm/bulkEditControl/bulkEditControl.js +5 -5
  348. package/esm/calendar/calendar.js +37 -34
  349. package/esm/calendar/calendarUtils.js +6 -4
  350. package/esm/card/card.js +1 -1
  351. package/esm/card/components/title.js +4 -1
  352. package/esm/card/components/titleLink.js +5 -2
  353. package/esm/chart/accessibleChart/accessibleChartNarrative.js +13 -13
  354. package/esm/chart/accessibleChart/accessibleChartTable.js +5 -5
  355. package/esm/chart/barChart/getDefaultOptions.d.ts +2 -1
  356. package/esm/chart/barChart/getDefaultOptions.js +5 -2
  357. package/esm/chart/barChart.js +6 -4
  358. package/esm/chart/chart.js +1 -1
  359. package/esm/chart/chartAxis/chartAxis.js +2 -2
  360. package/esm/chart/lineChart/getDefaultOptions.d.ts +4 -1
  361. package/esm/chart/lineChart/getDefaultOptions.js +7 -2
  362. package/esm/chart/lineChart.js +7 -3
  363. package/esm/chart/plugins/linePlugin/linePlugin.js +5 -4
  364. package/esm/chart/utils/getXAxisMeta.js +8 -5
  365. package/esm/chart/utils/isDateRange.js +1 -1
  366. package/esm/chart/utils/useHidden.d.ts +1 -0
  367. package/esm/chart/utils/useHidden.js +1 -1
  368. package/esm/chart/utils/useLastVisibleXAxisMeta.d.ts +2 -0
  369. package/esm/chart/utils/useLastVisibleXAxisMeta.js +11 -0
  370. package/esm/checkboxListWithAction/checkboxListWithAction.js +8 -5
  371. package/esm/chip/chip.js +1 -1
  372. package/esm/columnsSelector/columnsSelector.js +2 -2
  373. package/esm/columnsSelector/columnsTab/columnsTab.js +1 -1
  374. package/esm/columnsSelector/columnsTabGroup/columnsTabGroup.js +1 -1
  375. package/esm/commonHelpers/arrowNavigation/components/arrowButton/arrowButton.js +4 -1
  376. package/esm/controlledPopup/controlledPopup.d.ts +1 -0
  377. package/esm/controlledPopup/controlledPopup.js +3 -1
  378. package/esm/dataFeed/feedExpandControl/feedExpandControl.js +3 -0
  379. package/esm/dataGrid/cell/cell.d.ts +2 -1
  380. package/esm/dataGrid/cell/cell.js +2 -2
  381. package/esm/dataGrid/columns/checkboxColumn/checkboxHeaderCell.js +1 -1
  382. package/esm/dataGrid/dataGrid.js +8 -5
  383. package/esm/dataGrid/emptySearchList/emptySearchList.js +1 -1
  384. package/esm/dataGrid/entitiesListActions/actions/columnsListButton.js +1 -1
  385. package/esm/dataGrid/entitiesListActions/actions/fullscreenButton.js +2 -2
  386. package/esm/dataGrid/listColumn.d.ts +2 -0
  387. package/esm/dataGrid/row/row.d.ts +2 -1
  388. package/esm/dataGrid/row/row.js +13 -9
  389. package/esm/dataGrid/withFlexibleColumns/components/columnSettings.js +2 -2
  390. package/esm/dataGrid/withFlexibleColumns/components/columnSettingsList.d.ts +1 -1
  391. package/esm/dataGrid/withFlexibleColumns/components/columnSettingsList.js +44 -110
  392. package/esm/dataGrid/withFlexibleColumns/components/columnSettingsSidePanel.js +2 -0
  393. package/esm/dataGrid/withFlexibleColumns/withFlexibleColumns.js +1 -1
  394. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +4 -0
  395. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +5 -5
  396. package/esm/dataGrid/withSelectableRows/withSelectableRows.js +4 -3
  397. package/esm/dataGrid/withSortableColumns/columns/sortableColumnWrapper.js +2 -2
  398. package/esm/dateInputInner/dateInputInner.js +7 -7
  399. package/esm/dateInputInner/dateInputInnerControlBlock.js +2 -2
  400. package/esm/dateInputRaw/dateInputRaw.js +4 -4
  401. package/esm/dateInputRaw/utils/getLabel.js +2 -2
  402. package/esm/dateRangeInner/dateRangeInner.js +6 -3
  403. package/esm/dateRangeRaw/dateRangeRaw.d.ts +1 -0
  404. package/esm/dateRangeRaw/dateRangeRaw.js +21 -15
  405. package/esm/dateRangeRaw/types.d.ts +1 -0
  406. package/esm/dateRangeRaw/utils/dateRangeUtils.js +17 -17
  407. package/esm/dateRangeRaw/utils/parseLabel.js +1 -1
  408. package/esm/dateSelectionWrapper/dateSelectionWrapper.js +4 -4
  409. package/esm/dialog/dialogContent.js +1 -1
  410. package/esm/dropdown/dropdownTrigger.d.ts +1 -1
  411. package/esm/dropdownRaw/dropdownList.js +9 -9
  412. package/esm/dropdownRaw/dropdownPopup.js +3 -3
  413. package/esm/dropdownRaw/dropdownRaw.js +34 -17
  414. package/esm/dropdownRaw/dropdownSearchableTrigger.d.ts +2 -1
  415. package/esm/dropdownRaw/dropdownSearchableTrigger.js +8 -6
  416. package/esm/dropdownRaw/dropdownTrigger.d.ts +2 -1
  417. package/esm/dropdownRaw/dropdownTrigger.js +2 -2
  418. package/esm/dropdownRaw/types.d.ts +2 -0
  419. package/esm/favoriteButton/favoriteButton.js +1 -1
  420. package/esm/fileUpload/components/dropZoneContent.js +104 -104
  421. package/esm/fileUpload/components/templateDownloadSection.js +1 -1
  422. package/esm/fileUpload/components/uploadedFilesSection.js +2 -2
  423. package/esm/fileUpload/fileUpload.js +106 -106
  424. package/esm/filterButton/filterButton.d.ts +1 -0
  425. package/esm/filters/components/filtersContainer.js +2 -2
  426. package/esm/filters/components/filtersDropdown.d.ts +1 -1
  427. package/esm/filters/components/filtersEmptyState.js +2 -2
  428. package/esm/filters/components/filtersSaveModal.js +5 -5
  429. package/esm/filters/components/filtersSavedChipComponent.js +11 -11
  430. package/esm/filters/components/filtersSearchItemData.js +1 -1
  431. package/esm/filters/components/filtersSearchList.js +14 -11
  432. package/esm/filters/components/filtersSelect.js +1 -1
  433. package/esm/filters/components/filtersSelectListItem.js +2 -2
  434. package/esm/filters/components/filtersSidePanel.js +8 -8
  435. package/esm/filters/filters.js +7 -7
  436. package/esm/filtersBar/components/filtersBarGroupsFilter/filtersBarGroupsFilter.d.ts +1 -1
  437. package/esm/filtersBar/components/filtersBarPeriodPicker/filtersBarPeriodPicker.d.ts +1 -0
  438. package/esm/filtersBar/components/filtersBarPeriodPicker/getRangeOption.js +18 -18
  439. package/esm/filtersBar/components/resetComponentButton.js +1 -1
  440. package/esm/filtersBar/filtersBarActions/filtersBarActions.js +3 -3
  441. package/esm/filtersBar/filtersBarSidePanel/components/filtersBarSidePanelRange/filtersBarSidePanelRange.js +2 -2
  442. package/esm/filtersBar/filtersBarSidePanel/filtersBarSidePanel.js +5 -5
  443. package/esm/filtersBar/filtersContainer/filtersContainer.js +62 -61
  444. package/esm/formField/hooks/useError.js +3 -3
  445. package/esm/formField/hooks/useFormFieldProps.d.ts +1 -1
  446. package/esm/formField/hooks/useFormFieldProps.js +4 -2
  447. package/esm/formGroup/components/reviewListToggle/reviewListToggle.js +2 -2
  448. package/esm/formGroup/hooks/useCustomRow.js +46 -32
  449. package/esm/formGroup/hooks/useRowElements.js +9 -6
  450. package/esm/formGroup/hooks/useToggle.js +1 -1
  451. package/esm/formGroup/types.d.ts +4 -0
  452. package/esm/formGroup/utils/normalizeFieldId.d.ts +1 -0
  453. package/esm/formGroup/utils/normalizeFieldId.js +1 -0
  454. package/esm/formGroup/utils/resolveId.d.ts +7 -0
  455. package/esm/formGroup/utils/resolveId.js +2 -0
  456. package/esm/formLayout/components/getLayoutColumns.js +4 -2
  457. package/esm/formLayout/hooks/useError.js +3 -3
  458. package/esm/formLayout/hooks/useErrorSummary.d.ts +6 -0
  459. package/esm/formLayout/hooks/useErrorSummary.js +30 -0
  460. package/esm/formLayout/hooks/useFormButtons.js +3 -3
  461. package/esm/formLayout/utils/applyGridPropsStatic.js +1 -1
  462. package/esm/formLayout/utils/flattenErrors.d.ts +5 -0
  463. package/esm/formLayout/utils/flattenErrors.js +10 -0
  464. package/esm/formLayout/utils/getChildrenWithCustomColumns.js +3 -0
  465. package/esm/formLayout/utils/getFieldLabel.d.ts +1 -0
  466. package/esm/formLayout/utils/getFieldLabel.js +22 -0
  467. package/esm/formSection/hooks/useError.js +3 -3
  468. package/esm/formStepper/components/formStep.js +1 -1
  469. package/esm/formStepper/formStepper.js +2 -2
  470. package/esm/formStepperButtons/formStepperButtons.js +8 -5
  471. package/esm/gridLayout/hooks/useGridClasses.js +3 -9
  472. package/esm/groupButtonRaw/groupButtonRaw.js +2 -2
  473. package/esm/groupButtonRaw/types.d.ts +1 -0
  474. package/esm/groupsFilterRaw/groupsFilterAdjustmentState.js +8 -5
  475. package/esm/groupsFilterRaw/groupsFilterBox.js +3 -3
  476. package/esm/groupsFilterRaw/groupsFilterCommon.js +2 -2
  477. package/esm/groupsFilterRaw/groupsFilterCurrentlySelectedState.js +5 -5
  478. package/esm/groupsFilterRaw/groupsFilterHelper.js +2 -2
  479. package/esm/groupsFilterRaw/groupsFilterInitialState.js +12 -9
  480. package/esm/groupsFilterRaw/groupsFilterMenu.js +3 -3
  481. package/esm/groupsFilterRaw/groupsFilterRaw.d.ts +1 -0
  482. package/esm/groupsFilterRaw/groupsFilterRaw.js +15 -10
  483. package/esm/groupsFilterRaw/groupsFilterTrigger.d.ts +2 -1
  484. package/esm/groupsFilterRaw/groupsFilterTrigger.js +8 -5
  485. package/esm/groupsFilterRaw/groupsHelper.js +22 -22
  486. package/esm/groupsFilterRaw/types.d.ts +2 -0
  487. package/esm/header/components/collapsedItemsControl/collapsedItemsControl.js +1 -1
  488. package/esm/header/components/mobileFilterControl/mobileFilterControl.js +1 -1
  489. package/esm/header/components/mobileSearchControl/mobileSearchControl.js +3 -3
  490. package/esm/header/header.js +2 -2
  491. package/esm/header/headerBack.js +5 -2
  492. package/esm/header/headerHelpers.d.ts +1 -0
  493. package/esm/header/headerHelpers.js +8 -0
  494. package/esm/header/hooks/useNonFittingElements.js +1 -1
  495. package/esm/icons/iconAlignLeft.js +1 -3
  496. package/esm/icons/iconAlignmentLeft.js +1 -3
  497. package/esm/icons/iconAlignmentRight.js +1 -3
  498. package/esm/icons/iconArrowBottomLeft.js +1 -3
  499. package/esm/icons/iconArrowBottomRight.js +1 -3
  500. package/esm/icons/iconArrowLeftPath.js +1 -3
  501. package/esm/icons/iconArrowRight.js +1 -3
  502. package/esm/icons/iconArrowRightCircle.js +1 -3
  503. package/esm/icons/iconArrowRightPath.js +1 -3
  504. package/esm/icons/iconArrowTopLeft.js +1 -3
  505. package/esm/icons/iconArrowTopRight.js +1 -3
  506. package/esm/icons/iconChevronDoubleRight.js +1 -3
  507. package/esm/icons/iconChevronRight.js +1 -3
  508. package/esm/icons/iconChevronRightSmall.js +1 -3
  509. package/esm/icons/iconCornerDownLeft.js +1 -3
  510. package/esm/icons/iconCornerDownRight.js +1 -3
  511. package/esm/icons/iconCornerLeftDown.js +1 -3
  512. package/esm/icons/iconCornerLeftUp.js +1 -3
  513. package/esm/icons/iconCornerRightDown.js +1 -3
  514. package/esm/icons/iconCornerRightUp.js +1 -3
  515. package/esm/icons/iconCornerUpLeft.js +1 -3
  516. package/esm/icons/iconCornerUpRight.js +1 -3
  517. package/esm/index.d.ts +1 -0
  518. package/esm/index.js +1 -0
  519. package/esm/lineChartMini/lineChartMini.js +15 -3
  520. package/esm/list/itemData/itemDataInternal.js +6 -3
  521. package/esm/list/listItem/listItem.js +6 -3
  522. package/esm/menu/components/controlledMenuList/controlledMenuList.js +4 -1
  523. package/esm/menu/components/menuButton.d.ts +2 -1
  524. package/esm/menu/components/menuButton.js +7 -4
  525. package/esm/menu/components/menuErrorItem.js +2 -2
  526. package/esm/menu/components/menuItem.js +4 -4
  527. package/esm/menu/utils/useMenuItemCore.js +4 -3
  528. package/esm/miniTabs/miniTabs.d.ts +1 -0
  529. package/esm/miniTabs/miniTabs.js +1 -1
  530. package/esm/miniTabs/miniTabsHeaderItem.d.ts +2 -1
  531. package/esm/miniTabs/miniTabsHeaderItem.js +1 -1
  532. package/esm/miniTabs/miniTabsItem.d.ts +1 -0
  533. package/esm/mobileSheet/mobileSheet.js +2 -2
  534. package/esm/modal/modal.js +1 -1
  535. package/esm/nav/navFooter/navEditFooter/navEditFooter.js +2 -2
  536. package/esm/nav/navFooter/navFooter.js +1 -1
  537. package/esm/nav/navFooter/navFooterAction/navFooterAction.js +1 -1
  538. package/esm/nav/navHeader/navHeader.js +2 -2
  539. package/esm/nav/navHeader/navHeaderSearch/navHeaderSearch.js +2 -2
  540. package/esm/nav/navItem/navItem.js +4 -1
  541. package/esm/nav/navMobileBar/navMobileBar.js +1 -1
  542. package/esm/notification/notification.js +1 -1
  543. package/esm/pagination/paginationArrow.js +12 -5
  544. package/esm/pagination/paginationText/paginationText.js +1 -1
  545. package/esm/pill/components/pillNonActionable/pillNonActionable.js +1 -1
  546. package/esm/pillBox/components/pillBoxItem.js +1 -1
  547. package/esm/pillBox/pillBox.js +3 -3
  548. package/esm/pillExpandable/pillContent.js +12 -3
  549. package/esm/pillExpandable/pillExpandable.d.ts +4 -1
  550. package/esm/pillExpandable/pillExpandable.js +5 -3
  551. package/esm/pillExpandable/pillExpandableSimple.d.ts +1 -1
  552. package/esm/pillExpandable/pillExpandableSimple.js +4 -4
  553. package/esm/radioGroupRaw/radioGroupRaw.js +2 -1
  554. package/esm/rangeRaw/rangeRaw.js +7 -8
  555. package/esm/rangeRaw/utils/rangeHelper.js +7 -7
  556. package/esm/searchInputRaw/searchInputRaw.js +6 -3
  557. package/esm/selectList/selectList.js +2 -2
  558. package/esm/selectList/selectListItem.js +4 -1
  559. package/esm/skeleton/skeleton.js +1 -1
  560. package/esm/sortControl/sortControl.js +6 -7
  561. package/esm/stepperRaw/stepperRaw.js +3 -0
  562. package/esm/summary/summary.js +2 -2
  563. package/esm/summaryTile/summaryTile.d.ts +4 -2
  564. package/esm/summaryTile/summaryTile.js +59 -26
  565. package/esm/summaryTileBar/summaryTileBar.d.ts +4 -2
  566. package/esm/summaryTileBar/summaryTileBar.js +2 -2
  567. package/esm/table/actions/actionsMenu.js +2 -2
  568. package/esm/table/children/useTableChildren.d.ts +1 -1
  569. package/esm/table/children/useTableChildren.js +3 -3
  570. package/esm/table/detailPanel/detailPanel.js +1 -1
  571. package/esm/table/detailPanel/detailPanelHeader.js +2 -2
  572. package/esm/table/flexible/columnSettings.js +2 -2
  573. package/esm/table/flexible/columnsList.js +46 -111
  574. package/esm/table/flexible/columnsPopup.d.ts +1 -1
  575. package/esm/table/flexible/columnsPopup.js +1 -1
  576. package/esm/table/nested/useNestedRows.js +2 -2
  577. package/esm/table/selectable/selectableHeader.js +5 -4
  578. package/esm/table/selectable/useSelectableRows.d.ts +8 -0
  579. package/esm/table/selectable/useSelectableRows.js +16 -8
  580. package/esm/table/sortable/mobileSortControl.js +1 -1
  581. package/esm/table/sortable/sortableHeader.js +2 -2
  582. package/esm/table/table.js +3 -9
  583. package/esm/tabs/tabItem/tabItem.d.ts +2 -1
  584. package/esm/tabs/tabItem/tabItem.js +7 -2
  585. package/esm/tabs/tabs.d.ts +2 -1
  586. package/esm/tabs/tabs.js +71 -61
  587. package/esm/tabs/tabsTestHelper.js +2 -2
  588. package/esm/testHelpers/mockAbsoluteAlignment.d.ts +1 -0
  589. package/esm/testHelpers/mockAbsoluteAlignment.js +10 -0
  590. package/esm/timePickerRaw/timePickerRaw.js +11 -9
  591. package/esm/timePickerRaw/types.d.ts +1 -0
  592. package/esm/toastRaw/toastRaw.js +1 -1
  593. package/esm/toggleButtonRaw/toggleButtonRaw.js +7 -4
  594. package/esm/tooltip/tooltip.js +13 -5
  595. package/esm/utils/formatDate.js +37 -37
  596. package/esm/utils/localization/flipAlignment.js +12 -1
  597. package/esm/utils/localization/languageContext.d.ts +1 -1
  598. package/esm/utils/localization/translations/cs.json +7 -5
  599. package/esm/utils/localization/translations/da-DK.json +7 -5
  600. package/esm/utils/localization/translations/de.json +7 -5
  601. package/esm/utils/localization/translations/en.json +12 -1
  602. package/esm/utils/localization/translations/es.json +7 -5
  603. package/esm/utils/localization/translations/fi-FI.json +7 -5
  604. package/esm/utils/localization/translations/fr-FR.json +7 -5
  605. package/esm/utils/localization/translations/fr.json +7 -5
  606. package/esm/utils/localization/translations/hu-HU.json +7 -5
  607. package/esm/utils/localization/translations/id.json +7 -5
  608. package/esm/utils/localization/translations/it.json +7 -5
  609. package/esm/utils/localization/translations/ja.json +7 -5
  610. package/esm/utils/localization/translations/ko-KR.json +7 -5
  611. package/esm/utils/localization/translations/ms.json +7 -5
  612. package/esm/utils/localization/translations/nb-NO.json +7 -5
  613. package/esm/utils/localization/translations/nl.json +7 -5
  614. package/esm/utils/localization/translations/pl.json +7 -5
  615. package/esm/utils/localization/translations/pt-BR.json +7 -5
  616. package/esm/utils/localization/translations/pt-PT.json +7 -5
  617. package/esm/utils/localization/translations/ro-RO.json +7 -5
  618. package/esm/utils/localization/translations/sk-SK.json +7 -5
  619. package/esm/utils/localization/translations/sv.json +7 -5
  620. package/esm/utils/localization/translations/th.json +7 -5
  621. package/esm/utils/localization/translations/tr.json +7 -5
  622. package/esm/utils/localization/translations/zh-Hans.json +7 -5
  623. package/esm/utils/localization/translations/zh-TW.json +7 -5
  624. package/esm/utils/localization/useDirectionalIcon.d.ts +3 -0
  625. package/esm/utils/localization/useDirectionalIcon.js +5 -0
  626. package/esm/utils/positioningUtils/alignments.d.ts +2 -2
  627. package/esm/utils/positioningUtils/alignments.js +2 -2
  628. package/esm/utils/positioningUtils/calculatePosition.d.ts +2 -1
  629. package/esm/utils/positioningUtils/calculatePosition.js +11 -11
  630. package/esm/utils/positioningUtils/normalizeLogicalAlignment.d.ts +4 -0
  631. package/esm/utils/positioningUtils/normalizeLogicalAlignment.js +32 -0
  632. package/package.json +11 -12
  633. package/dist/utils/localization/translations/en-json.d.ts +0 -317
  634. package/dist/utils/localization/translations/en-json.js +0 -320
  635. package/esm/utils/localization/translations/en-json.d.ts +0 -317
  636. package/esm/utils/localization/translations/en-json.js +0 -317
package/README.md CHANGED
@@ -45,8 +45,78 @@ Now components are ready for usage.
45
45
 
46
46
  Zenith library provides components defined in Zenith Design System. It includes very basic blocks like colors, icons, font presets, atom components like buttons, checkboxes etc and high order components - header, table, filters bar etc. List of existing components can be found in [Storybook](https://developers.geotab.com/zenith-storybook/index.html).
47
47
 
48
+ Markdown reference for each component (used by AI tooling and IRIS) lives in [`documentation/components/`](./documentation/components/). These are kept in sync with the source via the [`/zenith-doc-sync`](https://git.geotab.com/ai-hub/skill-playground/skill-workflow-zenith-doc-sync) skill when component code changes.
49
+
50
+ ## Testing
51
+
52
+ ### Quarantining Jest Tests
53
+
54
+ Sisyphus can quarantine flaky Jest tests and auto-create follow-up tickets. To quarantine a test, the quarantine annotations **must be commented out** (Jest has no native trait attribute support) and placed inside the `describe` block, directly above the `test.skip` or `it.skip`.
55
+
56
+ In the case the `test` syntax is used:
57
+
58
+ ```typescript
59
+ describe("fooTestParent", () => {
60
+ // [Trait("QuarantinedReason", "Failed in main")] // This trait must be exactly the same, reason must be non-empty (or use a different reason)
61
+ // [Trait("QuarantinedTestTicketLink", "")] // This trait must be exactly the same (or a ticket can be added)
62
+ test.skip("fooTest", async () => {
63
+ // Insert test code
64
+ });
65
+ });
66
+ ```
67
+
68
+ Or, in case the `it` syntax is used instead:
69
+
70
+ ```typescript
71
+ describe("fooTestParent", () => {
72
+ // [Trait("QuarantinedReason", "Failed in main")] // This trait must be exactly the same, reason must be non-empty (or use a different reason)
73
+ // [Trait("QuarantinedTestTicketLink", "")] // This trait must be exactly the same (or a ticket can be added)
74
+ it.skip("fooTest", async () => {
75
+ // Insert test code
76
+ });
77
+ });
78
+ ```
79
+
80
+ Or, for parameterized tests (`test.each` / `it.each`):
81
+
82
+ ```typescript
83
+ describe("fooTestParent", () => {
84
+ // [Trait("QuarantinedReason", "Failed in main")] // This trait must be exactly the same, reason must be non-empty (or use a different reason)
85
+ // [Trait("QuarantinedTestTicketLink", "")] // This trait must be exactly the same (or a ticket can be added)
86
+ test.skip.each([...])("fooTest %s", async (param) => {
87
+ // Insert test code
88
+ });
89
+ });
90
+ ```
91
+
92
+ NOTE: `.skip` goes between `test`/`it` and `.each` — use `test.skip.each(...)`, not `test.each.skip(...)`.
93
+
94
+ NOTE: this will not work in the case of adding quarantine annotations to a `describe` block.
95
+
48
96
  ## Change log
49
97
 
98
+ ### 3.12.0
99
+
100
+ - Add `ErrorSummaryBanner` component for aggregating form validation errors
101
+ - Add accessible disabled state to `Tab` and `TabItem`
102
+ - Replace CSS RTL icon flip with directional counterpart icons for correct RTL rendering
103
+ - Add `data-analytics-id` prop to `ExpandablePill`, `MiniTabs`, `FiltersBar`, and `Menu` components
104
+ - Add `aria-` and property forwarding to `SummaryTile` and sub-components
105
+ - Add missing translation keys and fix missing FileUploader drop zone translations
106
+ - Convert all remaining components to rem units
107
+ - Add logical alignment direction values to `TAlignment` for RTL-aware positioning
108
+ - Rename public typography CSS classes to zen- prefix
109
+ - Fix duplicated `id` attribute in `Header` menu
110
+ - Fix `Header` menu: restore focus to trigger after selection
111
+ - Fix `Toggle` screen reader announcements on keyboard navigation and hover
112
+ - Fix dialog content scroll
113
+ - Fix mobile view table content double-line
114
+ - Fix calendar range showing incorrect edge
115
+ - Fix prop in nested row
116
+ - Fix LineChart legend date handling and x-axis range
117
+ - Fix `DataGrid` `minWidth` and `maxWidth` not enforced during column resize
118
+ - Fix `DataGrid` column selector: double scrollbar, screen reader announcements, and VoiceOver double-announcement
119
+
50
120
  ### 3.11.1
51
121
 
52
122
  - Fix `SummaryTile` accessibility: add `tooltipAriaLabel` prop for accessible tooltip name
@@ -2,7 +2,27 @@ import { RefObject } from "react";
2
2
  import "./absolute.less";
3
3
  import { IZenComponentProps } from "../commonHelpers/zenComponent";
4
4
  import { IAlignment } from "../utils/positioningUtils/alignments";
5
- export type TAlignment = "top" | "top-left" | "top-right" | "left" | "left-top" | "left-bottom" | "right" | "right-top" | "right-bottom" | "bottom" | "bottom-left" | "bottom-right";
5
+ export type TAlignment = "top" | "top-start" | "top-end" | "start" | "start-top" | "start-bottom" | "end" | "end-top" | "end-bottom" | "bottom" | "bottom-start" | "bottom-end"
6
+ /** @deprecated Use "top-start" for RTL-aware positioning. */
7
+ | "top-left"
8
+ /** @deprecated Use "top-end" for RTL-aware positioning. */
9
+ | "top-right"
10
+ /** @deprecated Use "start" for RTL-aware positioning. */
11
+ | "left"
12
+ /** @deprecated Use "start-top" for RTL-aware positioning. */
13
+ | "left-top"
14
+ /** @deprecated Use "start-bottom" for RTL-aware positioning. */
15
+ | "left-bottom"
16
+ /** @deprecated Use "end" for RTL-aware positioning. */
17
+ | "right"
18
+ /** @deprecated Use "end-top" for RTL-aware positioning. */
19
+ | "right-top"
20
+ /** @deprecated Use "end-bottom" for RTL-aware positioning. */
21
+ | "right-bottom"
22
+ /** @deprecated Use "bottom-start" for RTL-aware positioning. */
23
+ | "bottom-left"
24
+ /** @deprecated Use "bottom-end" for RTL-aware positioning. */
25
+ | "bottom-right";
6
26
  export type TTrapFocus = "on" | "off" | "withTrigger" | "none";
7
27
  export interface IAbsolute extends IZenComponentProps {
8
28
  triggerRef: RefObject<HTMLElement | null>;
@@ -19,11 +19,19 @@ const useScroll_1 = require("../commonHelpers/hooks/useScroll");
19
19
  const getScrollableParent_1 = require("../utils/getScrollableParent");
20
20
  const useClientReady_1 = require("../commonHelpers/hooks/useClientReady");
21
21
  const zen_1 = require("../utils/zen");
22
+ const useDirection_1 = require("../utils/localization/useDirection");
22
23
  const Absolute = ({ isOpen, id, paddingX, paddingY, className, children, triggerRef, alignment, inline, onOpenChange, useTrapFocusWithTrigger = "off", shouldHoldScroll, stateFullChilds, role, ariaLabel, ariaLabelledby, alignmentsFn, recalculateOnScroll, closeOnScroll, recalculateTrigger = true, focusOnOpen = true }) => {
23
24
  const popupRef = (0, react_1.useRef)(null);
24
25
  const prevScroll = (0, react_1.useRef)(0);
26
+ // True when the popup is closed by an external gesture (click-outside, scroll-close)
27
+ // where focus intentionally moves away from the popup — prevents focus returning to trigger.
28
+ const closedByExternalRef = (0, react_1.useRef)(false);
29
+ // Tracks whether the popup has ever been open, so the close effect is skipped on initial mount
30
+ // (prevents returnFocusToTrigger from firing when isOpen starts as false).
31
+ const hadBeenOpenRef = (0, react_1.useRef)(false);
25
32
  const { dark } = (0, react_1.useContext)(themeContext_1.themeContext);
26
33
  const isClientReady = (0, useClientReady_1.useClientReady)();
34
+ const direction = (0, useDirection_1.useDirection)();
27
35
  const onScrollHandler = e => {
28
36
  var _a;
29
37
  prevScroll.current = (_a = e.target) === null || _a === void 0 ? void 0 : _a.scrollTop;
@@ -52,16 +60,16 @@ const Absolute = ({ isOpen, id, paddingX, paddingY, className, children, trigger
52
60
  }
53
61
  return (0, getScrollableParent_1.getScrollableParent)(triggerRef.current);
54
62
  }, [triggerRef, isOpen, recalculateOnScroll, closeOnScroll]);
55
- const calculatePosition = (0, react_1.useCallback)(() => (0, calculatePosition_1.calculatePosition)(triggerRef, popupRef, paddingX, paddingY, inline, alignment, alignmentsFn, parent ? parent : undefined), [triggerRef, paddingX, paddingY, inline, alignment, alignmentsFn, popupRef, parent]);
63
+ const calculatePosition = (0, react_1.useCallback)(() => (0, calculatePosition_1.calculatePosition)(triggerRef, popupRef, paddingX, paddingY, inline, alignment, alignmentsFn, parent ? parent : undefined, undefined, direction), [triggerRef, paddingX, paddingY, inline, alignment, alignmentsFn, popupRef, parent, direction]);
56
64
  const handleCloseOnScroll = (0, react_1.useCallback)(() => {
65
+ closedByExternalRef.current = true;
57
66
  onOpenChange(false);
58
67
  }, [onOpenChange]);
59
68
  (0, useResize_1.useResize)(calculatePosition, isOpen);
60
69
  (0, useScroll_1.useScroll)(calculatePosition, isOpen && !!recalculateOnScroll, parent);
61
70
  (0, useScroll_1.useScroll)(handleCloseOnScroll, isOpen && !!closeOnScroll, parent);
62
71
  (0, react_1.useLayoutEffect)(calculatePosition, [isOpen, children, recalculateTrigger, calculatePosition]);
63
- function handleEscape() {
64
- onOpenChange(false);
72
+ const returnFocusToTrigger = (0, react_1.useCallback)(() => {
65
73
  if (!triggerRef.current) {
66
74
  return;
67
75
  }
@@ -69,9 +77,40 @@ const Absolute = ({ isOpen, id, paddingX, paddingY, className, children, trigger
69
77
  triggerRef.current.focus();
70
78
  return;
71
79
  }
72
- const focusable = [...Array.from(triggerRef.current.querySelectorAll(focusableSelector_1.FOCUSABLE_SELECTOR))];
73
- (focusable[0] || triggerRef.current).focus();
74
- }
80
+ const focusable = Array.from(triggerRef.current.querySelectorAll(focusableSelector_1.FOCUSABLE_SELECTOR));
81
+ const target = focusable.find(el => (0, dialogHelpers_1.isFocusable)(el)) || triggerRef.current;
82
+ if (!(0, dialogHelpers_1.isFocusable)(target)) {
83
+ if (process.env.NODE_ENV !== "production") {
84
+ console.warn("[Absolute] returnFocusToTrigger: trigger has no focusable element. Keyboard focus position may be lost.");
85
+ }
86
+ return;
87
+ }
88
+ target.focus();
89
+ }, [triggerRef]);
90
+ const handleEscape = (0, react_1.useCallback)(() => {
91
+ onOpenChange(false);
92
+ }, [onOpenChange]);
93
+ // Return focus to the trigger when the popup closes due to item selection (isOpen: true → false)
94
+ // but not when closed by an external gesture (click-outside) where focus intentionally moved away,
95
+ // and not on initial mount when the popup starts closed.
96
+ (0, react_1.useEffect)(() => {
97
+ var _a, _b;
98
+ if (isOpen) {
99
+ hadBeenOpenRef.current = true;
100
+ closedByExternalRef.current = false;
101
+ return;
102
+ }
103
+ if (!hadBeenOpenRef.current || closedByExternalRef.current) {
104
+ return;
105
+ }
106
+ // Only return focus if it is still inside the popup (or lost to body after unmount).
107
+ // Prevents stealing focus when focus is intentionally elsewhere and popup closes externally.
108
+ const activeEl = (_a = zen_1.zen.document) === null || _a === void 0 ? void 0 : _a.activeElement;
109
+ const focusIsInsideOrLost = !activeEl || activeEl === ((_b = zen_1.zen.document) === null || _b === void 0 ? void 0 : _b.body) || (popupRef.current && popupRef.current.contains(activeEl));
110
+ if (focusIsInsideOrLost) {
111
+ returnFocusToTrigger();
112
+ }
113
+ }, [isOpen, returnFocusToTrigger]);
75
114
  const condition = (0, react_1.useCallback)(() => (useTrapFocusWithTrigger === "off" ? false : true), [useTrapFocusWithTrigger]);
76
115
  (0, useTrapFocus_1.useTrapFocus)(popupRef, useTrapFocusWithTrigger === "withTrigger" ? triggerRef : undefined, isOpen, condition);
77
116
  (0, useEscape_1.useEscape)(popupRef, handleEscape, isOpen);
@@ -92,6 +131,7 @@ const Absolute = ({ isOpen, id, paddingX, paddingY, className, children, trigger
92
131
  if (isClickInPopup || isClickOnTrigger || stateFullChilds) {
93
132
  return;
94
133
  }
134
+ closedByExternalRef.current = true;
95
135
  onOpenChange(false);
96
136
  };
97
137
  if (isOpen) {
@@ -35,7 +35,7 @@ injectString("tr", "Advanced groups filter", "Geli\u015Fmi\u015F grup filtresi")
35
35
  injectString("zh-Hans", "Advanced groups filter", "\u9AD8\u7EA7\u7EC4\u7B5B\u9009\u5668");
36
36
  injectString("zh-TW", "Advanced groups filter", "\u9032\u968E\u7FA4\u7D44\u7BE9\u9078");
37
37
  injectString("ro-RO", "Advanced groups filter", "Filtru de grupuri avansat");
38
- injectString("ar-SA", "Advanced groups filter", "\u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0645\u062A\u0642\u062F\u0645\u0629");
38
+ injectString("ar", "Advanced groups filter", "\u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0645\u062A\u0642\u062F\u0645\u0629");
39
39
  injectString("cs", "Cancel", "Zru\u0161it");
40
40
  injectString("da-DK", "Cancel", "Annuller");
41
41
  injectString("de", "Cancel", "Abbrechen");
@@ -62,7 +62,7 @@ injectString("tr", "Cancel", "\u0130ptal");
62
62
  injectString("zh-Hans", "Cancel", "\u53D6\u6D88");
63
63
  injectString("zh-TW", "Cancel", "\u53D6\u6D88");
64
64
  injectString("ro-RO", "Cancel", "Anula\u021Bi");
65
- injectString("ar-SA", "Cancel", "\u0625\u0644\u063A\u0627\u0621");
65
+ injectString("ar", "Cancel", "\u0625\u0644\u063A\u0627\u0621");
66
66
  injectString("cs", "Apply", "Pou\u017E\xEDt");
67
67
  injectString("da-DK", "Apply", "Anvend");
68
68
  injectString("de", "Apply", "Anwenden");
@@ -89,7 +89,7 @@ injectString("tr", "Apply", "Uygula");
89
89
  injectString("zh-Hans", "Apply", "\u5E94\u7528");
90
90
  injectString("zh-TW", "Apply", "\u5957\u7528");
91
91
  injectString("ro-RO", "Apply", "Aplica\u021Bi");
92
- injectString("ar-SA", "Apply", "\u062A\u0637\u0628\u064A\u0642");
92
+ injectString("ar", "Apply", "\u062A\u0637\u0628\u064A\u0642");
93
93
  const advancedGroupsFilterFormHelper_1 = require("./advancedGroupsFilterFormHelper");
94
94
  const advancedGroupsFilterForm_1 = require("./advancedGroupsFilterForm");
95
95
  const classNames_1 = require("../commonHelpers/classNames/classNames");
@@ -34,7 +34,7 @@ injectString("tr", "Create conditions below to filter the entire system.", "T\xF
34
34
  injectString("zh-Hans", "Create conditions below to filter the entire system.", "\u5728\u4E0B\u9762\u521B\u5EFA\u6761\u4EF6\u4EE5\u7B5B\u9009\u6574\u4E2A\u7CFB\u7EDF\u3002");
35
35
  injectString("zh-TW", "Create conditions below to filter the entire system.", "\u5728\u4E0B\u65B9\u5EFA\u7ACB\u689D\u4EF6\u4EE5\u7BE9\u9078\u6574\u500B\u7CFB\u7D71\u3002");
36
36
  injectString("ro-RO", "Create conditions below to filter the entire system.", "Crea\u021Bi condi\u021Biile de mai jos pentru a filtra \xEEntregul sistem.");
37
- injectString("ar-SA", "Create conditions below to filter the entire system.", "\u0623\u0646\u0634\u0626 \u0634\u0631\u0648\u0637\u064B\u0627 \u0623\u062F\u0646\u0627\u0647 \u0644\u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u0646\u0638\u0627\u0645 \u0628\u0623\u0643\u0645\u0644\u0647.");
37
+ injectString("ar", "Create conditions below to filter the entire system.", "\u0623\u0646\u0634\u0626 \u0634\u0631\u0648\u0637\u064B\u0627 \u0623\u062F\u0646\u0627\u0647 \u0644\u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u0646\u0638\u0627\u0645 \u0628\u0623\u0643\u0645\u0644\u0647.");
38
38
  injectString("cs", "Add new condition", "P\u0159idat novou podm\xEDnku");
39
39
  injectString("da-DK", "Add new condition", "Tilf\xF8j ny betingelse");
40
40
  injectString("de", "Add new condition", "Neue Bedingung hinzuf\xFCgen");
@@ -61,7 +61,7 @@ injectString("tr", "Add new condition", "Yeni ko\u015Ful ekle");
61
61
  injectString("zh-Hans", "Add new condition", "\u6DFB\u52A0\u65B0\u6761\u4EF6");
62
62
  injectString("zh-TW", "Add new condition", "\u65B0\u589E\u689D\u4EF6");
63
63
  injectString("ro-RO", "Add new condition", "Ad\u0103uga\u021Bi o condi\u021Bie nou\u0103");
64
- injectString("ar-SA", "Add new condition", "\u0625\u0636\u0627\u0641\u0629 \u0634\u0631\u0637 \u062C\u062F\u064A\u062F");
64
+ injectString("ar", "Add new condition", "\u0625\u0636\u0627\u0641\u0629 \u0634\u0631\u0637 \u062C\u062F\u064A\u062F");
65
65
  const textIconButton_1 = require("../textIconButton/textIconButton");
66
66
  const advancedGroupsFilterFormSection_1 = require("./advancedGroupsFilterFormSection");
67
67
  const groupsHelper_1 = require("../groupsFilterRaw/groupsHelper");
@@ -65,7 +65,7 @@ injectString("tr", "And", "Ve");
65
65
  injectString("zh-Hans", "And", "\u548C");
66
66
  injectString("zh-TW", "And", "\u548C");
67
67
  injectString("ro-RO", "And", "\u0218i");
68
- injectString("ar-SA", "And", "\u0648");
68
+ injectString("ar", "And", "\u0648");
69
69
  injectString("cs", "Or", "Nebo");
70
70
  injectString("da-DK", "Or", "Eller");
71
71
  injectString("de", "Or", "Oder");
@@ -92,7 +92,7 @@ injectString("tr", "Or", "Veya");
92
92
  injectString("zh-Hans", "Or", "\u6216");
93
93
  injectString("zh-TW", "Or", "\u6216");
94
94
  injectString("ro-RO", "Or", "Sau");
95
- injectString("ar-SA", "Or", "\u0623\u0648");
95
+ injectString("ar", "Or", "\u0623\u0648");
96
96
  injectString("cs", "Operator", "Oper\xE1tor");
97
97
  injectString("da-DK", "Operator", "Operat\xF8r");
98
98
  injectString("de", "Operator", "Operator");
@@ -119,7 +119,7 @@ injectString("tr", "Operator", "Operat\xF6r");
119
119
  injectString("zh-Hans", "Operator", "\u64CD\u4F5C\u5458");
120
120
  injectString("zh-TW", "Operator", "\u904B\u7B97\u5B50");
121
121
  injectString("ro-RO", "Operator", "Operator");
122
- injectString("ar-SA", "Operator", "\u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0634\u063A\u064A\u0644");
122
+ injectString("ar", "Operator", "\u0639\u0627\u0645\u0644 \u0627\u0644\u062A\u0634\u063A\u064A\u0644");
123
123
  injectString("cs", "Groups", "Skupiny");
124
124
  injectString("da-DK", "Groups", "Grupper");
125
125
  injectString("de", "Groups", "Gruppen");
@@ -146,7 +146,7 @@ injectString("tr", "Groups", "Gruplar");
146
146
  injectString("zh-Hans", "Groups", "\u7EC4");
147
147
  injectString("zh-TW", "Groups", "\u7FA4\u7D44");
148
148
  injectString("ro-RO", "Groups", "Grupuri");
149
- injectString("ar-SA", "Groups", "\u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A");
149
+ injectString("ar", "Groups", "\u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A");
150
150
  injectString("cs", "Remove condition", "Odebrat podm\xEDnku");
151
151
  injectString("da-DK", "Remove condition", "Fjern betingelse");
152
152
  injectString("de", "Remove condition", "Bedingung entfernen");
@@ -173,7 +173,7 @@ injectString("tr", "Remove condition", "Ko\u015Fulu kald\u0131r");
173
173
  injectString("zh-Hans", "Remove condition", "\u5220\u9664\u6761\u4EF6");
174
174
  injectString("zh-TW", "Remove condition", "\u79FB\u9664\u689D\u4EF6");
175
175
  injectString("ro-RO", "Remove condition", "Elimina\u021Bi condi\u021Bia");
176
- injectString("ar-SA", "Remove condition", "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0634\u0631\u0637");
176
+ injectString("ar", "Remove condition", "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0634\u0631\u0637");
177
177
  injectString("cs", "Select groups\u2026", "Vybrat skupiny\u2026");
178
178
  injectString("da-DK", "Select groups\u2026", "V\xE6lg grupper...");
179
179
  injectString("de", "Select groups\u2026", "Gruppen ausw\xE4hlen\xA0\u2026");
@@ -200,7 +200,7 @@ injectString("tr", "Select groups\u2026", "Gruplar\u0131 se\xE7\u2026");
200
200
  injectString("zh-Hans", "Select groups\u2026", "\u9009\u62E9\u7EC4\u2026");
201
201
  injectString("zh-TW", "Select groups\u2026", "\u9078\u53D6\u7FA4\u7D44...");
202
202
  injectString("ro-RO", "Select groups\u2026", "Selecta\u021Bi grupurile\u2026");
203
- injectString("ar-SA", "Select groups\u2026", "\u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A\u2026");
203
+ injectString("ar", "Select groups\u2026", "\u0627\u062E\u062A\u064A\u0627\u0631 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A\u2026");
204
204
  injectString("cs", "GroupCompanyId", "Skupina spole\u010Dnosti");
205
205
  injectString("da-DK", "GroupCompanyId", "Virksomhedsgruppe");
206
206
  injectString("de", "GroupCompanyId", "Unternehmensgruppe");
@@ -227,7 +227,7 @@ injectString("tr", "GroupCompanyId", "\u015Eirket grubu");
227
227
  injectString("zh-Hans", "GroupCompanyId", "\u516C\u53F8\u7EC4");
228
228
  injectString("zh-TW", "GroupCompanyId", "\u516C\u53F8\u7FA4\u7D44");
229
229
  injectString("ro-RO", "GroupCompanyId", "Grup de companii");
230
- injectString("ar-SA", "GroupCompanyId", "\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0634\u0631\u0643\u0629");
230
+ injectString("ar", "GroupCompanyId", "\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0634\u0631\u0643\u0629");
231
231
  const react_1 = __importStar(require("react"));
232
232
  const groupButton_1 = require("../groupButton/groupButton");
233
233
  const groupsFilterInterfaces_1 = require("../groupsFilterRaw/groupsFilterInterfaces");
@@ -35,7 +35,7 @@ injectString("tr", "Use multiple operators when searching for a specific group.
35
35
  injectString("zh-Hans", "Use multiple operators when searching for a specific group. For example, filtering for assets that belong to the Tractor group and the Toronto group displays a list of tractors that belong to the Toronto branch.", "\u641C\u7D22\u7279\u5B9A\u7EC4\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528\u591A\u4E2A\u8FD0\u7B97\u7B26\u3002\u4F8B\u5982\uFF0C\u7B5B\u9009\u5C5E\u4E8E\u201C\u7275\u5F15\u8F66\u201D\u7EC4\u548C\u201C\u591A\u4F26\u591A\u201D\u7EC4\u7684\u8D44\u4EA7\uFF0C\u5C31\u4F1A\u663E\u793A\u5C5E\u4E8E\u591A\u4F26\u591A\u5206\u652F\u7684\u7275\u5F15\u8F66\u5217\u8868\u3002");
36
36
  injectString("zh-TW", "Use multiple operators when searching for a specific group. For example, filtering for assets that belong to the Tractor group and the Toronto group displays a list of tractors that belong to the Toronto branch.", "\u641C\u5C0B\u7279\u5B9A\u7FA4\u7D44\u6642\uFF0C\u8ACB\u4F7F\u7528\u591A\u500B\u904B\u7B97\u5B50\u3002\u4F8B\u5982\uFF0C\u82E5\u7BE9\u9078\u5C6C\u65BC\u727D\u5F15\u6A5F\u7FA4\u7D44\u548C\u591A\u502B\u591A\u7FA4\u7D44\u7684\u8CC7\u7522\uFF0C\u5247\u6703\u986F\u793A\u5C6C\u65BC\u591A\u502B\u591A\u5206\u516C\u53F8\u7684\u727D\u5F15\u6A5F\u6E05\u55AE\u3002");
37
37
  injectString("ro-RO", "Use multiple operators when searching for a specific group. For example, filtering for assets that belong to the Tractor group and the Toronto group displays a list of tractors that belong to the Toronto branch.", "Utiliza\u021Bi mai mul\u021Bi operatori c\xE2nd c\u0103uta\u021Bi un anumit grup. De exemplu, prin filtrarea activelor care apar\u021Bin grupului Tractor \u0219i grupului Toronto, se afi\u0219eaz\u0103 o list\u0103 de tractoare care apar\u021Bin filialei Toronto.");
38
- injectString("ar-SA", "Use multiple operators when searching for a specific group. For example, filtering for assets that belong to the Tractor group and the Toronto group displays a list of tractors that belong to the Toronto branch.", "\u0627\u0633\u062A\u062E\u062F\u0645 \u0639\u0648\u0627\u0645\u0644 \u062A\u0634\u063A\u064A\u0644 \u0645\u062A\u0639\u062F\u062F\u0629 \u0639\u0646\u062F \u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0639\u064A\u0646\u0629. \u0639\u0644\u0649 \u0633\u0628\u064A\u0644 \u0627\u0644\u0645\u062B\u0627\u0644\u060C \u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u0623\u0635\u0648\u0644 \u0627\u0644\u062A\u064A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062C\u0631\u0627\u0631\u0627\u062A \u0648\u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u0648\u0631\u0646\u062A\u0648 \u062A\u0639\u0631\u0636 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062C\u0631\u0627\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0641\u0631\u0639 \u062A\u0648\u0631\u0646\u062A\u0648.");
38
+ injectString("ar", "Use multiple operators when searching for a specific group. For example, filtering for assets that belong to the Tractor group and the Toronto group displays a list of tractors that belong to the Toronto branch.", "\u0627\u0633\u062A\u062E\u062F\u0645 \u0639\u0648\u0627\u0645\u0644 \u062A\u0634\u063A\u064A\u0644 \u0645\u062A\u0639\u062F\u062F\u0629 \u0639\u0646\u062F \u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0639\u064A\u0646\u0629. \u0639\u0644\u0649 \u0633\u0628\u064A\u0644 \u0627\u0644\u0645\u062B\u0627\u0644\u060C \u062A\u0635\u0641\u064A\u0629 \u0627\u0644\u0623\u0635\u0648\u0644 \u0627\u0644\u062A\u064A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062C\u0631\u0627\u0631\u0627\u062A \u0648\u0645\u062C\u0645\u0648\u0639\u0629 \u062A\u0648\u0631\u0646\u062A\u0648 \u062A\u0639\u0631\u0636 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062C\u0631\u0627\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0641\u0631\u0639 \u062A\u0648\u0631\u0646\u062A\u0648.");
39
39
  const useLanguage_1 = require("../utils/localization/useLanguage");
40
40
  const classNames_1 = require("../commonHelpers/classNames/classNames");
41
41
  const AdvancedGroupsFilterSectionTooltip = ({
@@ -1,2 +1,4 @@
1
1
  /// <reference types="react" />
2
- export declare const Banner: import("react").FC<import("../banner/banner").IBanner>;
2
+ export declare const Banner: import("react").FC<import("../banner/banner").IBanner> & {
3
+ ErrorSummary: import("react").FC<import("../banner/bannerErrorSummary").IBannerErrorSummary>;
4
+ };
@@ -40,7 +40,7 @@ injectString("tr", "Close", "Kapat");
40
40
  injectString("zh-Hans", "Close", "\u5173\u95ED");
41
41
  injectString("zh-TW", "Close", "\u95DC\u9589");
42
42
  injectString("ro-RO", "Close", "\xCEnchide");
43
- injectString("ar-SA", "Close", "\u0625\u063A\u0644\u0627\u0642");
43
+ injectString("ar", "Close", "\u0625\u063A\u0644\u0627\u0642");
44
44
  const alertAnimation_1 = __importDefault(require("./components/alertAnimation"));
45
45
  const classNames_1 = require("../commonHelpers/classNames/classNames");
46
46
  const buttonType_1 = require("../button/buttonType");
@@ -1,7 +1,8 @@
1
1
  import "./banner.less";
2
+ import { FC } from "react";
2
3
  import { TBannerSize } from "./bannerUtils";
3
4
  import { IZenIdComponentProps } from "../commonHelpers/zenComponent";
4
- import { FC } from "react";
5
+ import { BannerErrorSummary } from "./bannerErrorSummary";
5
6
  export declare const BannerDisplayName = "Banner";
6
7
  export interface IBannerAction {
7
8
  link?: string;
@@ -24,4 +25,6 @@ export interface IBanner extends Partial<IZenIdComponentProps> {
24
25
  ariaAtomic?: "true" | "false";
25
26
  ariaLive?: "off" | "assertive" | "polite";
26
27
  }
27
- export declare const Banner: FC<IBanner>;
28
+ export declare const Banner: FC<IBanner> & {
29
+ ErrorSummary: typeof BannerErrorSummary;
30
+ };
@@ -5,10 +5,20 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const bannerSingleLine_1 = require("./bannerSingleLine");
6
6
  const bannerMultipLine_1 = require("./bannerMultipLine");
7
7
  const useMobile_1 = require("../commonHelpers/hooks/useMobile");
8
+ const bannerErrorSummary_1 = require("./bannerErrorSummary");
9
+ const hasSummaryErrorChild_1 = require("./utils/hasSummaryErrorChild");
10
+ const useSummaryBannerProp_1 = require("./utils/useSummaryBannerProp");
8
11
  exports.BannerDisplayName = "Banner";
9
- const Banner = ({ children, header, type = "warning", icon, action, size, onClose, multiline, role = "status", ariaAtomic = "true", ariaLive = "polite", primaryAction, className, id }) => {
12
+ // eslint-disable-next-line @typescript-eslint/naming-convention
13
+ const Banner = (props) => {
14
+ const { children, header, type, icon, action, size, onClose, multiline, role = "status", ariaAtomic = "true", ariaLive = "polite", primaryAction, className, id } = props;
10
15
  const isMobile = (0, useMobile_1.useMobile)();
11
- const isMultiline = multiline === undefined ? isMobile : multiline;
16
+ const forceSummaryError = (0, hasSummaryErrorChild_1.hasSummaryErrorChild)(children) && (type === "error" || type === undefined);
17
+ const isMultiline = forceSummaryError ? true : multiline === undefined ? isMobile : multiline;
18
+ const summaryErrorProps = (0, useSummaryBannerProp_1.useSummaryBannerProp)(props);
19
+ if (Object.keys(summaryErrorProps).length) {
20
+ return (0, jsx_runtime_1.jsx)(bannerMultipLine_1.BannerMultiline, Object.assign({}, summaryErrorProps));
21
+ }
12
22
  return isMultiline ? ((0, jsx_runtime_1.jsx)(bannerMultipLine_1.BannerMultiline, { children,
13
23
  header,
14
24
  type,
@@ -37,3 +47,4 @@ const Banner = ({ children, header, type = "warning", icon, action, size, onClos
37
47
  };
38
48
  exports.Banner = Banner;
39
49
  exports.Banner.displayName = exports.BannerDisplayName;
50
+ exports.Banner.ErrorSummary = bannerErrorSummary_1.BannerErrorSummary;
@@ -0,0 +1,7 @@
1
+ import { FC } from "react";
2
+ export declare const BannerErrorSummaryDisplayName = "Banner.ErrorSummary";
3
+ export interface IBannerErrorSummary {
4
+ value: string;
5
+ link: string;
6
+ }
7
+ export declare const BannerErrorSummary: FC<IBannerErrorSummary>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BannerErrorSummary = exports.BannerErrorSummaryDisplayName = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ exports.BannerErrorSummaryDisplayName = "Banner.ErrorSummary";
6
+ const BannerErrorSummary = ({ value, link }) => ((0, jsx_runtime_1.jsx)("a", { href: link, className: "zen-banner__summary-error-link zen-link", children: value }));
7
+ exports.BannerErrorSummary = BannerErrorSummary;
8
+ exports.BannerErrorSummary.displayName = exports.BannerErrorSummaryDisplayName;
@@ -40,7 +40,7 @@ injectString("tr", "Close", "Kapat");
40
40
  injectString("zh-Hans", "Close", "\u5173\u95ED");
41
41
  injectString("zh-TW", "Close", "\u95DC\u9589");
42
42
  injectString("ro-RO", "Close", "\xCEnchide");
43
- injectString("ar-SA", "Close", "\u0625\u063A\u0644\u0627\u0642");
43
+ injectString("ar", "Close", "\u0625\u063A\u0644\u0627\u0642");
44
44
  const bannerUtils_1 = require("./bannerUtils");
45
45
  const useLanguage_1 = require("../utils/localization/useLanguage");
46
46
  const typeIcon_1 = __importDefault(require("./typeIcon"));
@@ -40,7 +40,7 @@ injectString("tr", "Close", "Kapat");
40
40
  injectString("zh-Hans", "Close", "\u5173\u95ED");
41
41
  injectString("zh-TW", "Close", "\u95DC\u9589");
42
42
  injectString("ro-RO", "Close", "\xCEnchide");
43
- injectString("ar-SA", "Close", "\u0625\u063A\u0644\u0627\u0642");
43
+ injectString("ar", "Close", "\u0625\u063A\u0644\u0627\u0642");
44
44
  const button_1 = require("../button/button");
45
45
  const buttonType_1 = require("../button/buttonType");
46
46
  const typeIcon_1 = __importDefault(require("./typeIcon"));
@@ -0,0 +1 @@
1
+ export declare const buildSummaryErrorList: (children: React.ReactNode) => React.ReactNode;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSummaryErrorList = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const isSummaryErrorElement_1 = require("./isSummaryErrorElement");
7
+ const buildSummaryErrorList = (children) => {
8
+ const items = react_1.Children.toArray(children)
9
+ .filter(isSummaryErrorElement_1.isSummaryErrorElement)
10
+ .map(child => {
11
+ const { value, link } = child.props;
12
+ return link ? ((0, jsx_runtime_1.jsx)("a", { href: link, className: "zen-link zen-banner__summary-error-link", children: value }, `${value}-${link}`)) : ((0, jsx_runtime_1.jsx)("span", { className: "zen-banner__summary-error-link", children: value }, value));
13
+ });
14
+ return (0, jsx_runtime_1.jsx)("div", { className: "zen-banner__summary-error-list", children: items });
15
+ };
16
+ exports.buildSummaryErrorList = buildSummaryErrorList;
@@ -0,0 +1 @@
1
+ export declare const hasSummaryErrorChild: (children: React.ReactNode) => boolean;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasSummaryErrorChild = void 0;
4
+ const react_1 = require("react");
5
+ const isSummaryErrorElement_1 = require("./isSummaryErrorElement");
6
+ const hasSummaryErrorChild = (children) => react_1.Children.toArray(children).some(isSummaryErrorElement_1.isSummaryErrorElement);
7
+ exports.hasSummaryErrorChild = hasSummaryErrorChild;
@@ -0,0 +1,2 @@
1
+ import type { BannerType } from "../banner";
2
+ export declare const isSummaryErrorBanner: (type: BannerType | undefined, children: React.ReactNode) => boolean;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSummaryErrorBanner = void 0;
4
+ const hasSummaryErrorChild_1 = require("./hasSummaryErrorChild");
5
+ const isSummaryErrorBanner = (type, children) => (type === undefined || type === "error") && (0, hasSummaryErrorChild_1.hasSummaryErrorChild)(children);
6
+ exports.isSummaryErrorBanner = isSummaryErrorBanner;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { IBannerErrorSummary } from "../bannerErrorSummary";
3
+ export declare const isSummaryErrorElement: (child: React.ReactNode) => child is import("react").ReactElement<IBannerErrorSummary, string | import("react").JSXElementConstructor<any>>;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSummaryErrorElement = void 0;
4
+ const react_1 = require("react");
5
+ const bannerErrorSummary_1 = require("../bannerErrorSummary");
6
+ const isSummaryErrorElement = (child) => (0, react_1.isValidElement)(child) && child.type.displayName === bannerErrorSummary_1.BannerErrorSummaryDisplayName;
7
+ exports.isSummaryErrorElement = isSummaryErrorElement;
@@ -0,0 +1,6 @@
1
+ import type { IBanner, IBannerAction } from "../banner";
2
+ interface IBannerInner {
3
+ primaryAction?: IBannerAction;
4
+ }
5
+ export declare const useSummaryBannerProp: (props: IBanner & IBannerInner) => Partial<IBanner & IBannerInner>;
6
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ const {
4
+ injectString
5
+ } = require("../../utils/localization/translationsDictionary");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.useSummaryBannerProp = void 0;
10
+ const useLanguage_1 = require("../../utils/localization/useLanguage");
11
+ const hasSummaryErrorChild_1 = require("./hasSummaryErrorChild");
12
+ const buildSummaryErrorList_1 = require("./buildSummaryErrorList");
13
+ injectString("en", "Please correct the following errors.", "Please correct the following errors.");
14
+ const useSummaryBannerProp = props => {
15
+ const {
16
+ children,
17
+ type
18
+ } = props;
19
+ const {
20
+ translate
21
+ } = (0, useLanguage_1.useLanguage)();
22
+ const isSummaryBanner = (0, hasSummaryErrorChild_1.hasSummaryErrorChild)(children) && (type === "error" || type === undefined);
23
+ if (!isSummaryBanner) {
24
+ return {};
25
+ }
26
+ return Object.assign(Object.assign({}, props), {
27
+ type: "error",
28
+ header: translate("Please correct the following errors."),
29
+ onClose: undefined,
30
+ children: (0, buildSummaryErrorList_1.buildSummaryErrorList)(children),
31
+ action: undefined
32
+ });
33
+ };
34
+ exports.useSummaryBannerProp = useSummaryBannerProp;
@@ -42,7 +42,7 @@ injectString("tr", "Send feedback", "Geri bildirim g\xF6nder");
42
42
  injectString("zh-Hans", "Send feedback", "\u53D1\u9001\u53CD\u9988");
43
43
  injectString("zh-TW", "Send feedback", "\u50B3\u9001\u610F\u898B\u56DE\u994B");
44
44
  injectString("ro-RO", "Send feedback", "Trimite\u021Bi feedback");
45
- injectString("ar-SA", "Send feedback", "\u0625\u0631\u0633\u0627\u0644 \u0645\u0644\u0627\u062D\u0638\u0627\u062A");
45
+ injectString("ar", "Send feedback", "\u0625\u0631\u0633\u0627\u0644 \u0645\u0644\u0627\u062D\u0638\u0627\u062A");
46
46
  injectString("cs", "Manage beta option", "Manage beta option");
47
47
  injectString("da-DK", "Manage beta option", "Styr beta-indstillingen");
48
48
  injectString("de", "Manage beta option", "Manage beta option");
@@ -69,7 +69,7 @@ injectString("tr", "Manage beta option", "Manage beta option");
69
69
  injectString("zh-Hans", "Manage beta option", "Manage beta option");
70
70
  injectString("zh-TW", "Manage beta option", "\u7BA1\u7406\u6E2C\u8A66\u7248\u9078\u9805");
71
71
  injectString("ro-RO", "Manage beta option", "Administra\u021Bi op\u021Biunea beta");
72
- injectString("ar-SA", "Manage beta option", "\u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u062E\u064A\u0627\u0631 \u0627\u0644\u062A\u062C\u0631\u064A\u0628\u064A");
72
+ injectString("ar", "Manage beta option", "\u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u062E\u064A\u0627\u0631 \u0627\u0644\u062A\u062C\u0631\u064A\u0628\u064A");
73
73
  injectString("cs", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.");
74
74
  injectString("da-DK", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.", "Funktionen er stadig under test og virker ikke helt endnu. Din feedback er guld v\xE6rd og hj\xE6lper os med fremtidige forbedringer.");
75
75
  injectString("de", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.");
@@ -96,7 +96,7 @@ injectString("tr", "This feature is still in testing, and is not fully supported
96
96
  injectString("zh-Hans", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.");
97
97
  injectString("zh-TW", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.", "\u6B64\u529F\u80FD\u4ECD\u5728\u6E2C\u8A66\u968E\u6BB5\uFF0C\u5C1A\u672A\u5B8C\u5168\u652F\u63F4\u3002\u60A8\u7684\u610F\u898B\u56DE\u994B\u5C0D\u6211\u5011\u4F86\u8AAA\u975E\u5E38\u91CD\u8981\uFF0C\u80FD\u5354\u52A9\u6211\u5011\u78BA\u8A8D\u672A\u4F86\u6539\u9032\u7684\u65B9\u5411\u3002");
98
98
  injectString("ro-RO", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.", "Aceast\u0103 func\u021Bie este \xEEn testare \u0219i \xEEnc\u0103 nu este complet compatibil\u0103. Feedbackul dvs. este important \u0219i ne va ajuta la \xEEmbun\u0103t\u0103\u021Birile viitoare.");
99
- injectString("ar-SA", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.", "\u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0644\u0627 \u062A\u0632\u0627\u0644 \u0642\u064A\u062F \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0648\u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645\u0629 \u0628\u0627\u0644\u0643\u0627\u0645\u0644 \u0628\u0639\u062F. \u0645\u0644\u0627\u062D\u0638\u0627\u062A\u0643 \u0642\u064A\u0645\u0629 \u0644\u0644\u0645\u0633\u0627\u0639\u062F\u0629 \u0641\u064A \u062A\u0648\u062C\u064A\u0647 \u0627\u0644\u062A\u062D\u0633\u064A\u0646\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644\u064A\u0629.");
99
+ injectString("ar", "This feature is still in testing, and is not fully supported yet. Your feedback is valuable to help guide future enhancements.", "\u0647\u0630\u0647 \u0627\u0644\u0645\u064A\u0632\u0629 \u0644\u0627 \u062A\u0632\u0627\u0644 \u0642\u064A\u062F \u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0648\u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645\u0629 \u0628\u0627\u0644\u0643\u0627\u0645\u0644 \u0628\u0639\u062F. \u0645\u0644\u0627\u062D\u0638\u0627\u062A\u0643 \u0642\u064A\u0645\u0629 \u0644\u0644\u0645\u0633\u0627\u0639\u062F\u0629 \u0641\u064A \u062A\u0648\u062C\u064A\u0647 \u0627\u0644\u062A\u062D\u0633\u064A\u0646\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644\u064A\u0629.");
100
100
  injectString("cs", "Beta", "Beta");
101
101
  injectString("da-DK", "Beta", "Beta");
102
102
  injectString("de", "Beta", "Beta");
@@ -123,7 +123,7 @@ injectString("tr", "Beta", "Beta");
123
123
  injectString("zh-Hans", "Beta", "\u6D4B\u8BD5\u7248");
124
124
  injectString("zh-TW", "Beta", "\u6E2C\u8A66\u7248");
125
125
  injectString("ro-RO", "Beta", "Beta");
126
- injectString("ar-SA", "Beta", "\u062A\u062C\u0631\u064A\u0628\u064A");
126
+ injectString("ar", "Beta", "\u062A\u062C\u0631\u064A\u0628\u064A");
127
127
  const BetaPill = props => {
128
128
  const {
129
129
  className,
@@ -34,7 +34,7 @@ injectString("tr", "Remove page from bookmarks", "Sayfay\u0131 yer imlerinden ka
34
34
  injectString("zh-Hans", "Remove page from bookmarks", "\u5220\u9664\u6B64\u9875\u9762\u7684\u4E66\u7B7E");
35
35
  injectString("zh-TW", "Remove page from bookmarks", "\u5F9E\u66F8\u7C64\u79FB\u9664\u9801\u9762");
36
36
  injectString("ro-RO", "Remove page from bookmarks", "Elimina\u021Bi pagina din marcaje");
37
- injectString("ar-SA", "Remove page from bookmarks", "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0635\u0641\u062D\u0629 \u0645\u0646 \u0627\u0644\u0645\u0641\u0636\u0644\u0629");
37
+ injectString("ar", "Remove page from bookmarks", "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0635\u0641\u062D\u0629 \u0645\u0646 \u0627\u0644\u0645\u0641\u0636\u0644\u0629");
38
38
  injectString("cs", "Add page to bookmarks", "P\u0159idat str\xE1nku do z\xE1lo\u017Eek");
39
39
  injectString("da-DK", "Add page to bookmarks", "F\xF8j side til bogm\xE6rker");
40
40
  injectString("de", "Add page to bookmarks", "Seite zu Lesezeichen hinzuf\xFCgen");
@@ -61,7 +61,7 @@ injectString("tr", "Add page to bookmarks", "Sayfay\u0131 yer imlerine ekle");
61
61
  injectString("zh-Hans", "Add page to bookmarks", "\u5C06\u9875\u9762\u6DFB\u52A0\u5230\u4E66\u7B7E");
62
62
  injectString("zh-TW", "Add page to bookmarks", "\u65B0\u589E\u9801\u9762\u81F3\u66F8\u7C64");
63
63
  injectString("ro-RO", "Add page to bookmarks", "Ad\u0103uga\u021Bi pagina la marcaje");
64
- injectString("ar-SA", "Add page to bookmarks", "\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0635\u0641\u062D\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0641\u0636\u0644\u0629");
64
+ injectString("ar", "Add page to bookmarks", "\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0635\u0641\u062D\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0641\u0636\u0644\u0629");
65
65
  const classNames_1 = require("../commonHelpers/classNames/classNames");
66
66
  const textIconButton_1 = require("../textIconButton/textIconButton");
67
67
  const svgIconSize_1 = require("../svgIcon/svgIconSize");