primekit 1.0.11 → 1.0.13

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 (246) hide show
  1. package/README.md +25 -25
  2. package/esm2022/lib/lib/atomix-alert/atomix-alert.component.mjs +76 -0
  3. package/esm2022/lib/lib/atomix-autocomplete/atomix-autocomplete.component.mjs +108 -0
  4. package/esm2022/lib/lib/atomix-button/atomix-button.component.mjs +49 -0
  5. package/esm2022/lib/lib/atomix-button/atomix-button.models.mjs +2 -0
  6. package/esm2022/lib/lib/atomix-calendar/atomix-calendar.component.mjs +90 -0
  7. package/esm2022/lib/lib/atomix-card/atomix-card.component.mjs +24 -0
  8. package/esm2022/lib/lib/atomix-confirmation-dialog/atomix-confirmation-dialog.component.mjs +28 -0
  9. package/esm2022/lib/lib/atomix-daterange-calendar/atomix-daterange-calendar.component.mjs +717 -0
  10. package/esm2022/lib/lib/atomix-divider/atomix-divider.component.mjs +27 -0
  11. package/esm2022/lib/lib/atomix-dropdown/atomix-dropdown.component.mjs +105 -0
  12. package/esm2022/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.component.mjs +38 -0
  13. package/esm2022/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.models.mjs +2 -0
  14. package/esm2022/lib/lib/atomix-form/atomix-form-autocomplete/atomix-form-autocomplete.component.mjs +67 -0
  15. package/esm2022/lib/lib/atomix-form/atomix-form-calendar/atomix-form-calendar.component.mjs +59 -0
  16. package/esm2022/lib/lib/atomix-form/atomix-form-checkbox/atomix-form-checkbox.component.mjs +48 -0
  17. package/esm2022/lib/lib/atomix-form/atomix-form-chips/atomix-form-chips.component.mjs +54 -0
  18. package/esm2022/lib/lib/atomix-form/atomix-form-chips/form.chips.models.mjs +2 -0
  19. package/esm2022/lib/lib/atomix-form/atomix-form-dropdown/atomix-form-dropdown.component.mjs +70 -0
  20. package/esm2022/lib/lib/atomix-form/atomix-form-input-component/atomix-form-input-component.component.mjs +80 -0
  21. package/esm2022/lib/lib/atomix-form/atomix-form-inputmask-component/atomix-form-inputmask-component.component.mjs +48 -0
  22. package/esm2022/lib/lib/atomix-form/atomix-form-password-component/atomix-form-password-component.component.mjs +48 -0
  23. package/esm2022/lib/lib/atomix-form/atomix-form-radio-button/atomix-radio-button.component.mjs +46 -0
  24. package/esm2022/lib/lib/atomix-form/atomix-form-textarea/atomix-form-textarea.component.mjs +46 -0
  25. package/esm2022/lib/lib/atomix-input/atomix-input.component.mjs +94 -0
  26. package/esm2022/lib/lib/atomix-input-switch/atomix-input-switch.component.mjs +85 -0
  27. package/esm2022/lib/lib/atomix-loading-overlay/atomix-loading-overlay.component.mjs +44 -0
  28. package/esm2022/lib/lib/atomix-messages/messages.component.mjs +33 -0
  29. package/esm2022/lib/lib/atomix-pagination/atomix-pagination.component.mjs +48 -0
  30. package/esm2022/lib/lib/atomix-radio-button/atomix-radio-button.component.mjs +50 -0
  31. package/esm2022/lib/lib/atomix-search-dropdown/atomix-search-dropdown.component.mjs +149 -0
  32. package/esm2022/lib/lib/atomix-select-button/atomix-select-button-models.mjs +2 -0
  33. package/esm2022/lib/lib/atomix-select-button/atomix-select-button.component.mjs +25 -0
  34. package/esm2022/lib/lib/atomix-snackbar/atomix-snackbar.component.mjs +29 -0
  35. package/esm2022/lib/lib/atomix-spinner/atomix-spinner.component.mjs +24 -0
  36. package/esm2022/lib/lib/atomix-steps/atomix-steps.component.mjs +41 -0
  37. package/esm2022/lib/lib/atomix-tabMenu/atomix-tabMenu.component.mjs +51 -0
  38. package/esm2022/lib/lib/atomix-table/atomix-table.component.mjs +454 -0
  39. package/esm2022/lib/lib/atomix-table/atomix-table.models.mjs +2 -0
  40. package/esm2022/lib/lib/atomix-tag/atomix-tag.component.mjs +24 -0
  41. package/esm2022/lib/lib/utils/prime-icons.util.mjs +10 -0
  42. package/esm2022/lib/primekit.component.mjs +11 -0
  43. package/esm2022/lib/primekit.module.mjs +322 -0
  44. package/esm2022/lib/primekit.service.mjs +14 -0
  45. package/esm2022/primekit.mjs +5 -0
  46. package/esm2022/public-api.mjs +44 -0
  47. package/fesm2022/primekit.mjs +3158 -0
  48. package/fesm2022/primekit.mjs.map +1 -0
  49. package/index.d.ts +5 -0
  50. package/lib/lib/atomix-alert/atomix-alert.component.d.ts +22 -0
  51. package/lib/lib/atomix-autocomplete/atomix-autocomplete.component.d.ts +34 -0
  52. package/lib/lib/atomix-button/atomix-button.component.d.ts +19 -0
  53. package/{src/lib/lib/atomix-button/atomix-button.models.ts → lib/lib/atomix-button/atomix-button.models.d.ts} +2 -2
  54. package/lib/lib/atomix-calendar/atomix-calendar.component.d.ts +27 -0
  55. package/lib/lib/atomix-card/atomix-card.component.d.ts +9 -0
  56. package/lib/lib/atomix-confirmation-dialog/atomix-confirmation-dialog.component.d.ts +12 -0
  57. package/lib/lib/atomix-daterange-calendar/atomix-daterange-calendar.component.d.ts +79 -0
  58. package/lib/lib/atomix-divider/atomix-divider.component.d.ts +12 -0
  59. package/lib/lib/atomix-dropdown/atomix-dropdown.component.d.ts +50 -0
  60. package/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.component.d.ts +15 -0
  61. package/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.models.d.ts +11 -0
  62. package/lib/lib/atomix-form/atomix-form-autocomplete/atomix-form-autocomplete.component.d.ts +25 -0
  63. package/lib/lib/atomix-form/atomix-form-calendar/atomix-form-calendar.component.d.ts +23 -0
  64. package/lib/lib/atomix-form/atomix-form-checkbox/atomix-form-checkbox.component.d.ts +18 -0
  65. package/lib/lib/atomix-form/atomix-form-chips/atomix-form-chips.component.d.ts +19 -0
  66. package/lib/lib/atomix-form/atomix-form-chips/form.chips.models.d.ts +5 -0
  67. package/lib/lib/atomix-form/atomix-form-dropdown/atomix-form-dropdown.component.d.ts +25 -0
  68. package/lib/lib/atomix-form/atomix-form-input-component/atomix-form-input-component.component.d.ts +28 -0
  69. package/lib/lib/atomix-form/atomix-form-inputmask-component/atomix-form-inputmask-component.component.d.ts +17 -0
  70. package/lib/lib/atomix-form/atomix-form-password-component/atomix-form-password-component.component.d.ts +17 -0
  71. package/lib/lib/atomix-form/atomix-form-radio-button/atomix-radio-button.component.d.ts +19 -0
  72. package/lib/lib/atomix-form/atomix-form-textarea/atomix-form-textarea.component.d.ts +17 -0
  73. package/lib/lib/atomix-input/atomix-input.component.d.ts +29 -0
  74. package/lib/lib/atomix-input-switch/atomix-input-switch.component.d.ts +30 -0
  75. package/lib/lib/atomix-loading-overlay/atomix-loading-overlay.component.d.ts +16 -0
  76. package/lib/lib/atomix-messages/messages.component.d.ts +13 -0
  77. package/lib/lib/atomix-pagination/atomix-pagination.component.d.ts +19 -0
  78. package/lib/lib/atomix-radio-button/atomix-radio-button.component.d.ts +15 -0
  79. package/lib/lib/atomix-search-dropdown/atomix-search-dropdown.component.d.ts +60 -0
  80. package/{src/lib/lib/atomix-select-button/atomix-select-button-models.ts → lib/lib/atomix-select-button/atomix-select-button-models.d.ts} +4 -4
  81. package/lib/lib/atomix-select-button/atomix-select-button.component.d.ts +12 -0
  82. package/lib/lib/atomix-snackbar/atomix-snackbar.component.d.ts +12 -0
  83. package/lib/lib/atomix-spinner/atomix-spinner.component.d.ts +9 -0
  84. package/lib/lib/atomix-steps/atomix-steps.component.d.ts +19 -0
  85. package/lib/lib/atomix-tabMenu/atomix-tabMenu.component.d.ts +19 -0
  86. package/lib/lib/atomix-table/atomix-table.component.d.ts +119 -0
  87. package/lib/lib/atomix-table/atomix-table.models.d.ts +43 -0
  88. package/lib/lib/atomix-tag/atomix-tag.component.d.ts +9 -0
  89. package/lib/lib/utils/prime-icons.util.d.ts +3 -0
  90. package/lib/primekit.component.d.ts +5 -0
  91. package/lib/primekit.module.d.ts +72 -0
  92. package/lib/primekit.service.d.ts +6 -0
  93. package/package.json +28 -15
  94. package/{src/public-api.ts → public-api.d.ts} +38 -47
  95. package/src/assets/images/empty-table.svg +25 -25
  96. package/ng-package.json +0 -8
  97. package/src/lib/lib/atomix-alert/atomix-alert.component.css +0 -67
  98. package/src/lib/lib/atomix-alert/atomix-alert.component.html +0 -7
  99. package/src/lib/lib/atomix-alert/atomix-alert.component.spec.ts +0 -154
  100. package/src/lib/lib/atomix-alert/atomix-alert.component.ts +0 -75
  101. package/src/lib/lib/atomix-autocomplete/atomix-autocomplete.component.html +0 -35
  102. package/src/lib/lib/atomix-autocomplete/atomix-autocomplete.component.scss +0 -72
  103. package/src/lib/lib/atomix-autocomplete/atomix-autocomplete.component.spec.ts +0 -210
  104. package/src/lib/lib/atomix-autocomplete/atomix-autocomplete.component.ts +0 -70
  105. package/src/lib/lib/atomix-button/atomix-button.component.css +0 -70
  106. package/src/lib/lib/atomix-button/atomix-button.component.html +0 -20
  107. package/src/lib/lib/atomix-button/atomix-button.component.spec.ts +0 -135
  108. package/src/lib/lib/atomix-button/atomix-button.component.ts +0 -28
  109. package/src/lib/lib/atomix-calendar/atomix-calendar.component.css +0 -5
  110. package/src/lib/lib/atomix-calendar/atomix-calendar.component.html +0 -20
  111. package/src/lib/lib/atomix-calendar/atomix-calendar.component.spec.ts +0 -145
  112. package/src/lib/lib/atomix-calendar/atomix-calendar.component.ts +0 -71
  113. package/src/lib/lib/atomix-card/atomix-card.component.css +0 -4
  114. package/src/lib/lib/atomix-card/atomix-card.component.html +0 -3
  115. package/src/lib/lib/atomix-card/atomix-card.component.spec.ts +0 -63
  116. package/src/lib/lib/atomix-card/atomix-card.component.ts +0 -13
  117. package/src/lib/lib/atomix-confirmation-dialog/atomix-confirmation-dialog.component.css +0 -12
  118. package/src/lib/lib/atomix-confirmation-dialog/atomix-confirmation-dialog.component.html +0 -9
  119. package/src/lib/lib/atomix-confirmation-dialog/atomix-confirmation-dialog.component.spec.ts +0 -63
  120. package/src/lib/lib/atomix-confirmation-dialog/atomix-confirmation-dialog.component.ts +0 -22
  121. package/src/lib/lib/atomix-daterange-calendar/atomix-daterange-calendar.component.html +0 -233
  122. package/src/lib/lib/atomix-daterange-calendar/atomix-daterange-calendar.component.scss +0 -266
  123. package/src/lib/lib/atomix-daterange-calendar/atomix-daterange-calendar.component.spec.ts +0 -1465
  124. package/src/lib/lib/atomix-daterange-calendar/atomix-daterange-calendar.component.ts +0 -717
  125. package/src/lib/lib/atomix-divider/atomix-divider.component.css +0 -0
  126. package/src/lib/lib/atomix-divider/atomix-divider.component.html +0 -7
  127. package/src/lib/lib/atomix-divider/atomix-divider.component.spec.ts +0 -91
  128. package/src/lib/lib/atomix-divider/atomix-divider.component.ts +0 -17
  129. package/src/lib/lib/atomix-dropdown/atomix-dropdown.component.css +0 -25
  130. package/src/lib/lib/atomix-dropdown/atomix-dropdown.component.html +0 -37
  131. package/src/lib/lib/atomix-dropdown/atomix-dropdown.component.spec.ts +0 -178
  132. package/src/lib/lib/atomix-dropdown/atomix-dropdown.component.ts +0 -89
  133. package/src/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.component.css +0 -0
  134. package/src/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.component.html +0 -0
  135. package/src/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.component.spec.ts +0 -128
  136. package/src/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.component.ts +0 -42
  137. package/src/lib/lib/atomix-dynamic-dialog/atomix-dynamic-dialog.models.ts +0 -12
  138. package/src/lib/lib/atomix-form/atomix-form-autocomplete/atomix-form-autocomplete.component.html +0 -20
  139. package/src/lib/lib/atomix-form/atomix-form-autocomplete/atomix-form-autocomplete.component.scss +0 -7
  140. package/src/lib/lib/atomix-form/atomix-form-autocomplete/atomix-form-autocomplete.component.spec.ts +0 -169
  141. package/src/lib/lib/atomix-form/atomix-form-autocomplete/atomix-form-autocomplete.component.ts +0 -41
  142. package/src/lib/lib/atomix-form/atomix-form-calendar/atomix-form-calendar.component.html +0 -21
  143. package/src/lib/lib/atomix-form/atomix-form-calendar/atomix-form-calendar.component.scss +0 -7
  144. package/src/lib/lib/atomix-form/atomix-form-calendar/atomix-form-calendar.component.spec.ts +0 -142
  145. package/src/lib/lib/atomix-form/atomix-form-calendar/atomix-form-calendar.component.ts +0 -32
  146. package/src/lib/lib/atomix-form/atomix-form-checkbox/atomix-form-checkbox.component.html +0 -13
  147. package/src/lib/lib/atomix-form/atomix-form-checkbox/atomix-form-checkbox.component.scss +0 -14
  148. package/src/lib/lib/atomix-form/atomix-form-checkbox/atomix-form-checkbox.component.spec.ts +0 -112
  149. package/src/lib/lib/atomix-form/atomix-form-checkbox/atomix-form-checkbox.component.ts +0 -28
  150. package/src/lib/lib/atomix-form/atomix-form-chips/atomix-form-chips.component.html +0 -20
  151. package/src/lib/lib/atomix-form/atomix-form-chips/atomix-form-chips.component.scss +0 -3
  152. package/src/lib/lib/atomix-form/atomix-form-chips/atomix-form-chips.component.spec.ts +0 -153
  153. package/src/lib/lib/atomix-form/atomix-form-chips/atomix-form-chips.component.ts +0 -28
  154. package/src/lib/lib/atomix-form/atomix-form-chips/form.chips.models.ts +0 -5
  155. package/src/lib/lib/atomix-form/atomix-form-dropdown/atomix-form-dropdown.component.html +0 -24
  156. package/src/lib/lib/atomix-form/atomix-form-dropdown/atomix-form-dropdown.component.scss +0 -15
  157. package/src/lib/lib/atomix-form/atomix-form-dropdown/atomix-form-dropdown.component.spec.ts +0 -156
  158. package/src/lib/lib/atomix-form/atomix-form-dropdown/atomix-form-dropdown.component.ts +0 -36
  159. package/src/lib/lib/atomix-form/atomix-form-input-component/atomix-form-input-component.component.html +0 -33
  160. package/src/lib/lib/atomix-form/atomix-form-input-component/atomix-form-input-component.component.scss +0 -32
  161. package/src/lib/lib/atomix-form/atomix-form-input-component/atomix-form-input-component.component.spec.ts +0 -156
  162. package/src/lib/lib/atomix-form/atomix-form-input-component/atomix-form-input-component.component.ts +0 -42
  163. package/src/lib/lib/atomix-form/atomix-form-inputmask-component/atomix-form-inputmask-component.component.html +0 -14
  164. package/src/lib/lib/atomix-form/atomix-form-inputmask-component/atomix-form-inputmask-component.component.scss +0 -0
  165. package/src/lib/lib/atomix-form/atomix-form-inputmask-component/atomix-form-inputmask-component.component.spec.ts +0 -104
  166. package/src/lib/lib/atomix-form/atomix-form-inputmask-component/atomix-form-inputmask-component.component.ts +0 -24
  167. package/src/lib/lib/atomix-form/atomix-form-password-component/atomix-form-password-component.component.html +0 -16
  168. package/src/lib/lib/atomix-form/atomix-form-password-component/atomix-form-password-component.component.scss +0 -0
  169. package/src/lib/lib/atomix-form/atomix-form-password-component/atomix-form-password-component.component.spec.ts +0 -92
  170. package/src/lib/lib/atomix-form/atomix-form-password-component/atomix-form-password-component.component.ts +0 -24
  171. package/src/lib/lib/atomix-form/atomix-form-radio-button/atomix-radio-button.component.html +0 -23
  172. package/src/lib/lib/atomix-form/atomix-form-radio-button/atomix-radio-button.component.scss +0 -3
  173. package/src/lib/lib/atomix-form/atomix-form-radio-button/atomix-radio-button.component.spec.ts +0 -126
  174. package/src/lib/lib/atomix-form/atomix-form-radio-button/atomix-radio-button.component.ts +0 -26
  175. package/src/lib/lib/atomix-form/atomix-form-textarea/atomix-form-textarea.component.html +0 -17
  176. package/src/lib/lib/atomix-form/atomix-form-textarea/atomix-form-textarea.component.scss +0 -6
  177. package/src/lib/lib/atomix-form/atomix-form-textarea/atomix-form-textarea.component.spec.ts +0 -120
  178. package/src/lib/lib/atomix-form/atomix-form-textarea/atomix-form-textarea.component.ts +0 -24
  179. package/src/lib/lib/atomix-input/atomix-input.component.css +0 -52
  180. package/src/lib/lib/atomix-input/atomix-input.component.html +0 -45
  181. package/src/lib/lib/atomix-input/atomix-input.component.spec.ts +0 -229
  182. package/src/lib/lib/atomix-input/atomix-input.component.ts +0 -64
  183. package/src/lib/lib/atomix-input-switch/atomix-input-switch.component.css +0 -12
  184. package/src/lib/lib/atomix-input-switch/atomix-input-switch.component.html +0 -17
  185. package/src/lib/lib/atomix-input-switch/atomix-input-switch.component.spec.ts +0 -173
  186. package/src/lib/lib/atomix-input-switch/atomix-input-switch.component.ts +0 -62
  187. package/src/lib/lib/atomix-loading-overlay/atomix-loading-overlay.component.html +0 -47
  188. package/src/lib/lib/atomix-loading-overlay/atomix-loading-overlay.component.scss +0 -14
  189. package/src/lib/lib/atomix-loading-overlay/atomix-loading-overlay.component.spec.ts +0 -21
  190. package/src/lib/lib/atomix-loading-overlay/atomix-loading-overlay.component.ts +0 -25
  191. package/src/lib/lib/atomix-messages/messages.component.css +0 -0
  192. package/src/lib/lib/atomix-messages/messages.component.html +0 -9
  193. package/src/lib/lib/atomix-messages/messages.component.spec.ts +0 -115
  194. package/src/lib/lib/atomix-messages/messages.component.ts +0 -17
  195. package/src/lib/lib/atomix-pagination/atomix-pagination.component.css +0 -19
  196. package/src/lib/lib/atomix-pagination/atomix-pagination.component.html +0 -24
  197. package/src/lib/lib/atomix-pagination/atomix-pagination.component.spec.ts +0 -98
  198. package/src/lib/lib/atomix-pagination/atomix-pagination.component.ts +0 -36
  199. package/src/lib/lib/atomix-radio-button/atomix-radio-button.component.css +0 -0
  200. package/src/lib/lib/atomix-radio-button/atomix-radio-button.component.html +0 -7
  201. package/src/lib/lib/atomix-radio-button/atomix-radio-button.component.spec.ts +0 -116
  202. package/src/lib/lib/atomix-radio-button/atomix-radio-button.component.ts +0 -37
  203. package/src/lib/lib/atomix-search-dropdown/atomix-search-dropdown.component.css +0 -49
  204. package/src/lib/lib/atomix-search-dropdown/atomix-search-dropdown.component.html +0 -68
  205. package/src/lib/lib/atomix-search-dropdown/atomix-search-dropdown.component.spec.ts +0 -282
  206. package/src/lib/lib/atomix-search-dropdown/atomix-search-dropdown.component.ts +0 -119
  207. package/src/lib/lib/atomix-select-button/atomix-select-button.component.css +0 -5
  208. package/src/lib/lib/atomix-select-button/atomix-select-button.component.html +0 -7
  209. package/src/lib/lib/atomix-select-button/atomix-select-button.component.spec.ts +0 -73
  210. package/src/lib/lib/atomix-select-button/atomix-select-button.component.ts +0 -19
  211. package/src/lib/lib/atomix-snackbar/atomix-snackbar.component.css +0 -30
  212. package/src/lib/lib/atomix-snackbar/atomix-snackbar.component.html +0 -4
  213. package/src/lib/lib/atomix-snackbar/atomix-snackbar.component.spec.ts +0 -60
  214. package/src/lib/lib/atomix-snackbar/atomix-snackbar.component.ts +0 -27
  215. package/src/lib/lib/atomix-spinner/atomix-spinner.component.css +0 -0
  216. package/src/lib/lib/atomix-spinner/atomix-spinner.component.html +0 -7
  217. package/src/lib/lib/atomix-spinner/atomix-spinner.component.spec.ts +0 -70
  218. package/src/lib/lib/atomix-spinner/atomix-spinner.component.ts +0 -13
  219. package/src/lib/lib/atomix-steps/atomix-steps.component.html +0 -9
  220. package/src/lib/lib/atomix-steps/atomix-steps.component.scss +0 -0
  221. package/src/lib/lib/atomix-steps/atomix-steps.component.spec.ts +0 -120
  222. package/src/lib/lib/atomix-steps/atomix-steps.component.ts +0 -32
  223. package/src/lib/lib/atomix-tabMenu/atomix-tabMenu.component.css +0 -0
  224. package/src/lib/lib/atomix-tabMenu/atomix-tabMenu.component.html +0 -26
  225. package/src/lib/lib/atomix-tabMenu/atomix-tabMenu.component.spec.ts +0 -106
  226. package/src/lib/lib/atomix-tabMenu/atomix-tabMenu.component.ts +0 -36
  227. package/src/lib/lib/atomix-table/atomix-table.component.css +0 -152
  228. package/src/lib/lib/atomix-table/atomix-table.component.html +0 -647
  229. package/src/lib/lib/atomix-table/atomix-table.component.spec.ts +0 -1648
  230. package/src/lib/lib/atomix-table/atomix-table.component.ts +0 -422
  231. package/src/lib/lib/atomix-table/atomix-table.models.ts +0 -39
  232. package/src/lib/lib/atomix-tag/atomix-tag.component.css +0 -0
  233. package/src/lib/lib/atomix-tag/atomix-tag.component.html +0 -6
  234. package/src/lib/lib/atomix-tag/atomix-tag.component.spec.ts +0 -47
  235. package/src/lib/lib/atomix-tag/atomix-tag.component.ts +0 -13
  236. package/src/lib/lib/utils/prime-icons.util.spec.ts +0 -21
  237. package/src/lib/lib/utils/prime-icons.util.ts +0 -11
  238. package/src/lib/primekit.component.spec.ts +0 -19
  239. package/src/lib/primekit.component.ts +0 -10
  240. package/src/lib/primekit.module.spec.ts +0 -155
  241. package/src/lib/primekit.module.ts +0 -183
  242. package/src/lib/primekit.service.spec.ts +0 -17
  243. package/src/lib/primekit.service.ts +0 -8
  244. package/tsconfig.lib.json +0 -13
  245. package/tsconfig.lib.prod.json +0 -11
  246. package/tsconfig.spec.json +0 -10
