@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
@@ -14,9 +14,9 @@ export interface SdFormGenericExpressionCondition {
14
14
  value: any;
15
15
  dayInfo: DayInfo;
16
16
  }
17
- export type Operator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';
18
- export declare const Operators: {
19
- value: Operator;
17
+ export type SdFormGenericOperator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';
18
+ export declare const SdFormGenericOperators: {
19
+ value: SdFormGenericOperator;
20
20
  symbol?: string;
21
21
  display: string;
22
22
  }[];
@@ -43,16 +43,16 @@ export interface DayInfo {
43
43
  related?: 'LASTDAY' | 'NEXTDAY' | 'LASTWEEK' | 'NEXTWEEK' | 'LASTMONTH' | 'NEXTMONTH';
44
44
  relatedValue?: number;
45
45
  }
46
- export declare const DayInfoTypes: {
46
+ export declare const SD_DAY_INFO_TYPES: {
47
47
  value: string;
48
48
  display: string;
49
49
  }[];
50
- export declare const DayInfoPreviouses: {
50
+ export declare const SD_DAY_INFO_PREVIOUSES: {
51
51
  value: string;
52
52
  display: string;
53
53
  format: (n: number) => string;
54
54
  }[];
55
- export declare const GetDatetimeValue: (value: string) => string | undefined;
55
+ export declare const sdGetDatetimeValue: (value: string) => string | undefined;
56
56
  interface AttributeValues {
57
57
  value: string;
58
58
  display: string;
@@ -62,13 +62,13 @@ interface AttributeValues {
62
62
  display: string;
63
63
  }[];
64
64
  }
65
- export declare const AttributeOperators: Record<Attribute['type'], {
66
- value: Operator;
65
+ export declare const SD_ATTRIBUTE_OPERATORS: Record<Attribute['type'], {
66
+ value: SdFormGenericOperator;
67
67
  symbol?: string;
68
68
  display: string;
69
69
  }[]>;
70
- export declare const GetAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => Attribute[];
71
- export declare const TemplateToCondition: (template: string | undefined | null, entity: Record<string, any>) => string | undefined;
72
- export declare const EvaluateExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition, entity: Record<string, any>) => boolean | undefined;
73
- export declare const ExpressionToJavascriptExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => string | undefined;
70
+ export declare const sdGetAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => Attribute[];
71
+ export declare const sdTemplateToCondition: (template: string | undefined | null, entity: Record<string, any>) => string | undefined;
72
+ export declare const sdEvaluateExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition, entity: Record<string, any>) => boolean | undefined;
73
+ export declare const sdExpressionToJavascriptExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => string | undefined;
74
74
  export {};
@@ -6,3 +6,4 @@ export type * from './form-generic-definition-selection.model';
6
6
  export type * from './form-generic-definition-table.model';
7
7
  export type * from './form-generic-definition-html.model';
8
8
  export * from './form-generic-expression.model';
9
+ export * from './form-generic-validation.model';
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  export declare class FormGenericService {
5
5
  #private;
6
6
  private readonly configuration;
7
- get selections(): (() => Promise<SdFormGenericDefinitionSelection[]>) | SdFormGenericDefinitionSelection<any, any>[] | (() => SdFormGenericDefinitionSelection<any, any>[]);
7
+ get selections(): (() => Promise<SdFormGenericDefinitionSelection[]>) | SdFormGenericDefinitionSelection<any, unknown>[] | (() => SdFormGenericDefinitionSelection<any, unknown>[]);
8
8
  get tables(): import("@sdcorejs/angular/components/form-generic").SdFormGenericDefinitionTable<any>[];
9
9
  getSelection: (valuesKey: string | undefined | null) => Promise<SdFormGenericDefinitionSelection | undefined>;
10
10
  selection: {
@@ -12,7 +12,7 @@ export declare class FormGenericService {
12
12
  getDefinition: (valuesKey: string | undefined | null) => Promise<SdFormGenericDefinitionSelection | undefined>;
13
13
  items: (valuesKey: string | undefined | null, args: SdFormGenericArgs) => Promise<SdFormGenericSelectionItem[] | SdSearch<SdFormGenericSelectionItem>>;
14
14
  variables: {
15
- detail: (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => Promise<any>;
15
+ detail: (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => Promise<unknown>;
16
16
  };
17
17
  };
18
18
  html: {
@@ -36,6 +36,7 @@ export declare class SdImportExcel implements OnInit, OnDestroy {
36
36
  accept: () => void;
37
37
  setValidation: (validations: SdImportExcelValidation[]) => void;
38
38
  view: (showing?: "ALL" | "SUCCESS" | "WARNING" | "ERROR") => void;
39
+ onDownloadTemplateKeydown: (event: KeyboardEvent) => void;
39
40
  downloadTemplate: () => Promise<void>;
40
41
  export: () => Promise<void>;
41
42
  onClosed: () => void;
@@ -11,12 +11,13 @@ export * from '@sdcorejs/angular/components/query-bar';
11
11
  export * from '@sdcorejs/angular/components/upload-file';
12
12
  export * from '@sdcorejs/angular/components/section';
13
13
  export * from '@sdcorejs/angular/components/inform';
14
+ export * from '@sdcorejs/angular/components/form-generic';
14
15
  export * from '@sdcorejs/angular/components/anchor';
16
+ export * from '@sdcorejs/angular/components/api-contract-builder';
15
17
  export * from '@sdcorejs/angular/components/query-builder';
16
18
  export * from '@sdcorejs/angular/components/org-chart';
17
19
  export * from '@sdcorejs/angular/components/tree';
18
20
  export * from '@sdcorejs/angular/components/import-excel';
19
- export * from '@sdcorejs/angular/components/document-builder';
20
21
  export * from '@sdcorejs/angular/components/mini-editor';
21
22
  export * from '@sdcorejs/angular/components/view';
22
23
  export * from '@sdcorejs/angular/components/code-editor';
@@ -29,3 +30,8 @@ export * from '@sdcorejs/angular/components/breadcrumb';
29
30
  export * from '@sdcorejs/angular/components/data-state';
30
31
  export * from '@sdcorejs/angular/components/job-progress';
31
32
  export * from '@sdcorejs/angular/components/audit-diff';
33
+ export * from '@sdcorejs/angular/components/ckeditor-styles';
34
+ export * from '@sdcorejs/angular/components/history';
35
+ export * from '@sdcorejs/angular/components/operator';
36
+ export * from '@sdcorejs/angular/components/stepper';
37
+ export * from '@sdcorejs/angular/components/tab';
@@ -14,7 +14,7 @@ export interface SdMiniEditorMentionConfig {
14
14
  attributes?: Record<string, string>;
15
15
  };
16
16
  }
17
- export type SdMiniEditorMentionItem<T = any> = MentionFeedObjectItem & {
17
+ export type SdMiniEditorMentionItem<T = unknown> = MentionFeedObjectItem & {
18
18
  data?: T;
19
19
  };
20
20
  export interface SdMiniEditorOption {
@@ -1,8 +1,8 @@
1
- import { ElementRef, TemplateRef } from '@angular/core';
1
+ import { ElementRef, OnDestroy, TemplateRef } from '@angular/core';
2
2
  import { Color } from '@sdcorejs/utils/models';
3
3
  import * as i0 from "@angular/core";
4
4
  export type SdModalBeforeClose = () => boolean | Promise<boolean>;
5
- export declare class SdModal {
5
+ export declare class SdModal implements OnDestroy {
6
6
  #private;
7
7
  static index: import("@angular/core").WritableSignal<number>;
8
8
  templateRef: import("@angular/core").Signal<TemplateRef<any>>;
@@ -26,6 +26,7 @@ export declare class SdModal {
26
26
  isOpened: import("@angular/core").WritableSignal<boolean>;
27
27
  alreadyOpened: import("@angular/core").WritableSignal<boolean>;
28
28
  constructor();
29
+ ngOnDestroy(): void;
29
30
  open: () => void;
30
31
  close: () => void;
31
32
  requestClose: () => Promise<boolean>;
@@ -1,11 +1,93 @@
1
1
  import { CdkPortal } from '@angular/cdk/portal';
2
2
  import * as i0 from "@angular/core";
3
+ /**
4
+ * `<sd-modal-resizable>` — right-docked, non-modal panel that can be minimized, expanded or pushed
5
+ * fullscreen. Several panels stack side by side along the right edge of the viewport, so the user
6
+ * can keep multiple records open at once while still working with the page behind them.
7
+ *
8
+ * Use it for side-by-side comparison / inspector workflows. Use `<sd-modal>` when the task is
9
+ * blocking, and `<sd-side-drawer>` when a single overlay with a backdrop is enough.
10
+ *
11
+ * NOTE ON DOCS: this component deliberately has **no** sibling `sd-modal-resizable.md`. Every `*.md`
12
+ * under the library is swept into `published-docs/<version>/index.json` by `scripts/collect-docs.mjs`,
13
+ * and `scripts/generate-showcase-example-sources.test.mjs` asserts that list is 1:1 with the
14
+ * `publishedDocId` set in the showcase documentation registry. A published doc with no showcase page
15
+ * therefore turns that release guard red. Keep the reference here until the component ships a
16
+ * showcase demo + registry entry; only then add the `.md`.
17
+ *
18
+ * ```ts
19
+ * import { SdModalResizable } from '@sdcorejs/angular/components/modal-resizable';
20
+ * ```
21
+ *
22
+ * ```html
23
+ * <sd-button title="Open detail" type="fill" color="primary" (click)="panel.open()"></sd-button>
24
+ *
25
+ * <sd-modal-resizable #panel width="520px">
26
+ * <span sdTitle>Đơn hàng #1024</span>
27
+ *
28
+ * <div sdBody class="panel-body">
29
+ * <sd-section icon="receipt" title="Thông tin chung">
30
+ * <sd-section-item label="Khách hàng">Nguyen Van An</sd-section-item>
31
+ * </sd-section>
32
+ * </div>
33
+ *
34
+ * <sd-button sdFooterRight type="text" title="Đóng" (click)="panel.close()"></sd-button>
35
+ * </sd-modal-resizable>
36
+ * ```
37
+ *
38
+ * ### Slots
39
+ * | Selector | Where it renders |
40
+ * | ----------------- | ------------------------- |
41
+ * | `[sdTitle]` | Header title area. |
42
+ * | `[sdBody]` | Scrollable content area. |
43
+ * | `[sdFooterLeft]` | Footer left action group. |
44
+ * | `[sdFooterRight]` | Footer right action group.|
45
+ *
46
+ * Header, body and footer only render while the panel is open.
47
+ *
48
+ * ### Panel stacking
49
+ * The panel is portalled onto `document.body` (via `CdkPortal` + `DomPortalOutlet`), so laying panels
50
+ * out is a concern shared by all live instances rather than by a single view. Arrangement is scoped
51
+ * through the root-provided `SdModalResizableRegistry`: each instance registers its panel id on
52
+ * construction and unregisters it on destroy. `open`, `close`, `minimize`, `maximize` and
53
+ * `toggleMaximum` re-run the arrangement and rewrite inline `width` / `right` **only on registered,
54
+ * still-mounted panels**, in registration order. Consequences worth knowing:
55
+ * - Markup of your own that happens to carry the `.modal-resizable` class is **not** touched.
56
+ * (Earlier builds ran `document.querySelectorAll('.modal-resizable')` and rewrote every match.)
57
+ * - A destroyed panel immediately stops taking up a slot for the instances that outlive it.
58
+ * - Panels marked `c-closed`, and expanded panels with no captured `data-width`, are skipped.
59
+ *
60
+ * ### Lifecycle / teardown
61
+ * `open()`, `close()` and the arrangement pass each schedule a short `setTimeout` (100ms / 100ms /
62
+ * 200ms) that mutates DOM. All of them are tracked and cleared in `DestroyRef.onDestroy`, together
63
+ * with unregistering from the registry and destroying the portal view. Destroying the component
64
+ * mid-animation cannot run layout work against a detached panel.
65
+ *
66
+ * ### Anti-patterns
67
+ * - Rendering it inside a scroll container and expecting it to be clipped — it lives on `<body>`.
68
+ * - Reusing the `.modal-resizable` class on your own elements to "join" the stack; register a real
69
+ * component instead.
70
+ * - Writing inline `width` / `right` on a panel yourself — the next arrangement pass overwrites both.
71
+ *
72
+ * ### Tests
73
+ * `src/modal-resizable.component.spec.ts` — portal attach, open/close/minimize/maximize math,
74
+ * loading, editing, timer teardown, registry scoping. Run:
75
+ * `npx ng test sdcorejs-angular --watch=false --browsers=ChromeHeadless --include='projects/sdcorejs-angular/components/modal-resizable/src/modal-resizable.component.spec.ts'`
76
+ *
77
+ * ### Related
78
+ * `<sd-modal>` (blocking dialog / bottom-sheet), `<sd-side-drawer>` (single right-side overlay with
79
+ * a body scroll lock), `SdLoadingService` (powers `startLoading()` / `stopLoading()`).
80
+ */
3
81
  export declare class SdModalResizable {
4
82
  #private;
83
+ /** Generated DOM id of the panel element (`I<uuid>`). */
5
84
  readonly id: string;
6
85
  readonly portal: import("@angular/core").Signal<CdkPortal>;
86
+ /** Marks the panel as editable. Bare attribute = `true`. Default `false`. */
7
87
  readonly editable: import("@angular/core").InputSignalWithTransform<boolean, boolean | "">;
88
+ /** CSS width used while the panel is expanded (not a minimum). Default `'480px'`. */
8
89
  readonly width: import("@angular/core").InputSignal<string>;
90
+ /** Emitted by `toggleEditable()` with the new editing state. */
9
91
  readonly editingChanged: import("@angular/core").OutputEmitterRef<boolean>;
10
92
  readonly isEditing: import("@angular/core").WritableSignal<boolean>;
11
93
  readonly isOpened: import("@angular/core").WritableSignal<boolean>;
@@ -14,15 +96,25 @@ export declare class SdModalResizable {
14
96
  readonly isMinimum: import("@angular/core").WritableSignal<boolean>;
15
97
  readonly isMaximum: import("@angular/core").WritableSignal<boolean>;
16
98
  constructor();
99
+ /** Opens the panel, captures its rendered width, and expands it. */
17
100
  open: () => void;
101
+ /** Collapses the panel to zero width and stops loading. */
18
102
  close: () => void;
103
+ /** Shrinks the panel to the 300px minimum strip. */
19
104
  minimize: () => void;
105
+ /** Restores the panel to its expanded width. */
20
106
  maximize: () => void;
107
+ /** Toggles fullscreen (`calc(100% - 16px)`). */
21
108
  toggleMaximum: () => void;
109
+ /** Drives the scoped loading overlay through `SdLoadingService`. */
22
110
  startLoading: () => void;
111
+ /** Stops the scoped loading overlay. */
23
112
  stopLoading: () => void;
113
+ /** Flips `isEditing` and emits `editingChanged`. */
24
114
  toggleEditable(): void;
115
+ /** Hover state hook bound in the template. */
25
116
  onFocus: () => void;
117
+ /** Hover state hook bound in the template. */
26
118
  onBlur: () => void;
27
119
  static ɵfac: i0.ɵɵFactoryDeclaration<SdModalResizable, never>;
28
120
  static ɵcmp: i0.ɵɵComponentDeclaration<SdModalResizable, "sd-modal-resizable", never, { "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "editingChanged": "editingChanged"; }, never, ["[sdTitle]", "[sdBody]", "[sdFooterLeft]", "[sdFooterRight]"], true, never>;
@@ -0,0 +1,22 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Sổ đăng ký các panel `<sd-modal-resizable>` đang sống.
4
+ *
5
+ * why: mỗi panel được portal ra thẳng `document.body` nên việc xếp chỗ (width/right) là bài toán
6
+ * chung của cả stack. Trước đây `#arrangePanels` quét `document.querySelectorAll('.modal-resizable')`
7
+ * — query đó bắt MỌI phần tử mang class này trong tài liệu, kể cả markup của component khác hoặc
8
+ * của app dùng trùng tên class, rồi ghi đè inline style lên chúng. Registry giới hạn phạm vi ghi
9
+ * đúng vào các instance do library tạo ra và còn sống.
10
+ */
11
+ export declare class SdModalResizableRegistry {
12
+ #private;
13
+ register(id: string): void;
14
+ unregister(id: string): void;
15
+ /**
16
+ * Phần tử panel của các instance đã đăng ký và đang có mặt trong DOM.
17
+ * Instance đã destroy hoặc chưa attach portal sẽ bị bỏ qua.
18
+ */
19
+ panels(): HTMLElement[];
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdModalResizableRegistry, never>;
21
+ static ɵprov: i0.ɵɵInjectableDeclaration<SdModalResizableRegistry>;
22
+ }
@@ -16,9 +16,15 @@ export declare class SdOrgChart {
16
16
  readonly resolvedItemTemplate: import("@angular/core").Signal<TemplateRef<SdOrgChartItemContext<SdOrgChartItem>> | undefined>;
17
17
  readonly trackByItem: (_index: number, item: SdOrgChartItem) => string | number;
18
18
  hasChildren: (item: SdOrgChartItem) => boolean;
19
+ /** why: trả về hằng số dùng chung thay vì `[]` mới, để leaf không cấp phát mỗi lần CD gọi tới. */
19
20
  childrenOf: (item: SdOrgChartItem) => SdOrgChartItem[];
20
21
  isExpanded: (item: SdOrgChartItem) => boolean;
21
22
  toggle: (item: SdOrgChartItem, event?: Event) => void;
23
+ /**
24
+ * Template context của một node. Ref ổn định giữa các lần CD nhờ `#contextByItem`.
25
+ * Item không nằm trong `resolvedItems()` (gọi thủ công từ bên ngoài) thì dựng mới — trường hợp
26
+ * này không nằm trên đường render nên không gây churn.
27
+ */
22
28
  createContext: (item: SdOrgChartItem, depth: number, parent: SdOrgChartItem | null) => SdOrgChartItemContext;
23
29
  nodeAutoId: (item: SdOrgChartItem, part: "node" | "image" | "title" | "description" | "toggle") => string | undefined;
24
30
  static ɵfac: i0.ɵɵFactoryDeclaration<SdOrgChart, never>;
@@ -7,6 +7,7 @@ export declare class SdPreviewImage implements OnDestroy {
7
7
  static readonly MAX_ZOOM = 4;
8
8
  static readonly ZOOM_STEP = 0.1;
9
9
  static readonly SWIPE_THRESHOLD = 40;
10
+ readonly stageId: string;
10
11
  readonly autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
11
12
  readonly autoId: import("@angular/core").Signal<string | undefined>;
12
13
  readonly autoIdPrev: import("@angular/core").Signal<string | undefined>;
@@ -11,17 +11,21 @@ import * as i0 from "@angular/core";
11
11
  * immediately before Search so the user sees one filter-cluster on the right.
12
12
  */
13
13
  export declare class SdQueryActionsBar {
14
+ #private;
14
15
  readonly showLogicToggle: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
16
  readonly logic: import("@angular/core").ModelSignal<SdQueryLogic>;
16
17
  readonly filtersCount: import("@angular/core").InputSignal<number>;
17
18
  readonly showSavedFilters: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
18
19
  readonly savedFiltersKey: import("@angular/core").InputSignal<string | undefined>;
19
- readonly query: import("@angular/core").InputSignal<SdQuery<any>>;
20
- readonly applyFilter: import("@angular/core").OutputEmitterRef<SdSavedFilter<any>>;
20
+ readonly query: import("@angular/core").InputSignal<SdQuery<unknown>>;
21
+ readonly applyFilter: import("@angular/core").OutputEmitterRef<SdSavedFilter<unknown>>;
21
22
  readonly showClearAll: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
22
23
  readonly clear: import("@angular/core").OutputEmitterRef<void>;
23
24
  readonly canSearch: import("@angular/core").InputSignal<boolean>;
24
25
  readonly search: import("@angular/core").OutputEmitterRef<void>;
26
+ readonly logicGroupLabel: import("@angular/core").Signal<string>;
27
+ readonly clearAllLabel: import("@angular/core").Signal<string>;
28
+ readonly searchLabel: import("@angular/core").Signal<string>;
25
29
  setLogic(value: SdQueryLogic): void;
26
30
  static ɵfac: i0.ɵɵFactoryDeclaration<SdQueryActionsBar, never>;
27
31
  static ɵcmp: i0.ɵɵComponentDeclaration<SdQueryActionsBar, "sd-query-actions-bar", never, { "showLogicToggle": { "alias": "showLogicToggle"; "required": false; "isSignal": true; }; "logic": { "alias": "logic"; "required": false; "isSignal": true; }; "filtersCount": { "alias": "filtersCount"; "required": false; "isSignal": true; }; "showSavedFilters": { "alias": "showSavedFilters"; "required": false; "isSignal": true; }; "savedFiltersKey": { "alias": "savedFiltersKey"; "required": false; "isSignal": true; }; "query": { "alias": "query"; "required": false; "isSignal": true; }; "showClearAll": { "alias": "showClearAll"; "required": false; "isSignal": true; }; "canSearch": { "alias": "canSearch"; "required": false; "isSignal": true; }; }, { "logic": "logicChange"; "applyFilter": "applyFilter"; "clear": "clear"; "search": "search"; }, never, never, true, never>;
@@ -17,8 +17,11 @@ type Density = 'compact' | 'comfortable';
17
17
  * operator step, disabled badge in value step) + the per-type picker + × cancel.
18
18
  */
19
19
  export declare class SdQueryBuildChip {
20
+ #private;
21
+ readonly booleanTrueLabel: import("@angular/core").Signal<string>;
22
+ readonly booleanFalseLabel: import("@angular/core").Signal<string>;
20
23
  /** Current build state — drives every visual branch. */
21
- readonly building: import("@angular/core").InputSignal<BuildingChip<any>>;
24
+ readonly building: import("@angular/core").InputSignal<BuildingChip<unknown>>;
22
25
  /** Density preset — forwarded to the seamless chip + sizes the .c-token row. */
23
26
  readonly density: import("@angular/core").InputSignal<Density>;
24
27
  /** Operator set offered in the operator-step menu (parent's `allowedOperatorsFor(field)`). */
@@ -18,6 +18,14 @@ import * as i0 from "@angular/core";
18
18
  */
19
19
  export declare class SdQueryChipPopover {
20
20
  #private;
21
+ readonly swapFieldTooltip: import("@angular/core").Signal<string>;
22
+ readonly fromPlaceholder: import("@angular/core").Signal<string>;
23
+ readonly toPlaceholder: import("@angular/core").Signal<string>;
24
+ readonly booleanTrueLabel: import("@angular/core").Signal<string>;
25
+ readonly booleanFalseLabel: import("@angular/core").Signal<string>;
26
+ readonly selectValuePlaceholder: import("@angular/core").Signal<string>;
27
+ readonly enterValuePlaceholder: import("@angular/core").Signal<string>;
28
+ readonly loadingValuesLabel: import("@angular/core").Signal<string>;
21
29
  /** Resolved field of the currently editing chip — parent passes from `fieldByKey()`. */
22
30
  readonly field: import("@angular/core").InputSignal<SdQueryField | undefined>;
23
31
  /** The chip's current Filter — used by `seed()` for initial staging values. */
@@ -14,6 +14,8 @@ import * as i0 from "@angular/core";
14
14
  * chosen field through `(pick)`.
15
15
  */
16
16
  export declare class SdQueryFieldPicker {
17
+ #private;
18
+ readonly emptyLabel: import("@angular/core").Signal<string>;
17
19
  /** Field list shown in the menu (caller-supplied; rendered in input order). */
18
20
  readonly fields: import("@angular/core").InputSignal<SdQueryField[]>;
19
21
  /** Single key disabled with a trailing check — used in the chip-popover "Đổi field" flow. */
@@ -20,6 +20,8 @@ type Density = 'compact' | 'comfortable';
20
20
  */
21
21
  export declare class SdQueryInlineChip {
22
22
  #private;
23
+ readonly booleanTrueLabel: import("@angular/core").Signal<string>;
24
+ readonly booleanFalseLabel: import("@angular/core").Signal<string>;
23
25
  /** Resolved field — parent passes it (no lookup needed inside). */
24
26
  readonly field: import("@angular/core").InputSignal<SdQueryField>;
25
27
  /** The chip's Filter — used for `data` + `operator`. */
@@ -43,9 +43,9 @@ export declare class SdQueryInlineValueChip {
43
43
  readonly isBetween: import("@angular/core").Signal<boolean>;
44
44
  readonly isNoData: import("@angular/core").Signal<boolean>;
45
45
  readonly icon: import("@angular/core").Signal<string>;
46
- readonly ph: import("@angular/core").Signal<"giá trị" | "nhập…">;
47
- readonly phFrom: import("@angular/core").Signal<"Từ" | "từ…">;
48
- readonly phTo: import("@angular/core").Signal<"Đến" | "đến…">;
46
+ readonly ph: import("@angular/core").Signal<string>;
47
+ readonly phFrom: import("@angular/core").Signal<string>;
48
+ readonly phTo: import("@angular/core").Signal<string>;
49
49
  readonly hasValue: import("@angular/core").Signal<boolean>;
50
50
  readonly state: import("@angular/core").Signal<ChipState>;
51
51
  constructor();
@@ -17,19 +17,24 @@ import * as i0 from "@angular/core";
17
17
  */
18
18
  export declare class SdQuerySavedFiltersMenu {
19
19
  #private;
20
+ readonly tooltipLabel: import("@angular/core").Signal<string>;
21
+ readonly tooltipDisabledLabel: import("@angular/core").Signal<string>;
22
+ readonly deleteLabel: import("@angular/core").Signal<string>;
23
+ readonly emptyLabel: import("@angular/core").Signal<string>;
24
+ readonly saveLabel: import("@angular/core").Signal<string>;
20
25
  /** Namespace key used to scope localStorage. `undefined` → menu disabled. */
21
26
  readonly key: import("@angular/core").InputSignal<string | undefined>;
22
27
  /** Current query the host wants to snapshot when the user clicks "Save current". */
23
- readonly query: import("@angular/core").InputSignal<SdQuery<any>>;
28
+ readonly query: import("@angular/core").InputSignal<SdQuery<unknown>>;
24
29
  /** Fired when the user picks a saved filter from the list. */
25
- readonly apply: import("@angular/core").OutputEmitterRef<SdSavedFilter<any>>;
26
- readonly savedFilters: import("@angular/core").WritableSignal<SdSavedFilter<any>[]>;
30
+ readonly apply: import("@angular/core").OutputEmitterRef<SdSavedFilter<unknown>>;
31
+ readonly savedFilters: import("@angular/core").WritableSignal<SdSavedFilter<unknown>[]>;
27
32
  /**
28
33
  * Prompt for a name and append a snapshot of the current query as a new
29
34
  * saved filter. Public so the parent toolbar can wire its external "save"
30
35
  * button to this method without re-implementing persistence.
31
36
  */
32
- promptSave(): void;
37
+ promptSave(): Promise<void>;
33
38
  /** Apply a saved filter — host re-installs filters/logic/search via `(apply)`. */
34
39
  pick(filter: SdSavedFilter): void;
35
40
  /** Delete a saved filter by id. Stops propagation so the parent button doesn't fire `pick`. */
@@ -13,7 +13,7 @@ export declare class SdQueryBar {
13
13
  /** The extracted chip popover — owns operator+value staging + commit-on-close. */
14
14
  readonly chipPopover: import("@angular/core").Signal<SdQueryChipPopover | undefined>;
15
15
  /** Main option object. Prefer this API for new usage; individual inputs stay as a migration bridge. */
16
- readonly option: import("@angular/core").InputSignal<SdQueryBarOption<any> | undefined>;
16
+ readonly option: import("@angular/core").InputSignal<SdQueryBarOption<unknown> | undefined>;
17
17
  /** Prefix for auto-generated `data-autoid` on inner controls (chips, operator/value editors, buttons). */
18
18
  readonly autoIdInput: import("@angular/core").InputSignalWithTransform<string | undefined, string | null | undefined>;
19
19
  /** Available fields the user can filter by. Required for the field picker. */
@@ -54,7 +54,7 @@ export declare class SdQueryBar {
54
54
  * Snapshot of the current query — fed into `<sd-query-saved-filters-menu [query]>` so
55
55
  * saving a filter captures live filters/logic/search.
56
56
  */
57
- readonly currentQuery: import("@angular/core").Signal<SdQuery<any>>;
57
+ readonly currentQuery: import("@angular/core").Signal<SdQuery<unknown>>;
58
58
  /** Receive an applied filter from the saved-filters menu — re-install bar state + trigger apply. */
59
59
  onApplyFilter(saved: SdSavedFilter): void;
60
60
  /** Show AND/OR segmented toggle (renders only when there are ≥2 filters). */
@@ -64,9 +64,15 @@ export declare class SdQueryBar {
64
64
  /** Render the operator label on the chip face (default: hidden — operator only visible in popover). */
65
65
  readonly showOperatorOnChip: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
66
66
  /** Composite payload — emitted whenever filters / logic / search change. */
67
- readonly queryChange: import("@angular/core").OutputEmitterRef<SdQuery<any>>;
67
+ readonly queryChange: import("@angular/core").OutputEmitterRef<SdQuery<unknown>>;
68
68
  /** Fires when the user presses "Áp dụng" inside a chip popover — host should reload data. */
69
- readonly apply: import("@angular/core").OutputEmitterRef<SdQuery<any>>;
69
+ readonly apply: import("@angular/core").OutputEmitterRef<SdQuery<unknown>>;
70
+ /** Placeholder của ô tìm kiếm tự do bên trái. */
71
+ readonly searchPlaceholder: import("@angular/core").Signal<string>;
72
+ /** Tooltip nút "+" khi consumer chưa khai `fields`. */
73
+ readonly noFieldsLabel: import("@angular/core").Signal<string>;
74
+ /** Tooltip nút "+" ở trạng thái bình thường. */
75
+ readonly addFilterLabel: import("@angular/core").Signal<string>;
70
76
  /** Map of `field.key` → `SdQueryField` for fast lookup from filters[]. */
71
77
  readonly resolvedAutoId: import("@angular/core").Signal<string | undefined>;
72
78
  readonly resolvedFields: import("@angular/core").Signal<SdQueryField[]>;
@@ -96,13 +102,34 @@ export declare class SdQueryBar {
96
102
  * popover-mode chips read `multiple()` from the child popover directly.
97
103
  */
98
104
  multiple(op: Operator): boolean;
105
+ /**
106
+ * Stable track key of a filter row. Assigned lazily on first read.
107
+ *
108
+ * ⚠️ Hai ràng buộc với `filters`, đều là hợp đồng của consumer:
109
+ *
110
+ * 1. KHÔNG được chứa cùng một object `Filter` ở hai vị trí. Khoá theo identity nên hai vị trí sẽ
111
+ * cho hai track key trùng nhau và Angular ném NG0955. Đã thử khử trùng bằng hậu tố `$index`
112
+ * và HỎNG: Angular đánh giá biểu thức `track` trên CẢ collection cũ khi diff, nên một filter
113
+ * vừa bị xoá cho `indexOf === -1`, key đổi, và MỌI chip bị huỷ rồi dựng lại. Để Angular báo
114
+ * NG0955 là đúng — thông điệp của nó đã chỉ rõ vấn đề.
115
+ * 2. Object phải ỔN ĐỊNH giữa các lần change detection. Sinh lại object mới mỗi pass
116
+ * (vd `[option]="{ filters: buildFilters() }"`) sẽ khiến mọi chip nhận id mới mỗi pass và bị
117
+ * huỷ + dựng lại — tệ hơn cả `track $index` cũ.
118
+ */
119
+ rowId(filter: Filter): string;
99
120
  readonly iconFor: typeof sdQueryFieldIcon;
100
121
  /** Chip is "active" when it has a non-empty value OR a no-data operator (NULL/NOT_NULL). */
101
122
  isFilterActive(filter: Filter): boolean;
102
123
  /** Rendered value text on a chip. */
103
124
  chipValueText(filter: Filter): string;
104
125
  isNoDataOperator(op: Operator | string): boolean;
105
- readonly building: import("@angular/core").Signal<BuildingChip<any> | null>;
126
+ readonly building: import("@angular/core").Signal<BuildingChip<unknown> | null>;
127
+ /**
128
+ * Allowed operators of `field` — safe to call from a template binding: `sdQueryAllowedOperators`
129
+ * memo hoá theo object field nên ref trả về ổn định giữa các chu kỳ CD.
130
+ * why: `<sd-query-build-chip [allowedOperators]>` là OnPush; ref mới mỗi CD sẽ dirty child liên
131
+ * tục (bug class cấp-phát-mỗi-CD).
132
+ */
106
133
  allowedOperatorsFor(field: SdQueryField): Operator[];
107
134
  inlineAutoId(index: number, role: string): string;
108
135
  /** Entry point from the field picker — start building a chip for `field`. */
@@ -2,7 +2,7 @@ import { Signal } from '@angular/core';
2
2
  import { SdSearch } from '@sdcorejs/angular/forms/models';
3
3
  import { Filter, NestedKeyOf, Operator } from '@sdcorejs/utils/models';
4
4
  export type SdQueryFieldType = 'string' | 'number' | 'boolean' | 'date' | 'datetime' | 'values' | 'lazy-values';
5
- interface SdQueryFieldBase<T = any> {
5
+ interface SdQueryFieldBase<T = unknown> {
6
6
  /** Dot-notation field path (matches `Filter.field`). */
7
7
  key: NestedKeyOf<T>;
8
8
  /** Human-readable label shown on chip + field picker. */
@@ -27,10 +27,10 @@ interface SdQueryFieldBase<T = any> {
27
27
  /** Field is offered in picker but not interactive (read-only badge in chip). */
28
28
  disabled?: boolean;
29
29
  }
30
- export interface SdQueryFieldString<T = any> extends SdQueryFieldBase<T> {
30
+ export interface SdQueryFieldString<T = unknown> extends SdQueryFieldBase<T> {
31
31
  type: 'string';
32
32
  }
33
- export interface SdQueryFieldNumber<T = any> extends SdQueryFieldBase<T> {
33
+ export interface SdQueryFieldNumber<T = unknown> extends SdQueryFieldBase<T> {
34
34
  type: 'number';
35
35
  /** Bounds for the input control inside the chip popover. */
36
36
  min?: number;
@@ -38,13 +38,13 @@ export interface SdQueryFieldNumber<T = any> extends SdQueryFieldBase<T> {
38
38
  /** Step for the number input. */
39
39
  step?: number;
40
40
  }
41
- export interface SdQueryFieldBoolean<T = any> extends SdQueryFieldBase<T> {
41
+ export interface SdQueryFieldBoolean<T = unknown> extends SdQueryFieldBase<T> {
42
42
  type: 'boolean';
43
43
  /** Labels rendered for the true/false buttons. Default: "Có" / "Không". */
44
44
  trueLabel?: string;
45
45
  falseLabel?: string;
46
46
  }
47
- export interface SdQueryFieldDate<T = any> extends SdQueryFieldBase<T> {
47
+ export interface SdQueryFieldDate<T = unknown> extends SdQueryFieldBase<T> {
48
48
  type: 'date' | 'datetime';
49
49
  /** Restrict the picker calendar to this range. */
50
50
  min?: Date | string;
@@ -54,7 +54,7 @@ export interface SdQueryFieldDate<T = any> extends SdQueryFieldBase<T> {
54
54
  * Statically-known options (sync array, signal, or one-shot promise).
55
55
  * Mirrors `SdTableColumnValues.option`.
56
56
  */
57
- export interface SdQueryFieldValues<T = any, K = Record<string, any>> extends SdQueryFieldBase<T> {
57
+ export interface SdQueryFieldValues<T = unknown, K = Record<string, any>> extends SdQueryFieldBase<T> {
58
58
  type: 'values';
59
59
  option: {
60
60
  items: K[] | Signal<K[]> | (() => Promise<K[]>);
@@ -68,7 +68,7 @@ export interface SdQueryFieldValues<T = any, K = Record<string, any>> extends Sd
68
68
  * `{ type: 'SEARCH', searchText }` for live queries and `{ type: 'VALUE', value }` for
69
69
  * resolving chip-display labels of already-selected IDs.
70
70
  */
71
- export interface SdQueryFieldLazyValues<T = any, K = Record<string, any>> extends SdQueryFieldBase<T> {
71
+ export interface SdQueryFieldLazyValues<T = unknown, K = Record<string, any>> extends SdQueryFieldBase<T> {
72
72
  type: 'lazy-values';
73
73
  option: {
74
74
  search: SdSearch<K>;
@@ -76,16 +76,16 @@ export interface SdQueryFieldLazyValues<T = any, K = Record<string, any>> extend
76
76
  displayField: NestedKeyOf<K>;
77
77
  };
78
78
  }
79
- export type SdQueryField<T = any> = SdQueryFieldString<T> | SdQueryFieldNumber<T> | SdQueryFieldBoolean<T> | SdQueryFieldDate<T> | SdQueryFieldValues<T> | SdQueryFieldLazyValues<T>;
79
+ export type SdQueryField<T = unknown> = SdQueryFieldString<T> | SdQueryFieldNumber<T> | SdQueryFieldBoolean<T> | SdQueryFieldDate<T> | SdQueryFieldValues<T> | SdQueryFieldLazyValues<T>;
80
80
  export type SdQueryLogic = 'AND' | 'OR';
81
- export interface SdQuery<T = any> {
81
+ export interface SdQuery<T = unknown> {
82
82
  filters: Filter<T>[];
83
83
  /** Global connector between filters. Defaults to `'AND'`. */
84
84
  logic?: SdQueryLogic;
85
85
  /** Free-text search box (only present when `showSearch=true`). */
86
86
  search?: string;
87
87
  }
88
- export interface SdQueryBarOption<T = any> {
88
+ export interface SdQueryBarOption<T = unknown> {
89
89
  /** Prefix for auto-generated `data-autoid` on inner controls. */
90
90
  autoId?: string;
91
91
  /** Available fields the user can filter by. */
@@ -108,7 +108,7 @@ export interface SdQueryBarOption<T = any> {
108
108
  onApply?: (query: SdQuery<T>) => void;
109
109
  }
110
110
  /** Persisted bookmark of a query (filters + logic + search) — managed by `[savedFiltersKey]`. */
111
- export interface SdSavedFilter<T = any> {
111
+ export interface SdSavedFilter<T = unknown> {
112
112
  id: string;
113
113
  name: string;
114
114
  query: SdQuery<T>;
@@ -120,7 +120,7 @@ export interface SdSavedFilter<T = any> {
120
120
  * - 'operator' — operator menu open, waiting for the user to pick a condition
121
121
  * - 'value' — operator locked, value picker / seamless input is the focus
122
122
  */
123
- export interface BuildingChip<T = any> {
123
+ export interface BuildingChip<T = unknown> {
124
124
  field: SdQueryField<T>;
125
125
  operator?: Operator;
126
126
  step: 'operator' | 'value';
@@ -148,6 +148,9 @@ export declare function sdQueryDefaultOperator(field: SdQueryField): Operator;
148
148
  * - `operators === true` → full set for the type
149
149
  * - `operators` is an array → that array (deduped against the type set is the caller's job)
150
150
  * - otherwise (simple mode) → just the single default operator (no real choice)
151
+ *
152
+ * The returned array is referentially stable for a given `field` object, so it is safe to call
153
+ * straight from a template binding.
151
154
  */
152
155
  export declare function sdQueryAllowedOperators(field: SdQueryField): Operator[];
153
156
  /**