@geotab/zenith 3.16.0 → 3.17.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 (282) hide show
  1. package/README.md +67 -1
  2. package/README.md.baseline +1 -0
  3. package/dist/absolute/absolute.js +5 -1
  4. package/dist/button/button.d.ts +2 -1
  5. package/dist/button/button.js +22 -5
  6. package/dist/checkboxListWithAction/checkboxListWithAction.d.ts +2 -0
  7. package/dist/checkboxListWithAction/checkboxListWithAction.js +1 -1
  8. package/dist/commonHelpers/ShowMoreCell.d.ts +5 -0
  9. package/dist/commonHelpers/ShowMoreCell.js +66 -0
  10. package/dist/commonHelpers/getAriaAttributes.js +6 -9
  11. package/dist/commonHelpers/getNonAriaProps.d.ts +11 -0
  12. package/dist/commonHelpers/getNonAriaProps.js +19 -0
  13. package/dist/commonHelpers/hooks/useScroll.d.ts +1 -1
  14. package/dist/commonHelpers/hooks/useScroll.js +6 -6
  15. package/dist/commonHelpers/isAriaProp.d.ts +9 -0
  16. package/dist/commonHelpers/isAriaProp.js +13 -0
  17. package/dist/commonHelpers/showMoreRow.d.ts +28 -0
  18. package/dist/commonHelpers/showMoreRow.js +29 -0
  19. package/dist/commonHelpers/tabsKeyboard.d.ts +1 -1
  20. package/dist/commonHelpers/tabsKeyboard.js +15 -1
  21. package/dist/commonStyles/colors/colors.less +18 -0
  22. package/dist/dataFeed/dataFeedColumnsItems.js +3 -1
  23. package/dist/dataGrid/columns/checkboxColumn/checkboxCell.d.ts +2 -1
  24. package/dist/dataGrid/columns/checkboxColumn/checkboxCell.js +1 -1
  25. package/dist/dataGrid/columns/checkboxColumn/checkboxColumnWrapper.d.ts +4 -2
  26. package/dist/dataGrid/columns/checkboxColumn/checkboxColumnWrapper.js +10 -1
  27. package/dist/dataGrid/dataGrid.d.ts +5 -1
  28. package/dist/dataGrid/dataGrid.js +39 -2
  29. package/dist/dataGrid/lazyLoadingEnd/lazyLoadingEnd.d.ts +3 -0
  30. package/dist/dataGrid/lazyLoadingEnd/lazyLoadingEnd.js +54 -0
  31. package/dist/dataGrid/row/row.js +20 -2
  32. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +3 -1
  33. package/dist/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +39 -4
  34. package/dist/dataGrid/withSelectableRows/withSelectableRows.js +73 -12
  35. package/dist/dropdown/dropdownTrigger.d.ts +1 -1
  36. package/dist/dropdownRaw/dropdownHelper.d.ts +12 -0
  37. package/dist/dropdownRaw/dropdownHelper.js +32 -11
  38. package/dist/dropdownRaw/dropdownRaw.js +36 -8
  39. package/dist/dropdownRaw/dropdownSearchableTrigger.d.ts +2 -1
  40. package/dist/dropdownRaw/dropdownSearchableTrigger.js +13 -6
  41. package/dist/dropdownRaw/dropdownTrigger.d.ts +2 -1
  42. package/dist/dropdownRaw/dropdownTrigger.js +2 -2
  43. package/dist/dropdownRaw/stateReducer/stateReducer.d.ts +8 -0
  44. package/dist/dropdownRaw/stateReducer/stateReducer.js +5 -2
  45. package/dist/dropdownRaw/types.d.ts +36 -0
  46. package/dist/filterButton/filterButton.d.ts +1 -1
  47. package/dist/formGroup/hooks/rowHooks/useLabelClasses.js +8 -2
  48. package/dist/formLayout/utils/applyLayoutPosition/applyLayoutPosition.d.ts +2 -1
  49. package/dist/formLayout/utils/applyLayoutPosition/applyLayoutPosition.js +37 -90
  50. package/dist/header/components/collapsedItemsControl/collapsedItemsControl.d.ts +1 -1
  51. package/dist/header/components/collapsedItemsControl/collapsedItemsControl.js +6 -2
  52. package/dist/header/headerButton.d.ts +3 -1
  53. package/dist/header/headerButton.js +4 -2
  54. package/dist/header/headerMenu.d.ts +2 -0
  55. package/dist/header/headerMenu.js +1 -1
  56. package/dist/index.css +319 -68
  57. package/dist/index.d.ts +3 -1
  58. package/dist/index.js +9 -3
  59. package/dist/menu/components/menuButton.d.ts +3 -1
  60. package/dist/menu/components/menuButton.js +66 -47
  61. package/dist/menu/components/menuItem.js +4 -4
  62. package/dist/miniTabs/miniTabs.js +4 -2
  63. package/dist/pageHeader/pageHeaderButton.d.ts +1 -1
  64. package/dist/pageHeader/pageHeaderButton.js +4 -2
  65. package/dist/pagination/pagination.d.ts +19 -4
  66. package/dist/pagination/pagination.js +21 -1
  67. package/dist/pagination/paginationText/paginationText.d.ts +7 -1
  68. package/dist/pagination/paginationText/paginationText.js +6 -3
  69. package/dist/pillExpandable/pillContent.d.ts +3 -2
  70. package/dist/pillExpandable/pillContent.js +2 -2
  71. package/dist/pillExpandable/pillExpandable.js +20 -5
  72. package/dist/pillExpandable/pillExpandablePopoverContent.d.ts +3 -2
  73. package/dist/pillExpandable/pillExpandablePopoverContent.js +1 -1
  74. package/dist/pillExpandable/pillExpandableSimple.d.ts +3 -1
  75. package/dist/pillExpandable/pillExpandableSimple.js +19 -9
  76. package/dist/selectList/selectList.js +1 -0
  77. package/dist/selectList/selectListItem.d.ts +10 -1
  78. package/dist/selectList/selectListItem.js +12 -9
  79. package/dist/table/children/tablePagination.d.ts +1 -1
  80. package/dist/table/children/useTableChildren.d.ts +4 -2
  81. package/dist/table/children/useTableChildren.js +64 -16
  82. package/dist/table/nested/nestedData.d.ts +29 -1
  83. package/dist/table/nested/nestedData.js +45 -4
  84. package/dist/table/nested/useNestedRows.js +18 -22
  85. package/dist/table/nested/useShowMore.d.ts +41 -0
  86. package/dist/table/nested/useShowMore.js +56 -0
  87. package/dist/table/selectable/interfaces.d.ts +17 -0
  88. package/dist/table/selectable/useDragSelection.d.ts +10 -0
  89. package/dist/table/selectable/useDragSelection.js +145 -0
  90. package/dist/table/selectable/useSelectableRows.d.ts +5 -2
  91. package/dist/table/selectable/useSelectableRows.js +131 -36
  92. package/dist/table/selectable/utils/calculateSelectionState.d.ts +1 -1
  93. package/dist/table/selectable/utils/calculateSelectionState.js +43 -7
  94. package/dist/table/selectable/utils/checkRow.js +4 -2
  95. package/dist/table/selectable/utils/getCurrentPageSelection.js +9 -5
  96. package/dist/table/selectable/utils/getDragSelectionRows.d.ts +15 -0
  97. package/dist/table/selectable/utils/getDragSelectionRows.js +28 -0
  98. package/dist/table/selectable/utils/getRangeIds.d.ts +2 -0
  99. package/dist/table/selectable/utils/getRangeIds.js +21 -0
  100. package/dist/table/selectable/utils/isRowChecked.d.ts +1 -1
  101. package/dist/table/selectable/utils/isRowChecked.js +40 -7
  102. package/dist/table/table.d.ts +1 -2
  103. package/dist/table/table.js +58 -31
  104. package/dist/tabs/tabs.d.ts +1 -0
  105. package/dist/tabs/tabs.js +50 -17
  106. package/dist/textInputRaw/textInputRaw.js +3 -2
  107. package/dist/tooltip/tooltip.d.ts +2 -0
  108. package/dist/tooltip/tooltip.js +19 -7
  109. package/dist/utils/localization/translations/ar-001.json +1 -0
  110. package/dist/utils/localization/translations/bg-BG.json +1 -0
  111. package/dist/utils/localization/translations/cs.json +1 -0
  112. package/dist/utils/localization/translations/da-DK.json +1 -0
  113. package/dist/utils/localization/translations/de.json +1 -0
  114. package/dist/utils/localization/translations/el-GR.json +1 -0
  115. package/dist/utils/localization/translations/en.json +4 -0
  116. package/dist/utils/localization/translations/es.json +1 -0
  117. package/dist/utils/localization/translations/et-EE.json +1 -0
  118. package/dist/utils/localization/translations/fi-FI.json +1 -0
  119. package/dist/utils/localization/translations/fr-FR.json +1 -0
  120. package/dist/utils/localization/translations/fr.json +1 -0
  121. package/dist/utils/localization/translations/hu-HU.json +1 -0
  122. package/dist/utils/localization/translations/id.json +1 -0
  123. package/dist/utils/localization/translations/it.json +1 -0
  124. package/dist/utils/localization/translations/ja.json +1 -0
  125. package/dist/utils/localization/translations/ka-GE.json +1 -0
  126. package/dist/utils/localization/translations/ko-KR.json +1 -0
  127. package/dist/utils/localization/translations/lt-LT.json +1 -0
  128. package/dist/utils/localization/translations/lv-LV.json +1 -0
  129. package/dist/utils/localization/translations/ms.json +1 -0
  130. package/dist/utils/localization/translations/nb-NO.json +1 -0
  131. package/dist/utils/localization/translations/nl.json +1 -0
  132. package/dist/utils/localization/translations/pl.json +1 -0
  133. package/dist/utils/localization/translations/pt-BR.json +1 -0
  134. package/dist/utils/localization/translations/pt-PT.json +1 -0
  135. package/dist/utils/localization/translations/ro-RO.json +1 -0
  136. package/dist/utils/localization/translations/sk-SK.json +1 -0
  137. package/dist/utils/localization/translations/sv.json +1 -0
  138. package/dist/utils/localization/translations/th.json +1 -0
  139. package/dist/utils/localization/translations/tr.json +1 -0
  140. package/dist/utils/localization/translations/zh-Hans.json +1 -0
  141. package/dist/utils/localization/translations/zh-TW.json +1 -0
  142. package/dist/waiting/waiting.js +95 -1
  143. package/esm/absolute/absolute.js +5 -1
  144. package/esm/button/button.d.ts +2 -1
  145. package/esm/button/button.js +22 -5
  146. package/esm/checkboxListWithAction/checkboxListWithAction.d.ts +2 -0
  147. package/esm/checkboxListWithAction/checkboxListWithAction.js +1 -1
  148. package/esm/commonHelpers/ShowMoreCell.d.ts +5 -0
  149. package/esm/commonHelpers/ShowMoreCell.js +57 -0
  150. package/esm/commonHelpers/getAriaAttributes.js +6 -9
  151. package/esm/commonHelpers/getNonAriaProps.d.ts +11 -0
  152. package/esm/commonHelpers/getNonAriaProps.js +15 -0
  153. package/esm/commonHelpers/hooks/useScroll.d.ts +1 -1
  154. package/esm/commonHelpers/hooks/useScroll.js +6 -6
  155. package/esm/commonHelpers/isAriaProp.d.ts +9 -0
  156. package/esm/commonHelpers/isAriaProp.js +9 -0
  157. package/esm/commonHelpers/showMoreRow.d.ts +28 -0
  158. package/esm/commonHelpers/showMoreRow.js +22 -0
  159. package/esm/commonHelpers/tabsKeyboard.d.ts +1 -1
  160. package/esm/commonHelpers/tabsKeyboard.js +15 -1
  161. package/esm/commonStyles/colors/colorsConstant.js +11 -11
  162. package/esm/dataFeed/dataFeedColumnsItems.js +3 -1
  163. package/esm/dataGrid/columns/checkboxColumn/checkboxCell.d.ts +2 -1
  164. package/esm/dataGrid/columns/checkboxColumn/checkboxCell.js +1 -1
  165. package/esm/dataGrid/columns/checkboxColumn/checkboxColumnWrapper.d.ts +4 -2
  166. package/esm/dataGrid/columns/checkboxColumn/checkboxColumnWrapper.js +10 -1
  167. package/esm/dataGrid/dataGrid.d.ts +5 -1
  168. package/esm/dataGrid/dataGrid.js +38 -2
  169. package/esm/dataGrid/lazyLoadingEnd/lazyLoadingEnd.d.ts +3 -0
  170. package/esm/dataGrid/lazyLoadingEnd/lazyLoadingEnd.js +45 -0
  171. package/esm/dataGrid/row/row.js +20 -2
  172. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.d.ts +3 -1
  173. package/esm/dataGrid/withSelectableRows/components/bulkActions/bulkActions.js +39 -4
  174. package/esm/dataGrid/withSelectableRows/withSelectableRows.js +73 -12
  175. package/esm/dropdown/dropdownTrigger.d.ts +1 -1
  176. package/esm/dropdownRaw/dropdownHelper.d.ts +12 -0
  177. package/esm/dropdownRaw/dropdownHelper.js +30 -10
  178. package/esm/dropdownRaw/dropdownRaw.js +37 -9
  179. package/esm/dropdownRaw/dropdownSearchableTrigger.d.ts +2 -1
  180. package/esm/dropdownRaw/dropdownSearchableTrigger.js +13 -6
  181. package/esm/dropdownRaw/dropdownTrigger.d.ts +2 -1
  182. package/esm/dropdownRaw/dropdownTrigger.js +2 -2
  183. package/esm/dropdownRaw/stateReducer/stateReducer.d.ts +8 -0
  184. package/esm/dropdownRaw/stateReducer/stateReducer.js +5 -2
  185. package/esm/dropdownRaw/types.d.ts +36 -0
  186. package/esm/filterButton/filterButton.d.ts +1 -1
  187. package/esm/formGroup/hooks/rowHooks/useLabelClasses.js +8 -2
  188. package/esm/formLayout/utils/applyLayoutPosition/applyLayoutPosition.d.ts +2 -1
  189. package/esm/formLayout/utils/applyLayoutPosition/applyLayoutPosition.js +37 -90
  190. package/esm/header/components/collapsedItemsControl/collapsedItemsControl.d.ts +1 -1
  191. package/esm/header/components/collapsedItemsControl/collapsedItemsControl.js +6 -2
  192. package/esm/header/headerButton.d.ts +3 -1
  193. package/esm/header/headerButton.js +4 -2
  194. package/esm/header/headerMenu.d.ts +2 -0
  195. package/esm/header/headerMenu.js +1 -1
  196. package/esm/index.d.ts +3 -1
  197. package/esm/index.js +3 -1
  198. package/esm/menu/components/menuButton.d.ts +3 -1
  199. package/esm/menu/components/menuButton.js +66 -47
  200. package/esm/menu/components/menuItem.js +4 -4
  201. package/esm/miniTabs/miniTabs.js +4 -2
  202. package/esm/pageHeader/pageHeaderButton.d.ts +1 -1
  203. package/esm/pageHeader/pageHeaderButton.js +4 -2
  204. package/esm/pagination/pagination.d.ts +19 -4
  205. package/esm/pagination/pagination.js +21 -1
  206. package/esm/pagination/paginationText/paginationText.d.ts +7 -1
  207. package/esm/pagination/paginationText/paginationText.js +6 -3
  208. package/esm/pillExpandable/pillContent.d.ts +3 -2
  209. package/esm/pillExpandable/pillContent.js +2 -2
  210. package/esm/pillExpandable/pillExpandable.js +20 -5
  211. package/esm/pillExpandable/pillExpandablePopoverContent.d.ts +3 -2
  212. package/esm/pillExpandable/pillExpandablePopoverContent.js +1 -1
  213. package/esm/pillExpandable/pillExpandableSimple.d.ts +3 -1
  214. package/esm/pillExpandable/pillExpandableSimple.js +20 -10
  215. package/esm/selectList/selectList.js +1 -0
  216. package/esm/selectList/selectListItem.d.ts +10 -1
  217. package/esm/selectList/selectListItem.js +12 -9
  218. package/esm/table/children/tablePagination.d.ts +1 -1
  219. package/esm/table/children/useTableChildren.d.ts +4 -2
  220. package/esm/table/children/useTableChildren.js +64 -16
  221. package/esm/table/nested/nestedData.d.ts +29 -1
  222. package/esm/table/nested/nestedData.js +44 -3
  223. package/esm/table/nested/useNestedRows.js +18 -22
  224. package/esm/table/nested/useShowMore.d.ts +41 -0
  225. package/esm/table/nested/useShowMore.js +52 -0
  226. package/esm/table/selectable/interfaces.d.ts +17 -0
  227. package/esm/table/selectable/useDragSelection.d.ts +10 -0
  228. package/esm/table/selectable/useDragSelection.js +141 -0
  229. package/esm/table/selectable/useSelectableRows.d.ts +5 -2
  230. package/esm/table/selectable/useSelectableRows.js +129 -35
  231. package/esm/table/selectable/utils/calculateSelectionState.d.ts +1 -1
  232. package/esm/table/selectable/utils/calculateSelectionState.js +43 -7
  233. package/esm/table/selectable/utils/checkRow.js +4 -2
  234. package/esm/table/selectable/utils/getCurrentPageSelection.js +9 -5
  235. package/esm/table/selectable/utils/getDragSelectionRows.d.ts +15 -0
  236. package/esm/table/selectable/utils/getDragSelectionRows.js +24 -0
  237. package/esm/table/selectable/utils/getRangeIds.d.ts +2 -0
  238. package/esm/table/selectable/utils/getRangeIds.js +17 -0
  239. package/esm/table/selectable/utils/isRowChecked.d.ts +1 -1
  240. package/esm/table/selectable/utils/isRowChecked.js +40 -7
  241. package/esm/table/table.d.ts +1 -2
  242. package/esm/table/table.js +43 -16
  243. package/esm/tabs/tabs.d.ts +1 -0
  244. package/esm/tabs/tabs.js +50 -17
  245. package/esm/textInputRaw/textInputRaw.js +3 -2
  246. package/esm/tooltip/tooltip.d.ts +2 -0
  247. package/esm/tooltip/tooltip.js +19 -7
  248. package/esm/utils/localization/translations/ar-001.json +1 -0
  249. package/esm/utils/localization/translations/bg-BG.json +1 -0
  250. package/esm/utils/localization/translations/cs.json +1 -0
  251. package/esm/utils/localization/translations/da-DK.json +1 -0
  252. package/esm/utils/localization/translations/de.json +1 -0
  253. package/esm/utils/localization/translations/el-GR.json +1 -0
  254. package/esm/utils/localization/translations/en.json +4 -0
  255. package/esm/utils/localization/translations/es.json +1 -0
  256. package/esm/utils/localization/translations/et-EE.json +1 -0
  257. package/esm/utils/localization/translations/fi-FI.json +1 -0
  258. package/esm/utils/localization/translations/fr-FR.json +1 -0
  259. package/esm/utils/localization/translations/fr.json +1 -0
  260. package/esm/utils/localization/translations/hu-HU.json +1 -0
  261. package/esm/utils/localization/translations/id.json +1 -0
  262. package/esm/utils/localization/translations/it.json +1 -0
  263. package/esm/utils/localization/translations/ja.json +1 -0
  264. package/esm/utils/localization/translations/ka-GE.json +1 -0
  265. package/esm/utils/localization/translations/ko-KR.json +1 -0
  266. package/esm/utils/localization/translations/lt-LT.json +1 -0
  267. package/esm/utils/localization/translations/lv-LV.json +1 -0
  268. package/esm/utils/localization/translations/ms.json +1 -0
  269. package/esm/utils/localization/translations/nb-NO.json +1 -0
  270. package/esm/utils/localization/translations/nl.json +1 -0
  271. package/esm/utils/localization/translations/pl.json +1 -0
  272. package/esm/utils/localization/translations/pt-BR.json +1 -0
  273. package/esm/utils/localization/translations/pt-PT.json +1 -0
  274. package/esm/utils/localization/translations/ro-RO.json +1 -0
  275. package/esm/utils/localization/translations/sk-SK.json +1 -0
  276. package/esm/utils/localization/translations/sv.json +1 -0
  277. package/esm/utils/localization/translations/th.json +1 -0
  278. package/esm/utils/localization/translations/tr.json +1 -0
  279. package/esm/utils/localization/translations/zh-Hans.json +1 -0
  280. package/esm/utils/localization/translations/zh-TW.json +1 -0
  281. package/esm/waiting/waiting.js +96 -2
  282. package/package.json +18 -6
