@updevs/components 1.0.0-alpha.8 → 1.0.0-alpha.9

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 (729) hide show
  1. package/.eslintrc.json +39 -0
  2. package/README.md +1 -11
  3. package/assets/styles/_bootstrap-components.scss +18 -1
  4. package/assets/styles/_seven-columns.scss +73 -0
  5. package/assets/styles/_updevs.scss +4 -0
  6. package/assets/styles/_variables.scss +1 -1
  7. package/badge/index.ts +1 -0
  8. package/badge/ng-package.json +6 -0
  9. package/badge/src/badge-config.model.ts +21 -0
  10. package/badge/src/badge.component.html +5 -0
  11. package/badge/src/badge.component.scss +1 -0
  12. package/badge/src/badge.component.spec.ts +21 -0
  13. package/badge/src/badge.component.ts +54 -0
  14. package/badge/src/badge.config.ts +13 -0
  15. package/badge/src/public-api.ts +3 -0
  16. package/badge/src/upd-badge.module.ts +17 -0
  17. package/button/index.ts +1 -0
  18. package/button/ng-package.json +6 -0
  19. package/button/src/button.component.html +45 -0
  20. package/button/src/button.component.scss +5 -0
  21. package/button/src/button.component.spec.ts +23 -0
  22. package/button/src/button.component.ts +176 -0
  23. package/button/src/upd-button.module.ts +21 -0
  24. package/calendar/index.ts +1 -0
  25. package/calendar/ng-package.json +6 -0
  26. package/calendar/src/assets/i18n/en.json +16 -0
  27. package/calendar/src/assets/i18n/pt.json +16 -0
  28. package/calendar/src/calendar.component.html +34 -0
  29. package/calendar/src/calendar.component.scss +1 -0
  30. package/calendar/src/calendar.component.spec.ts +21 -0
  31. package/calendar/src/calendar.component.ts +290 -0
  32. package/calendar/src/components/calendar-body/calendar-body.component.html +75 -0
  33. package/calendar/src/components/calendar-body/calendar-body.component.scss +1 -0
  34. package/calendar/src/components/calendar-body/calendar-body.component.spec.ts +21 -0
  35. package/calendar/src/components/calendar-body/calendar-body.component.ts +665 -0
  36. package/calendar/src/components/calendar-header/calendar-header.component.html +27 -0
  37. package/calendar/src/components/calendar-header/calendar-header.component.scss +1 -0
  38. package/calendar/src/components/calendar-header/calendar-header.component.spec.ts +21 -0
  39. package/calendar/src/components/calendar-header/calendar-header.component.ts +175 -0
  40. package/calendar/src/components/calendar-month-view/calendar-month-view.component.html +19 -0
  41. package/calendar/src/components/calendar-month-view/calendar-month-view.component.scss +1 -0
  42. package/calendar/src/components/calendar-month-view/calendar-month-view.component.spec.ts +21 -0
  43. package/calendar/src/components/calendar-month-view/calendar-month-view.component.ts +540 -0
  44. package/calendar/src/components/calendar-multi-year-view/calendar-multi-year-view.component.html +1 -0
  45. package/calendar/src/components/calendar-multi-year-view/calendar-multi-year-view.component.scss +1 -0
  46. package/calendar/src/components/calendar-multi-year-view/calendar-multi-year-view.component.spec.ts +21 -0
  47. package/calendar/src/components/calendar-multi-year-view/calendar-multi-year-view.component.ts +19 -0
  48. package/calendar/src/components/calendar-year-view/calendar-year-view.component.html +1 -0
  49. package/calendar/src/components/calendar-year-view/calendar-year-view.component.scss +1 -0
  50. package/calendar/src/components/calendar-year-view/calendar-year-view.component.spec.ts +21 -0
  51. package/calendar/src/components/calendar-year-view/calendar-year-view.component.ts +17 -0
  52. package/calendar/src/models/calendar-cell.model.ts +22 -0
  53. package/calendar/src/models/calendar-user-event.model.ts +4 -0
  54. package/calendar/src/models/date-range.model.ts +22 -0
  55. package/calendar/src/models/public-api.ts +2 -0
  56. package/calendar/src/public-api.ts +5 -0
  57. package/calendar/src/services/calendar-range-strategy.service.spec.ts +16 -0
  58. package/calendar/src/services/calendar-range-strategy.service.ts +103 -0
  59. package/calendar/src/services/calendar-signals.service.spec.ts +16 -0
  60. package/calendar/src/services/calendar-signals.service.ts +45 -0
  61. package/calendar/src/services/calendar.service.spec.ts +16 -0
  62. package/calendar/src/services/calendar.service.ts +42 -0
  63. package/calendar/src/services/public-api.ts +1 -0
  64. package/calendar/src/tools/events-options.ts +16 -0
  65. package/calendar/src/tools/keyboard-tools.ts +16 -0
  66. package/calendar/src/tools/passive-listeners.ts +36 -0
  67. package/calendar/src/types/calendar-cell-class-function.type.ts +4 -0
  68. package/calendar/src/types/calendar-cell-css-classes.type.ts +1 -0
  69. package/calendar/src/types/calendar-view.type.ts +1 -0
  70. package/calendar/src/types/modifier-key.type.ts +1 -0
  71. package/calendar/src/types/public-api.ts +1 -0
  72. package/calendar/src/upd-calendar.module.ts +48 -0
  73. package/card/index.ts +1 -0
  74. package/card/ng-package.json +6 -0
  75. package/card/src/card.component.html +105 -0
  76. package/card/src/card.component.scss +47 -0
  77. package/card/src/card.component.spec.ts +23 -0
  78. package/card/src/card.component.ts +112 -0
  79. package/card/src/directives/card-actions.directive.spec.ts +8 -0
  80. package/card/src/directives/card-actions.directive.ts +8 -0
  81. package/card/src/directives/card-footer.directive.spec.ts +8 -0
  82. package/card/src/directives/card-footer.directive.ts +8 -0
  83. package/card/src/directives/card-header.directive.spec.ts +8 -0
  84. package/card/src/directives/card-header.directive.ts +8 -0
  85. package/card/src/directives/card-image.directive.spec.ts +8 -0
  86. package/card/src/directives/card-image.directive.ts +8 -0
  87. package/card/src/types/public-api.ts +5 -0
  88. package/card/src/upd-card.module.ts +32 -0
  89. package/drag-and-drop/index.ts +1 -0
  90. package/drag-and-drop/ng-package.json +6 -0
  91. package/drag-and-drop/src/drag-and-drop.component.html +24 -0
  92. package/drag-and-drop/src/drag-and-drop.component.scss +4 -0
  93. package/drag-and-drop/src/drag-and-drop.component.spec.ts +22 -0
  94. package/drag-and-drop/src/drag-and-drop.component.ts +164 -0
  95. package/drag-and-drop/src/models/drag-and-drop-column.config.ts +10 -0
  96. package/drag-and-drop/src/models/drag-and-drop-column.model.ts +16 -0
  97. package/drag-and-drop/src/models/drag-and-drop-item.model.ts +21 -0
  98. package/drag-and-drop/src/models/drag-and-drop-item.ts +8 -0
  99. package/drag-and-drop/src/models/drag-and-drop.config.ts +7 -0
  100. package/drag-and-drop/src/models/public-api.ts +4 -0
  101. package/drag-and-drop/src/public-api.ts +3 -0
  102. package/drag-and-drop/src/upd-drag-and-drop.module.ts +19 -0
  103. package/dropdown/index.ts +1 -0
  104. package/dropdown/ng-package.json +6 -0
  105. package/dropdown/src/dropdown.component.html +70 -0
  106. package/dropdown/src/dropdown.component.scss +19 -0
  107. package/dropdown/src/dropdown.component.spec.ts +23 -0
  108. package/dropdown/src/dropdown.component.ts +233 -0
  109. package/dropdown/src/models/dropdown-action-clicked.model.ts +8 -0
  110. package/dropdown/{models/dropdown-item.d.ts → src/models/dropdown-item.ts} +8 -2
  111. package/dropdown/{models/dropdown-item.type.d.ts → src/models/dropdown-item.type.ts} +1 -1
  112. package/dropdown/src/models/public-api.ts +4 -0
  113. package/dropdown/src/models/toolbar.type.ts +1 -0
  114. package/dropdown/src/upd-dropdown.module.ts +25 -0
  115. package/form/index.ts +1 -0
  116. package/form/ng-package.json +6 -0
  117. package/form/src/assets/i18n/en.json +17 -0
  118. package/form/src/assets/i18n/pt.json +17 -0
  119. package/form/src/components/dynamic-field/dynamic-field.component.html +83 -0
  120. package/form/src/components/dynamic-field/dynamic-field.component.scss +1 -0
  121. package/form/src/components/dynamic-field/dynamic-field.component.spec.ts +21 -0
  122. package/form/src/components/dynamic-field/dynamic-field.component.ts +102 -0
  123. package/form/src/form.component.html +26 -0
  124. package/form/src/form.component.scss +1 -0
  125. package/form/src/form.component.spec.ts +21 -0
  126. package/form/src/form.component.ts +110 -0
  127. package/form/src/models/checkbox-field.model.ts +5 -0
  128. package/form/src/models/checkbox-group-field.model.ts +8 -0
  129. package/form/src/models/dynamic-field.model.ts +32 -0
  130. package/form/src/models/enums/dynamic-field.type.ts +12 -0
  131. package/form/src/models/enums/public-api.ts +1 -0
  132. package/form/src/models/form-config.ts +3 -0
  133. package/form/src/models/form-row.model.ts +10 -0
  134. package/form/src/models/public-api.ts +5 -0
  135. package/form/src/models/radio-field.model.ts +5 -0
  136. package/form/src/models/radio-group-field.model.ts +8 -0
  137. package/form/src/models/select-field.model.ts +30 -0
  138. package/form/src/models/single-select-field.model.ts +5 -0
  139. package/form/src/models/textarea-field.model.ts +11 -0
  140. package/form/src/models/validator-config.ts +5 -0
  141. package/form/src/public-api.ts +3 -0
  142. package/form/src/tools/errors-helper.ts +60 -0
  143. package/form/src/upd-form.module.ts +48 -0
  144. package/form-controls/abstractions/index.ts +1 -0
  145. package/form-controls/abstractions/ng-package.json +6 -0
  146. package/form-controls/abstractions/src/base-control.ts +34 -0
  147. package/form-controls/abstractions/src/public-api.ts +1 -0
  148. package/form-controls/checkbox/index.ts +1 -0
  149. package/form-controls/checkbox/ng-package.json +6 -0
  150. package/form-controls/checkbox/src/checkbox.component.html +34 -0
  151. package/form-controls/checkbox/src/checkbox.component.scss +0 -0
  152. package/form-controls/checkbox/src/checkbox.component.spec.ts +23 -0
  153. package/form-controls/checkbox/src/checkbox.component.ts +60 -0
  154. package/form-controls/checkbox/{public-api.d.ts → src/public-api.ts} +1 -0
  155. package/form-controls/checkbox/src/upd-checkbox.module.ts +21 -0
  156. package/form-controls/date-picker/index.ts +1 -0
  157. package/form-controls/date-picker/ng-package.json +6 -0
  158. package/form-controls/date-picker/src/date-picker.component.html +36 -0
  159. package/form-controls/date-picker/src/date-picker.component.scss +26 -0
  160. package/form-controls/date-picker/src/date-picker.component.spec.ts +22 -0
  161. package/form-controls/date-picker/src/date-picker.component.ts +177 -0
  162. package/form-controls/date-picker/src/public-api.ts +2 -0
  163. package/form-controls/date-picker/src/upd-date-picker.module.ts +25 -0
  164. package/form-controls/input/index.ts +1 -0
  165. package/form-controls/input/ng-package.json +6 -0
  166. package/form-controls/input/src/directives/input-append.directive.spec.ts +8 -0
  167. package/form-controls/input/src/directives/input-append.directive.ts +8 -0
  168. package/form-controls/input/src/directives/input-prepend.directive.spec.ts +8 -0
  169. package/form-controls/input/src/directives/input-prepend.directive.ts +8 -0
  170. package/form-controls/input/src/input.component.html +124 -0
  171. package/form-controls/input/src/input.component.scss +13 -0
  172. package/form-controls/input/src/input.component.spec.ts +23 -0
  173. package/form-controls/input/src/input.component.ts +161 -0
  174. package/form-controls/input/src/upd-input.module.ts +29 -0
  175. package/form-controls/radio/index.ts +1 -0
  176. package/form-controls/radio/ng-package.json +6 -0
  177. package/form-controls/radio/src/radio.component.html +35 -0
  178. package/form-controls/radio/src/radio.component.scss +0 -0
  179. package/form-controls/radio/src/radio.component.spec.ts +23 -0
  180. package/form-controls/radio/src/radio.component.ts +42 -0
  181. package/form-controls/radio/src/upd-radio.module.ts +21 -0
  182. package/form-controls/select/index.ts +1 -0
  183. package/form-controls/select/ng-package.json +6 -0
  184. package/form-controls/select/src/components/multiple/select-multiple.component.html +61 -0
  185. package/form-controls/select/src/components/multiple/select-multiple.component.scss +6 -0
  186. package/form-controls/select/src/components/multiple/select-multiple.component.spec.ts +21 -0
  187. package/form-controls/select/src/components/multiple/select-multiple.component.ts +80 -0
  188. package/form-controls/select/src/components/shared.scss +44 -0
  189. package/form-controls/select/src/components/single/select.component.html +118 -0
  190. package/form-controls/select/src/components/single/select.component.scss +3 -0
  191. package/form-controls/select/src/components/single/select.component.spec.ts +23 -0
  192. package/form-controls/select/src/components/single/select.component.ts +75 -0
  193. package/form-controls/select/src/models/abstractions/base-select.component.ts +286 -0
  194. package/form-controls/select/src/models/defaults.ts +9 -0
  195. package/form-controls/select/{models/public-api.d.ts → src/models/public-api.ts} +1 -0
  196. package/form-controls/select/{models/select-item.d.ts → src/models/select-item.ts} +1 -0
  197. package/form-controls/select/src/upd-select.module.ts +34 -0
  198. package/form-controls/textarea/index.ts +1 -0
  199. package/form-controls/textarea/ng-package.json +6 -0
  200. package/form-controls/textarea/src/textarea.component.html +13 -0
  201. package/form-controls/textarea/src/textarea.component.scss +0 -0
  202. package/form-controls/textarea/src/textarea.component.spec.ts +23 -0
  203. package/form-controls/textarea/src/textarea.component.ts +45 -0
  204. package/form-controls/textarea/src/upd-textarea.module.ts +17 -0
  205. package/form-controls/time-picker/index.ts +1 -0
  206. package/form-controls/time-picker/ng-package.json +6 -0
  207. package/form-controls/time-picker/src/time-picker.component.html +17 -0
  208. package/form-controls/time-picker/src/time-picker.component.scss +10 -0
  209. package/form-controls/time-picker/src/time-picker.component.spec.ts +21 -0
  210. package/form-controls/time-picker/src/time-picker.component.ts +110 -0
  211. package/form-controls/time-picker/src/time-selector/time-selector.component.html +50 -0
  212. package/form-controls/time-picker/src/time-selector/time-selector.component.scss +47 -0
  213. package/form-controls/time-picker/src/time-selector/time-selector.component.spec.ts +21 -0
  214. package/form-controls/time-picker/src/time-selector/time-selector.component.ts +107 -0
  215. package/form-controls/time-picker/src/upd-time-picker.module.ts +39 -0
  216. package/jest.config.ts +22 -0
  217. package/layout/index.ts +1 -0
  218. package/layout/ng-package.json +6 -0
  219. package/layout/src/abstractions/base-page.component.ts +16 -0
  220. package/layout/src/abstractions/base.layout.ts +27 -0
  221. package/layout/src/assets/i18n/en.json +20 -0
  222. package/layout/src/assets/i18n/pt.json +20 -0
  223. package/layout/src/index.ts +1 -0
  224. package/layout/src/layouts/blank-layout/blank-layout.component.html +1 -0
  225. package/layout/src/layouts/blank-layout/blank-layout.component.scss +0 -0
  226. package/layout/src/layouts/blank-layout/blank-layout.component.spec.ts +23 -0
  227. package/layout/src/layouts/blank-layout/blank-layout.component.ts +10 -0
  228. package/layout/src/layouts/blank-layout/blank-layout.module.ts +17 -0
  229. package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.html +16 -0
  230. package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.scss +0 -0
  231. package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.spec.ts +23 -0
  232. package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.ts +30 -0
  233. package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.ts +51 -0
  234. package/layout/src/models/login-page-config.model.ts +57 -0
  235. package/layout/src/models/login-page.config.ts +42 -0
  236. package/layout/{models/public-api.d.ts → src/models/public-api.ts} +1 -0
  237. package/layout/src/models/security-layout-config.model.ts +16 -0
  238. package/layout/src/models/security-layout.config.ts +11 -0
  239. package/layout/src/models/upd-layout-config.model.ts +69 -0
  240. package/layout/{models/upd-layout.config.d.ts → src/models/upd-layout.config.ts} +10 -0
  241. package/layout/src/pages/auth-flow/auth-flow-routing.module.ts +21 -0
  242. package/layout/src/pages/auth-flow/auth-flow.module.ts +40 -0
  243. package/layout/src/pages/auth-flow/logged-out/logged-out.component.html +1 -0
  244. package/layout/src/pages/auth-flow/logged-out/logged-out.component.scss +0 -0
  245. package/layout/src/pages/auth-flow/logged-out/logged-out.component.spec.ts +23 -0
  246. package/layout/src/pages/auth-flow/logged-out/logged-out.component.ts +10 -0
  247. package/layout/src/pages/auth-flow/login/login.component.html +103 -0
  248. package/layout/src/pages/auth-flow/login/login.component.scss +0 -0
  249. package/layout/src/pages/auth-flow/login/login.component.spec.ts +23 -0
  250. package/layout/src/pages/auth-flow/login/login.component.ts +97 -0
  251. package/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.html +1 -0
  252. package/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.scss +0 -0
  253. package/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.spec.ts +23 -0
  254. package/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.ts +10 -0
  255. package/layout/src/partials/footer/footer-copyright.directive.spec.ts +8 -0
  256. package/layout/src/partials/footer/footer-copyright.directive.ts +6 -0
  257. package/layout/src/partials/footer/footer.component.html +35 -0
  258. package/layout/src/partials/footer/footer.component.scss +0 -0
  259. package/layout/src/partials/footer/footer.component.spec.ts +23 -0
  260. package/layout/src/partials/footer/footer.component.ts +64 -0
  261. package/layout/src/partials/header/header.component.html +173 -0
  262. package/layout/src/partials/header/header.component.scss +0 -0
  263. package/layout/src/partials/header/header.component.spec.ts +23 -0
  264. package/layout/src/partials/header/header.component.ts +82 -0
  265. package/layout/src/partials/page-header/page-header.component.html +23 -0
  266. package/layout/src/partials/page-header/page-header.component.scss +0 -0
  267. package/layout/src/partials/page-header/page-header.component.spec.ts +23 -0
  268. package/layout/src/partials/page-header/page-header.component.ts +11 -0
  269. package/layout/src/partials/sidebar/sidebar.component.html +72 -0
  270. package/layout/src/partials/sidebar/sidebar.component.scss +0 -0
  271. package/layout/src/partials/sidebar/sidebar.component.spec.ts +23 -0
  272. package/layout/src/partials/sidebar/sidebar.component.ts +129 -0
  273. package/layout/src/services/upd-layout-config.service.spec.ts +16 -0
  274. package/layout/src/services/upd-layout-config.service.ts +20 -0
  275. package/layout/{tools/layout.constants.d.ts → src/tools/layout.constants.ts} +6 -3
  276. package/layout/src/upd-layout.module.ts +34 -0
  277. package/link/index.ts +1 -0
  278. package/link/ng-package.json +6 -0
  279. package/link/src/index.ts +1 -0
  280. package/link/src/link.component.html +3 -0
  281. package/link/src/link.component.scss +3 -0
  282. package/link/src/link.component.spec.ts +23 -0
  283. package/link/src/link.component.ts +48 -0
  284. package/link/src/upd-link.module.ts +17 -0
  285. package/list/index.ts +1 -0
  286. package/list/ng-package.json +6 -0
  287. package/list/src/assets/i18n/en.json +9 -0
  288. package/list/src/assets/i18n/pt.json +9 -0
  289. package/list/src/index.ts +1 -0
  290. package/list/src/list.component.html +67 -0
  291. package/list/src/list.component.scss +22 -0
  292. package/list/src/list.component.spec.ts +23 -0
  293. package/list/src/list.component.ts +129 -0
  294. package/list/src/models/list-item.model.ts +36 -0
  295. package/list/{models/list-item.d.ts → src/models/list-item.ts} +4 -1
  296. package/list/src/upd-list.module.ts +30 -0
  297. package/modal/index.ts +1 -0
  298. package/modal/ng-package.json +6 -0
  299. package/modal/src/assets/i18n/en.json +17 -0
  300. package/modal/src/assets/i18n/pt.json +17 -0
  301. package/modal/src/components/modal-container/modal-container.component.html +116 -0
  302. package/modal/src/components/modal-container/modal-container.component.scss +1 -0
  303. package/modal/src/components/modal-container/modal-container.component.spec.ts +22 -0
  304. package/modal/src/components/modal-container/modal-container.component.ts +243 -0
  305. package/modal/src/index.ts +1 -0
  306. package/modal/src/models/base.modal.ts +9 -0
  307. package/modal/src/models/modal-config.model.ts +39 -0
  308. package/modal/src/models/modal-ref.ts +9 -0
  309. package/modal/src/models/modal.config.ts +32 -0
  310. package/modal/src/models/public-api.ts +3 -0
  311. package/modal/src/public-api.ts +3 -0
  312. package/modal/src/services/modal-alert.service.spec.ts +16 -0
  313. package/modal/src/services/modal-alert.service.ts +167 -0
  314. package/modal/src/services/modal.service.spec.ts +16 -0
  315. package/modal/src/services/modal.service.ts +38 -0
  316. package/modal/src/services/public-api.ts +2 -0
  317. package/modal/src/types/modal-footer-style.type.ts +1 -0
  318. package/modal/src/types/modal-size.type.ts +1 -0
  319. package/modal/src/upd-modal.module.ts +74 -0
  320. package/ng-package.json +10 -0
  321. package/package.json +20 -114
  322. package/paginator/index.ts +1 -0
  323. package/paginator/ng-package.json +6 -0
  324. package/paginator/src/assets/i18n/en.json +15 -0
  325. package/paginator/src/assets/i18n/pt.json +15 -0
  326. package/paginator/src/index.ts +1 -0
  327. package/paginator/src/paginator.component.html +83 -0
  328. package/paginator/src/paginator.component.scss +1 -0
  329. package/paginator/src/paginator.component.spec.ts +21 -0
  330. package/paginator/src/paginator.component.ts +62 -0
  331. package/paginator/src/public-api.ts +2 -0
  332. package/paginator/src/upd-paginator.module.ts +32 -0
  333. package/popover/index.ts +1 -0
  334. package/popover/ng-package.json +6 -0
  335. package/popover/src/index.ts +1 -0
  336. package/popover/src/popover.component.html +21 -0
  337. package/popover/src/popover.component.scss +8 -0
  338. package/popover/src/popover.component.spec.ts +23 -0
  339. package/popover/src/popover.component.ts +53 -0
  340. package/popover/src/popover.directive.spec.ts +8 -0
  341. package/popover/src/popover.directive.ts +125 -0
  342. package/popover/src/upd-popover.module.ts +20 -0
  343. package/project.json +40 -0
  344. package/src/index.ts +1 -0
  345. package/src/lib/index.ts +1 -0
  346. package/src/lib/models/public-api.ts +1 -0
  347. package/src/lib/models/row-column-size.ts +5 -0
  348. package/{lib/public-api.d.ts → src/lib/public-api.ts} +2 -0
  349. package/src/lib/tools/column-size.helper.ts +19 -0
  350. package/src/lib/tools/public-api.ts +1 -0
  351. package/src/lib/types/horizontal-vertical.type.ts +1 -0
  352. package/{lib/types/public-api.d.ts → src/lib/types/public-api.ts} +1 -0
  353. package/src/lib/upd-components.module.ts +6 -0
  354. package/src/test-setup.ts +8 -0
  355. package/table/index.ts +1 -0
  356. package/table/ng-package.json +6 -0
  357. package/table/src/abstractions/base-column.model.ts +69 -0
  358. package/table/src/abstractions/base.column.ts +99 -0
  359. package/table/src/abstractions/filters-operands.service.ts +10 -0
  360. package/table/src/abstractions/public-api.ts +2 -0
  361. package/table/src/assets/i18n/en.json +74 -0
  362. package/table/src/assets/i18n/pt.json +74 -0
  363. package/table/src/components/columns/boolean-column/boolean-column.component.html +15 -0
  364. package/table/src/components/columns/boolean-column/boolean-column.component.scss +1 -0
  365. package/table/src/components/columns/boolean-column/boolean-column.component.spec.ts +21 -0
  366. package/table/src/components/columns/boolean-column/boolean-column.component.ts +26 -0
  367. package/table/src/components/columns/date-time-column/date-time-column.component.html +1 -0
  368. package/table/src/components/columns/date-time-column/date-time-column.component.scss +1 -0
  369. package/table/src/components/columns/date-time-column/date-time-column.component.spec.ts +21 -0
  370. package/table/src/components/columns/date-time-column/date-time-column.component.ts +11 -0
  371. package/table/src/components/columns/number-column/number-column.component.html +1 -0
  372. package/table/src/components/columns/number-column/number-column.component.scss +1 -0
  373. package/table/src/components/columns/number-column/number-column.component.spec.ts +21 -0
  374. package/table/src/components/columns/number-column/number-column.component.ts +11 -0
  375. package/table/src/components/columns/public-api.ts +0 -0
  376. package/table/src/components/columns/text-column/text-column.component.html +1 -0
  377. package/table/src/components/columns/text-column/text-column.component.scss +1 -0
  378. package/table/src/components/columns/text-column/text-column.component.spec.ts +21 -0
  379. package/table/src/components/columns/text-column/text-column.component.ts +31 -0
  380. package/table/src/components/columns-manager/columns-manager.component.html +3 -0
  381. package/table/src/components/columns-manager/columns-manager.component.scss +1 -0
  382. package/table/src/components/columns-manager/columns-manager.component.spec.ts +21 -0
  383. package/table/src/components/columns-manager/columns-manager.component.ts +37 -0
  384. package/table/src/components/filter-row/filter-row.component.html +29 -0
  385. package/table/src/components/filter-row/filter-row.component.scss +1 -0
  386. package/table/src/components/filter-row/filter-row.component.spec.ts +21 -0
  387. package/table/src/components/filter-row/filter-row.component.ts +127 -0
  388. package/table/src/components/public-api.ts +0 -0
  389. package/table/src/components/save-search/save-search.component.html +16 -0
  390. package/table/src/components/save-search/save-search.component.scss +1 -0
  391. package/table/src/components/save-search/save-search.component.spec.ts +21 -0
  392. package/table/src/components/save-search/save-search.component.ts +73 -0
  393. package/table/src/components/search-section/search-section.component.html +37 -0
  394. package/table/src/components/search-section/search-section.component.scss +1 -0
  395. package/table/src/components/search-section/search-section.component.spec.ts +21 -0
  396. package/table/src/components/search-section/search-section.component.ts +111 -0
  397. package/table/src/directives/public-api.ts +1 -0
  398. package/table/src/directives/table-column.directive.spec.ts +8 -0
  399. package/table/src/directives/table-column.directive.ts +52 -0
  400. package/table/src/index.ts +1 -0
  401. package/table/src/models/columns/boolean-column.model.ts +29 -0
  402. package/table/src/models/columns/date-time-column.model.ts +20 -0
  403. package/table/src/models/columns/guid-column.model.ts +16 -0
  404. package/table/src/models/columns/image-column.model.ts +15 -0
  405. package/table/src/models/columns/number-column.model.ts +19 -0
  406. package/table/src/models/columns/public-api.ts +6 -0
  407. package/table/src/models/columns/text-column.model.ts +16 -0
  408. package/table/src/models/enums/column-type.enum.ts +13 -0
  409. package/table/src/models/enums/public-api.ts +1 -0
  410. package/table/src/models/filter-item.model.ts +7 -0
  411. package/table/src/models/filter-operand.config.ts +10 -0
  412. package/table/src/models/operands-lists/boolean-filter-operands-list.model.ts +29 -0
  413. package/table/src/models/operands-lists/date-filter-operands-list.model.ts +28 -0
  414. package/table/src/models/operands-lists/date-or-number-operands-list.config.ts +35 -0
  415. package/table/src/models/operands-lists/filter-operands-list.config.ts +35 -0
  416. package/table/src/models/operands-lists/guid-filter-operands-list.model.ts +19 -0
  417. package/table/src/models/operands-lists/number-filter-operands-list.model.ts +28 -0
  418. package/table/src/models/operands-lists/string-filter-operands-list.model.ts +49 -0
  419. package/table/src/models/public-api.ts +4 -0
  420. package/table/src/models/saved-view.model.ts +13 -0
  421. package/table/src/models/table-config.model.ts +32 -0
  422. package/table/src/models/table.config.ts +24 -0
  423. package/table/src/models/upd-table-config.model.ts +12 -0
  424. package/table/src/models/upd-table.config.ts +7 -0
  425. package/table/src/public-api.ts +5 -0
  426. package/table/src/services/default-filters-operands.service.spec.ts +16 -0
  427. package/table/src/services/default-filters-operands.service.ts +62 -0
  428. package/table/src/services/storages/saved-views.storage.spec.ts +16 -0
  429. package/table/src/services/storages/saved-views.storage.ts +76 -0
  430. package/table/src/services/stores/filters-operands.store.spec.ts +16 -0
  431. package/table/src/services/stores/filters-operands.store.ts +17 -0
  432. package/table/src/services/upd-table-config.service.spec.ts +16 -0
  433. package/table/src/services/upd-table-config.service.ts +17 -0
  434. package/table/src/table.component.html +155 -0
  435. package/table/src/table.component.scss +14 -0
  436. package/table/src/table.component.spec.ts +21 -0
  437. package/table/src/table.component.ts +434 -0
  438. package/table/src/tools/filters.tools.ts +67 -0
  439. package/table/src/tools/table.constants.ts +18 -0
  440. package/table/src/upd-table.module.ts +104 -0
  441. package/tsconfig.json +29 -0
  442. package/tsconfig.lib.json +18 -0
  443. package/tsconfig.lib.prod.json +9 -0
  444. package/tsconfig.spec.json +16 -0
  445. package/button/button.component.d.ts +0 -43
  446. package/button/upd-button.module.d.ts +0 -8
  447. package/card/card.component.d.ts +0 -54
  448. package/card/directives/card-actions.directive.d.ts +0 -7
  449. package/card/directives/card-footer.directive.d.ts +0 -7
  450. package/card/directives/card-header.directive.d.ts +0 -7
  451. package/card/directives/card-image.directive.d.ts +0 -7
  452. package/card/upd-card.module.d.ts +0 -14
  453. package/dropdown/dropdown.component.d.ts +0 -63
  454. package/dropdown/models/public-api.d.ts +0 -2
  455. package/dropdown/upd-dropdown.module.d.ts +0 -12
  456. package/esm2022/button/button.component.mjs +0 -163
  457. package/esm2022/button/index.mjs +0 -2
  458. package/esm2022/button/public-api.mjs +0 -3
  459. package/esm2022/button/upd-button.module.mjs +0 -24
  460. package/esm2022/button/updevs-components-button.mjs +0 -5
  461. package/esm2022/card/card.component.mjs +0 -136
  462. package/esm2022/card/directives/card-actions.directive.mjs +0 -16
  463. package/esm2022/card/directives/card-footer.directive.mjs +0 -16
  464. package/esm2022/card/directives/card-header.directive.mjs +0 -16
  465. package/esm2022/card/directives/card-image.directive.mjs +0 -16
  466. package/esm2022/card/directives/public-api.mjs +0 -5
  467. package/esm2022/card/index.mjs +0 -2
  468. package/esm2022/card/public-api.mjs +0 -4
  469. package/esm2022/card/types/card-state.type.mjs +0 -2
  470. package/esm2022/card/types/card-style.type.mjs +0 -2
  471. package/esm2022/card/types/hover-effect.type.mjs +0 -2
  472. package/esm2022/card/types/ribbon-style.type.mjs +0 -2
  473. package/esm2022/card/types/status-position.type.mjs +0 -2
  474. package/esm2022/card/upd-card.module.mjs +0 -50
  475. package/esm2022/card/updevs-components-card.mjs +0 -5
  476. package/esm2022/dropdown/dropdown.component.mjs +0 -145
  477. package/esm2022/dropdown/index.mjs +0 -2
  478. package/esm2022/dropdown/models/dropdown-item.mjs +0 -2
  479. package/esm2022/dropdown/models/dropdown-item.type.mjs +0 -2
  480. package/esm2022/dropdown/models/public-api.mjs +0 -3
  481. package/esm2022/dropdown/public-api.mjs +0 -4
  482. package/esm2022/dropdown/upd-dropdown.module.mjs +0 -40
  483. package/esm2022/dropdown/updevs-components-dropdown.mjs +0 -5
  484. package/esm2022/form/form.module.mjs +0 -18
  485. package/esm2022/form/index.mjs +0 -2
  486. package/esm2022/form/public-api.mjs +0 -2
  487. package/esm2022/form/updevs-components-form.mjs +0 -5
  488. package/esm2022/form-controls/checkbox/checkbox.component.mjs +0 -68
  489. package/esm2022/form-controls/checkbox/index.mjs +0 -2
  490. package/esm2022/form-controls/checkbox/public-api.mjs +0 -3
  491. package/esm2022/form-controls/checkbox/upd-checkbox.module.mjs +0 -28
  492. package/esm2022/form-controls/checkbox/updevs-components-form-controls-checkbox.mjs +0 -5
  493. package/esm2022/form-controls/input/directives/input-append.directive.mjs +0 -16
  494. package/esm2022/form-controls/input/directives/input-prepend.directive.mjs +0 -16
  495. package/esm2022/form-controls/input/directives/public-api.mjs +0 -3
  496. package/esm2022/form-controls/input/index.mjs +0 -2
  497. package/esm2022/form-controls/input/input.component.mjs +0 -155
  498. package/esm2022/form-controls/input/public-api.mjs +0 -5
  499. package/esm2022/form-controls/input/types/input.type.mjs +0 -2
  500. package/esm2022/form-controls/input/types/loader-position.type.mjs +0 -2
  501. package/esm2022/form-controls/input/types/public-api.mjs +0 -3
  502. package/esm2022/form-controls/input/upd-input.module.mjs +0 -46
  503. package/esm2022/form-controls/input/updevs-components-form-controls-input.mjs +0 -5
  504. package/esm2022/form-controls/radio/index.mjs +0 -2
  505. package/esm2022/form-controls/radio/public-api.mjs +0 -3
  506. package/esm2022/form-controls/radio/radio.component.mjs +0 -64
  507. package/esm2022/form-controls/radio/upd-radio.module.mjs +0 -24
  508. package/esm2022/form-controls/radio/updevs-components-form-controls-radio.mjs +0 -5
  509. package/esm2022/form-controls/select/components/multiple/select-multiple.component.mjs +0 -65
  510. package/esm2022/form-controls/select/components/single/select.component.mjs +0 -53
  511. package/esm2022/form-controls/select/index.mjs +0 -2
  512. package/esm2022/form-controls/select/models/abstractions/base-select.component.mjs +0 -208
  513. package/esm2022/form-controls/select/models/public-api.mjs +0 -2
  514. package/esm2022/form-controls/select/models/select-item.mjs +0 -2
  515. package/esm2022/form-controls/select/public-api.mjs +0 -5
  516. package/esm2022/form-controls/select/upd-select.module.mjs +0 -53
  517. package/esm2022/form-controls/select/updevs-components-form-controls-select.mjs +0 -5
  518. package/esm2022/form-controls/textarea/index.mjs +0 -2
  519. package/esm2022/form-controls/textarea/public-api.mjs +0 -3
  520. package/esm2022/form-controls/textarea/textarea.component.mjs +0 -62
  521. package/esm2022/form-controls/textarea/upd-textarea.module.mjs +0 -24
  522. package/esm2022/form-controls/textarea/updevs-components-form-controls-textarea.mjs +0 -5
  523. package/esm2022/form-controls/time-picker/index.mjs +0 -2
  524. package/esm2022/form-controls/time-picker/public-api.mjs +0 -4
  525. package/esm2022/form-controls/time-picker/time-picker.component.mjs +0 -130
  526. package/esm2022/form-controls/time-picker/time-selector/time-selector.component.mjs +0 -124
  527. package/esm2022/form-controls/time-picker/upd-time-picker.module.mjs +0 -60
  528. package/esm2022/form-controls/time-picker/updevs-components-form-controls-time-picker.mjs +0 -5
  529. package/esm2022/layout/abstractions/base-page.component.mjs +0 -24
  530. package/esm2022/layout/abstractions/public-api.mjs +0 -2
  531. package/esm2022/layout/assets/i18n/en.json +0 -5
  532. package/esm2022/layout/assets/i18n/pt.json +0 -5
  533. package/esm2022/layout/index.mjs +0 -2
  534. package/esm2022/layout/layouts/blank-layout/blank-layout.component.mjs +0 -11
  535. package/esm2022/layout/layouts/blank-layout/blank-layout.module.mjs +0 -24
  536. package/esm2022/layout/layouts/public-api.mjs +0 -5
  537. package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.mjs +0 -31
  538. package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.mjs +0 -81
  539. package/esm2022/layout/models/public-api.mjs +0 -2
  540. package/esm2022/layout/models/upd-layout-config.model.mjs +0 -30
  541. package/esm2022/layout/models/upd-layout.config.mjs +0 -2
  542. package/esm2022/layout/pages/auth-flow/auth-flow-routing.module.mjs +0 -28
  543. package/esm2022/layout/pages/auth-flow/auth-flow.module.mjs +0 -46
  544. package/esm2022/layout/pages/auth-flow/logged-out/logged-out.component.mjs +0 -11
  545. package/esm2022/layout/pages/auth-flow/login/login.component.mjs +0 -27
  546. package/esm2022/layout/pages/auth-flow/oauth-callback/oauth-callback.component.mjs +0 -11
  547. package/esm2022/layout/pages/auth-flow/public-api.mjs +0 -6
  548. package/esm2022/layout/pages/public-api.mjs +0 -2
  549. package/esm2022/layout/partials/footer/footer-copyright.directive.mjs +0 -13
  550. package/esm2022/layout/partials/footer/footer.component.mjs +0 -67
  551. package/esm2022/layout/partials/footer/public-api.mjs +0 -3
  552. package/esm2022/layout/partials/header/header-style.type.mjs +0 -2
  553. package/esm2022/layout/partials/header/header.component.mjs +0 -77
  554. package/esm2022/layout/partials/header/public-api.mjs +0 -3
  555. package/esm2022/layout/partials/page-header/page-header.component.mjs +0 -14
  556. package/esm2022/layout/partials/page-header/public-api.mjs +0 -2
  557. package/esm2022/layout/partials/public-api.mjs +0 -5
  558. package/esm2022/layout/partials/sidebar/public-api.mjs +0 -2
  559. package/esm2022/layout/partials/sidebar/sidebar.component.mjs +0 -143
  560. package/esm2022/layout/public-api.mjs +0 -8
  561. package/esm2022/layout/services/public-api.mjs +0 -2
  562. package/esm2022/layout/services/upd-layout-config.service.mjs +0 -21
  563. package/esm2022/layout/tools/layout.constants.mjs +0 -15
  564. package/esm2022/layout/upd-layout.module.mjs +0 -43
  565. package/esm2022/layout/updevs-components-layout.mjs +0 -5
  566. package/esm2022/lib/index.mjs +0 -2
  567. package/esm2022/lib/public-api.mjs +0 -3
  568. package/esm2022/lib/types/component-size.type.mjs +0 -2
  569. package/esm2022/lib/types/public-api.mjs +0 -3
  570. package/esm2022/lib/types/validation-status.type.mjs +0 -2
  571. package/esm2022/lib/upd-components.module.mjs +0 -14
  572. package/esm2022/link/index.mjs +0 -2
  573. package/esm2022/link/link.component.mjs +0 -51
  574. package/esm2022/link/public-api.mjs +0 -4
  575. package/esm2022/link/target.type.mjs +0 -2
  576. package/esm2022/link/upd-link.module.mjs +0 -24
  577. package/esm2022/link/updevs-components-link.mjs +0 -5
  578. package/esm2022/list/assets/i18n/en.json +0 -5
  579. package/esm2022/list/assets/i18n/pt.json +0 -5
  580. package/esm2022/list/index.mjs +0 -2
  581. package/esm2022/list/list.component.mjs +0 -134
  582. package/esm2022/list/models/badge-position.type.mjs +0 -2
  583. package/esm2022/list/models/list-item.mjs +0 -2
  584. package/esm2022/list/models/list-item.model.mjs +0 -15
  585. package/esm2022/list/models/public-api.mjs +0 -3
  586. package/esm2022/list/public-api.mjs +0 -4
  587. package/esm2022/list/upd-list.module.mjs +0 -43
  588. package/esm2022/list/updevs-components-list.mjs +0 -5
  589. package/esm2022/popover/index.mjs +0 -2
  590. package/esm2022/popover/popover.component.mjs +0 -65
  591. package/esm2022/popover/popover.directive.mjs +0 -129
  592. package/esm2022/popover/public-api.mjs +0 -4
  593. package/esm2022/popover/upd-popover.module.mjs +0 -29
  594. package/esm2022/popover/updevs-components-popover.mjs +0 -5
  595. package/esm2022/public-api.mjs +0 -2
  596. package/esm2022/updevs-components.mjs +0 -5
  597. package/fesm2022/updevs-components-button.mjs +0 -191
  598. package/fesm2022/updevs-components-button.mjs.map +0 -1
  599. package/fesm2022/updevs-components-card.mjs +0 -238
  600. package/fesm2022/updevs-components-card.mjs.map +0 -1
  601. package/fesm2022/updevs-components-dropdown.mjs +0 -189
  602. package/fesm2022/updevs-components-dropdown.mjs.map +0 -1
  603. package/fesm2022/updevs-components-form-controls-checkbox.mjs +0 -100
  604. package/fesm2022/updevs-components-form-controls-checkbox.mjs.map +0 -1
  605. package/fesm2022/updevs-components-form-controls-input.mjs +0 -229
  606. package/fesm2022/updevs-components-form-controls-input.mjs.map +0 -1
  607. package/fesm2022/updevs-components-form-controls-radio.mjs +0 -92
  608. package/fesm2022/updevs-components-form-controls-radio.mjs.map +0 -1
  609. package/fesm2022/updevs-components-form-controls-select.mjs +0 -371
  610. package/fesm2022/updevs-components-form-controls-select.mjs.map +0 -1
  611. package/fesm2022/updevs-components-form-controls-textarea.mjs +0 -90
  612. package/fesm2022/updevs-components-form-controls-textarea.mjs.map +0 -1
  613. package/fesm2022/updevs-components-form-controls-time-picker.mjs +0 -344
  614. package/fesm2022/updevs-components-form-controls-time-picker.mjs.map +0 -1
  615. package/fesm2022/updevs-components-form.mjs +0 -25
  616. package/fesm2022/updevs-components-form.mjs.map +0 -1
  617. package/fesm2022/updevs-components-layout.mjs +0 -670
  618. package/fesm2022/updevs-components-layout.mjs.map +0 -1
  619. package/fesm2022/updevs-components-link.mjs +0 -79
  620. package/fesm2022/updevs-components-link.mjs.map +0 -1
  621. package/fesm2022/updevs-components-list.mjs +0 -226
  622. package/fesm2022/updevs-components-list.mjs.map +0 -1
  623. package/fesm2022/updevs-components-popover.mjs +0 -223
  624. package/fesm2022/updevs-components-popover.mjs.map +0 -1
  625. package/fesm2022/updevs-components.mjs +0 -21
  626. package/fesm2022/updevs-components.mjs.map +0 -1
  627. package/form/form.module.d.ts +0 -7
  628. package/form/public-api.d.ts +0 -1
  629. package/form-controls/checkbox/checkbox.component.d.ts +0 -25
  630. package/form-controls/checkbox/upd-checkbox.module.d.ts +0 -9
  631. package/form-controls/input/directives/input-append.directive.d.ts +0 -7
  632. package/form-controls/input/directives/input-prepend.directive.d.ts +0 -7
  633. package/form-controls/input/input.component.d.ts +0 -54
  634. package/form-controls/input/upd-input.module.d.ts +0 -13
  635. package/form-controls/radio/radio.component.d.ts +0 -24
  636. package/form-controls/radio/upd-radio.module.d.ts +0 -8
  637. package/form-controls/select/components/multiple/select-multiple.component.d.ts +0 -18
  638. package/form-controls/select/components/single/select.component.d.ts +0 -20
  639. package/form-controls/select/models/abstractions/base-select.component.d.ts +0 -80
  640. package/form-controls/select/upd-select.module.d.ts +0 -15
  641. package/form-controls/textarea/textarea.component.d.ts +0 -23
  642. package/form-controls/textarea/upd-textarea.module.d.ts +0 -8
  643. package/form-controls/time-picker/time-picker.component.d.ts +0 -78
  644. package/form-controls/time-picker/time-selector/time-selector.component.d.ts +0 -69
  645. package/form-controls/time-picker/upd-time-picker.module.d.ts +0 -17
  646. package/index.d.ts +0 -5
  647. package/layout/abstractions/base-page.component.d.ts +0 -12
  648. package/layout/layouts/blank-layout/blank-layout.component.d.ts +0 -5
  649. package/layout/layouts/blank-layout/blank-layout.module.d.ts +0 -8
  650. package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.d.ts +0 -12
  651. package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.d.ts +0 -20
  652. package/layout/models/upd-layout-config.model.d.ts +0 -39
  653. package/layout/pages/auth-flow/auth-flow-routing.module.d.ts +0 -12
  654. package/layout/pages/auth-flow/auth-flow.module.d.ts +0 -13
  655. package/layout/pages/auth-flow/logged-out/logged-out.component.d.ts +0 -5
  656. package/layout/pages/auth-flow/login/login.component.d.ts +0 -12
  657. package/layout/pages/auth-flow/oauth-callback/oauth-callback.component.d.ts +0 -5
  658. package/layout/partials/footer/footer-copyright.directive.d.ts +0 -5
  659. package/layout/partials/footer/footer.component.d.ts +0 -43
  660. package/layout/partials/header/header.component.d.ts +0 -31
  661. package/layout/partials/page-header/page-header.component.d.ts +0 -7
  662. package/layout/partials/sidebar/sidebar.component.d.ts +0 -19
  663. package/layout/services/upd-layout-config.service.d.ts +0 -15
  664. package/layout/upd-layout.module.d.ts +0 -18
  665. package/lib/upd-components.module.d.ts +0 -6
  666. package/link/link.component.d.ts +0 -22
  667. package/link/upd-link.module.d.ts +0 -8
  668. package/list/list.component.d.ts +0 -61
  669. package/list/models/list-item.model.d.ts +0 -24
  670. package/list/upd-list.module.d.ts +0 -13
  671. package/popover/popover.component.d.ts +0 -22
  672. package/popover/popover.directive.d.ts +0 -33
  673. package/popover/upd-popover.module.d.ts +0 -9
  674. /package/{button/index.d.ts → badge/src/index.ts} +0 -0
  675. /package/{card/index.d.ts → button/src/index.ts} +0 -0
  676. /package/button/{public-api.d.ts → src/public-api.ts} +0 -0
  677. /package/{dropdown/index.d.ts → calendar/src/index.ts} +0 -0
  678. /package/card/{directives/public-api.d.ts → src/directives/public-api.ts} +0 -0
  679. /package/{form-controls/checkbox/index.d.ts → card/src/index.ts} +0 -0
  680. /package/card/{public-api.d.ts → src/public-api.ts} +0 -0
  681. /package/card/{types/card-state.type.d.ts → src/types/card-state.type.ts} +0 -0
  682. /package/card/{types/card-style.type.d.ts → src/types/card-style.type.ts} +0 -0
  683. /package/card/{types/hover-effect.type.d.ts → src/types/hover-effect.type.ts} +0 -0
  684. /package/card/{types/ribbon-style.type.d.ts → src/types/ribbon-style.type.ts} +0 -0
  685. /package/card/{types/status-position.type.d.ts → src/types/status-position.type.ts} +0 -0
  686. /package/{form-controls/input/index.d.ts → drag-and-drop/src/index.ts} +0 -0
  687. /package/{form-controls/radio/index.d.ts → dropdown/src/index.ts} +0 -0
  688. /package/dropdown/{public-api.d.ts → src/public-api.ts} +0 -0
  689. /package/{popover/index.d.ts → form/src/index.ts} +0 -0
  690. /package/form-controls/{select/index.d.ts → abstractions/src/index.ts} +0 -0
  691. /package/form-controls/{textarea/index.d.ts → checkbox/src/index.ts} +0 -0
  692. /package/form-controls/{time-picker/index.d.ts → date-picker/src/index.ts} +0 -0
  693. /package/form-controls/input/{directives/public-api.d.ts → src/directives/public-api.ts} +0 -0
  694. /package/{form/index.d.ts → form-controls/input/src/index.ts} +0 -0
  695. /package/form-controls/input/{public-api.d.ts → src/public-api.ts} +0 -0
  696. /package/form-controls/input/{types/input.type.d.ts → src/types/input.type.ts} +0 -0
  697. /package/form-controls/input/{types/loader-position.type.d.ts → src/types/loader-position.type.ts} +0 -0
  698. /package/form-controls/input/{types/public-api.d.ts → src/types/public-api.ts} +0 -0
  699. /package/{layout/index.d.ts → form-controls/radio/src/index.ts} +0 -0
  700. /package/form-controls/radio/{public-api.d.ts → src/public-api.ts} +0 -0
  701. /package/{lib/index.d.ts → form-controls/select/src/index.ts} +0 -0
  702. /package/form-controls/select/{public-api.d.ts → src/public-api.ts} +0 -0
  703. /package/{link/index.d.ts → form-controls/textarea/src/index.ts} +0 -0
  704. /package/form-controls/textarea/{public-api.d.ts → src/public-api.ts} +0 -0
  705. /package/{esm2022/form-controls/time-picker → form-controls/time-picker/src}/assets/i18n/en.json +0 -0
  706. /package/{esm2022/form-controls/time-picker → form-controls/time-picker/src}/assets/i18n/pt.json +0 -0
  707. /package/{list/index.d.ts → form-controls/time-picker/src/index.ts} +0 -0
  708. /package/form-controls/time-picker/{public-api.d.ts → src/public-api.ts} +0 -0
  709. /package/layout/{abstractions/public-api.d.ts → src/abstractions/public-api.ts} +0 -0
  710. /package/layout/{layouts/public-api.d.ts → src/layouts/public-api.ts} +0 -0
  711. /package/layout/{pages/auth-flow/public-api.d.ts → src/pages/auth-flow/public-api.ts} +0 -0
  712. /package/layout/{pages/public-api.d.ts → src/pages/public-api.ts} +0 -0
  713. /package/layout/{partials/footer/public-api.d.ts → src/partials/footer/public-api.ts} +0 -0
  714. /package/layout/{partials/header/header-style.type.d.ts → src/partials/header/header-style.type.ts} +0 -0
  715. /package/layout/{partials/header/public-api.d.ts → src/partials/header/public-api.ts} +0 -0
  716. /package/layout/{partials/page-header/public-api.d.ts → src/partials/page-header/public-api.ts} +0 -0
  717. /package/layout/{partials/public-api.d.ts → src/partials/public-api.ts} +0 -0
  718. /package/layout/{partials/sidebar/public-api.d.ts → src/partials/sidebar/public-api.ts} +0 -0
  719. /package/layout/{public-api.d.ts → src/public-api.ts} +0 -0
  720. /package/layout/{services/public-api.d.ts → src/services/public-api.ts} +0 -0
  721. /package/link/{public-api.d.ts → src/public-api.ts} +0 -0
  722. /package/link/{target.type.d.ts → src/target.type.ts} +0 -0
  723. /package/list/{models/badge-position.type.d.ts → src/models/badge-position.type.ts} +0 -0
  724. /package/list/{models/public-api.d.ts → src/models/public-api.ts} +0 -0
  725. /package/list/{public-api.d.ts → src/public-api.ts} +0 -0
  726. /package/popover/{public-api.d.ts → src/public-api.ts} +0 -0
  727. /package/{lib/types/component-size.type.d.ts → src/lib/types/component-size.type.ts} +0 -0
  728. /package/{lib/types/validation-status.type.d.ts → src/lib/types/validation-status.type.ts} +0 -0
  729. /package/{public-api.d.ts → src/public-api.ts} +0 -0
