@koobiq/components 18.32.0 → 18.34.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 (331) hide show
  1. package/accordion/accordion-trigger.component.scss +2 -0
  2. package/actions-panel/actions-panel-config.d.ts +4 -3
  3. package/actions-panel/actions-panel-container.scss +0 -6
  4. package/actions-panel/actions-panel-ref.d.ts +13 -0
  5. package/actions-panel/actions-panel.d.ts +1 -7
  6. package/clamped-text/clamped-text.d.ts +61 -0
  7. package/clamped-text/clamped-text.scss +17 -0
  8. package/clamped-text/constants.d.ts +14 -0
  9. package/clamped-text/index.d.ts +3 -0
  10. package/clamped-text/module.d.ts +7 -0
  11. package/content-panel/content-panel-aside.scss +9 -0
  12. package/content-panel/content-panel-body.scss +9 -0
  13. package/content-panel/content-panel-container.scss +32 -0
  14. package/content-panel/content-panel-footer.scss +5 -0
  15. package/content-panel/content-panel-header.scss +30 -0
  16. package/content-panel/content-panel-tokens.scss +9 -0
  17. package/content-panel/content-panel.d.ts +149 -0
  18. package/content-panel/content-panel.scss +25 -0
  19. package/content-panel/index.d.ts +3 -0
  20. package/content-panel/module.d.ts +7 -0
  21. package/content-panel/resizable.d.ts +70 -0
  22. package/core/locales/en-US.d.ts +4 -0
  23. package/core/locales/es-LA.d.ts +4 -0
  24. package/core/locales/fa-IR.d.ts +4 -0
  25. package/core/locales/locale-service.d.ts +28 -0
  26. package/core/locales/pt-BR.d.ts +4 -0
  27. package/core/locales/ru-RU.d.ts +4 -0
  28. package/core/locales/tk-TM.d.ts +4 -0
  29. package/core/locales/types.d.ts +5 -0
  30. package/core/locales/zh-CN.d.ts +4 -0
  31. package/core/option/action-container.d.ts +5 -0
  32. package/core/option/action-container.scss +45 -0
  33. package/core/option/action.d.ts +1 -4
  34. package/core/option/action.scss +13 -12
  35. package/core/option/index.d.ts +1 -0
  36. package/core/option/option.d.ts +4 -3
  37. package/core/styles/common/_select.scss +55 -15
  38. package/core/styles/common/_tokens.scss +2 -0
  39. package/datepicker/calendar.component.d.ts +1 -1
  40. package/datepicker/datepicker-input.directive.d.ts +1 -1
  41. package/datepicker/datepicker-toggle.component.d.ts +1 -1
  42. package/datepicker/datepicker.component.d.ts +2 -2
  43. package/dynamic-translation/dynamic-translation.d.ts +72 -0
  44. package/dynamic-translation/index.d.ts +2 -0
  45. package/dynamic-translation/module.d.ts +7 -0
  46. package/esm2022/accordion/accordion-trigger.component.mjs +2 -2
  47. package/esm2022/accordion/accordion.component.mjs +2 -2
  48. package/esm2022/actions-panel/actions-panel-config.mjs +1 -1
  49. package/esm2022/actions-panel/actions-panel-container.mjs +7 -7
  50. package/esm2022/actions-panel/actions-panel-ref.mjs +17 -1
  51. package/esm2022/actions-panel/actions-panel.mjs +34 -24
  52. package/esm2022/alert/alert.component.mjs +2 -2
  53. package/esm2022/badge/badge.component.mjs +2 -2
  54. package/esm2022/breadcrumbs/breadcrumbs.mjs +3 -6
  55. package/esm2022/button/button.component.mjs +4 -3
  56. package/esm2022/button-toggle/button-toggle.component.mjs +11 -11
  57. package/esm2022/checkbox/checkbox.mjs +2 -2
  58. package/esm2022/clamped-text/clamped-text.mjs +202 -0
  59. package/esm2022/clamped-text/constants.mjs +20 -0
  60. package/esm2022/clamped-text/index.mjs +4 -0
  61. package/esm2022/clamped-text/koobiq-components-clamped-text.mjs +5 -0
  62. package/esm2022/clamped-text/module.mjs +19 -0
  63. package/esm2022/code-block/code-block.mjs +3 -3
  64. package/esm2022/content-panel/content-panel.mjs +432 -0
  65. package/esm2022/content-panel/index.mjs +4 -0
  66. package/esm2022/content-panel/koobiq-components-content-panel.mjs +5 -0
  67. package/esm2022/content-panel/module.mjs +42 -0
  68. package/esm2022/content-panel/resizable.mjs +138 -0
  69. package/esm2022/core/locales/en-US.mjs +5 -1
  70. package/esm2022/core/locales/es-LA.mjs +5 -1
  71. package/esm2022/core/locales/fa-IR.mjs +5 -1
  72. package/esm2022/core/locales/pt-BR.mjs +5 -1
  73. package/esm2022/core/locales/ru-RU.mjs +5 -1
  74. package/esm2022/core/locales/tk-TM.mjs +5 -1
  75. package/esm2022/core/locales/types.mjs +1 -1
  76. package/esm2022/core/locales/zh-CN.mjs +5 -1
  77. package/esm2022/core/option/action-container.mjs +23 -0
  78. package/esm2022/core/option/action.mjs +16 -30
  79. package/esm2022/core/option/index.mjs +2 -1
  80. package/esm2022/core/option/optgroup.mjs +2 -2
  81. package/esm2022/core/option/option.mjs +4 -4
  82. package/esm2022/core/version.mjs +2 -2
  83. package/esm2022/datepicker/calendar-header.component.mjs +6 -3
  84. package/esm2022/datepicker/calendar.component.mjs +9 -9
  85. package/esm2022/datepicker/datepicker-input.directive.mjs +5 -1
  86. package/esm2022/datepicker/datepicker-toggle.component.mjs +8 -8
  87. package/esm2022/datepicker/datepicker.component.mjs +3 -3
  88. package/esm2022/dl/dl.component.mjs +2 -2
  89. package/esm2022/dropdown/dropdown.component.mjs +3 -3
  90. package/esm2022/dynamic-translation/dynamic-translation.mjs +175 -0
  91. package/esm2022/dynamic-translation/index.mjs +3 -0
  92. package/esm2022/dynamic-translation/koobiq-components-dynamic-translation.mjs +5 -0
  93. package/esm2022/dynamic-translation/module.mjs +25 -0
  94. package/esm2022/empty-state/empty-state.component.mjs +2 -2
  95. package/esm2022/file-upload/file-drop.mjs +1 -1
  96. package/esm2022/file-upload/multiple-file-upload.component.mjs +11 -11
  97. package/esm2022/file-upload/single-file-upload.component.mjs +11 -11
  98. package/esm2022/filter-bar/filter-bar.mjs +5 -3
  99. package/esm2022/filter-bar/filter-bar.types.mjs +1 -1
  100. package/esm2022/filter-bar/filter-refresher.mjs +5 -5
  101. package/esm2022/filter-bar/filter-reset.mjs +4 -3
  102. package/esm2022/filter-bar/filter-search.mjs +11 -11
  103. package/esm2022/filter-bar/filters.mjs +4 -3
  104. package/esm2022/filter-bar/pipe-add.mjs +6 -6
  105. package/esm2022/filter-bar/pipes/base-pipe.mjs +8 -3
  106. package/esm2022/filter-bar/pipes/pipe-button.mjs +7 -7
  107. package/esm2022/filter-bar/pipes/pipe-date.mjs +11 -3
  108. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +11 -3
  109. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +4 -10
  110. package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +10 -9
  111. package/esm2022/filter-bar/pipes/pipe-readonly.mjs +7 -7
  112. package/esm2022/filter-bar/pipes/pipe-select.mjs +3 -4
  113. package/esm2022/filter-bar/pipes/pipe-text.mjs +8 -2
  114. package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +9 -3
  115. package/esm2022/form-field/cleaner.mjs +16 -11
  116. package/esm2022/form-field/error.mjs +2 -2
  117. package/esm2022/form-field/fieldset.mjs +2 -2
  118. package/esm2022/form-field/form-field.mjs +5 -5
  119. package/esm2022/form-field/hint.mjs +2 -2
  120. package/esm2022/form-field/password-hint.mjs +16 -5
  121. package/esm2022/form-field/password-toggle.mjs +45 -10
  122. package/esm2022/form-field/reactive-password-hint.mjs +20 -19
  123. package/esm2022/form-field/stepper.mjs +9 -9
  124. package/esm2022/icon/icon-button.component.mjs +2 -2
  125. package/esm2022/input/input-number.mjs +15 -10
  126. package/esm2022/input/input-password.mjs +2 -2
  127. package/esm2022/list/list-selection.component.mjs +5 -5
  128. package/esm2022/list/list.component.mjs +2 -2
  129. package/esm2022/list/list.module.mjs +12 -5
  130. package/esm2022/loader-overlay/loader-overlay.component.mjs +2 -2
  131. package/esm2022/markdown/markdown.component.mjs +3 -3
  132. package/esm2022/modal/modal.component.mjs +14 -14
  133. package/esm2022/modal/modal.directive.mjs +7 -5
  134. package/esm2022/navbar/navbar-item.component.mjs +5 -5
  135. package/esm2022/navbar/navbar.component.mjs +2 -2
  136. package/esm2022/navbar/vertical-navbar.component.mjs +2 -2
  137. package/esm2022/popover/popover-confirm.component.mjs +3 -3
  138. package/esm2022/popover/popover.component.mjs +3 -3
  139. package/esm2022/progress-bar/progress-bar.component.mjs +2 -2
  140. package/esm2022/progress-spinner/progress-spinner.component.mjs +2 -2
  141. package/esm2022/radio/radio.component.mjs +2 -2
  142. package/esm2022/risk-level/risk-level.component.mjs +2 -2
  143. package/esm2022/scrollbar/scrollbar.component.mjs +5 -5
  144. package/esm2022/select/select.component.mjs +56 -26
  145. package/esm2022/sidebar/sidebar.component.mjs +46 -27
  146. package/esm2022/sidepanel/sidepanel-container.component.mjs +15 -4
  147. package/esm2022/sidepanel/sidepanel-directives.mjs +5 -5
  148. package/esm2022/sidepanel/sidepanel-ref.mjs +8 -6
  149. package/esm2022/splitter/splitter.component.mjs +1 -1
  150. package/esm2022/table/table.component.mjs +2 -2
  151. package/esm2022/tabs/tab-body.component.mjs +3 -3
  152. package/esm2022/tabs/tab-group.component.mjs +27 -27
  153. package/esm2022/tabs/tab.component.mjs +4 -4
  154. package/esm2022/tags/tag-input.mjs +2 -2
  155. package/esm2022/tags/tag-list.component.mjs +13 -13
  156. package/esm2022/textarea/textarea.component.mjs +6 -4
  157. package/esm2022/timepicker/timepicker.directive.mjs +1 -1
  158. package/esm2022/timezone/timezone-option.component.mjs +2 -2
  159. package/esm2022/timezone/timezone-select.component.mjs +3 -3
  160. package/esm2022/toast/toast.component.mjs +3 -3
  161. package/esm2022/toggle/toggle.component.mjs +3 -3
  162. package/esm2022/tooltip/tooltip.component.mjs +3 -3
  163. package/esm2022/top-bar/top-bar.mjs +2 -2
  164. package/esm2022/tree/toggle.mjs +2 -2
  165. package/esm2022/tree/tree-option.component.mjs +3 -3
  166. package/esm2022/tree/tree-selection.component.mjs +6 -6
  167. package/esm2022/tree/tree.mjs +2 -2
  168. package/esm2022/tree/tree.module.mjs +8 -5
  169. package/esm2022/tree-select/tree-select.component.mjs +44 -28
  170. package/esm2022/username/constants.mjs +25 -0
  171. package/esm2022/username/index.mjs +6 -0
  172. package/esm2022/username/koobiq-components-username.mjs +5 -0
  173. package/esm2022/username/module.mjs +35 -0
  174. package/esm2022/username/types.mjs +32 -0
  175. package/esm2022/username/username.mjs +129 -0
  176. package/esm2022/username/username.pipe.mjs +92 -0
  177. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  178. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  179. package/fesm2022/koobiq-components-actions-panel.mjs +56 -31
  180. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  181. package/fesm2022/koobiq-components-alert.mjs +2 -2
  182. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  183. package/fesm2022/koobiq-components-badge.mjs +2 -2
  184. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  185. package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -5
  186. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  187. package/fesm2022/koobiq-components-button-toggle.mjs +10 -10
  188. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  189. package/fesm2022/koobiq-components-button.mjs +3 -2
  190. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  191. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  192. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  193. package/fesm2022/koobiq-components-clamped-text.mjs +242 -0
  194. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -0
  195. package/fesm2022/koobiq-components-code-block.mjs +2 -2
  196. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  197. package/fesm2022/koobiq-components-content-panel.mjs +612 -0
  198. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -0
  199. package/fesm2022/koobiq-components-core.mjs +71 -36
  200. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  201. package/fesm2022/koobiq-components-datepicker.mjs +26 -19
  202. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  203. package/fesm2022/koobiq-components-dl.mjs +2 -2
  204. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  205. package/fesm2022/koobiq-components-dropdown.mjs +2 -2
  206. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  207. package/fesm2022/koobiq-components-dynamic-translation.mjs +204 -0
  208. package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -0
  209. package/fesm2022/koobiq-components-empty-state.mjs +2 -2
  210. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  211. package/fesm2022/koobiq-components-file-upload.mjs +20 -20
  212. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  213. package/fesm2022/koobiq-components-filter-bar.mjs +92 -66
  214. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  215. package/fesm2022/koobiq-components-form-field.mjs +108 -57
  216. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  217. package/fesm2022/koobiq-components-icon.mjs +2 -2
  218. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  219. package/fesm2022/koobiq-components-input.mjs +15 -10
  220. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  221. package/fesm2022/koobiq-components-list.mjs +17 -10
  222. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  223. package/fesm2022/koobiq-components-loader-overlay.mjs +2 -2
  224. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  225. package/fesm2022/koobiq-components-markdown.mjs +2 -2
  226. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  227. package/fesm2022/koobiq-components-modal.mjs +19 -17
  228. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  229. package/fesm2022/koobiq-components-navbar.mjs +8 -8
  230. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  231. package/fesm2022/koobiq-components-popover.mjs +4 -4
  232. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  233. package/fesm2022/koobiq-components-progress-bar.mjs +2 -2
  234. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  235. package/fesm2022/koobiq-components-progress-spinner.mjs +2 -2
  236. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  237. package/fesm2022/koobiq-components-radio.mjs +2 -2
  238. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  239. package/fesm2022/koobiq-components-risk-level.mjs +2 -2
  240. package/fesm2022/koobiq-components-risk-level.mjs.map +1 -1
  241. package/fesm2022/koobiq-components-scrollbar.mjs +4 -4
  242. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  243. package/fesm2022/koobiq-components-select.mjs +55 -25
  244. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  245. package/fesm2022/koobiq-components-sidebar.mjs +45 -26
  246. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  247. package/fesm2022/koobiq-components-sidepanel.mjs +24 -12
  248. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  249. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  250. package/fesm2022/koobiq-components-table.mjs +2 -2
  251. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  252. package/fesm2022/koobiq-components-tabs.mjs +31 -31
  253. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  254. package/fesm2022/koobiq-components-tags.mjs +13 -13
  255. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  256. package/fesm2022/koobiq-components-textarea.mjs +5 -3
  257. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  258. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  259. package/fesm2022/koobiq-components-timezone.mjs +4 -4
  260. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  261. package/fesm2022/koobiq-components-toast.mjs +2 -2
  262. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  263. package/fesm2022/koobiq-components-toggle.mjs +2 -2
  264. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  265. package/fesm2022/koobiq-components-tooltip.mjs +2 -2
  266. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  267. package/fesm2022/koobiq-components-top-bar.mjs +2 -2
  268. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  269. package/fesm2022/koobiq-components-tree-select.mjs +43 -27
  270. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  271. package/fesm2022/koobiq-components-tree.mjs +18 -15
  272. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  273. package/fesm2022/koobiq-components-username.mjs +308 -0
  274. package/fesm2022/koobiq-components-username.mjs.map +1 -0
  275. package/file-upload/_file-upload-theme.scss +10 -1
  276. package/file-upload/file-drop.d.ts +1 -1
  277. package/file-upload/multiple-file-upload.component.d.ts +1 -1
  278. package/file-upload/single-file-upload.component.d.ts +2 -2
  279. package/filter-bar/filter-bar.d.ts +2 -0
  280. package/filter-bar/filter-bar.types.d.ts +2 -2
  281. package/filter-bar/pipes/pipe-date.d.ts +3 -1
  282. package/filter-bar/pipes/pipe-datetime.d.ts +3 -1
  283. package/filter-bar/pipes/pipe-multi-select.d.ts +0 -1
  284. package/filter-bar/pipes/pipe-multi-tree-select.d.ts +3 -2
  285. package/filter-bar/pipes/pipe-select.d.ts +0 -1
  286. package/filter-bar/pipes/pipe-tree-select.d.ts +3 -2
  287. package/form-field/_form-field-theme.scss +27 -18
  288. package/form-field/cleaner.d.ts +4 -2
  289. package/form-field/cleaner.scss +6 -2
  290. package/form-field/form-field.scss +6 -2
  291. package/form-field/password-hint.d.ts +7 -0
  292. package/form-field/password-toggle.d.ts +23 -3
  293. package/form-field/password-toggle.scss +4 -8
  294. package/form-field/reactive-password-hint.d.ts +1 -0
  295. package/icon/_icon-button-theme.scss +8 -2
  296. package/list/_list-theme.scss +4 -1
  297. package/list/list.module.d.ts +2 -1
  298. package/list/list.scss +6 -12
  299. package/modal/modal.component.d.ts +6 -6
  300. package/package.json +28 -4
  301. package/popover/popover-confirm.component.d.ts +1 -1
  302. package/popover/popover.component.d.ts +2 -2
  303. package/prebuilt-themes/dark-theme.css +1 -1
  304. package/prebuilt-themes/light-theme.css +1 -1
  305. package/prebuilt-themes/theme.css +1 -1
  306. package/schematics/ng-add/index.js +3 -3
  307. package/scrollbar/scrollbar.component.d.ts +4 -4
  308. package/select/select.component.d.ts +22 -3
  309. package/sidebar/sidebar.component.d.ts +31 -5
  310. package/sidepanel/sidepanel-container.component.d.ts +9 -0
  311. package/sidepanel/sidepanel-ref.d.ts +3 -3
  312. package/splitter/splitter.component.d.ts +2 -2
  313. package/tabs/tab-group.component.d.ts +1 -1
  314. package/tabs/tab.component.d.ts +1 -1
  315. package/tags/tag-input.d.ts +1 -1
  316. package/tags/tag-list.component.d.ts +1 -1
  317. package/timepicker/timepicker.directive.d.ts +1 -1
  318. package/tooltip/tooltip.component.d.ts +2 -2
  319. package/tree/_tree-theme.scss +13 -2
  320. package/tree/tree-option.scss +12 -17
  321. package/tree/tree-selection.component.d.ts +1 -1
  322. package/tree/tree.module.d.ts +1 -1
  323. package/tree-select/tree-select.component.d.ts +9 -2
  324. package/username/constants.d.ts +15 -0
  325. package/username/index.d.ts +5 -0
  326. package/username/module.d.ts +8 -0
  327. package/username/types.d.ts +62 -0
  328. package/username/username-tokens.scss +6 -0
  329. package/username/username.d.ts +68 -0
  330. package/username/username.pipe.d.ts +23 -0
  331. package/username/username.scss +107 -0
