@sdcorejs/angular 19.1.6 → 19.2.0

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 (354) 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/badge/src/badge.component.d.ts +1 -0
  7. package/components/ckeditor-styles/src/ckeditor-styles.component.d.ts +1 -1
  8. package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +2 -1
  9. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +3 -1
  10. package/components/form-generic/src/components/form-render/components/item/components/checkbox/checkbox.component.d.ts +34 -0
  11. package/components/form-generic/src/components/form-render/components/item/components/index.d.ts +1 -0
  12. package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +6 -1
  13. package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
  14. package/components/form-generic/src/configurations/form.configuration.d.ts +1 -1
  15. package/components/form-generic/src/models/form-generic-component.model.d.ts +8 -8
  16. package/components/form-generic/src/models/form-generic-definition-selection.model.d.ts +5 -5
  17. package/components/form-generic/src/models/form-generic-expression.model.d.ts +12 -12
  18. package/components/form-generic/src/models/index.d.ts +1 -0
  19. package/components/form-generic/src/services/form-generic.service.d.ts +2 -2
  20. package/components/import-excel/src/import-excel.component.d.ts +1 -0
  21. package/components/index.d.ts +6 -1
  22. package/components/mini-editor/src/mini-editor.model.d.ts +1 -1
  23. package/components/modal/src/modal.component.d.ts +3 -2
  24. package/components/modal-resizable/src/modal-resizable.component.d.ts +92 -0
  25. package/components/modal-resizable/src/modal-resizable.registry.d.ts +22 -0
  26. package/components/org-chart/src/org-chart.component.d.ts +6 -0
  27. package/components/preview/src/preview-image/preview-image.component.d.ts +1 -0
  28. package/components/query-bar/src/components/actions-bar/actions-bar.component.d.ts +6 -2
  29. package/components/query-bar/src/components/build-chip/build-chip.component.d.ts +4 -1
  30. package/components/query-bar/src/components/chip-popover/chip-popover.component.d.ts +8 -0
  31. package/components/query-bar/src/components/field-picker/field-picker.component.d.ts +2 -0
  32. package/components/query-bar/src/components/inline-chip/inline-chip.component.d.ts +2 -0
  33. package/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.d.ts +3 -3
  34. package/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.d.ts +9 -4
  35. package/components/query-bar/src/query-bar.component.d.ts +32 -5
  36. package/components/query-bar/src/query-bar.model.d.ts +15 -12
  37. package/components/query-builder/src/query-builder.component.d.ts +76 -39
  38. package/components/query-builder/src/query-builder.model.d.ts +59 -52
  39. package/components/query-builder/src/query-builder.serializer.d.ts +15 -6
  40. package/components/section/src/section.component.d.ts +3 -0
  41. package/components/side-drawer/src/body-scroll-lock.service.d.ts +10 -0
  42. package/components/splitter/src/splitter-handle/splitter-handle.component.d.ts +1 -0
  43. package/components/tab-router/index.d.ts +2 -1
  44. package/components/tab-router/src/actions/tab-router.action.d.ts +2 -2
  45. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +2 -2
  46. package/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.d.ts +3 -3
  47. package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +3 -3
  48. package/components/tab-router/src/decorators/tab.decorator.d.ts +13 -1
  49. package/components/tab-router/src/events/tab-router.event.d.ts +3 -3
  50. package/components/tab-router/src/models/tab-router.model.d.ts +2 -2
  51. package/components/tab-router/src/pipes/tab-info.pipe.d.ts +2 -2
  52. package/components/tab-router/src/services/tab-router.service.d.ts +9 -9
  53. package/components/table/index.d.ts +1 -0
  54. package/components/table/src/components/config/config.component.d.ts +6 -1
  55. package/components/table/src/components/desktop-cell/view/view.component.d.ts +1 -0
  56. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +1 -1
  57. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +1 -1
  58. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +8 -1
  59. package/components/table/src/components/selector-action/selector-action.component.d.ts +2 -0
  60. package/components/table/src/directives/index.d.ts +1 -0
  61. package/components/table/src/directives/sd-table-command-header-def.directive.d.ts +24 -0
  62. package/components/table/src/models/table-column.model.d.ts +30 -13
  63. package/components/table/src/models/table-item.model.d.ts +30 -1
  64. package/components/table/src/models/table-option-selector.model.d.ts +5 -4
  65. package/components/table/src/models/table-option.model.d.ts +12 -0
  66. package/components/table/src/pipes/sd-group.pipe.d.ts +6 -2
  67. package/components/table/src/services/table-filter/table-filter.model.d.ts +15 -15
  68. package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
  69. package/components/table/src/services/table-format/table-format.service.d.ts +1 -1
  70. package/components/table/src/services/table-selection/selection-action.util.d.ts +24 -0
  71. package/components/table/src/services/table-selection/table-selection.util.d.ts +31 -0
  72. package/components/table/src/services/tree/tree.util.d.ts +3 -2
  73. package/components/table/src/table.component.d.ts +51 -5
  74. package/components/tree/src/tree-item-def.directive.d.ts +1 -1
  75. package/components/tree/src/tree.component.d.ts +16 -4
  76. package/components/tree/src/tree.model.d.ts +31 -25
  77. package/components/upload-file/src/configurations/upload-file.configuration.d.ts +2 -2
  78. package/components/upload-file/src/upload-file.component.d.ts +4 -1
  79. package/configurations/src/sd-core.configuration.d.ts +1 -2
  80. package/fesm2022/sdcorejs-angular-components-anchor.mjs +36 -12
  81. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  82. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +2 -2
  83. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  84. package/fesm2022/sdcorejs-angular-components-badge.mjs +15 -2
  85. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  86. package/fesm2022/sdcorejs-angular-components-button.mjs +2 -2
  87. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  88. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +1 -1
  89. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  90. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +3 -3
  91. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  92. package/fesm2022/sdcorejs-angular-components-data-state.mjs +3 -3
  93. package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -1
  94. package/fesm2022/sdcorejs-angular-components-editor.mjs +2 -2
  95. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  96. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +324 -192
  97. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  98. package/fesm2022/sdcorejs-angular-components-history.mjs +4 -4
  99. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  100. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +13 -5
  101. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  102. package/fesm2022/sdcorejs-angular-components-inform.mjs +3 -3
  103. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  104. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +164 -8
  105. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  106. package/fesm2022/sdcorejs-angular-components-modal.mjs +30 -18
  107. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  108. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +60 -13
  109. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  110. package/fesm2022/sdcorejs-angular-components-preview.mjs +27 -17
  111. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  112. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +192 -30
  113. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  114. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +187 -127
  115. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  116. package/fesm2022/sdcorejs-angular-components-section.mjs +16 -2
  117. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  118. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +83 -24
  119. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  120. package/fesm2022/sdcorejs-angular-components-splitter.mjs +57 -21
  121. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  122. package/fesm2022/sdcorejs-angular-components-stepper.mjs +2 -2
  123. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  124. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +68 -20
  125. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  126. package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -2
  127. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  128. package/fesm2022/sdcorejs-angular-components-table.mjs +541 -254
  129. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  130. package/fesm2022/sdcorejs-angular-components-tree.mjs +80 -17
  131. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  132. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +48 -13
  133. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  134. package/fesm2022/sdcorejs-angular-components.mjs +6 -1
  135. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  136. package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
  137. package/fesm2022/sdcorejs-angular-directives.mjs +45 -8
  138. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  139. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +40 -29
  140. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  141. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +5 -5
  142. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  143. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +67 -50
  144. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  145. package/fesm2022/sdcorejs-angular-forms-chip.mjs +57 -43
  146. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  147. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +231 -60
  148. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  149. package/fesm2022/sdcorejs-angular-forms-date.mjs +95 -23
  150. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  151. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +130 -26
  152. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  153. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +39 -15
  154. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -1
  155. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +16 -5
  156. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  157. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +24 -9
  158. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  159. package/fesm2022/sdcorejs-angular-forms-input.mjs +58 -10
  160. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  161. package/fesm2022/sdcorejs-angular-forms-models.mjs +227 -6
  162. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  163. package/fesm2022/sdcorejs-angular-forms-radio.mjs +4 -4
  164. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  165. package/fesm2022/sdcorejs-angular-forms-select.mjs +135 -37
  166. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  167. package/fesm2022/sdcorejs-angular-forms-switch.mjs +18 -3
  168. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  169. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +51 -62
  170. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  171. package/fesm2022/sdcorejs-angular-forms-time-range.mjs +57 -12
  172. package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -1
  173. package/fesm2022/sdcorejs-angular-forms-time.mjs +16 -5
  174. package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -1
  175. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +100 -9
  176. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -1
  177. package/fesm2022/sdcorejs-angular-forms.mjs +91 -46
  178. package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
  179. package/fesm2022/sdcorejs-angular-handlers.mjs +18 -3
  180. package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
  181. package/fesm2022/sdcorejs-angular-i18n.mjs +490 -68
  182. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  183. package/fesm2022/sdcorejs-angular-interceptors.mjs +87 -29
  184. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  185. package/fesm2022/sdcorejs-angular-modules-auth.mjs +25 -15
  186. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  187. package/fesm2022/sdcorejs-angular-modules-icon.mjs +2 -2
  188. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  189. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +32 -3
  190. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
  191. package/fesm2022/sdcorejs-angular-modules-layout.mjs +332 -111
  192. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  193. package/fesm2022/sdcorejs-angular-modules-permission.mjs +177 -40
  194. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  195. package/fesm2022/sdcorejs-angular-pipes.mjs +62 -28
  196. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  197. package/fesm2022/sdcorejs-angular-services-api.mjs +123 -13
  198. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  199. package/fesm2022/sdcorejs-angular-services-cache.mjs +53 -3
  200. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  201. package/fesm2022/sdcorejs-angular-services-confirm.mjs +25 -73
  202. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  203. package/fesm2022/sdcorejs-angular-services-excel.mjs +12 -10
  204. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  205. package/fesm2022/sdcorejs-angular-services-loading.mjs +75 -84
  206. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  207. package/fesm2022/sdcorejs-angular-services-notify.mjs +46 -5
  208. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  209. package/fesm2022/sdcorejs-angular-services-storage.mjs +4 -0
  210. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  211. package/fesm2022/sdcorejs-angular-services.mjs +0 -1
  212. package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
  213. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +225 -80
  214. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
  215. package/fesm2022/sdcorejs-angular-utilities-models.mjs +1 -63
  216. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  217. package/fesm2022/sdcorejs-angular.mjs +17 -10
  218. package/fesm2022/sdcorejs-angular.mjs.map +1 -1
  219. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -2
  220. package/forms/chip-calendar/src/chip-calendar.component.d.ts +10 -0
  221. package/forms/date/src/date.component.d.ts +13 -2
  222. package/forms/date-range/src/date-range.component.d.ts +13 -2
  223. package/forms/datetime/src/datetime.component.d.ts +13 -2
  224. package/forms/entity-picker/src/entity-picker.component.d.ts +9 -3
  225. package/forms/input/src/input.component.d.ts +3 -0
  226. package/forms/input-color/src/input-color.component.d.ts +4 -0
  227. package/forms/input-number/src/input-number.component.d.ts +3 -0
  228. package/forms/models/index.d.ts +3 -0
  229. package/forms/models/src/sd-form-control-connector.d.ts +12 -0
  230. package/forms/models/src/sd-model-facing-control.d.ts +43 -0
  231. package/forms/models/src/sd-search.model.d.ts +1 -1
  232. package/forms/models/src/sd-selection-data.model.d.ts +1 -1
  233. package/forms/models/src/sd-temporal-transform.d.ts +31 -0
  234. package/forms/models/src/sd-timer-scope.d.ts +29 -0
  235. package/forms/select/src/select.component.d.ts +27 -4
  236. package/forms/src/forms.module.d.ts +22 -13
  237. package/forms/switch/src/switch.component.d.ts +5 -0
  238. package/forms/textarea/src/textarea.component.d.ts +5 -3
  239. package/forms/time-range/src/time-range.component.d.ts +22 -1
  240. package/forms/tree-select/src/tree-select.component.d.ts +36 -5
  241. package/i18n/src/en.d.ts +90 -10
  242. package/i18n/src/i18n.messages.d.ts +1 -1
  243. package/i18n/src/i18n.pipe.d.ts +3 -3
  244. package/i18n/src/i18n.service.d.ts +2 -1
  245. package/i18n/src/i18n.types.d.ts +0 -3
  246. package/interceptors/no-internet/no-internet.interceptor.d.ts +11 -1
  247. package/modules/auth/services/auth.model.d.ts +1 -1
  248. package/modules/keycloak/keycloak.service.d.ts +1 -0
  249. package/modules/layout/components/shared/menu-tree/menu-tree.component.d.ts +2 -0
  250. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +3 -3
  251. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +3 -3
  252. package/modules/layout/components/sidebar-mobile-v2/main.component.d.ts +3 -3
  253. package/modules/layout/components/sidebar-mobile-v3/main.component.d.ts +3 -3
  254. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +8 -3
  255. package/modules/layout/components/sidebar-v1/main.component.d.ts +3 -3
  256. package/modules/layout/components/sidebar-v2/main.component.d.ts +3 -3
  257. package/modules/layout/components/sidebar-v3/main.component.d.ts +3 -3
  258. package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +5 -0
  259. package/modules/layout/modules/not-found/pages/root/root.component.d.ts +5 -0
  260. package/modules/layout/services/layout.service.d.ts +21 -0
  261. package/modules/layout/services/storage/storage.service.d.ts +52 -7
  262. package/modules/permission/src/configurations/permission.configuration.d.ts +11 -0
  263. package/modules/permission/src/directives/permission.directive.d.ts +2 -1
  264. package/modules/permission/src/services/permission.service.d.ts +52 -1
  265. package/package.json +40 -33
  266. package/pipes/src/safe-html.pipe.d.ts +26 -4
  267. package/pipes/src/time-different.pipe.d.ts +1 -0
  268. package/public-api.d.ts +11 -10
  269. package/services/api/src/api-host.d.ts +15 -0
  270. package/services/api/src/api.model.d.ts +14 -0
  271. package/services/api/src/api.module.d.ts +6 -0
  272. package/services/cache/src/cache.model.d.ts +10 -0
  273. package/services/index.d.ts +0 -1
  274. package/services/notify/index.d.ts +1 -1
  275. package/utilities/extensions/index.d.ts +1 -5
  276. package/utilities/extensions/src/url-safety.d.ts +72 -0
  277. package/utilities/extensions/src/utility.extension.d.ts +9 -5
  278. package/utilities/models/index.d.ts +0 -10
  279. package/components/base/index.d.ts +0 -1
  280. package/components/base/src/base-secure.component.d.ts +0 -8
  281. package/components/document-builder/index.d.ts +0 -4
  282. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +0 -15
  283. package/components/document-builder/src/components/header-footer-builder/plugins/page-number.plugin.d.ts +0 -4
  284. package/components/document-builder/src/components/index.d.ts +0 -1
  285. package/components/document-builder/src/document-builder.component.d.ts +0 -53
  286. package/components/document-builder/src/document-builder.config.d.ts +0 -21
  287. package/components/document-builder/src/document-builder.model.d.ts +0 -41
  288. package/components/document-builder/src/document-builder.utils.d.ts +0 -10
  289. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +0 -9
  290. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +0 -44
  291. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +0 -57
  292. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +0 -5
  293. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +0 -4
  294. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +0 -31
  295. package/components/document-builder/src/plugins/image-upload/image-upload.plugin.d.ts +0 -5
  296. package/components/document-builder/src/plugins/index.d.ts +0 -11
  297. package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +0 -24
  298. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +0 -14
  299. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +0 -15
  300. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +0 -25
  301. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +0 -29
  302. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +0 -35
  303. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +0 -15
  304. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +0 -15
  305. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +0 -15
  306. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +0 -15
  307. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +0 -15
  308. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +0 -15
  309. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +0 -54
  310. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +0 -27
  311. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +0 -16
  312. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +0 -25
  313. package/components/document-builder/src/plugins/paste-handler/index.d.ts +0 -35
  314. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +0 -31
  315. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +0 -31
  316. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +0 -29
  317. package/components/document-builder/src/plugins/paste-handler/types.d.ts +0 -30
  318. package/components/document-builder/src/plugins/table-custom/index.d.ts +0 -34
  319. package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +0 -51
  320. package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts +0 -9
  321. package/fesm2022/sdcorejs-angular-components-base.mjs +0 -23
  322. package/fesm2022/sdcorejs-angular-components-base.mjs.map +0 -1
  323. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +0 -5038
  324. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +0 -1
  325. package/fesm2022/sdcorejs-angular-models.mjs +0 -6
  326. package/fesm2022/sdcorejs-angular-models.mjs.map +0 -1
  327. package/fesm2022/sdcorejs-angular-services-docx.mjs +0 -291
  328. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +0 -1
  329. package/fesm2022/sdcorejs-angular-services-license.mjs +0 -97
  330. package/fesm2022/sdcorejs-angular-services-license.mjs.map +0 -1
  331. package/models/index.d.ts +0 -1
  332. package/models/src/language.model.d.ts +0 -2
  333. package/services/docx/index.d.ts +0 -1
  334. package/services/docx/src/lib/docx.model.d.ts +0 -9
  335. package/services/docx/src/lib/docx.service.d.ts +0 -14
  336. package/services/docx/src/lib/pandoc-core.d.ts +0 -11
  337. package/services/docx/src/public-api.d.ts +0 -2
  338. package/services/license/index.d.ts +0 -1
  339. package/services/license/src/license.service.d.ts +0 -9
  340. package/utilities/extensions/src/array.extension.d.ts +0 -1
  341. package/utilities/extensions/src/color.extension.d.ts +0 -5
  342. package/utilities/extensions/src/date.extension.d.ts +0 -1
  343. package/utilities/extensions/src/number.extension.d.ts +0 -1
  344. package/utilities/extensions/src/string.extension.d.ts +0 -50
  345. package/utilities/models/src/color.model.d.ts +0 -4
  346. package/utilities/models/src/empty.model.d.ts +0 -4
  347. package/utilities/models/src/filter.model.d.ts +0 -12
  348. package/utilities/models/src/maybe-async.model.d.ts +0 -10
  349. package/utilities/models/src/nested-key-of.model.d.ts +0 -4
  350. package/utilities/models/src/operator.model.d.ts +0 -13
  351. package/utilities/models/src/order.model.d.ts +0 -4
  352. package/utilities/models/src/paging.model.d.ts +0 -8
  353. package/utilities/models/src/pattern.model.d.ts +0 -21
  354. package/utilities/models/src/size.model.d.ts +0 -4