@@ -127,6 +127,7 @@
127
127
  "GroupManuallyClassifiedPowertrainId": "Grupo motopropulsor classificado manualmente",
128
128
  "GroupFuelCellElectricVehicleId": "Veículo elétrico com célula de combustível",
129
129
  "and {0} more": "e {0} mais",
130
+ "+{0} more": "+{0} mais",
130
131
  "Clear selection": "Limpar seleção",
131
132
  "Select current page": "Selecionar página atual",
132
133
  "OperatorOr": "Operador Ou",
@@ -127,6 +127,7 @@
127
127
  "GroupManuallyClassifiedPowertrainId": "Tren motopropulsor clasificat manual",
128
128
  "GroupFuelCellElectricVehicleId": "Vehicul electric cu celulă de combustie",
129
129
  "and {0} more": "și {0} în plus",
130
+ "+{0} more": "Încă {0}",
130
131
  "Clear selection": "Ștergeți selecția",
131
132
  "Select current page": "Selectați pagina actuală",
132
133
  "OperatorOr": "OperatorOr",
@@ -125,6 +125,7 @@
125
125
  "GroupManuallyClassifiedPowertrainId": "Ručne klasifikovaný hnací systém",
126
126
  "GroupFuelCellElectricVehicleId": "Elektrické vozidlo s palivovými článkami",