@@ -1,717 +0,0 @@
1
- import {
2
- Component,
3
- EventEmitter,
4
- Input,
5
- Output,
6
- ViewChild,
7
- OnChanges,
8
- SimpleChanges,
9
- OnInit,
10
- OnDestroy,
11
- Renderer2,
12
- } from '@angular/core';
13
- import { OverlayPanel } from 'primeng/overlaypanel';
14
- import { DatePipe } from '@angular/common';
15
-
16
- @Component({
17
- selector: 'atomix-daterange-calendar',
18
- templateUrl: './atomix-daterange-calendar.component.html',
19
- styleUrls: ['./atomix-daterange-calendar.component.scss'],
20
- })
21
- export class AtomixDaterangeCalendarComponent
22
- implements OnChanges, OnInit, OnDestroy
23
- {
24
- @Input() placeholder: string = '';
25
- @Input() styleClass: string = '';
26
- @Input() selectionMode: 'range' = 'range';
27
- @Input() inputStyleClass: string = '';
28
- @Input() inline: boolean = false;
29
- @Input() disabled: boolean = false;
30
- @Input() selectedDate: any = null;
31
- @Input() maxDate!: Date;
32
- @Input() minDate!: Date;
33
- @Input() defaultPreset:
34
- | 'today'
35
- | 'yesterday'
36
- | 'last7days'
37
- | 'last30days'
38
- | 'last3months'
39
- | 'last6months'
40
- | 'last1year'
41
- | null = null;
42
- @Input() preservePreset: boolean = false;
43
-
44
- customRangeMode: boolean = false;
45
- selectedPreset: string | null = null; // 'today' | 'yesterday' | 'last7days' | 'last30days' | 'last3months' | 'last6months' | 'last1year' | 'custom' | null
46
- @ViewChild('overlayPanel') overlayPanel?: OverlayPanel;
47
- @Output() dateRangeChange = new EventEmitter<any>();
48
-
49
- // internal model bound to p-calendar to avoid changing external selection during first-click selection
50
- modelDate: Date[] | null = null;
51
-
52
- enLocale = {
53
- firstDayOfWeek: 0,
54
- dayNames: [
55
- 'Sunday',
56
- 'Monday',
57
- 'Tuesday',
58
- 'Wednesday',
59
- 'Thursday',
60
- 'Friday',
61
- 'Saturday',
62
- ],
63
- dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
64
- dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
65
- monthNames: [
66
- 'January',
67
- 'February',
68
- 'March',
69
- 'April',
70
- 'May',
71
- 'June',
72
- 'July',
73
- 'August',
74
- 'September',
75
- 'October',
76
- 'November',
77
- 'December',
78
- ],
79
- monthNamesShort: [
80
- 'Jan',
81
- 'Feb',
82
- 'Mar',
83
- 'Apr',
84
- 'May',
85
- 'Jun',
86
- 'Jul',
87
- 'Aug',
88
- 'Sep',
89
- 'Oct',
90
- 'Nov',
91
- 'Dec',
92
- ],
93
- today: 'Today',
94
- clear: 'Clear',
95
- };
96
-
97
- // temporary storage for overlay session
98
- private _overlayInitialDate: Date[] | null = null;
99
- private _overlayInitialPreset: string | null = null;
100
- private _calendarObservers: MutationObserver[] = [];
101
- private _observedElements: Element[] = [];
102
- private _parentObservers: MutationObserver[] = [];
103
- private _observedParentElements: Element[] = [];
104
- private _updateRafId: number | null = null; // requestAnimationFrame id
105
-
106
- constructor(
107
- private datePipe: DatePipe,
108
- private renderer: Renderer2
109
- ) {}
110
-
111
- ngOnInit(): void {
112
- if (!this.selectedDate && this.defaultPreset) {
113
- this.applyPreset(this.defaultPreset);
114
- }
115
- // initialize internal model
116
- this.modelDate = this.selectedDate ? [...this.selectedDate] : null;
117
- // initial class update if there is a pre-selected range
118
- this._scheduleUpdate();
119
- // start observers if inline calendar is used
120
- if (this.inline) {
121
- this._startCalendarObservers();
122
- }
123
- }
124
-
125
- ngOnChanges(changes: SimpleChanges): void {
126
- if (changes['selectedDate']) {
127
- const sel = changes['selectedDate'].currentValue as Date[] | null;
128
- if (sel && Array.isArray(sel) && sel.length === 2 && sel[0] && sel[1]) {
129
- const preset = this.detectPreset(sel[0], sel[1]);
130
- this.selectedPreset = preset ?? 'custom';
131
- // sync internal model when external value changes
132
- this.modelDate = [...sel];
133
- } else if (sel == null) {
134
- this.selectedPreset = null;
135
- this.modelDate = null;
136
- }
137
- }
138
- }
139
-
140
- onInputKeyDown(event: KeyboardEvent) {
141
- if (event.key === 'Enter' || event.key === ' ') {
142
- try {
143
- this.overlayPanel?.toggle(event as any);
144
- } catch (e) {}
145
- event.preventDefault();
146
- }
147
- }
148
-
149
- onOverlayShow(): void {
150
- // store a deep copy of current selection/preset when overlay opens
151
- if (this.selectedDate && Array.isArray(this.selectedDate)) {
152
- this._overlayInitialDate = (this.selectedDate as Date[]).map((d) =>
153
- d ? new Date(d.getFullYear(), d.getMonth(), d.getDate()) : d
154
- );
155
- } else {
156
- this._overlayInitialDate = null;
157
- }
158
- this._overlayInitialPreset = this.selectedPreset;
159
- // ensure calendar model shows the currently committed selection when opening
160
- this.modelDate = this.selectedDate ? [...this.selectedDate] : null;
161
- // ensure preset buttons reflect current selection when overlay opens
162
- if (
163
- this.selectedDate &&
164
- Array.isArray(this.selectedDate) &&
165
- this.selectedDate.length === 2
166
- ) {
167
- const preset = this.detectPreset(
168
- this.selectedDate[0],
169
- this.selectedDate[1]
170
- );
171
- this.selectedPreset = preset ?? 'custom';
172
- } else if (!this.selectedDate) {
173
- this.selectedPreset = null;
174
- }
175
- // add start/end classes to range cells for styling
176
- this._scheduleUpdate();
177
- // observe DOM changes (PrimeNG may re-render inside overlay)
178
- this._startCalendarObservers();
179
- }
180
-
181
- onOverlayHide(): void {
182
- // if internal calendar model has an incomplete selection (partial range) revert to initial
183
- const model = this.modelDate;
184
- const isPartialModel = Boolean(
185
- model && Array.isArray(model) && model.length > 0 && model[0] && !model[1]
186
- );
187
- if (isPartialModel) {
188
- this.selectedDate = this._overlayInitialDate;
189
- this.selectedPreset = this._overlayInitialPreset;
190
- // reset internal model to synced value
191
- this.modelDate = this.selectedDate ? [...this.selectedDate] : null;
192
- }
193
- this._overlayInitialDate = null;
194
- this._overlayInitialPreset = null;
195
- this.customRangeMode = false;
196
- // cleanup any start/end classes to avoid stale classes
197
- this._scheduleUpdate();
198
- // stop observing
199
- this._stopCalendarObservers();
200
- }
201
-
202
- onModelChange(dateRange: Date[] | null) {
203
- // When user clicks a first date, PrimeNG may emit an array with 1 value. We don't want to
204
- // update the external selectedDate until the range is completed (two dates) so that
205
- // the calendar does not jump back to a previously selected end date's month.
206
- this.modelDate = dateRange ? [...dateRange] : null;
207
- if (
208
- dateRange &&
209
- Array.isArray(dateRange) &&
210
- dateRange.length === 2 &&
211
- dateRange[0] &&
212
- dateRange[1]
213
- ) {
214
- this.selectedPreset = this.detectPreset(dateRange[0], dateRange[1]);
215
- this.customRangeMode = false;
216
- this.selectedDate = [...dateRange];
217
- this.dateRangeChange.emit(this.selectedDate);
218
- // close overlay like when applying a preset
219
- try {
220
- this.overlayPanel?.hide();
221
- } catch (e) {}
222
- } else if (!dateRange) {
223
- // cleared selection
224
- this.selectedPreset = null;
225
- this.customRangeMode = false;
226
- this.selectedDate = null;
227
- this.dateRangeChange.emit(null);
228
- } else {
229
- // single date selecting (partial range) - do not emit change yet; just keep internal model
230
- // so the calendar's view remains where the user navigated to.
231
- this.selectedPreset = null;
232
- this.customRangeMode = false;
233
- }
234
- // update start/end classes while user is selecting or when range completes
235
- this._scheduleUpdate();
236
- }
237
-
238
- // Called when the calendar's visible month/year changes
239
- onCalendarViewChanged(event?: any): void {
240
- // Reapply classes after PrimeNG re-render
241
- this._scheduleUpdate();
242
- // Reattach observers after a small delay since PrimeNG will likely replace DOM nodes
243
- setTimeout(() => {
244
- try {
245
- this._stopCalendarObservers();
246
- this._startCalendarObservers();
247
- } catch (e) {}
248
- }, 40);
249
- }
250
-
251
- get hasSelection(): boolean {
252
- return Boolean(
253
- this.selectedDate &&
254
- Array.isArray(this.selectedDate) &&
255
- (this.selectedDate as Date[]).length === 2 &&
256
- !!(this.selectedDate as Date[])[0] &&
257
- !!(this.selectedDate as Date[])[1]
258
- );
259
- }
260
-
261
- private normalizeDate(d: Date): Date {
262
- return new Date(d.getFullYear(), d.getMonth(), d.getDate());
263
- }
264
-
265
- private isSameDate(a: Date, b: Date): boolean {
266
- return (
267
- a.getFullYear() === b.getFullYear() &&
268
- a.getMonth() === b.getMonth() &&
269
- a.getDate() === b.getDate()
270
- );
271
- }
272
-
273
- private detectPreset(startRaw: Date, endRaw: Date): string | null {
274
- const start = this.normalizeDate(startRaw);
275
- const end = this.normalizeDate(endRaw);
276
- const today = this.normalizeDate(new Date());
277
- // today
278
- if (this.isSameDate(start, today) && this.isSameDate(end, today))
279
- return 'today';
280
- // yesterday
281
- const y = new Date(today);
282
- y.setDate(y.getDate() - 1);
283
- if (this.isSameDate(start, y) && this.isSameDate(end, y))
284
- return 'yesterday';
285
- // last7days (last 7 days including today: start = today - 6, end = today)
286
- const l7End = new Date(today);
287
- const l7Start = new Date(today);
288
- l7Start.setDate(today.getDate() - 6);
289
- if (this.isSameDate(start, l7Start) && this.isSameDate(end, l7End))
290
- return 'last7days';
291
- // last30days (last 30 days including today: start = today - 29, end = today)
292
- const l30End = new Date(today);
293
- const l30Start = new Date(today);
294
- l30Start.setDate(today.getDate() - 29);
295
- if (this.isSameDate(start, l30Start) && this.isSameDate(end, l30End))
296
- return 'last30days';
297
- // last3months (last 3 months including today: start = today - 3 months, end = today)
298
- const l3mEnd = new Date(today);
299
- const l3mStart = new Date(today);
300
- l3mStart.setMonth(today.getMonth() - 3);
301
- if (this.isSameDate(start, l3mStart) && this.isSameDate(end, l3mEnd))
302
- return 'last3months';
303
- // last6months (last 6 months including today: start = today - 6 months, end = today)
304
- const l6mEnd = new Date(today);
305
- const l6mStart = new Date(today);
306
- l6mStart.setMonth(today.getMonth() - 6);
307
- if (this.isSameDate(start, l6mStart) && this.isSameDate(end, l6mEnd))
308
- return 'last6months';
309
- // last1year (last 1 year including today: start = today - 1 year, end = today)
310
- const l1yEnd = new Date(today);
311
- const l1yStart = new Date(today);
312
- l1yStart.setFullYear(today.getFullYear() - 1);
313
- if (this.isSameDate(start, l1yStart) && this.isSameDate(end, l1yEnd))
314
- return 'last1year';
315
- return null;
316
- }
317
-
318
- clearDateRange() {
319
- this.selectedDate = null;
320
- this.dateRangeChange.emit(this.selectedDate);
321
- this.selectedPreset = null;
322
- this.customRangeMode = false;
323
- this.modelDate = null;
324
- }
325
-
326
- resetAndClose() {
327
- this.clearDateRange();
328
- if (this.overlayPanel) {
329
- try {
330
- this.overlayPanel.hide();
331
- } catch (e) {}
332
- }
333
- }
334
-
335
- clearAndStop(event: Event) {
336
- this.clearDateRange();
337
- try {
338
- this.overlayPanel?.hide();
339
- } catch (e) {}
340
- event.stopPropagation();
341
- }
342
-
343
- toggleCustomRange() {
344
- this.customRangeMode = !this.customRangeMode;
345
- if (this.customRangeMode) this.selectedPreset = 'custom';
346
- }
347
-
348
- applyCustomRange() {
349
- // ensure external selectedDate is in sync with internal model
350
- this.selectedDate = this.modelDate ? [...this.modelDate] : null;
351
- this.dateRangeChange.emit(this.selectedDate);
352
- if (this.overlayPanel) {
353
- try {
354
- this.overlayPanel.hide();
355
- } catch (e) {}
356
- }
357
- this.customRangeMode = false;
358
- this.selectedPreset = 'custom';
359
- }
360
-
361
- getDateRangeLabel() {
362
- // Check the internal model first to show real-time updates while selecting
363
- const dateArray = this.modelDate || this.selectedDate;
364
- if (!dateArray || !Array.isArray(dateArray)) return '';
365
-
366
- const [start, end] = dateArray as (Date | null)[];
367
- const arrow = '\u2794';
368
-
369
- // Show just the first date with an arrow if only first date is selected
370
- if (start && !end) {
371
- const startStr = this.datePipe.transform(start, 'MM/dd/yyyy');
372
- return `${startStr} ${arrow} `;
373
- }
374
-
375
- // Show the complete range if both dates are selected
376
- if (start && end) {
377
- const startStr = this.datePipe.transform(start, 'MM/dd/yyyy');
378
- const endStr = this.datePipe.transform(end, 'MM/dd/yyyy');
379
- return `${startStr} ${arrow} ${endStr}`;
380
- }
381
-
382
- return '';
383
- }
384
-
385
- applyPreset(
386
- preset:
387
- | 'today'
388
- | 'yesterday'
389
- | 'last7days'
390
- | 'last30days'
391
- | 'last3months'
392
- | 'last6months'
393
- | 'last1year'
394
- ) {
395
- const today = new Date();
396
- let start: Date | null = null;
397
- let end: Date | null = null;
398
- switch (preset) {
399
- case 'today':
400
- start = end = new Date(
401
- today.getFullYear(),
402
- today.getMonth(),
403
- today.getDate()
404
- );
405
- break;
406
- case 'yesterday':
407
- const y = new Date(today);
408
- y.setDate(y.getDate() - 1);
409
- start = end = new Date(y.getFullYear(), y.getMonth(), y.getDate());
410
- break;
411
- case 'last7days': {
412
- end = new Date(today.getFullYear(), today.getMonth(), today.getDate());
413
- start = new Date(end);
414
- start.setDate(end.getDate() - 6);
415
- break;
416
- }
417
- case 'last30days': {
418
- end = new Date(today.getFullYear(), today.getMonth(), today.getDate());
419
- start = new Date(end);
420
- start.setDate(end.getDate() - 29);
421
- break;
422
- }
423
- case 'last3months': {
424
- end = new Date(today.getFullYear(), today.getMonth(), today.getDate());
425
- start = new Date(end);
426
- start.setMonth(end.getMonth() - 3);
427
- break;
428
- }
429
- case 'last6months': {
430
- end = new Date(today.getFullYear(), today.getMonth(), today.getDate());
431
- start = new Date(end);
432
- start.setMonth(end.getMonth() - 6);
433
- break;
434
- }
435
- case 'last1year': {
436
- end = new Date(today.getFullYear(), today.getMonth(), today.getDate());
437
- start = new Date(end);
438
- start.setFullYear(end.getFullYear() - 1);
439
- break;
440
- }
441
- default:
442
- break;
443
- }
444
- if (start && end) {
445
- this.selectedDate = [start, end];
446
- this.modelDate = [start, end];
447
- if (this.preservePreset) {
448
- this.selectedDate = [start, end, { presets: preset }];
449
- }
450
- this.dateRangeChange.emit(this.selectedDate);
451
- this.selectedPreset = preset;
452
- this.customRangeMode = false;
453
- }
454
- try {
455
- this.overlayPanel?.hide();
456
- } catch (e) {}
457
- // ensure we update start/end classes after applying a preset
458
- this._scheduleUpdate();
459
- }
460
-
461
- onDateRangeChange(dateRange: Date[] | null): void {
462
- this.dateRangeChange.emit(dateRange);
463
- if (dateRange && Array.isArray(dateRange)) {
464
- this.selectedPreset = this.detectPreset(dateRange[0], dateRange[1]);
465
- this.customRangeMode = false;
466
- } else if (!dateRange) {
467
- this.selectedPreset = null;
468
- this.customRangeMode = false;
469
- }
470
- this._scheduleUpdate();
471
- }
472
-
473
- ngOnDestroy(): void {
474
- this._stopCalendarObservers();
475
- this._cancelScheduledUpdate();
476
- }
477
-
478
- // Walk the rendered calendar DOM(s) (overlay + inline) and add start-range/end-range classes
479
- private _updateStartEndRangeClasses(): void {
480
- try {
481
- const calendarElements = this._getCalendarElements();
482
-
483
- calendarElements.forEach((calEl: Element) => {
484
- // Remove existing classes from spans first
485
- const allSpans = calEl.querySelectorAll('td > span');
486
- allSpans.forEach((span) => {
487
- this.renderer.removeClass(span, 'start-range');
488
- this.renderer.removeClass(span, 'end-range');
489
- this.renderer.removeClass(span, 'between-range');
490
- });
491
-
492
- // Collect span/date pairs, prefer data-date attribute
493
- // Cache header month/year for this calendar to avoid querying per-span
494
- const panelNode = calEl.closest('.p-datepicker') || calEl;
495
- const headerMonthNode = (panelNode as Element).querySelector(
496
- '.p-datepicker-header .p-datepicker-title .p-datepicker-month'
497
- );
498
- const headerYearNode = (panelNode as Element).querySelector(
499
- '.p-datepicker-header .p-datepicker-title .p-datepicker-year'
500
- );
501
- const headerMonthIdx =
502
- headerMonthNode && headerMonthNode.textContent
503
- ? (this.enLocale.monthNames || []).indexOf(
504
- headerMonthNode.textContent.trim()
505
- )
506
- : NaN;
507
- const headerYearVal =
508
- headerYearNode && headerYearNode.textContent
509
- ? parseInt(headerYearNode.textContent.trim(), 10)
510
- : NaN;
511
- const items: { dt: Date; span: Element; td?: HTMLElement | null }[] =
512
- [];
513
- const spans = calEl.querySelectorAll('td > span.p-highlight');
514
- spans.forEach((span) => {
515
- const td = span.closest('td') as HTMLElement | null;
516
- // Try to read data-date attribute, which some PrimeNG versions render on span/td
517
- let dataDate = span.getAttribute('data-date');
518
- if (!dataDate && td) dataDate = td.getAttribute('data-date');
519
- if (dataDate) {
520
- const parts = dataDate.split('-').map((p) => parseInt(p, 10));
521
- if (parts.length >= 3 && parts.every((n) => !isNaN(n))) {
522
- const [y, m, d] = parts;
523
- const dt = new Date(y, m - 1, d);
524
- items.push({ dt, td, span });
525
- return;
526
- }
527
- }
528
- // Fallback: parse day number and infer month/year from nearby header in the same .p-datepicker
529
- const dayText = (span.textContent || '').trim();
530
- const day = parseInt(dayText, 10);
531
- if (!isNaN(day) && td) {
532
- // Use cached header month/year when available
533
- if (!isNaN(headerMonthIdx) && !isNaN(headerYearVal)) {
534
- const dt = new Date(headerYearVal, headerMonthIdx, day);
535
- items.push({ dt, td, span });
536
- return;
537
- }
538
- }
539
- // last resort: ignore span if date cannot be determined
540
- });
541
-
542
- if (items.length === 0) return;
543
-
544
- // Sort items to find min/max (start & end)
545
- items.sort((a, b) => a.dt.getTime() - b.dt.getTime());
546
- const detectedStart = items[0].dt;
547
- const detectedEnd = items[items.length - 1].dt;
548
-
549
- // Preferred range is modelDate/selectedDate if present
550
- const range =
551
- this.selectedDate && this.selectedDate.length === 2
552
- ? this.selectedDate
553
- : this.modelDate && this.modelDate.length === 2
554
- ? this.modelDate
555
- : [detectedStart, detectedEnd];
556
- const startDate =
557
- range && range[0]
558
- ? this.normalizeDate(range[0] as Date)
559
- : detectedStart;
560
- const endDate =
561
- range && range[1]
562
- ? this.normalizeDate(range[1] as Date)
563
- : detectedEnd;
564
-
565
- // For each item, add start-range,end-range, or between-range based on date
566
- const sTime = startDate.getTime();
567
- const eTime = endDate.getTime();
568
- for (const it of items) {
569
- const t = it.dt.getTime();
570
- if (sTime === eTime && t === sTime) {
571
- // single-day range, mark both start & end
572
- this.renderer.addClass(it.span, 'start-range');
573
- this.renderer.addClass(it.span, 'end-range');
574
- } else if (t === sTime) {
575
- this.renderer.addClass(it.span, 'start-range');
576
- } else if (t === eTime) {
577
- this.renderer.addClass(it.span, 'end-range');
578
- } else if (t > sTime && t < eTime) {
579
- this.renderer.addClass(it.span, 'between-range');
580
- }
581
- }
582
- });
583
- } catch (e) {
584
- // ignore DOM errors (e.g., server-side rendering / missing elements)
585
- }
586
- }
587
-
588
- private isoDate(d: Date): string {
589
- const y = d.getFullYear();
590
- const m = String(d.getMonth() + 1).padStart(2, '0');
591
- const day = String(d.getDate()).padStart(2, '0');
592
- return `${y}-${m}-${day}`;
593
- }
594
-
595
- private _findElementByDate(date?: Date): HTMLElement | undefined {
596
- if (!date) return undefined;
597
- const y = date.getFullYear();
598
- const m = date.getMonth() + 1; // 1..12
599
- const d = date.getDate();
600
- const isoUnpadded = `${y}-${m}-${d}`; // e.g. 2025-11-1
601
- const isoPadded = `${y}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`; // 2025-11-01
602
- const selectors = [
603
- `[data-date="${isoUnpadded}"]`,
604
- `[data-date="${isoPadded}"]`,
605
- ];
606
- for (const sel of selectors) {
607
- const foundInOverlay = document.querySelector(
608
- `.atomix-overlay-calendar ${sel}`
609
- ) as HTMLElement | null;
610
- if (foundInOverlay)
611
- return (
612
- (foundInOverlay.closest('td') as HTMLElement | null) || foundInOverlay
613
- );
614
- }
615
- for (const sel of selectors) {
616
- const found = document.querySelector(sel) as HTMLElement | null;
617
- if (found) return (found.closest('td') as HTMLElement | null) || found;
618
- }
619
- return undefined;
620
- }
621
-
622
- private _startCalendarObservers(): void {
623
- // stop first to avoid duplicates
624
- this._stopCalendarObservers();
625
- try {
626
- const calEls = this._getCalendarElements();
627
- try {
628
- const panel = this.overlayPanel as any;
629
- if (panel && panel.el && panel.el.nativeElement) {
630
- const el = panel.el.nativeElement.querySelector('.p-datepicker');
631
- if (el) calEls.push(el as Element);
632
- }
633
- } catch (e) {}
634
-
635
- calEls.forEach((el) => {
636
- const obs = new MutationObserver(() => {
637
- // Reapply classes after DOM changes (debounced)
638
- this._scheduleUpdate();
639
- });
640
- // Watch childList, subtree and class attribute changes (span class toggles are common)
641
- obs.observe(el, {
642
- childList: true,
643
- subtree: true,
644
- attributes: true,
645
- attributeFilter: ['class'],
646
- });
647
- this._calendarObservers.push(obs);
648
- this._observedElements.push(el);
649
- // Also observe parent - if PrimeNG replaces the .p-datepicker element, parent childList changes will fire
650
- const parent = el.parentElement;
651
- if (parent && this._observedParentElements.indexOf(parent) === -1) {
652
- const parentObs = new MutationObserver(() => {
653
- // reattach observers since the calEl may have been replaced
654
- this._scheduleUpdate();
655
- // detach and re-attach observers after DOM settles
656
- setTimeout(() => {
657
- try {
658
- this._stopCalendarObservers();
659
- this._startCalendarObservers();
660
- } catch (e) {}
661
- }, 100); // slightly larger delay to let PrimeNG finish the month rendering
662
- });
663
- parentObs.observe(parent, { childList: true, subtree: false });
664
- this._parentObservers.push(parentObs);
665
- this._observedParentElements.push(parent);
666
- }
667
- });
668
- } catch (e) {
669
- // ignore
670
- }
671
- }
672
-
673
- private _stopCalendarObservers(): void {
674
- try {
675
- this._calendarObservers.forEach((obs) => obs.disconnect());
676
- this._parentObservers.forEach((obs) => obs.disconnect());
677
- } catch (e) {}
678
- this._calendarObservers = [];
679
- this._observedElements = [];
680
- this._parentObservers = [];
681
- this._observedParentElements = [];
682
- }
683
-
684
- private _scheduleUpdate(): void {
685
- if (this._updateRafId != null) return; // already scheduled
686
- this._updateRafId = window.requestAnimationFrame(() => {
687
- this._updateRafId = null;
688
- this._updateStartEndRangeClasses();
689
- });
690
- }
691
-
692
- private _cancelScheduledUpdate(): void {
693
- if (this._updateRafId != null) {
694
- window.cancelAnimationFrame(this._updateRafId);
695
- this._updateRafId = null;
696
- }
697
- }
698
-
699
- private _getCalendarElements(): Element[] {
700
- const calEls: Element[] = [];
701
- const overlayCal = document.querySelector(
702
- '.atomix-overlay-calendar .p-datepicker'
703
- );
704
- const inlineCal = document.querySelector('.inline-calendar .p-datepicker');
705
- if (overlayCal) calEls.push(overlayCal);
706
- if (inlineCal) calEls.push(inlineCal);
707
- try {
708
- const panel = this.overlayPanel as any;
709
- if (panel && panel.el && panel.el.nativeElement) {
710
- const el = panel.el.nativeElement.querySelector('.p-datepicker');
711
- if (el) calEls.push(el as Element);
712
- }
713
- } catch (e) {}
714
- // remove duplicates
715
- return Array.from(new Set(calEls));
716
- }
717
- }