@zeedhi/common 3.0.5 → 3.0.7

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 (528) hide show
  1. package/coverage/clover.xml +1404 -1469
  2. package/coverage/coverage-final.json +146 -143
  3. package/coverage/lcov-report/index.html +44 -29
  4. package/coverage/lcov-report/src/components/index.html +1 -1
  5. package/coverage/lcov-report/src/components/index.ts.html +152 -152
  6. package/coverage/lcov-report/src/components/tek-grid/columns-searcher.ts.html +151 -0
  7. package/coverage/lcov-report/src/components/tek-grid/dynamic-filter-datasource-factory.ts.html +145 -0
  8. package/coverage/lcov-report/src/components/tek-grid/filter-helper.ts.html +145 -0
  9. package/coverage/lcov-report/src/components/tek-grid/grid-filter-button.ts.html +1351 -0
  10. package/coverage/lcov-report/src/components/tek-grid/grouped-data-manager.ts.html +1429 -0
  11. package/coverage/lcov-report/src/components/tek-grid/grouped-data-selector.ts.html +205 -0
  12. package/coverage/lcov-report/src/components/tek-grid/grouped-view-navigator.ts.html +340 -0
  13. package/coverage/lcov-report/src/components/tek-grid/index.html +326 -0
  14. package/coverage/lcov-report/src/components/tek-grid/index.ts.html +139 -0
  15. package/coverage/lcov-report/src/components/tek-grid/interfaces.ts.html +1072 -0
  16. package/coverage/lcov-report/src/components/tek-grid/keymap-grouped.ts.html +148 -0
  17. package/coverage/lcov-report/src/components/tek-grid/layout-options.ts.html +829 -0
  18. package/coverage/lcov-report/src/components/tek-grid/tek-datasource/index.html +161 -0
  19. package/coverage/lcov-report/src/components/tek-grid/tek-datasource/index.ts.html +94 -0
  20. package/coverage/lcov-report/src/components/tek-grid/tek-datasource/interfaces.ts.html +193 -0
  21. package/coverage/lcov-report/src/components/tek-grid/tek-datasource/tek-memory-datasource.ts.html +1027 -0
  22. package/coverage/lcov-report/src/components/tek-grid/tek-datasource/tek-rest-datasource.ts.html +757 -0
  23. package/coverage/lcov-report/src/components/tek-grid/tek-grid-column.ts.html +664 -0
  24. package/coverage/lcov-report/src/components/tek-grid/tek-grid-columns-button/index.html +131 -0
  25. package/coverage/lcov-report/src/components/tek-grid/tek-grid-columns-button/tek-grid-columns-button-controller.ts.html +169 -0
  26. package/coverage/lcov-report/src/components/tek-grid/tek-grid-columns-button/tek-grid-columns-button.ts.html +196 -0
  27. package/coverage/lcov-report/src/components/tek-grid/tek-grid-controller.ts.html +505 -0
  28. package/coverage/lcov-report/src/components/tek-grid/tek-grid-events.ts.html +400 -0
  29. package/coverage/lcov-report/src/components/tek-grid/tek-grid-toolbar-provider/export-options/button-option.ts.html +163 -0
  30. package/coverage/lcov-report/src/components/tek-grid/tek-grid-toolbar-provider/export-options/index.html +146 -0
  31. package/coverage/lcov-report/src/components/tek-grid/tek-grid-toolbar-provider/export-options/index.ts.html +94 -0
  32. package/coverage/lcov-report/src/components/tek-grid/tek-grid-toolbar-provider/export-options/multi-option.ts.html +340 -0
  33. package/coverage/lcov-report/src/components/tek-grid/tek-grid-toolbar-provider/index.html +131 -0
  34. package/coverage/lcov-report/src/components/tek-grid/tek-grid-toolbar-provider/index.ts.html +91 -0
  35. package/coverage/lcov-report/src/components/tek-grid/tek-grid-toolbar-provider/tek-grid-toolbar-provider.ts.html +1186 -0
  36. package/coverage/lcov-report/src/components/tek-grid/tek-grid.ts.html +3451 -0
  37. package/coverage/lcov-report/src/components/zd-alert/alert.ts.html +3 -3
  38. package/coverage/lcov-report/src/components/zd-alert/index.html +1 -1
  39. package/coverage/lcov-report/src/components/zd-badge/badge.ts.html +3 -3
  40. package/coverage/lcov-report/src/components/zd-badge/index.html +1 -1
  41. package/coverage/lcov-report/src/components/zd-breadcrumbs/breadcrumbs.ts.html +3 -3
  42. package/coverage/lcov-report/src/components/zd-breadcrumbs/index.html +1 -1
  43. package/coverage/lcov-report/src/components/zd-button/button.ts.html +3 -3
  44. package/coverage/lcov-report/src/components/zd-button/index.html +1 -1
  45. package/coverage/lcov-report/src/components/zd-button-group/button-group.ts.html +3 -3
  46. package/coverage/lcov-report/src/components/zd-button-group/index.html +1 -1
  47. package/coverage/lcov-report/src/components/zd-card/card.ts.html +3 -3
  48. package/coverage/lcov-report/src/components/zd-card/index.html +1 -1
  49. package/coverage/lcov-report/src/components/zd-carousel/carousel.ts.html +3 -3
  50. package/coverage/lcov-report/src/components/zd-carousel/index.html +1 -1
  51. package/coverage/lcov-report/src/components/zd-checkbox/checkbox.ts.html +5 -5
  52. package/coverage/lcov-report/src/components/zd-checkbox/index.html +1 -1
  53. package/coverage/lcov-report/src/components/zd-checkbox-multiple/checkbox-multiple.ts.html +6 -6
  54. package/coverage/lcov-report/src/components/zd-checkbox-multiple/index.html +1 -1
  55. package/coverage/lcov-report/src/components/zd-chip/chip.ts.html +3 -3
  56. package/coverage/lcov-report/src/components/zd-chip/index.html +1 -1
  57. package/coverage/lcov-report/src/components/zd-code-editor/code-editor.ts.html +1045 -0
  58. package/coverage/lcov-report/src/components/zd-code-editor/index.html +116 -0
  59. package/coverage/lcov-report/src/components/zd-code-viewer/code-viewer.ts.html +4 -4
  60. package/coverage/lcov-report/src/components/zd-code-viewer/index.html +1 -1
  61. package/coverage/lcov-report/src/components/zd-col/col.ts.html +3 -3
  62. package/coverage/lcov-report/src/components/zd-col/index.html +1 -1
  63. package/coverage/lcov-report/src/components/zd-collapse-card/collapse-card.ts.html +3 -3
  64. package/coverage/lcov-report/src/components/zd-collapse-card/index.html +1 -1
  65. package/coverage/lcov-report/src/components/zd-component/child-not-found.ts.html +2 -2
  66. package/coverage/lcov-report/src/components/zd-component/component-render.ts.html +5 -5
  67. package/coverage/lcov-report/src/components/zd-component/component.ts.html +57 -57
  68. package/coverage/lcov-report/src/components/zd-component/index.html +1 -1
  69. package/coverage/lcov-report/src/components/zd-container/container.ts.html +3 -3
  70. package/coverage/lcov-report/src/components/zd-container/index.html +1 -1
  71. package/coverage/lcov-report/src/components/zd-currency/currency.ts.html +9 -9
  72. package/coverage/lcov-report/src/components/zd-currency/index.html +1 -1
  73. package/coverage/lcov-report/src/components/zd-date-input/date-input.ts.html +160 -517
  74. package/coverage/lcov-report/src/components/zd-date-input/index.html +24 -9
  75. package/coverage/lcov-report/src/components/zd-date-input/utils.ts.html +136 -0
  76. package/coverage/lcov-report/src/components/zd-date-range/date-range.ts.html +289 -583
  77. package/coverage/lcov-report/src/components/zd-date-range/index.html +24 -9
  78. package/coverage/lcov-report/src/components/zd-date-range/utils.ts.html +178 -0
  79. package/coverage/lcov-report/src/components/zd-dialog/dialog.ts.html +30 -30
  80. package/coverage/lcov-report/src/components/zd-dialog/index.html +1 -1
  81. package/coverage/lcov-report/src/components/zd-divider/divider.ts.html +3 -3
  82. package/coverage/lcov-report/src/components/zd-divider/index.html +1 -1
  83. package/coverage/lcov-report/src/components/zd-dropdown/dropdown.ts.html +3 -3
  84. package/coverage/lcov-report/src/components/zd-dropdown/index.html +1 -1
  85. package/coverage/lcov-report/src/components/zd-field-group/field-group.ts.html +325 -0
  86. package/coverage/lcov-report/src/components/zd-field-group/index.html +116 -0
  87. package/coverage/lcov-report/src/components/zd-footer/footer.ts.html +3 -3
  88. package/coverage/lcov-report/src/components/zd-footer/index.html +1 -1
  89. package/coverage/lcov-report/src/components/zd-form/form.ts.html +3 -3
  90. package/coverage/lcov-report/src/components/zd-form/index.html +1 -1
  91. package/coverage/lcov-report/src/components/zd-frame/frame.ts.html +7 -7
  92. package/coverage/lcov-report/src/components/zd-frame/index.html +1 -1
  93. package/coverage/lcov-report/src/components/zd-frame-page/frame-page.ts.html +4 -4
  94. package/coverage/lcov-report/src/components/zd-frame-page/index.html +1 -1
  95. package/coverage/lcov-report/src/components/zd-grid/data-navigator.ts.html +2 -2
  96. package/coverage/lcov-report/src/components/zd-grid/data-selector.ts.html +2 -2
  97. package/coverage/lcov-report/src/components/zd-grid/grid-column.ts.html +10 -10
  98. package/coverage/lcov-report/src/components/zd-grid/grid-events.ts.html +2 -2
  99. package/coverage/lcov-report/src/components/zd-grid/grid.ts.html +13 -13
  100. package/coverage/lcov-report/src/components/zd-grid/index.html +1 -1
  101. package/coverage/lcov-report/src/components/zd-grid/index.ts.html +12 -12
  102. package/coverage/lcov-report/src/components/zd-grid/iterable-table.ts.html +3 -3
  103. package/coverage/lcov-report/src/components/zd-grid/keymap-merger.ts.html +3 -3
  104. package/coverage/lcov-report/src/components/zd-grid/keymap-navigation.ts.html +2 -2
  105. package/coverage/lcov-report/src/components/zd-grid/table-action-builder.ts.html +4 -4
  106. package/coverage/lcov-report/src/components/zd-grid/view-navigator.ts.html +2 -2
  107. package/coverage/lcov-report/src/components/zd-grid-editable/data-editor-with-add.ts.html +6 -6
  108. package/coverage/lcov-report/src/components/zd-grid-editable/data-editor.ts.html +7 -7
  109. package/coverage/lcov-report/src/components/zd-grid-editable/errors/index.html +1 -1
  110. package/coverage/lcov-report/src/components/zd-grid-editable/errors/index.ts.html +3 -3
  111. package/coverage/lcov-report/src/components/zd-grid-editable/errors/not-editing.ts.html +2 -2
  112. package/coverage/lcov-report/src/components/zd-grid-editable/errors/row-not-found.ts.html +2 -2
  113. package/coverage/lcov-report/src/components/zd-grid-editable/grid-column-editable.ts.html +3 -3
  114. package/coverage/lcov-report/src/components/zd-grid-editable/grid-editable-controller.ts.html +2 -2
  115. package/coverage/lcov-report/src/components/zd-grid-editable/grid-editable-events.ts.html +2 -2
  116. package/coverage/lcov-report/src/components/zd-grid-editable/grid-editable.ts.html +9 -9
  117. package/coverage/lcov-report/src/components/zd-grid-editable/index.html +1 -1
  118. package/coverage/lcov-report/src/components/zd-grid-editable/index.ts.html +9 -9
  119. package/coverage/lcov-report/src/components/zd-grid-editable/keymap-editing.ts.html +2 -2
  120. package/coverage/lcov-report/src/components/zd-header/header.ts.html +3 -3
  121. package/coverage/lcov-report/src/components/zd-header/index.html +1 -1
  122. package/coverage/lcov-report/src/components/zd-icon/icon.ts.html +3 -3
  123. package/coverage/lcov-report/src/components/zd-icon/index.html +1 -1
  124. package/coverage/lcov-report/src/components/zd-image/image.ts.html +3 -3
  125. package/coverage/lcov-report/src/components/zd-image/index.html +1 -1
  126. package/coverage/lcov-report/src/components/zd-increment/increment.ts.html +5 -5
  127. package/coverage/lcov-report/src/components/zd-increment/index.html +1 -1
  128. package/coverage/lcov-report/src/components/zd-input/index.html +1 -1
  129. package/coverage/lcov-report/src/components/zd-input/input-factory.ts.html +4 -4
  130. package/coverage/lcov-report/src/components/zd-input/input.ts.html +46 -46
  131. package/coverage/lcov-report/src/components/zd-iterable/column-not-found.ts.html +2 -2
  132. package/coverage/lcov-report/src/components/zd-iterable/column.ts.html +86 -86
  133. package/coverage/lcov-report/src/components/zd-iterable/conditions-manager.ts.html +4 -4
  134. package/coverage/lcov-report/src/components/zd-iterable/index.html +20 -20
  135. package/coverage/lcov-report/src/components/zd-iterable/iterable-columns-button-controller.ts.html +2 -2
  136. package/coverage/lcov-report/src/components/zd-iterable/iterable-columns-button.ts.html +6 -6
  137. package/coverage/lcov-report/src/components/zd-iterable/iterable-controller.ts.html +2 -2
  138. package/coverage/lcov-report/src/components/zd-iterable/iterable-page-component.ts.html +5 -5
  139. package/coverage/lcov-report/src/components/zd-iterable/iterable-page-info.ts.html +3 -3
  140. package/coverage/lcov-report/src/components/zd-iterable/iterable-page-size.ts.html +5 -5
  141. package/coverage/lcov-report/src/components/zd-iterable/iterable-pagination.ts.html +3 -3
  142. package/coverage/lcov-report/src/components/zd-iterable/iterable.ts.html +131 -17
  143. package/coverage/lcov-report/src/components/zd-iterable/search.ts.html +8 -8
  144. package/coverage/lcov-report/src/components/zd-iterable-component-render/index.html +1 -1
  145. package/coverage/lcov-report/src/components/zd-iterable-component-render/iterable-component-render.ts.html +5 -5
  146. package/coverage/lcov-report/src/components/zd-layout/index.html +1 -1
  147. package/coverage/lcov-report/src/components/zd-layout/layout.ts.html +3 -3
  148. package/coverage/lcov-report/src/components/zd-list/index.html +1 -1
  149. package/coverage/lcov-report/src/components/zd-list/item-not-found.ts.html +2 -2
  150. package/coverage/lcov-report/src/components/zd-list/list-group.ts.html +4 -4
  151. package/coverage/lcov-report/src/components/zd-list/list-item.ts.html +3 -3
  152. package/coverage/lcov-report/src/components/zd-list/list.ts.html +4 -4
  153. package/coverage/lcov-report/src/components/zd-loading/index.html +1 -1
  154. package/coverage/lcov-report/src/components/zd-loading/loading.ts.html +3 -3
  155. package/coverage/lcov-report/src/components/zd-login/index.html +1 -1
  156. package/coverage/lcov-report/src/components/zd-login/login-button.ts.html +4 -4
  157. package/coverage/lcov-report/src/components/zd-login/login.ts.html +3 -3
  158. package/coverage/lcov-report/src/components/zd-main/index.html +1 -1
  159. package/coverage/lcov-report/src/components/zd-main/main.ts.html +3 -3
  160. package/coverage/lcov-report/src/components/zd-master-detail/detail-not-found.ts.html +3 -3
  161. package/coverage/lcov-report/src/components/zd-master-detail/index.html +1 -1
  162. package/coverage/lcov-report/src/components/zd-master-detail/master-detail.ts.html +6 -6
  163. package/coverage/lcov-report/src/components/zd-master-detail/master-not-found.ts.html +3 -3
  164. package/coverage/lcov-report/src/components/zd-menu/index.html +1 -1
  165. package/coverage/lcov-report/src/components/zd-menu/menu-button.ts.html +4 -4
  166. package/coverage/lcov-report/src/components/zd-menu/menu-group.ts.html +3 -3
  167. package/coverage/lcov-report/src/components/zd-menu/menu-link.ts.html +3 -3
  168. package/coverage/lcov-report/src/components/zd-menu/menu-separator.ts.html +3 -3
  169. package/coverage/lcov-report/src/components/zd-menu/menu.ts.html +4 -4
  170. package/coverage/lcov-report/src/components/zd-modal/index.html +1 -1
  171. package/coverage/lcov-report/src/components/zd-modal/modal-close-button.ts.html +4 -4
  172. package/coverage/lcov-report/src/components/zd-modal/modal.ts.html +5 -5
  173. package/coverage/lcov-report/src/components/zd-month/index.html +9 -9
  174. package/coverage/lcov-report/src/components/zd-month/month.ts.html +43 -259
  175. package/coverage/lcov-report/src/components/zd-number-input/index.html +1 -1
  176. package/coverage/lcov-report/src/components/zd-number-input/number-input.ts.html +9 -9
  177. package/coverage/lcov-report/src/components/zd-password/index.html +1 -1
  178. package/coverage/lcov-report/src/components/zd-password/password.ts.html +7 -7
  179. package/coverage/lcov-report/src/components/zd-progress/index.html +1 -1
  180. package/coverage/lcov-report/src/components/zd-progress/progress.ts.html +3 -3
  181. package/coverage/lcov-report/src/components/zd-radio/index.html +1 -1
  182. package/coverage/lcov-report/src/components/zd-radio/radio.ts.html +6 -6
  183. package/coverage/lcov-report/src/components/zd-row/index.html +1 -1
  184. package/coverage/lcov-report/src/components/zd-row/row.ts.html +3 -3
  185. package/coverage/lcov-report/src/components/zd-select/index.html +1 -1
  186. package/coverage/lcov-report/src/components/zd-select/select.ts.html +9 -9
  187. package/coverage/lcov-report/src/components/zd-select-multiple/index.html +1 -1
  188. package/coverage/lcov-report/src/components/zd-select-multiple/select-multiple.ts.html +5 -5
  189. package/coverage/lcov-report/src/components/zd-svg-map/index.html +1 -1
  190. package/coverage/lcov-report/src/components/zd-svg-map/svg-map.ts.html +4 -4
  191. package/coverage/lcov-report/src/components/zd-switch/index.html +1 -1
  192. package/coverage/lcov-report/src/components/zd-switch/switch.ts.html +5 -5
  193. package/coverage/lcov-report/src/components/zd-table/index.html +1 -1
  194. package/coverage/lcov-report/src/components/zd-table/table.ts.html +4 -4
  195. package/coverage/lcov-report/src/components/zd-tabs/index.html +1 -1
  196. package/coverage/lcov-report/src/components/zd-tabs/tab-not-found.ts.html +2 -2
  197. package/coverage/lcov-report/src/components/zd-tabs/tab.ts.html +3 -3
  198. package/coverage/lcov-report/src/components/zd-tabs/tabs.ts.html +5 -5
  199. package/coverage/lcov-report/src/components/zd-tag/index.html +1 -1
  200. package/coverage/lcov-report/src/components/zd-tag/tag.ts.html +3 -3
  201. package/coverage/lcov-report/src/components/zd-text/index.html +1 -1
  202. package/coverage/lcov-report/src/components/zd-text/text.ts.html +3 -3
  203. package/coverage/lcov-report/src/components/zd-text-input/index.html +1 -1
  204. package/coverage/lcov-report/src/components/zd-text-input/text-input.ts.html +20 -20
  205. package/coverage/lcov-report/src/components/zd-textarea/index.html +1 -1
  206. package/coverage/lcov-report/src/components/zd-textarea/textarea.ts.html +5 -5
  207. package/coverage/lcov-report/src/components/zd-time/index.html +1 -1
  208. package/coverage/lcov-report/src/components/zd-time/time-format-selector.ts.html +2 -2
  209. package/coverage/lcov-report/src/components/zd-time/time.ts.html +10 -10
  210. package/coverage/lcov-report/src/components/zd-toggleable/index.html +1 -1
  211. package/coverage/lcov-report/src/components/zd-toggleable/toggleable.ts.html +3 -3
  212. package/coverage/lcov-report/src/components/zd-tooltip/index.html +1 -1
  213. package/coverage/lcov-report/src/components/zd-tooltip/tooltip.ts.html +3 -3
  214. package/coverage/lcov-report/src/components/zd-tree/index.html +1 -1
  215. package/coverage/lcov-report/src/components/zd-tree/tree.ts.html +7 -7
  216. package/coverage/lcov-report/src/components/zd-tree-grid/index.html +1 -1
  217. package/coverage/lcov-report/src/components/zd-tree-grid/index.ts.html +7 -7
  218. package/coverage/lcov-report/src/components/zd-tree-grid/iterable-tree.ts.html +2 -2
  219. package/coverage/lcov-report/src/components/zd-tree-grid/keymap-tree.ts.html +2 -2
  220. package/coverage/lcov-report/src/components/zd-tree-grid/tree-data-navigator.ts.html +3 -3
  221. package/coverage/lcov-report/src/components/zd-tree-grid/tree-data-selector.ts.html +3 -3
  222. package/coverage/lcov-report/src/components/zd-tree-grid/tree-grid.ts.html +11 -11
  223. package/coverage/lcov-report/src/error/delete-rows.ts.html +3 -3
  224. package/coverage/lcov-report/src/error/index.html +1 -1
  225. package/coverage/lcov-report/src/error/index.ts.html +4 -4
  226. package/coverage/lcov-report/src/error/non-initialized.ts.html +3 -3
  227. package/coverage/lcov-report/src/error/tek-grid-delete-rows.ts.html +130 -0
  228. package/coverage/lcov-report/src/error/teknisa-common-error.ts.html +109 -0
  229. package/coverage/lcov-report/src/error/zeedhi-error.ts.html +2 -2
  230. package/coverage/lcov-report/src/index.html +1 -1
  231. package/coverage/lcov-report/src/index.ts.html +9 -9
  232. package/coverage/lcov-report/src/services/index.html +1 -1
  233. package/coverage/lcov-report/src/services/index.ts.html +5 -5
  234. package/coverage/lcov-report/src/services/zd-alert/alert-queue.ts.html +3 -3
  235. package/coverage/lcov-report/src/services/zd-alert/alert-replace.ts.html +3 -3
  236. package/coverage/lcov-report/src/services/zd-alert/alert-service.ts.html +5 -5
  237. package/coverage/lcov-report/src/services/zd-alert/alert-stack.ts.html +3 -3
  238. package/coverage/lcov-report/src/services/zd-alert/index.html +1 -1
  239. package/coverage/lcov-report/src/services/zd-alert/index.ts.html +6 -6
  240. package/coverage/lcov-report/src/services/zd-dialog/dialog-service.ts.html +4 -4
  241. package/coverage/lcov-report/src/services/zd-dialog/index.html +1 -1
  242. package/coverage/lcov-report/src/services/zd-loading/index.html +1 -1
  243. package/coverage/lcov-report/src/services/zd-loading/loading-service.ts.html +2 -2
  244. package/coverage/lcov-report/src/services/zd-modal/index.html +1 -1
  245. package/coverage/lcov-report/src/services/zd-modal/modal-service.ts.html +5 -5
  246. package/coverage/lcov-report/src/utils/data-value-out/data-value-out.ts.html +3 -3
  247. package/coverage/lcov-report/src/utils/data-value-out/index.html +1 -1
  248. package/coverage/lcov-report/src/utils/data-value-out/index.ts.html +3 -3
  249. package/coverage/lcov-report/src/utils/datasource-searcher/datasource-searcher.ts.html +3 -3
  250. package/coverage/lcov-report/src/utils/datasource-searcher/index.html +1 -1
  251. package/coverage/lcov-report/src/utils/datasource-searcher/index.ts.html +3 -3
  252. package/coverage/lcov-report/src/utils/date-utils/date-utils.ts.html +166 -0
  253. package/coverage/lcov-report/src/utils/date-utils/index.html +116 -0
  254. package/coverage/lcov-report/src/utils/icons/icons.ts.html +6 -6
  255. package/coverage/lcov-report/src/utils/icons/index.html +1 -1
  256. package/coverage/lcov-report/src/utils/index.html +1 -1
  257. package/coverage/lcov-report/src/utils/index.ts.html +8 -8
  258. package/coverage/lcov-report/src/utils/is-filled-object/index.html +116 -0
  259. package/coverage/lcov-report/src/utils/is-filled-object/is-filled-object.ts.html +100 -0
  260. package/coverage/lcov-report/src/utils/is-nil.ts.html +94 -0
  261. package/coverage/lcov-report/src/utils/omit/index.html +1 -1
  262. package/coverage/lcov-report/src/utils/omit/omit.ts.html +2 -2
  263. package/coverage/lcov-report/src/utils/theme/index.html +1 -1
  264. package/coverage/lcov-report/src/utils/theme/theme.ts.html +4 -4
  265. package/coverage/lcov-report/src/utils/tree-data-structure/index.html +1 -1
  266. package/coverage/lcov-report/src/utils/tree-data-structure/index.ts.html +3 -3
  267. package/coverage/lcov-report/src/utils/tree-data-structure/tree-data-structure.ts.html +2 -2
  268. package/coverage/lcov-report/src/utils/unique-by/index.html +1 -1
  269. package/coverage/lcov-report/src/utils/unique-by/unique-by.ts.html +3 -3
  270. package/coverage/lcov-report/tests/unit/__helpers__/component-event-helper.ts.html +106 -0
  271. package/coverage/lcov-report/tests/unit/__helpers__/flush-promises-helper.ts.html +94 -0
  272. package/coverage/lcov-report/tests/unit/__helpers__/index.html +146 -0
  273. package/coverage/lcov-report/tests/unit/__helpers__/mock-http-get-helper.ts.html +172 -0
  274. package/coverage/lcov-report/tests/unit/components/zd-component/ComponentMock.ts.html +1 -1
  275. package/coverage/lcov-report/tests/unit/components/zd-component/index.html +1 -1
  276. package/coverage/lcov.info +1764 -1900
  277. package/dist/style.css +1 -1
  278. package/dist/zd-common.d.mts +7826 -0
  279. package/dist/zd-common.iife.min.js +11 -0
  280. package/dist/zd-common.mjs +12318 -0
  281. package/environments.json +6 -0
  282. package/jest.config.cjs +1 -0
  283. package/package.json +19 -12
  284. package/src/components/zd-date-input/date-input.ts +49 -168
  285. package/src/components/zd-date-input/utils.ts +17 -0
  286. package/src/components/zd-date-range/date-range.ts +111 -212
  287. package/src/components/zd-date-range/utils.ts +31 -0
  288. package/src/components/zd-frame/frame.ts +2 -2
  289. package/src/components/zd-grid-editable/data-editor-with-add.ts +1 -1
  290. package/src/components/zd-grid-editable/data-editor.ts +2 -2
  291. package/src/components/zd-iterable/iterable.ts +41 -3
  292. package/src/components/zd-month/month.ts +19 -91
  293. package/src/styles/_display.scss +3 -1
  294. package/src/styles/_elevation.scss +2 -1
  295. package/src/styles/_functions.scss +14 -11
  296. package/src/styles/_utilities.scss +67 -62
  297. package/src/styles/_variables.scss +17 -16
  298. package/src/styles/index.scss +5 -5
  299. package/src/utils/date-utils/date-utils.ts +27 -0
  300. package/src/utils/tree-data-structure/tree-data-structure.ts +1 -1
  301. package/tests/unit/components/zd-component/component.spec.ts +3 -2
  302. package/tests/unit/components/zd-date-input/date-input.spec.ts +36 -281
  303. package/tests/unit/components/zd-date-range/date-range.spec.ts +456 -393
  304. package/tests/unit/components/zd-grid/grid-column.spec.ts +1 -1
  305. package/tests/unit/components/zd-grid/grid.spec.ts +48 -35
  306. package/tests/unit/components/zd-grid-editable/data-editor.spec.ts +1 -1
  307. package/tests/unit/components/zd-grid-editable/grid-editable.spec.ts +1 -1
  308. package/tests/unit/components/zd-iterable/column.spec.ts +42 -0
  309. package/tests/unit/components/zd-month/month.spec.ts +7 -334
  310. package/tests/unit/components/zd-select/select.spec.ts +1 -2
  311. package/tests/unit/utils/mock-console.ts +18 -0
  312. package/tsdown.config.ts +74 -0
  313. package/.package.json +0 -45
  314. package/dist/types/components/index.d.ts +0 -151
  315. package/dist/types/components/zd-alert/alert.d.ts +0 -94
  316. package/dist/types/components/zd-alert/interfaces.d.ts +0 -18
  317. package/dist/types/components/zd-badge/badge.d.ts +0 -28
  318. package/dist/types/components/zd-badge/interfaces.d.ts +0 -10
  319. package/dist/types/components/zd-breadcrumbs/breadcrumbs.d.ts +0 -32
  320. package/dist/types/components/zd-breadcrumbs/interfaces.d.ts +0 -24
  321. package/dist/types/components/zd-button/button.d.ts +0 -89
  322. package/dist/types/components/zd-button/interfaces.d.ts +0 -48
  323. package/dist/types/components/zd-button-group/button-group.d.ts +0 -67
  324. package/dist/types/components/zd-button-group/interfaces.d.ts +0 -25
  325. package/dist/types/components/zd-card/card.d.ts +0 -152
  326. package/dist/types/components/zd-card/interfaces.d.ts +0 -40
  327. package/dist/types/components/zd-carousel/carousel.d.ts +0 -163
  328. package/dist/types/components/zd-carousel/interfaces.d.ts +0 -49
  329. package/dist/types/components/zd-checkbox/checkbox.d.ts +0 -12
  330. package/dist/types/components/zd-checkbox/interfaces.d.ts +0 -5
  331. package/dist/types/components/zd-checkbox-multiple/checkbox-multiple.d.ts +0 -39
  332. package/dist/types/components/zd-checkbox-multiple/interfaces.d.ts +0 -13
  333. package/dist/types/components/zd-chip/chip.d.ts +0 -60
  334. package/dist/types/components/zd-chip/interfaces.d.ts +0 -18
  335. package/dist/types/components/zd-code-viewer/code-viewer.d.ts +0 -86
  336. package/dist/types/components/zd-code-viewer/interfaces.d.ts +0 -13
  337. package/dist/types/components/zd-col/col.d.ts +0 -33
  338. package/dist/types/components/zd-col/interfaces.d.ts +0 -15
  339. package/dist/types/components/zd-collapse-card/collapse-card.d.ts +0 -56
  340. package/dist/types/components/zd-collapse-card/interfaces.d.ts +0 -14
  341. package/dist/types/components/zd-component/child-not-found.d.ts +0 -6
  342. package/dist/types/components/zd-component/component-render.d.ts +0 -16
  343. package/dist/types/components/zd-component/component.d.ts +0 -120
  344. package/dist/types/components/zd-component/interfaces.d.ts +0 -74
  345. package/dist/types/components/zd-container/container.d.ts +0 -45
  346. package/dist/types/components/zd-container/interfaces.d.ts +0 -12
  347. package/dist/types/components/zd-currency/currency.d.ts +0 -12
  348. package/dist/types/components/zd-currency/interfaces.d.ts +0 -6
  349. package/dist/types/components/zd-date-input/date-input.d.ts +0 -152
  350. package/dist/types/components/zd-date-input/interfaces.d.ts +0 -27
  351. package/dist/types/components/zd-date-range/date-range.d.ts +0 -158
  352. package/dist/types/components/zd-date-range/interfaces.d.ts +0 -18
  353. package/dist/types/components/zd-dialog/dialog.d.ts +0 -76
  354. package/dist/types/components/zd-dialog/interfaces.d.ts +0 -13
  355. package/dist/types/components/zd-divider/divider.d.ts +0 -20
  356. package/dist/types/components/zd-divider/interfaces.d.ts +0 -8
  357. package/dist/types/components/zd-dropdown/dropdown.d.ts +0 -81
  358. package/dist/types/components/zd-dropdown/interfaces.d.ts +0 -23
  359. package/dist/types/components/zd-footer/footer.d.ts +0 -80
  360. package/dist/types/components/zd-footer/interfaces.d.ts +0 -26
  361. package/dist/types/components/zd-form/form.d.ts +0 -174
  362. package/dist/types/components/zd-form/interfaces.d.ts +0 -36
  363. package/dist/types/components/zd-frame/frame.d.ts +0 -81
  364. package/dist/types/components/zd-frame/interfaces.d.ts +0 -23
  365. package/dist/types/components/zd-frame-page/frame-page.d.ts +0 -14
  366. package/dist/types/components/zd-frame-page/interfaces.d.ts +0 -4
  367. package/dist/types/components/zd-grid/data-navigator.d.ts +0 -12
  368. package/dist/types/components/zd-grid/data-selector.d.ts +0 -25
  369. package/dist/types/components/zd-grid/grid-column.d.ts +0 -47
  370. package/dist/types/components/zd-grid/grid-events.d.ts +0 -26
  371. package/dist/types/components/zd-grid/grid.d.ts +0 -85
  372. package/dist/types/components/zd-grid/index.d.ts +0 -11
  373. package/dist/types/components/zd-grid/interfaces.d.ts +0 -148
  374. package/dist/types/components/zd-grid/iterable-table.d.ts +0 -28
  375. package/dist/types/components/zd-grid/keymap-merger.d.ts +0 -26
  376. package/dist/types/components/zd-grid/keymap-navigation.d.ts +0 -6
  377. package/dist/types/components/zd-grid/table-action-builder.d.ts +0 -19
  378. package/dist/types/components/zd-grid/view-navigator.d.ts +0 -10
  379. package/dist/types/components/zd-grid-editable/data-editor-with-add.d.ts +0 -35
  380. package/dist/types/components/zd-grid-editable/data-editor.d.ts +0 -64
  381. package/dist/types/components/zd-grid-editable/errors/index.d.ts +0 -2
  382. package/dist/types/components/zd-grid-editable/errors/not-editing.d.ts +0 -6
  383. package/dist/types/components/zd-grid-editable/errors/row-not-found.d.ts +0 -6
  384. package/dist/types/components/zd-grid-editable/grid-column-editable.d.ts +0 -9
  385. package/dist/types/components/zd-grid-editable/grid-editable-controller.d.ts +0 -8
  386. package/dist/types/components/zd-grid-editable/grid-editable-events.d.ts +0 -32
  387. package/dist/types/components/zd-grid-editable/grid-editable.d.ts +0 -124
  388. package/dist/types/components/zd-grid-editable/index.d.ts +0 -8
  389. package/dist/types/components/zd-grid-editable/interfaces.d.ts +0 -66
  390. package/dist/types/components/zd-grid-editable/keymap-editing.d.ts +0 -7
  391. package/dist/types/components/zd-header/header.d.ts +0 -94
  392. package/dist/types/components/zd-header/interfaces.d.ts +0 -29
  393. package/dist/types/components/zd-icon/icon.d.ts +0 -55
  394. package/dist/types/components/zd-icon/interfaces.d.ts +0 -13
  395. package/dist/types/components/zd-image/image.d.ts +0 -73
  396. package/dist/types/components/zd-image/interfaces.d.ts +0 -17
  397. package/dist/types/components/zd-increment/increment.d.ts +0 -56
  398. package/dist/types/components/zd-increment/interfaces.d.ts +0 -9
  399. package/dist/types/components/zd-input/input-factory.d.ts +0 -6
  400. package/dist/types/components/zd-input/input.d.ts +0 -223
  401. package/dist/types/components/zd-input/interfaces.d.ts +0 -38
  402. package/dist/types/components/zd-iterable/column-not-found.d.ts +0 -6
  403. package/dist/types/components/zd-iterable/column.d.ts +0 -78
  404. package/dist/types/components/zd-iterable/conditions-manager.d.ts +0 -49
  405. package/dist/types/components/zd-iterable/interfaces.d.ts +0 -103
  406. package/dist/types/components/zd-iterable/iterable-columns-button-controller.d.ts +0 -9
  407. package/dist/types/components/zd-iterable/iterable-columns-button.d.ts +0 -35
  408. package/dist/types/components/zd-iterable/iterable-controller.d.ts +0 -8
  409. package/dist/types/components/zd-iterable/iterable-page-component.d.ts +0 -27
  410. package/dist/types/components/zd-iterable/iterable-page-info.d.ts +0 -7
  411. package/dist/types/components/zd-iterable/iterable-page-size.d.ts +0 -62
  412. package/dist/types/components/zd-iterable/iterable-pagination.d.ts +0 -28
  413. package/dist/types/components/zd-iterable/iterable.d.ts +0 -77
  414. package/dist/types/components/zd-iterable/search.d.ts +0 -31
  415. package/dist/types/components/zd-iterable-component-render/interfaces.d.ts +0 -34
  416. package/dist/types/components/zd-iterable-component-render/iterable-component-render.d.ts +0 -84
  417. package/dist/types/components/zd-layout/interfaces.d.ts +0 -7
  418. package/dist/types/components/zd-layout/layout.d.ts +0 -9
  419. package/dist/types/components/zd-list/interfaces.d.ts +0 -44
  420. package/dist/types/components/zd-list/item-not-found.d.ts +0 -6
  421. package/dist/types/components/zd-list/list-group.d.ts +0 -30
  422. package/dist/types/components/zd-list/list-item.d.ts +0 -46
  423. package/dist/types/components/zd-list/list.d.ts +0 -81
  424. package/dist/types/components/zd-loading/interfaces.d.ts +0 -7
  425. package/dist/types/components/zd-loading/loading.d.ts +0 -21
  426. package/dist/types/components/zd-login/interfaces.d.ts +0 -25
  427. package/dist/types/components/zd-login/login-button.d.ts +0 -50
  428. package/dist/types/components/zd-login/login.d.ts +0 -54
  429. package/dist/types/components/zd-main/interfaces.d.ts +0 -5
  430. package/dist/types/components/zd-main/main.d.ts +0 -7
  431. package/dist/types/components/zd-master-detail/detail-not-found.d.ts +0 -7
  432. package/dist/types/components/zd-master-detail/interfaces.d.ts +0 -10
  433. package/dist/types/components/zd-master-detail/master-detail.d.ts +0 -18
  434. package/dist/types/components/zd-master-detail/master-not-found.d.ts +0 -7
  435. package/dist/types/components/zd-menu/interfaces.d.ts +0 -68
  436. package/dist/types/components/zd-menu/menu-button.d.ts +0 -29
  437. package/dist/types/components/zd-menu/menu-group.d.ts +0 -61
  438. package/dist/types/components/zd-menu/menu-link.d.ts +0 -50
  439. package/dist/types/components/zd-menu/menu-separator.d.ts +0 -7
  440. package/dist/types/components/zd-menu/menu.d.ts +0 -199
  441. package/dist/types/components/zd-modal/interfaces.d.ts +0 -35
  442. package/dist/types/components/zd-modal/modal-close-button.d.ts +0 -28
  443. package/dist/types/components/zd-modal/modal.d.ts +0 -53
  444. package/dist/types/components/zd-month/interfaces.d.ts +0 -6
  445. package/dist/types/components/zd-month/month.d.ts +0 -33
  446. package/dist/types/components/zd-number-input/interfaces.d.ts +0 -8
  447. package/dist/types/components/zd-number-input/number-input.d.ts +0 -43
  448. package/dist/types/components/zd-password/interfaces.d.ts +0 -6
  449. package/dist/types/components/zd-password/password.d.ts +0 -17
  450. package/dist/types/components/zd-progress/interfaces.d.ts +0 -10
  451. package/dist/types/components/zd-progress/progress.d.ts +0 -41
  452. package/dist/types/components/zd-radio/interfaces.d.ts +0 -11
  453. package/dist/types/components/zd-radio/radio.d.ts +0 -35
  454. package/dist/types/components/zd-row/interfaces.d.ts +0 -13
  455. package/dist/types/components/zd-row/row.d.ts +0 -39
  456. package/dist/types/components/zd-select/interfaces.d.ts +0 -24
  457. package/dist/types/components/zd-select/select.d.ts +0 -238
  458. package/dist/types/components/zd-select-multiple/interfaces.d.ts +0 -18
  459. package/dist/types/components/zd-select-multiple/select-multiple.d.ts +0 -113
  460. package/dist/types/components/zd-svg-map/interfaces.d.ts +0 -26
  461. package/dist/types/components/zd-svg-map/svg-map.d.ts +0 -35
  462. package/dist/types/components/zd-switch/interfaces.d.ts +0 -7
  463. package/dist/types/components/zd-switch/switch.d.ts +0 -16
  464. package/dist/types/components/zd-table/interfaces.d.ts +0 -25
  465. package/dist/types/components/zd-table/table.d.ts +0 -42
  466. package/dist/types/components/zd-tabs/interfaces.d.ts +0 -40
  467. package/dist/types/components/zd-tabs/tab-not-found.d.ts +0 -11
  468. package/dist/types/components/zd-tabs/tab.d.ts +0 -57
  469. package/dist/types/components/zd-tabs/tabs.d.ts +0 -86
  470. package/dist/types/components/zd-tag/interfaces.d.ts +0 -7
  471. package/dist/types/components/zd-tag/tag.d.ts +0 -13
  472. package/dist/types/components/zd-text/interfaces.d.ts +0 -9
  473. package/dist/types/components/zd-text/text.d.ts +0 -8
  474. package/dist/types/components/zd-text-input/interfaces.d.ts +0 -23
  475. package/dist/types/components/zd-text-input/text-input.d.ts +0 -91
  476. package/dist/types/components/zd-textarea/interfaces.d.ts +0 -21
  477. package/dist/types/components/zd-textarea/textarea.d.ts +0 -71
  478. package/dist/types/components/zd-time/interfaces.d.ts +0 -22
  479. package/dist/types/components/zd-time/time-format-selector.d.ts +0 -8
  480. package/dist/types/components/zd-time/time.d.ts +0 -149
  481. package/dist/types/components/zd-toggleable/interfaces.d.ts +0 -6
  482. package/dist/types/components/zd-toggleable/toggleable.d.ts +0 -21
  483. package/dist/types/components/zd-tooltip/interfaces.d.ts +0 -18
  484. package/dist/types/components/zd-tooltip/tooltip.d.ts +0 -57
  485. package/dist/types/components/zd-tree/interfaces.d.ts +0 -107
  486. package/dist/types/components/zd-tree/tree.d.ts +0 -161
  487. package/dist/types/components/zd-tree-grid/index.d.ts +0 -6
  488. package/dist/types/components/zd-tree-grid/interfaces.d.ts +0 -35
  489. package/dist/types/components/zd-tree-grid/iterable-tree.d.ts +0 -10
  490. package/dist/types/components/zd-tree-grid/keymap-tree.d.ts +0 -7
  491. package/dist/types/components/zd-tree-grid/tree-data-navigator.d.ts +0 -10
  492. package/dist/types/components/zd-tree-grid/tree-data-selector.d.ts +0 -18
  493. package/dist/types/components/zd-tree-grid/tree-grid.d.ts +0 -119
  494. package/dist/types/error/delete-rows.d.ts +0 -7
  495. package/dist/types/error/index.d.ts +0 -3
  496. package/dist/types/error/non-initialized.d.ts +0 -7
  497. package/dist/types/error/zeedhi-error.d.ts +0 -6
  498. package/dist/types/index.d.ts +0 -6
  499. package/dist/types/services/index.d.ts +0 -4
  500. package/dist/types/services/zd-alert/alert-queue.d.ts +0 -13
  501. package/dist/types/services/zd-alert/alert-replace.d.ts +0 -18
  502. package/dist/types/services/zd-alert/alert-service.d.ts +0 -45
  503. package/dist/types/services/zd-alert/alert-stack.d.ts +0 -9
  504. package/dist/types/services/zd-alert/index.d.ts +0 -5
  505. package/dist/types/services/zd-alert/interfaces.d.ts +0 -6
  506. package/dist/types/services/zd-dialog/dialog-service.d.ts +0 -24
  507. package/dist/types/services/zd-loading/loading-service.d.ts +0 -17
  508. package/dist/types/services/zd-modal/modal-service.d.ts +0 -39
  509. package/dist/types/utils/data-value-out/data-value-out.d.ts +0 -5
  510. package/dist/types/utils/data-value-out/index.d.ts +0 -2
  511. package/dist/types/utils/data-value-out/interfaces.d.ts +0 -8
  512. package/dist/types/utils/datasource-searcher/datasource-searcher.d.ts +0 -6
  513. package/dist/types/utils/datasource-searcher/index.d.ts +0 -2
  514. package/dist/types/utils/datasource-searcher/interfaces.d.ts +0 -5
  515. package/dist/types/utils/icons/icons.d.ts +0 -24
  516. package/dist/types/utils/index.d.ts +0 -7
  517. package/dist/types/utils/omit/omit.d.ts +0 -11
  518. package/dist/types/utils/theme/theme.d.ts +0 -34
  519. package/dist/types/utils/tree-data-structure/index.d.ts +0 -2
  520. package/dist/types/utils/tree-data-structure/interfaces.d.ts +0 -30
  521. package/dist/types/utils/tree-data-structure/tree-data-structure.d.ts +0 -155
  522. package/dist/types/utils/unique-by/unique-by.d.ts +0 -3
  523. package/dist/zd-common.js +0 -13133
  524. package/dist/zd-common.min.js +0 -13133
  525. package/rollup.config.js +0 -27
  526. package/rollup.scss.config.js +0 -14
  527. package/tests/unit/utils/is-filled-object.spec.ts +0 -33
  528. package/tsconfig.build.json +0 -7