127
127
  "and {0} more": "a {0} ďalších",
128
+ "+{0} more": "+{0} viac",
128
129
  "Clear selection": "Vymaž výber.",
129
130
  "Select current page": "Vyber aktuálnu stránku.",
130
131
  "OperatorOr": "ALEBO",
@@ -115,6 +115,7 @@
115
115
  "GroupFuelCellElectricVehicleId": "Elfordon med bränsleceller",
116
116
  "{1} selected": "{1} vald",
117
117
  "and {0} more": "och {0} till",
118
+ "+{0} more": "+{0} mer",
118
119
  "Clear selection": "Rensa val",
119
120
  "Select current page": "Välj nuvarande sida",
120
121
  "OperatorOr": "ELLER",
@@ -115,6 +115,7 @@
115
115
  "GroupFuelCellElectricVehicleId": "รถพลังงานไฟฟ้าเซลล์เชื้อเพลิง",
116
116
  "{1} selected": "เลือกแล้ว {1}",
117
117
  "and {0} more": "และอีก {0}",
118
+ "+{0} more": "+{0} รายการเพิ่มเติม",
118
119
  "Clear selection": "ล้างการเลือก",
119
120
  "Select current page": "เลือกหน้าปัจจุบัน",
120
121
  "OperatorOr": "หรือ",
