@sdcorejs/angular 19.1.6 → 19.2.1

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 (374) hide show
  1. package/README.md +10 -0
  2. package/assets/scss/core/menu.scss +18 -0
  3. package/assets/scss/core/utilities/_misc.scss +15 -0
  4. package/assets/scss/sd-core.scss +1 -0
  5. package/components/anchor/src/components/anchor/anchor.component.d.ts +3 -1
  6. package/components/api-contract-builder/index.d.ts +8 -0
  7. package/components/api-contract-builder/src/api-contract-builder.component.d.ts +123 -0
  8. package/components/api-contract-builder/src/api-contract.configuration.d.ts +41 -0
  9. package/components/api-contract-builder/src/api-contract.expression.d.ts +43 -0
  10. package/components/api-contract-builder/src/api-contract.model.d.ts +167 -0
  11. package/components/api-contract-builder/src/api-contract.samples.d.ts +25 -0
  12. package/components/api-contract-builder/src/api-contract.schema.d.ts +126 -0
  13. package/components/api-contract-builder/src/api-contract.serializer.d.ts +17 -0
  14. package/components/api-contract-builder/src/api-contract.validation.d.ts +12 -0
  15. package/components/api-contract-builder/src/components/api-contract-diagnostic-list.component.d.ts +18 -0
  16. package/components/api-contract-builder/src/components/api-contract-node-drawer.component.d.ts +130 -0
  17. package/components/api-contract-builder/src/components/api-contract-node-editor.component.d.ts +35 -0
  18. package/components/api-contract-builder/src/components/api-contract-node-summary.component.d.ts +41 -0
  19. package/components/api-contract-builder/src/components/api-contract-record-editor.component.d.ts +36 -0
  20. package/components/api-contract-builder/src/components/api-contract-source-editor.component.d.ts +86 -0
  21. package/components/api-contract-builder/src/components/api-contract-suggestion.model.d.ts +17 -0
  22. package/components/badge/src/badge.component.d.ts +2 -0
  23. package/components/ckeditor-styles/src/ckeditor-styles.component.d.ts +1 -1
  24. package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +2 -1
  25. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +3 -1
  26. package/components/form-generic/src/components/form-render/components/item/components/checkbox/checkbox.component.d.ts +34 -0
  27. package/components/form-generic/src/components/form-render/components/item/components/index.d.ts +1 -0
  28. package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +6 -1
  29. package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
  30. package/components/form-generic/src/configurations/form.configuration.d.ts +1 -1
  31. package/components/form-generic/src/models/form-generic-component.model.d.ts +8 -8
  32. package/components/form-generic/src/models/form-generic-definition-selection.model.d.ts +5 -5
  33. package/components/form-generic/src/models/form-generic-expression.model.d.ts +12 -12
  34. package/components/form-generic/src/models/index.d.ts +1 -0
  35. package/components/form-generic/src/services/form-generic.service.d.ts +2 -2
  36. package/components/import-excel/src/import-excel.component.d.ts +1 -0
  37. package/components/index.d.ts +7 -1
  38. package/components/mini-editor/src/mini-editor.model.d.ts +1 -1
  39. package/components/modal/src/modal.component.d.ts +3 -2
  40. package/components/modal-resizable/src/modal-resizable.component.d.ts +92 -0
  41. package/components/modal-resizable/src/modal-resizable.registry.d.ts +22 -0
  42. package/components/org-chart/src/org-chart.component.d.ts +6 -0
  43. package/components/preview/src/preview-image/preview-image.component.d.ts +1 -0
  44. package/components/query-bar/src/components/actions-bar/actions-bar.component.d.ts +6 -2
  45. package/components/query-bar/src/components/build-chip/build-chip.component.d.ts +4 -1
  46. package/components/query-bar/src/components/chip-popover/chip-popover.component.d.ts +8 -0
  47. package/components/query-bar/src/components/field-picker/field-picker.component.d.ts +2 -0
  48. package/components/query-bar/src/components/inline-chip/inline-chip.component.d.ts +2 -0
  49. package/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.d.ts +3 -3
  50. package/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.d.ts +9 -4
  51. package/components/query-bar/src/query-bar.component.d.ts +32 -5
  52. package/components/query-bar/src/query-bar.model.d.ts +15 -12
  53. package/components/query-builder/src/query-builder.component.d.ts +76 -39
  54. package/components/query-builder/src/query-builder.model.d.ts +59 -52
  55. package/components/query-builder/src/query-builder.serializer.d.ts +15 -6
  56. package/components/section/src/section.component.d.ts +5 -0
  57. package/components/side-drawer/src/body-scroll-lock.service.d.ts +10 -0
  58. package/components/splitter/src/splitter-handle/splitter-handle.component.d.ts +1 -0
  59. package/components/tab-router/index.d.ts +2 -1
  60. package/components/tab-router/src/actions/tab-router.action.d.ts +2 -2
  61. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +2 -2
  62. package/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.d.ts +3 -3
  63. package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +3 -3
  64. package/components/tab-router/src/decorators/tab.decorator.d.ts +13 -1
  65. package/components/tab-router/src/events/tab-router.event.d.ts +3 -3
  66. package/components/tab-router/src/models/tab-router.model.d.ts +2 -2
  67. package/components/tab-router/src/pipes/tab-info.pipe.d.ts +2 -2
  68. package/components/tab-router/src/services/tab-router.service.d.ts +9 -9
  69. package/components/table/index.d.ts +1 -0
  70. package/components/table/src/components/config/config.component.d.ts +6 -1
  71. package/components/table/src/components/desktop-cell/view/view.component.d.ts +1 -0
  72. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +1 -1
  73. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +1 -1
  74. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +8 -1
  75. package/components/table/src/components/selector-action/selector-action.component.d.ts +2 -0
  76. package/components/table/src/directives/index.d.ts +1 -0
  77. package/components/table/src/directives/sd-table-command-header-def.directive.d.ts +24 -0
  78. package/components/table/src/models/table-column.model.d.ts +30 -13
  79. package/components/table/src/models/table-item.model.d.ts +30 -1
  80. package/components/table/src/models/table-option-selector.model.d.ts +5 -4
  81. package/components/table/src/models/table-option.model.d.ts +12 -0
  82. package/components/table/src/pipes/sd-group.pipe.d.ts +6 -2
  83. package/components/table/src/services/table-filter/table-filter.model.d.ts +15 -15
  84. package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
  85. package/components/table/src/services/table-format/table-format.service.d.ts +1 -1
  86. package/components/table/src/services/table-selection/selection-action.util.d.ts +24 -0
  87. package/components/table/src/services/table-selection/table-selection.util.d.ts +31 -0
  88. package/components/table/src/services/tree/tree.util.d.ts +3 -2
  89. package/components/table/src/table.component.d.ts +51 -5
  90. package/components/tree/src/tree-item-def.directive.d.ts +1 -1
  91. package/components/tree/src/tree.component.d.ts +16 -4
  92. package/components/tree/src/tree.model.d.ts +31 -25
  93. package/components/upload-file/src/configurations/upload-file.configuration.d.ts +2 -2
  94. package/components/upload-file/src/upload-file.component.d.ts +4 -1
  95. package/configurations/src/sd-core.configuration.d.ts +1 -2
  96. package/fesm2022/sdcorejs-angular-components-anchor.mjs +36 -12
  97. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  98. package/fesm2022/sdcorejs-angular-components-api-contract-builder.mjs +3411 -0
  99. package/fesm2022/sdcorejs-angular-components-api-contract-builder.mjs.map +1 -0
  100. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +2 -2
  101. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  102. package/fesm2022/sdcorejs-angular-components-badge.mjs +27 -2
  103. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  104. package/fesm2022/sdcorejs-angular-components-button.mjs +2 -2
  105. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  106. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +1 -1
  107. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  108. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +3 -3
  109. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  110. package/fesm2022/sdcorejs-angular-components-data-state.mjs +3 -3
  111. package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -1
  112. package/fesm2022/sdcorejs-angular-components-editor.mjs +2 -2
  113. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  114. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +324 -192
  115. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  116. package/fesm2022/sdcorejs-angular-components-history.mjs +4 -4
  117. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  118. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +13 -5
  119. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  120. package/fesm2022/sdcorejs-angular-components-inform.mjs +3 -3
  121. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  122. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +164 -8
  123. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  124. package/fesm2022/sdcorejs-angular-components-modal.mjs +30 -18
  125. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  126. package/fesm2022/sdcorejs-angular-components-operator.mjs +2 -2
  127. package/fesm2022/sdcorejs-angular-components-operator.mjs.map +1 -1
  128. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +60 -13
  129. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  130. package/fesm2022/sdcorejs-angular-components-preview.mjs +27 -17
  131. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  132. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +192 -30
  133. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  134. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +187 -127
  135. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  136. package/fesm2022/sdcorejs-angular-components-section.mjs +33 -2
  137. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  138. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +83 -24
  139. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  140. package/fesm2022/sdcorejs-angular-components-splitter.mjs +57 -21
  141. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  142. package/fesm2022/sdcorejs-angular-components-stepper.mjs +2 -2
  143. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  144. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +68 -20
  145. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  146. package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -2
  147. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  148. package/fesm2022/sdcorejs-angular-components-table.mjs +555 -267
  149. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  150. package/fesm2022/sdcorejs-angular-components-tree.mjs +80 -17
  151. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  152. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +48 -13
  153. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  154. package/fesm2022/sdcorejs-angular-components.mjs +7 -1
  155. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  156. package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
  157. package/fesm2022/sdcorejs-angular-directives.mjs +45 -8
  158. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  159. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +40 -29
  160. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  161. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +5 -5
  162. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  163. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +67 -50
  164. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  165. package/fesm2022/sdcorejs-angular-forms-chip.mjs +57 -43
  166. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  167. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +231 -60
  168. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  169. package/fesm2022/sdcorejs-angular-forms-date.mjs +95 -23
  170. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  171. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +130 -26
  172. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  173. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +39 -15
  174. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -1
  175. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +16 -5
  176. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  177. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +24 -9
  178. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  179. package/fesm2022/sdcorejs-angular-forms-input.mjs +58 -10
  180. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  181. package/fesm2022/sdcorejs-angular-forms-models.mjs +227 -6
  182. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  183. package/fesm2022/sdcorejs-angular-forms-radio.mjs +4 -4
  184. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  185. package/fesm2022/sdcorejs-angular-forms-select.mjs +135 -37
  186. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  187. package/fesm2022/sdcorejs-angular-forms-switch.mjs +18 -3
  188. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  189. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +51 -62
  190. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  191. package/fesm2022/sdcorejs-angular-forms-time-range.mjs +57 -12
  192. package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -1
  193. package/fesm2022/sdcorejs-angular-forms-time.mjs +16 -5
  194. package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -1
  195. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +100 -9
  196. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -1
  197. package/fesm2022/sdcorejs-angular-forms.mjs +91 -46
  198. package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
  199. package/fesm2022/sdcorejs-angular-handlers.mjs +18 -3
  200. package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
  201. package/fesm2022/sdcorejs-angular-i18n.mjs +895 -68
  202. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  203. package/fesm2022/sdcorejs-angular-interceptors.mjs +87 -29
  204. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  205. package/fesm2022/sdcorejs-angular-modules-auth.mjs +25 -15
  206. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  207. package/fesm2022/sdcorejs-angular-modules-icon.mjs +2 -2
  208. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  209. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +32 -3
  210. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
  211. package/fesm2022/sdcorejs-angular-modules-layout.mjs +342 -111
  212. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  213. package/fesm2022/sdcorejs-angular-modules-permission.mjs +177 -40
  214. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  215. package/fesm2022/sdcorejs-angular-pipes.mjs +62 -28
  216. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  217. package/fesm2022/sdcorejs-angular-services-api.mjs +123 -13
  218. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  219. package/fesm2022/sdcorejs-angular-services-cache.mjs +53 -3
  220. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  221. package/fesm2022/sdcorejs-angular-services-confirm.mjs +25 -73
  222. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  223. package/fesm2022/sdcorejs-angular-services-excel.mjs +12 -10
  224. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  225. package/fesm2022/sdcorejs-angular-services-loading.mjs +75 -84
  226. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  227. package/fesm2022/sdcorejs-angular-services-notify.mjs +46 -5
  228. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  229. package/fesm2022/sdcorejs-angular-services-storage.mjs +4 -0
  230. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  231. package/fesm2022/sdcorejs-angular-services.mjs +0 -1
  232. package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
  233. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +225 -80
  234. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
  235. package/fesm2022/sdcorejs-angular-utilities-models.mjs +1 -63
  236. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  237. package/fesm2022/sdcorejs-angular.mjs +17 -10
  238. package/fesm2022/sdcorejs-angular.mjs.map +1 -1
  239. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -2
  240. package/forms/chip-calendar/src/chip-calendar.component.d.ts +10 -0
  241. package/forms/date/src/date.component.d.ts +13 -2
  242. package/forms/date-range/src/date-range.component.d.ts +13 -2
  243. package/forms/datetime/src/datetime.component.d.ts +13 -2
  244. package/forms/entity-picker/src/entity-picker.component.d.ts +9 -3
  245. package/forms/input/src/input.component.d.ts +3 -0
  246. package/forms/input-color/src/input-color.component.d.ts +4 -0
  247. package/forms/input-number/src/input-number.component.d.ts +3 -0
  248. package/forms/models/index.d.ts +3 -0
  249. package/forms/models/src/sd-form-control-connector.d.ts +12 -0
  250. package/forms/models/src/sd-model-facing-control.d.ts +43 -0
  251. package/forms/models/src/sd-search.model.d.ts +1 -1
  252. package/forms/models/src/sd-selection-data.model.d.ts +1 -1
  253. package/forms/models/src/sd-temporal-transform.d.ts +31 -0
  254. package/forms/models/src/sd-timer-scope.d.ts +29 -0
  255. package/forms/select/src/select.component.d.ts +27 -4
  256. package/forms/src/forms.module.d.ts +22 -13
  257. package/forms/switch/src/switch.component.d.ts +5 -0
  258. package/forms/textarea/src/textarea.component.d.ts +5 -3
  259. package/forms/time-range/src/time-range.component.d.ts +22 -1
  260. package/forms/tree-select/src/tree-select.component.d.ts +36 -5
  261. package/i18n/src/en.d.ts +170 -10
  262. package/i18n/src/i18n.messages.d.ts +1 -1
  263. package/i18n/src/i18n.pipe.d.ts +3 -3
  264. package/i18n/src/i18n.service.d.ts +2 -1
  265. package/i18n/src/i18n.types.d.ts +0 -3
  266. package/interceptors/no-internet/no-internet.interceptor.d.ts +11 -1
  267. package/modules/auth/services/auth.model.d.ts +1 -1
  268. package/modules/keycloak/keycloak.service.d.ts +1 -0
  269. package/modules/layout/components/shared/menu-tree/menu-tree.component.d.ts +2 -0
  270. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +3 -3
  271. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +3 -3
  272. package/modules/layout/components/sidebar-mobile-v2/main.component.d.ts +3 -3
  273. package/modules/layout/components/sidebar-mobile-v3/main.component.d.ts +3 -3
  274. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +16 -3
  275. package/modules/layout/components/sidebar-v1/main.component.d.ts +3 -3
  276. package/modules/layout/components/sidebar-v2/main.component.d.ts +3 -3
  277. package/modules/layout/components/sidebar-v3/main.component.d.ts +3 -3
  278. package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +5 -0
  279. package/modules/layout/modules/not-found/pages/root/root.component.d.ts +5 -0
  280. package/modules/layout/services/layout.service.d.ts +21 -0
  281. package/modules/layout/services/storage/storage.service.d.ts +52 -7
  282. package/modules/permission/src/configurations/permission.configuration.d.ts +11 -0
  283. package/modules/permission/src/directives/permission.directive.d.ts +2 -1
  284. package/modules/permission/src/services/permission.service.d.ts +52 -1
  285. package/package.json +40 -29
  286. package/pipes/src/safe-html.pipe.d.ts +26 -4
  287. package/pipes/src/time-different.pipe.d.ts +1 -0
  288. package/public-api.d.ts +11 -10
  289. package/services/api/src/api-host.d.ts +15 -0
  290. package/services/api/src/api.model.d.ts +14 -0
  291. package/services/api/src/api.module.d.ts +6 -0
  292. package/services/cache/src/cache.model.d.ts +10 -0
  293. package/services/index.d.ts +0 -1
  294. package/services/notify/index.d.ts +1 -1
  295. package/utilities/extensions/index.d.ts +1 -5
  296. package/utilities/extensions/src/url-safety.d.ts +72 -0
  297. package/utilities/extensions/src/utility.extension.d.ts +9 -5
  298. package/utilities/models/index.d.ts +0 -10
  299. package/components/base/index.d.ts +0 -1
  300. package/components/base/src/base-secure.component.d.ts +0 -8
  301. package/components/document-builder/index.d.ts +0 -4
  302. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +0 -15
  303. package/components/document-builder/src/components/header-footer-builder/plugins/page-number.plugin.d.ts +0 -4
  304. package/components/document-builder/src/components/index.d.ts +0 -1
  305. package/components/document-builder/src/document-builder.component.d.ts +0 -53
  306. package/components/document-builder/src/document-builder.config.d.ts +0 -21
  307. package/components/document-builder/src/document-builder.model.d.ts +0 -41
  308. package/components/document-builder/src/document-builder.utils.d.ts +0 -10
  309. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +0 -9
  310. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +0 -44
  311. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +0 -57
  312. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +0 -5
  313. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +0 -4
  314. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +0 -31
  315. package/components/document-builder/src/plugins/image-upload/image-upload.plugin.d.ts +0 -5
  316. package/components/document-builder/src/plugins/index.d.ts +0 -11
  317. package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +0 -24
  318. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +0 -14
  319. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +0 -15
  320. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +0 -25
  321. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +0 -29
  322. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +0 -35
  323. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +0 -15
  324. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +0 -15
  325. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +0 -15
  326. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +0 -15
  327. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +0 -15
  328. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +0 -15
  329. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +0 -54
  330. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +0 -27
  331. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +0 -16
  332. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +0 -25
  333. package/components/document-builder/src/plugins/paste-handler/index.d.ts +0 -35
  334. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +0 -31
  335. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +0 -31
  336. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +0 -29
  337. package/components/document-builder/src/plugins/paste-handler/types.d.ts +0 -30
  338. package/components/document-builder/src/plugins/table-custom/index.d.ts +0 -34
  339. package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +0 -51
  340. package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts +0 -9
  341. package/fesm2022/sdcorejs-angular-components-base.mjs +0 -23
  342. package/fesm2022/sdcorejs-angular-components-base.mjs.map +0 -1
  343. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +0 -5038
  344. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +0 -1
  345. package/fesm2022/sdcorejs-angular-models.mjs +0 -6
  346. package/fesm2022/sdcorejs-angular-models.mjs.map +0 -1
  347. package/fesm2022/sdcorejs-angular-services-docx.mjs +0 -291
  348. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +0 -1
  349. package/fesm2022/sdcorejs-angular-services-license.mjs +0 -97
  350. package/fesm2022/sdcorejs-angular-services-license.mjs.map +0 -1
  351. package/models/index.d.ts +0 -1
  352. package/models/src/language.model.d.ts +0 -2
  353. package/services/docx/index.d.ts +0 -1
  354. package/services/docx/src/lib/docx.model.d.ts +0 -9
  355. package/services/docx/src/lib/docx.service.d.ts +0 -14
  356. package/services/docx/src/lib/pandoc-core.d.ts +0 -11
  357. package/services/docx/src/public-api.d.ts +0 -2
  358. package/services/license/index.d.ts +0 -1
  359. package/services/license/src/license.service.d.ts +0 -9
  360. package/utilities/extensions/src/array.extension.d.ts +0 -1
  361. package/utilities/extensions/src/color.extension.d.ts +0 -5
  362. package/utilities/extensions/src/date.extension.d.ts +0 -1
  363. package/utilities/extensions/src/number.extension.d.ts +0 -1
  364. package/utilities/extensions/src/string.extension.d.ts +0 -50
  365. package/utilities/models/src/color.model.d.ts +0 -4
  366. package/utilities/models/src/empty.model.d.ts +0 -4
  367. package/utilities/models/src/filter.model.d.ts +0 -12
  368. package/utilities/models/src/maybe-async.model.d.ts +0 -10
  369. package/utilities/models/src/nested-key-of.model.d.ts +0 -4
  370. package/utilities/models/src/operator.model.d.ts +0 -13
  371. package/utilities/models/src/order.model.d.ts +0 -4
  372. package/utilities/models/src/paging.model.d.ts +0 -8
  373. package/utilities/models/src/pattern.model.d.ts +0 -21
  374. package/utilities/models/src/size.model.d.ts +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-forms-date-range.mjs","sources":["../../../projects/sdcorejs-angular/forms/date-range/src/date-range.component.ts","../../../projects/sdcorejs-angular/forms/date-range/src/date-range.component.html","../../../projects/sdcorejs-angular/forms/date-range/sdcorejs-angular-forms-date-range.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n input,\n model,\n computed,\n effect,\n untracked,\n output,\n TemplateRef,\n viewChild,\n contentChild,\n} from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, NgForm, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerInputEvent, MatDatepickerModule, MatDateRangePicker } from '@angular/material/datepicker';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdLabelDefDirective } from '@sdcorejs/angular/forms/directives';\nimport { provideSdStrictDateFnsAdapter,\n SD_FORM_CONFIGURATION,\n sdFormControlState,\n SdViewed,\n SdViewedInput,\n sdViewedInline,\n sdViewedTransform,\n ɵsdFormControlConnector,\n} from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue } from '@sdcorejs/angular/utilities/data-state';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { SdView } from '@sdcorejs/angular/components/view';\nimport { I18nService, TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { DateUtilities } from '@sdcorejs/angular/utilities/extensions';\nimport { BrowserUtilities, Utilities } from '@sdcorejs/utils/fns';\nimport { Size } from '@sdcorejs/utils/models';\nimport { parse as parseDate } from 'date-fns';\nimport { enUS as dfEnUS } from 'date-fns/locale';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\nexport interface SdDateRangeValue {\n from?: string | null;\n to?: string | null;\n}\n\n@Component({\n selector: 'sd-date-range',\n templateUrl: './date-range.component.html',\n styleUrl: './date-range.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class.sd-bare]': 'isInline()', '[class.sd-viewed]': 'isViewed() || isInline()', '[class.sd-has-label]': '!!label()' },\n providers: [\n // DateFnsAdapter inject MAT_DATE_LOCALE; cấp default en-US để parse/format hoạt động.\n { provide: MAT_DATE_LOCALE, useValue: dfEnUS },\n provideSdStrictDateFnsAdapter({\n parse: { dateInput: 'dd/MM/yyyy' },\n display: {\n dateInput: 'dd/MM/yyyy',\n monthYearLabel: 'MMM yyyy',\n dateA11yLabel: 'PP',\n monthYearA11yLabel: 'MMMM yyyy',\n },\n }),\n ],\n standalone: true,\n imports: [\n SdIcon,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatTooltipModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatNativeDateModule,\n SdLabel,\n SdView,\n TranslatePipe,\n ],\n})\nexport class SdDateRange {\n id1 = `I${Utilities.generateUuid()}`;\n id2 = `I${Utilities.generateUuid()}`;\n #c1 = Utilities.generateUuid();\n #c2 = Utilities.generateUuid();\n\n // ==========================================\n // 1. SIGNAL QUERIES\n // ==========================================\n picker = viewChild<MatDateRangePicker<Date>>(MatDateRangePicker);\n sdLabelDef = contentChild(SdLabelDefDirective);\n\n // ==========================================\n // 2. INJECTS\n // ==========================================\n private cdRef = inject(ChangeDetectorRef);\n private formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\n readonly #i18n = inject(I18nService);\n\n // ==========================================\n // 3. SIGNAL INPUTS & MODEL\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => (this.autoIdInput() ? `forms-date-range-${this.autoIdInput()}` : undefined));\n fromAutoId = computed(() => {\n const id = this.autoId();\n return id ? `${id}-from` : undefined;\n });\n toAutoId = computed(() => {\n const id = this.autoId();\n return id ? `${id}-to` : undefined;\n });\n\n readonly #state = sdFormControlState(computed(() => this.formControl));\n readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n readonly dataInvalid = computed(() => (this.#state().invalid ? 'true' : 'false'));\n readonly dataEmpty = computed(() => {\n const v = this.#state().value as { from?: Date | null; to?: Date | null } | null | undefined;\n const empty = !v || !v.from || !v.to;\n return empty ? 'true' : 'false';\n });\n readonly dataValue = computed(() => sdSerializeDataValue(this.#state().value));\n\n readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n readonly dataErrorMessage = computed(() => {\n void this.#state();\n const msg = this.errorMessage();\n return msg && msg.length > 0 ? msg : null;\n });\n\n name = input<string>(Utilities.generateUuid());\n\n size = input<Size>('md');\n // Ghi (TransformT): any (để không bị lỗi typing khi cha truyền vào)\n form = input<FormGroup | undefined, any>(undefined, {\n transform: (val: any): FormGroup | undefined => {\n if (!val) return undefined;\n // Nếu cha truyền vào NgForm (template-driven) -> Bóc lấy FormGroup bên trong\n if (val instanceof NgForm) return val.form;\n // Nếu cha truyền sẵn FormGroup (reactive) -> Lấy luôn\n if (val instanceof FormGroup) return val;\n // Fallback an toàn phòng trường hợp cha truyền 1 object chứa form\n if (val?.form instanceof FormGroup) return val.form;\n return undefined;\n },\n });\n\n label = input<string | undefined>();\n helperText = input<string | undefined>();\n\n hideInlineError = input(false, { transform: booleanAttribute });\n\n /**\n * Tổng hợp error message để hiển thị trong tooltip khi hideInlineError = true.\n */\n readonly errorMessage = computed<string | undefined>(() => {\n void this.#state();\n const outerErrors = this.formControl.errors;\n const c1Errors = this.control1?.errors;\n const c2Errors = this.control2?.errors;\n\n if (outerErrors?.['required'] || c1Errors?.['required'] || c2Errors?.['required']) {\n return this.#i18n.t('core.form.date-range.required');\n }\n if (outerErrors?.['matDatepickerMin'] || c1Errors?.['matDatepickerMin']) {\n return this.#i18n.t('core.form.date-range.invalid-min');\n }\n if (outerErrors?.['matDatepickerMax'] || c2Errors?.['matDatepickerMax']) {\n return this.#i18n.t('core.form.date-range.invalid-max');\n }\n return undefined;\n });\n\n required = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n\n /** Display mode: `false` edit · `true` static view · `'inline'` view + click-to-edit (range picker). */\n viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n /** In `viewed='inline'`, show a hover clear-× on the text face. Set `false` when the host owns removal (chips). */\n clearable = input(true, { transform: booleanAttribute });\n\n // Tri-state `viewed` — shared primitive. In `'inline'` the range editor is always mounted\n // (chrome hidden via CSS); the sd-view text face opens the range picker on click.\n readonly #viewedState = sdViewedInline(this.viewed, () => this.open(), this.disabled);\n /** `true` when `viewed === 'inline'`. */\n readonly isInline = this.#viewedState.isInline;\n /** `true` when `viewed === true` (static view, no editor). */\n readonly isViewed = this.#viewedState.isViewed;\n /** Open the range picker from the inline text face. No-op unless `viewed='inline'`. */\n enterInlineEdit = (): void => this.#viewedState.enterInlineEdit();\n\n /** Optional <ng-template #sdValue> projected by consumer to override the viewed text. */\n sdValueTemplate = contentChild<TemplateRef<unknown>>('sdValue');\n\n /**\n * Formatted \"dd/MM/yyyy → dd/MM/yyyy\" string for the viewed-mode display.\n * why: viewed mode chỉ hiển thị text — cần format gọn cho cả 2 đầu range,\n * Returns empty when both ends are blank, \"from →\" when only from is set, and so on.\n */\n formatted = computed<string>(() => {\n const m = this.valueModel();\n const fmt = (d: unknown): string => {\n if (d == null || d === '') return '';\n const dt = d instanceof Date ? d : new Date(String(d));\n if (isNaN(dt.getTime())) return '';\n const dd = String(dt.getDate()).padStart(2, '0');\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n return `${dd}/${mm}/${dt.getFullYear()}`;\n };\n const a = fmt(m?.from);\n const b = fmt(m?.to);\n if (!a && !b) return '';\n return `${a} → ${b}`;\n });\n\n /** Open the range picker panel programmatically (for query-bar chip auto-open). */\n open = (): void => {\n if (this.formControl.disabled) return;\n this.picker()?.open();\n };\n\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n appearance = computed(() => this.appearanceInput() ?? this.formConfig?.appearance ?? 'outline');\n\n floatLabel = input<FloatLabelType>('auto');\n\n minInput = input<any>(undefined, { alias: 'min' });\n resolvedMin = computed(() => this.#parseDateBoundary(this.minInput()));\n\n maxInput = input<any>(undefined, { alias: 'max' });\n resolvedMax = computed(() => this.#parseDateBoundary(this.maxInput()));\n\n valueModel = model<SdDateRangeValue | undefined | null>(undefined, { alias: 'model' });\n\n // ==========================================\n // 4. SIGNAL OUTPUTS\n // ==========================================\n sdChange = output<SdDateRangeValue | undefined | null>();\n\n // ==========================================\n // 5. INTERNAL STATE & STREAMS\n // ==========================================\n isMobileOrTablet = BrowserUtilities.isMobile();\n formControl = new FormControl();\n control1 = new FormControl();\n control2 = new FormControl();\n readonly #fromConnector = ɵsdFormControlConnector<unknown, unknown>({\n form: this.form,\n name: computed(() => this.#c1),\n control: computed(() => this.control1),\n });\n readonly #toConnector = ɵsdFormControlConnector<unknown, unknown>({\n form: this.form,\n name: computed(() => this.#c2),\n control: computed(() => this.control2),\n });\n readonly #rangeConnector = ɵsdFormControlConnector<unknown, unknown>({\n form: this.form,\n name: this.name,\n control: computed(() => this.formControl),\n });\n\n #isFocus = false;\n #isModelChange = false;\n #isSdChangeEmittedByEnter = false;\n #isSdChangeEmittedByClear = false;\n\n constructor() {\n this.cdRef.markForCheck();\n\n // EFFECT 1: Sync model thay đổi từ bên ngoài vào control1 và control2\n effect(() => {\n const val = this.valueModel();\n untracked(() => {\n const fromStr = DateUtilities.isDate(val?.from) ? DateUtilities.toFormat(val?.from, 'yyyy/MM/dd') : null;\n const toStr = DateUtilities.isDate(val?.to) ? DateUtilities.toFormat(val?.to, 'yyyy/MM/dd') : null;\n\n // Chỉ set value nếu có sự khác biệt (tránh loop)\n // control1/control2 giờ giữ native Date (date-fns adapter), không cần .toDate() như Moment.\n const currentFrom = this.control1.value ? DateUtilities.toFormat(this.control1.value, 'yyyy/MM/dd') : null;\n const currentTo = this.control2.value ? DateUtilities.toFormat(this.control2.value, 'yyyy/MM/dd') : null;\n\n if (fromStr !== currentFrom) {\n this.control1.setValue(fromStr ? parseDate(fromStr, 'yyyy/MM/dd', new Date()) : null, { emitEvent: false });\n }\n if (toStr !== currentTo) {\n this.control2.setValue(toStr ? parseDate(toStr, 'yyyy/MM/dd', new Date()) : null, { emitEvent: false });\n }\n\n // Đồng bộ control tổng để required của form cha không bị invalid khi model default đã có giá trị.\n this.formControl.setValue({ from: this.control1.value, to: this.control2.value }, { emitEvent: false });\n this.formControl.updateValueAndValidity({ emitEvent: false });\n });\n });\n\n // EFFECT 2: Sync Disable\n effect(() => {\n if (this.disabled()) {\n this.formControl.disable({ emitEvent: false });\n this.control1.disable({ emitEvent: false });\n this.control2.disable({ emitEvent: false });\n } else {\n this.formControl.enable({ emitEvent: false });\n this.control1.enable({ emitEvent: false });\n this.control2.enable({ emitEvent: false });\n }\n });\n\n // EFFECT 3: Sync Required\n effect(() => {\n const isReq = this.required();\n untracked(() => {\n if (isReq) {\n this.formControl.setValidators([Validators.required]);\n this.control1.setValidators([Validators.required]);\n this.control2.setValidators([Validators.required]);\n } else {\n this.formControl.clearValidators();\n this.control1.clearValidators();\n this.control2.clearValidators();\n }\n this.formControl.updateValueAndValidity({ emitEvent: false });\n this.control1.updateValueAndValidity({ emitEvent: false });\n this.control2.updateValueAndValidity({ emitEvent: false });\n });\n });\n }\n\n #parseDateBoundary(val: any): Date | null {\n if (val === 'TODAY') return new Date();\n if (val && DateUtilities.isDate(val)) return new Date(val);\n return null;\n }\n\n onStartChange = (event: MatDatepickerInputEvent<Date>) => {\n if (!this.#isFocus) this.#emit();\n };\n\n onEndChange = (event: MatDatepickerInputEvent<Date>) => {\n if (!this.#isFocus) this.#emit();\n };\n\n #emit = () => {\n // control1/control2 giờ giữ native Date, không cần .toDate().\n const from = this.control1.value || null;\n const to = this.control2.value || null;\n\n const currentModel = this.valueModel();\n const newFrom = DateUtilities.isDate(from) ? DateUtilities.toFormat(from, 'yyyy/MM/dd') : null;\n const newTo = DateUtilities.isDate(to) ? DateUtilities.toFormat(to, 'yyyy/MM/dd') : null;\n\n if (newFrom !== currentModel?.from || newTo !== currentModel?.to) {\n const nextModel = { from: newFrom, to: newTo };\n this.formControl.setValue({ from: this.control1.value, to: this.control2.value }, { emitEvent: false });\n this.valueModel.set(nextModel);\n this.#isModelChange = true;\n this.cdRef.markForCheck();\n }\n };\n\n clear = () => {\n const emptyModel = { from: null, to: null };\n this.control1.setValue(null, { emitEvent: false });\n this.control2.setValue(null, { emitEvent: false });\n this.formControl.setValue(emptyModel, { emitEvent: false });\n\n this.valueModel.set(emptyModel);\n this.sdChange.emit(emptyModel);\n\n this.#isSdChangeEmittedByClear = true;\n this.cdRef.markForCheck();\n };\n\n onEnter = () => {\n this.#emit();\n this.sdChange.emit(this.valueModel());\n this.#isSdChangeEmittedByEnter = true;\n };\n\n onFocus = () => {\n this.#isFocus = true;\n this.#isModelChange = false;\n this.#isSdChangeEmittedByEnter = false;\n this.#isSdChangeEmittedByClear = false;\n };\n\n onBlur = () => {\n this.#isFocus = false;\n this.#emit();\n setTimeout(() => {\n if (!this.#isFocus && this.#isModelChange && !(this.#isSdChangeEmittedByEnter || this.#isSdChangeEmittedByClear)) {\n this.sdChange.emit(this.valueModel());\n }\n });\n };\n\n onClosePicker = () => {\n this.sdChange.emit(this.valueModel());\n };\n\n onOpenPicker = (event: MouseEvent) => {\n event.stopPropagation();\n if (!this.formControl.disabled) {\n this.picker()?.open();\n }\n };\n}\n","@let _sdLabelDef = sdLabelDef();\n@let _label = label();\n@let _appearance = appearance();\n@let _required = required();\n@let _hideInlineError = hideInlineError();\n@let _errorMessage = errorMessage();\n@let _helperText = helperText();\n@let _resolvedMin = resolvedMin();\n@let _resolvedMax = resolvedMax();\n@let _size = size();\n@let _isInline = isInline();\n@let _bare = _isInline;\n@let _hasValue = !!(control1.value || control2.value);\n@let _labelTemplate = _sdLabelDef?.templateRef ?? undefined;\n\n@if (isViewed()) {\n <sd-view\n [label]=\"_label\"\n [labelTemplate]=\"_labelTemplate\"\n [value]=\"valueModel()\"\n [display]=\"formatted()\"\n [valueTemplate]=\"sdValueTemplate()\">\n </sd-view>\n} @else {\n @if (_isInline) {\n <!-- why: inline — sd-view là \"mặt\" + trigger; range editor render ẩn (.sd-inline-editor) chỉ để mở picker. -->\n <span class=\"sd-inline-view\" role=\"button\" tabindex=\"0\" (click)=\"enterInlineEdit()\" (keydown.enter)=\"enterInlineEdit()\">\n <sd-view\n [label]=\"_label\"\n [labelTemplate]=\"_labelTemplate\"\n [value]=\"valueModel()\"\n [display]=\"formatted()\"\n [valueTemplate]=\"sdValueTemplate()\">\n </sd-view>\n @if (clearable() && _hasValue && !_required && !formControl.disabled) {\n <button type=\"button\" class=\"sd-inline-clear\" (click)=\"$event.stopPropagation(); clear()\" title=\"Xóa\" aria-label=\"Xóa\">\n <sd-icon name=\"close\"></sd-icon>\n </button>\n }\n </span>\n }\n\n <div [class.sd-inline-editor]=\"_isInline\">\n @if (!_appearance && _sdLabelDef?.templateRef) {\n <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\n }\n @if (!_appearance && _label && !_sdLabelDef?.templateRef) {\n <sd-label [label]=\"_label\" [required]=\"_required\"></sd-label>\n }\n\n <mat-form-field\n [class.sd-md]=\"_size === 'md'\"\n [class.sd-sm]=\"_size === 'sm'\"\n [class.hide-inline-error]=\"_hideInlineError\"\n [appearance]=\"_appearance!\"\n [floatLabel]=\"floatLabel()\">\n @if (_appearance && _label) {\n <mat-label class=\"sd-form-field-label\">\n <span>{{ _label }}</span>\n @if (_helperText) {\n <sd-icon [matTooltip]=\"_helperText\" matTooltipPosition=\"below\" name=\"info\"></sd-icon>\n }\n </mat-label>\n }\n\n <mat-date-range-input\n [max]=\"_resolvedMax\"\n [min]=\"_resolvedMin\"\n [rangePicker]=\"picker\"\n [disabled]=\"formControl.disabled\"\n [required]=\"_required\"\n [attr.data-autoId]=\"autoId()\"\n [attr.data-disabled]=\"dataDisabled()\"\n [attr.data-invalid]=\"dataInvalid()\"\n [attr.data-empty]=\"dataEmpty()\"\n [attr.data-value]=\"dataValue()\"\n [attr.data-required]=\"dataRequired()\"\n [attr.data-error-message]=\"dataErrorMessage()\">\n <input\n aria-hidden=\"true\"\n [id]=\"id1\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n matStartDate\n [formControl]=\"control1\"\n [placeholder]=\"formControl.disabled ? '' : ('core.form.date-range.from' | translate)\"\n (dateInput)=\"onStartChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keyup.enter)=\"onEnter()\"\n [attr.data-qclabel]=\"_label\"\n [attr.data-autoId]=\"fromAutoId()\" />\n\n <input\n aria-hidden=\"true\"\n [id]=\"id2\"\n [autocomplete]=\"id2\"\n autocorrect=\"off\"\n matEndDate\n [formControl]=\"control2\"\n [placeholder]=\"formControl.disabled ? '' : ('core.form.date-range.to' | translate)\"\n (dateInput)=\"onEndChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keyup.enter)=\"onEnter()\"\n [attr.data-qclabel]=\"_label\"\n [attr.data-autoId]=\"toAutoId()\" />\n </mat-date-range-input>\n\n @if (_hideInlineError && _errorMessage && (formControl.touched || control1.touched || control2.touched)) {\n <sd-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"_errorMessage\" matTooltipPosition=\"above\" name=\"error\"></sd-icon>\n }\n\n @if (!_hideInlineError && _errorMessage && (formControl.touched || control1.touched || control2.touched)) {\n <mat-error>{{ _errorMessage }}</mat-error>\n }\n\n @if ((control1.value || control2.value) && !_bare) {\n <sd-icon class=\"cursor-pointer sd-suffix-icon\" (click)=\"clear()\" matSuffix name=\"cancel\"></sd-icon>\n }\n\n <sd-icon class=\"cursor-pointer sd-suffix-icon\" (click)=\"onOpenPicker($event)\" matSuffix name=\"today\"></sd-icon>\n\n <mat-date-range-picker [touchUi]=\"isMobileOrTablet\" (closed)=\"onClosePicker()\" #picker></mat-date-range-picker>\n </mat-form-field>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵsdFormControlConnector","parseDate","dfEnUS"],"mappings":"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"}
1
+ {"version":3,"file":"sdcorejs-angular-forms-date-range.mjs","sources":["../../../projects/sdcorejs-angular/forms/date-range/src/date-range.component.ts","../../../projects/sdcorejs-angular/forms/date-range/src/date-range.component.html","../../../projects/sdcorejs-angular/forms/date-range/sdcorejs-angular-forms-date-range.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n input,\n model,\n computed,\n effect,\n untracked,\n output,\n TemplateRef,\n viewChild,\n contentChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, FormsModule, NgForm, ReactiveFormsModule, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerInputEvent, MatDatepickerModule, MatDateRangePicker } from '@angular/material/datepicker';\nimport { FloatLabelType, MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { SdLabelDefDirective } from '@sdcorejs/angular/forms/directives';\nimport {\n provideSdStrictDateFnsAdapter,\n SD_FORM_CONFIGURATION,\n sdFormControlState,\n SdTemporalValueTransform,\n SdViewed,\n SdViewedInput,\n sdLocalStartOfDay,\n sdParseTransformedTemporal,\n sdSerializeTemporalValue,\n sdViewedInline,\n sdViewedTransform,\n ɵsdFormControlConnector,\n ɵsdModelFacingControl,\n ɵsdTimerScope,\n} from '@sdcorejs/angular/forms/models';\nimport { sdSerializeDataValue } from '@sdcorejs/angular/utilities/data-state';\nimport { SdLabel } from '@sdcorejs/angular/forms/label';\nimport { SdView } from '@sdcorejs/angular/components/view';\nimport { I18nService, SdTranslatePipe } from '@sdcorejs/angular/i18n';\nimport { DateUtilities } from '@sdcorejs/utils/fns';\nimport { BrowserUtilities, Utilities } from '@sdcorejs/utils/fns';\nimport { Size } from '@sdcorejs/utils/models';\nimport { parse as parseDate } from 'date-fns';\nimport { enUS as dfEnUS } from 'date-fns/locale';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\nexport interface SdDateRangeValue {\n from?: string | null;\n to?: string | null;\n}\n\n/** Runtime shape held by the aggregate `formControl` — native `Date` endpoints, not the model strings. */\ninterface SdDateRangeControlValue {\n from: Date | null;\n to: Date | null;\n}\n\nfunction dateStamp(value: unknown): number | null {\n return value instanceof Date && !isNaN(value.getTime()) ? value.getTime() : null;\n}\n\nfunction sameRange(left: SdDateRangeControlValue | null | undefined, right: SdDateRangeControlValue): boolean {\n // why: lần đồng bộ đầu tiên phải luôn ghi, kể cả khi range rỗng — control khởi tạo là `null`\n // còn contract của `formControl.value` (và `form.value[name]`) là object `{ from, to }`.\n if (!left) return false;\n return dateStamp(left.from) === dateStamp(right.from) && dateStamp(left.to) === dateStamp(right.to);\n}\n\n/**\n * Chữ ký lỗi ổn định của một control — GỒM CẢ payload, không chỉ tên key.\n * why: fingerprint chỉ theo tên key thì đổi NỘI DUNG lỗi (vd `matDatepickerParse: { text }` từ\n * `\"11/1\"` sang `\"11/12\"`) không làm validator tổng chạy lại, nên object lỗi đã copy sang\n * `formControl` giữ nguyên payload cũ và consumer đọc ra text đã lỗi thời.\n * Key được sort để cùng một tập lỗi luôn cho cùng một chữ ký bất kể thứ tự chèn.\n */\nfunction serializeErrors(errors: ValidationErrors | null): string {\n if (!errors) return '';\n const keys = Object.keys(errors).sort();\n try {\n return JSON.stringify(keys.map(key => [key, errors[key]]));\n } catch {\n // Payload không serialize được (tham chiếu vòng) — lùi về chữ ký theo tên key.\n return keys.join(',');\n }\n}\n\n/**\n * why: `Validators.required` dùng `isEmptyInputValue`, mà value của control tổng LUÔN là object\n * `{ from, to }` (ghi vô điều kiện mỗi lần đồng bộ) — object thì không bao giờ \"empty\", nên\n * `[required]` trên `<sd-date-range>` TRƯỚC ĐÂY KHÔNG BAO GIỜ làm form cha invalid được.\n * Ở đây phải kiểm tra thật sự từng đầu range.\n */\nfunction rangeIsComplete(value: unknown): boolean {\n const range = value as SdDateRangeControlValue | null | undefined;\n return !!range?.from && !!range?.to;\n}\n\n@Component({\n selector: 'sd-date-range',\n templateUrl: './date-range.component.html',\n styleUrl: './date-range.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class.sd-bare]': 'isInline()', '[class.sd-viewed]': 'isViewed() || isInline()', '[class.sd-has-label]': '!!label()' },\n providers: [\n // DateFnsAdapter inject MAT_DATE_LOCALE; cấp default en-US để parse/format hoạt động.\n { provide: MAT_DATE_LOCALE, useValue: dfEnUS },\n provideSdStrictDateFnsAdapter({\n parse: { dateInput: 'dd/MM/yyyy' },\n display: {\n dateInput: 'dd/MM/yyyy',\n monthYearLabel: 'MMM yyyy',\n dateA11yLabel: 'PP',\n monthYearA11yLabel: 'MMMM yyyy',\n },\n }),\n ],\n standalone: true,\n imports: [\n SdIcon,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatTooltipModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatNativeDateModule,\n SdLabel,\n SdView,\n SdTranslatePipe,\n ],\n})\nexport class SdDateRange {\n id1 = `I${Utilities.generateUuid()}`;\n id2 = `I${Utilities.generateUuid()}`;\n /** why: id ổn định của <mat-error> để hai ô nhập trỏ `aria-describedby` sang — thông báo\n * lỗi phải đọc được từ chính control, không chỉ hiện ra màn hình. */\n readonly errorId = `${this.id1}-error`;\n\n // ==========================================\n // 1. SIGNAL QUERIES\n // ==========================================\n picker = viewChild<MatDateRangePicker<Date>>(MatDateRangePicker);\n sdLabelDef = contentChild(SdLabelDefDirective);\n\n // ==========================================\n // 2. INJECTS\n // ==========================================\n private cdRef = inject(ChangeDetectorRef);\n private formConfig = inject(SD_FORM_CONFIGURATION, { optional: true });\n readonly #i18n = inject(I18nService);\n // why: onBlur hoãn 1 macrotask rồi mới emit sdChange. Không giữ handle thì blur ngay trước\n // khi control bị tháo vẫn bắn output sau destroy — consumer đã unsubscribe, hoặc tệ hơn là\n // nhận một lần emit \"ma\" cho control không còn tồn tại.\n readonly #timers = ɵsdTimerScope();\n\n // ==========================================\n // 3. SIGNAL INPUTS & MODEL\n // ==========================================\n autoIdInput = input<string | undefined | null>(undefined, { alias: 'autoId' });\n autoId = computed(() => (this.autoIdInput() ? `forms-date-range-${this.autoIdInput()}` : undefined));\n fromAutoId = computed(() => {\n const id = this.autoId();\n return id ? `${id}-from` : undefined;\n });\n toAutoId = computed(() => {\n const id = this.autoId();\n return id ? `${id}-to` : undefined;\n });\n\n readonly #state = sdFormControlState(computed(() => this.formControl));\n // why: control tổng KHÔNG phải nguồn duy nhất của trạng thái. Material bắn matDatepickerParse /\n // matDatepickerMin / matDatepickerMax / matStartDateInvalid lên control1 + control2, và connector\n // gắn/gỡ validator bằng `updateValueAndValidity({ emitEvent: false })` nên `#state` không tick theo.\n // Thiếu 2 snapshot này thì mọi computed bên dưới đóng băng ở giá trị render đầu tiên dưới OnPush.\n readonly #state1 = sdFormControlState(computed(() => this.control1));\n readonly #state2 = sdFormControlState(computed(() => this.control2));\n readonly dataDisabled = computed(() => (this.#state().disabled ? 'true' : 'false'));\n readonly dataInvalid = computed(() => (this.#state().invalid || this.#state1().invalid || this.#state2().invalid ? 'true' : 'false'));\n readonly dataEmpty = computed(() => {\n const v = this.#state().value as { from?: Date | null; to?: Date | null } | null | undefined;\n const empty = !v || !v.from || !v.to;\n return empty ? 'true' : 'false';\n });\n readonly dataValue = computed(() => sdSerializeDataValue(this.#state().value));\n\n readonly dataRequired = computed(() => (this.required() ? 'true' : 'false'));\n readonly dataErrorMessage = computed(() => {\n void this.#state();\n const msg = this.errorMessage();\n return msg && msg.length > 0 ? msg : null;\n });\n\n name = input<string>(Utilities.generateUuid());\n\n size = input<Size>('md');\n // Ghi (TransformT): any (để không bị lỗi typing khi cha truyền vào)\n form = input<FormGroup | undefined, any>(undefined, {\n transform: (val: any): FormGroup | undefined => {\n if (!val) return undefined;\n // Nếu cha truyền vào NgForm (template-driven) -> Bóc lấy FormGroup bên trong\n if (val instanceof NgForm) return val.form;\n // Nếu cha truyền sẵn FormGroup (reactive) -> Lấy luôn\n if (val instanceof FormGroup) return val;\n // Fallback an toàn phòng trường hợp cha truyền 1 object chứa form\n if (val?.form instanceof FormGroup) return val.form;\n return undefined;\n },\n });\n\n label = input<string | undefined>();\n helperText = input<string | undefined>();\n\n hideInlineError = input(false, { transform: booleanAttribute });\n\n /**\n * Tổng hợp error message để hiển thị trong tooltip khi hideInlineError = true.\n */\n readonly errorMessage = computed<string | undefined>(() => {\n // why: message được nuôi bởi CẢ BA control — đọc đủ 3 snapshot thì computed mới invalidate.\n // Trước đây chỉ `#state` được đọc, nên lỗi min/max của 2 đầu range không bao giờ vẽ ra message.\n void this.#state();\n void this.#state1();\n void this.#state2();\n const outerErrors = this.formControl.errors;\n const c1Errors = this.control1.errors;\n const c2Errors = this.control2.errors;\n\n if (outerErrors?.['required'] || c1Errors?.['required'] || c2Errors?.['required']) {\n return this.#i18n.t('core.form.date-range.required');\n }\n if (outerErrors?.['matDatepickerMin'] || c1Errors?.['matDatepickerMin']) {\n return this.#i18n.t('core.form.date-range.invalid-min');\n }\n if (outerErrors?.['matDatepickerMax'] || c2Errors?.['matDatepickerMax']) {\n return this.#i18n.t('core.form.date-range.invalid-max');\n }\n return undefined;\n });\n\n required = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n\n /** Display mode: `false` edit · `true` static view · `'inline'` view + click-to-edit (range picker). */\n viewed = input<SdViewed, SdViewedInput>(false, { transform: sdViewedTransform });\n /** In `viewed='inline'`, show a hover clear-× on the text face. Set `false` when the host owns removal (chips). */\n clearable = input(true, { transform: booleanAttribute });\n\n // Tri-state `viewed` — shared primitive. In `'inline'` the range editor is always mounted\n // (chrome hidden via CSS); the sd-view text face opens the range picker on click.\n readonly #viewedState = sdViewedInline(this.viewed, () => this.open(), this.disabled);\n /** `true` when `viewed === 'inline'`. */\n readonly isInline = this.#viewedState.isInline;\n /** `true` when `viewed === true` (static view, no editor). */\n readonly isViewed = this.#viewedState.isViewed;\n /** Open the range picker from the inline text face. No-op unless `viewed='inline'`. */\n enterInlineEdit = (): void => this.#viewedState.enterInlineEdit();\n\n /** Optional <ng-template #sdValue> projected by consumer to override the viewed text. */\n sdValueTemplate = contentChild<TemplateRef<unknown>>('sdValue');\n\n /**\n * Formatted \"dd/MM/yyyy → dd/MM/yyyy\" string for the viewed-mode display.\n * why: viewed mode chỉ hiển thị text — cần format gọn cho cả 2 đầu range,\n * Returns empty when both ends are blank, \"from →\" when only from is set, and so on.\n */\n formatted = computed<string>(() => {\n const m = this.valueModel();\n const fmt = (d: unknown): string => {\n if (d == null || d === '') return '';\n const dt = d instanceof Date ? d : new Date(String(d));\n if (isNaN(dt.getTime())) return '';\n const dd = String(dt.getDate()).padStart(2, '0');\n const mm = String(dt.getMonth() + 1).padStart(2, '0');\n return `${dd}/${mm}/${dt.getFullYear()}`;\n };\n const a = fmt(m?.from);\n const b = fmt(m?.to);\n if (!a && !b) return '';\n return `${a} → ${b}`;\n });\n\n /** Open the range picker panel programmatically (for query-bar chip auto-open). */\n open = (): void => {\n if (this.formControl.disabled) return;\n this.picker()?.open();\n };\n\n appearanceInput = input<MatFormFieldAppearance | undefined>(undefined, { alias: 'appearance' });\n appearance = computed(() => this.appearanceInput() ?? this.formConfig?.appearance ?? 'outline');\n\n floatLabel = input<FloatLabelType>('auto');\n\n minInput = input<any>(undefined, { alias: 'min' });\n resolvedMin = computed(() => this.#parseDateBoundary(this.minInput()));\n\n maxInput = input<any>(undefined, { alias: 'max' });\n resolvedMax = computed(() => this.#parseDateBoundary(this.maxInput()));\n\n /**\n * Output serialization strategy applied to **each endpoint** of the committed range. Affects\n * `model` / `modelChange` / `sdChange` and the registered form field only — the field keeps\n * showing `dd/MM/yyyy → dd/MM/yyyy`. Left unset, endpoints stay canonical `yyyy/MM/dd` strings.\n */\n transform = input<SdTemporalValueTransform | undefined>();\n\n valueModel = model<SdDateRangeValue | undefined | null>(undefined, { alias: 'model' });\n\n // ==========================================\n // 4. SIGNAL OUTPUTS\n // ==========================================\n sdChange = output<SdDateRangeValue | undefined | null>();\n\n // ==========================================\n // 5. INTERNAL STATE & STREAMS\n // ==========================================\n isMobileOrTablet = BrowserUtilities.isMobile();\n formControl = new FormControl();\n control1 = new FormControl();\n control2 = new FormControl();\n /**\n * why: 2 control đầu range là CHI TIẾT NỘI BỘ. Trước đây chúng được đăng ký vào FormGroup của\n * consumer dưới 2 tên UUID ngẫu nhiên (`#c1` / `#c2`), nên `form.value` mọc thêm 2 key đổi theo\n * từng instance — vỡ shape giá trị gửi lên server và làm `form.reset(obj)` không thể viết đúng.\n * Giờ CHỈ control tổng được đăng ký (dưới `name`); 2 connector này để `name` rỗng nên connector\n * bỏ qua hẳn bước đăng ký, ta chỉ dùng phần quản lý validator/disabled dạng CỘNG DỒN của nó.\n */\n readonly #fromConnector = ɵsdFormControlConnector<unknown, unknown>({\n form: this.form,\n name: computed(() => undefined),\n control: computed(() => this.control1),\n required: this.required,\n disabled: this.disabled,\n });\n readonly #toConnector = ɵsdFormControlConnector<unknown, unknown>({\n form: this.form,\n name: computed(() => undefined),\n control: computed(() => this.control2),\n required: this.required,\n disabled: this.disabled,\n });\n\n /**\n * Chữ ký tập lỗi của 2 đầu range — TÊN KEY + PAYLOAD.\n * why: dùng làm dependency cho `#validators` để validator tổng chỉ được hoán đổi khi lỗi thật sự\n * đổi, thay vì mỗi event của control (computed so sánh kết quả bằng `Object.is`).\n * why: chữ ký PHẢI gồm payload. Trước đây chỉ lấy tên key, nên `matDatepickerParse: { text: '11/1' }`\n * đổi thành `{ text: '11/12' }` cho ra cùng chữ ký → validator không chạy lại → object lỗi đã copy\n * sang `formControl` treo lại payload cũ.\n */\n readonly #endpointErrorFingerprint = computed(() => {\n void this.#state1();\n void this.#state2();\n return `${serializeErrors(this.control1.errors)}|${serializeErrors(this.control2.errors)}`;\n });\n\n readonly #validators = computed<readonly ValidatorFn[]>(() => {\n const isRequired = this.required();\n void this.#endpointErrorFingerprint();\n\n // why: chỉ control tổng được đăng ký vào form cha, nên lỗi Material nằm trên control1/control2\n // phải được KÉO lên đây — nếu không form cha báo VALID trong khi UI đang đỏ và submit lọt.\n const validator: ValidatorFn = control => {\n const errors: ValidationErrors = { ...(this.control1.errors ?? {}), ...(this.control2.errors ?? {}) };\n if (isRequired && !rangeIsComplete(control.value)) errors['required'] = true;\n return Object.keys(errors).length > 0 ? errors : null;\n };\n return [validator];\n });\n\n /**\n * why: control tổng giữ `{ from: Date, to: Date }` — biểu diễn của editor. Có `transform` thì\n * consumer được hứa `form.get(name).value` bằng `model` (hai endpoint đã serialize), nên form phải\n * nhận control này. Không có transform thì `registered` trả null, form vẫn nhận control tổng.\n */\n readonly #modelFacing = ɵsdModelFacingControl<SdDateRangeValue | undefined | null>({\n active: computed(() => !!this.transform()),\n model: this.valueModel,\n writeModel: value => {\n this.valueModel.set(value);\n this.sdChange.emit(value);\n },\n source: computed(() => this.formControl),\n modelEquals: (left, right) => (left?.from ?? null) === (right?.from ?? null) && (left?.to ?? null) === (right?.to ?? null),\n });\n /** Control registered in the parent form while a `transform` is active; holds the public model. */\n readonly modelControl = this.#modelFacing.control;\n\n readonly #rangeConnector = ɵsdFormControlConnector<unknown, unknown>({\n form: this.form,\n name: this.name,\n control: computed(() => this.formControl),\n registeredControl: this.#modelFacing.registered,\n validators: this.#validators,\n disabled: this.disabled,\n });\n\n #isFocus = false;\n #isModelChange = false;\n #isSdChangeEmittedByEnter = false;\n #isSdChangeEmittedByClear = false;\n /** Cờ loại trừ giữa write đi XUỐNG (`#syncAggregate`) và write đi LÊN (subscriber bên dưới). */\n #isWritingAggregate = false;\n\n constructor() {\n this.cdRef.markForCheck();\n\n // EFFECT 1: Sync model thay đổi từ bên ngoài vào control1 và control2\n effect(() => {\n const val = this.valueModel();\n untracked(() => {\n // why: đi qua `#coerceEndpoint` chứ không gọi thẳng `DateUtilities.isDate` — hàm đó từ chối\n // chuỗi RFC-1123, nên `transform=\"UTCString\"` sẽ không render được chính giá trị nó phát ra.\n const fromDate = this.#coerceEndpoint(val?.from);\n const toDate = this.#coerceEndpoint(val?.to);\n const fromStr = fromDate ? DateUtilities.toFormat(fromDate, 'yyyy/MM/dd') : null;\n const toStr = toDate ? DateUtilities.toFormat(toDate, 'yyyy/MM/dd') : null;\n\n // Chỉ set value nếu có sự khác biệt (tránh loop)\n // control1/control2 giờ giữ native Date (date-fns adapter), không cần .toDate() như Moment.\n const currentFrom = this.control1.value ? DateUtilities.toFormat(this.control1.value, 'yyyy/MM/dd') : null;\n const currentTo = this.control2.value ? DateUtilities.toFormat(this.control2.value, 'yyyy/MM/dd') : null;\n\n // why: bỏ `{ emitEvent: false }` — nó chặn luôn `events` của control, nên `sdFormControlState`\n // không tick và sau lần render đầu mọi computed (errorMessage, data-invalid, data-value,\n // data-empty) lẫn `<mat-error>` đứng im dưới OnPush.\n if (fromStr !== currentFrom) {\n this.control1.setValue(fromStr ? parseDate(fromStr, 'yyyy/MM/dd', new Date()) : null);\n }\n if (toStr !== currentTo) {\n this.control2.setValue(toStr ? parseDate(toStr, 'yyyy/MM/dd', new Date()) : null);\n }\n\n // Đồng bộ control tổng để required của form cha không bị invalid khi model default đã có giá trị.\n this.#syncAggregate();\n });\n });\n\n // SUBSCRIPTION: đẩy giá trị ghi từ NGOÀI vào control tổng ngược xuống 2 đầu range.\n // why: từ khi control1/control2 không còn được đăng ký vào FormGroup của consumer, `fg.reset()`\n // và `fg.patchValue({ period })` chỉ chạm tới control tổng — không còn ai đẩy giá trị đó xuống\n // 2 đầu range nữa, nên `<mat-date-range-input>` vẫn hiện ngày cũ trong khi `form.value.period`\n // đã null. Trước đây reset \"vô tình\" chạy đúng chỉ vì 2 đầu range nằm sẵn trong group dưới 2 key\n // UUID — chính thứ đã bị gỡ bỏ.\n this.formControl.valueChanges.pipe(takeUntilDestroyed()).subscribe(value => {\n // Write do chính ta phát ra thì bỏ qua, nếu không sẽ đá nhau với `#syncAggregate`.\n if (this.#isWritingAggregate) return;\n this.#applyAggregate(value);\n });\n }\n\n /**\n * Ghi `{ from, to }` xuống control tổng, và CHỈ khi thật sự khác giá trị đang giữ.\n * why: write giờ đã phát event; nếu ghi vô điều kiện thì mỗi lần model đổi sẽ bắn thêm một\n * `valueChanges` thừa lên FormGroup cha (object mới luôn \"khác\" nếu so bằng tham chiếu).\n */\n #syncAggregate(): void {\n const next: SdDateRangeControlValue = { from: this.control1.value ?? null, to: this.control2.value ?? null };\n if (sameRange(this.formControl.value as SdDateRangeControlValue | null | undefined, next)) return;\n this.#isWritingAggregate = true;\n try {\n this.formControl.setValue(next);\n } finally {\n this.#isWritingAggregate = false;\n }\n }\n\n /**\n * Phân phối giá trị của control tổng xuống `control1` / `control2` / `valueModel`.\n * why: đây là nửa còn thiếu của vòng đồng bộ sau khi 2 đầu range rời FormGroup — `fg.reset(obj)`\n * và `fg.patchValue(obj)` chỉ biết tới control tổng.\n */\n #applyAggregate(value: unknown): void {\n const range = value as { from?: unknown; to?: unknown } | null | undefined;\n const from = this.#coerceEndpoint(range?.from);\n const to = this.#coerceEndpoint(range?.to);\n\n if (dateStamp(this.control1.value) !== dateStamp(from)) this.control1.setValue(from);\n if (dateStamp(this.control2.value) !== dateStamp(to)) this.control2.setValue(to);\n\n // Model giữ contract chuỗi `yyyy/MM/dd` (giống `#emit`), không phải native Date.\n const next: SdDateRangeValue = { from: this.#endpointOut(from), to: this.#endpointOut(to) };\n const current = this.valueModel();\n if (next.from !== (current?.from ?? null) || next.to !== (current?.to ?? null)) {\n this.valueModel.set(next);\n this.cdRef.markForCheck();\n }\n }\n\n /**\n * Serializes one endpoint. Each end is a date, so the instant is local start-of-day — the calendar\n * day the user picked. The two ends are serialized independently; the range object itself is never\n * turned into a single string.\n */\n #endpointOut(value: Date | null): string | null {\n if (!value) return null;\n const transformed = sdSerializeTemporalValue(sdLocalStartOfDay(value), this.transform());\n return transformed ?? DateUtilities.toFormat(value, 'yyyy/MM/dd') ?? null;\n }\n\n /** Consumer có thể ghi thẳng `Date` hoặc chuỗi ngày vào control tổng — chấp nhận cả hai. */\n #coerceEndpoint(value: unknown): Date | null {\n if (value instanceof Date) return isNaN(value.getTime()) ? null : value;\n if (typeof value !== 'string' || value.trim() === '') return null;\n if (!DateUtilities.isDate(value)) {\n // why: `DateUtilities.isDate` từ chối chuỗi RFC-1123 của `toUTCString()`, nên không có nhánh\n // này thì `<sd-date-range transform=\"UTCString\">` không đọc lại được chính output của nó.\n const parsedTransformed = sdParseTransformedTemporal(value);\n return parsedTransformed ? sdLocalStartOfDay(parsedTransformed) : null;\n }\n const normalized = DateUtilities.toFormat(value, 'yyyy/MM/dd');\n return normalized ? parseDate(normalized, 'yyyy/MM/dd', new Date()) : null;\n }\n\n #parseDateBoundary(val: any): Date | null {\n if (val === 'TODAY') return new Date();\n if (val && DateUtilities.isDate(val)) return new Date(val);\n return null;\n }\n\n onStartChange = (event: MatDatepickerInputEvent<Date>) => {\n if (!this.#isFocus) this.#emit();\n };\n\n onEndChange = (event: MatDatepickerInputEvent<Date>) => {\n if (!this.#isFocus) this.#emit();\n };\n\n #emit = () => {\n // control1/control2 giờ giữ native Date, không cần .toDate().\n const from = this.control1.value || null;\n const to = this.control2.value || null;\n\n const currentModel = this.valueModel();\n const newFrom = DateUtilities.isDate(from) ? this.#endpointOut(from as Date) : null;\n const newTo = DateUtilities.isDate(to) ? this.#endpointOut(to as Date) : null;\n\n if (newFrom !== currentModel?.from || newTo !== currentModel?.to) {\n const nextModel = { from: newFrom, to: newTo };\n this.#syncAggregate();\n this.valueModel.set(nextModel);\n this.#isModelChange = true;\n this.cdRef.markForCheck();\n }\n };\n\n clear = () => {\n const emptyModel = { from: null, to: null };\n this.control1.setValue(null);\n this.control2.setValue(null);\n this.#syncAggregate();\n\n this.valueModel.set(emptyModel);\n this.sdChange.emit(emptyModel);\n\n this.#isSdChangeEmittedByClear = true;\n this.cdRef.markForCheck();\n };\n\n onEnter = () => {\n this.#emit();\n this.sdChange.emit(this.valueModel());\n this.#isSdChangeEmittedByEnter = true;\n };\n\n onFocus = () => {\n this.#isFocus = true;\n this.#isModelChange = false;\n this.#isSdChangeEmittedByEnter = false;\n this.#isSdChangeEmittedByClear = false;\n };\n\n onBlur = () => {\n this.#isFocus = false;\n this.#emit();\n // why: vẫn hoãn đúng 1 macrotask như cũ (để onFocus của ô kia kịp huỷ emit khi tab giữa\n // from/to) — chỉ scope handle theo DestroyRef.\n this.#timers.schedule(() => {\n if (!this.#isFocus && this.#isModelChange && !(this.#isSdChangeEmittedByEnter || this.#isSdChangeEmittedByClear)) {\n this.sdChange.emit(this.valueModel());\n }\n });\n };\n\n onClosePicker = () => {\n this.sdChange.emit(this.valueModel());\n };\n\n onOpenPicker = (event: MouseEvent) => {\n event.stopPropagation();\n if (!this.formControl.disabled) {\n this.picker()?.open();\n }\n };\n}\n","@let _sdLabelDef = sdLabelDef();\r\n@let _label = label();\r\n@let _appearance = appearance();\r\n@let _required = required();\r\n@let _hideInlineError = hideInlineError();\r\n@let _errorMessage = errorMessage();\r\n@let _helperText = helperText();\r\n@let _resolvedMin = resolvedMin();\r\n@let _resolvedMax = resolvedMax();\r\n@let _size = size();\r\n@let _isInline = isInline();\r\n@let _bare = _isInline;\r\n@let _hasValue = !!(control1.value || control2.value);\r\n@let _labelTemplate = _sdLabelDef?.templateRef ?? undefined;\r\n<!-- why: một cổng gate duy nhất cho <mat-error>, aria-invalid và aria-describedby — trước đây\r\n message hiện mà hai ô nhập không hề báo invalid nên screen reader không biết đang lỗi. -->\r\n@let _errorVisible = !!_errorMessage && (formControl.touched || control1.touched || control2.touched);\r\n@let _showInlineError = !_hideInlineError && _errorVisible;\r\n\r\n@if (isViewed()) {\r\n <sd-view\r\n [label]=\"_label\"\r\n [labelTemplate]=\"_labelTemplate\"\r\n [value]=\"valueModel()\"\r\n [display]=\"formatted()\"\r\n [valueTemplate]=\"sdValueTemplate()\">\r\n </sd-view>\r\n} @else {\r\n @if (_isInline) {\r\n <!-- why: inline — sd-view là \"mặt\" + trigger; range editor render ẩn (.sd-inline-editor) chỉ để mở picker. -->\r\n <span class=\"sd-inline-view\" role=\"button\" tabindex=\"0\" (click)=\"enterInlineEdit()\" (keydown.enter)=\"enterInlineEdit()\">\r\n <sd-view\r\n [label]=\"_label\"\r\n [labelTemplate]=\"_labelTemplate\"\r\n [value]=\"valueModel()\"\r\n [display]=\"formatted()\"\r\n [valueTemplate]=\"sdValueTemplate()\">\r\n </sd-view>\r\n @if (clearable() && _hasValue && !_required && !formControl.disabled) {\r\n <button type=\"button\" class=\"sd-inline-clear\" (click)=\"$event.stopPropagation(); clear()\" title=\"Xóa\" aria-label=\"Xóa\">\r\n <sd-icon name=\"close\"></sd-icon>\r\n </button>\r\n }\r\n </span>\r\n }\r\n\r\n <div [class.sd-inline-editor]=\"_isInline\">\r\n @if (!_appearance && _sdLabelDef?.templateRef) {\r\n <ng-container *ngTemplateOutlet=\"_sdLabelDef!.templateRef\"> </ng-container>\r\n }\r\n @if (!_appearance && _label && !_sdLabelDef?.templateRef) {\r\n <sd-label [label]=\"_label\" [required]=\"_required\"></sd-label>\r\n }\r\n\r\n <mat-form-field\r\n [class.sd-md]=\"_size === 'md'\"\r\n [class.sd-sm]=\"_size === 'sm'\"\r\n [class.hide-inline-error]=\"_hideInlineError\"\r\n [appearance]=\"_appearance!\"\r\n [floatLabel]=\"floatLabel()\">\r\n @if (_appearance && _label) {\r\n <mat-label class=\"sd-form-field-label\">\r\n <span>{{ _label }}</span>\r\n @if (_helperText) {\r\n <sd-icon [matTooltip]=\"_helperText\" matTooltipPosition=\"below\" name=\"info\"></sd-icon>\r\n }\r\n </mat-label>\r\n }\r\n\r\n <mat-date-range-input\r\n [max]=\"_resolvedMax\"\r\n [min]=\"_resolvedMin\"\r\n [rangePicker]=\"picker\"\r\n [disabled]=\"formControl.disabled\"\r\n [required]=\"_required\"\r\n [attr.data-autoId]=\"autoId()\"\r\n [attr.data-disabled]=\"dataDisabled()\"\r\n [attr.data-invalid]=\"dataInvalid()\"\r\n [attr.data-empty]=\"dataEmpty()\"\r\n [attr.data-value]=\"dataValue()\"\r\n [attr.data-required]=\"dataRequired()\"\r\n [attr.data-error-message]=\"dataErrorMessage()\">\r\n <!-- why: BỎ aria-hidden trên hai ô nhập THẬT — cả hai đều Tab tới và gõ được, aria-hidden\r\n chỉ khiến screen reader đọc ra khoảng lặng ở đúng chỗ người dùng đang đứng. -->\r\n <input\r\n [id]=\"id1\"\r\n autocomplete=\"off\"\r\n autocorrect=\"off\"\r\n matStartDate\r\n [formControl]=\"control1\"\r\n [placeholder]=\"formControl.disabled ? '' : ('core.form.date-range.from' | sdTranslate)\"\r\n (dateInput)=\"onStartChange($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keyup.enter)=\"onEnter()\"\r\n [attr.data-qclabel]=\"_label\"\r\n [attr.data-autoId]=\"fromAutoId()\"\r\n [attr.aria-invalid]=\"_errorVisible ? 'true' : null\"\r\n [attr.aria-describedby]=\"_errorMessage ? errorId : null\" />\r\n\r\n <input\r\n [id]=\"id2\"\r\n [autocomplete]=\"id2\"\r\n autocorrect=\"off\"\r\n matEndDate\r\n [formControl]=\"control2\"\r\n [placeholder]=\"formControl.disabled ? '' : ('core.form.date-range.to' | sdTranslate)\"\r\n (dateInput)=\"onEndChange($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keyup.enter)=\"onEnter()\"\r\n [attr.data-qclabel]=\"_label\"\r\n [attr.data-autoId]=\"toAutoId()\"\r\n [attr.aria-invalid]=\"_errorVisible ? 'true' : null\"\r\n [attr.aria-describedby]=\"_errorMessage ? errorId : null\" />\r\n </mat-date-range-input>\r\n\r\n @if (_hideInlineError && _errorVisible) {\r\n <sd-icon matSuffix class=\"sd-error-icon\" [matTooltip]=\"_errorMessage\" matTooltipPosition=\"above\" name=\"error\"></sd-icon>\n }\r\n @if (_hideInlineError && _errorVisible) {\r\n <span class=\"sd-visually-hidden\" [id]=\"errorId\" matSuffix>{{ _errorMessage }}</span>\r\r\n }\r\n\r\n @if (_showInlineError) {\r\n <mat-error [id]=\"errorId\">{{ _errorMessage }}</mat-error>\r\n }\r\n\r\n <!-- why: hai nút suffix trước đây là <sd-icon (click)> trần — không Tab tới được, không có\r\n accessible name, và lint bỏ qua vì <sd-icon> không phải phần tử DOM chuẩn. <button\r\n type=\"button\"> lấy sẵn Enter/Space + role; nhãn lấy từ i18n (xem mục compromise). -->\r\n @if ((control1.value || control2.value) && !_bare) {\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n class=\"cursor-pointer sd-suffix-icon sd-suffix-btn\"\r\n [attr.aria-label]=\"'core.form.date-range.clear' | sdTranslate\"\r\n (click)=\"clear()\">\r\n <sd-icon name=\"cancel\"></sd-icon>\r\n </button>\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n matSuffix\r\n class=\"cursor-pointer sd-suffix-icon sd-suffix-btn\"\r\n [attr.aria-label]=\"'core.form.date-range.open-picker' | sdTranslate\"\r\n (click)=\"onOpenPicker($event)\">\r\n <sd-icon name=\"today\"></sd-icon>\r\n </button>\r\n\r\n <mat-date-range-picker [touchUi]=\"isMobileOrTablet\" (closed)=\"onClosePicker()\" #picker></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵsdTimerScope","ɵsdFormControlConnector","ɵsdModelFacingControl","parseDate","dfEnUS"],"mappings":"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"}