@@ -2,8 +2,9 @@ import { FormatterParserProvider, I18n, init } from '@zeedhi/core';
2
2
  import times from 'lodash.times';
3
3
  import { DateRange } from '../../../../src';
4
4
  import dayjs from 'dayjs';
5
- import utc from 'dayjs/plugin/utc';
5
+ import { mockI18n } from '../../__helpers__/mock-i18n';
6
6
 
7
+ mockI18n();
7
8
  jest.useFakeTimers();
8
9
 
9
10
  describe('DateRange', () => {
@@ -175,6 +176,7 @@ describe('DateRange', () => {
175
176
  displayFormat: 'MMMM DD, YYYY',
176
177
  inputFormat: 'DD MM YYYY',
177
178
  });
179
+ instance.focus(new Event('focus'), {});
178
180
  // set value directly
179
181
  instance.value = ['10/12/2020', '11/12/2020']; // DD/MM/YYYY
180
182
  expect(instance.value).toStrictEqual(['10/12/2020', '11/12/2020']);
@@ -207,69 +209,6 @@ describe('DateRange', () => {
207
209
  expect(instance.value).toStrictEqual(['8/12/2020', '10/12/2020']);
208
210
  });
209
211
 
210
- it('when initial mask and complex displayFormat, should behave the same when setting via value/displayValue', () => {
211
- const instance = new DateRange({
212
- name: 'date',
213
- component: 'Date',
214
- dateFormat: 'DD/MM/YYYY',
215
- displayFormat: 'MMMM DD, YYYY',
216
- mask: '## ## ####',
217
- });
218
- instance.value = ['08/12/2020', '09/12/2020']; // DD/MM/YYYY
219
- expect(instance.value).toStrictEqual(['08/12/2020', '09/12/2020']);
220
- expect(instance.displayValue).toBe('08 12 2020 ~ 09 12 2020');
221
-
222
- instance.displayValue = '09 12 2020 ~ 10 12 2020'; // DD MM YYYY
223
- expect(instance.value).toStrictEqual(['09/12/2020', '10/12/2020']);
224
- expect(instance.displayValue).toBe('09 12 2020 ~ 10 12 2020');
225
-
226
- instance.blur(new Event('blur'), {});
227
- expect(instance.value).toStrictEqual(['09/12/2020', '10/12/2020']);
228
- expect(instance.displayValue).toBe('December 09, 2020 ~ December 10, 2020');
229
- });
230
-
231
- it('when initial mask is defined and simple displayFormat, should use displayFormat as mask fallback', () => {
232
- const instance = new DateRange({
233
- name: 'date',
234
- component: 'Date',
235
- dateFormat: 'DD/MM/YYYY',
236
- displayFormat: 'MM/DD/YYYY',
237
- mask: '## ## ####',
238
- });
239
- instance.value = ['08/12/2020', '09/12/2020']; // DD/MM/YYYY
240
- expect(instance.value).toStrictEqual(['08/12/2020', '09/12/2020']);
241
- expect(instance.displayValue).toBe('12 08 2020 ~ 12 09 2020');
242
-
243
- instance.displayValue = '12 09 2020 ~ 12 10 2020'; // DD MM YYYY
244
- expect(instance.value).toStrictEqual(['09/12/2020', '10/12/2020']);
245
- expect(instance.displayValue).toBe('12 09 2020 ~ 12 10 2020');
246
-
247
- instance.blur(new Event('blur'), {});
248
- expect(instance.value).toStrictEqual(['09/12/2020', '10/12/2020']);
249
- expect(instance.displayValue).toBe('12/09/2020 ~ 12/10/2020');
250
- });
251
-
252
- it('should display value with no delimiters', () => {
253
- const instance = new DateRange({
254
- name: 'date',
255
- component: 'Date',
256
- dateFormat: 'DD/MM/YYYY',
257
- displayFormat: 'MMDDYYYY',
258
- mask: '## ## ####',
259
- });
260
- instance.value = ['08/12/2020', '09/12/2020']; // DD/MM/YYYY
261
- expect(instance.value).toStrictEqual(['08/12/2020', '09/12/2020']);
262
- expect(instance.displayValue).toBe('12 08 2020 ~ 12 09 2020');
263
-
264
- instance.displayValue = '12 09 2020 ~ 12 10 2020'; // DD MM YYYY
265
- expect(instance.value).toStrictEqual(['09/12/2020', '10/12/2020']);
266
- expect(instance.displayValue).toBe('12 09 2020 ~ 12 10 2020');
267
-
268
- instance.blur(new Event('blur'), {});
269
- expect(instance.value).toStrictEqual(['09/12/2020', '10/12/2020']);
270
- expect(instance.displayValue).toBe('12092020 ~ 12102020');
271
- });
272
-
273
212
  it('should use inputFormat on focus and use displayFormat on blur', () => {
274
213
  const instance = new DateRange({
275
214
  name: 'date',
@@ -278,6 +217,7 @@ describe('DateRange', () => {
278
217
  displayFormat: 'MMMM DD, YYYY',
279
218
  inputFormat: 'MM/DD/YYYY',
280
219
  });
220
+ instance.focus(new Event('focus'), {});
281
221
  // set value directly
282
222
  instance.value = ['10/12/2020', '11/12/2020']; // DD/MM/YYYY
283
223
  expect(instance.value).toStrictEqual(['10/12/2020', '11/12/2020']);
@@ -304,6 +244,7 @@ describe('DateRange', () => {
304
244
  displayFormat: 'MMMM DD, YYYY',
305
245
  inputFormat: 'MM/DD/YYYY',
306
246
  });
247
+ instance.focus(new Event('focus'), {});
307
248
  instance.value = ['08/12/2020', '09/12/2020']; // DD/MM/YYYY
308
249
  expect(instance.value).toStrictEqual(['08/12/2020', '09/12/2020']);
309
250
  expect(instance.displayValue).toBe('12/08/2020 ~ 12/09/2020');
@@ -352,6 +293,21 @@ describe('DateRange', () => {
352
293
  expect(instance.displayValue).toBe('');
353
294
  });
354
295
 
296
+ it('should call change event when clearing the value', () => {
297
+ const changeFn = jest.fn();
298
+ const instance = new DateRange({
299
+ name: 'date',
300
+ component: 'DateRange',
301
+ events: {
302
+ change: changeFn,
303
+ },
304
+ });
305
+ instance.setDateValue('01-01-2020 ~ 01-02-2020');
306
+ changeFn.mockClear();
307
+ instance.setDateValue('');
308
+ expect(changeFn).toHaveBeenCalled();
309
+ });
310
+
355
311
  it('shouldn\'t update displayValue when the value passed is invalid', () => {
356
312
  const instance = new DateRange({ name: 'date', component: 'DateRange' });
357
313
  instance.setDateValue('01-01-2020 ~ 01-02-2020');
@@ -423,6 +379,40 @@ describe('DateRange', () => {
423
379
  expect(instance.isValidDate('07/13/2023', 'MM/DD/YYYY')).toBeFalsy();
424
380
  expect(instance.isValidDate('07/01/2023', 'MM/DD/YYYY')).toBeFalsy();
425
381
  });
382
+
383
+ it('should return false for a completely invalid date format', () => {
384
+ const instance = new DateRange({ name: 'date', component: 'DateRange' });
385
+ // This should hit the !isValidFormat check at the beginning of isValidDate
386
+ expect(instance.isValidDate('not-a-date', 'YYYY-MM-DD')).toBeFalsy();
387
+ });
388
+
389
+ it('should return false for a not allowed date', () => {
390
+ const instance = new DateRange({
391
+ name: 'date',
392
+ component: 'DateRange',
393
+ dateFormat: 'YYYY-MM-DD',
394
+ allowedDates: (date: string) => date !== '2023-07-11',
395
+ });
396
+
397
+ // Date is valid, but not allowed
398
+ expect(instance.isValidDate('2023-07-11', 'YYYY-MM-DD')).toBeFalsy();
399
+ // Other date should be valid and allowed
400
+ expect(instance.isValidDate('2023-07-12', 'YYYY-MM-DD')).toBeTruthy();
401
+ });
402
+
403
+ it('should return true for allowed date with array', () => {
404
+ const instance = new DateRange({
405
+ name: 'date',
406
+ component: 'DateRange',
407
+ dateFormat: 'YYYY-MM-DD',
408
+ allowedDates: ['2025-01-01'],
409
+ });
410
+
411
+ // Date is valid and allowed
412
+ expect(instance.isValidDate('2025-01-01', 'YYYY-MM-DD')).toBeTruthy();
413
+ // Date is valid but not allowed
414
+ expect(instance.isValidDate('2025-01-02', 'YYYY-MM-DD')).toBeFalsy();
415
+ });
426
416
  });
427
417
 
428
418
  describe('isoRangeValue', () => {
@@ -560,104 +550,211 @@ describe('DateRange', () => {
560
550
  expect(eventFn).toHaveBeenCalled();
561
551
  expect(instance.value).toStrictEqual([]);
562
552
  });
553
+ });
563
554
 
564
- it('should remove date mask if initial mask is set and value is valid', () => {
555
+ describe('focus()', () => {
556
+ it('should call super.focus', () => {
565
557
  const eventFn = jest.fn();
566
558
  const instance = new DateRange({
567
559
  name: 'date',
568
560
  component: 'ZdDateRange',
569
- mask: '## ## ####',
561
+ events: {
562
+ focus: eventFn,
563
+ },
570
564
  });
571
565
 
572
- instance.value = ['12 21 2020', '12 22 2020'];
573
- expect(eventFn).not.toHaveBeenCalled();
566
+ const event = new Event('focus');
567
+ instance.focus(event, {});
568
+ expect(eventFn).toHaveBeenCalled();
569
+ });
574
570
 
575
- instance.events = {
576
- blur: eventFn,
577
- };
578
- instance.blur(new Event('blur'), {});
571
+ it('should not update displayValue when inputFormat is not set', () => {
572
+ const instance = new DateRange({
573
+ name: 'date',
574
+ component: 'ZdDateRange',
575
+ dateFormat: 'MM-DD-YYYY',
576
+ displayFormat: 'DD/MM/YYYY',
577
+ // No inputFormat
578
+ });
579
579
 
580
- expect(eventFn).toHaveBeenCalled();
581
- expect(instance.mask).toBe<string>('## ## #### ~ ## ## ####');
580
+ instance.value = ['01-15-2020'];
581
+ const originalDisplayValue = instance.displayValue;
582
+
583
+ instance.focus(new Event('focus'), {});
584
+
585
+ // Display value should not change since inputFormat is not set
586
+ expect(instance.displayValue).toBe(originalDisplayValue);
582
587
  });
583
- });
584
588
 
585
- describe('focus()', () => {
586
- it('if initial mask and value is set, should assign initialMask to mask', () => {
587
- const eventFn = jest.fn();
589
+ it('should not update displayValue when value is not set', () => {
588
590
  const instance = new DateRange({
589
591
  name: 'date',
590
592
  component: 'ZdDateRange',
591
- mask: '## ## ####',
593
+ dateFormat: 'MM-DD-YYYY',
594
+ displayFormat: 'DD/MM/YYYY',
595
+ inputFormat: 'YYYY-MM-DD',
592
596
  });
593
597
 
594
- instance.mask = '';
595
- instance.setDateValue('02-28-2020');
598
+ // No value set
599
+ instance.value = [];
600
+ const originalDisplayValue = instance.displayValue;
596
601
 
597
- expect(eventFn).not.toHaveBeenCalled();
602
+ instance.focus(new Event('focus'), {});
603
+
604
+ // Display value should not change since value is not set
605
+ expect(instance.displayValue).toBe(originalDisplayValue);
606
+ });
607
+
608
+ it('should not update displayValue when first date is invalid', () => {
609
+ const instance = new DateRange({
610
+ name: 'date',
611
+ component: 'ZdDateRange',
612
+ dateFormat: 'MM-DD-YYYY',
613
+ displayFormat: 'DD/MM/YYYY',
614
+ inputFormat: 'YYYY-MM-DD',
615
+ });
616
+
617
+ // Set invalid first date
618
+ instance.value = ['invalid-date'];
619
+ const originalDisplayValue = instance.displayValue;
598
620
 
599
- instance.events = {
600
- focus: eventFn,
601
- };
602
621
  instance.focus(new Event('focus'), {});
622
+
623
+ // Display value should not change since first date is invalid
624
+ expect(instance.displayValue).toBe(originalDisplayValue);
625
+ });
603
626
 
604
- jest.runAllTimers();
627
+ it('should not update displayValue when second date is invalid', () => {
628
+ const instance = new DateRange({
629
+ name: 'date',
630
+ component: 'ZdDateRange',
631
+ dateFormat: 'MM-DD-YYYY',
632
+ displayFormat: 'DD/MM/YYYY',
633
+ inputFormat: 'YYYY-MM-DD',
634
+ });
605
635
 
606
- expect(eventFn).toHaveBeenCalled();
636
+ // Set valid first date but invalid second date
637
+ instance.value = ['01-15-2020', 'invalid-date'];
638
+ const originalDisplayValue = instance.displayValue;
607
639
 
608
- expect(instance.mask).toBe('## ## #### ~ ## ## ####');
640
+ instance.focus(new Event('focus'), {});
641
+
642
+ // Display value should not change since second date is invalid
643
+ expect(instance.displayValue).toBe(originalDisplayValue);
609
644
  });
610
645
 
611
- it('should change displayValue', () => {
646
+ it('should update displayValue with only first date when second date is not present', () => {
612
647
  const instance = new DateRange({
613
648
  name: 'date',
614
649
  component: 'ZdDateRange',
615
- mask: '## ## ####',
650
+ dateFormat: 'MM-DD-YYYY',
651
+ displayFormat: 'DD/MM/YYYY',
652
+ inputFormat: 'YYYY-MM-DD',
616
653
  });
617
654
 
618
- instance.value = [];
655
+ instance.value = ['01-15-2020'];
656
+
619
657
  instance.focus(new Event('focus'), {});
620
- jest.runAllTimers();
621
- expect(instance.displayValue).toBe('');
658
+
659
+ // Display value should be formatted with inputFormat (only first date)
660
+ expect(instance.displayValue).toBe('2020-01-15');
661
+ });
662
+
663
+ it('should update displayValue with both dates when both are present', () => {
664
+ const instance = new DateRange({
665
+ name: 'date',
666
+ component: 'ZdDateRange',
667
+ dateFormat: 'MM-DD-YYYY',
668
+ displayFormat: 'DD/MM/YYYY',
669
+ inputFormat: 'YYYY-MM-DD',
670
+ });
671
+
672
+ instance.value = ['01-15-2020', '01-20-2020'];
622
673
 
623
- instance.value = ['01-01-2022'];
624
674
  instance.focus(new Event('focus'), {});
625
- jest.runAllTimers();
626
- expect(instance.displayValue).toBe('01-01-2022');
675
+
676
+ // Display value should be formatted with inputFormat (both dates)
677
+ expect(instance.displayValue).toBe('2020-01-15 ~ 2020-01-20');
678
+ });
679
+
680
+ it('should use displayFormat as fallback when inputFormat is set but format is needed', () => {
681
+ const instance = new DateRange({
682
+ name: 'date',
683
+ component: 'ZdDateRange',
684
+ dateFormat: 'MM-DD-YYYY',
685
+ displayFormat: 'DD/MM/YYYY',
686
+ inputFormat: 'YYYY-MM-DD',
687
+ });
688
+
689
+ instance.value = ['01-15-2020', '01-20-2020'];
627
690
 
628
- instance.value = ['01-01-2022', '02-02-2022'];
629
691
  instance.focus(new Event('focus'), {});
630
- jest.runAllTimers();
631
- expect(instance.displayValue).toBe('01-01-2022 ~ 02-02-2022');
692
+
693
+ // The format used should be inputFormat (since it's set)
694
+ expect(instance.displayValue).toBe('2020-01-15 ~ 2020-01-20');
632
695
  });
633
696
 
634
- it('if initial mask or value is not set, should not assign initialMask to mask', () => {
635
- const eventFn = jest.fn();
697
+ it('should handle empty second value in array', () => {
636
698
  const instance = new DateRange({
637
699
  name: 'date',
638
700
  component: 'ZdDateRange',
701
+ dateFormat: 'MM-DD-YYYY',
639
702
  displayFormat: 'DD/MM/YYYY',
703
+ inputFormat: 'YYYY-MM-DD',
640
704
  });
641
705
 
642
- instance.setDateValue('21-12-2020');
706
+ // First date is set, second is empty string
707
+ instance.value = ['01-15-2020', ''];
643
708
 
644
- expect(eventFn).not.toHaveBeenCalled();
709
+ instance.focus(new Event('focus'), {});
710
+
711
+ // Display value should show only first date
712
+ expect(instance.displayValue).toBe('2020-01-15');
713
+ });
714
+
715
+ it('should preserve splitter character when updating displayValue', () => {
716
+ const instance = new DateRange({
717
+ name: 'date',
718
+ component: 'ZdDateRange',
719
+ dateFormat: 'MM-DD-YYYY',
720
+ displayFormat: 'DD/MM/YYYY',
721
+ inputFormat: 'YYYY-MM-DD',
722
+ splitter: ' <-> ',
723
+ });
724
+
725
+ instance.value = ['01-15-2020', '01-20-2020'];
645
726
 
646
- instance.events = {
647
- focus: eventFn,
648
- };
649
727
  instance.focus(new Event('focus'), {});
728
+
729
+ // Display value should use custom splitter
730
+ expect(instance.displayValue).toBe('2020-01-15 <-> 2020-01-20');
731
+ });
732
+ });
650
733
 
651
- expect(eventFn).toHaveBeenCalled();
652
- expect(instance.updateMask()).toBe<string>('##/##/#### ~ ##/##/####');
653
- expect(instance.mask).toBe<string>('##/##/#### ~ ##/##/####');
734
+ describe('isValidDateArray', () => {
735
+ it('should return false if values array has less than 2 items', () => {
736
+ const instance = new DateRange({ name: 'date', component: 'DateRange' });
737
+ expect(instance.isValidDateArray('YYYY-MM-DD', ['2025-01-01'])).toBe(false);
738
+ });
739
+
740
+ it('should return true if all dates in array are valid', () => {
741
+ const instance = new DateRange({ name: 'date', component: 'DateRange' });
742
+ expect(instance.isValidDateArray('YYYY-MM-DD', ['2025-01-01', '2025-01-10'])).toBe(true);
743
+ });
744
+
745
+ it('should return false if any date in array is invalid', () => {
746
+ const instance = new DateRange({ name: 'date', component: 'DateRange' });
747
+ expect(instance.isValidDateArray('YYYY-MM-DD', ['2025-01-01', 'invalid-date'])).toBe(false);
654
748
  });
655
749
  });
656
750
 
657
751
  describe('FormatterParserProvider', () => {
752
+ const formatterFn = FormatterParserProvider.getFormatter('ZdDateRange');
753
+ const parserFn = FormatterParserProvider.getParser('ZdDateRange');
754
+
658
755
  it('should return formatter function', () => {
659
- const formatterFn = FormatterParserProvider.getFormatter('ZdDateRange');
660
756
  expect(formatterFn).toBeInstanceOf(Function);
757
+ expect(parserFn).toBeInstanceOf(Function);
661
758
  });
662
759
 
663
760
  it('should format date', () => {
@@ -682,66 +779,12 @@ describe('DateRange', () => {
682
779
  expect(formatted).toBe('20/12');
683
780
  });
684
781
 
685
- it('when value is valid and mask is set, should get masked value', () => {
686
- const formatterFn = FormatterParserProvider.getFormatter('ZdDateRange');
687
-
688
- const formatted = formatterFn(['20/12/2020'], {
689
- dateFormat: 'DD/MM/YYYY',
690
- displayFormat: 'YYYY-MM-DD',
691
- mask: '##/##/#### ~ ##/##/####',
692
- initialMask: '##/##/#### ~ ##/##/####',
693
- unitMask: '##/##/####',
694
- splitter: ' ~ ',
695
- });
696
-
697
- expect(formatted).toBe('20/12/2020');
698
- });
699
-
700
782
  it('should return parser function', () => {
701
783
  const parserFn = FormatterParserProvider.getParser('ZdDateRange');
702
784
  expect(parserFn).toBeInstanceOf(Function);
703
785
  });
704
786
 
705
- it('when formatted value is masked, should remove mask and parse using displayFormat mask', () => {
706
- const instance = new DateRange({
707
- name: 'datePicker',
708
- component: 'ZdDateRange',
709
- dateFormat: 'DD/MM/YYYY',
710
- displayFormat: 'YYYY-MM-DD',
711
- mask: '####/##/##',
712
- });
713
- const parsed = instance.parser('2019/12/20');
714
-
715
- expect(parsed).toStrictEqual(['20/12/2019']);
716
- });
717
-
718
- it('when formatted value is masked and can\'t be masked using displayFmt mask, should parse using dateFmt mask', () => {
719
- const instance = new DateRange({
720
- name: 'datePicker',
721
- component: 'ZdDateRange',
722
- dateFormat: 'DD/MM/YYYY',
723
- displayFormat: 'YYYY MMMM, Do',
724
- mask: '##-##-####',
725
- });
726
- const parsed = instance.parser('20-12-2019');
727
-
728
- expect(parsed).toStrictEqual(['20/12/2019']);
729
- });
730
-
731
- it('when formatted value is masked and can\'t use neither displayFmt or dateFmt mask, should not parse', () => {
732
- const parserFn = FormatterParserProvider.getParser('ZdDateRange');
733
-
734
- const parsed = parserFn('20-12-2019', {
735
- dateFormat: 'Do/MM/YYYY',
736
- displayFormat: 'YYYY MMMM, Do',
737
- mask: '##-##-####',
738
- });
739
-
740
- expect(parsed).toStrictEqual(['20-12-2019']);
741
- });
742
-
743
787
  it('should parse date', () => {
744
- const parserFn = FormatterParserProvider.getParser('ZdDateRange');
745
788
  expect(parserFn('12-20-2019')).toStrictEqual(['12-20-2019']);
746
789
  expect(parserFn('20-12-2019')).toStrictEqual(['20-12-2019']);
747
790
  expect(parserFn('aaa')).toStrictEqual(['aaa']);
@@ -754,6 +797,15 @@ describe('DateRange', () => {
754
797
  dateFormat: 'DD/MM/YYYY',
755
798
  displayFormat: 'YYYY-MM-DD',
756
799
  })).toStrictEqual(['20/12/2019']);
800
+ expect(parserFn('06-06-2019 ~ ')).toStrictEqual(['06-06-2019']);
801
+ });
802
+
803
+ it('when value is not following inputFormat, should not parse it', () => {
804
+ expect(parserFn('December 06, 2020', { inputFormat: 'DD MM YYYY', isFocused: true })).toEqual(['December 06, 2020'])
805
+ });
806
+
807
+ it('when value is invalid, should not parse it', () => {
808
+ expect(parserFn('99 99 9999', { inputFormat: 'DD MM YYYY', isFocused: true })).toEqual(['99 99 9999'])
757
809
  });
758
810
  });
759
811
 
@@ -804,98 +856,8 @@ describe('DateRange', () => {
804
856
  });
805
857
  });
806
858
 
807
- describe('updateMask', () => {
808
- it('should not change mask when initial mask is empty string', () => {
809
- const date = new DateRange({
810
- name: 'date',
811
- component: 'ZdDateRange',
812
- mask: '',
813
- });
814
-
815
- expect(date.mask).toEqual('');
816
- expect(date.updateMask()).toEqual('');
817
- });
818
-
819
- it('when no mask is set, should get mask based on displayFormat', () => {
820
- const date = new DateRange({
821
- name: 'date',
822
- component: 'ZdDateRange',
823
- displayFormat: 'DD MM YYYY',
824
- });
825
-
826
- expect(date.updateMask()).toBe('## ## #### ~ ## ## ####');
827
- expect(date.mask).toBe('## ## #### ~ ## ## ####');
828
- });
829
-
830
- it('when initial mask is undefined but mask is set, should get mask based on displayFormat', () => {
831
- const date = new DateRange({
832
- name: 'date',
833
- component: 'ZdDateRange',
834
- displayFormat: 'DD MM YYYY',
835
- });
836
-
837
- date.mask = '#';
838
-
839
- expect(date.updateMask()).toBe('## ## #### ~ ## ## ####');
840
- expect(date.mask).toBe('## ## #### ~ ## ## ####');
841
- });
842
-
843
- it('when initial mask is set, should not get mask based on displayFormat', () => {
844
- const date = new DateRange({
845
- name: 'date',
846
- component: 'ZdDateRange',
847
- mask: '##-##-####',
848
- displayFormat: 'DD MM YYYY',
849
- });
850
-
851
- expect(date.updateMask()).toBe('##-##-#### ~ ##-##-####');
852
- expect(date.mask).toBe('##-##-#### ~ ##-##-####');
853
- });
854
-
855
- it('when initial mask is set and value is valid, should not remove masks', () => {
856
- const date = new DateRange({
857
- name: 'date',
858
- component: 'ZdDateRange',
859
- dateFormat: 'DD/MM/YYYY',
860
- mask: '##-##-####',
861
- displayFormat: 'DD MM YYYY',
862
- });
863
-
864
- expect(date.updateMask()).toBe('##-##-#### ~ ##-##-####');
865
- expect(date.mask).toBe('##-##-#### ~ ##-##-####');
866
-
867
- date.value = ['17/11/2020'];
868
-
869
- expect(date.updateMask()).toBe('##-##-#### ~ ##-##-####');
870
- expect(date.mask).toBe('##-##-#### ~ ##-##-####');
871
- });
872
-
873
- it('when initial mask is set and value is set but invalid, should not change mask', () => {
874
- const date = new DateRange({
875
- name: 'date',
876
- component: 'ZdDateRange',
877
- dateFormat: 'DD/MM/YYYY',
878
- mask: '##-##-####',
879
- displayFormat: 'DD MM YYYY',
880
- });
881
-
882
- expect(date.updateMask()).toBe('##-##-#### ~ ##-##-####');
883
- expect(date.mask).toBe('##-##-#### ~ ##-##-####');
884
-
885
- date.value = ['17/11'];
886
-
887
- expect(date.updateMask()).toBe('##-##-#### ~ ##-##-####');
888
- expect(date.mask).toBe('##-##-#### ~ ##-##-####');
889
- });
890
- });
891
-
892
859
  describe('updateHelperHint', () => {
893
- beforeEach(() => {
894
- I18n.init({});
895
- });
896
-
897
860
  it('should update hint for CURRENT_WEEK', () => {
898
- I18n.instance.language = 'pt-BR'; // simula português
899
861
  const instance = new DateRange({
900
862
  name: 'date',
901
863
  component: 'ZdDateRange',
@@ -904,7 +866,7 @@ describe('DateRange', () => {
904
866
  });
905
867
 
906
868
  instance.updateHelperHint('CURRENT_WEEK');
907
- expect(instance.hint).toBe('Semana Atual');
869
+ expect(instance.hint).toBe('DATE_HELPERVALUE_CURRENT_WEEK');
908
870
  expect(instance.persistentHint).toBeTruthy();
909
871
 
910
872
  instance.change();
@@ -913,7 +875,6 @@ describe('DateRange', () => {
913
875
  });
914
876
 
915
877
  it('should update hint for CURRENT_MONTH', () => {
916
- I18n.instance.language = 'pt-BR'; // simula português
917
878
  const instance = new DateRange({
918
879
  name: 'date',
919
880
  component: 'ZdDateRange',
@@ -922,7 +883,7 @@ describe('DateRange', () => {
922
883
  });
923
884
 
924
885
  instance.updateHelperHint('CURRENT_MONTH');
925
- expect(instance.hint).toBe('Mês Atual');
886
+ expect(instance.hint).toBe('DATE_HELPERVALUE_CURRENT_MONTH');
926
887
  expect(instance.persistentHint).toBeTruthy();
927
888
  });
928
889
 
@@ -940,186 +901,288 @@ describe('DateRange', () => {
940
901
  });
941
902
  });
942
903
 
943
- describe('getMaskValue', () => {
944
- it('should return mask', () => {
945
- const instance = new DateRange({
946
- name: 'datePicker',
947
- component: 'ZdDateRange',
948
- dateFormat: 'DD/MM/YYYY',
949
- displayFormat: 'YYYY-MM-DD',
950
- mask: '####/##/##',
904
+ describe('DateRange Tests', () => {
905
+ let dateInput: DateRange;
906
+
907
+ beforeEach(() => {
908
+ dateInput = new DateRange({ name: 'date', component: 'DateInput' });
909
+ });
910
+
911
+ describe('setNativeDate', () => {
912
+ it('should handle one date', () => {
913
+ const testDate = new Date(2025, 0, 15);
914
+ dateInput.dateFormat = 'YYYY-MM-DD';
915
+ dateInput.displayFormat = 'DD/MM/YYYY';
916
+ dateInput.setNativeDate([testDate]);
917
+
918
+ expect(dateInput.value).toEqual(['2025-01-15']);
919
+ expect(dateInput.displayValue).toBe('15/01/2025');
951
920
  });
952
921
 
953
- const maskValue = instance.getMaskValue();
954
- expect(maskValue.length).toBe(23);
955
- expect(maskValue[0]).toEqual(/\d/);
922
+ it('should handle two dates', () => {
923
+ const start = new Date(2025, 0, 1);
924
+ const end = new Date(2025, 0, 5);
925
+ dateInput.dateFormat = 'YYYY-MM-DD';
926
+ dateInput.displayFormat = 'DD/MM/YYYY';
927
+ dateInput.setNativeDate([start, end]);
956
928
 
957
- instance.mask = () => '##/##/## ~ ##/##/##';
958
- const maskValue2 = instance.getMaskValue();
959
- expect(maskValue2.length).toBe(19);
960
- expect(maskValue2[0]).toEqual('#');
929
+ expect(dateInput.value).toEqual(['2025-01-01', '2025-01-05']);
930
+ expect(dateInput.displayValue).toBe('01/01/2025 ~ 05/01/2025');
931
+ });
961
932
 
962
- instance.value = ['01/01/2022', '02/02/2022'];
963
- const maskValue21 = instance.getMaskValue();
964
- expect(maskValue21.length).toBe(19);
965
- expect(maskValue21[0]).toEqual('#');
933
+ it('should handle more than two dates, using extremities', () => {
934
+ const start = new Date(2025, 0, 1);
935
+ const middle = new Date(2025, 0, 3);
936
+ const end = new Date(2025, 0, 5);
937
+ dateInput.dateFormat = 'YYYY-MM-DD';
938
+ dateInput.displayFormat = 'DD/MM/YYYY';
939
+ dateInput.setNativeDate([start, middle, end]);
966
940
 
967
- instance.mask = '';
968
- const maskValue3 = instance.getMaskValue();
969
- expect(maskValue3.length).toBe(0);
941
+ expect(dateInput.value).toEqual(['2025-01-01', '2025-01-05']);
942
+ });
970
943
 
971
- instance.mask = [/\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, ' ~ ', /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/];
972
- const maskValue4 = instance.getMaskValue();
973
- expect(maskValue4.length).toBe(17);
974
- });
975
- });
944
+ it('should handle an empty array', () => {
945
+ dateInput.value = ['2024-12-31'];
946
+ dateInput.setNativeDate([]);
947
+ expect(dateInput.value).toEqual([]);
948
+ });
976
949
 
977
- describe('DateRange Tests', () => {
978
- let dateInput: DateRange;
950
+ it('should handle a single date without an end date', () => {
951
+ const start = new Date(2025, 0, 1);
952
+ dateInput.dateFormat = 'YYYY-MM-DD';
953
+ dateInput.displayFormat = 'DD/MM/YYYY';
954
+ dateInput.allowedDates = (date) => date === '2025-01-01';
979
955
 
980
- beforeEach(() => {
981
- dateInput = new DateRange({ name: 'date', component: 'DateInput' });
982
- });
956
+ dateInput.setNativeDate([start]);
983
957
 
984
- describe('setNativeDate', () => {
985
- it('should handle one date', () => {
986
- const testDate = new Date(2025, 0, 15);
987
- dateInput.dateFormat = 'YYYY-MM-DD';
988
- dateInput.displayFormat = 'DD/MM/YYYY';
989
- dateInput.setNativeDate([testDate]);
958
+ expect(dateInput.value).toEqual(['2025-01-01']);
959
+ });
990
960
 
991
- expect(dateInput.value).toEqual(['2025-01-15']);
992
- expect(dateInput.displayValue).toBe('15/01/2025');
993
- });
961
+ it('should not set date if any date in range is not allowed', () => {
962
+ const start = new Date(2025, 0, 1);
963
+ const end = new Date(2025, 0, 5);
964
+ dateInput.dateFormat = 'YYYY-MM-DD';
965
+ dateInput.displayFormat = 'DD/MM/YYYY';
966
+ dateInput.allowedDates = (date) => date !== '2025-01-03';
994
967
 
995
- it('should handle two dates', () => {
996
- const start = new Date(2025, 0, 1);
997
- const end = new Date(2025, 0, 5);
998
- dateInput.dateFormat = 'YYYY-MM-DD';
999
- dateInput.displayFormat = 'DD/MM/YYYY';
1000
- dateInput.setNativeDate([start, end]);
968
+ dateInput.value = ['2024-12-31'];
969
+ dateInput.setNativeDate([start, end]);
1001
970
 
1002
- expect(dateInput.value).toEqual(['2025-01-01', '2025-01-05']);
1003
- expect(dateInput.displayValue).toBe('01/01/2025 ~ 05/01/2025');
971
+ // Value should not change
972
+ expect(dateInput.value).toEqual(['2024-12-31']);
973
+ });
974
+
975
+ it('should handle null or undefined dates to cover fallback', () => {
976
+ dateInput.value = ['2025-01-01'];
977
+
978
+ // Test with null to cover `(dates || [])`
979
+ dateInput.setNativeDate(null as any);
980
+ expect(dateInput.value).toEqual([]);
981
+
982
+ // Reset and test with undefined
983
+ dateInput.value = ['2025-01-01'];
984
+ dateInput.setNativeDate(undefined as any);
985
+ expect(dateInput.value).toEqual([]);
986
+ });
1004
987
  });
1005
- });
1006
988
 
1007
- describe('getNativeDate', () => {
1008
- it('should return Date objects array for set value', () => {
1009
- const testDate = new Date(2025, 4, 22);
1010
- dateInput.dateFormat = 'YYYY-MM-DD';
1011
- dateInput.setNativeDate([testDate]);
989
+ describe('getNativeDate', () => {
990
+ it('should return Date objects array for set value', () => {
991
+ const testDate = new Date(2025, 4, 22);
992
+ dateInput.dateFormat = 'YYYY-MM-DD';
993
+ dateInput.setNativeDate([testDate]);
1012
994
 
1013
- const nativeDates = dateInput.getNativeDate();
1014
- expect(nativeDates[0]).toEqual(testDate);
995
+ const nativeDates = dateInput.getNativeDate();
996
+ expect(nativeDates[0]).toEqual(testDate);
997
+ });
998
+
999
+ it('should return empty array when no value is set', () => {
1000
+ dateInput.value = '';
1001
+ const nativeDates = dateInput.getNativeDate();
1002
+ expect(nativeDates).toEqual([]);
1003
+ });
1015
1004
  });
1016
1005
 
1017
- it('should return empty array when no value is set', () => {
1018
- dateInput.value = '';
1019
- const nativeDates = dateInput.getNativeDate();
1020
- expect(nativeDates).toEqual([]);
1006
+ describe('getAllowedDates', () => {
1007
+ it('should return true if allowedDates is not set', () => {
1008
+ const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1009
+ expect(instance.getAllowedDates(new Date(2025, 0, 1))).toBe(true);
1010
+ });
1011
+
1012
+ it('should return false if allowedDates is an empty array', () => {
1013
+ const instance = new DateRange({ name: 'date', component: 'ZdDateRange', allowedDates: [] });
1014
+ expect(instance.getAllowedDates(new Date(2025, 0, 1))).toBe(false);
1015
+ });
1016
+
1017
+ it('should return true for allowed date with function', () => {
1018
+ const instance = new DateRange({
1019
+ name: 'date',
1020
+ component: 'ZdDateRange',
1021
+ dateFormat: 'YYYY-MM-DD',
1022
+ allowedDates: (date) => date === '2025-01-01',
1023
+ });
1024
+ expect(instance.getAllowedDates(new Date(2025, 0, 1))).toBe(true);
1025
+ expect(instance.getAllowedDates(new Date(2025, 0, 2))).toBe(false);
1026
+ });
1027
+
1028
+ it('should return true for allowed date with array', () => {
1029
+ const instance = new DateRange({
1030
+ name: 'date',
1031
+ component: 'ZdDateRange',
1032
+ dateFormat: 'YYYY-MM-DD',
1033
+ allowedDates: ['2025-01-01'],
1034
+ });
1035
+ expect(instance.getAllowedDates(new Date(2025, 0, 1))).toBe(true);
1036
+ expect(instance.getAllowedDates(new Date(2025, 0, 2))).toBe(false);
1037
+ });
1021
1038
  });
1022
1039
  });
1023
- });
1024
1040
 
1025
- describe('DateRange edge cases', () => {
1026
- let dateInput: DateRange;
1041
+ describe('DateRange edge cases', () => {
1042
+ let dateInput: DateRange;
1027
1043
 
1028
- beforeEach(() => {
1029
- dateInput = new DateRange({ name: 'date', component: 'DateInput' });
1030
- });
1044
+ beforeEach(() => {
1045
+ dateInput = new DateRange({ name: 'date', component: 'DateInput' });
1046
+ });
1031
1047
 
1032
- it('should handle empty array and set value to empty', () => {
1033
- dateInput.setNativeDate([]);
1034
- expect(dateInput.value).toEqual([]);
1048
+ it('should handle empty array and set value to empty', () => {
1049
+ dateInput.setNativeDate([]);
1050
+ expect(dateInput.value).toEqual([]);
1051
+ });
1035
1052
  });
1036
- });
1037
1053
 
1054
+ describe('DateRange getExtremities coverage', () => {
1055
+ it('should cover empty array case in getExtremities by setting value', () => {
1056
+ const dateInput = new DateRange({ name: 'date', component: 'DateInput' });
1057
+ dateInput.value = ['2025-01-01']; // Define um valor inicial
1038
1058
 
1039
- dayjs.extend(utc);
1059
+ // Atribuir um array vazio ao 'value' aciona o setter,
1060
+ // que indiretamente causa a chamada de 'getExtremities' com um array vazio.
1061
+ dateInput.value = [];
1040
1062
 
1041
- describe('DateRange map format line 493 coverage', () => {
1042
- it('should format dates and handle nulls internally', () => {
1043
- const dateInput = new DateRange({
1044
- name: 'date',
1045
- component: 'DateInput',
1046
- dateFormat: 'YYYY-MM-DD',
1063
+ expect(dateInput.value).toEqual([]);
1047
1064
  });
1065
+ });
1048
1066
 
1049
- const start = new Date(2025, 0, 1); // local 1 Jan 2025
1050
- const end = new Date(2025, 0, 5); // local 5 Jan 2025
1067
+ describe('DateRange map format line 494 coverage', () => {
1068
+ it('should format dates and handle nulls internally', () => {
1069
+ const dateInput = new DateRange({
1070
+ name: 'date',
1071
+ component: 'DateInput',
1072
+ dateFormat: 'YYYY-MM-DD',
1073
+ });
1051
1074
 
1052
- dateInput.setNativeDate([start, end]);
1075
+ const start = new Date(2025, 0, 1);
1076
+ const end = new Date(2025, 0, 5);
1053
1077
 
1054
- expect(dateInput.value).toEqual([
1055
- dayjs(start).format('YYYY-MM-DD'),
1056
- dayjs(end).format('YYYY-MM-DD'),
1057
- ]);
1078
+ // Simula dateObject interno com null no meio
1079
+ (dateInput as any).dateObject = [dayjs(start), null, dayjs(end)];
1058
1080
 
1059
- // apenas uma data
1060
- dateInput.setNativeDate([start]);
1061
- expect(dateInput.value).toEqual([dayjs(start).format('YYYY-MM-DD')]);
1081
+ const formatted = (dateInput as any).dateObject.map(
1082
+ (obj: any) => obj?.format('YYYY-MM-DD') || ''
1083
+ );
1062
1084
 
1063
- // array vazio
1064
- dateInput.setNativeDate([]);
1065
- expect(dateInput.value).toEqual([]);
1085
+ expect(formatted).toEqual([
1086
+ dayjs(start).format('YYYY-MM-DD'),
1087
+ '',
1088
+ dayjs(end).format('YYYY-MM-DD'),
1089
+ ]);
1090
+ });
1066
1091
  });
1067
- });
1068
1092
 
1069
- describe('DateRange map format line 494 coverage', () => {
1070
- it('should format dates and handle nulls internally', () => {
1071
- const dateInput = new DateRange({
1072
- name: 'date',
1073
- component: 'DateInput',
1074
- dateFormat: 'YYYY-MM-DD',
1093
+ describe('DateRange.getNativeDate', () => {
1094
+ it('should return formatted dates for valid dayjs objects', () => {
1095
+ const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1096
+ const dayjsArray = [dayjs('2025-01-01'), dayjs('2025-01-05')];
1097
+ (instance as any).dateObject = dayjsArray;
1098
+ const nativeDates = dayjsArray.map((date) => date.toDate());
1099
+ expect(instance.getNativeDate()).toEqual(nativeDates);
1075
1100
  });
1076
1101
 
1077
- const start = new Date(2025, 0, 1);
1078
- const end = new Date(2025, 0, 5);
1079
-
1080
- // Simula dateObject interno com null no meio
1081
- (dateInput as any).dateObject = [dayjs(start), null, dayjs(end)];
1102
+ it('should skip null values', () => {
1103
+ const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1104
+ const dayjsArray = [dayjs('2025-01-01'), null, dayjs('2025-01-05')];
1105
+ (instance as any).dateObject = dayjsArray;
1106
+ const nativeDates = dayjsArray.filter((date) => (date !== null)).map((date) => date!.toDate());
1107
+ expect(instance.getNativeDate()).toEqual(nativeDates);
1108
+ });
1082
1109
 
1083
- const formatted = (dateInput as any).dateObject.map(
1084
- (obj: any) => obj?.format('YYYY-MM-DD') || ''
1085
- );
1110
+ it('should return empty array if all values are null', () => {
1111
+ const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1112
+ (instance as any).dateObject = [null, null];
1113
+ expect(instance.getNativeDate()).toEqual([]);
1114
+ });
1086
1115
 
1087
- expect(formatted).toEqual([
1088
- dayjs(start).format('YYYY-MM-DD'),
1089
- '',
1090
- dayjs(end).format('YYYY-MM-DD'),
1091
- ]);
1116
+ it('should return empty array if dateObject is empty', () => {
1117
+ const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1118
+ (instance as any).dateObject = [];
1119
+ expect(instance.getNativeDate()).toEqual([]);
1120
+ });
1092
1121
  });
1093
- });
1094
1122
 
1095
- describe('DateRange.getNativeDate', () => {
1096
- it('should return formatted dates for valid dayjs objects', () => {
1097
- const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1098
- const dayjsArray = [dayjs('2025-01-01'), dayjs('2025-01-05')];
1099
- (instance as any).dateObject = dayjsArray;
1100
- const nativeDates = dayjsArray.map((date) => date.toDate());
1101
- expect(instance.getNativeDate()).toEqual(nativeDates);
1102
- });
1123
+ describe('DateRange value setter edge cases', () => {
1124
+ it('should handle null and undefined values correctly', () => {
1125
+ const dateInput = new DateRange({ name: 'date', component: 'DateInput' });
1126
+ dateInput.value = ['2025-01-01'];
1127
+
1128
+ dateInput.value = null;
1129
+ expect(dateInput.value).toEqual([]);
1103
1130
 
1104
- it('should skip null values', () => {
1105
- const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1106
- const dayjsArray = [dayjs('2025-01-01'), null, dayjs('2025-01-05')];
1107
- (instance as any).dateObject = dayjsArray;
1108
- const nativeDates = dayjsArray.filter((date) => (date !== null)).map((date) => date.toDate());
1109
- expect(instance.getNativeDate()).toEqual(nativeDates);
1131
+ dateInput.value = undefined;
1132
+ expect(dateInput.value).toEqual([]);
1133
+ });
1110
1134
  });
1111
1135
 
1112
- it('should return empty array if all values are null', () => {
1113
- const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1114
- (instance as any).dateObject = [null, null];
1115
- expect(instance.getNativeDate()).toEqual([]);
1136
+ describe('DateRange getExtremities coverage', () => {
1137
+ it('should cover empty array case in getExtremities by setting value to empty array', () => {
1138
+ const dateInput = new DateRange({ name: 'date', component: 'DateInput' });
1139
+ // Define um valor inicial para garantir que a mudança seja detectada
1140
+ dateInput.value = ['2025-01-01'];
1141
+
1142
+ // Atribui um array vazio diretamente ao 'value'.
1143
+ // Isso aciona o setter que define 'dateObject' como [], cobrindo o caso de borda em 'getExtremities'.
1144
+ dateInput.value = [];
1145
+
1146
+ expect(dateInput.value).toEqual([]);
1147
+ });
1116
1148
  });
1117
1149
 
1118
- it('should return empty array if dateObject is empty', () => {
1119
- const instance = new DateRange({ name: 'date', component: 'ZdDateRange' });
1120
- (instance as any).dateObject = [];
1121
- expect(instance.getNativeDate()).toEqual([]);
1150
+ describe('getMask()', () => {
1151
+ let dateRangeInstance!: DateRange;
1152
+
1153
+ beforeEach(() => {
1154
+ dateRangeInstance = new DateRange({
1155
+ name: 'date-range',
1156
+ component: 'DateRange',
1157
+ });
1158
+ });
1159
+
1160
+ it('should return an empty string if isFocused is false, regardless of format properties', () => {
1161
+ dateRangeInstance.isFocused = false;
1162
+ dateRangeInstance.inputFormat = 'YYYY-MM-DD';
1163
+ dateRangeInstance.displayFormat = 'DD/MM/YYYY';
1164
+ expect(dateRangeInstance.getMask()).toBe('');
1165
+ });
1166
+
1167
+ it('when isFocused is true, should return masked inputFormat if inputFormat is a non-empty string', () => {
1168
+ dateRangeInstance.isFocused = true;
1169
+ dateRangeInstance.inputFormat = 'YYYY-MM-DD';
1170
+ dateRangeInstance.displayFormat = 'MM/DD/YY'; // This should be ignored
1171
+ expect(dateRangeInstance.getMask()).toBe('####-##-## ~ ####-##-##');
1172
+ });
1173
+
1174
+ it('when isFocused is true, should return masked displayFormat if inputFormat is undefined and displayFormat is a non-empty string', () => {
1175
+ dateRangeInstance.isFocused = true;
1176
+ dateRangeInstance.inputFormat = undefined;
1177
+ dateRangeInstance.displayFormat = 'DD.MM.YYYY';
1178
+ expect(dateRangeInstance.getMask()).toBe('##.##.#### ~ ##.##.####');
1179
+ });
1180
+
1181
+ it('when isFocused is true, should return an empty string if both inputFormat and displayFormat are undefined', () => {
1182
+ dateRangeInstance.isFocused = true;
1183
+ dateRangeInstance.inputFormat = undefined;
1184
+ dateRangeInstance.displayFormat = '';
1185
+ expect(dateRangeInstance.getMask()).toBe('');
1186
+ });
1122
1187
  });
1123
1188
  });
1124
-
1125
- });