@@ -115,6 +115,7 @@
115
115
  "GroupManuallyClassifiedPowertrainId": "Manuel Sınıflandırılmış Güç Aktarma Sistemi",
116
116
  "{1} selected": "{1} seçildi",
117
117
  "and {0} more": "ve {0} tane daha",
118
+ "+{0} more": "+{0} daha",
118
119
  "Clear selection": "Seçimi temizle",
119
120
  "Select current page": "Geçerli sayfayı seç",
120
121
  "OperatorOr": "VEYA",
@@ -115,6 +115,7 @@
115
115
  "GroupFuelCellElectricVehicleId": "燃料电池电动车",
116
116
  "{1} selected": "已选中 {1} 项",
117
117
  "and {0} more": "和另外 {0} 项",
118
+ "+{0} more": "+{0}更多",
118
119
  "Clear selection": "清除选择",
119
120
  "Select current page": "选择当前页面",
120
121
  "OperatorOr": "或",
@@ -125,6 +125,7 @@
125
125
  "GroupManuallyClassifiedPowertrainId": "人工分類動力裝置",
126
126
  "GroupFuelCellElectricVehicleId": "燃料電池電動車",
127
127
  "and {0} more": "還有 {0} 個",
128
+ "+{0} more": "還有 +{0} 個",
128
129
  "Clear selection": "清除選取項目",