@@ -0,0 +1,665 @@
1
+ import {
2
+ Component,
3
+ EventEmitter,
4
+ Injector,
5
+ Input,
6
+ Output,
7
+ SimpleChanges,
8
+ inject,
9
+ OnChanges,
10
+ AfterViewChecked,
11
+ OnDestroy,
12
+ ElementRef,
13
+ NgZone,
14
+ afterNextRender
15
+ } from '@angular/core';
16
+ import { OptionalType } from '@updevs/sdk/types';
17
+ import { DateService } from '@updevs/sdk/core';
18
+
19
+ import { CalendarCellModel } from '../../models/calendar-cell.model';
20
+ import { CalendarUserEventModel } from '../../models/calendar-user-event.model';
21
+ import { activeCapturingEventOptions, passiveCapturingEventOptions, passiveEventOptions } from '../../tools/events-options';
22
+ import { CalendarSignalsService } from '../../services/calendar-signals.service';
23
+
24
+ let calendarBodyId = 1;
25
+
26
+ @Component({
27
+ selector: 'upd-calendar-body',
28
+ templateUrl: './calendar-body.component.html',
29
+ styleUrl: './calendar-body.component.scss'
30
+ })
31
+ export class CalendarBodyComponent implements OnChanges, AfterViewChecked, OnDestroy {
32
+ /**
33
+ * The label for the table. (e.g. "Jan 2017").
34
+ */
35
+ @Input() label!: string;
36
+
37
+ /**
38
+ * The cells to display in the table.
39
+ */
40
+ @Input() rows!: CalendarCellModel[][];
41
+
42
+ /**
43
+ * The value in the table that corresponds to today.
44
+ */
45
+ @Input() todayValue?: number;
46
+
47
+ /**
48
+ * Start value of the selected date range.
49
+ */
50
+ @Input() startValue?: number;
51
+
52
+ /**
53
+ * End value of the selected date range.
54
+ */
55
+ @Input() endValue?: number;
56
+
57
+ /**
58
+ * The minimum number of free cells needed to fit the label in the first row.
59
+ */
60
+ @Input() labelMinRequiredCells!: number;
61
+
62
+ /**
63
+ * The number of columns in the table.
64
+ */
65
+ @Input() numCols = 7;
66
+
67
+ /**
68
+ * The cell number of the active cell in the table.
69
+ */
70
+ @Input() activeCell = 0;
71
+
72
+ /**
73
+ * Whether a range is being selected.
74
+ */
75
+ @Input() isRange = false;
76
+
77
+ /**
78
+ * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be
79
+ * maintained even as the table resizes.
80
+ */
81
+ @Input() cellAspectRatio = 1;
82
+
83
+ /**
84
+ * Start of the comparison range.
85
+ */
86
+ @Input() comparisonStart?: number;
87
+
88
+ /**
89
+ * End of the comparison range.
90
+ */
91
+ @Input() comparisonEnd?: number;
92
+
93
+ /**
94
+ * Start of the preview range.
95
+ */
96
+ @Input() previewStart?: number;
97
+
98
+ /**
99
+ * End of the preview range.
100
+ */
101
+ @Input() previewEnd?: number;
102
+
103
+ /**
104
+ * ARIA Accessible name of the `<input updStartDate/>`
105
+ */
106
+ @Input() startDateAccessibleName?: string;
107
+
108
+ /**
109
+ * ARIA Accessible name of the `<input updEndDate/>`
110
+ */
111
+ @Input() endDateAccessibleName?: string;
112
+
113
+ /**
114
+ * Emits when a new value is selected.
115
+ */
116
+ @Output() readonly selectedValueChange = new EventEmitter<CalendarUserEventModel<number>>();
117
+
118
+ /**
119
+ * Emits when the preview has changed as a result of a user action.
120
+ */
121
+ @Output() readonly previewChange = new EventEmitter<CalendarUserEventModel<OptionalType<CalendarCellModel>>>();
122
+
123
+ /**
124
+ * Emits the date at the possible start of a drag event.
125
+ */
126
+ @Output() readonly dragStarted = new EventEmitter<CalendarUserEventModel<Date>>();
127
+
128
+ /**
129
+ * Emits the date at the conclusion of a drag, or null if mouse was not released on a date.
130
+ */
131
+ @Output() readonly dragEnded = new EventEmitter<CalendarUserEventModel<OptionalType<Date>>>();
132
+
133
+ /**
134
+ * The number of blank cells to put at the beginning for the first row.
135
+ */
136
+ firstRowOffset!: number;
137
+
138
+ /**
139
+ * Padding for the individual date cells.
140
+ */
141
+ cellPadding!: string;
142
+
143
+ /**
144
+ * Width of an individual cell.
145
+ */
146
+ cellWidth!: string;
147
+
148
+ hoveredDate?: string;
149
+
150
+ get startDateLabelId(): string {
151
+ return `${this.id}-start-date`;
152
+ }
153
+ get endDateLabelId(): string {
154
+ return `${this.id}-end-date`;
155
+ }
156
+ get colspanClass(): string {
157
+ return `col-${this.firstRowOffset}`;
158
+ }
159
+
160
+ private didDragSinceMouseDown = false;
161
+ private id = `upd-calendar-body-${calendarBodyId++}`;
162
+ /**
163
+ * Used to skip the next focus event when rendering the preview range.
164
+ * We need a flag like this, because some browsers fire focus events asynchronously.
165
+ */
166
+ private skipNextFocus?: boolean;
167
+ /**
168
+ * Used to focus the active cell after change detection has run.
169
+ */
170
+ private focusActiveCellAfterViewChecked = false;
171
+
172
+ private readonly injector = inject(Injector);
173
+ private readonly elementRef = inject(ElementRef<HTMLElement>);
174
+ private readonly ngZone = inject(NgZone);
175
+ private readonly calendarSignalsService = inject(CalendarSignalsService);
176
+ private readonly dateService = inject(DateService);
177
+
178
+ constructor() {
179
+ this.ngZone.runOutsideAngular(() => {
180
+ const element = this.elementRef.nativeElement;
181
+
182
+ // `touchmove` is active since we need to call `preventDefault`.
183
+ element.addEventListener('touchmove', this.touchmoveHandler, activeCapturingEventOptions);
184
+ element.addEventListener('mouseenter', this.enterHandler, passiveCapturingEventOptions);
185
+ element.addEventListener('focus', this.enterHandler, passiveCapturingEventOptions);
186
+ element.addEventListener('mouseleave', this.leaveHandler, passiveCapturingEventOptions);
187
+ element.addEventListener('blur', this.leaveHandler, passiveCapturingEventOptions);
188
+ element.addEventListener('mousedown', this.mousedownHandler, passiveEventOptions);
189
+ element.addEventListener('touchstart', this.mousedownHandler, passiveEventOptions);
190
+ window.addEventListener('mouseup', this.mouseupHandler);
191
+ window.addEventListener('touchend', this.touchendHandler);
192
+ });
193
+ }
194
+
195
+ ngAfterViewChecked(): void {
196
+ if (this.focusActiveCellAfterViewChecked) {
197
+ this.focusActiveCell();
198
+ this.focusActiveCellAfterViewChecked = false;
199
+ }
200
+ }
201
+
202
+ ngOnChanges(changes: SimpleChanges): void {
203
+ const columnChanges = changes['numCols'];
204
+ const { rows, numCols } = this;
205
+
206
+ if (changes['rows'] || columnChanges) {
207
+ this.firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;
208
+ }
209
+
210
+ if (changes['cellAspectRatio'] || columnChanges || !this.cellPadding) {
211
+ this.cellPadding = `${(50 * this.cellAspectRatio) / numCols}%`;
212
+ }
213
+
214
+ if (columnChanges || !this.cellWidth) {
215
+ this.cellWidth = `${100 / numCols}%`;
216
+ }
217
+ }
218
+
219
+ ngOnDestroy(): void {
220
+ const element = this.elementRef.nativeElement;
221
+
222
+ element.removeEventListener('touchmove', this.touchmoveHandler, activeCapturingEventOptions);
223
+ element.removeEventListener('mouseenter', this.enterHandler, passiveCapturingEventOptions);
224
+ element.removeEventListener('focus', this.enterHandler, passiveCapturingEventOptions);
225
+ element.removeEventListener('mouseleave', this.leaveHandler, passiveCapturingEventOptions);
226
+ element.removeEventListener('blur', this.leaveHandler, passiveCapturingEventOptions);
227
+ element.removeEventListener('mousedown', this.mousedownHandler, passiveEventOptions);
228
+ element.removeEventListener('touchstart', this.mousedownHandler, passiveEventOptions);
229
+ window.removeEventListener('mouseup', this.mouseupHandler);
230
+ window.removeEventListener('touchend', this.touchendHandler);
231
+ }
232
+
233
+ getIndex(colIndex: number, rowIndex: number): string {
234
+ return `${colIndex}${rowIndex}`;
235
+ }
236
+
237
+ onDateEnter(index: string): void {
238
+ this.hoveredDate = index;
239
+ }
240
+
241
+ onDateLeave(): void {
242
+ this.hoveredDate = undefined;
243
+ }
244
+
245
+ /**
246
+ * Tracking function for rows based on their identity. Ideally we would use some sort of
247
+ * key on the row, but that would require a breaking change for the `rows` input. We don't
248
+ * use the built-in identity tracking, because it logs warnings.
249
+ */
250
+ trackRow = (row: CalendarCellModel[]) => row;
251
+
252
+ /**
253
+ * Called when a cell is clicked.
254
+ * @param cell
255
+ * @param event
256
+ */
257
+ cellClicked(cell: CalendarCellModel, event: MouseEvent): void {
258
+ // Ignore "clicks" that are actually canceled drags (eg the user dragged off and then went back to this cell to undo).
259
+ if (this.didDragSinceMouseDown) {
260
+ return;
261
+ }
262
+
263
+ if (cell.isEnabled) {
264
+ this.selectedValueChange.emit({ value: cell.value, event });
265
+ }
266
+ }
267
+
268
+ emitActiveDateChange(cell: CalendarCellModel): void {
269
+ if (cell.isEnabled) {
270
+ const month = cell.value;
271
+ const oldActiveDate = this.calendarSignalsService.activeDate();
272
+ const tempDate = this.getDateFromDayOfMonth(oldActiveDate, month);
273
+
274
+ if (this.dateService.compare(oldActiveDate, tempDate)) {
275
+ this.calendarSignalsService.activeDate = tempDate;
276
+ }
277
+ }
278
+ }
279
+
280
+ /**
281
+ * Returns whether a cell should be marked as selected.
282
+ * @param value
283
+ */
284
+ isSelected(value: number): boolean {
285
+ return this.startValue === value || this.endValue === value;
286
+ }
287
+
288
+ /**
289
+ * Returns whether a cell is active.
290
+ * @param rowIndex
291
+ * @param colIndex
292
+ */
293
+ isActiveCell(rowIndex: number, colIndex: number): boolean {
294
+ let cellNumber = rowIndex * this.numCols + colIndex;
295
+
296
+ // Account for the fact that the first row may not have as many cells.
297
+ if (rowIndex) {
298
+ cellNumber -= this.firstRowOffset;
299
+ }
300
+
301
+ return cellNumber === this.activeCell;
302
+ }
303
+
304
+ /**
305
+ * Focuses the active cell after the microtask queue is empty.
306
+ *
307
+ * Adding a 0ms setTimeout seems to fix Voiceover losing focus when pressing PageUp/PageDown
308
+ * (issue #24330).
309
+ *
310
+ * Determined a 0ms by gradually increasing duration from 0 and testing two use cases with screen
311
+ * reader enabled:
312
+ *
313
+ * 1. Pressing PageUp/PageDown repeatedly with pausing between each key press.
314
+ * 2. Pressing and holding the PageDown key with repeated keys enabled.
315
+ *
316
+ * Test 1 worked roughly 95-99% of the time with 0ms and got a little bit better as the duration
317
+ * increased. Test 2 got slightly better until the duration was long enough to interfere with
318
+ * repeated keys. If the repeated key speed was faster than the timeout duration, then pressing
319
+ * and holding pagedown caused the entire page to scroll.
320
+ *
321
+ * Since repeated key speed can verify across machines, determined that any duration could
322
+ * potentially interfere with repeated keys. 0ms would be best because it almost entirely
323
+ * eliminates the focus being lost in Voiceover (#24330) without causing unintended side effects.
324
+ * Adding delay also complicates writing tests.
325
+ */
326
+ focusActiveCell(movePreview = true): void {
327
+ afterNextRender(
328
+ () => {
329
+ setTimeout(() => {
330
+ const activeCell = this.elementRef.nativeElement.querySelector('.upd-calendar-body-active');
331
+
332
+ if (!!activeCell) {
333
+ if (!movePreview) {
334
+ this.skipNextFocus = true;
335
+ }
336
+
337
+ activeCell.focus();
338
+ }
339
+ });
340
+ },
341
+ { injector: this.injector }
342
+ );
343
+ }
344
+
345
+ /**
346
+ * Focuses the active cell after change detection has run and the microtask queue is empty.
347
+ */
348
+ scheduleFocusActiveCellAfterViewChecked(): void {
349
+ this.focusActiveCellAfterViewChecked = true;
350
+ }
351
+
352
+ /**
353
+ * Gets whether a value is the start of the main range.
354
+ * @param value
355
+ */
356
+ isRangeStart(value: number): boolean {
357
+ return this.isStart(value, this.startValue, this.endValue);
358
+ }
359
+
360
+ /** Gets whether a value is the end of the main range. */
361
+ isRangeEnd(value: number): boolean {
362
+ return this.isEnd(value, this.startValue, this.endValue);
363
+ }
364
+
365
+ /** Gets whether a value is within the currently-selected range. */
366
+ isInRange(value: number): boolean {
367
+ return this.isInsideRange(value, this.startValue, this.endValue, this.isRange);
368
+ }
369
+
370
+ /** Gets whether a value is the start of the comparison range. */
371
+ isComparisonStart(value: number): boolean {
372
+ return this.isStart(value, this.comparisonStart, this.comparisonEnd);
373
+ }
374
+
375
+ /** Whether the cell is a start bridge cell between the main and comparison ranges. */
376
+ isComparisonBridgeStart(value: number, rowIndex: number, colIndex: number) {
377
+ if (!this.isComparisonStart(value) || this.isRangeStart(value) || !this.isInRange(value)) {
378
+ return false;
379
+ }
380
+
381
+ let previousCell: CalendarCellModel | undefined = this.rows[rowIndex][colIndex - 1];
382
+
383
+ if (!previousCell) {
384
+ const previousRow = this.rows[rowIndex - 1];
385
+ previousCell = previousRow && previousRow[previousRow.length - 1];
386
+ }
387
+
388
+ return previousCell && !this.isRangeEnd(previousCell.compareValue);
389
+ }
390
+
391
+ /** Whether the cell is an end bridge cell between the main and comparison ranges. */
392
+ isComparisonBridgeEnd(value: number, rowIndex: number, colIndex: number) {
393
+ if (!this.isComparisonEnd(value) || this.isRangeEnd(value) || !this.isInRange(value)) {
394
+ return false;
395
+ }
396
+
397
+ let nextCell: CalendarCellModel | undefined = this.rows[rowIndex][colIndex + 1];
398
+
399
+ if (!nextCell) {
400
+ const nextRow = this.rows[rowIndex + 1];
401
+ nextCell = nextRow && nextRow[0];
402
+ }
403
+
404
+ return nextCell && !this.isRangeStart(nextCell.compareValue);
405
+ }
406
+
407
+ /** Gets whether a value is the end of the comparison range. */
408
+ isComparisonEnd(value: number) {
409
+ return this.isEnd(value, this.comparisonStart, this.comparisonEnd);
410
+ }
411
+
412
+ /** Gets whether a value is within the current comparison range. */
413
+ isInComparisonRange(value: number) {
414
+ return this.isInsideRange(value, this.comparisonStart, this.comparisonEnd, this.isRange);
415
+ }
416
+
417
+ /**
418
+ * Gets whether a value is the same as the start and end of the comparison range.
419
+ * For context, the functions that we use to determine whether something is the start/end of
420
+ * a range don't allow for the start and end to be on the same day, because we'd have to use
421
+ * much more specific CSS selectors to style them correctly in all scenarios. This is fine for
422
+ * the regular range, because when it happens, the selected styles take over and still show where
423
+ * the range would've been, however we don't have these selected styles for a comparison range.
424
+ * This function is used to apply a class that serves the same purpose as the one for selected
425
+ * dates, but it only applies in the context of a comparison range.
426
+ */
427
+ isComparisonIdentical(value: number) {
428
+ // Note that we don't need to null check the start/end
429
+ // here, because the `value` will always be defined.
430
+ return this.comparisonStart === this.comparisonEnd && value === this.comparisonStart;
431
+ }
432
+
433
+ /** Gets whether a value is the start of the preview range. */
434
+ isPreviewStart(value: number) {
435
+ return this.isStart(value, this.previewStart, this.previewEnd);
436
+ }
437
+
438
+ /** Gets whether a value is the end of the preview range. */
439
+ isPreviewEnd(value: number) {
440
+ return this.isEnd(value, this.previewStart, this.previewEnd);
441
+ }
442
+
443
+ /** Gets whether a value is inside the preview range. */
444
+ isInPreview(value: number) {
445
+ // console.log('is in range', this.isInsideRange(value, this.previewStart, this.previewEnd, this.isRange));
446
+ return this.isInsideRange(value, this.previewStart, this.previewEnd, this.isRange);
447
+ }
448
+
449
+ /** Gets ids of aria descriptions for the start and end of a date range. */
450
+ getDescribedby(value: number): OptionalType<string> {
451
+ if (!this.isRange) {
452
+ return undefined;
453
+ }
454
+
455
+ if (this.startValue === value && this.endValue === value) {
456
+ return `${this.startDateLabelId} ${this.endDateLabelId}`;
457
+ } else if (this.startValue === value) {
458
+ return this.startDateLabelId;
459
+ } else if (this.endValue === value) {
460
+ return this.endDateLabelId;
461
+ }
462
+
463
+ return undefined;
464
+ }
465
+
466
+ /**
467
+ * Event handler for when the user enters an element
468
+ * inside the calendar body (e.g. by hovering in or focus).
469
+ */
470
+ private enterHandler = (event: Event) => {
471
+ if (this.skipNextFocus && event.type === 'focus') {
472
+ this.skipNextFocus = false;
473
+ return;
474
+ }
475
+
476
+ // We only need to hit the zone when we're selecting a range.
477
+ if (!!event.target && this.isRange) {
478
+ const cell = this.getCellFromElement(event.target as HTMLElement);
479
+
480
+ if (cell) {
481
+ this.ngZone.run(() => this.previewChange.emit({ value: cell.isEnabled ? cell : undefined, event }));
482
+ }
483
+ }
484
+ };
485
+
486
+ private touchmoveHandler = (event: TouchEvent) => {
487
+ if (!this.isRange) {
488
+ return;
489
+ }
490
+
491
+ const target = this.getActualTouchTarget(event);
492
+ const cell = target ? this.getCellFromElement(target as HTMLElement) : undefined;
493
+
494
+ if (target !== event.target) {
495
+ this.didDragSinceMouseDown = true;
496
+ }
497
+
498
+ // If the initial target of the touch is a date cell, prevent default so
499
+ // that the move is not handled as a scroll.
500
+ if (this.getCellElement(event.target as HTMLElement)) {
501
+ event.preventDefault();
502
+ }
503
+
504
+ this.ngZone.run(() => this.previewChange.emit({ value: cell?.isEnabled ? cell : undefined, event }));
505
+ };
506
+
507
+ /**
508
+ * Event handler for when the user's pointer leaves an element
509
+ * inside the calendar body (e.g. by hovering out or blurring).
510
+ */
511
+ private leaveHandler = (event: Event) => {
512
+ // We only need to hit the zone when we're selecting a range.
513
+ if (this.previewEnd !== undefined && this.isRange) {
514
+ if (event.type !== 'blur') {
515
+ this.didDragSinceMouseDown = true;
516
+ }
517
+
518
+ // Only reset the preview end value when leaving cells. This looks better, because
519
+ // we have a gap between the cells and the rows and we don't want to remove the
520
+ // range just for it to show up again when the user moves a few pixels to the side.
521
+ if (
522
+ event.target &&
523
+ this.getCellFromElement(event.target as HTMLElement) &&
524
+ !(
525
+ (event as MouseEvent).relatedTarget &&
526
+ this.getCellFromElement((event as MouseEvent).relatedTarget as HTMLElement)
527
+ )
528
+ ) {
529
+ this.ngZone.run(() => this.previewChange.emit({ value: undefined, event }));
530
+ }
531
+ }
532
+ };
533
+
534
+ /**
535
+ * Triggered on mousedown or touchstart on a date cell.
536
+ * Responsible for starting a drag sequence.
537
+ */
538
+ private mousedownHandler = (event: Event) => {
539
+ if (!this.isRange) {
540
+ return;
541
+ }
542
+
543
+ this.didDragSinceMouseDown = false;
544
+ // Begin a drag if a cell within the current range was targeted.
545
+ const cell = event.target && this.getCellFromElement(event.target as HTMLElement);
546
+
547
+ if (!cell || !this.isInRange(cell.compareValue)) {
548
+ return;
549
+ }
550
+
551
+ this.ngZone.run(() => {
552
+ this.dragStarted.emit({
553
+ value: cell.rawValue!,
554
+ event
555
+ });
556
+ });
557
+ };
558
+
559
+ /** Triggered on mouseup anywhere. Responsible for ending a drag sequence. */
560
+ private mouseupHandler = (event: Event) => {
561
+ if (!this.isRange) {
562
+ return;
563
+ }
564
+
565
+ const cellElement = this.getCellElement(event.target as HTMLElement);
566
+ if (!cellElement) {
567
+ // Mouseup happened outside of datepicker. Cancel drag.
568
+ this.ngZone.run(() => {
569
+ this.dragEnded.emit({ value: undefined, event });
570
+ });
571
+ return;
572
+ }
573
+
574
+ if (cellElement.closest('.upd-calendar-body') !== this.elementRef.nativeElement) {
575
+ // Mouseup happened inside a different month instance.
576
+ // Allow it to handle the event.
577
+ return;
578
+ }
579
+
580
+ this.ngZone.run(() => {
581
+ const cell = this.getCellFromElement(cellElement);
582
+ this.dragEnded.emit({ value: cell?.rawValue ?? undefined, event });
583
+ });
584
+ };
585
+
586
+ /** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */
587
+ private touchendHandler = (event: TouchEvent) => {
588
+ const target = this.getActualTouchTarget(event);
589
+
590
+ if (target) {
591
+ this.mouseupHandler({ target } as unknown as Event);
592
+ }
593
+ };
594
+
595
+ /** Finds the CalendarCell that corresponds to a DOM node. */
596
+ private getCellFromElement(element: HTMLElement): OptionalType<CalendarCellModel> {
597
+ const cell = this.getCellElement(element);
598
+
599
+ if (!!cell) {
600
+ const row = cell.getAttribute('data-upd-row');
601
+ const col = cell.getAttribute('data-upd-col');
602
+
603
+ if (row && col) {
604
+ return this.rows[parseInt(row, 10)][parseInt(col, 10)];
605
+ }
606
+ }
607
+
608
+ return undefined;
609
+ }
610
+
611
+ /** Checks whether a node is a table cell element. */
612
+ private isTableCell(node: OptionalType<Node>): node is HTMLTableCellElement {
613
+ return node?.nodeName === 'DIV';
614
+ }
615
+
616
+ /**
617
+ * Gets the date table cell element that is or contains the specified element.
618
+ * Or returns null if element is not part of a date cell.
619
+ */
620
+ private getCellElement(element: HTMLElement): OptionalType<HTMLElement> {
621
+ let cell: OptionalType<HTMLElement>;
622
+
623
+ if (this.isTableCell(element)) {
624
+ cell = element;
625
+ } else if (this.isTableCell(element.parentNode || undefined)) {
626
+ cell = element.parentNode as HTMLElement;
627
+ } else if (this.isTableCell(element.parentNode?.parentNode || undefined)) {
628
+ cell = element.parentNode!.parentNode as HTMLElement;
629
+ }
630
+
631
+ return cell?.getAttribute('data-upd-row') !== undefined ? cell : undefined;
632
+ }
633
+
634
+ /** Checks whether a value is the start of a range. */
635
+ private isStart(value: number, start: OptionalType<number>, end: OptionalType<number>): boolean {
636
+ return end !== undefined && start !== end && value < end && value === start;
637
+ }
638
+
639
+ /** Checks whether a value is the end of a range. */
640
+ private isEnd(value: number, start: OptionalType<number>, end: OptionalType<number>): boolean {
641
+ return start !== undefined && start !== end && value >= start && value === end;
642
+ }
643
+
644
+ /** Checks whether a value is inside of a range. */
645
+ private isInsideRange(value: number, start: OptionalType<number>, end: OptionalType<number>, rangeEnabled: boolean): boolean {
646
+ return (rangeEnabled && start !== undefined && end !== undefined && start !== end && value >= start && value <= end);
647
+ }
648
+
649
+ /**
650
+ * Extracts the element that actually corresponds to a touch event's location
651
+ * (rather than the element that initiated the sequence of touch events).
652
+ */
653
+ private getActualTouchTarget(event: TouchEvent): Element | null {
654
+ const touchLocation = event.changedTouches[0];
655
+ return document.elementFromPoint(touchLocation.clientX, touchLocation.clientY);
656
+ }
657
+
658
+ /**
659
+ * Takes a day of the month and returns a new date in the same month and year as the currently
660
+ * active date. The returned date will have the same day of the month as the argument date.
661
+ */
662
+ private getDateFromDayOfMonth(activeDate: Date, dayOfMonth: number): Date {
663
+ return this.dateService.create(activeDate.getFullYear(), activeDate.getMonth(), dayOfMonth);
664
+ }
665
+ }
@@ -0,0 +1,27 @@
1
+ <ng-container *transloco="let t; prefix: 'UpDevs.Calendar'">
2
+ <div class="container">
3
+ <div class="row">
4
+ <div class="col d-flex">
5
+ <label [id]="periodButtonLabelId" class="visually-hidden" aria-live="polite">
6
+ {{ periodText || t('YearRangeLabel', { start: minYearOfPageLabel, end: maxYearOfPageLabel }) }}
7
+ </label>
8
+
9
+ <upd-button [isIcon]="true" [iconModel]="{tablerIcon:'chevron-left'}" [isDisabled]="!previousEnabled()"
10
+ (clicked)="previousClicked()" [attr.aria-label]="t(prevButtonLabel)">
11
+ </upd-button>
12
+
13
+ <upd-button (click)="currentPeriodClicked()" [attr.aria-label]="t(periodButtonLabel)"
14
+ [attr.aria-describedby]="periodButtonLabelId" customClasses="mx-1 flex-grow-1">
15
+ <span aria-hidden="true">
16
+ {{ periodText || t('YearRange', { start: minYearOfPageLabel, end: maxYearOfPageLabel }) }}
17
+ </span>
18
+ <upd-icon [tablerIcon]="!isNotMonth ? 'chevron-down' : 'chevron-up'"></upd-icon>
19
+ </upd-button>
20
+
21
+ <upd-button [isIcon]="true" [iconModel]="{tablerIcon:'chevron-right'}" [isDisabled]="!nextEnabled()"
22
+ (clicked)="nextClicked()" [attr.aria-label]="t(nextButtonLabel)">
23
+ </upd-button>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </ng-container>