@@ -2,7 +2,7 @@ import * as i1 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Directive, input, booleanAttribute, output, signal, viewChild, contentChild, computed, afterNextRender, effect, ChangeDetectionStrategy, Component } from '@angular/core';
5
- import { TranslatePipe } from '@sdcorejs/angular/i18n';
5
+ import { SdTranslatePipe } from '@sdcorejs/angular/i18n';
6
6
  import { SdIcon } from '@sdcorejs/angular/modules/icon';
7
7
 
8
8
  /**
@@ -164,11 +164,11 @@ class SdInform {
164
164
  this.sdAction.emit(event);
165
165
  }
166
166
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdInform, deps: [], target: i0.ɵɵFactoryTarget.Component });
167
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdInform, isStandalone: true, selector: "sd-inform", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, primary: { classPropertyName: "primary", publicName: "primary", isSignal: true, isRequired: false, transformFunction: null }, secondary: { classPropertyName: "secondary", publicName: "secondary", isSignal: true, isRequired: false, transformFunction: null }, info: { classPropertyName: "info", publicName: "info", isSignal: true, isRequired: false, transformFunction: null }, success: { classPropertyName: "success", publicName: "success", isSignal: true, isRequired: false, transformFunction: null }, warning: { classPropertyName: "warning", publicName: "warning", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, hideIcon: { classPropertyName: "hideIcon", publicName: "hideIcon", isSignal: true, isRequired: false, transformFunction: null }, fontSet: { classPropertyName: "fontSet", publicName: "fontSet", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, lineClamp: { classPropertyName: "lineClamp", publicName: "lineClamp", isSignal: true, isRequired: false, transformFunction: null }, autoId: { classPropertyName: "autoId", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sdClosed: "sdClosed", sdAction: "sdAction" }, queries: [{ propertyName: "actionSlot", first: true, predicate: SdInformActionDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "bodyRef", first: true, predicate: ["body"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (!dismissed()) {\n @let _effectiveIcon = effectiveIcon();\n @let _fontSet = fontSet();\n <div\n class=\"c-inform\"\n [attr.role]=\"liveRole()\"\n [ngClass]=\"colorClasses()\"\n [attr.data-autoId]=\"autoId() || null\"\n [attr.data-autoid]=\"autoId() || null\">\n\n @if (_effectiveIcon) {\n <sd-icon class=\"c-inform-icon c-material-icon\" aria-hidden=\"true\" [fontSet]=\"_fontSet\" [name]=\"_effectiveIcon\"></sd-icon>\n }\n\n @let _actionLabel = actionLabel();\n <div class=\"c-inform-content\">\n @if (title(); as t) {\n <div class=\"c-inform-title\">{{ t }}</div>\n }\n @if (description(); as d) {\n <div\n #body\n class=\"c-inform-body\"\n [class.is-clamped]=\"clampLines() !== null\"\n [style.-webkit-line-clamp]=\"clampLines()\">\n {{ d }}\n </div>\n }\n @if (showToggle()) {\n <button type=\"button\" class=\"c-inform-toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded() ? 'core.component.inform.show-less' : 'core.component.inform.show-more') | translate }}\n </button>\n }\n\n @if (hasActionSlot()) {\n <div class=\"c-inform-action\">\n <ng-content select=\"[sdInformAction]\"></ng-content>\n </div>\n } @else if (_actionLabel) {\n <button type=\"button\" class=\"c-inform-action c-inform-action-link\" (click)=\"onAction($event)\">\n {{ _actionLabel }}\n </button>\n }\n </div>\n\n @if (closable()) {\n <button\n type=\"button\"\n class=\"c-inform-close\"\n [attr.aria-label]=\"'core.common.close' | translate\"\n (click)=\"onClose($event)\">\n <sd-icon aria-hidden=\"true\" name=\"close\"></sd-icon>\n </button>\n }\n </div>\n}\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-primary-contrast{color:var(--sd-primary-contrast)!important}.bg-primary-contrast{background:var(--sd-primary-contrast)!important}.border-primary-contrast{border-color:var(--sd-primary-contrast)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-secondary-contrast{color:var(--sd-secondary-contrast)!important}.bg-secondary-contrast{background:var(--sd-secondary-contrast)!important}.border-secondary-contrast{border-color:var(--sd-secondary-contrast)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-info-contrast{color:var(--sd-info-contrast)!important}.bg-info-contrast{background:var(--sd-info-contrast)!important}.border-info-contrast{border-color:var(--sd-info-contrast)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-success-contrast{color:var(--sd-success-contrast)!important}.bg-success-contrast{background:var(--sd-success-contrast)!important}.border-success-contrast{border-color:var(--sd-success-contrast)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-warning-contrast{color:var(--sd-warning-contrast)!important}.bg-warning-contrast{background:var(--sd-warning-contrast)!important}.border-warning-contrast{border-color:var(--sd-warning-contrast)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-error-contrast{color:var(--sd-error-contrast)!important}.bg-error-contrast{background:var(--sd-error-contrast)!important}.border-error-contrast{border-color:var(--sd-error-contrast)!important}.text-surface{color:var(--sd-surface)!important}.bg-surface{background:var(--sd-surface)!important}.border-surface{border-color:var(--sd-surface)!important}.text-surface-muted{color:var(--sd-surface-muted)!important}.bg-surface-muted{background:var(--sd-surface-muted)!important}.border-surface-muted{border-color:var(--sd-surface-muted)!important}.text-text{color:var(--sd-text)!important}.bg-text{background:var(--sd-text)!important}.border-text{border-color:var(--sd-text)!important}.text-text-secondary{color:var(--sd-text-secondary)!important}.bg-text-secondary{background:var(--sd-text-secondary)!important}.border-text-secondary{border-color:var(--sd-text-secondary)!important}.text-text-muted{color:var(--sd-text-muted)!important}.bg-text-muted{background:var(--sd-text-muted)!important}.border-text-muted{border-color:var(--sd-text-muted)!important}.text-border{color:var(--sd-border)!important}.bg-border{background:var(--sd-border)!important}.border-border{border-color:var(--sd-border)!important}.text-border-strong{color:var(--sd-border-strong)!important}.bg-border-strong{background:var(--sd-border-strong)!important}.border-border-strong{border-color:var(--sd-border-strong)!important}.text-disabled-bg{color:var(--sd-disabled-bg)!important}.bg-disabled-bg{background:var(--sd-disabled-bg)!important}.border-disabled-bg{border-color:var(--sd-disabled-bg)!important}.text-disabled-text{color:var(--sd-disabled-text)!important}.bg-disabled-text{background:var(--sd-disabled-text)!important}.border-disabled-text{border-color:var(--sd-disabled-text)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.text-secondary{color:var(--sd-text-secondary)!important}.text-muted{color:var(--sd-text-muted)!important}.text-body{color:var(--sd-text)!important}.bg-muted{background:var(--sd-surface-muted)!important}.c-inform{display:flex;align-items:flex-start;gap:12px;border:1px solid transparent;border-radius:8px;padding:12px 16px;background:#fff}.c-inform.c-primary{border-color:var(--sd-primary);background:var(--sd-primary-light)}.c-inform.c-primary .c-inform-icon,.c-inform.c-primary .c-inform-title{color:var(--sd-primary)}.c-inform.c-secondary{border-color:var(--sd-secondary);background:var(--sd-secondary-light)}.c-inform.c-secondary .c-inform-icon,.c-inform.c-secondary .c-inform-title{color:var(--sd-secondary)}.c-inform.c-info{border-color:var(--sd-info);background:var(--sd-info-light)}.c-inform.c-info .c-inform-icon,.c-inform.c-info .c-inform-title{color:var(--sd-info)}.c-inform.c-success{border-color:var(--sd-success);background:var(--sd-success-light)}.c-inform.c-success .c-inform-icon,.c-inform.c-success .c-inform-title{color:var(--sd-success)}.c-inform.c-warning{border-color:var(--sd-warning);background:var(--sd-warning-light)}.c-inform.c-warning .c-inform-icon,.c-inform.c-warning .c-inform-title{color:var(--sd-warning)}.c-inform.c-error{border-color:var(--sd-error);background:var(--sd-error-light)}.c-inform.c-error .c-inform-icon,.c-inform.c-error .c-inform-title{color:var(--sd-error)}.c-inform .c-inform-icon{flex:0 0 auto;width:20px;height:20px;font-size:20px;line-height:20px}.c-inform .c-inform-content{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.c-inform .c-inform-title{font-weight:600;font-size:14px;line-height:20px}.c-inform .c-inform-body{font-size:14px;line-height:20px;color:var(--sd-text);overflow-wrap:break-word}.c-inform .c-inform-body.is-clamped{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.c-inform .c-inform-toggle,.c-inform .c-inform-action-link{align-self:flex-start;margin-top:4px;padding:0;border:none;background:none;cursor:pointer;font-size:14px;line-height:20px}.c-inform .c-inform-toggle,.c-inform .c-inform-action-link{color:var(--sd-info)}.c-inform .c-inform-action-link:hover{text-decoration:underline}.c-inform .c-inform-close{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;padding:0;border:none;background:transparent;cursor:pointer;color:var(--sd-text-secondary);transition:background-color 80ms ease,color 80ms ease}.c-inform .c-inform-close:hover{background:#0000000f;color:var(--sd-error)}.c-inform .c-inform-close sd-icon{width:18px;height:18px;font-size:18px;line-height:18px}\n"], dependencies: [{ kind: "component", type: SdIcon, selector: "sd-icon", inputs: ["name", "fontIcon", "color", "set", "fontSet", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
167
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdInform, isStandalone: true, selector: "sd-inform", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, primary: { classPropertyName: "primary", publicName: "primary", isSignal: true, isRequired: false, transformFunction: null }, secondary: { classPropertyName: "secondary", publicName: "secondary", isSignal: true, isRequired: false, transformFunction: null }, info: { classPropertyName: "info", publicName: "info", isSignal: true, isRequired: false, transformFunction: null }, success: { classPropertyName: "success", publicName: "success", isSignal: true, isRequired: false, transformFunction: null }, warning: { classPropertyName: "warning", publicName: "warning", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, hideIcon: { classPropertyName: "hideIcon", publicName: "hideIcon", isSignal: true, isRequired: false, transformFunction: null }, fontSet: { classPropertyName: "fontSet", publicName: "fontSet", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null }, lineClamp: { classPropertyName: "lineClamp", publicName: "lineClamp", isSignal: true, isRequired: false, transformFunction: null }, autoId: { classPropertyName: "autoId", publicName: "autoId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sdClosed: "sdClosed", sdAction: "sdAction" }, queries: [{ propertyName: "actionSlot", first: true, predicate: SdInformActionDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "bodyRef", first: true, predicate: ["body"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (!dismissed()) {\n @let _effectiveIcon = effectiveIcon();\n @let _fontSet = fontSet();\n <div\n class=\"c-inform\"\n [attr.role]=\"liveRole()\"\n [ngClass]=\"colorClasses()\"\n [attr.data-autoId]=\"autoId() || null\"\n [attr.data-autoid]=\"autoId() || null\">\n\n @if (_effectiveIcon) {\n <sd-icon class=\"c-inform-icon c-material-icon\" aria-hidden=\"true\" [fontSet]=\"_fontSet\" [name]=\"_effectiveIcon\"></sd-icon>\n }\n\n @let _actionLabel = actionLabel();\n <div class=\"c-inform-content\">\n @if (title(); as t) {\n <div class=\"c-inform-title\">{{ t }}</div>\n }\n @if (description(); as d) {\n <div\n #body\n class=\"c-inform-body\"\n [class.is-clamped]=\"clampLines() !== null\"\n [style.-webkit-line-clamp]=\"clampLines()\">\n {{ d }}\n </div>\n }\n @if (showToggle()) {\n <button type=\"button\" class=\"c-inform-toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded() ? 'core.component.inform.show-less' : 'core.component.inform.show-more') | sdTranslate }}\n </button>\n }\n\n @if (hasActionSlot()) {\n <div class=\"c-inform-action\">\n <ng-content select=\"[sdInformAction]\"></ng-content>\n </div>\n } @else if (_actionLabel) {\n <button type=\"button\" class=\"c-inform-action c-inform-action-link\" (click)=\"onAction($event)\">\n {{ _actionLabel }}\n </button>\n }\n </div>\n\n @if (closable()) {\n <button\n type=\"button\"\n class=\"c-inform-close\"\n [attr.aria-label]=\"'core.common.close' | sdTranslate\"\n (click)=\"onClose($event)\">\n <sd-icon aria-hidden=\"true\" name=\"close\"></sd-icon>\n </button>\n }\n </div>\n}\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-primary-contrast{color:var(--sd-primary-contrast)!important}.bg-primary-contrast{background:var(--sd-primary-contrast)!important}.border-primary-contrast{border-color:var(--sd-primary-contrast)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-secondary-contrast{color:var(--sd-secondary-contrast)!important}.bg-secondary-contrast{background:var(--sd-secondary-contrast)!important}.border-secondary-contrast{border-color:var(--sd-secondary-contrast)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-info-contrast{color:var(--sd-info-contrast)!important}.bg-info-contrast{background:var(--sd-info-contrast)!important}.border-info-contrast{border-color:var(--sd-info-contrast)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-success-contrast{color:var(--sd-success-contrast)!important}.bg-success-contrast{background:var(--sd-success-contrast)!important}.border-success-contrast{border-color:var(--sd-success-contrast)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-warning-contrast{color:var(--sd-warning-contrast)!important}.bg-warning-contrast{background:var(--sd-warning-contrast)!important}.border-warning-contrast{border-color:var(--sd-warning-contrast)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-error-contrast{color:var(--sd-error-contrast)!important}.bg-error-contrast{background:var(--sd-error-contrast)!important}.border-error-contrast{border-color:var(--sd-error-contrast)!important}.text-surface{color:var(--sd-surface)!important}.bg-surface{background:var(--sd-surface)!important}.border-surface{border-color:var(--sd-surface)!important}.text-surface-muted{color:var(--sd-surface-muted)!important}.bg-surface-muted{background:var(--sd-surface-muted)!important}.border-surface-muted{border-color:var(--sd-surface-muted)!important}.text-text{color:var(--sd-text)!important}.bg-text{background:var(--sd-text)!important}.border-text{border-color:var(--sd-text)!important}.text-text-secondary{color:var(--sd-text-secondary)!important}.bg-text-secondary{background:var(--sd-text-secondary)!important}.border-text-secondary{border-color:var(--sd-text-secondary)!important}.text-text-muted{color:var(--sd-text-muted)!important}.bg-text-muted{background:var(--sd-text-muted)!important}.border-text-muted{border-color:var(--sd-text-muted)!important}.text-border{color:var(--sd-border)!important}.bg-border{background:var(--sd-border)!important}.border-border{border-color:var(--sd-border)!important}.text-border-strong{color:var(--sd-border-strong)!important}.bg-border-strong{background:var(--sd-border-strong)!important}.border-border-strong{border-color:var(--sd-border-strong)!important}.text-disabled-bg{color:var(--sd-disabled-bg)!important}.bg-disabled-bg{background:var(--sd-disabled-bg)!important}.border-disabled-bg{border-color:var(--sd-disabled-bg)!important}.text-disabled-text{color:var(--sd-disabled-text)!important}.bg-disabled-text{background:var(--sd-disabled-text)!important}.border-disabled-text{border-color:var(--sd-disabled-text)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.text-secondary{color:var(--sd-text-secondary)!important}.text-muted{color:var(--sd-text-muted)!important}.text-body{color:var(--sd-text)!important}.bg-muted{background:var(--sd-surface-muted)!important}.c-inform{display:flex;align-items:flex-start;gap:12px;border:1px solid transparent;border-radius:8px;padding:12px 16px;background:#fff}.c-inform.c-primary{border-color:var(--sd-primary);background:var(--sd-primary-light)}.c-inform.c-primary .c-inform-icon,.c-inform.c-primary .c-inform-title{color:var(--sd-primary)}.c-inform.c-secondary{border-color:var(--sd-secondary);background:var(--sd-secondary-light)}.c-inform.c-secondary .c-inform-icon,.c-inform.c-secondary .c-inform-title{color:var(--sd-secondary)}.c-inform.c-info{border-color:var(--sd-info);background:var(--sd-info-light)}.c-inform.c-info .c-inform-icon,.c-inform.c-info .c-inform-title{color:var(--sd-info)}.c-inform.c-success{border-color:var(--sd-success);background:var(--sd-success-light)}.c-inform.c-success .c-inform-icon,.c-inform.c-success .c-inform-title{color:var(--sd-success)}.c-inform.c-warning{border-color:var(--sd-warning);background:var(--sd-warning-light)}.c-inform.c-warning .c-inform-icon,.c-inform.c-warning .c-inform-title{color:var(--sd-warning)}.c-inform.c-error{border-color:var(--sd-error);background:var(--sd-error-light)}.c-inform.c-error .c-inform-icon,.c-inform.c-error .c-inform-title{color:var(--sd-error)}.c-inform .c-inform-icon{flex:0 0 auto;width:20px;height:20px;font-size:20px;line-height:20px}.c-inform .c-inform-content{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.c-inform .c-inform-title{font-weight:600;font-size:14px;line-height:20px}.c-inform .c-inform-body{font-size:14px;line-height:20px;color:var(--sd-text);overflow-wrap:break-word}.c-inform .c-inform-body.is-clamped{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.c-inform .c-inform-toggle,.c-inform .c-inform-action-link{align-self:flex-start;margin-top:4px;padding:0;border:none;background:none;cursor:pointer;font-size:14px;line-height:20px}.c-inform .c-inform-toggle,.c-inform .c-inform-action-link{color:var(--sd-info)}.c-inform .c-inform-action-link:hover{text-decoration:underline}.c-inform .c-inform-close{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;padding:0;border:none;background:transparent;cursor:pointer;color:var(--sd-text-secondary);transition:background-color 80ms ease,color 80ms ease}.c-inform .c-inform-close:hover{background:#0000000f;color:var(--sd-error)}.c-inform .c-inform-close sd-icon{width:18px;height:18px;font-size:18px;line-height:18px}\n"], dependencies: [{ kind: "component", type: SdIcon, selector: "sd-icon", inputs: ["name", "fontIcon", "color", "set", "fontSet", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: SdTranslatePipe, name: "sdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
168
168
  }
169
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdInform, decorators: [{
170
170
  type: Component,
171
- args: [{ selector: 'sd-inform', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [SdIcon, CommonModule, TranslatePipe], template: "@if (!dismissed()) {\n @let _effectiveIcon = effectiveIcon();\n @let _fontSet = fontSet();\n <div\n class=\"c-inform\"\n [attr.role]=\"liveRole()\"\n [ngClass]=\"colorClasses()\"\n [attr.data-autoId]=\"autoId() || null\"\n [attr.data-autoid]=\"autoId() || null\">\n\n @if (_effectiveIcon) {\n <sd-icon class=\"c-inform-icon c-material-icon\" aria-hidden=\"true\" [fontSet]=\"_fontSet\" [name]=\"_effectiveIcon\"></sd-icon>\n }\n\n @let _actionLabel = actionLabel();\n <div class=\"c-inform-content\">\n @if (title(); as t) {\n <div class=\"c-inform-title\">{{ t }}</div>\n }\n @if (description(); as d) {\n <div\n #body\n class=\"c-inform-body\"\n [class.is-clamped]=\"clampLines() !== null\"\n [style.-webkit-line-clamp]=\"clampLines()\">\n {{ d }}\n </div>\n }\n @if (showToggle()) {\n <button type=\"button\" class=\"c-inform-toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded() ? 'core.component.inform.show-less' : 'core.component.inform.show-more') | translate }}\n </button>\n }\n\n @if (hasActionSlot()) {\n <div class=\"c-inform-action\">\n <ng-content select=\"[sdInformAction]\"></ng-content>\n </div>\n } @else if (_actionLabel) {\n <button type=\"button\" class=\"c-inform-action c-inform-action-link\" (click)=\"onAction($event)\">\n {{ _actionLabel }}\n </button>\n }\n </div>\n\n @if (closable()) {\n <button\n type=\"button\"\n class=\"c-inform-close\"\n [attr.aria-label]=\"'core.common.close' | translate\"\n (click)=\"onClose($event)\">\n <sd-icon aria-hidden=\"true\" name=\"close\"></sd-icon>\n </button>\n }\n </div>\n}\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-primary-contrast{color:var(--sd-primary-contrast)!important}.bg-primary-contrast{background:var(--sd-primary-contrast)!important}.border-primary-contrast{border-color:var(--sd-primary-contrast)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-secondary-contrast{color:var(--sd-secondary-contrast)!important}.bg-secondary-contrast{background:var(--sd-secondary-contrast)!important}.border-secondary-contrast{border-color:var(--sd-secondary-contrast)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-info-contrast{color:var(--sd-info-contrast)!important}.bg-info-contrast{background:var(--sd-info-contrast)!important}.border-info-contrast{border-color:var(--sd-info-contrast)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-success-contrast{color:var(--sd-success-contrast)!important}.bg-success-contrast{background:var(--sd-success-contrast)!important}.border-success-contrast{border-color:var(--sd-success-contrast)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-warning-contrast{color:var(--sd-warning-contrast)!important}.bg-warning-contrast{background:var(--sd-warning-contrast)!important}.border-warning-contrast{border-color:var(--sd-warning-contrast)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-error-contrast{color:var(--sd-error-contrast)!important}.bg-error-contrast{background:var(--sd-error-contrast)!important}.border-error-contrast{border-color:var(--sd-error-contrast)!important}.text-surface{color:var(--sd-surface)!important}.bg-surface{background:var(--sd-surface)!important}.border-surface{border-color:var(--sd-surface)!important}.text-surface-muted{color:var(--sd-surface-muted)!important}.bg-surface-muted{background:var(--sd-surface-muted)!important}.border-surface-muted{border-color:var(--sd-surface-muted)!important}.text-text{color:var(--sd-text)!important}.bg-text{background:var(--sd-text)!important}.border-text{border-color:var(--sd-text)!important}.text-text-secondary{color:var(--sd-text-secondary)!important}.bg-text-secondary{background:var(--sd-text-secondary)!important}.border-text-secondary{border-color:var(--sd-text-secondary)!important}.text-text-muted{color:var(--sd-text-muted)!important}.bg-text-muted{background:var(--sd-text-muted)!important}.border-text-muted{border-color:var(--sd-text-muted)!important}.text-border{color:var(--sd-border)!important}.bg-border{background:var(--sd-border)!important}.border-border{border-color:var(--sd-border)!important}.text-border-strong{color:var(--sd-border-strong)!important}.bg-border-strong{background:var(--sd-border-strong)!important}.border-border-strong{border-color:var(--sd-border-strong)!important}.text-disabled-bg{color:var(--sd-disabled-bg)!important}.bg-disabled-bg{background:var(--sd-disabled-bg)!important}.border-disabled-bg{border-color:var(--sd-disabled-bg)!important}.text-disabled-text{color:var(--sd-disabled-text)!important}.bg-disabled-text{background:var(--sd-disabled-text)!important}.border-disabled-text{border-color:var(--sd-disabled-text)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.text-secondary{color:var(--sd-text-secondary)!important}.text-muted{color:var(--sd-text-muted)!important}.text-body{color:var(--sd-text)!important}.bg-muted{background:var(--sd-surface-muted)!important}.c-inform{display:flex;align-items:flex-start;gap:12px;border:1px solid transparent;border-radius:8px;padding:12px 16px;background:#fff}.c-inform.c-primary{border-color:var(--sd-primary);background:var(--sd-primary-light)}.c-inform.c-primary .c-inform-icon,.c-inform.c-primary .c-inform-title{color:var(--sd-primary)}.c-inform.c-secondary{border-color:var(--sd-secondary);background:var(--sd-secondary-light)}.c-inform.c-secondary .c-inform-icon,.c-inform.c-secondary .c-inform-title{color:var(--sd-secondary)}.c-inform.c-info{border-color:var(--sd-info);background:var(--sd-info-light)}.c-inform.c-info .c-inform-icon,.c-inform.c-info .c-inform-title{color:var(--sd-info)}.c-inform.c-success{border-color:var(--sd-success);background:var(--sd-success-light)}.c-inform.c-success .c-inform-icon,.c-inform.c-success .c-inform-title{color:var(--sd-success)}.c-inform.c-warning{border-color:var(--sd-warning);background:var(--sd-warning-light)}.c-inform.c-warning .c-inform-icon,.c-inform.c-warning .c-inform-title{color:var(--sd-warning)}.c-inform.c-error{border-color:var(--sd-error);background:var(--sd-error-light)}.c-inform.c-error .c-inform-icon,.c-inform.c-error .c-inform-title{color:var(--sd-error)}.c-inform .c-inform-icon{flex:0 0 auto;width:20px;height:20px;font-size:20px;line-height:20px}.c-inform .c-inform-content{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.c-inform .c-inform-title{font-weight:600;font-size:14px;line-height:20px}.c-inform .c-inform-body{font-size:14px;line-height:20px;color:var(--sd-text);overflow-wrap:break-word}.c-inform .c-inform-body.is-clamped{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.c-inform .c-inform-toggle,.c-inform .c-inform-action-link{align-self:flex-start;margin-top:4px;padding:0;border:none;background:none;cursor:pointer;font-size:14px;line-height:20px}.c-inform .c-inform-toggle,.c-inform .c-inform-action-link{color:var(--sd-info)}.c-inform .c-inform-action-link:hover{text-decoration:underline}.c-inform .c-inform-close{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;padding:0;border:none;background:transparent;cursor:pointer;color:var(--sd-text-secondary);transition:background-color 80ms ease,color 80ms ease}.c-inform .c-inform-close:hover{background:#0000000f;color:var(--sd-error)}.c-inform .c-inform-close sd-icon{width:18px;height:18px;font-size:18px;line-height:18px}\n"] }]
171
+ args: [{ selector: 'sd-inform', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [SdIcon, CommonModule, SdTranslatePipe], template: "@if (!dismissed()) {\n @let _effectiveIcon = effectiveIcon();\n @let _fontSet = fontSet();\n <div\n class=\"c-inform\"\n [attr.role]=\"liveRole()\"\n [ngClass]=\"colorClasses()\"\n [attr.data-autoId]=\"autoId() || null\"\n [attr.data-autoid]=\"autoId() || null\">\n\n @if (_effectiveIcon) {\n <sd-icon class=\"c-inform-icon c-material-icon\" aria-hidden=\"true\" [fontSet]=\"_fontSet\" [name]=\"_effectiveIcon\"></sd-icon>\n }\n\n @let _actionLabel = actionLabel();\n <div class=\"c-inform-content\">\n @if (title(); as t) {\n <div class=\"c-inform-title\">{{ t }}</div>\n }\n @if (description(); as d) {\n <div\n #body\n class=\"c-inform-body\"\n [class.is-clamped]=\"clampLines() !== null\"\n [style.-webkit-line-clamp]=\"clampLines()\">\n {{ d }}\n </div>\n }\n @if (showToggle()) {\n <button type=\"button\" class=\"c-inform-toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded() ? 'core.component.inform.show-less' : 'core.component.inform.show-more') | sdTranslate }}\n </button>\n }\n\n @if (hasActionSlot()) {\n <div class=\"c-inform-action\">\n <ng-content select=\"[sdInformAction]\"></ng-content>\n </div>\n } @else if (_actionLabel) {\n <button type=\"button\" class=\"c-inform-action c-inform-action-link\" (click)=\"onAction($event)\">\n {{ _actionLabel }}\n </button>\n }\n </div>\n\n @if (closable()) {\n <button\n type=\"button\"\n class=\"c-inform-close\"\n [attr.aria-label]=\"'core.common.close' | sdTranslate\"\n (click)=\"onClose($event)\">\n <sd-icon aria-hidden=\"true\" name=\"close\"></sd-icon>\n </button>\n }\n </div>\n}\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-primary-contrast{color:var(--sd-primary-contrast)!important}.bg-primary-contrast{background:var(--sd-primary-contrast)!important}.border-primary-contrast{border-color:var(--sd-primary-contrast)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-secondary-contrast{color:var(--sd-secondary-contrast)!important}.bg-secondary-contrast{background:var(--sd-secondary-contrast)!important}.border-secondary-contrast{border-color:var(--sd-secondary-contrast)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-info-contrast{color:var(--sd-info-contrast)!important}.bg-info-contrast{background:var(--sd-info-contrast)!important}.border-info-contrast{border-color:var(--sd-info-contrast)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-success-contrast{color:var(--sd-success-contrast)!important}.bg-success-contrast{background:var(--sd-success-contrast)!important}.border-success-contrast{border-color:var(--sd-success-contrast)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-warning-contrast{color:var(--sd-warning-contrast)!important}.bg-warning-contrast{background:var(--sd-warning-contrast)!important}.border-warning-contrast{border-color:var(--sd-warning-contrast)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-error-contrast{color:var(--sd-error-contrast)!important}.bg-error-contrast{background:var(--sd-error-contrast)!important}.border-error-contrast{border-color:var(--sd-error-contrast)!important}.text-surface{color:var(--sd-surface)!important}.bg-surface{background:var(--sd-surface)!important}.border-surface{border-color:var(--sd-surface)!important}.text-surface-muted{color:var(--sd-surface-muted)!important}.bg-surface-muted{background:var(--sd-surface-muted)!important}.border-surface-muted{border-color:var(--sd-surface-muted)!important}.text-text{color:var(--sd-text)!important}.bg-text{background:var(--sd-text)!important}.border-text{border-color:var(--sd-text)!important}.text-text-secondary{color:var(--sd-text-secondary)!important}.bg-text-secondary{background:var(--sd-text-secondary)!important}.border-text-secondary{border-color:var(--sd-text-secondary)!important}.text-text-muted{color:var(--sd-text-muted)!important}.bg-text-muted{background:var(--sd-text-muted)!important}.border-text-muted{border-color:var(--sd-text-muted)!important}.text-border{color:var(--sd-border)!important}.bg-border{background:var(--sd-border)!important}.border-border{border-color:var(--sd-border)!important}.text-border-strong{color:var(--sd-border-strong)!important}.bg-border-strong{background:var(--sd-border-strong)!important}.border-border-strong{border-color:var(--sd-border-strong)!important}.text-disabled-bg{color:var(--sd-disabled-bg)!important}.bg-disabled-bg{background:var(--sd-disabled-bg)!important}.border-disabled-bg{border-color:var(--sd-disabled-bg)!important}.text-disabled-text{color:var(--sd-disabled-text)!important}.bg-disabled-text{background:var(--sd-disabled-text)!important}.border-disabled-text{border-color:var(--sd-disabled-text)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.text-secondary{color:var(--sd-text-secondary)!important}.text-muted{color:var(--sd-text-muted)!important}.text-body{color:var(--sd-text)!important}.bg-muted{background:var(--sd-surface-muted)!important}.c-inform{display:flex;align-items:flex-start;gap:12px;border:1px solid transparent;border-radius:8px;padding:12px 16px;background:#fff}.c-inform.c-primary{border-color:var(--sd-primary);background:var(--sd-primary-light)}.c-inform.c-primary .c-inform-icon,.c-inform.c-primary .c-inform-title{color:var(--sd-primary)}.c-inform.c-secondary{border-color:var(--sd-secondary);background:var(--sd-secondary-light)}.c-inform.c-secondary .c-inform-icon,.c-inform.c-secondary .c-inform-title{color:var(--sd-secondary)}.c-inform.c-info{border-color:var(--sd-info);background:var(--sd-info-light)}.c-inform.c-info .c-inform-icon,.c-inform.c-info .c-inform-title{color:var(--sd-info)}.c-inform.c-success{border-color:var(--sd-success);background:var(--sd-success-light)}.c-inform.c-success .c-inform-icon,.c-inform.c-success .c-inform-title{color:var(--sd-success)}.c-inform.c-warning{border-color:var(--sd-warning);background:var(--sd-warning-light)}.c-inform.c-warning .c-inform-icon,.c-inform.c-warning .c-inform-title{color:var(--sd-warning)}.c-inform.c-error{border-color:var(--sd-error);background:var(--sd-error-light)}.c-inform.c-error .c-inform-icon,.c-inform.c-error .c-inform-title{color:var(--sd-error)}.c-inform .c-inform-icon{flex:0 0 auto;width:20px;height:20px;font-size:20px;line-height:20px}.c-inform .c-inform-content{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.c-inform .c-inform-title{font-weight:600;font-size:14px;line-height:20px}.c-inform .c-inform-body{font-size:14px;line-height:20px;color:var(--sd-text);overflow-wrap:break-word}.c-inform .c-inform-body.is-clamped{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}.c-inform .c-inform-toggle,.c-inform .c-inform-action-link{align-self:flex-start;margin-top:4px;padding:0;border:none;background:none;cursor:pointer;font-size:14px;line-height:20px}.c-inform .c-inform-toggle,.c-inform .c-inform-action-link{color:var(--sd-info)}.c-inform .c-inform-action-link:hover{text-decoration:underline}.c-inform .c-inform-close{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;padding:0;border:none;background:transparent;cursor:pointer;color:var(--sd-text-secondary);transition:background-color 80ms ease,color 80ms ease}.c-inform .c-inform-close:hover{background:#0000000f;color:var(--sd-error)}.c-inform .c-inform-close sd-icon{width:18px;height:18px;font-size:18px;line-height:18px}\n"] }]
172
172
  }], ctorParameters: () => [] });
173
173
 
174
174
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-components-inform.mjs","sources":["../../../projects/sdcorejs-angular/components/inform/src/inform-action.directive.ts","../../../projects/sdcorejs-angular/components/inform/src/inform.component.ts","../../../projects/sdcorejs-angular/components/inform/src/inform.component.html","../../../projects/sdcorejs-angular/components/inform/sdcorejs-angular-components-inform.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * Marker cho vùng action custom chiếu vào <sd-inform>.\n * Khi có phần tử mang [sdInformAction], component ẩn link `actionLabel` mặc định.\n */\n@Directive({\n selector: '[sdInformAction]',\n standalone: true,\n})\nexport class SdInformActionDirective {}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Color } from '@sdcorejs/utils/models';\nimport { TranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdInformActionDirective } from './inform-action.directive';\nimport { SdIcon, type SdIconSet } from '@sdcorejs/angular/modules/icon';\n\n// why: mỗi color có icon trạng thái mặc định khi consumer không truyền [icon].\nconst SD_INFORM_DEFAULT_ICON: Record<Color, string> = {\n primary: 'info',\n secondary: 'info',\n info: 'info',\n success: 'check_circle',\n warning: 'warning',\n error: 'error',\n};\n\n@Component({\n selector: 'sd-inform',\n templateUrl: './inform.component.html',\n styleUrl: './inform.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [SdIcon, CommonModule, TranslatePipe],\n})\nexport class SdInform {\n // 1. INPUTS\n color = input<Color, Color | undefined | null>('primary', {\n transform: value => value || 'primary',\n });\n\n primary = input(false, { transform: booleanAttribute });\n secondary = input(false, { transform: booleanAttribute });\n info = input(false, { transform: booleanAttribute });\n success = input(false, { transform: booleanAttribute });\n warning = input(false, { transform: booleanAttribute });\n error = input(false, { transform: booleanAttribute });\n\n title = input<string | undefined>();\n description = input<string | undefined>();\n icon = input<string | undefined>();\n hideIcon = input(false, { transform: booleanAttribute });\n\n fontSet = input<SdIconSet | undefined, SdIconSet | undefined | null>(undefined, {\n transform: value => value ?? undefined,\n });\n\n closable = input(false, { transform: booleanAttribute });\n actionLabel = input<string | undefined>();\n lineClamp = input<number | undefined>();\n autoId = input<string | undefined>();\n\n // 2. OUTPUTS\n sdClosed = output<Event>();\n sdAction = output<Event>();\n\n // 3. STATE\n readonly dismissed = signal(false);\n readonly expanded = signal(false);\n readonly overflowing = signal(false);\n\n protected readonly bodyRef = viewChild<ElementRef<HTMLElement>>('body');\n protected readonly actionSlot = contentChild(SdInformActionDirective);\n\n // 4. COMPUTED\n effectiveColor = computed<Color>(() => {\n if (this.primary()) return 'primary';\n if (this.secondary()) return 'secondary';\n if (this.info()) return 'info';\n if (this.success()) return 'success';\n if (this.warning()) return 'warning';\n if (this.error()) return 'error';\n return this.color();\n });\n\n colorClasses = computed(() => {\n const c = this.effectiveColor();\n return {\n 'c-primary': c === 'primary',\n 'c-secondary': c === 'secondary',\n 'c-info': c === 'info',\n 'c-success': c === 'success',\n 'c-warning': c === 'warning',\n 'c-error': c === 'error',\n };\n });\n\n effectiveIcon = computed<string | null>(() => {\n if (this.hideIcon()) return null;\n return this.icon() || SD_INFORM_DEFAULT_ICON[this.effectiveColor()];\n });\n\n hasActionSlot = computed(() => !!this.actionSlot());\n\n // clamp dòng: null = không clamp (đầy đủ); số = số dòng tối đa.\n clampLines = computed<number | null>(() => {\n const n = this.lineClamp();\n if (!n || n <= 0) return null;\n return this.expanded() ? null : n;\n });\n\n // toggle hiện khi đang clamp và đã từng tràn, hoặc đang mở rộng (để còn thu gọn lại).\n showToggle = computed(() => {\n if (!this.lineClamp()) return false;\n return this.overflowing() || this.expanded();\n });\n\n // why: error/warning là cảnh báo → assertive 'alert'; các màu còn lại là thông tin → polite 'status'.\n liveRole = computed<'alert' | 'status'>(() => {\n const c = this.effectiveColor();\n return c === 'error' || c === 'warning' ? 'alert' : 'status';\n });\n\n // 5. OVERFLOW MEASUREMENT\n #measureScheduled = false;\n\n constructor() {\n // đo lần đầu sau render\n afterNextRender(() => this.measureOverflow());\n // why: re-đo khi nội dung/clamp/expanded đổi; đồng thời gắn ResizeObserver để bắt thay đổi kích thước container (responsive).\n effect(onCleanup => {\n this.description();\n this.lineClamp();\n this.expanded();\n const el = this.bodyRef()?.nativeElement;\n this.#scheduleMeasure();\n // why: guard instanceof Element để test stub (plain object) không làm ResizeObserver.observe ném lỗi.\n if (el instanceof Element && typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.measureOverflow());\n ro.observe(el);\n onCleanup(() => ro.disconnect());\n }\n });\n }\n\n #scheduleMeasure(): void {\n if (this.#measureScheduled) return;\n this.#measureScheduled = true;\n // gom nhiều thay đổi vào 1 lần đo sau khi DOM cập nhật xong\n queueMicrotask(() => {\n this.#measureScheduled = false;\n this.measureOverflow();\n });\n }\n\n /** Đo tràn dòng của body; chỉ có ý nghĩa khi đang clamp. */\n measureOverflow(): void {\n const el = this.bodyRef()?.nativeElement;\n if (!el || this.expanded() || !this.lineClamp()) return;\n // +1 chống sai số làm tròn sub-pixel\n this.overflowing.set(el.scrollHeight > el.clientHeight + 1);\n }\n\n // 6. HANDLERS\n toggleExpanded(): void {\n this.expanded.update(v => !v);\n }\n\n onClose(event: Event): void {\n event.stopPropagation();\n this.dismissed.set(true);\n this.sdClosed.emit(event);\n }\n\n onAction(event: Event): void {\n event.stopPropagation();\n this.sdAction.emit(event);\n }\n}\n","@if (!dismissed()) {\n @let _effectiveIcon = effectiveIcon();\n @let _fontSet = fontSet();\n <div\n class=\"c-inform\"\n [attr.role]=\"liveRole()\"\n [ngClass]=\"colorClasses()\"\n [attr.data-autoId]=\"autoId() || null\"\n [attr.data-autoid]=\"autoId() || null\">\n\n @if (_effectiveIcon) {\n <sd-icon class=\"c-inform-icon c-material-icon\" aria-hidden=\"true\" [fontSet]=\"_fontSet\" [name]=\"_effectiveIcon\"></sd-icon>\n }\n\n @let _actionLabel = actionLabel();\n <div class=\"c-inform-content\">\n @if (title(); as t) {\n <div class=\"c-inform-title\">{{ t }}</div>\n }\n @if (description(); as d) {\n <div\n #body\n class=\"c-inform-body\"\n [class.is-clamped]=\"clampLines() !== null\"\n [style.-webkit-line-clamp]=\"clampLines()\">\n {{ d }}\n </div>\n }\n @if (showToggle()) {\n <button type=\"button\" class=\"c-inform-toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded() ? 'core.component.inform.show-less' : 'core.component.inform.show-more') | translate }}\n </button>\n }\n\n @if (hasActionSlot()) {\n <div class=\"c-inform-action\">\n <ng-content select=\"[sdInformAction]\"></ng-content>\n </div>\n } @else if (_actionLabel) {\n <button type=\"button\" class=\"c-inform-action c-inform-action-link\" (click)=\"onAction($event)\">\n {{ _actionLabel }}\n </button>\n }\n </div>\n\n @if (closable()) {\n <button\n type=\"button\"\n class=\"c-inform-close\"\n [attr.aria-label]=\"'core.common.close' | translate\"\n (click)=\"onClose($event)\">\n <sd-icon aria-hidden=\"true\" name=\"close\"></sd-icon>\n </button>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdcorejs-angular-components-inform.mjs","sources":["../../../projects/sdcorejs-angular/components/inform/src/inform-action.directive.ts","../../../projects/sdcorejs-angular/components/inform/src/inform.component.ts","../../../projects/sdcorejs-angular/components/inform/src/inform.component.html","../../../projects/sdcorejs-angular/components/inform/sdcorejs-angular-components-inform.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * Marker cho vùng action custom chiếu vào <sd-inform>.\n * Khi có phần tử mang [sdInformAction], component ẩn link `actionLabel` mặc định.\n */\n@Directive({\n selector: '[sdInformAction]',\n standalone: true,\n})\nexport class SdInformActionDirective {}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Color } from '@sdcorejs/utils/models';\nimport { SdTranslatePipe } from '@sdcorejs/angular/i18n';\nimport { SdInformActionDirective } from './inform-action.directive';\nimport { SdIcon, type SdIconSet } from '@sdcorejs/angular/modules/icon';\n\n// why: mỗi color có icon trạng thái mặc định khi consumer không truyền [icon].\nconst SD_INFORM_DEFAULT_ICON: Record<Color, string> = {\n primary: 'info',\n secondary: 'info',\n info: 'info',\n success: 'check_circle',\n warning: 'warning',\n error: 'error',\n};\n\n@Component({\n selector: 'sd-inform',\n templateUrl: './inform.component.html',\n styleUrl: './inform.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [SdIcon, CommonModule, SdTranslatePipe],\n})\nexport class SdInform {\n // 1. INPUTS\n color = input<Color, Color | undefined | null>('primary', {\n transform: value => value || 'primary',\n });\n\n primary = input(false, { transform: booleanAttribute });\n secondary = input(false, { transform: booleanAttribute });\n info = input(false, { transform: booleanAttribute });\n success = input(false, { transform: booleanAttribute });\n warning = input(false, { transform: booleanAttribute });\n error = input(false, { transform: booleanAttribute });\n\n title = input<string | undefined>();\n description = input<string | undefined>();\n icon = input<string | undefined>();\n hideIcon = input(false, { transform: booleanAttribute });\n\n fontSet = input<SdIconSet | undefined, SdIconSet | undefined | null>(undefined, {\n transform: value => value ?? undefined,\n });\n\n closable = input(false, { transform: booleanAttribute });\n actionLabel = input<string | undefined>();\n lineClamp = input<number | undefined>();\n autoId = input<string | undefined>();\n\n // 2. OUTPUTS\n sdClosed = output<Event>();\n sdAction = output<Event>();\n\n // 3. STATE\n readonly dismissed = signal(false);\n readonly expanded = signal(false);\n readonly overflowing = signal(false);\n\n protected readonly bodyRef = viewChild<ElementRef<HTMLElement>>('body');\n protected readonly actionSlot = contentChild(SdInformActionDirective);\n\n // 4. COMPUTED\n effectiveColor = computed<Color>(() => {\n if (this.primary()) return 'primary';\n if (this.secondary()) return 'secondary';\n if (this.info()) return 'info';\n if (this.success()) return 'success';\n if (this.warning()) return 'warning';\n if (this.error()) return 'error';\n return this.color();\n });\n\n colorClasses = computed(() => {\n const c = this.effectiveColor();\n return {\n 'c-primary': c === 'primary',\n 'c-secondary': c === 'secondary',\n 'c-info': c === 'info',\n 'c-success': c === 'success',\n 'c-warning': c === 'warning',\n 'c-error': c === 'error',\n };\n });\n\n effectiveIcon = computed<string | null>(() => {\n if (this.hideIcon()) return null;\n return this.icon() || SD_INFORM_DEFAULT_ICON[this.effectiveColor()];\n });\n\n hasActionSlot = computed(() => !!this.actionSlot());\n\n // clamp dòng: null = không clamp (đầy đủ); số = số dòng tối đa.\n clampLines = computed<number | null>(() => {\n const n = this.lineClamp();\n if (!n || n <= 0) return null;\n return this.expanded() ? null : n;\n });\n\n // toggle hiện khi đang clamp và đã từng tràn, hoặc đang mở rộng (để còn thu gọn lại).\n showToggle = computed(() => {\n if (!this.lineClamp()) return false;\n return this.overflowing() || this.expanded();\n });\n\n // why: error/warning là cảnh báo → assertive 'alert'; các màu còn lại là thông tin → polite 'status'.\n liveRole = computed<'alert' | 'status'>(() => {\n const c = this.effectiveColor();\n return c === 'error' || c === 'warning' ? 'alert' : 'status';\n });\n\n // 5. OVERFLOW MEASUREMENT\n #measureScheduled = false;\n\n constructor() {\n // đo lần đầu sau render\n afterNextRender(() => this.measureOverflow());\n // why: re-đo khi nội dung/clamp/expanded đổi; đồng thời gắn ResizeObserver để bắt thay đổi kích thước container (responsive).\n effect(onCleanup => {\n this.description();\n this.lineClamp();\n this.expanded();\n const el = this.bodyRef()?.nativeElement;\n this.#scheduleMeasure();\n // why: guard instanceof Element để test stub (plain object) không làm ResizeObserver.observe ném lỗi.\n if (el instanceof Element && typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.measureOverflow());\n ro.observe(el);\n onCleanup(() => ro.disconnect());\n }\n });\n }\n\n #scheduleMeasure(): void {\n if (this.#measureScheduled) return;\n this.#measureScheduled = true;\n // gom nhiều thay đổi vào 1 lần đo sau khi DOM cập nhật xong\n queueMicrotask(() => {\n this.#measureScheduled = false;\n this.measureOverflow();\n });\n }\n\n /** Đo tràn dòng của body; chỉ có ý nghĩa khi đang clamp. */\n measureOverflow(): void {\n const el = this.bodyRef()?.nativeElement;\n if (!el || this.expanded() || !this.lineClamp()) return;\n // +1 chống sai số làm tròn sub-pixel\n this.overflowing.set(el.scrollHeight > el.clientHeight + 1);\n }\n\n // 6. HANDLERS\n toggleExpanded(): void {\n this.expanded.update(v => !v);\n }\n\n onClose(event: Event): void {\n event.stopPropagation();\n this.dismissed.set(true);\n this.sdClosed.emit(event);\n }\n\n onAction(event: Event): void {\n event.stopPropagation();\n this.sdAction.emit(event);\n }\n}\n","@if (!dismissed()) {\n @let _effectiveIcon = effectiveIcon();\n @let _fontSet = fontSet();\n <div\n class=\"c-inform\"\n [attr.role]=\"liveRole()\"\n [ngClass]=\"colorClasses()\"\n [attr.data-autoId]=\"autoId() || null\"\n [attr.data-autoid]=\"autoId() || null\">\n\n @if (_effectiveIcon) {\n <sd-icon class=\"c-inform-icon c-material-icon\" aria-hidden=\"true\" [fontSet]=\"_fontSet\" [name]=\"_effectiveIcon\"></sd-icon>\n }\n\n @let _actionLabel = actionLabel();\n <div class=\"c-inform-content\">\n @if (title(); as t) {\n <div class=\"c-inform-title\">{{ t }}</div>\n }\n @if (description(); as d) {\n <div\n #body\n class=\"c-inform-body\"\n [class.is-clamped]=\"clampLines() !== null\"\n [style.-webkit-line-clamp]=\"clampLines()\">\n {{ d }}\n </div>\n }\n @if (showToggle()) {\n <button type=\"button\" class=\"c-inform-toggle\" (click)=\"toggleExpanded()\">\n {{ (expanded() ? 'core.component.inform.show-less' : 'core.component.inform.show-more') | sdTranslate }}\n </button>\n }\n\n @if (hasActionSlot()) {\n <div class=\"c-inform-action\">\n <ng-content select=\"[sdInformAction]\"></ng-content>\n </div>\n } @else if (_actionLabel) {\n <button type=\"button\" class=\"c-inform-action c-inform-action-link\" (click)=\"onAction($event)\">\n {{ _actionLabel }}\n </button>\n }\n </div>\n\n @if (closable()) {\n <button\n type=\"button\"\n class=\"c-inform-close\"\n [attr.aria-label]=\"'core.common.close' | sdTranslate\"\n (click)=\"onClose($event)\">\n <sd-icon aria-hidden=\"true\" name=\"close\"></sd-icon>\n </button>\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,25 +1,155 @@
1
1
  import * as i0 from '@angular/core';