129
130
  "Select current page": "選取目前頁面",
130
131
  "OperatorOr": "OperatorOr",
@@ -1,13 +1,48 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useState } from "react";
2
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
3
3
  import { classNames } from "../commonHelpers/classNames/classNames";
4
4
  import { useDriveClassName } from "../utils/theme/useDriveClassName";
5
+ import { useResizeObserver } from "../commonHelpers/hooks/useResizeObserver";
5
6
  import { zen } from "../utils/zen";
6
7
  export const Waiting = ({ isLoading = false, delay = 400, hideOverlay = false, className = "", description, label }) => {
7
8
  const [visible, setVisible] = useState(false);
8
9
  const [statusText, setStatusText] = useState("");
10
+ const [coverageHeight, setCoverageHeight] = useState(undefined);
11
+ const waitingRef = useRef(null);
12
+ const statusRef = useRef(null);
13
+ const mutationFrameRef = useRef(undefined);
9
14
  const spinnerDriveClassName = useDriveClassName("zen-waiting__spinner");
10
15
  const showWaiting = isLoading && (delay <= 0 || visible);
16
+ // The full-area coverage/re-measure machinery only makes sense for the default overlay variant,
17
+ // which is meant to span its parent. The `--inline` variant is a fixed 40x24px spinner — stretching
18
+ // its coverage layer to the parent's scrollHeight would incorrectly block clicks below the spinner
19
+ // and grow the parent's own scrollHeight on every re-measure (a feedback loop).
20
+ const isInline = className.split(/\s+/).includes("zen-waiting--inline");
21
+ const canMeasureCoverage = showWaiting && !isInline;
22
+ const measureCoverage = useCallback(() => {
23
+ var _a;
24
+ const parent = (_a = waitingRef.current) === null || _a === void 0 ? void 0 : _a.parentElement;
25
+ if (!parent || isInline) {
26
+ setCoverageHeight(undefined);
27
+ return;
28
+ }
29
+ // The coverage layer defaults to 100% of this element's own box (see .zen-waiting__coverage),
30
+ // which only spans the parent's visible (clientHeight) box. When the parent's real content is
31
+ // taller (e.g. a scrollable page), stretch it to the full scrollHeight instead so it keeps
32
+ // covering content the user can scroll to while loading. The DOM guarantees
33
+ // scrollHeight >= clientHeight, so no Math.max is needed here.
34
+ setCoverageHeight(parent.scrollHeight > parent.clientHeight ? parent.scrollHeight : undefined);
35
+ }, [isInline]);
36
+ // The target is only non-null once the overlay is actually mounted (`waitingRef.current` is null
37
+ // until `showWaiting` flips true). Gating it on `showWaiting` (and skipping it for the `--inline`
38
+ // variant) — rather than passing a permanently stable getter — ensures the identity change (null ->
39
+ // getter) re-triggers useResizeObserver's setup effect once the ref is attached; a permanently
40
+ // stable getter would only ever run that effect once, against a still-null ref, and never attach
41
+ // when the overlay later appears (e.g. with the default delay).
42
+ const getResizeTarget = useCallback(() => { var _a, _b; return (_b = (_a = waitingRef.current) === null || _a === void 0 ? void 0 : _a.parentElement) !== null && _b !== void 0 ? _b : null; }, []);
43
+ // Re-measures when the containing element's own box resizes (e.g. viewport resize, layout reflow
44
+ // changing the parent's height).
45
+ const { result: containerResize } = useResizeObserver({ target: canMeasureCoverage ? getResizeTarget : null });
11
46
  useEffect(() => {
12
47
  var _a;
13
48
  let timer;
@@ -37,5 +72,64 @@ export const Waiting = ({ isLoading = false, delay = 400, hideOverlay = false, c
37
72
  timer && ((_a = zen.clearTimeout) === null || _a === void 0 ? void 0 : _a.call(zen, timer));
38
73
  };
39
74
  }, [isLoading, showWaiting, description, label]);
40
- return isLoading ? (_jsxs(_Fragment, { children: [_jsx("div", { role: "status", className: "zen-waiting__status", children: statusText ? _jsx("span", { className: "zen-visually-hidden", children: statusText }) : null }), showWaiting ? (_jsxs("div", { className: classNames(["zen-waiting", className]), children: [_jsx("div", { className: classNames(["zen-waiting__overlay", hideOverlay ? "zen-waiting__overlay--hidden" : ""]) }), _jsxs("div", { className: "zen-waiting__spinner-container", children: [_jsx("div", { className: classNames(["zen-waiting__spinner", spinnerDriveClassName || ""]), children: _jsxs("svg", { viewBox: "0 0 64 64", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "spinnerGradient", x1: "0", y1: "0", x2: "1", y2: "0", gradientUnits: "objectBoundingBox", children: [_jsx("stop", { offset: "0%", stopColor: "var(--borders-form-field--active)", stopOpacity: "1" }), _jsx("stop", { offset: "33.33%", stopColor: "var(--borders-form-field--active)", stopOpacity: "0.8" }), _jsx("stop", { offset: "50%", stopColor: "var(--borders-form-field--active)", stopOpacity: "0.5" }), _jsx("stop", { offset: "66.67%", stopColor: "var(--borders-form-field--active)", stopOpacity: "0.2" }), _jsx("stop", { offset: "100%", stopColor: "var(--borders-form-field--active)", stopOpacity: "0" })] }) }), _jsx("path", { className: "zen-waiting__spinner-animation", stroke: "url(#spinnerGradient)", strokeWidth: "6", strokeLinecap: "round", d: "M 32 4 A 28 28 0 1 1 32 60 A 28 28 0 1 1 32 4 Z" })] }) }), description && _jsx("div", { className: classNames(["zen-waiting__spinner-text"]), children: description })] })] })) : null] })) : null;
75
+ useLayoutEffect(() => {
76
+ if (!canMeasureCoverage) {
77
+ setCoverageHeight(undefined);
78
+ return;
79
+ }
80
+ measureCoverage();
81
+ }, [canMeasureCoverage, containerResize, measureCoverage]);
82
+ // A fixed-height scrollable parent can gain content without its own box ever resizing — that's
83
+ // the exact shape of the original bug, and ResizeObserver alone won't catch it. Watch for DOM
84
+ // mutations on the parent instead and re-measure, coalescing bursts of mutations (e.g. many rows
85
+ // streaming in) into a single measurement per animation frame.
86
+ useEffect(() => {
87
+ var _a;
88
+ const parent = (_a = waitingRef.current) === null || _a === void 0 ? void 0 : _a.parentElement;
89
+ const MutationObserverCtor = zen.MutationObserver;
90
+ if (!canMeasureCoverage || !parent || !MutationObserverCtor) {
91
+ return undefined;
92
+ }
93
+ const scheduleMeasure = () => {
94
+ var _a, _b;
95
+ mutationFrameRef.current && ((_a = zen.cancelAnimationFrame) === null || _a === void 0 ? void 0 : _a.call(zen, mutationFrameRef.current));
96
+ mutationFrameRef.current = (_b = zen.requestAnimationFrame) === null || _b === void 0 ? void 0 : _b.call(zen, measureCoverage);
97
+ };
98
+ const observer = new MutationObserverCtor(scheduleMeasure);
99
+ observer.observe(parent, { childList: true, subtree: true, characterData: true });
100
+ return () => {
101
+ var _a;
102
+ mutationFrameRef.current && ((_a = zen.cancelAnimationFrame) === null || _a === void 0 ? void 0 : _a.call(zen, mutationFrameRef.current));
103
+ observer.disconnect();
104
+ };
105
+ }, [canMeasureCoverage, measureCoverage]);
106
+ // Content behind the overlay is only unclickable for mouse/pointer users (the coverage layer's
107
+ // pointer-events block that). Keyboard users could still Tab into it, so make every other direct
108
+ // child of the parent `inert` while loading — removing it from the tab order and from hit-testing
109
+ // — and restore only the children we changed once loading stops. Skipped for the `--inline`
110
+ // variant, which doesn't cover/block its surroundings.
111
+ useEffect(() => {
112
+ var _a;
113
+ const parent = (_a = waitingRef.current) === null || _a === void 0 ? void 0 : _a.parentElement;
114
+ if (!canMeasureCoverage || !parent) {
115
+ return undefined;
116
+ }
117
+ const ownElements = new Set([waitingRef.current, statusRef.current]);
118
+ const inertedSiblings = [];
119
+ // `setAttribute`/`hasAttribute` (rather than the `.inert` IDL property) so this correctly
120
+ // detects and restores elements marked inert via the HTML attribute or a JSX `inert` prop too
121
+ // — not just ones previously set via the property.
122
+ Array.from(parent.children).forEach(child => {
123
+ if (child instanceof HTMLElement && !ownElements.has(child) && !child.hasAttribute("inert")) {
124
+ child.setAttribute("inert", "");
125
+ inertedSiblings.push(child);
126
+ }
127
+ });
128
+ return () => {
129
+ inertedSiblings.forEach(child => {
130
+ child.removeAttribute("inert");
131
+ });
132
+ };
133
+ }, [canMeasureCoverage]);
134
+ return isLoading ? (_jsxs(_Fragment, { children: [_jsx("div", { ref: statusRef, role: "status", className: "zen-waiting__status", children: statusText ? _jsx("span", { className: "zen-visually-hidden", children: statusText }) : null }), showWaiting ? (_jsx("div", { ref: waitingRef, className: classNames(["zen-waiting", className]), children: _jsxs("div", { className: "zen-waiting__coverage", style: coverageHeight ? { height: `${coverageHeight}px` } : undefined, children: [_jsx("div", { className: classNames(["zen-waiting__overlay", hideOverlay ? "zen-waiting__overlay--hidden" : ""]) }), _jsxs("div", { className: "zen-waiting__spinner-container", children: [_jsx("div", { className: classNames(["zen-waiting__spinner", spinnerDriveClassName || ""]), children: _jsxs("svg", { viewBox: "0 0 64 64", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("defs", { children: _jsxs("linearGradient", { id: "spinnerGradient", x1: "0", y1: "0", x2: "1", y2: "0", gradientUnits: "objectBoundingBox", children: [_jsx("stop", { offset: "0%", stopColor: "var(--borders-form-field--active)", stopOpacity: "1" }), _jsx("stop", { offset: "33.33%", stopColor: "var(--borders-form-field--active)", stopOpacity: "0.8" }), _jsx("stop", { offset: "50%", stopColor: "var(--borders-form-field--active)", stopOpacity: "0.5" }), _jsx("stop", { offset: "66.67%", stopColor: "var(--borders-form-field--active)", stopOpacity: "0.2" }), _jsx("stop", { offset: "100%", stopColor: "var(--borders-form-field--active)", stopOpacity: "0" })] }) }), _jsx("path", { className: "zen-waiting__spinner-animation", stroke: "url(#spinnerGradient)", strokeWidth: "6", strokeLinecap: "round", d: "M 32 4 A 28 28 0 1 1 32 60 A 28 28 0 1 1 32 4 Z" })] }) }), description && _jsx("div", { className: classNames(["zen-waiting__spinner-text"]), children: description })] })] }) })) : null] })) : null;
41
135
  };
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@geotab/zenith",
3
- "version": "3.16.0",
3
+ "version": "3.17.0-beta.0",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
4
7
  "description": "Zenith components library on React",