@@ -248,6 +248,17 @@ class KbqModalComponent extends KbqModalRef {
248
248
  this.transformOrigin = '0px 0px 0px';
249
249
  this.kbqGetContainer = () => this.overlay.create();
250
250
  }
251
+ // [NOTE] NOT available when using by service!
252
+ // Because ngOnChanges never be called when using by service,
253
+ // here we can't support "kbqContent"(Component) etc. as inputs that initialized dynamically.
254
+ // BUT: User also can change "kbqContent" dynamically to trigger UI changes
255
+ // (provided you don't use Component that needs initializations)
256
+ ngOnChanges(changes) {
257
+ if (changes.kbqVisible) {
258
+ // Do not trigger animation while initializing
259
+ this.handleVisibleStateChange(this.kbqVisible, !changes.kbqVisible.firstChange);
260
+ }
261
+ }
251
262
  ngOnInit() {
252
263
  // Create component along without View
253
264
  if (this.isComponent(this.kbqContent)) {
@@ -272,17 +283,6 @@ class KbqModalComponent extends KbqModalRef {
272
283
  // Register modal when afterOpen/afterClose is stable
273
284
  this.modalControl.registerModal(this);
274
285
  }
275
- // [NOTE] NOT available when using by service!
276
- // Because ngOnChanges never be called when using by service,
277
- // here we can't support "kbqContent"(Component) etc. as inputs that initialized dynamically.
278
- // BUT: User also can change "kbqContent" dynamically to trigger UI changes
279
- // (provided you don't use Component that needs initializations)
280
- ngOnChanges(changes) {
281
- if (changes.kbqVisible) {
282
- // Do not trigger animation while initializing
283
- this.handleVisibleStateChange(this.kbqVisible, !changes.kbqVisible.firstChange);
284
- }
285
- }
286
286
  ngAfterViewInit() {
287
287
  // If using Component, it is the time to attach View while bodyContainer is ready
288
288
  if (this.contentComponentRef) {
@@ -579,14 +579,14 @@ class KbqModalComponent extends KbqModalRef {
579
579
  }
580
580
  }
581
581
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqModalComponent, deps: [{ token: i1.Overlay }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: KbqModalControlService }, { token: i0.ChangeDetectorRef }, { token: i3.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component }); }
582
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: KbqModalComponent, selector: "kbq-modal", inputs: { kbqModalType: "kbqModalType", kbqComponent: "kbqComponent", kbqContent: "kbqContent", kbqComponentParams: "kbqComponentParams", kbqFooter: "kbqFooter", kbqVisible: "kbqVisible", kbqWidth: "kbqWidth", kbqSize: "kbqSize", kbqWrapClassName: "kbqWrapClassName", kbqClassName: "kbqClassName", kbqStyle: "kbqStyle", kbqTitle: "kbqTitle", kbqCloseByESC: "kbqCloseByESC", kbqClosable: "kbqClosable", kbqMask: "kbqMask", kbqMaskClosable: "kbqMaskClosable", kbqMaskStyle: "kbqMaskStyle", kbqBodyStyle: "kbqBodyStyle", kbqOkText: "kbqOkText", kbqOkType: "kbqOkType", kbqRestoreFocus: "kbqRestoreFocus", kbqOkLoading: "kbqOkLoading", kbqOnOk: "kbqOnOk", kbqCancelText: "kbqCancelText", kbqCancelLoading: "kbqCancelLoading", kbqOnCancel: "kbqOnCancel", kbqGetContainer: "kbqGetContainer" }, outputs: { kbqVisibleChange: "kbqVisibleChange", kbqAfterOpen: "kbqAfterOpen", kbqAfterClose: "kbqAfterClose", kbqOnOk: "kbqOnOk", kbqOnCancel: "kbqOnCancel" }, host: { listeners: { "keydown": "onKeyDown($event)" }, classAttribute: "kbq-modal" }, viewQueries: [{ propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, static: true }, { propertyName: "bodyContainer", first: true, predicate: ["bodyContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "modalBody", first: true, predicate: ["modalBody"], descendants: true }, { propertyName: "autoFocusedButtons", predicate: ["autoFocusedButton"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content />\n</ng-template>\n\n<div>\n @if (kbqMask) {\n <div\n class=\"kbq-modal-mask\"\n [class.kbq-modal-mask-hidden]=\"hidden\"\n [ngClass]=\"maskAnimationClassMap\"\n [ngStyle]=\"kbqMaskStyle\"\n ></div>\n }\n\n <div\n tabindex=\"-1\"\n class=\"kbq-modal-wrap {{ kbqWrapClassName }}\"\n [style.display]=\"hidden ? 'none' : ''\"\n (mousedown)=\"onClickMask($event)\"\n >\n <div\n #modalContainer\n class=\"kbq-modal-container {{ kbqClassName }} kbq-modal_{{ kbqSize }}\"\n [class.kbq-modal_no-footer]=\"!kbqFooter\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"kbqStyle\"\n [style.transform-origin]=\"transformOrigin\"\n [style.width]=\"kbqWidth | toCssUnit\"\n >\n <div cdkTrapFocus class=\"kbq-modal-content\">\n @switch (true) {\n @case (isModalType('default')) {\n <ng-container [ngTemplateOutlet]=\"tplContentDefault\" />\n }\n @case (isModalType('confirm')) {\n <ng-container [ngTemplateOutlet]=\"tplContentConfirm\" />\n }\n @case (isModalType('custom')) {\n <ng-container [ngTemplateOutlet]=\"tplContentCustom\" />\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer />\n</ng-template>\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n @if (kbqTitle) {\n <div kbq-title class=\"kbq-modal-header\" [class.kbq-modal-body_top-overflow]=\"isTopOverflow\">\n <div class=\"kbq-modal-title\">\n @switch (true) {\n @case (isTemplateRef(kbqTitle)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqTitle)\" />\n }\n @case (isNonEmptyString(kbqTitle)) {\n <div [innerHTML]=\"kbqTitle\"></div>\n }\n }\n </div>\n @if (kbqClosable) {\n <button\n kbq-button\n class=\"kbq-modal-close kbq-button_transparent\"\n [color]=\"'contrast'\"\n (click)=\"onClickCloseBtn()\"\n >\n <i kbq-icon=\"kbq-xmark_16\" [color]=\"componentColors.Contrast\"></i>\n </button>\n }\n </div>\n }\n <div #modalBody class=\"kbq-modal-body kbq-scrollbar\" [ngStyle]=\"kbqBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n @if (!isComponent(kbqContent)) {\n @switch (true) {\n @case (isTemplateRef(kbqContent)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqContent)\" />\n }\n @case (isNonEmptyString(kbqContent)) {\n <div [innerHTML]=\"kbqContent\"></div>\n }\n @default {\n <ng-container [ngTemplateOutlet]=\"tplOriginContent\" />\n }\n }\n }\n </ng-container>\n </div>\n @if (kbqFooter || kbqOkText || kbqCancelText) {\n <div class=\"kbq-modal-footer\" [class.kbq-modal-body_bottom-overflow]=\"isBottomOverflow\">\n @switch (true) {\n @case (isTemplateRef(kbqFooter)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqFooter)\" />\n }\n @case (isNonEmptyString(kbqFooter)) {\n <div [innerHTML]=\"kbqFooter\"></div>\n }\n @case (isModalButtons(kbqFooter)) {\n @for (button of $any(kbqFooter); track button) {\n @if (getButtonCallableProp(button, 'show')) {\n <button\n kbq-button\n [attr.autofocus]=\"button.autoFocus\"\n [attr.kbq-modal-main-action]=\"button.kbqModalMainAction\"\n [class.kbq-progress]=\"getButtonCallableProp(button, 'loading')\"\n [color]=\"button.type\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n (click)=\"onButtonClick(button)\"\n >\n {{ button.label }}\n </button>\n }\n }\n }\n @default {\n @if (kbqOkText) {\n <button\n kbq-button\n [attr.autofocus]=\"true\"\n [color]=\"componentColors.Contrast\"\n (click)=\"onClickOkCancel('ok')\"\n >\n {{ okText }}\n </button>\n }\n @if (kbqCancelText) {\n <button kbq-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n }\n }\n }\n </div>\n }\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"kbq-modal-body\" [ngStyle]=\"kbqBodyStyle\">\n <ng-container #bodyContainer>\n @if (!isComponent(kbqContent)) {\n @switch (true) {\n @case (isTemplateRef(kbqContent)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqContent)\" />\n }\n @case (isNonEmptyString(kbqContent)) {\n <div [innerHTML]=\"kbqContent\"></div>\n }\n @default {\n <ng-container [ngTemplateOutlet]=\"tplOriginContent\" />\n }\n }\n }\n </ng-container>\n </div>\n @if (kbqOkText || kbqCancelText) {\n <div class=\"kbq-confirm-footer\">\n @if (kbqOkText) {\n <button kbq-button [attr.autofocus]=\"true\" [color]=\"kbqOkType\" (click)=\"onClickOkCancel('ok')\">\n {{ okText }}\n </button>\n }\n @if (kbqCancelText) {\n <button kbq-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n }\n </div>\n }\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".kbq-confirm .kbq-modal-close{display:none}.kbq-confirm .kbq-confirm-footer{display:flex;gap:var(--kbq-modal-size-footer-content-gap-horizontal)}.kbq-modal-container{box-sizing:border-box;position:relative;top:var(--kbq-size-5xl);border-radius:var(--kbq-modal-size-border-radius);width:auto;margin:0 auto;list-style:none}.kbq-modal-container.zoom-enter,.kbq-modal-container.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.kbq-modal-container.kbq-modal_small{width:var(--kbq-modal-size-small-width)}.kbq-modal-container.kbq-modal_medium{width:var(--kbq-modal-size-medium-width)}.kbq-modal-container.kbq-modal_large{width:var(--kbq-modal-size-large-width)}.kbq-modal-container .kbq-modal-close{position:absolute;top:var(--kbq-size-l);right:var(--kbq-size-l)}.kbq-modal-wrap{position:fixed;inset:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.kbq-modal-content{position:relative;border-radius:var(--kbq-modal-size-border-radius);background-clip:padding-box}.kbq-modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--kbq-modal-size-header-padding-vertical) var(--kbq-modal-size-header-padding-right) var(--kbq-modal-size-header-padding-vertical) var(--kbq-modal-size-header-padding-left)}.kbq-modal-header+.kbq-modal-body{padding-top:var(--kbq-modal-size-content-padding-top)}.kbq-modal-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;padding-top:var(--kbq-size-3xs);padding-bottom:var(--kbq-size-3xs)}.kbq-modal-body{display:block;overflow-y:auto;max-height:calc(100vh - 260px);padding:var(--kbq-modal-size-content-padding-top-without-header) var(--kbq-modal-size-content-padding-horizontal) var(--kbq-modal-size-content-padding-bottom) var(--kbq-modal-size-content-padding-horizontal);word-wrap:break-word}.kbq-modal-body>*{position:relative}.kbq-modal-footer,.kbq-confirm-footer{display:flex;align-items:center;padding:var(--kbq-modal-size-footer-padding-vertical) var(--kbq-modal-size-footer-padding-horizontal);gap:var(--kbq-modal-size-footer-content-gap-horizontal)}.kbq-modal-mask{position:fixed;inset:0;height:100%}.kbq-modal-mask.kbq-modal-mask-hidden{display:none}.kbq-modal-open{overflow:hidden}.kbq-modal-container{background:var(--kbq-modal-container-background);box-shadow:var(--kbq-modal-container-shadow)}.kbq-modal-container .kbq-modal-header .kbq-modal-title{color:var(--kbq-modal-header-text-color)}.kbq-modal-container .kbq-modal-header .kbq-modal-close{color:var(--kbq-modal-close-button-color)}.kbq-modal-container .kbq-modal-content{color:var(--kbq-modal-content-text-color)}.kbq-modal-container .kbq-modal-header.kbq-modal-body_top-overflow{box-shadow:var(--kbq-shadow-overflow-normal-bottom)}.kbq-modal-container .kbq-modal-footer.kbq-modal-body_bottom-overflow{box-shadow:var(--kbq-shadow-overflow-normal-top)}.kbq-modal-mask{background-color:var(--kbq-modal-overlay-background)}.kbq-modal-title{font-size:var(--kbq-typography-title-font-size);font-weight:var(--kbq-typography-title-font-weight);line-height:var(--kbq-typography-title-line-height);font-family:var(--kbq-typography-title-font-family);text-transform:var(--kbq-typography-title-text-transform);font-feature-settings:var(--kbq-typography-title-font-feature-settings);letter-spacing:var(--kbq-typography-title-letter-spacing)}.kbq-modal-body{font-size:var(--kbq-typography-text-normal-font-size);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-modal{--kbq-modal-size-small-width: 400px;--kbq-modal-size-medium-width: 640px;--kbq-modal-size-large-width: 960px;--kbq-modal-size-border-radius: var(--kbq-size-s);--kbq-modal-size-header-padding-vertical: var(--kbq-size-l);--kbq-modal-size-header-padding-left: var(--kbq-size-xxl);--kbq-modal-size-header-padding-right: var(--kbq-size-6xl);--kbq-modal-size-close-button-margin-left: var(--kbq-size-s);--kbq-modal-size-content-padding-horizontal: var(--kbq-size-xxl);--kbq-modal-size-content-padding-top: 0;--kbq-modal-size-content-padding-bottom: var(--kbq-size-s);--kbq-modal-size-content-padding-top-without-header: var(--kbq-size-xxl);--kbq-modal-size-content-padding-bottom-without-footer: var(--kbq-size-4xl);--kbq-modal-size-footer-padding-horizontal: var(--kbq-size-xxl);--kbq-modal-size-footer-padding-vertical: var(--kbq-size-xl);--kbq-modal-size-footer-content-gap-horizontal: var(--kbq-size-l);--kbq-modal-overlay-background: var(--kbq-background-overlay);--kbq-modal-container-background: var(--kbq-background-card);--kbq-modal-container-shadow: var(--kbq-shadow-overlay);--kbq-modal-close-button-color: var(--kbq-icon-contrast);--kbq-modal-header-text-color: var(--kbq-foreground-contrast);--kbq-modal-content-text-color: var(--kbq-foreground-contrast)}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i4.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i4.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "component", type: i5.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "directive", type: i6.KbqTitleDirective, selector: "[kbq-title]", exportAs: ["kbqTitle"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: CssUnitPipe, name: "toCssUnit" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
582
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: KbqModalComponent, selector: "kbq-modal", inputs: { kbqModalType: "kbqModalType", kbqComponent: "kbqComponent", kbqContent: "kbqContent", kbqComponentParams: "kbqComponentParams", kbqFooter: "kbqFooter", kbqVisible: "kbqVisible", kbqWidth: "kbqWidth", kbqSize: "kbqSize", kbqWrapClassName: "kbqWrapClassName", kbqClassName: "kbqClassName", kbqStyle: "kbqStyle", kbqTitle: "kbqTitle", kbqCloseByESC: "kbqCloseByESC", kbqClosable: "kbqClosable", kbqMask: "kbqMask", kbqMaskClosable: "kbqMaskClosable", kbqMaskStyle: "kbqMaskStyle", kbqBodyStyle: "kbqBodyStyle", kbqOkText: "kbqOkText", kbqOkType: "kbqOkType", kbqRestoreFocus: "kbqRestoreFocus", kbqOkLoading: "kbqOkLoading", kbqOnOk: "kbqOnOk", kbqCancelText: "kbqCancelText", kbqCancelLoading: "kbqCancelLoading", kbqOnCancel: "kbqOnCancel", kbqGetContainer: "kbqGetContainer" }, outputs: { kbqVisibleChange: "kbqVisibleChange", kbqAfterOpen: "kbqAfterOpen", kbqAfterClose: "kbqAfterClose", kbqOnOk: "kbqOnOk", kbqOnCancel: "kbqOnCancel" }, host: { listeners: { "keydown": "onKeyDown($event)" }, classAttribute: "kbq-modal" }, viewQueries: [{ propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, static: true }, { propertyName: "bodyContainer", first: true, predicate: ["bodyContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "modalBody", first: true, predicate: ["modalBody"], descendants: true }, { propertyName: "autoFocusedButtons", predicate: ["autoFocusedButton"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content />\n</ng-template>\n\n<div>\n @if (kbqMask) {\n <div\n class=\"kbq-modal-mask\"\n [class.kbq-modal-mask-hidden]=\"hidden\"\n [ngClass]=\"maskAnimationClassMap\"\n [ngStyle]=\"kbqMaskStyle\"\n ></div>\n }\n\n <div\n tabindex=\"-1\"\n class=\"kbq-modal-wrap {{ kbqWrapClassName }}\"\n [style.display]=\"hidden ? 'none' : ''\"\n (mousedown)=\"onClickMask($event)\"\n >\n <div\n #modalContainer\n class=\"kbq-modal-container {{ kbqClassName }} kbq-modal_{{ kbqSize }}\"\n [class.kbq-modal_no-footer]=\"!kbqFooter\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"kbqStyle\"\n [style.transform-origin]=\"transformOrigin\"\n [style.width]=\"kbqWidth | toCssUnit\"\n >\n <div cdkTrapFocus class=\"kbq-modal-content\">\n @switch (true) {\n @case (isModalType('default')) {\n <ng-container [ngTemplateOutlet]=\"tplContentDefault\" />\n }\n @case (isModalType('confirm')) {\n <ng-container [ngTemplateOutlet]=\"tplContentConfirm\" />\n }\n @case (isModalType('custom')) {\n <ng-container [ngTemplateOutlet]=\"tplContentCustom\" />\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer />\n</ng-template>\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n @if (kbqTitle) {\n <div kbq-title class=\"kbq-modal-header\" [class.kbq-modal-body_top-overflow]=\"isTopOverflow\">\n <div class=\"kbq-modal-title\">\n @switch (true) {\n @case (isTemplateRef(kbqTitle)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqTitle)\" />\n }\n @case (isNonEmptyString(kbqTitle)) {\n <div [innerHTML]=\"kbqTitle\"></div>\n }\n }\n </div>\n @if (kbqClosable) {\n <button\n kbq-button\n type=\"button\"\n class=\"kbq-modal-close kbq-button_transparent\"\n [color]=\"'contrast'\"\n (click)=\"onClickCloseBtn()\"\n >\n <i kbq-icon=\"kbq-xmark_16\" [color]=\"componentColors.Contrast\"></i>\n </button>\n }\n </div>\n }\n <div #modalBody class=\"kbq-modal-body kbq-scrollbar\" [ngStyle]=\"kbqBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n @if (!isComponent(kbqContent)) {\n @switch (true) {\n @case (isTemplateRef(kbqContent)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqContent)\" />\n }\n @case (isNonEmptyString(kbqContent)) {\n <div [innerHTML]=\"kbqContent\"></div>\n }\n @default {\n <ng-container [ngTemplateOutlet]=\"tplOriginContent\" />\n }\n }\n }\n </ng-container>\n </div>\n @if (kbqFooter || kbqOkText || kbqCancelText) {\n <div class=\"kbq-modal-footer\" [class.kbq-modal-body_bottom-overflow]=\"isBottomOverflow\">\n @switch (true) {\n @case (isTemplateRef(kbqFooter)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqFooter)\" />\n }\n @case (isNonEmptyString(kbqFooter)) {\n <div [innerHTML]=\"kbqFooter\"></div>\n }\n @case (isModalButtons(kbqFooter)) {\n @for (button of $any(kbqFooter); track button) {\n @if (getButtonCallableProp(button, 'show')) {\n <button\n kbq-button\n [attr.autofocus]=\"button.autoFocus\"\n [attr.kbq-modal-main-action]=\"button.kbqModalMainAction\"\n [class.kbq-progress]=\"getButtonCallableProp(button, 'loading')\"\n [color]=\"button.type\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n (click)=\"onButtonClick(button)\"\n >\n {{ button.label }}\n </button>\n }\n }\n }\n @default {\n @if (kbqOkText) {\n <button\n kbq-button\n [attr.autofocus]=\"true\"\n [color]=\"componentColors.Contrast\"\n (click)=\"onClickOkCancel('ok')\"\n >\n {{ okText }}\n </button>\n }\n @if (kbqCancelText) {\n <button kbq-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n }\n }\n }\n </div>\n }\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"kbq-modal-body\" [ngStyle]=\"kbqBodyStyle\">\n <ng-container #bodyContainer>\n @if (!isComponent(kbqContent)) {\n @switch (true) {\n @case (isTemplateRef(kbqContent)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqContent)\" />\n }\n @case (isNonEmptyString(kbqContent)) {\n <div [innerHTML]=\"kbqContent\"></div>\n }\n @default {\n <ng-container [ngTemplateOutlet]=\"tplOriginContent\" />\n }\n }\n }\n </ng-container>\n </div>\n @if (kbqOkText || kbqCancelText) {\n <div class=\"kbq-confirm-footer\">\n @if (kbqOkText) {\n <button kbq-button [attr.autofocus]=\"true\" [color]=\"kbqOkType\" (click)=\"onClickOkCancel('ok')\">\n {{ okText }}\n </button>\n }\n @if (kbqCancelText) {\n <button kbq-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n }\n </div>\n }\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".kbq-confirm .kbq-modal-close{display:none}.kbq-confirm .kbq-confirm-footer{display:flex;gap:var(--kbq-modal-size-footer-content-gap-horizontal)}.kbq-modal-container{box-sizing:border-box;position:relative;top:var(--kbq-size-5xl);border-radius:var(--kbq-modal-size-border-radius);width:auto;margin:0 auto;list-style:none}.kbq-modal-container.zoom-enter,.kbq-modal-container.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.kbq-modal-container.kbq-modal_small{width:var(--kbq-modal-size-small-width)}.kbq-modal-container.kbq-modal_medium{width:var(--kbq-modal-size-medium-width)}.kbq-modal-container.kbq-modal_large{width:var(--kbq-modal-size-large-width)}.kbq-modal-container .kbq-modal-close{position:absolute;top:var(--kbq-size-l);right:var(--kbq-size-l)}.kbq-modal-wrap{position:fixed;inset:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.kbq-modal-content{position:relative;border-radius:var(--kbq-modal-size-border-radius);background-clip:padding-box}.kbq-modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--kbq-modal-size-header-padding-vertical) var(--kbq-modal-size-header-padding-right) var(--kbq-modal-size-header-padding-vertical) var(--kbq-modal-size-header-padding-left)}.kbq-modal-header+.kbq-modal-body{padding-top:var(--kbq-modal-size-content-padding-top)}.kbq-modal-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;padding-top:var(--kbq-size-3xs);padding-bottom:var(--kbq-size-3xs)}.kbq-modal-body{display:block;overflow-y:auto;max-height:calc(100vh - 260px);padding:var(--kbq-modal-size-content-padding-top-without-header) var(--kbq-modal-size-content-padding-horizontal) var(--kbq-modal-size-content-padding-bottom) var(--kbq-modal-size-content-padding-horizontal);word-wrap:break-word}.kbq-modal-body>*{position:relative}.kbq-modal-footer,.kbq-confirm-footer{display:flex;align-items:center;padding:var(--kbq-modal-size-footer-padding-vertical) var(--kbq-modal-size-footer-padding-horizontal);gap:var(--kbq-modal-size-footer-content-gap-horizontal)}.kbq-modal-mask{position:fixed;inset:0;height:100%}.kbq-modal-mask.kbq-modal-mask-hidden{display:none}.kbq-modal-open{overflow:hidden}.kbq-modal-container{background:var(--kbq-modal-container-background);box-shadow:var(--kbq-modal-container-shadow)}.kbq-modal-container .kbq-modal-header .kbq-modal-title{color:var(--kbq-modal-header-text-color)}.kbq-modal-container .kbq-modal-header .kbq-modal-close{color:var(--kbq-modal-close-button-color)}.kbq-modal-container .kbq-modal-content{color:var(--kbq-modal-content-text-color)}.kbq-modal-container .kbq-modal-header.kbq-modal-body_top-overflow{box-shadow:var(--kbq-shadow-overflow-normal-bottom)}.kbq-modal-container .kbq-modal-footer.kbq-modal-body_bottom-overflow{box-shadow:var(--kbq-shadow-overflow-normal-top)}.kbq-modal-mask{background-color:var(--kbq-modal-overlay-background)}.kbq-modal-title{font-size:var(--kbq-typography-title-font-size);font-style:var(--kbq-typography-title-font-style);font-weight:var(--kbq-typography-title-font-weight);line-height:var(--kbq-typography-title-line-height);font-family:var(--kbq-typography-title-font-family);text-transform:var(--kbq-typography-title-text-transform);font-feature-settings:var(--kbq-typography-title-font-feature-settings);letter-spacing:var(--kbq-typography-title-letter-spacing)}.kbq-modal-body{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-modal{--kbq-modal-size-small-width: 400px;--kbq-modal-size-medium-width: 640px;--kbq-modal-size-large-width: 960px;--kbq-modal-size-border-radius: var(--kbq-size-s);--kbq-modal-size-header-padding-vertical: var(--kbq-size-l);--kbq-modal-size-header-padding-left: var(--kbq-size-xxl);--kbq-modal-size-header-padding-right: var(--kbq-size-6xl);--kbq-modal-size-close-button-margin-left: var(--kbq-size-s);--kbq-modal-size-content-padding-horizontal: var(--kbq-size-xxl);--kbq-modal-size-content-padding-top: 0;--kbq-modal-size-content-padding-bottom: var(--kbq-size-s);--kbq-modal-size-content-padding-top-without-header: var(--kbq-size-xxl);--kbq-modal-size-content-padding-bottom-without-footer: var(--kbq-size-4xl);--kbq-modal-size-footer-padding-horizontal: var(--kbq-size-xxl);--kbq-modal-size-footer-padding-vertical: var(--kbq-size-xl);--kbq-modal-size-footer-content-gap-horizontal: var(--kbq-size-l);--kbq-modal-overlay-background: var(--kbq-background-overlay);--kbq-modal-container-background: var(--kbq-background-card);--kbq-modal-container-shadow: var(--kbq-shadow-overlay);--kbq-modal-close-button-color: var(--kbq-icon-contrast);--kbq-modal-header-text-color: var(--kbq-foreground-contrast);--kbq-modal-content-text-color: var(--kbq-foreground-contrast)}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i4.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i4.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "component", type: i5.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "directive", type: i6.KbqTitleDirective, selector: "[kbq-title]", exportAs: ["kbqTitle"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: CssUnitPipe, name: "toCssUnit" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
583
583
  }
584
584
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqModalComponent, decorators: [{
585
585
  type: Component,
586
586
  args: [{ selector: 'kbq-modal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
587
587
  class: 'kbq-modal',
588
588
  '(keydown)': 'onKeyDown($event)'
589
- }, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content />\n</ng-template>\n\n<div>\n @if (kbqMask) {\n <div\n class=\"kbq-modal-mask\"\n [class.kbq-modal-mask-hidden]=\"hidden\"\n [ngClass]=\"maskAnimationClassMap\"\n [ngStyle]=\"kbqMaskStyle\"\n ></div>\n }\n\n <div\n tabindex=\"-1\"\n class=\"kbq-modal-wrap {{ kbqWrapClassName }}\"\n [style.display]=\"hidden ? 'none' : ''\"\n (mousedown)=\"onClickMask($event)\"\n >\n <div\n #modalContainer\n class=\"kbq-modal-container {{ kbqClassName }} kbq-modal_{{ kbqSize }}\"\n [class.kbq-modal_no-footer]=\"!kbqFooter\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"kbqStyle\"\n [style.transform-origin]=\"transformOrigin\"\n [style.width]=\"kbqWidth | toCssUnit\"\n >\n <div cdkTrapFocus class=\"kbq-modal-content\">\n @switch (true) {\n @case (isModalType('default')) {\n <ng-container [ngTemplateOutlet]=\"tplContentDefault\" />\n }\n @case (isModalType('confirm')) {\n <ng-container [ngTemplateOutlet]=\"tplContentConfirm\" />\n }\n @case (isModalType('custom')) {\n <ng-container [ngTemplateOutlet]=\"tplContentCustom\" />\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer />\n</ng-template>\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n @if (kbqTitle) {\n <div kbq-title class=\"kbq-modal-header\" [class.kbq-modal-body_top-overflow]=\"isTopOverflow\">\n <div class=\"kbq-modal-title\">\n @switch (true) {\n @case (isTemplateRef(kbqTitle)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqTitle)\" />\n }\n @case (isNonEmptyString(kbqTitle)) {\n <div [innerHTML]=\"kbqTitle\"></div>\n }\n }\n </div>\n @if (kbqClosable) {\n <button\n kbq-button\n class=\"kbq-modal-close kbq-button_transparent\"\n [color]=\"'contrast'\"\n (click)=\"onClickCloseBtn()\"\n >\n <i kbq-icon=\"kbq-xmark_16\" [color]=\"componentColors.Contrast\"></i>\n </button>\n }\n </div>\n }\n <div #modalBody class=\"kbq-modal-body kbq-scrollbar\" [ngStyle]=\"kbqBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n @if (!isComponent(kbqContent)) {\n @switch (true) {\n @case (isTemplateRef(kbqContent)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqContent)\" />\n }\n @case (isNonEmptyString(kbqContent)) {\n <div [innerHTML]=\"kbqContent\"></div>\n }\n @default {\n <ng-container [ngTemplateOutlet]=\"tplOriginContent\" />\n }\n }\n }\n </ng-container>\n </div>\n @if (kbqFooter || kbqOkText || kbqCancelText) {\n <div class=\"kbq-modal-footer\" [class.kbq-modal-body_bottom-overflow]=\"isBottomOverflow\">\n @switch (true) {\n @case (isTemplateRef(kbqFooter)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqFooter)\" />\n }\n @case (isNonEmptyString(kbqFooter)) {\n <div [innerHTML]=\"kbqFooter\"></div>\n }\n @case (isModalButtons(kbqFooter)) {\n @for (button of $any(kbqFooter); track button) {\n @if (getButtonCallableProp(button, 'show')) {\n <button\n kbq-button\n [attr.autofocus]=\"button.autoFocus\"\n [attr.kbq-modal-main-action]=\"button.kbqModalMainAction\"\n [class.kbq-progress]=\"getButtonCallableProp(button, 'loading')\"\n [color]=\"button.type\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n (click)=\"onButtonClick(button)\"\n >\n {{ button.label }}\n </button>\n }\n }\n }\n @default {\n @if (kbqOkText) {\n <button\n kbq-button\n [attr.autofocus]=\"true\"\n [color]=\"componentColors.Contrast\"\n (click)=\"onClickOkCancel('ok')\"\n >\n {{ okText }}\n </button>\n }\n @if (kbqCancelText) {\n <button kbq-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n }\n }\n }\n </div>\n }\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"kbq-modal-body\" [ngStyle]=\"kbqBodyStyle\">\n <ng-container #bodyContainer>\n @if (!isComponent(kbqContent)) {\n @switch (true) {\n @case (isTemplateRef(kbqContent)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqContent)\" />\n }\n @case (isNonEmptyString(kbqContent)) {\n <div [innerHTML]=\"kbqContent\"></div>\n }\n @default {\n <ng-container [ngTemplateOutlet]=\"tplOriginContent\" />\n }\n }\n }\n </ng-container>\n </div>\n @if (kbqOkText || kbqCancelText) {\n <div class=\"kbq-confirm-footer\">\n @if (kbqOkText) {\n <button kbq-button [attr.autofocus]=\"true\" [color]=\"kbqOkType\" (click)=\"onClickOkCancel('ok')\">\n {{ okText }}\n </button>\n }\n @if (kbqCancelText) {\n <button kbq-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n }\n </div>\n }\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".kbq-confirm .kbq-modal-close{display:none}.kbq-confirm .kbq-confirm-footer{display:flex;gap:var(--kbq-modal-size-footer-content-gap-horizontal)}.kbq-modal-container{box-sizing:border-box;position:relative;top:var(--kbq-size-5xl);border-radius:var(--kbq-modal-size-border-radius);width:auto;margin:0 auto;list-style:none}.kbq-modal-container.zoom-enter,.kbq-modal-container.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.kbq-modal-container.kbq-modal_small{width:var(--kbq-modal-size-small-width)}.kbq-modal-container.kbq-modal_medium{width:var(--kbq-modal-size-medium-width)}.kbq-modal-container.kbq-modal_large{width:var(--kbq-modal-size-large-width)}.kbq-modal-container .kbq-modal-close{position:absolute;top:var(--kbq-size-l);right:var(--kbq-size-l)}.kbq-modal-wrap{position:fixed;inset:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.kbq-modal-content{position:relative;border-radius:var(--kbq-modal-size-border-radius);background-clip:padding-box}.kbq-modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--kbq-modal-size-header-padding-vertical) var(--kbq-modal-size-header-padding-right) var(--kbq-modal-size-header-padding-vertical) var(--kbq-modal-size-header-padding-left)}.kbq-modal-header+.kbq-modal-body{padding-top:var(--kbq-modal-size-content-padding-top)}.kbq-modal-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;padding-top:var(--kbq-size-3xs);padding-bottom:var(--kbq-size-3xs)}.kbq-modal-body{display:block;overflow-y:auto;max-height:calc(100vh - 260px);padding:var(--kbq-modal-size-content-padding-top-without-header) var(--kbq-modal-size-content-padding-horizontal) var(--kbq-modal-size-content-padding-bottom) var(--kbq-modal-size-content-padding-horizontal);word-wrap:break-word}.kbq-modal-body>*{position:relative}.kbq-modal-footer,.kbq-confirm-footer{display:flex;align-items:center;padding:var(--kbq-modal-size-footer-padding-vertical) var(--kbq-modal-size-footer-padding-horizontal);gap:var(--kbq-modal-size-footer-content-gap-horizontal)}.kbq-modal-mask{position:fixed;inset:0;height:100%}.kbq-modal-mask.kbq-modal-mask-hidden{display:none}.kbq-modal-open{overflow:hidden}.kbq-modal-container{background:var(--kbq-modal-container-background);box-shadow:var(--kbq-modal-container-shadow)}.kbq-modal-container .kbq-modal-header .kbq-modal-title{color:var(--kbq-modal-header-text-color)}.kbq-modal-container .kbq-modal-header .kbq-modal-close{color:var(--kbq-modal-close-button-color)}.kbq-modal-container .kbq-modal-content{color:var(--kbq-modal-content-text-color)}.kbq-modal-container .kbq-modal-header.kbq-modal-body_top-overflow{box-shadow:var(--kbq-shadow-overflow-normal-bottom)}.kbq-modal-container .kbq-modal-footer.kbq-modal-body_bottom-overflow{box-shadow:var(--kbq-shadow-overflow-normal-top)}.kbq-modal-mask{background-color:var(--kbq-modal-overlay-background)}.kbq-modal-title{font-size:var(--kbq-typography-title-font-size);font-weight:var(--kbq-typography-title-font-weight);line-height:var(--kbq-typography-title-line-height);font-family:var(--kbq-typography-title-font-family);text-transform:var(--kbq-typography-title-text-transform);font-feature-settings:var(--kbq-typography-title-font-feature-settings);letter-spacing:var(--kbq-typography-title-letter-spacing)}.kbq-modal-body{font-size:var(--kbq-typography-text-normal-font-size);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-modal{--kbq-modal-size-small-width: 400px;--kbq-modal-size-medium-width: 640px;--kbq-modal-size-large-width: 960px;--kbq-modal-size-border-radius: var(--kbq-size-s);--kbq-modal-size-header-padding-vertical: var(--kbq-size-l);--kbq-modal-size-header-padding-left: var(--kbq-size-xxl);--kbq-modal-size-header-padding-right: var(--kbq-size-6xl);--kbq-modal-size-close-button-margin-left: var(--kbq-size-s);--kbq-modal-size-content-padding-horizontal: var(--kbq-size-xxl);--kbq-modal-size-content-padding-top: 0;--kbq-modal-size-content-padding-bottom: var(--kbq-size-s);--kbq-modal-size-content-padding-top-without-header: var(--kbq-size-xxl);--kbq-modal-size-content-padding-bottom-without-footer: var(--kbq-size-4xl);--kbq-modal-size-footer-padding-horizontal: var(--kbq-size-xxl);--kbq-modal-size-footer-padding-vertical: var(--kbq-size-xl);--kbq-modal-size-footer-content-gap-horizontal: var(--kbq-size-l);--kbq-modal-overlay-background: var(--kbq-background-overlay);--kbq-modal-container-background: var(--kbq-background-card);--kbq-modal-container-shadow: var(--kbq-shadow-overlay);--kbq-modal-close-button-color: var(--kbq-icon-contrast);--kbq-modal-header-text-color: var(--kbq-foreground-contrast);--kbq-modal-content-text-color: var(--kbq-foreground-contrast)}\n"] }]
589
+ }, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content />\n</ng-template>\n\n<div>\n @if (kbqMask) {\n <div\n class=\"kbq-modal-mask\"\n [class.kbq-modal-mask-hidden]=\"hidden\"\n [ngClass]=\"maskAnimationClassMap\"\n [ngStyle]=\"kbqMaskStyle\"\n ></div>\n }\n\n <div\n tabindex=\"-1\"\n class=\"kbq-modal-wrap {{ kbqWrapClassName }}\"\n [style.display]=\"hidden ? 'none' : ''\"\n (mousedown)=\"onClickMask($event)\"\n >\n <div\n #modalContainer\n class=\"kbq-modal-container {{ kbqClassName }} kbq-modal_{{ kbqSize }}\"\n [class.kbq-modal_no-footer]=\"!kbqFooter\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"kbqStyle\"\n [style.transform-origin]=\"transformOrigin\"\n [style.width]=\"kbqWidth | toCssUnit\"\n >\n <div cdkTrapFocus class=\"kbq-modal-content\">\n @switch (true) {\n @case (isModalType('default')) {\n <ng-container [ngTemplateOutlet]=\"tplContentDefault\" />\n }\n @case (isModalType('confirm')) {\n <ng-container [ngTemplateOutlet]=\"tplContentConfirm\" />\n }\n @case (isModalType('custom')) {\n <ng-container [ngTemplateOutlet]=\"tplContentCustom\" />\n }\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer />\n</ng-template>\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n @if (kbqTitle) {\n <div kbq-title class=\"kbq-modal-header\" [class.kbq-modal-body_top-overflow]=\"isTopOverflow\">\n <div class=\"kbq-modal-title\">\n @switch (true) {\n @case (isTemplateRef(kbqTitle)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqTitle)\" />\n }\n @case (isNonEmptyString(kbqTitle)) {\n <div [innerHTML]=\"kbqTitle\"></div>\n }\n }\n </div>\n @if (kbqClosable) {\n <button\n kbq-button\n type=\"button\"\n class=\"kbq-modal-close kbq-button_transparent\"\n [color]=\"'contrast'\"\n (click)=\"onClickCloseBtn()\"\n >\n <i kbq-icon=\"kbq-xmark_16\" [color]=\"componentColors.Contrast\"></i>\n </button>\n }\n </div>\n }\n <div #modalBody class=\"kbq-modal-body kbq-scrollbar\" [ngStyle]=\"kbqBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n @if (!isComponent(kbqContent)) {\n @switch (true) {\n @case (isTemplateRef(kbqContent)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqContent)\" />\n }\n @case (isNonEmptyString(kbqContent)) {\n <div [innerHTML]=\"kbqContent\"></div>\n }\n @default {\n <ng-container [ngTemplateOutlet]=\"tplOriginContent\" />\n }\n }\n }\n </ng-container>\n </div>\n @if (kbqFooter || kbqOkText || kbqCancelText) {\n <div class=\"kbq-modal-footer\" [class.kbq-modal-body_bottom-overflow]=\"isBottomOverflow\">\n @switch (true) {\n @case (isTemplateRef(kbqFooter)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqFooter)\" />\n }\n @case (isNonEmptyString(kbqFooter)) {\n <div [innerHTML]=\"kbqFooter\"></div>\n }\n @case (isModalButtons(kbqFooter)) {\n @for (button of $any(kbqFooter); track button) {\n @if (getButtonCallableProp(button, 'show')) {\n <button\n kbq-button\n [attr.autofocus]=\"button.autoFocus\"\n [attr.kbq-modal-main-action]=\"button.kbqModalMainAction\"\n [class.kbq-progress]=\"getButtonCallableProp(button, 'loading')\"\n [color]=\"button.type\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n (click)=\"onButtonClick(button)\"\n >\n {{ button.label }}\n </button>\n }\n }\n }\n @default {\n @if (kbqOkText) {\n <button\n kbq-button\n [attr.autofocus]=\"true\"\n [color]=\"componentColors.Contrast\"\n (click)=\"onClickOkCancel('ok')\"\n >\n {{ okText }}\n </button>\n }\n @if (kbqCancelText) {\n <button kbq-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n }\n }\n }\n </div>\n }\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"kbq-modal-body\" [ngStyle]=\"kbqBodyStyle\">\n <ng-container #bodyContainer>\n @if (!isComponent(kbqContent)) {\n @switch (true) {\n @case (isTemplateRef(kbqContent)) {\n <ng-container [ngTemplateOutlet]=\"$any(kbqContent)\" />\n }\n @case (isNonEmptyString(kbqContent)) {\n <div [innerHTML]=\"kbqContent\"></div>\n }\n @default {\n <ng-container [ngTemplateOutlet]=\"tplOriginContent\" />\n }\n }\n }\n </ng-container>\n </div>\n @if (kbqOkText || kbqCancelText) {\n <div class=\"kbq-confirm-footer\">\n @if (kbqOkText) {\n <button kbq-button [attr.autofocus]=\"true\" [color]=\"kbqOkType\" (click)=\"onClickOkCancel('ok')\">\n {{ okText }}\n </button>\n }\n @if (kbqCancelText) {\n <button kbq-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n }\n </div>\n }\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".kbq-confirm .kbq-modal-close{display:none}.kbq-confirm .kbq-confirm-footer{display:flex;gap:var(--kbq-modal-size-footer-content-gap-horizontal)}.kbq-modal-container{box-sizing:border-box;position:relative;top:var(--kbq-size-5xl);border-radius:var(--kbq-modal-size-border-radius);width:auto;margin:0 auto;list-style:none}.kbq-modal-container.zoom-enter,.kbq-modal-container.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.kbq-modal-container.kbq-modal_small{width:var(--kbq-modal-size-small-width)}.kbq-modal-container.kbq-modal_medium{width:var(--kbq-modal-size-medium-width)}.kbq-modal-container.kbq-modal_large{width:var(--kbq-modal-size-large-width)}.kbq-modal-container .kbq-modal-close{position:absolute;top:var(--kbq-size-l);right:var(--kbq-size-l)}.kbq-modal-wrap{position:fixed;inset:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.kbq-modal-content{position:relative;border-radius:var(--kbq-modal-size-border-radius);background-clip:padding-box}.kbq-modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--kbq-modal-size-header-padding-vertical) var(--kbq-modal-size-header-padding-right) var(--kbq-modal-size-header-padding-vertical) var(--kbq-modal-size-header-padding-left)}.kbq-modal-header+.kbq-modal-body{padding-top:var(--kbq-modal-size-content-padding-top)}.kbq-modal-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;padding-top:var(--kbq-size-3xs);padding-bottom:var(--kbq-size-3xs)}.kbq-modal-body{display:block;overflow-y:auto;max-height:calc(100vh - 260px);padding:var(--kbq-modal-size-content-padding-top-without-header) var(--kbq-modal-size-content-padding-horizontal) var(--kbq-modal-size-content-padding-bottom) var(--kbq-modal-size-content-padding-horizontal);word-wrap:break-word}.kbq-modal-body>*{position:relative}.kbq-modal-footer,.kbq-confirm-footer{display:flex;align-items:center;padding:var(--kbq-modal-size-footer-padding-vertical) var(--kbq-modal-size-footer-padding-horizontal);gap:var(--kbq-modal-size-footer-content-gap-horizontal)}.kbq-modal-mask{position:fixed;inset:0;height:100%}.kbq-modal-mask.kbq-modal-mask-hidden{display:none}.kbq-modal-open{overflow:hidden}.kbq-modal-container{background:var(--kbq-modal-container-background);box-shadow:var(--kbq-modal-container-shadow)}.kbq-modal-container .kbq-modal-header .kbq-modal-title{color:var(--kbq-modal-header-text-color)}.kbq-modal-container .kbq-modal-header .kbq-modal-close{color:var(--kbq-modal-close-button-color)}.kbq-modal-container .kbq-modal-content{color:var(--kbq-modal-content-text-color)}.kbq-modal-container .kbq-modal-header.kbq-modal-body_top-overflow{box-shadow:var(--kbq-shadow-overflow-normal-bottom)}.kbq-modal-container .kbq-modal-footer.kbq-modal-body_bottom-overflow{box-shadow:var(--kbq-shadow-overflow-normal-top)}.kbq-modal-mask{background-color:var(--kbq-modal-overlay-background)}.kbq-modal-title{font-size:var(--kbq-typography-title-font-size);font-style:var(--kbq-typography-title-font-style);font-weight:var(--kbq-typography-title-font-weight);line-height:var(--kbq-typography-title-line-height);font-family:var(--kbq-typography-title-font-family);text-transform:var(--kbq-typography-title-text-transform);font-feature-settings:var(--kbq-typography-title-font-feature-settings);letter-spacing:var(--kbq-typography-title-letter-spacing)}.kbq-modal-body{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-modal{--kbq-modal-size-small-width: 400px;--kbq-modal-size-medium-width: 640px;--kbq-modal-size-large-width: 960px;--kbq-modal-size-border-radius: var(--kbq-size-s);--kbq-modal-size-header-padding-vertical: var(--kbq-size-l);--kbq-modal-size-header-padding-left: var(--kbq-size-xxl);--kbq-modal-size-header-padding-right: var(--kbq-size-6xl);--kbq-modal-size-close-button-margin-left: var(--kbq-size-s);--kbq-modal-size-content-padding-horizontal: var(--kbq-size-xxl);--kbq-modal-size-content-padding-top: 0;--kbq-modal-size-content-padding-bottom: var(--kbq-size-s);--kbq-modal-size-content-padding-top-without-header: var(--kbq-size-xxl);--kbq-modal-size-content-padding-bottom-without-footer: var(--kbq-size-4xl);--kbq-modal-size-footer-padding-horizontal: var(--kbq-size-xxl);--kbq-modal-size-footer-padding-vertical: var(--kbq-size-xl);--kbq-modal-size-footer-content-gap-horizontal: var(--kbq-size-l);--kbq-modal-overlay-background: var(--kbq-background-overlay);--kbq-modal-container-background: var(--kbq-background-card);--kbq-modal-container-shadow: var(--kbq-shadow-overlay);--kbq-modal-close-button-color: var(--kbq-icon-contrast);--kbq-modal-header-text-color: var(--kbq-foreground-contrast);--kbq-modal-content-text-color: var(--kbq-foreground-contrast)}\n"] }]
590
590
  }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: KbqModalControlService }, { type: i0.ChangeDetectorRef }, { type: i3.FocusMonitor }], propDecorators: { kbqModalType: [{
591
591
  type: Input
592
592
  }], kbqComponent: [{
@@ -684,11 +684,12 @@ class KbqModalTitle {
684
684
  @if (modal.kbqClosable) {
685
685
  <button
686
686
  class="kbq-modal-close kbq-button_transparent"
687
+ type="button"
688
+ kbq-button
687
689
  [color]="'contrast'"
688
690
  (click)="modal.onClickCloseBtn()"
689
- kbq-button
690
691
  >
691
- <i [color]="modal.componentColors.Contrast" kbq-icon="kbq-xmark_16"></i>
692
+ <i kbq-icon="kbq-xmark_16" [color]="modal.componentColors.Contrast"></i>
692
693
  </button>
693
694
  }
694
695
  `, isInline: true, dependencies: [{ kind: "component", type: i4.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i4.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "component", type: i5.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "directive", type: i6.KbqTitleDirective, selector: "[kbq-title]", exportAs: ["kbqTitle"] }] }); }
@@ -705,11 +706,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
705
706
  @if (modal.kbqClosable) {
706
707
  <button
707
708
  class="kbq-modal-close kbq-button_transparent"
709
+ type="button"
710
+ kbq-button
708
711
  [color]="'contrast'"
709
712
  (click)="modal.onClickCloseBtn()"
710
- kbq-button
711
713
  >
712
- <i [color]="modal.componentColors.Contrast" kbq-icon="kbq-xmark_16"></i>
714
+ <i kbq-icon="kbq-xmark_16" [color]="modal.componentColors.Contrast"></i>
713
715
  </button>
714
716
  }
715
717
  `,