2
- import { viewChild, input, booleanAttribute, output, inject, ChangeDetectorRef, DestroyRef, signal, afterNextRender, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { inject, Injectable, viewChild, input, booleanAttribute, output, ChangeDetectorRef, DestroyRef, signal, afterNextRender, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { Utilities } from '@sdcorejs/utils/fns';
4
4
  import * as i2 from '@angular/cdk/portal';
5
5
  import { CdkPortal, DomPortalOutlet, PortalModule } from '@angular/cdk/portal';
6
- import { CommonModule } from '@angular/common';
6
+ import { DOCUMENT, CommonModule } from '@angular/common';
7
7
  import * as i1 from '@angular/material/button';
8
8
  import { MatButtonModule } from '@angular/material/button';
9
9
  import { MatDialogModule } from '@angular/material/dialog';
10
10
  import { SdLoadingService } from '@sdcorejs/angular/services';
11
11
  import { SdIcon } from '@sdcorejs/angular/modules/icon';
12
12
 
13
+ /**
14
+ * Sổ đăng ký các panel `<sd-modal-resizable>` đang sống.
15
+ *
16
+ * 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
17
+ * chung của cả stack. Trước đây `#arrangePanels` quét `document.querySelectorAll('.modal-resizable')`
18
+ * — 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
19
+ * 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
20
+ * đúng vào các instance do library tạo ra và còn sống.
21
+ */
22
+ class SdModalResizableRegistry {
23
+ // why: dùng token DOCUMENT thay vì global `document`, đồng bộ với `preview-image` — service
24
+ // `providedIn:'root'` có thể được khởi tạo trong quá trình render phía server.
25
+ #document = inject(DOCUMENT);
26
+ // Set giữ nguyên thứ tự đăng ký → thứ tự xếp chỗ ổn định, khớp thứ tự panel được mở.
27
+ #ids = new Set();
28
+ register(id) {
29
+ this.#ids.add(id);
30
+ }
31
+ unregister(id) {
32
+ this.#ids.delete(id);
33
+ }
34
+ /**
35
+ * Phần tử panel của các instance đã đăng ký và đang có mặt trong DOM.
36
+ * Instance đã destroy hoặc chưa attach portal sẽ bị bỏ qua.
37
+ */
38
+ panels() {
39
+ const elements = [];
40
+ for (const id of this.#ids) {
41
+ const element = this.#document.getElementById(id);
42
+ if (element)
43
+ elements.push(element);
44
+ }
45
+ return elements;
46
+ }
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdModalResizableRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
48
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdModalResizableRegistry, providedIn: 'root' });
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdModalResizableRegistry, decorators: [{
51
+ type: Injectable,
52
+ args: [{ providedIn: 'root' }]
53
+ }] });
54
+
55
+ /**
56
+ * `<sd-modal-resizable>` — right-docked, non-modal panel that can be minimized, expanded or pushed
57
+ * fullscreen. Several panels stack side by side along the right edge of the viewport, so the user
58
+ * can keep multiple records open at once while still working with the page behind them.
59
+ *
60
+ * Use it for side-by-side comparison / inspector workflows. Use `<sd-modal>` when the task is
61
+ * blocking, and `<sd-side-drawer>` when a single overlay with a backdrop is enough.
62
+ *
63
+ * NOTE ON DOCS: this component deliberately has **no** sibling `sd-modal-resizable.md`. Every `*.md`
64
+ * under the library is swept into `published-docs/<version>/index.json` by `scripts/collect-docs.mjs`,
65
+ * and `scripts/generate-showcase-example-sources.test.mjs` asserts that list is 1:1 with the
66
+ * `publishedDocId` set in the showcase documentation registry. A published doc with no showcase page
67
+ * therefore turns that release guard red. Keep the reference here until the component ships a
68
+ * showcase demo + registry entry; only then add the `.md`.
69
+ *
70
+ * ```ts
71
+ * import { SdModalResizable } from '@sdcorejs/angular/components/modal-resizable';
72
+ * ```
73
+ *
74
+ * ```html
75
+ * <sd-button title="Open detail" type="fill" color="primary" (click)="panel.open()"></sd-button>
76
+ *
77
+ * <sd-modal-resizable #panel width="520px">
78
+ * <span sdTitle>Đơn hàng #1024</span>
79
+ *
80
+ * <div sdBody class="panel-body">
81
+ * <sd-section icon="receipt" title="Thông tin chung">
82
+ * <sd-section-item label="Khách hàng">Nguyen Van An</sd-section-item>
83
+ * </sd-section>
84
+ * </div>
85
+ *
86
+ * <sd-button sdFooterRight type="text" title="Đóng" (click)="panel.close()"></sd-button>
87
+ * </sd-modal-resizable>
88
+ * ```
89
+ *
90
+ * ### Slots
91
+ * | Selector | Where it renders |
92
+ * | ----------------- | ------------------------- |
93
+ * | `[sdTitle]` | Header title area. |
94
+ * | `[sdBody]` | Scrollable content area. |
95
+ * | `[sdFooterLeft]` | Footer left action group. |
96
+ * | `[sdFooterRight]` | Footer right action group.|
97
+ *
98
+ * Header, body and footer only render while the panel is open.
99
+ *
100
+ * ### Panel stacking
101
+ * The panel is portalled onto `document.body` (via `CdkPortal` + `DomPortalOutlet`), so laying panels
102
+ * out is a concern shared by all live instances rather than by a single view. Arrangement is scoped
103
+ * through the root-provided `SdModalResizableRegistry`: each instance registers its panel id on
104
+ * construction and unregisters it on destroy. `open`, `close`, `minimize`, `maximize` and
105
+ * `toggleMaximum` re-run the arrangement and rewrite inline `width` / `right` **only on registered,
106
+ * still-mounted panels**, in registration order. Consequences worth knowing:
107
+ * - Markup of your own that happens to carry the `.modal-resizable` class is **not** touched.
108
+ * (Earlier builds ran `document.querySelectorAll('.modal-resizable')` and rewrote every match.)
109
+ * - A destroyed panel immediately stops taking up a slot for the instances that outlive it.
110
+ * - Panels marked `c-closed`, and expanded panels with no captured `data-width`, are skipped.
111
+ *
112
+ * ### Lifecycle / teardown
113
+ * `open()`, `close()` and the arrangement pass each schedule a short `setTimeout` (100ms / 100ms /
114
+ * 200ms) that mutates DOM. All of them are tracked and cleared in `DestroyRef.onDestroy`, together
115
+ * with unregistering from the registry and destroying the portal view. Destroying the component
116
+ * mid-animation cannot run layout work against a detached panel.
117
+ *
118
+ * ### Anti-patterns
119
+ * - Rendering it inside a scroll container and expecting it to be clipped — it lives on `<body>`.
120
+ * - Reusing the `.modal-resizable` class on your own elements to "join" the stack; register a real
121
+ * component instead.
122
+ * - Writing inline `width` / `right` on a panel yourself — the next arrangement pass overwrites both.
123
+ *
124
+ * ### Tests
125
+ * `src/modal-resizable.component.spec.ts` — portal attach, open/close/minimize/maximize math,
126
+ * loading, editing, timer teardown, registry scoping. Run:
127
+ * `npx ng test sdcorejs-angular --watch=false --browsers=ChromeHeadless --include='projects/sdcorejs-angular/components/modal-resizable/src/modal-resizable.component.spec.ts'`
128
+ *
129
+ * ### Related
130
+ * `<sd-modal>` (blocking dialog / bottom-sheet), `<sd-side-drawer>` (single right-side overlay with
131
+ * a body scroll lock), `SdLoadingService` (powers `startLoading()` / `stopLoading()`).
132
+ */
13
133
  class SdModalResizable {
134
+ /** Generated DOM id of the panel element (`I<uuid>`). */
14
135
  id = `I${Utilities.generateUuid()}`;
15
136
  portal = viewChild.required(CdkPortal);
137
+ /** Marks the panel as editable. Bare attribute = `true`. Default `false`. */
16
138
  editable = input(false, { transform: booleanAttribute });
139
+ /** CSS width used while the panel is expanded (not a minimum). Default `'480px'`. */
17
140
  width = input('480px');
141
+ /** Emitted by `toggleEditable()` with the new editing state. */
18
142
  editingChanged = output();
19
143
  #embeddedViewRef;
20
144
  #ref = inject(ChangeDetectorRef);
21
145
  #loadingService = inject(SdLoadingService);
22
146
  #destroyRef = inject(DestroyRef);
147
+ #registry = inject(SdModalResizableRegistry);
148
+ // why: open/close/#arrangePanels đều hẹn setTimeout thao tác DOM. Gom id vào một set để
149
+ // onDestroy clear sạch, tránh callback chạy trên portal đã tháo (element không còn, hoặc tệ
150
+ // hơn: element của instance khác vừa tái sử dụng id).
151
+ #timers = new Set();
152
+ // Trạng thái panel — đọc được từ ngoài (template/consumer), chỉ component tự ghi.
23
153
  isEditing = signal(false);
24
154
  isOpened = signal(false);
25
155
  isHover = signal(false);
@@ -27,6 +157,7 @@ class SdModalResizable {
27
157
  isMinimum = signal(false);
28
158
  isMaximum = signal(false);
29
159
  constructor() {
160
+ this.#registry.register(this.id);
30
161
  afterNextRender(() => {
31
162
  // why: attachTemplatePortal tạo embedded view từ VCR của chính CdkPortal →
32
163
  // KHÔNG cần appRef/injector/document. Chỉ truyền outletElement để tương thích
@@ -36,15 +167,28 @@ class SdModalResizable {
36
167
  this.#detectChanges();
37
168
  });
38
169
  this.#destroyRef.onDestroy(() => {
170
+ this.#registry.unregister(this.id);
171
+ for (const timer of this.#timers)
172
+ clearTimeout(timer);
173
+ this.#timers.clear();
39
174
  this.#embeddedViewRef?.destroy();
40
175
  });
41
176
  }
177
+ /** setTimeout có theo dõi — huỷ được hàng loạt trong onDestroy. */
178
+ #schedule(callback, delay) {
179
+ const timer = setTimeout(() => {
180
+ this.#timers.delete(timer);
181
+ callback();
182
+ }, delay);
183
+ this.#timers.add(timer);
184
+ }
185
+ /** Opens the panel, captures its rendered width, and expands it. */
42
186
  open = () => {
43
187
  this.isOpened.set(true);
44
188
  this.#detectChanges();
45
189
  const element = this.#getElement();
46
190
  if (element && !element.classList.contains('c-minium')) {
47
- setTimeout(() => {
191
+ this.#schedule(() => {
48
192
  const maximumWidth = element.offsetWidth;
49
193
  if (maximumWidth > 0) {
50
194
  element.dataset['width'] = maximumWidth.toString();
@@ -54,10 +198,11 @@ class SdModalResizable {
54
198
  }
55
199
  this.maximize();
56
200
  };
201
+ /** Collapses the panel to zero width and stops loading. */
57
202
  close = () => {
58
203
  this.isOpened.set(false);
59
204
  this.#detectChanges();
60
- setTimeout(() => {
205
+ this.#schedule(() => {
61
206
  const element = this.#getElement();
62
207
  element?.style.setProperty('width', '0px');
63
208
  element?.style.setProperty('right', '0px');
@@ -67,48 +212,59 @@ class SdModalResizable {
67
212
  this.stopLoading();
68
213
  this.#arrangePanels();
69
214
  };
215
+ /** Shrinks the panel to the 300px minimum strip. */
70
216
  minimize = () => {
71
217
  this.isMinimum.set(true);
72
218
  this.#detectChanges();
73
219
  this.#arrangePanels();
74
220
  };
221
+ /** Restores the panel to its expanded width. */
75
222
  maximize = () => {
76
223
  this.isMinimum.set(false);
77
224
  this.#detectChanges();
78
225
  this.#arrangePanels();
79
226
  };
227
+ /** Toggles fullscreen (`calc(100% - 16px)`). */
80
228
  toggleMaximum = () => {
81
229
  this.isMaximum.update(isMaximum => !isMaximum);
82
230
  this.#detectChanges();
83
231
  this.#arrangePanels();
84
232
  };
233
+ /** Drives the scoped loading overlay through `SdLoadingService`. */
85
234
  startLoading = () => {
86
235
  this.isLoading.set(true);
87
236
  this.#detectChanges();
88
237
  this.#loadingService.stop(`#${this.id}`);
89
238
  this.#loadingService.start(`#${this.id}`);
90
239
  };
240
+ /** Stops the scoped loading overlay. */
91
241
  stopLoading = () => {
92
242
  this.isLoading.set(false);
93
243
  this.#detectChanges();
94
244
  this.#loadingService.stop(`#${this.id}`);
95
245
  };
246
+ /** Flips `isEditing` and emits `editingChanged`. */
96
247
  toggleEditable() {
97
248
  this.isEditing.update(isEditing => !isEditing);
98
249
  this.#detectChanges();
99
250
  this.editingChanged.emit(this.isEditing());
100
251
  }
252
+ /** Hover state hook bound in the template. */
101
253
  onFocus = () => {
102
254
  this.isHover.set(true);
103
255
  };
256
+ /** Hover state hook bound in the template. */
104
257
  onBlur = () => {
105
258
  this.isHover.set(false);
106
259
  };
107
260
  #arrangePanels = () => {
108
- setTimeout(() => {
261
+ this.#schedule(() => {
109
262
  let totalRight = 0;
110
263
  const minimumWidth = 300;
111
- document.querySelectorAll('.modal-resizable').forEach(item => {
264
+ // why: chỉ xếp chỗ các panel do <sd-modal-resizable> đang sống sở hữu (registry), KHÔNG
265
+ // querySelectorAll('.modal-resizable') toàn document — query đó ghi đè inline width/right
266
+ // lên mọi phần tử trùng class, kể cả markup của component khác không liên quan.
267
+ this.#registry.panels().forEach(item => {
112
268
  if (item.classList.contains('c-minium')) {
113
269
  item.style.setProperty('width', `${minimumWidth}px`);
114
270
  item.style.setProperty('right', `${totalRight}px`);
@@ -142,11 +298,11 @@ class SdModalResizable {
142
298
  this.#embeddedViewRef?.detectChanges();
143
299
  }
144
300
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdModalResizable, deps: [], target: i0.ɵɵFactoryTarget.Component });
145
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdModalResizable, isStandalone: true, selector: "sd-modal-resizable", inputs: { editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editingChanged: "editingChanged" }, viewQueries: [{ propertyName: "portal", first: true, predicate: CdkPortal, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template cdkPortal>\n <div\n [id]=\"id\"\n class=\"modal-resizable\"\n [style.width]=\"width()\"\n [class.modal-resizable--active]=\"isOpened()\"\n [class.modal-resizable--loading]=\"isLoading()\"\n [class.c-minium]=\"isMinimum()\"\n [class.c-fullscreen]=\"isMaximum()\"\n (mouseover)=\"onFocus()\"\n (focus)=\"onFocus()\"\n (mouseout)=\"onBlur()\"\n (blur)=\"onBlur()\">\n @if (isOpened()) {\n <div class=\"modal-resizable__header\">\n <div class=\"modal-resizable__title\">\n <ng-content select=\"[sdTitle]\"></ng-content>\n </div>\n <div class=\"modal-resizable__actions\">\n @if (!isMinimum()) {\n <button type=\"button\" class=\"c-action--white c-min\" (click)=\"minimize()\" mat-icon-button title=\"Thu nh\u1ECF\">\n <sd-icon name=\"remove\"></sd-icon>\n </button>\n }\n @if (isMinimum()) {\n <button type=\"button\" class=\"c-action--white c-max\" (click)=\"maximize()\" mat-icon-button title=\"Ph\u00F3ng to\">\n <sd-icon name=\"remove\"></sd-icon>\n </button>\n }\n @if (!isMaximum()) {\n <button type=\"button\" class=\"c-action--white\" (click)=\"toggleMaximum()\" mat-icon-button title=\"To\u00E0n m\u00E0n h\u00ECnh\">\n <sd-icon name=\"open_in_full\"></sd-icon>\n </button>\n }\n @if (isMaximum()) {\n <button type=\"button\" class=\"c-action--white\" (click)=\"toggleMaximum()\" mat-icon-button title=\"Tho\u00E1t to\u00E0n m\u00E0n h\u00ECnh\">\n <sd-icon name=\"fullscreen_exit\"></sd-icon>\n </button>\n }\n <button type=\"button\" class=\"c-action--white\" (click)=\"close()\" mat-icon-button title=\"\u0110\u00F3ng\">\n <sd-icon name=\"close\"></sd-icon>\n </button>\n </div>\n </div>\n <div class=\"modal-resizable__body\">\n <div class=\"modal-resizable__content\">\n <ng-content select=\"[sdBody]\"></ng-content>\n </div>\n </div>\n <div class=\"modal-resizable__footer\">\n <div class=\"modal-resizable__footer-left\"><ng-content select=\"[sdFooterLeft]\"></ng-content></div>\n <div class=\"modal-resizable__footer-right\"><ng-content select=\"[sdFooterRight]\"></ng-content></div>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-primary-contrast{color:var(--sd-primary-contrast)!important}.bg-primary-contrast{background:var(--sd-primary-contrast)!important}.border-primary-contrast{border-color:var(--sd-primary-contrast)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-secondary-contrast{color:var(--sd-secondary-contrast)!important}.bg-secondary-contrast{background:var(--sd-secondary-contrast)!important}.border-secondary-contrast{border-color:var(--sd-secondary-contrast)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-info-contrast{color:var(--sd-info-contrast)!important}.bg-info-contrast{background:var(--sd-info-contrast)!important}.border-info-contrast{border-color:var(--sd-info-contrast)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-success-contrast{color:var(--sd-success-contrast)!important}.bg-success-contrast{background:var(--sd-success-contrast)!important}.border-success-contrast{border-color:var(--sd-success-contrast)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-warning-contrast{color:var(--sd-warning-contrast)!important}.bg-warning-contrast{background:var(--sd-warning-contrast)!important}.border-warning-contrast{border-color:var(--sd-warning-contrast)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-error-contrast{color:var(--sd-error-contrast)!important}.bg-error-contrast{background:var(--sd-error-contrast)!important}.border-error-contrast{border-color:var(--sd-error-contrast)!important}.text-surface{color:var(--sd-surface)!important}.bg-surface{background:var(--sd-surface)!important}.border-surface{border-color:var(--sd-surface)!important}.text-surface-muted{color:var(--sd-surface-muted)!important}.bg-surface-muted{background:var(--sd-surface-muted)!important}.border-surface-muted{border-color:var(--sd-surface-muted)!important}.text-text{color:var(--sd-text)!important}.bg-text{background:var(--sd-text)!important}.border-text{border-color:var(--sd-text)!important}.text-text-secondary{color:var(--sd-text-secondary)!important}.bg-text-secondary{background:var(--sd-text-secondary)!important}.border-text-secondary{border-color:var(--sd-text-secondary)!important}.text-text-muted{color:var(--sd-text-muted)!important}.bg-text-muted{background:var(--sd-text-muted)!important}.border-text-muted{border-color:var(--sd-text-muted)!important}.text-border{color:var(--sd-border)!important}.bg-border{background:var(--sd-border)!important}.border-border{border-color:var(--sd-border)!important}.text-border-strong{color:var(--sd-border-strong)!important}.bg-border-strong{background:var(--sd-border-strong)!important}.border-border-strong{border-color:var(--sd-border-strong)!important}.text-disabled-bg{color:var(--sd-disabled-bg)!important}.bg-disabled-bg{background:var(--sd-disabled-bg)!important}.border-disabled-bg{border-color:var(--sd-disabled-bg)!important}.text-disabled-text{color:var(--sd-disabled-text)!important}.bg-disabled-text{background:var(--sd-disabled-text)!important}.border-disabled-text{border-color:var(--sd-disabled-text)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.text-secondary{color:var(--sd-text-secondary)!important}.text-muted{color:var(--sd-text-muted)!important}.text-body{color:var(--sd-text)!important}.bg-muted{background:var(--sd-surface-muted)!important}.modal-resizable{position:fixed;right:12px;top:80px;bottom:0;background-color:#fff;z-index:998;display:flex;flex-direction:column;opacity:0;visibility:hidden;transform:translate3d(0,100%,0);transition:all .3s ease-in-out;pointer-events:none;box-shadow:0 .4px .8px #0000001a,0 3px 6px #0003;border-radius:4px 4px 0 0}.modal-resizable button.c-action--white:focus{outline:none!important}.modal-resizable.c-minium-of-list{top:auto;bottom:0;opacity:1;visibility:visible;pointer-events:all;transform:translateZ(0)}.modal-resizable.c-minium{top:auto!important;z-index:998!important}.modal-resizable.c-minium .modal-resizable__body,.modal-resizable.c-minium .modal-resizable__footer{display:none}.modal-resizable.c-fullscreen{top:0;z-index:999}.c-action{color:var(--sd-secondary)}.c-action:focus{outline:none}.c-action--white.c-min{margin-bottom:-12px}.c-action--white.c-max{margin-top:-12px}.modal-resizable__icon{border:0;background:transparent;color:#212121;overflow:hidden;outline:none}.modal-resizable__icon sd-icon{float:left}.modal-resizable__header{display:flex;align-items:center;flex-wrap:nowrap;gap:4px;min-height:40px;padding:0 16px;background-color:#5d6165;border-radius:4px 4px 0 0}.modal-resizable__body{flex:1;position:relative}.modal-resizable__content{position:absolute;padding:8px 16px 16px;inset:0;overflow:auto}.modal-resizable__footer{border-top:1px solid #dde0e5;padding:5px 16px;display:flex;align-items:center;justify-content:space-between;gap:8px}.modal-resizable__footer-left,.modal-resizable__footer-right{display:inline-flex;align-items:center;gap:8px}.modal-resizable__footer-right{margin-left:auto}.modal-resizable--active{opacity:1;visibility:visible;pointer-events:all;transform:translateZ(0)}.modal-resizable__title{flex:1 1 0;min-width:0;font-size:14px;line-height:20px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-resizable__title>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-resizable__actions{display:flex;align-items:center;flex:0 0 auto;gap:4px;margin-left:auto}.modal-resizable__actions .c-action--white{flex:0 0 auto;width:32px;height:32px;line-height:32px}.modal-resizable__actions .c-action--white.c-min,.modal-resizable__actions .c-action--white.c-max{margin:0}\n"], dependencies: [{ kind: "component", type: SdIcon, selector: "sd-icon", inputs: ["name", "fontIcon", "color", "set", "fontSet", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortal, selector: "[cdkPortal]", exportAs: ["cdkPortal"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
301
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: SdModalResizable, isStandalone: true, selector: "sd-modal-resizable", inputs: { editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editingChanged: "editingChanged" }, viewQueries: [{ propertyName: "portal", first: true, predicate: CdkPortal, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template cdkPortal>\n <div\n [id]=\"id\"\n class=\"modal-resizable\"\n [style.width]=\"width()\"\n [class.modal-resizable--active]=\"isOpened()\"\n [class.modal-resizable--loading]=\"isLoading()\"\n [class.c-minium]=\"isMinimum()\"\n [class.c-fullscreen]=\"isMaximum()\"\n (mouseover)=\"onFocus()\"\n (focus)=\"onFocus()\"\n (mouseout)=\"onBlur()\"\n (blur)=\"onBlur()\">\n @if (isOpened()) {\n <div class=\"modal-resizable__header\">\n <div class=\"modal-resizable__title\">\n <ng-content select=\"[sdTitle]\"></ng-content>\n </div>\n <div class=\"modal-resizable__actions\">\n @if (!isMinimum()) {\n <button type=\"button\" class=\"c-action--white c-min\" (click)=\"minimize()\" mat-icon-button title=\"Thu nh\u1ECF\">\n <sd-icon name=\"remove\"></sd-icon>\n </button>\n }\n @if (isMinimum()) {\n <button type=\"button\" class=\"c-action--white c-max\" (click)=\"maximize()\" mat-icon-button title=\"Ph\u00F3ng to\">\n <sd-icon name=\"remove\"></sd-icon>\n </button>\n }\n @if (!isMaximum()) {\n <button type=\"button\" class=\"c-action--white\" (click)=\"toggleMaximum()\" mat-icon-button title=\"To\u00E0n m\u00E0n h\u00ECnh\">\n <sd-icon name=\"open_in_full\"></sd-icon>\n </button>\n }\n @if (isMaximum()) {\n <button type=\"button\" class=\"c-action--white\" (click)=\"toggleMaximum()\" mat-icon-button title=\"Tho\u00E1t to\u00E0n m\u00E0n h\u00ECnh\">\n <sd-icon name=\"fullscreen_exit\"></sd-icon>\n </button>\n }\n <button type=\"button\" class=\"c-action--white\" (click)=\"close()\" mat-icon-button title=\"\u0110\u00F3ng\">\n <sd-icon name=\"close\"></sd-icon>\n </button>\n </div>\n </div>\n <div class=\"modal-resizable__body\">\n <div class=\"modal-resizable__content\">\n <ng-content select=\"[sdBody]\"></ng-content>\n </div>\n </div>\n <div class=\"modal-resizable__footer\">\n <div class=\"modal-resizable__footer-left\"><ng-content select=\"[sdFooterLeft]\"></ng-content></div>\n <div class=\"modal-resizable__footer-right\"><ng-content select=\"[sdFooterRight]\"></ng-content></div>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-primary-contrast{color:var(--sd-primary-contrast)!important}.bg-primary-contrast{background:var(--sd-primary-contrast)!important}.border-primary-contrast{border-color:var(--sd-primary-contrast)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-secondary-contrast{color:var(--sd-secondary-contrast)!important}.bg-secondary-contrast{background:var(--sd-secondary-contrast)!important}.border-secondary-contrast{border-color:var(--sd-secondary-contrast)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-info-contrast{color:var(--sd-info-contrast)!important}.bg-info-contrast{background:var(--sd-info-contrast)!important}.border-info-contrast{border-color:var(--sd-info-contrast)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-success-contrast{color:var(--sd-success-contrast)!important}.bg-success-contrast{background:var(--sd-success-contrast)!important}.border-success-contrast{border-color:var(--sd-success-contrast)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-warning-contrast{color:var(--sd-warning-contrast)!important}.bg-warning-contrast{background:var(--sd-warning-contrast)!important}.border-warning-contrast{border-color:var(--sd-warning-contrast)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-error-contrast{color:var(--sd-error-contrast)!important}.bg-error-contrast{background:var(--sd-error-contrast)!important}.border-error-contrast{border-color:var(--sd-error-contrast)!important}.text-surface{color:var(--sd-surface)!important}.bg-surface{background:var(--sd-surface)!important}.border-surface{border-color:var(--sd-surface)!important}.text-surface-muted{color:var(--sd-surface-muted)!important}.bg-surface-muted{background:var(--sd-surface-muted)!important}.border-surface-muted{border-color:var(--sd-surface-muted)!important}.text-text{color:var(--sd-text)!important}.bg-text{background:var(--sd-text)!important}.border-text{border-color:var(--sd-text)!important}.text-text-secondary{color:var(--sd-text-secondary)!important}.bg-text-secondary{background:var(--sd-text-secondary)!important}.border-text-secondary{border-color:var(--sd-text-secondary)!important}.text-text-muted{color:var(--sd-text-muted)!important}.bg-text-muted{background:var(--sd-text-muted)!important}.border-text-muted{border-color:var(--sd-text-muted)!important}.text-border{color:var(--sd-border)!important}.bg-border{background:var(--sd-border)!important}.border-border{border-color:var(--sd-border)!important}.text-border-strong{color:var(--sd-border-strong)!important}.bg-border-strong{background:var(--sd-border-strong)!important}.border-border-strong{border-color:var(--sd-border-strong)!important}.text-disabled-bg{color:var(--sd-disabled-bg)!important}.bg-disabled-bg{background:var(--sd-disabled-bg)!important}.border-disabled-bg{border-color:var(--sd-disabled-bg)!important}.text-disabled-text{color:var(--sd-disabled-text)!important}.bg-disabled-text{background:var(--sd-disabled-text)!important}.border-disabled-text{border-color:var(--sd-disabled-text)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.text-secondary{color:var(--sd-text-secondary)!important}.text-muted{color:var(--sd-text-muted)!important}.text-body{color:var(--sd-text)!important}.bg-muted{background:var(--sd-surface-muted)!important}.modal-resizable{position:fixed;right:12px;top:80px;bottom:0;background-color:#fff;z-index:998;display:flex;flex-direction:column;opacity:0;visibility:hidden;transform:translate3d(0,100%,0);transition:all .3s ease-in-out;pointer-events:none;box-shadow:0 .4px .8px #0000001a,0 3px 6px #0003;border-radius:4px 4px 0 0}.modal-resizable button.c-action--white:focus{outline:none!important}.modal-resizable button.c-action--white:focus-visible{outline:2px solid #fff!important;outline-offset:2px}.modal-resizable.c-minium-of-list{top:auto;bottom:0;opacity:1;visibility:visible;pointer-events:all;transform:translateZ(0)}.modal-resizable.c-minium{top:auto!important;z-index:998!important}.modal-resizable.c-minium .modal-resizable__body,.modal-resizable.c-minium .modal-resizable__footer{display:none}.modal-resizable.c-fullscreen{top:0;z-index:999}.c-action{color:var(--sd-secondary)}.c-action:focus{outline:none}.c-action:focus-visible{outline:2px solid var(--sd-primary, #005cbb);outline-offset:2px}.c-action--white.c-min{margin-bottom:-12px}.c-action--white.c-max{margin-top:-12px}.modal-resizable__icon{border:0;background:transparent;color:#212121;overflow:hidden;outline:none}.modal-resizable__icon:focus-visible{outline:2px solid var(--sd-primary, #005cbb);outline-offset:2px}.modal-resizable__icon sd-icon{float:left}.modal-resizable__header{display:flex;align-items:center;flex-wrap:nowrap;gap:4px;min-height:40px;padding:0 16px;background-color:#5d6165;border-radius:4px 4px 0 0}.modal-resizable__body{flex:1;position:relative}.modal-resizable__content{position:absolute;padding:8px 16px 16px;inset:0;overflow:auto}.modal-resizable__footer{border-top:1px solid #dde0e5;padding:5px 16px;display:flex;align-items:center;justify-content:space-between;gap:8px}.modal-resizable__footer-left,.modal-resizable__footer-right{display:inline-flex;align-items:center;gap:8px}.modal-resizable__footer-right{margin-left:auto}.modal-resizable--active{opacity:1;visibility:visible;pointer-events:all;transform:translateZ(0)}.modal-resizable__title{flex:1 1 0;min-width:0;font-size:14px;line-height:20px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-resizable__title>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-resizable__actions{display:flex;align-items:center;flex:0 0 auto;gap:4px;margin-left:auto}.modal-resizable__actions .c-action--white{flex:0 0 auto;width:32px;height:32px;line-height:32px}.modal-resizable__actions .c-action--white.c-min,.modal-resizable__actions .c-action--white.c-max{margin:0}\n"], dependencies: [{ kind: "component", type: SdIcon, selector: "sd-icon", inputs: ["name", "fontIcon", "color", "set", "fontSet", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortal, selector: "[cdkPortal]", exportAs: ["cdkPortal"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
146
302
  }
147
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdModalResizable, decorators: [{
148
304
  type: Component,
149
- args: [{ selector: 'sd-modal-resizable', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [SdIcon, CommonModule, MatDialogModule, MatButtonModule, PortalModule], template: "<ng-template cdkPortal>\n <div\n [id]=\"id\"\n class=\"modal-resizable\"\n [style.width]=\"width()\"\n [class.modal-resizable--active]=\"isOpened()\"\n [class.modal-resizable--loading]=\"isLoading()\"\n [class.c-minium]=\"isMinimum()\"\n [class.c-fullscreen]=\"isMaximum()\"\n (mouseover)=\"onFocus()\"\n (focus)=\"onFocus()\"\n (mouseout)=\"onBlur()\"\n (blur)=\"onBlur()\">\n @if (isOpened()) {\n <div class=\"modal-resizable__header\">\n <div class=\"modal-resizable__title\">\n <ng-content select=\"[sdTitle]\"></ng-content>\n </div>\n <div class=\"modal-resizable__actions\">\n @if (!isMinimum()) {\n <button type=\"button\" class=\"c-action--white c-min\" (click)=\"minimize()\" mat-icon-button title=\"Thu nh\u1ECF\">\n <sd-icon name=\"remove\"></sd-icon>\n </button>\n }\n @if (isMinimum()) {\n <button type=\"button\" class=\"c-action--white c-max\" (click)=\"maximize()\" mat-icon-button title=\"Ph\u00F3ng to\">\n <sd-icon name=\"remove\"></sd-icon>\n </button>\n }\n @if (!isMaximum()) {\n <button type=\"button\" class=\"c-action--white\" (click)=\"toggleMaximum()\" mat-icon-button title=\"To\u00E0n m\u00E0n h\u00ECnh\">\n <sd-icon name=\"open_in_full\"></sd-icon>\n </button>\n }\n @if (isMaximum()) {\n <button type=\"button\" class=\"c-action--white\" (click)=\"toggleMaximum()\" mat-icon-button title=\"Tho\u00E1t to\u00E0n m\u00E0n h\u00ECnh\">\n <sd-icon name=\"fullscreen_exit\"></sd-icon>\n </button>\n }\n <button type=\"button\" class=\"c-action--white\" (click)=\"close()\" mat-icon-button title=\"\u0110\u00F3ng\">\n <sd-icon name=\"close\"></sd-icon>\n </button>\n </div>\n </div>\n <div class=\"modal-resizable__body\">\n <div class=\"modal-resizable__content\">\n <ng-content select=\"[sdBody]\"></ng-content>\n </div>\n </div>\n <div class=\"modal-resizable__footer\">\n <div class=\"modal-resizable__footer-left\"><ng-content select=\"[sdFooterLeft]\"></ng-content></div>\n <div class=\"modal-resizable__footer-right\"><ng-content select=\"[sdFooterRight]\"></ng-content></div>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-primary-contrast{color:var(--sd-primary-contrast)!important}.bg-primary-contrast{background:var(--sd-primary-contrast)!important}.border-primary-contrast{border-color:var(--sd-primary-contrast)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-secondary-contrast{color:var(--sd-secondary-contrast)!important}.bg-secondary-contrast{background:var(--sd-secondary-contrast)!important}.border-secondary-contrast{border-color:var(--sd-secondary-contrast)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-info-contrast{color:var(--sd-info-contrast)!important}.bg-info-contrast{background:var(--sd-info-contrast)!important}.border-info-contrast{border-color:var(--sd-info-contrast)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-success-contrast{color:var(--sd-success-contrast)!important}.bg-success-contrast{background:var(--sd-success-contrast)!important}.border-success-contrast{border-color:var(--sd-success-contrast)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-warning-contrast{color:var(--sd-warning-contrast)!important}.bg-warning-contrast{background:var(--sd-warning-contrast)!important}.border-warning-contrast{border-color:var(--sd-warning-contrast)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-error-contrast{color:var(--sd-error-contrast)!important}.bg-error-contrast{background:var(--sd-error-contrast)!important}.border-error-contrast{border-color:var(--sd-error-contrast)!important}.text-surface{color:var(--sd-surface)!important}.bg-surface{background:var(--sd-surface)!important}.border-surface{border-color:var(--sd-surface)!important}.text-surface-muted{color:var(--sd-surface-muted)!important}.bg-surface-muted{background:var(--sd-surface-muted)!important}.border-surface-muted{border-color:var(--sd-surface-muted)!important}.text-text{color:var(--sd-text)!important}.bg-text{background:var(--sd-text)!important}.border-text{border-color:var(--sd-text)!important}.text-text-secondary{color:var(--sd-text-secondary)!important}.bg-text-secondary{background:var(--sd-text-secondary)!important}.border-text-secondary{border-color:var(--sd-text-secondary)!important}.text-text-muted{color:var(--sd-text-muted)!important}.bg-text-muted{background:var(--sd-text-muted)!important}.border-text-muted{border-color:var(--sd-text-muted)!important}.text-border{color:var(--sd-border)!important}.bg-border{background:var(--sd-border)!important}.border-border{border-color:var(--sd-border)!important}.text-border-strong{color:var(--sd-border-strong)!important}.bg-border-strong{background:var(--sd-border-strong)!important}.border-border-strong{border-color:var(--sd-border-strong)!important}.text-disabled-bg{color:var(--sd-disabled-bg)!important}.bg-disabled-bg{background:var(--sd-disabled-bg)!important}.border-disabled-bg{border-color:var(--sd-disabled-bg)!important}.text-disabled-text{color:var(--sd-disabled-text)!important}.bg-disabled-text{background:var(--sd-disabled-text)!important}.border-disabled-text{border-color:var(--sd-disabled-text)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.text-secondary{color:var(--sd-text-secondary)!important}.text-muted{color:var(--sd-text-muted)!important}.text-body{color:var(--sd-text)!important}.bg-muted{background:var(--sd-surface-muted)!important}.modal-resizable{position:fixed;right:12px;top:80px;bottom:0;background-color:#fff;z-index:998;display:flex;flex-direction:column;opacity:0;visibility:hidden;transform:translate3d(0,100%,0);transition:all .3s ease-in-out;pointer-events:none;box-shadow:0 .4px .8px #0000001a,0 3px 6px #0003;border-radius:4px 4px 0 0}.modal-resizable button.c-action--white:focus{outline:none!important}.modal-resizable.c-minium-of-list{top:auto;bottom:0;opacity:1;visibility:visible;pointer-events:all;transform:translateZ(0)}.modal-resizable.c-minium{top:auto!important;z-index:998!important}.modal-resizable.c-minium .modal-resizable__body,.modal-resizable.c-minium .modal-resizable__footer{display:none}.modal-resizable.c-fullscreen{top:0;z-index:999}.c-action{color:var(--sd-secondary)}.c-action:focus{outline:none}.c-action--white.c-min{margin-bottom:-12px}.c-action--white.c-max{margin-top:-12px}.modal-resizable__icon{border:0;background:transparent;color:#212121;overflow:hidden;outline:none}.modal-resizable__icon sd-icon{float:left}.modal-resizable__header{display:flex;align-items:center;flex-wrap:nowrap;gap:4px;min-height:40px;padding:0 16px;background-color:#5d6165;border-radius:4px 4px 0 0}.modal-resizable__body{flex:1;position:relative}.modal-resizable__content{position:absolute;padding:8px 16px 16px;inset:0;overflow:auto}.modal-resizable__footer{border-top:1px solid #dde0e5;padding:5px 16px;display:flex;align-items:center;justify-content:space-between;gap:8px}.modal-resizable__footer-left,.modal-resizable__footer-right{display:inline-flex;align-items:center;gap:8px}.modal-resizable__footer-right{margin-left:auto}.modal-resizable--active{opacity:1;visibility:visible;pointer-events:all;transform:translateZ(0)}.modal-resizable__title{flex:1 1 0;min-width:0;font-size:14px;line-height:20px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-resizable__title>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-resizable__actions{display:flex;align-items:center;flex:0 0 auto;gap:4px;margin-left:auto}.modal-resizable__actions .c-action--white{flex:0 0 auto;width:32px;height:32px;line-height:32px}.modal-resizable__actions .c-action--white.c-min,.modal-resizable__actions .c-action--white.c-max{margin:0}\n"] }]
305
+ args: [{ selector: 'sd-modal-resizable', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [SdIcon, CommonModule, MatDialogModule, MatButtonModule, PortalModule], template: "<ng-template cdkPortal>\n <div\n [id]=\"id\"\n class=\"modal-resizable\"\n [style.width]=\"width()\"\n [class.modal-resizable--active]=\"isOpened()\"\n [class.modal-resizable--loading]=\"isLoading()\"\n [class.c-minium]=\"isMinimum()\"\n [class.c-fullscreen]=\"isMaximum()\"\n (mouseover)=\"onFocus()\"\n (focus)=\"onFocus()\"\n (mouseout)=\"onBlur()\"\n (blur)=\"onBlur()\">\n @if (isOpened()) {\n <div class=\"modal-resizable__header\">\n <div class=\"modal-resizable__title\">\n <ng-content select=\"[sdTitle]\"></ng-content>\n </div>\n <div class=\"modal-resizable__actions\">\n @if (!isMinimum()) {\n <button type=\"button\" class=\"c-action--white c-min\" (click)=\"minimize()\" mat-icon-button title=\"Thu nh\u1ECF\">\n <sd-icon name=\"remove\"></sd-icon>\n </button>\n }\n @if (isMinimum()) {\n <button type=\"button\" class=\"c-action--white c-max\" (click)=\"maximize()\" mat-icon-button title=\"Ph\u00F3ng to\">\n <sd-icon name=\"remove\"></sd-icon>\n </button>\n }\n @if (!isMaximum()) {\n <button type=\"button\" class=\"c-action--white\" (click)=\"toggleMaximum()\" mat-icon-button title=\"To\u00E0n m\u00E0n h\u00ECnh\">\n <sd-icon name=\"open_in_full\"></sd-icon>\n </button>\n }\n @if (isMaximum()) {\n <button type=\"button\" class=\"c-action--white\" (click)=\"toggleMaximum()\" mat-icon-button title=\"Tho\u00E1t to\u00E0n m\u00E0n h\u00ECnh\">\n <sd-icon name=\"fullscreen_exit\"></sd-icon>\n </button>\n }\n <button type=\"button\" class=\"c-action--white\" (click)=\"close()\" mat-icon-button title=\"\u0110\u00F3ng\">\n <sd-icon name=\"close\"></sd-icon>\n </button>\n </div>\n </div>\n <div class=\"modal-resizable__body\">\n <div class=\"modal-resizable__content\">\n <ng-content select=\"[sdBody]\"></ng-content>\n </div>\n </div>\n <div class=\"modal-resizable__footer\">\n <div class=\"modal-resizable__footer-left\"><ng-content select=\"[sdFooterLeft]\"></ng-content></div>\n <div class=\"modal-resizable__footer-right\"><ng-content select=\"[sdFooterRight]\"></ng-content></div>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-primary-contrast{color:var(--sd-primary-contrast)!important}.bg-primary-contrast{background:var(--sd-primary-contrast)!important}.border-primary-contrast{border-color:var(--sd-primary-contrast)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-secondary-contrast{color:var(--sd-secondary-contrast)!important}.bg-secondary-contrast{background:var(--sd-secondary-contrast)!important}.border-secondary-contrast{border-color:var(--sd-secondary-contrast)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-info-contrast{color:var(--sd-info-contrast)!important}.bg-info-contrast{background:var(--sd-info-contrast)!important}.border-info-contrast{border-color:var(--sd-info-contrast)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-success-contrast{color:var(--sd-success-contrast)!important}.bg-success-contrast{background:var(--sd-success-contrast)!important}.border-success-contrast{border-color:var(--sd-success-contrast)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-warning-contrast{color:var(--sd-warning-contrast)!important}.bg-warning-contrast{background:var(--sd-warning-contrast)!important}.border-warning-contrast{border-color:var(--sd-warning-contrast)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-error-contrast{color:var(--sd-error-contrast)!important}.bg-error-contrast{background:var(--sd-error-contrast)!important}.border-error-contrast{border-color:var(--sd-error-contrast)!important}.text-surface{color:var(--sd-surface)!important}.bg-surface{background:var(--sd-surface)!important}.border-surface{border-color:var(--sd-surface)!important}.text-surface-muted{color:var(--sd-surface-muted)!important}.bg-surface-muted{background:var(--sd-surface-muted)!important}.border-surface-muted{border-color:var(--sd-surface-muted)!important}.text-text{color:var(--sd-text)!important}.bg-text{background:var(--sd-text)!important}.border-text{border-color:var(--sd-text)!important}.text-text-secondary{color:var(--sd-text-secondary)!important}.bg-text-secondary{background:var(--sd-text-secondary)!important}.border-text-secondary{border-color:var(--sd-text-secondary)!important}.text-text-muted{color:var(--sd-text-muted)!important}.bg-text-muted{background:var(--sd-text-muted)!important}.border-text-muted{border-color:var(--sd-text-muted)!important}.text-border{color:var(--sd-border)!important}.bg-border{background:var(--sd-border)!important}.border-border{border-color:var(--sd-border)!important}.text-border-strong{color:var(--sd-border-strong)!important}.bg-border-strong{background:var(--sd-border-strong)!important}.border-border-strong{border-color:var(--sd-border-strong)!important}.text-disabled-bg{color:var(--sd-disabled-bg)!important}.bg-disabled-bg{background:var(--sd-disabled-bg)!important}.border-disabled-bg{border-color:var(--sd-disabled-bg)!important}.text-disabled-text{color:var(--sd-disabled-text)!important}.bg-disabled-text{background:var(--sd-disabled-text)!important}.border-disabled-text{border-color:var(--sd-disabled-text)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}.text-secondary{color:var(--sd-text-secondary)!important}.text-muted{color:var(--sd-text-muted)!important}.text-body{color:var(--sd-text)!important}.bg-muted{background:var(--sd-surface-muted)!important}.modal-resizable{position:fixed;right:12px;top:80px;bottom:0;background-color:#fff;z-index:998;display:flex;flex-direction:column;opacity:0;visibility:hidden;transform:translate3d(0,100%,0);transition:all .3s ease-in-out;pointer-events:none;box-shadow:0 .4px .8px #0000001a,0 3px 6px #0003;border-radius:4px 4px 0 0}.modal-resizable button.c-action--white:focus{outline:none!important}.modal-resizable button.c-action--white:focus-visible{outline:2px solid #fff!important;outline-offset:2px}.modal-resizable.c-minium-of-list{top:auto;bottom:0;opacity:1;visibility:visible;pointer-events:all;transform:translateZ(0)}.modal-resizable.c-minium{top:auto!important;z-index:998!important}.modal-resizable.c-minium .modal-resizable__body,.modal-resizable.c-minium .modal-resizable__footer{display:none}.modal-resizable.c-fullscreen{top:0;z-index:999}.c-action{color:var(--sd-secondary)}.c-action:focus{outline:none}.c-action:focus-visible{outline:2px solid var(--sd-primary, #005cbb);outline-offset:2px}.c-action--white.c-min{margin-bottom:-12px}.c-action--white.c-max{margin-top:-12px}.modal-resizable__icon{border:0;background:transparent;color:#212121;overflow:hidden;outline:none}.modal-resizable__icon:focus-visible{outline:2px solid var(--sd-primary, #005cbb);outline-offset:2px}.modal-resizable__icon sd-icon{float:left}.modal-resizable__header{display:flex;align-items:center;flex-wrap:nowrap;gap:4px;min-height:40px;padding:0 16px;background-color:#5d6165;border-radius:4px 4px 0 0}.modal-resizable__body{flex:1;position:relative}.modal-resizable__content{position:absolute;padding:8px 16px 16px;inset:0;overflow:auto}.modal-resizable__footer{border-top:1px solid #dde0e5;padding:5px 16px;display:flex;align-items:center;justify-content:space-between;gap:8px}.modal-resizable__footer-left,.modal-resizable__footer-right{display:inline-flex;align-items:center;gap:8px}.modal-resizable__footer-right{margin-left:auto}.modal-resizable--active{opacity:1;visibility:visible;pointer-events:all;transform:translateZ(0)}.modal-resizable__title{flex:1 1 0;min-width:0;font-size:14px;line-height:20px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-resizable__title>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modal-resizable__actions{display:flex;align-items:center;flex:0 0 auto;gap:4px;margin-left:auto}.modal-resizable__actions .c-action--white{flex:0 0 auto;width:32px;height:32px;line-height:32px}.modal-resizable__actions .c-action--white.c-min,.modal-resizable__actions .c-action--white.c-max{margin:0}\n"] }]
150
306
  }], ctorParameters: () => [] });
151
307
 
152
308
  /**