5
8
  "main": "dist/index.js",
6
9
  "types": "esm/index.d.ts",
@@ -46,8 +49,16 @@
46
49
  "check-duplicates": "node build-utils/check-duplicates.mjs",
47
50
  "translations": "node build-utils/translations/translation-integrity.mjs",
48
51
  "update-version": "node updateVersion.js",
52
+ "update-public-api-snapshot": "node build-utils/public-api-snapshot.js --update",
53
+ "update-readme-snapshot": "node build-utils/readme-snapshot.js --update",
54
+ "update-zenith-tag-latest": "bash update-zenith-tag-latest.sh",
49
55
  "watch": "npx tsc -b tsconfig.cjs.json -w",
50
- "watch:inject-translations": "npx nodemon --watch dist --delay 500ms --ext js --exec 'npm run inject-translations'"
56
+ "watch:inject-translations": "npx nodemon --watch dist --delay 500ms --ext js --exec 'npm run inject-translations'",
57
+ "build-mcp": "tsc -p mcp/tsconfig.json",
58
+ "build-mcp-full": "npm run build-index && MCP_REQUIRE_STORYBOOK=1 npm run build-manifest && npm run validate-manifest && npm run build-mcp",
59
+ "build-mcp-tests": "tsc -p mcp/tsconfig.test.json",
60
+ "build-manifest": "node mcp/build/generate-manifest.cjs",
61
+ "validate-manifest": "node mcp/build/validate-manifest.cjs"
51
62
  },
52
63
  "author": "",
53
64
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -114,7 +125,11 @@
114
125
  },
115
126
  "files": [
116
127
  "./dist/",
117
- "./esm"
128
+ "./esm",
129
+ "!**/*.test.js",
130
+ "!**/*.test.js.map",
131
+ "!**/*.test.d.ts",
132
+ "!**/*.tsbuildinfo"
118
133
  ],
119
134
  "browserslist": [
120
135
  "chrome >= 133",
@@ -144,8 +159,5 @@
144
159
  "minimatch@<9": {
145
160
  "brace-expansion": "^1.1.18"
146
161
  }
147
- },
148
- "publishConfig": {
149
- "access": "public"
150
162
  }
151
163
  }