@geoit/ui 0.0.2 → 0.0.5

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 (258) hide show
  1. package/AGENTS.md +12 -8
  2. package/README.md +140 -17
  3. package/ai/AGENTS.md +43 -32
  4. package/ai/README.md +36 -2
  5. package/ai/catalog.json +5585 -437
  6. package/ai/components/geo-alert.md +75 -21
  7. package/ai/components/geo-back-button.md +64 -18
  8. package/ai/components/geo-breadcrumb.md +71 -12
  9. package/ai/components/geo-button.md +90 -27
  10. package/ai/components/geo-chart.md +103 -0
  11. package/ai/components/geo-checkbox.md +67 -20
  12. package/ai/components/geo-column-picker.md +91 -18
  13. package/ai/components/geo-confirm-modal.md +92 -27
  14. package/ai/components/geo-dashboard.md +91 -0
  15. package/ai/components/geo-date-picker.md +105 -29
  16. package/ai/components/geo-date-range-picker.md +101 -28
  17. package/ai/components/geo-empty-state.md +75 -0
  18. package/ai/components/geo-feedback-form.md +97 -0
  19. package/ai/components/geo-file-picker.md +99 -26
  20. package/ai/components/geo-forgot-password.md +78 -0
  21. package/ai/components/geo-form-modal.md +111 -44
  22. package/ai/components/geo-icon.md +70 -16
  23. package/ai/components/geo-input.md +94 -29
  24. package/ai/components/geo-layout-footer.md +70 -0
  25. package/ai/components/geo-layout-header-actions.md +82 -0
  26. package/ai/components/geo-layout-header.md +89 -0
  27. package/ai/components/geo-layout-sidebar.md +86 -0
  28. package/ai/components/geo-layout.md +155 -0
  29. package/ai/components/geo-list-page.md +72 -0
  30. package/ai/components/geo-login.md +94 -0
  31. package/ai/components/geo-map-admin-filter.md +80 -0
  32. package/ai/components/geo-map-basemap-switcher.md +75 -0
  33. package/ai/components/geo-map-help.md +72 -0
  34. package/ai/components/geo-map-layer-card.md +73 -0
  35. package/ai/components/geo-map-layer-panel.md +75 -0
  36. package/ai/components/geo-map-layers-drawer.md +78 -0
  37. package/ai/components/geo-map-legend.md +74 -0
  38. package/ai/components/geo-map-locate.md +75 -0
  39. package/ai/components/geo-map-location-chip.md +71 -0
  40. package/ai/components/geo-map-measure.md +74 -0
  41. package/ai/components/geo-map-opacity.md +75 -0
  42. package/ai/components/geo-map-parcel-popup.md +79 -0
  43. package/ai/components/geo-map-search.md +83 -0
  44. package/ai/components/geo-map-shell.md +110 -0
  45. package/ai/components/geo-map-snapshot.md +75 -0
  46. package/ai/components/geo-map-swipe.md +73 -0
  47. package/ai/components/geo-map-toolbar.md +76 -0
  48. package/ai/components/geo-map-zoom.md +74 -0
  49. package/ai/components/geo-map.md +205 -0
  50. package/ai/components/geo-overlap-result.md +88 -0
  51. package/ai/components/geo-page-header.md +72 -0
  52. package/ai/components/geo-page-title.md +62 -16
  53. package/ai/components/geo-pagination.md +76 -24
  54. package/ai/components/geo-radio.md +110 -27
  55. package/ai/components/geo-row-actions.md +87 -19
  56. package/ai/components/geo-select.md +108 -28
  57. package/ai/components/geo-slider.md +70 -21
  58. package/ai/components/geo-stat-card.md +98 -0
  59. package/ai/components/geo-status-tag.md +67 -15
  60. package/ai/components/geo-step-form-layout.md +121 -38
  61. package/ai/components/geo-stepper.md +81 -19
  62. package/ai/components/geo-table-filter.md +90 -29
  63. package/ai/components/geo-table-pagination.md +70 -23
  64. package/ai/components/geo-table-toolbar.md +84 -29
  65. package/ai/components/geo-table.md +191 -59
  66. package/ai/components/geo-tabs.md +99 -27
  67. package/ai/components/geo-textarea.md +84 -23
  68. package/ai/components/geo-toast.md +138 -27
  69. package/ai/components/geo-tree.md +94 -22
  70. package/ai/components/geo-typography.md +70 -19
  71. package/ai/components/geo-upload.md +109 -39
  72. package/ai/mockup.html +1194 -0
  73. package/ai/recipes.md +132 -47
  74. package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
  75. package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
  76. package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
  77. package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
  78. package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
  79. package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
  80. package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
  81. package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
  82. package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
  83. package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
  84. package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
  85. package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
  86. package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
  87. package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
  88. package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
  89. package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
  90. package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
  91. package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
  92. package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
  93. package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
  94. package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
  95. package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
  96. package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
  97. package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
  98. package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
  99. package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
  100. package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
  101. package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
  102. package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
  103. package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
  104. package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
  105. package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
  106. package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
  107. package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
  108. package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
  109. package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
  110. package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
  111. package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
  112. package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
  113. package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
  114. package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
  115. package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
  116. package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
  117. package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
  118. package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
  119. package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
  120. package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
  121. package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
  122. package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
  123. package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
  124. package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
  125. package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
  126. package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
  127. package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
  128. package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
  129. package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
  130. package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
  131. package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
  132. package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
  133. package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
  134. package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
  135. package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
  136. package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
  137. package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
  138. package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
  139. package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
  140. package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
  141. package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
  142. package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
  143. package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
  144. package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
  145. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
  146. package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
  147. package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
  148. package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
  149. package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
  150. package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
  151. package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
  152. package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
  153. package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
  154. package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
  155. package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
  156. package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
  157. package/esm2022/lib/figma/index.mjs +50 -1
  158. package/esm2022/lib/styles/tokens.mjs +56 -24
  159. package/fesm2022/geoit-ui.mjs +5981 -1825
  160. package/fesm2022/geoit-ui.mjs.map +1 -1
  161. package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
  162. package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
  163. package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
  164. package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
  165. package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
  166. package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
  167. package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
  168. package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
  169. package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
  170. package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
  171. package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
  172. package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
  173. package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
  174. package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
  175. package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
  176. package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
  177. package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
  178. package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
  179. package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
  180. package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
  181. package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
  182. package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
  183. package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
  184. package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
  185. package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
  186. package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
  187. package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
  188. package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
  189. package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
  190. package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
  191. package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
  192. package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
  193. package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
  194. package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
  195. package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
  196. package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
  197. package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
  198. package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
  199. package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
  200. package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
  201. package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
  202. package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
  203. package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
  204. package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
  205. package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
  206. package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
  207. package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
  208. package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
  209. package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
  210. package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
  211. package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
  212. package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
  213. package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
  214. package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
  215. package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
  216. package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
  217. package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
  218. package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
  219. package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
  220. package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
  221. package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
  222. package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
  223. package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
  224. package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
  225. package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
  226. package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
  227. package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
  228. package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
  229. package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
  230. package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
  231. package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
  232. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
  233. package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
  234. package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
  235. package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
  236. package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
  237. package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
  238. package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
  239. package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
  240. package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
  241. package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
  242. package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
  243. package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
  244. package/lib/figma/index.d.ts +49 -0
  245. package/lib/styles/tokens.d.ts +56 -23
  246. package/package.json +4 -2
  247. package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
  248. package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
  249. package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
  250. package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
  251. package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
  252. package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
  253. package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
  254. package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
  255. package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
  256. package/src/lib/styles/design-tokens.scss +108 -35
  257. package/src/lib/styles/scrollbar.scss +2 -2
  258. package/src/lib/styles/theme.scss +1 -1
@@ -1,5 +1,4 @@
1
- import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
1
+ import { ChangeDetectionStrategy, Component, computed, input, model, output, ViewEncapsulation, } from '@angular/core';
3
2
  import { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';
4
3
  import { NzIconModule } from 'ng-zorro-antd/icon';
5
4
  import { GeoButtonComponent } from '../geo-button/geo-button.component';
@@ -13,141 +12,75 @@ import * as i3 from "ng-zorro-antd/modal";
13
12
  */
14
13
  export class GeoFormModalComponent {
15
14
  /** Tương đương `open` (antd) / `nzVisible` (ng-zorro). */
16
- open = false;
17
- title = '';
15
+ open = model(false);
16
+ title = input('');
18
17
  /** Title chữ in hoa. Default `true` theo design. */
19
- titleUppercase = true;
20
- okText = 'Lưu';
21
- cancelText = 'Hủy';
18
+ titleUppercase = input(true);
19
+ okText = input('Lưu');
20
+ cancelText = input('Hủy');
22
21
  /** Icon nút cancel (vd. `left` cho Quay lại). */
23
- cancelIcon;
24
- cancelIconPlacement = 'start';
22
+ cancelIcon = input(undefined);
23
+ cancelIconPlacement = input('start');
25
24
  /** Icon nút OK (vd. `right` cho Tiếp theo). */
26
- okIcon;
27
- okIconPlacement = 'end';
25
+ okIcon = input(undefined);
26
+ okIconPlacement = input('end');
28
27
  /** Nút phụ (vd. Lưu và khởi tạo lại). Chỉ hiện khi có text và không readonly. */
29
- secondaryOkText = '';
28
+ secondaryOkText = input('');
30
29
  /** Loading trên nút OK — giống antd `confirmLoading` / nz `nzOkLoading`. */
31
- confirmLoading = false;
30
+ confirmLoading = input(false);
32
31
  /** Disable nút OK — giống antd `okButtonProps.disabled` / nz `nzOkDisabled`. */
33
- okDisabled = false;
32
+ okDisabled = input(false);
34
33
  /** Ẩn nút OK (xem chi tiết). */
35
- readonly = false;
36
- width = 720;
37
- closable = true;
38
- mask = true;
39
- maskClosable = false;
40
- keyboard = true;
41
- centered = true;
42
- zIndex = 1000;
43
- className = '';
44
- wrapClassName = '';
34
+ readonly = input(false);
35
+ width = input(720);
36
+ closable = input(true);
37
+ mask = input(true);
38
+ maskClosable = input(false);
39
+ keyboard = input(true);
40
+ centered = input(true);
41
+ zIndex = input(1000);
42
+ className = input('');
43
+ wrapClassName = input('');
45
44
  /** Body cuộn, header/footer cố định. */
46
- bodyScroll = true;
45
+ bodyScroll = input(true);
47
46
  /** Max-height của vùng body khi `bodyScroll` (vd `'60vh'`, `400`). */
48
- bodyMaxHeight = '60vh';
49
- openChange = new EventEmitter();
50
- ok = new EventEmitter();
51
- secondaryOk = new EventEmitter();
52
- cancel = new EventEmitter();
53
- afterOpen = new EventEmitter();
54
- afterClose = new EventEmitter();
55
- get resolvedWrapClassName() {
56
- return ['geo-form-modal-wrap', this.wrapClassName].filter(Boolean).join(' ');
57
- }
58
- get resolvedClassName() {
59
- return ['geo-form-modal', this.className].filter(Boolean).join(' ');
60
- }
61
- get bodyMaxHeightCss() {
62
- return typeof this.bodyMaxHeight === 'number'
63
- ? `${this.bodyMaxHeight}px`
64
- : this.bodyMaxHeight;
65
- }
47
+ bodyMaxHeight = input('60vh');
48
+ ok = output();
49
+ secondaryOk = output();
50
+ cancel = output();
51
+ afterOpen = output();
52
+ afterClose = output();
53
+ resolvedWrapClassName = computed(() => ['geo-form-modal-wrap', this.wrapClassName()].filter(Boolean).join(' '));
54
+ resolvedClassName = computed(() => ['geo-form-modal', this.className()].filter(Boolean).join(' '));
55
+ bodyMaxHeightCss = computed(() => {
56
+ const bodyMaxHeight = this.bodyMaxHeight();
57
+ return typeof bodyMaxHeight === 'number' ? `${bodyMaxHeight}px` : bodyMaxHeight;
58
+ });
66
59
  onOpenChange(open) {
67
- if (this.open === open) {
60
+ if (this.open() === open) {
68
61
  return;
69
62
  }
70
- this.openChange.emit(open);
63
+ this.open.set(open);
71
64
  }
72
65
  onCancel() {
73
- this.openChange.emit(false);
66
+ this.open.set(false);
74
67
  this.cancel.emit();
75
68
  }
76
69
  onOk() {
77
- if (!this.okDisabled && !this.confirmLoading) {
70
+ if (!this.okDisabled() && !this.confirmLoading()) {
78
71
  this.ok.emit();
79
72
  }
80
73
  }
81
74
  onSecondaryOk() {
82
- if (!this.okDisabled && !this.confirmLoading) {
75
+ if (!this.okDisabled() && !this.confirmLoading()) {
83
76
  this.secondaryOk.emit();
84
77
  }
85
78
  }
86
79
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoFormModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
87
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoFormModalComponent, isStandalone: true, selector: "geo-form-modal", inputs: { open: "open", title: "title", titleUppercase: "titleUppercase", okText: "okText", cancelText: "cancelText", cancelIcon: "cancelIcon", cancelIconPlacement: "cancelIconPlacement", okIcon: "okIcon", okIconPlacement: "okIconPlacement", secondaryOkText: "secondaryOkText", confirmLoading: "confirmLoading", okDisabled: "okDisabled", readonly: "readonly", width: "width", closable: "closable", mask: "mask", maskClosable: "maskClosable", keyboard: "keyboard", centered: "centered", zIndex: "zIndex", className: "className", wrapClassName: "wrapClassName", bodyScroll: "bodyScroll", bodyMaxHeight: "bodyMaxHeight" }, outputs: { openChange: "openChange", ok: "ok", secondaryOk: "secondaryOk", cancel: "cancel", afterOpen: "afterOpen", afterClose: "afterClose" }, ngImport: i0, template: "<nz-modal\n [nzVisible]=\"open\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMask]=\"mask\"\n [nzMaskClosable]=\"maskClosable\"\n [nzKeyboard]=\"keyboard\"\n [nzCentered]=\"centered\"\n [nzWidth]=\"width\"\n [nzZIndex]=\"zIndex\"\n [nzWrapClassName]=\"resolvedWrapClassName\"\n [nzClassName]=\"resolvedClassName\"\n (nzVisibleChange)=\"onOpenChange($event)\"\n (nzAfterOpen)=\"afterOpen.emit()\"\n (nzAfterClose)=\"afterClose.emit()\"\n>\n <ng-container *nzModalContent>\n <div\n class=\"geo-form-modal__content\"\n [class.geo-form-modal__content--body-scroll]=\"bodyScroll\"\n >\n <div class=\"geo-form-modal__header\">\n <h2\n class=\"geo-form-modal__title\"\n [class.geo-form-modal__title--uppercase]=\"titleUppercase\"\n >\n {{ title }}\n </h2>\n @if (closable) {\n <button\n type=\"button\"\n class=\"geo-form-modal__close\"\n aria-label=\"\u0110\u00F3ng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div\n class=\"geo-form-modal__body\"\n [style.--geo-form-modal-body-max-height]=\"bodyScroll ? bodyMaxHeightCss : null\"\n >\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-form-modal__footer\">\n <ng-content select=\"[footerStart]\"></ng-content>\n\n <div class=\"geo-form-modal__footer-actions\">\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n [icon]=\"cancelIcon\"\n [iconPlacement]=\"cancelIconPlacement\"\n (clicked)=\"onCancel()\"\n >\n {{ readonly ? '\u0110\u00F3ng' : cancelText }}\n </geo-button>\n @if (!readonly && secondaryOkText) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onSecondaryOk()\"\n >\n {{ secondaryOkText }}\n </geo-button>\n }\n @if (!readonly) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"confirmLoading ? 'loading' : okIcon\"\n [iconPlacement]=\"okIconPlacement\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onOk()\"\n >\n {{ okText }}\n </geo-button>\n }\n </div>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n", styles: [".geo-form-modal-wrap .ant-modal-header{display:none}.geo-form-modal-wrap .ant-modal{max-width:calc(100vw - 32px)}.geo-form-modal-wrap .ant-modal-content{border-radius:var(--geo-radius);padding:0;overflow:hidden;box-shadow:0 8px 24px #1118271f}.geo-form-modal-wrap .ant-modal-body{padding:0}.geo-form-modal__content{display:flex;flex-direction:column;background:var(--geo-color-neutral-white);max-height:inherit}.geo-form-modal__header{position:relative;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-shrink:0;padding:24px 24px 16px;border-bottom:none}.geo-form-modal__header:after{content:\"\";position:absolute;left:24px;right:24px;bottom:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__title{margin:0;min-width:0;font-family:var(--geo-font-family);font-size:var(--geo-font-size-h4);font-weight:var(--geo-font-weight-bold);line-height:var(--geo-line-height-h4);color:var(--geo-color-neutral-900);letter-spacing:.02em;word-break:break-word}.geo-form-modal__title--uppercase{text-transform:uppercase}.geo-form-modal__close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-500);cursor:pointer;flex-shrink:0;transition:color .15s ease,background-color .15s ease}.geo-form-modal__close .anticon{font-size:14px}.geo-form-modal__close:hover{color:var(--geo-color-neutral-900);background:var(--geo-color-neutral-100)}.geo-form-modal__body{display:flex;flex-direction:column;gap:20px;flex:1 1 auto;min-width:0;min-height:0;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{overflow-x:hidden;overflow-y:auto;max-height:var(--geo-form-modal-body-max-height, 60vh);-webkit-overflow-scrolling:touch}.geo-form-modal__footer{position:relative;display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;flex-shrink:0;padding:16px 24px 24px;border-top:none;background:var(--geo-color-neutral-white)}.geo-form-modal__footer:before{content:\"\";position:absolute;left:24px;right:24px;top:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__footer-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin-left:auto}@media (max-width: 767.98px){.geo-form-modal-wrap .ant-modal{top:0;max-width:calc(100vw - 24px)!important;width:calc(100vw - 24px)!important;margin:12px auto!important;padding-bottom:0}.geo-form-modal-wrap .ant-modal-content{max-height:calc(100dvh - 24px);display:flex;flex-direction:column}.geo-form-modal-wrap .ant-modal-body{flex:1 1 auto;min-height:0;overflow:hidden}.geo-form-modal__content{max-height:calc(100dvh - 24px);min-height:0}.geo-form-modal__header{gap:12px;padding:24px 24px 16px}.geo-form-modal__title{font-size:var(--geo-font-size-subtitle)}.geo-form-modal__body{gap:16px;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{max-height:none;flex:1 1 auto}.geo-form-modal__footer{justify-content:stretch;gap:8px;padding:16px 24px 24px}.geo-form-modal__footer-actions{width:100%;margin-left:0}.geo-form-modal__footer-actions>*{flex:1 1 calc(50% - 4px);min-width:0}.geo-form-modal__footer-actions>*:nth-child(n+3){flex:1 1 100%}.geo-form-modal__footer-actions geo-button{display:block;width:100%}.geo-form-modal__footer-actions .geo-button{width:100%;white-space:normal;height:auto;min-height:40px;padding-block:8px;text-align:center}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgZorroAntdModule }, { kind: "directive", type: i1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i2.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i3.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i3.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "component", type: GeoButtonComponent, selector: "geo-button", inputs: ["appearance", "color", "icon", "iconTheme", "iconPlacement", "iconOnly", "type", "disabled", "tooltip", "tooltipPlacement", "active", "title"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None });
80
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoFormModalComponent, isStandalone: true, selector: "geo-form-modal", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, titleUppercase: { classPropertyName: "titleUppercase", publicName: "titleUppercase", isSignal: true, isRequired: false, transformFunction: null }, okText: { classPropertyName: "okText", publicName: "okText", isSignal: true, isRequired: false, transformFunction: null }, cancelText: { classPropertyName: "cancelText", publicName: "cancelText", isSignal: true, isRequired: false, transformFunction: null }, cancelIcon: { classPropertyName: "cancelIcon", publicName: "cancelIcon", isSignal: true, isRequired: false, transformFunction: null }, cancelIconPlacement: { classPropertyName: "cancelIconPlacement", publicName: "cancelIconPlacement", isSignal: true, isRequired: false, transformFunction: null }, okIcon: { classPropertyName: "okIcon", publicName: "okIcon", isSignal: true, isRequired: false, transformFunction: null }, okIconPlacement: { classPropertyName: "okIconPlacement", publicName: "okIconPlacement", isSignal: true, isRequired: false, transformFunction: null }, secondaryOkText: { classPropertyName: "secondaryOkText", publicName: "secondaryOkText", isSignal: true, isRequired: false, transformFunction: null }, confirmLoading: { classPropertyName: "confirmLoading", publicName: "confirmLoading", isSignal: true, isRequired: false, transformFunction: null }, okDisabled: { classPropertyName: "okDisabled", publicName: "okDisabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: false, transformFunction: null }, maskClosable: { classPropertyName: "maskClosable", publicName: "maskClosable", isSignal: true, isRequired: false, transformFunction: null }, keyboard: { classPropertyName: "keyboard", publicName: "keyboard", isSignal: true, isRequired: false, transformFunction: null }, centered: { classPropertyName: "centered", publicName: "centered", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, wrapClassName: { classPropertyName: "wrapClassName", publicName: "wrapClassName", isSignal: true, isRequired: false, transformFunction: null }, bodyScroll: { classPropertyName: "bodyScroll", publicName: "bodyScroll", isSignal: true, isRequired: false, transformFunction: null }, bodyMaxHeight: { classPropertyName: "bodyMaxHeight", publicName: "bodyMaxHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", ok: "ok", secondaryOk: "secondaryOk", cancel: "cancel", afterOpen: "afterOpen", afterClose: "afterClose" }, ngImport: i0, template: "<nz-modal\n [nzVisible]=\"open()\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMask]=\"mask()\"\n [nzMaskClosable]=\"maskClosable()\"\n [nzKeyboard]=\"keyboard()\"\n [nzCentered]=\"centered()\"\n [nzWidth]=\"width()\"\n [nzZIndex]=\"zIndex()\"\n [nzWrapClassName]=\"resolvedWrapClassName()\"\n [nzClassName]=\"resolvedClassName()\"\n (nzVisibleChange)=\"onOpenChange($event)\"\n (nzAfterOpen)=\"afterOpen.emit()\"\n (nzAfterClose)=\"afterClose.emit()\"\n>\n <ng-container *nzModalContent>\n <div\n class=\"geo-form-modal__content\"\n [class.geo-form-modal__content--body-scroll]=\"bodyScroll()\"\n >\n <div class=\"geo-form-modal__header\">\n <h2\n class=\"geo-form-modal__title\"\n [class.geo-form-modal__title--uppercase]=\"titleUppercase()\"\n >\n {{ title() }}\n </h2>\n @if (closable()) {\n <button\n type=\"button\"\n class=\"geo-form-modal__close\"\n aria-label=\"\u0110\u00F3ng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div\n class=\"geo-form-modal__body\"\n [style.--geo-form-modal-body-max-height]=\"bodyScroll() ? bodyMaxHeightCss() : null\"\n >\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-form-modal__footer\">\n <ng-content select=\"[footerStart]\"></ng-content>\n\n <div class=\"geo-form-modal__footer-actions\">\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n [icon]=\"cancelIcon()\"\n [iconPlacement]=\"cancelIconPlacement()\"\n (clicked)=\"onCancel()\"\n >\n {{ readonly() ? '\u0110\u00F3ng' : cancelText() }}\n </geo-button>\n @if (!readonly() && secondaryOkText()) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"okDisabled() || confirmLoading()\"\n (clicked)=\"onSecondaryOk()\"\n >\n {{ secondaryOkText() }}\n </geo-button>\n }\n @if (!readonly()) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"confirmLoading() ? 'loading' : okIcon()\"\n [iconPlacement]=\"okIconPlacement()\"\n [disabled]=\"okDisabled() || confirmLoading()\"\n (clicked)=\"onOk()\"\n >\n {{ okText() }}\n </geo-button>\n }\n </div>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n", styles: [".geo-form-modal-wrap .ant-modal-header{display:none}.geo-form-modal-wrap .ant-modal{max-width:calc(100vw - 32px)}.geo-form-modal-wrap .ant-modal-content{border-radius:var(--geo-radius-lg);padding:0;overflow:hidden;box-shadow:var(--geo-shadow-md)}.geo-form-modal-wrap .ant-modal-body{padding:0}.geo-form-modal__content{display:flex;flex-direction:column;background:var(--geo-color-neutral-white);max-height:inherit}.geo-form-modal__header{position:relative;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-shrink:0;padding:24px 24px 16px;border-bottom:none}.geo-form-modal__header:after{content:\"\";position:absolute;left:24px;right:24px;bottom:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__title{margin:0;min-width:0;font-family:var(--geo-font-family);font-size:var(--geo-font-size-h4);font-weight:var(--geo-font-weight-bold);line-height:var(--geo-line-height-h4);color:var(--geo-color-neutral-900);letter-spacing:.02em;word-break:break-word}.geo-form-modal__title--uppercase{text-transform:uppercase}.geo-form-modal__close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-500);cursor:pointer;flex-shrink:0;transition:color .15s ease,background-color .15s ease}.geo-form-modal__close .anticon{font-size:14px}.geo-form-modal__close:hover{color:var(--geo-color-neutral-900);background:var(--geo-color-neutral-100)}.geo-form-modal__body{display:flex;flex-direction:column;gap:20px;flex:1 1 auto;min-width:0;min-height:0;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{overflow-x:hidden;overflow-y:auto;max-height:var(--geo-form-modal-body-max-height, 60vh);-webkit-overflow-scrolling:touch}.geo-form-modal__footer{position:relative;display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;flex-shrink:0;padding:16px 24px 24px;border-top:none;background:var(--geo-color-neutral-white)}.geo-form-modal__footer:before{content:\"\";position:absolute;left:24px;right:24px;top:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__footer-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin-left:auto}@media (max-width: 767.98px){.geo-form-modal-wrap .ant-modal{top:0;max-width:calc(100vw - 24px)!important;width:calc(100vw - 24px)!important;margin:12px auto!important;padding-bottom:0}.geo-form-modal-wrap .ant-modal-content{max-height:calc(100dvh - 24px);display:flex;flex-direction:column}.geo-form-modal-wrap .ant-modal-body{flex:1 1 auto;min-height:0;overflow:hidden}.geo-form-modal__content{max-height:calc(100dvh - 24px);min-height:0}.geo-form-modal__header{gap:12px;padding:24px 24px 16px}.geo-form-modal__title{font-size:var(--geo-font-size-subtitle)}.geo-form-modal__body{gap:16px;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{max-height:none;flex:1 1 auto}.geo-form-modal__footer{justify-content:stretch;gap:8px;padding:16px 24px 24px}.geo-form-modal__footer-actions{width:100%;margin-left:0}.geo-form-modal__footer-actions>*{flex:1 1 calc(50% - 4px);min-width:0}.geo-form-modal__footer-actions>*:nth-child(n+3){flex:1 1 100%}.geo-form-modal__footer-actions geo-button{display:block;width:100%}.geo-form-modal__footer-actions .geo-button{width:100%;white-space:normal;height:auto;min-height:40px;padding-block:8px;text-align:center}}\n"], dependencies: [{ kind: "ngmodule", type: NgZorroAntdModule }, { kind: "directive", type: i1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i2.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i3.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i3.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "component", type: GeoButtonComponent, selector: "geo-button", inputs: ["appearance", "color", "icon", "iconTheme", "iconPlacement", "iconOnly", "type", "disabled", "tooltip", "tooltipPlacement", "active", "title"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
88
81
  }
89
82
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoFormModalComponent, decorators: [{
90
83
  type: Component,
91
- args: [{ selector: 'geo-form-modal', standalone: true, imports: [CommonModule, NgZorroAntdModule, NzIconModule, GeoButtonComponent], encapsulation: ViewEncapsulation.None, template: "<nz-modal\n [nzVisible]=\"open\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMask]=\"mask\"\n [nzMaskClosable]=\"maskClosable\"\n [nzKeyboard]=\"keyboard\"\n [nzCentered]=\"centered\"\n [nzWidth]=\"width\"\n [nzZIndex]=\"zIndex\"\n [nzWrapClassName]=\"resolvedWrapClassName\"\n [nzClassName]=\"resolvedClassName\"\n (nzVisibleChange)=\"onOpenChange($event)\"\n (nzAfterOpen)=\"afterOpen.emit()\"\n (nzAfterClose)=\"afterClose.emit()\"\n>\n <ng-container *nzModalContent>\n <div\n class=\"geo-form-modal__content\"\n [class.geo-form-modal__content--body-scroll]=\"bodyScroll\"\n >\n <div class=\"geo-form-modal__header\">\n <h2\n class=\"geo-form-modal__title\"\n [class.geo-form-modal__title--uppercase]=\"titleUppercase\"\n >\n {{ title }}\n </h2>\n @if (closable) {\n <button\n type=\"button\"\n class=\"geo-form-modal__close\"\n aria-label=\"\u0110\u00F3ng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div\n class=\"geo-form-modal__body\"\n [style.--geo-form-modal-body-max-height]=\"bodyScroll ? bodyMaxHeightCss : null\"\n >\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-form-modal__footer\">\n <ng-content select=\"[footerStart]\"></ng-content>\n\n <div class=\"geo-form-modal__footer-actions\">\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n [icon]=\"cancelIcon\"\n [iconPlacement]=\"cancelIconPlacement\"\n (clicked)=\"onCancel()\"\n >\n {{ readonly ? '\u0110\u00F3ng' : cancelText }}\n </geo-button>\n @if (!readonly && secondaryOkText) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onSecondaryOk()\"\n >\n {{ secondaryOkText }}\n </geo-button>\n }\n @if (!readonly) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"confirmLoading ? 'loading' : okIcon\"\n [iconPlacement]=\"okIconPlacement\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onOk()\"\n >\n {{ okText }}\n </geo-button>\n }\n </div>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n", styles: [".geo-form-modal-wrap .ant-modal-header{display:none}.geo-form-modal-wrap .ant-modal{max-width:calc(100vw - 32px)}.geo-form-modal-wrap .ant-modal-content{border-radius:var(--geo-radius);padding:0;overflow:hidden;box-shadow:0 8px 24px #1118271f}.geo-form-modal-wrap .ant-modal-body{padding:0}.geo-form-modal__content{display:flex;flex-direction:column;background:var(--geo-color-neutral-white);max-height:inherit}.geo-form-modal__header{position:relative;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-shrink:0;padding:24px 24px 16px;border-bottom:none}.geo-form-modal__header:after{content:\"\";position:absolute;left:24px;right:24px;bottom:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__title{margin:0;min-width:0;font-family:var(--geo-font-family);font-size:var(--geo-font-size-h4);font-weight:var(--geo-font-weight-bold);line-height:var(--geo-line-height-h4);color:var(--geo-color-neutral-900);letter-spacing:.02em;word-break:break-word}.geo-form-modal__title--uppercase{text-transform:uppercase}.geo-form-modal__close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-500);cursor:pointer;flex-shrink:0;transition:color .15s ease,background-color .15s ease}.geo-form-modal__close .anticon{font-size:14px}.geo-form-modal__close:hover{color:var(--geo-color-neutral-900);background:var(--geo-color-neutral-100)}.geo-form-modal__body{display:flex;flex-direction:column;gap:20px;flex:1 1 auto;min-width:0;min-height:0;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{overflow-x:hidden;overflow-y:auto;max-height:var(--geo-form-modal-body-max-height, 60vh);-webkit-overflow-scrolling:touch}.geo-form-modal__footer{position:relative;display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;flex-shrink:0;padding:16px 24px 24px;border-top:none;background:var(--geo-color-neutral-white)}.geo-form-modal__footer:before{content:\"\";position:absolute;left:24px;right:24px;top:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__footer-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin-left:auto}@media (max-width: 767.98px){.geo-form-modal-wrap .ant-modal{top:0;max-width:calc(100vw - 24px)!important;width:calc(100vw - 24px)!important;margin:12px auto!important;padding-bottom:0}.geo-form-modal-wrap .ant-modal-content{max-height:calc(100dvh - 24px);display:flex;flex-direction:column}.geo-form-modal-wrap .ant-modal-body{flex:1 1 auto;min-height:0;overflow:hidden}.geo-form-modal__content{max-height:calc(100dvh - 24px);min-height:0}.geo-form-modal__header{gap:12px;padding:24px 24px 16px}.geo-form-modal__title{font-size:var(--geo-font-size-subtitle)}.geo-form-modal__body{gap:16px;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{max-height:none;flex:1 1 auto}.geo-form-modal__footer{justify-content:stretch;gap:8px;padding:16px 24px 24px}.geo-form-modal__footer-actions{width:100%;margin-left:0}.geo-form-modal__footer-actions>*{flex:1 1 calc(50% - 4px);min-width:0}.geo-form-modal__footer-actions>*:nth-child(n+3){flex:1 1 100%}.geo-form-modal__footer-actions geo-button{display:block;width:100%}.geo-form-modal__footer-actions .geo-button{width:100%;white-space:normal;height:auto;min-height:40px;padding-block:8px;text-align:center}}\n"] }]
92
- }], propDecorators: { open: [{
93
- type: Input
94
- }], title: [{
95
- type: Input
96
- }], titleUppercase: [{
97
- type: Input
98
- }], okText: [{
99
- type: Input
100
- }], cancelText: [{
101
- type: Input
102
- }], cancelIcon: [{
103
- type: Input
104
- }], cancelIconPlacement: [{
105
- type: Input
106
- }], okIcon: [{
107
- type: Input
108
- }], okIconPlacement: [{
109
- type: Input
110
- }], secondaryOkText: [{
111
- type: Input
112
- }], confirmLoading: [{
113
- type: Input
114
- }], okDisabled: [{
115
- type: Input
116
- }], readonly: [{
117
- type: Input
118
- }], width: [{
119
- type: Input
120
- }], closable: [{
121
- type: Input
122
- }], mask: [{
123
- type: Input
124
- }], maskClosable: [{
125
- type: Input
126
- }], keyboard: [{
127
- type: Input
128
- }], centered: [{
129
- type: Input
130
- }], zIndex: [{
131
- type: Input
132
- }], className: [{
133
- type: Input
134
- }], wrapClassName: [{
135
- type: Input
136
- }], bodyScroll: [{
137
- type: Input
138
- }], bodyMaxHeight: [{
139
- type: Input
140
- }], openChange: [{
141
- type: Output
142
- }], ok: [{
143
- type: Output
144
- }], secondaryOk: [{
145
- type: Output
146
- }], cancel: [{
147
- type: Output
148
- }], afterOpen: [{
149
- type: Output
150
- }], afterClose: [{
151
- type: Output
152
- }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZvcm0tbW9kYWwvZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZvcm0tbW9kYWwvZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7QUFFeEU7OztHQUdHO0FBU0gsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQywwREFBMEQ7SUFDakQsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNiLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDcEIsb0RBQW9EO0lBQzNDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdEIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsaURBQWlEO0lBQ3hDLFVBQVUsQ0FBVTtJQUNwQixtQkFBbUIsR0FBb0IsT0FBTyxDQUFDO0lBQ3hELCtDQUErQztJQUN0QyxNQUFNLENBQVU7SUFDaEIsZUFBZSxHQUFvQixLQUFLLENBQUM7SUFDbEQsaUZBQWlGO0lBQ3hFLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDOUIs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SUFBSTs4QkFJNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csRUFBRTtzQkFBWCxNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdab3Jyb0FudGRNb2R1bGUgfSBmcm9tICcuLi8uLi9uZy16b3Jyby9uZy16b3Jyby1hbnRkLm1vZHVsZSc7XG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuaW1wb3J0IHsgR2VvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLWJ1dHRvbi9nZW8tYnV0dG9uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogTW9kYWwgZm9ybSBkw7luZyBjaHVuZyDigJQgQVBJIGLDoW0gQW50IERlc2lnbiBNb2RhbCAvIG5nLXpvcnJvIG56LW1vZGFsLlxuICogSGVhZGVyICsgZm9vdGVyIGPhu5EgxJHhu4tuaDsgYm9keSBjw7MgdGjhu4Mgc2Nyb2xsIChgYm9keVNjcm9sbGApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tZm9ybS1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5nWm9ycm9BbnRkTW9kdWxlLCBOekljb25Nb2R1bGUsIEdlb0J1dHRvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tZm9ybS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tZm9ybS1tb2RhbC5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEdlb0Zvcm1Nb2RhbENvbXBvbmVudCB7XG4gIC8qKiBUxrDGoW5nIMSRxrDGoW5nIGBvcGVuYCAoYW50ZCkgLyBgbnpWaXNpYmxlYCAobmctem9ycm8pLiAqL1xuICBASW5wdXQoKSBvcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XG4gIC8qKiBUaXRsZSBjaOG7ryBpbiBob2EuIERlZmF1bHQgYHRydWVgIHRoZW8gZGVzaWduLiAqL1xuICBASW5wdXQoKSB0aXRsZVVwcGVyY2FzZSA9IHRydWU7XG4gIEBJbnB1dCgpIG9rVGV4dCA9ICdMxrB1JztcbiAgQElucHV0KCkgY2FuY2VsVGV4dCA9ICdI4buneSc7XG4gIC8qKiBJY29uIG7DunQgY2FuY2VsICh2ZC4gYGxlZnRgIGNobyBRdWF5IGzhuqFpKS4gKi9cbiAgQElucHV0KCkgY2FuY2VsSWNvbj86IHN0cmluZztcbiAgQElucHV0KCkgY2FuY2VsSWNvblBsYWNlbWVudDogJ3N0YXJ0JyB8ICdlbmQnID0gJ3N0YXJ0JztcbiAgLyoqIEljb24gbsO6dCBPSyAodmQuIGByaWdodGAgY2hvIFRp4bq/cCB0aGVvKS4gKi9cbiAgQElucHV0KCkgb2tJY29uPzogc3RyaW5nO1xuICBASW5wdXQoKSBva0ljb25QbGFjZW1lbnQ6ICdzdGFydCcgfCAnZW5kJyA9ICdlbmQnO1xuICAvKiogTsO6dCBwaOG7pSAodmQuIEzGsHUgdsOgIGto4bufaSB04bqhbyBs4bqhaSkuIENo4buJIGhp4buHbiBraGkgY8OzIHRleHQgdsOgIGtow7RuZyByZWFkb25seS4gKi9cbiAgQElucHV0KCkgc2Vjb25kYXJ5T2tUZXh0ID0gJyc7XG4gIC8qKiBMb2FkaW5nIHRyw6puIG7DunQgT0sg4oCUIGdp4buRbmcgYW50ZCBgY29uZmlybUxvYWRpbmdgIC8gbnogYG56T2tMb2FkaW5nYC4gKi9cbiAgQElucHV0KCkgY29uZmlybUxvYWRpbmcgPSBmYWxzZTtcbiAgLyoqIERpc2FibGUgbsO6dCBPSyDigJQgZ2nhu5FuZyBhbnRkIGBva0J1dHRvblByb3BzLmRpc2FibGVkYCAvIG56IGBuek9rRGlzYWJsZWRgLiAqL1xuICBASW5wdXQoKSBva0Rpc2FibGVkID0gZmFsc2U7XG4gIC8qKiDhuqhuIG7DunQgT0sgKHhlbSBjaGkgdGnhur90KS4gKi9cbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciB8IHN0cmluZyA9IDcyMDtcbiAgQElucHV0KCkgY2xvc2FibGUgPSB0cnVlO1xuICBASW5wdXQoKSBtYXNrID0gdHJ1ZTtcbiAgQElucHV0KCkgbWFza0Nsb3NhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGtleWJvYXJkID0gdHJ1ZTtcbiAgQElucHV0KCkgY2VudGVyZWQgPSB0cnVlO1xuICBASW5wdXQoKSB6SW5kZXggPSAxMDAwO1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgd3JhcENsYXNzTmFtZSA9ICcnO1xuICAvKiogQm9keSBjdeG7mW4sIGhlYWRlci9mb290ZXIgY+G7kSDEkeG7i25oLiAqL1xuICBASW5wdXQoKSBib2R5U2Nyb2xsID0gdHJ1ZTtcbiAgLyoqIE1heC1oZWlnaHQgY+G7p2EgdsO5bmcgYm9keSBraGkgYGJvZHlTY3JvbGxgICh2ZCBgJzYwdmgnYCwgYDQwMGApLiAqL1xuICBASW5wdXQoKSBib2R5TWF4SGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIgPSAnNjB2aCc7XG5cbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlY29uZGFyeU9rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWZ0ZXJPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWZ0ZXJDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBnZXQgcmVzb2x2ZWRXcmFwQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFsnZ2VvLWZvcm0tbW9kYWwtd3JhcCcsIHRoaXMud3JhcENsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCByZXNvbHZlZENsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBbJ2dlby1mb3JtLW1vZGFsJywgdGhpcy5jbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIH1cblxuICBnZXQgYm9keU1heEhlaWdodENzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5ib2R5TWF4SGVpZ2h0ID09PSAnbnVtYmVyJ1xuICAgICAgPyBgJHt0aGlzLmJvZHlNYXhIZWlnaHR9cHhgXG4gICAgICA6IHRoaXMuYm9keU1heEhlaWdodDtcbiAgfVxuXG4gIG9uT3BlbkNoYW5nZShvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlbiA9PT0gb3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvbk9rKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5va0Rpc2FibGVkICYmICF0aGlzLmNvbmZpcm1Mb2FkaW5nKSB7XG4gICAgICB0aGlzLm9rLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvblNlY29uZGFyeU9rKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5va0Rpc2FibGVkICYmICF0aGlzLmNvbmZpcm1Mb2FkaW5nKSB7XG4gICAgICB0aGlzLnNlY29uZGFyeU9rLmVtaXQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuei1tb2RhbFxuICBbbnpWaXNpYmxlXT1cIm9wZW5cIlxuICBbbnpUaXRsZV09XCInJ1wiXG4gIFtuekZvb3Rlcl09XCJudWxsXCJcbiAgW256Q2xvc2FibGVdPVwiZmFsc2VcIlxuICBbbnpNYXNrXT1cIm1hc2tcIlxuICBbbnpNYXNrQ2xvc2FibGVdPVwibWFza0Nsb3NhYmxlXCJcbiAgW256S2V5Ym9hcmRdPVwia2V5Ym9hcmRcIlxuICBbbnpDZW50ZXJlZF09XCJjZW50ZXJlZFwiXG4gIFtueldpZHRoXT1cIndpZHRoXCJcbiAgW256WkluZGV4XT1cInpJbmRleFwiXG4gIFtueldyYXBDbGFzc05hbWVdPVwicmVzb2x2ZWRXcmFwQ2xhc3NOYW1lXCJcbiAgW256Q2xhc3NOYW1lXT1cInJlc29sdmVkQ2xhc3NOYW1lXCJcbiAgKG56VmlzaWJsZUNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiXG4gIChuekFmdGVyT3Blbik9XCJhZnRlck9wZW4uZW1pdCgpXCJcbiAgKG56QWZ0ZXJDbG9zZSk9XCJhZnRlckNsb3NlLmVtaXQoKVwiXG4+XG4gIDxuZy1jb250YWluZXIgKm56TW9kYWxDb250ZW50PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2NvbnRlbnRcIlxuICAgICAgW2NsYXNzLmdlby1mb3JtLW1vZGFsX19jb250ZW50LS1ib2R5LXNjcm9sbF09XCJib2R5U2Nyb2xsXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2hlYWRlclwiPlxuICAgICAgICA8aDJcbiAgICAgICAgICBjbGFzcz1cImdlby1mb3JtLW1vZGFsX190aXRsZVwiXG4gICAgICAgICAgW2NsYXNzLmdlby1mb3JtLW1vZGFsX190aXRsZS0tdXBwZXJjYXNlXT1cInRpdGxlVXBwZXJjYXNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRpdGxlIH19XG4gICAgICAgIDwvaDI+XG4gICAgICAgIEBpZiAoY2xvc2FibGUpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2Nsb3NlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCLEkMOzbmdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwiY2xvc2VcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJnZW8tZm9ybS1tb2RhbF9fYm9keVwiXG4gICAgICAgIFtzdHlsZS4tLWdlby1mb3JtLW1vZGFsLWJvZHktbWF4LWhlaWdodF09XCJib2R5U2Nyb2xsID8gYm9keU1heEhlaWdodENzcyA6IG51bGxcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImdlby1mb3JtLW1vZGFsX19mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3RlclN0YXJ0XVwiPjwvbmctY29udGVudD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2Zvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgPGdlby1idXR0b25cbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJicmFuZFwiXG4gICAgICAgICAgICBbaWNvbl09XCJjYW5jZWxJY29uXCJcbiAgICAgICAgICAgIFtpY29uUGxhY2VtZW50XT1cImNhbmNlbEljb25QbGFjZW1lbnRcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcmVhZG9ubHkgPyAnxJDDs25nJyA6IGNhbmNlbFRleHQgfX1cbiAgICAgICAgICA8L2dlby1idXR0b24+XG4gICAgICAgICAgQGlmICghcmVhZG9ubHkgJiYgc2Vjb25kYXJ5T2tUZXh0KSB7XG4gICAgICAgICAgICA8Z2VvLWJ1dHRvblxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJicmFuZFwiXG4gICAgICAgICAgICAgIGljb249XCJzYXZlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9rRGlzYWJsZWQgfHwgY29uZmlybUxvYWRpbmdcIlxuICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvblNlY29uZGFyeU9rKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWNvbmRhcnlPa1RleHQgfX1cbiAgICAgICAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghcmVhZG9ubHkpIHtcbiAgICAgICAgICAgIDxnZW8tYnV0dG9uXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJicmFuZFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImNvbmZpcm1Mb2FkaW5nID8gJ2xvYWRpbmcnIDogb2tJY29uXCJcbiAgICAgICAgICAgICAgW2ljb25QbGFjZW1lbnRdPVwib2tJY29uUGxhY2VtZW50XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9rRGlzYWJsZWQgfHwgY29uZmlybUxvYWRpbmdcIlxuICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbk9rKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBva1RleHQgfX1cbiAgICAgICAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uei1tb2RhbD5cbiJdfQ==
84
+ args: [{ selector: 'geo-form-modal', standalone: true, imports: [NgZorroAntdModule, NzIconModule, GeoButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<nz-modal\n [nzVisible]=\"open()\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMask]=\"mask()\"\n [nzMaskClosable]=\"maskClosable()\"\n [nzKeyboard]=\"keyboard()\"\n [nzCentered]=\"centered()\"\n [nzWidth]=\"width()\"\n [nzZIndex]=\"zIndex()\"\n [nzWrapClassName]=\"resolvedWrapClassName()\"\n [nzClassName]=\"resolvedClassName()\"\n (nzVisibleChange)=\"onOpenChange($event)\"\n (nzAfterOpen)=\"afterOpen.emit()\"\n (nzAfterClose)=\"afterClose.emit()\"\n>\n <ng-container *nzModalContent>\n <div\n class=\"geo-form-modal__content\"\n [class.geo-form-modal__content--body-scroll]=\"bodyScroll()\"\n >\n <div class=\"geo-form-modal__header\">\n <h2\n class=\"geo-form-modal__title\"\n [class.geo-form-modal__title--uppercase]=\"titleUppercase()\"\n >\n {{ title() }}\n </h2>\n @if (closable()) {\n <button\n type=\"button\"\n class=\"geo-form-modal__close\"\n aria-label=\"\u0110\u00F3ng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div\n class=\"geo-form-modal__body\"\n [style.--geo-form-modal-body-max-height]=\"bodyScroll() ? bodyMaxHeightCss() : null\"\n >\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-form-modal__footer\">\n <ng-content select=\"[footerStart]\"></ng-content>\n\n <div class=\"geo-form-modal__footer-actions\">\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n [icon]=\"cancelIcon()\"\n [iconPlacement]=\"cancelIconPlacement()\"\n (clicked)=\"onCancel()\"\n >\n {{ readonly() ? '\u0110\u00F3ng' : cancelText() }}\n </geo-button>\n @if (!readonly() && secondaryOkText()) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"okDisabled() || confirmLoading()\"\n (clicked)=\"onSecondaryOk()\"\n >\n {{ secondaryOkText() }}\n </geo-button>\n }\n @if (!readonly()) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"confirmLoading() ? 'loading' : okIcon()\"\n [iconPlacement]=\"okIconPlacement()\"\n [disabled]=\"okDisabled() || confirmLoading()\"\n (clicked)=\"onOk()\"\n >\n {{ okText() }}\n </geo-button>\n }\n </div>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n", styles: [".geo-form-modal-wrap .ant-modal-header{display:none}.geo-form-modal-wrap .ant-modal{max-width:calc(100vw - 32px)}.geo-form-modal-wrap .ant-modal-content{border-radius:var(--geo-radius-lg);padding:0;overflow:hidden;box-shadow:var(--geo-shadow-md)}.geo-form-modal-wrap .ant-modal-body{padding:0}.geo-form-modal__content{display:flex;flex-direction:column;background:var(--geo-color-neutral-white);max-height:inherit}.geo-form-modal__header{position:relative;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-shrink:0;padding:24px 24px 16px;border-bottom:none}.geo-form-modal__header:after{content:\"\";position:absolute;left:24px;right:24px;bottom:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__title{margin:0;min-width:0;font-family:var(--geo-font-family);font-size:var(--geo-font-size-h4);font-weight:var(--geo-font-weight-bold);line-height:var(--geo-line-height-h4);color:var(--geo-color-neutral-900);letter-spacing:.02em;word-break:break-word}.geo-form-modal__title--uppercase{text-transform:uppercase}.geo-form-modal__close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-500);cursor:pointer;flex-shrink:0;transition:color .15s ease,background-color .15s ease}.geo-form-modal__close .anticon{font-size:14px}.geo-form-modal__close:hover{color:var(--geo-color-neutral-900);background:var(--geo-color-neutral-100)}.geo-form-modal__body{display:flex;flex-direction:column;gap:20px;flex:1 1 auto;min-width:0;min-height:0;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{overflow-x:hidden;overflow-y:auto;max-height:var(--geo-form-modal-body-max-height, 60vh);-webkit-overflow-scrolling:touch}.geo-form-modal__footer{position:relative;display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;flex-shrink:0;padding:16px 24px 24px;border-top:none;background:var(--geo-color-neutral-white)}.geo-form-modal__footer:before{content:\"\";position:absolute;left:24px;right:24px;top:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__footer-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin-left:auto}@media (max-width: 767.98px){.geo-form-modal-wrap .ant-modal{top:0;max-width:calc(100vw - 24px)!important;width:calc(100vw - 24px)!important;margin:12px auto!important;padding-bottom:0}.geo-form-modal-wrap .ant-modal-content{max-height:calc(100dvh - 24px);display:flex;flex-direction:column}.geo-form-modal-wrap .ant-modal-body{flex:1 1 auto;min-height:0;overflow:hidden}.geo-form-modal__content{max-height:calc(100dvh - 24px);min-height:0}.geo-form-modal__header{gap:12px;padding:24px 24px 16px}.geo-form-modal__title{font-size:var(--geo-font-size-subtitle)}.geo-form-modal__body{gap:16px;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{max-height:none;flex:1 1 auto}.geo-form-modal__footer{justify-content:stretch;gap:8px;padding:16px 24px 24px}.geo-form-modal__footer-actions{width:100%;margin-left:0}.geo-form-modal__footer-actions>*{flex:1 1 calc(50% - 4px);min-width:0}.geo-form-modal__footer-actions>*:nth-child(n+3){flex:1 1 100%}.geo-form-modal__footer-actions geo-button{display:block;width:100%}.geo-form-modal__footer-actions .geo-button{width:100%;white-space:normal;height:auto;min-height:40px;padding-block:8px;text-align:center}}\n"] }]
85
+ }] });
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZvcm0tbW9kYWwvZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZvcm0tbW9kYWwvZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7O0FBRXhFOzs7R0FHRztBQVVILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsMERBQTBEO0lBQ2pELElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQixvREFBb0Q7SUFDM0MsY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsaURBQWlEO0lBQ3hDLFVBQVUsR0FBRyxLQUFLLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELG1CQUFtQixHQUFHLEtBQUssQ0FBa0IsT0FBTyxDQUFDLENBQUM7SUFD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QUMsSUFBSSxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7d0dBN0VVLHFCQUFxQjs0RkFBckIscUJBQXFCLGkzR0MxQmxDLDJ1RkF5RkEsby9HRHJFWSxpQkFBaUIscXNDQUFFLFlBQVksK0JBQUUsa0JBQWtCOzs0RkFNbEQscUJBQXFCO2tCQVRqQyxTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxpQkFHL0MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdab3Jyb0FudGRNb2R1bGUgfSBmcm9tICcuLi8uLi9uZy16b3Jyby9uZy16b3Jyby1hbnRkLm1vZHVsZSc7XG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuaW1wb3J0IHsgR2VvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLWJ1dHRvbi9nZW8tYnV0dG9uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogTW9kYWwgZm9ybSBkw7luZyBjaHVuZyDigJQgQVBJIGLDoW0gQW50IERlc2lnbiBNb2RhbCAvIG5nLXpvcnJvIG56LW1vZGFsLlxuICogSGVhZGVyICsgZm9vdGVyIGPhu5EgxJHhu4tuaDsgYm9keSBjw7MgdGjhu4Mgc2Nyb2xsIChgYm9keVNjcm9sbGApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tZm9ybS1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ1pvcnJvQW50ZE1vZHVsZSwgTnpJY29uTW9kdWxlLCBHZW9CdXR0b25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgR2VvRm9ybU1vZGFsQ29tcG9uZW50IHtcbiAgLyoqIFTGsMahbmcgxJHGsMahbmcgYG9wZW5gIChhbnRkKSAvIGBuelZpc2libGVgIChuZy16b3JybykuICovXG4gIHJlYWRvbmx5IG9wZW4gPSBtb2RlbChmYWxzZSk7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQoJycpO1xuICAvKiogVGl0bGUgY2jhu68gaW4gaG9hLiBEZWZhdWx0IGB0cnVlYCB0aGVvIGRlc2lnbi4gKi9cbiAgcmVhZG9ubHkgdGl0bGVVcHBlcmNhc2UgPSBpbnB1dCh0cnVlKTtcbiAgcmVhZG9ubHkgb2tUZXh0ID0gaW5wdXQoJ0zGsHUnKTtcbiAgcmVhZG9ubHkgY2FuY2VsVGV4dCA9IGlucHV0KCdI4buneScpO1xuICAvKiogSWNvbiBuw7p0IGNhbmNlbCAodmQuIGBsZWZ0YCBjaG8gUXVheSBs4bqhaSkuICovXG4gIHJlYWRvbmx5IGNhbmNlbEljb24gPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGNhbmNlbEljb25QbGFjZW1lbnQgPSBpbnB1dDwnc3RhcnQnIHwgJ2VuZCc+KCdzdGFydCcpO1xuICAvKiogSWNvbiBuw7p0IE9LICh2ZC4gYHJpZ2h0YCBjaG8gVGnhur9wIHRoZW8pLiAqL1xuICByZWFkb25seSBva0ljb24gPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IG9rSWNvblBsYWNlbWVudCA9IGlucHV0PCdzdGFydCcgfCAnZW5kJz4oJ2VuZCcpO1xuICAvKiogTsO6dCBwaOG7pSAodmQuIEzGsHUgdsOgIGto4bufaSB04bqhbyBs4bqhaSkuIENo4buJIGhp4buHbiBraGkgY8OzIHRleHQgdsOgIGtow7RuZyByZWFkb25seS4gKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5T2tUZXh0ID0gaW5wdXQoJycpO1xuICAvKiogTG9hZGluZyB0csOqbiBuw7p0IE9LIOKAlCBnaeG7kW5nIGFudGQgYGNvbmZpcm1Mb2FkaW5nYCAvIG56IGBuek9rTG9hZGluZ2AuICovXG4gIHJlYWRvbmx5IGNvbmZpcm1Mb2FkaW5nID0gaW5wdXQoZmFsc2UpO1xuICAvKiogRGlzYWJsZSBuw7p0IE9LIOKAlCBnaeG7kW5nIGFudGQgYG9rQnV0dG9uUHJvcHMuZGlzYWJsZWRgIC8gbnogYG56T2tEaXNhYmxlZGAuICovXG4gIHJlYWRvbmx5IG9rRGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIC8qKiDhuqhuIG7DunQgT0sgKHhlbSBjaGkgdGnhur90KS4gKi9cbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IHdpZHRoID0gaW5wdXQ8bnVtYmVyIHwgc3RyaW5nPig3MjApO1xuICByZWFkb25seSBjbG9zYWJsZSA9IGlucHV0KHRydWUpO1xuICByZWFkb25seSBtYXNrID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IG1hc2tDbG9zYWJsZSA9IGlucHV0KGZhbHNlKTtcbiAgcmVhZG9ubHkga2V5Ym9hcmQgPSBpbnB1dCh0cnVlKTtcbiAgcmVhZG9ubHkgY2VudGVyZWQgPSBpbnB1dCh0cnVlKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQoMTAwMCk7XG4gIHJlYWRvbmx5IGNsYXNzTmFtZSA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgd3JhcENsYXNzTmFtZSA9IGlucHV0KCcnKTtcbiAgLyoqIEJvZHkgY3Xhu5luLCBoZWFkZXIvZm9vdGVyIGPhu5EgxJHhu4tuaC4gKi9cbiAgcmVhZG9ubHkgYm9keVNjcm9sbCA9IGlucHV0KHRydWUpO1xuICAvKiogTWF4LWhlaWdodCBj4bunYSB2w7luZyBib2R5IGtoaSBgYm9keVNjcm9sbGAgKHZkIGAnNjB2aCdgLCBgNDAwYCkuICovXG4gIHJlYWRvbmx5IGJvZHlNYXhIZWlnaHQgPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCc2MHZoJyk7XG5cbiAgcmVhZG9ubHkgb2sgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgc2Vjb25kYXJ5T2sgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2FuY2VsID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IGFmdGVyT3BlbiA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBhZnRlckNsb3NlID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRXcmFwQ2xhc3NOYW1lID0gY29tcHV0ZWQoKCkgPT5cbiAgICBbJ2dlby1mb3JtLW1vZGFsLXdyYXAnLCB0aGlzLndyYXBDbGFzc05hbWUoKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKVxuICApO1xuXG4gIHJlYWRvbmx5IHJlc29sdmVkQ2xhc3NOYW1lID0gY29tcHV0ZWQoKCkgPT5cbiAgICBbJ2dlby1mb3JtLW1vZGFsJywgdGhpcy5jbGFzc05hbWUoKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvZHlNYXhIZWlnaHRDc3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9keU1heEhlaWdodCA9IHRoaXMuYm9keU1heEhlaWdodCgpO1xuICAgIHJldHVybiB0eXBlb2YgYm9keU1heEhlaWdodCA9PT0gJ251bWJlcicgPyBgJHtib2R5TWF4SGVpZ2h0fXB4YCA6IGJvZHlNYXhIZWlnaHQ7XG4gIH0pO1xuXG4gIG9uT3BlbkNoYW5nZShvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlbigpID09PSBvcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3Blbi5zZXQob3Blbik7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvbk9rKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5va0Rpc2FibGVkKCkgJiYgIXRoaXMuY29uZmlybUxvYWRpbmcoKSkge1xuICAgICAgdGhpcy5vay5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgb25TZWNvbmRhcnlPaygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub2tEaXNhYmxlZCgpICYmICF0aGlzLmNvbmZpcm1Mb2FkaW5nKCkpIHtcbiAgICAgIHRoaXMuc2Vjb25kYXJ5T2suZW1pdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPG56LW1vZGFsXG4gIFtuelZpc2libGVdPVwib3BlbigpXCJcbiAgW256VGl0bGVdPVwiJydcIlxuICBbbnpGb290ZXJdPVwibnVsbFwiXG4gIFtuekNsb3NhYmxlXT1cImZhbHNlXCJcbiAgW256TWFza109XCJtYXNrKClcIlxuICBbbnpNYXNrQ2xvc2FibGVdPVwibWFza0Nsb3NhYmxlKClcIlxuICBbbnpLZXlib2FyZF09XCJrZXlib2FyZCgpXCJcbiAgW256Q2VudGVyZWRdPVwiY2VudGVyZWQoKVwiXG4gIFtueldpZHRoXT1cIndpZHRoKClcIlxuICBbbnpaSW5kZXhdPVwiekluZGV4KClcIlxuICBbbnpXcmFwQ2xhc3NOYW1lXT1cInJlc29sdmVkV3JhcENsYXNzTmFtZSgpXCJcbiAgW256Q2xhc3NOYW1lXT1cInJlc29sdmVkQ2xhc3NOYW1lKClcIlxuICAobnpWaXNpYmxlQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZSgkZXZlbnQpXCJcbiAgKG56QWZ0ZXJPcGVuKT1cImFmdGVyT3Blbi5lbWl0KClcIlxuICAobnpBZnRlckNsb3NlKT1cImFmdGVyQ2xvc2UuZW1pdCgpXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbnpNb2RhbENvbnRlbnQ+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJnZW8tZm9ybS1tb2RhbF9fY29udGVudFwiXG4gICAgICBbY2xhc3MuZ2VvLWZvcm0tbW9kYWxfX2NvbnRlbnQtLWJvZHktc2Nyb2xsXT1cImJvZHlTY3JvbGwoKVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImdlby1mb3JtLW1vZGFsX19oZWFkZXJcIj5cbiAgICAgICAgPGgyXG4gICAgICAgICAgY2xhc3M9XCJnZW8tZm9ybS1tb2RhbF9fdGl0bGVcIlxuICAgICAgICAgIFtjbGFzcy5nZW8tZm9ybS1tb2RhbF9fdGl0bGUtLXVwcGVyY2FzZV09XCJ0aXRsZVVwcGVyY2FzZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRpdGxlKCkgfX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgQGlmIChjbG9zYWJsZSgpKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImdlby1mb3JtLW1vZGFsX19jbG9zZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwixJDDs25nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cImNsb3NlXCIgbnpUaGVtZT1cIm91dGxpbmVcIj48L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2JvZHlcIlxuICAgICAgICBbc3R5bGUuLS1nZW8tZm9ybS1tb2RhbC1ib2R5LW1heC1oZWlnaHRdPVwiYm9keVNjcm9sbCgpID8gYm9keU1heEhlaWdodENzcygpIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2Zvb3RlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZm9vdGVyU3RhcnRdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnZW8tZm9ybS1tb2RhbF9fZm9vdGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICA8Z2VvLWJ1dHRvblxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImJyYW5kXCJcbiAgICAgICAgICAgIFtpY29uXT1cImNhbmNlbEljb24oKVwiXG4gICAgICAgICAgICBbaWNvblBsYWNlbWVudF09XCJjYW5jZWxJY29uUGxhY2VtZW50KClcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcmVhZG9ubHkoKSA/ICfEkMOzbmcnIDogY2FuY2VsVGV4dCgpIH19XG4gICAgICAgICAgPC9nZW8tYnV0dG9uPlxuICAgICAgICAgIEBpZiAoIXJlYWRvbmx5KCkgJiYgc2Vjb25kYXJ5T2tUZXh0KCkpIHtcbiAgICAgICAgICAgIDxnZW8tYnV0dG9uXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBjb2xvcj1cImJyYW5kXCJcbiAgICAgICAgICAgICAgaWNvbj1cInNhdmVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2tEaXNhYmxlZCgpIHx8IGNvbmZpcm1Mb2FkaW5nKClcIlxuICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvblNlY29uZGFyeU9rKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWNvbmRhcnlPa1RleHQoKSB9fVxuICAgICAgICAgICAgPC9nZW8tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKCFyZWFkb25seSgpKSB7XG4gICAgICAgICAgICA8Z2VvLWJ1dHRvblxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIGNvbG9yPVwiYnJhbmRcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJjb25maXJtTG9hZGluZygpID8gJ2xvYWRpbmcnIDogb2tJY29uKClcIlxuICAgICAgICAgICAgICBbaWNvblBsYWNlbWVudF09XCJva0ljb25QbGFjZW1lbnQoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJva0Rpc2FibGVkKCkgfHwgY29uZmlybUxvYWRpbmcoKVwiXG4gICAgICAgICAgICAgIChjbGlja2VkKT1cIm9uT2soKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9rVGV4dCgpIH19XG4gICAgICAgICAgICA8L2dlby1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbnotbW9kYWw+XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, Input, ViewEncapsulation } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation, } from '@angular/core';
2
2
  import { NzIconModule } from 'ng-zorro-antd/icon';
3
3
  import { GEO_ICON_SIZE_MAP } from './geo-icon.types';
4
4
  import * as i0 from "@angular/core";
@@ -9,43 +9,33 @@ import * as i1 from "ng-zorro-antd/icon";
9
9
  */
10
10
  export class GeoIconComponent {
11
11
  /** Tên icon Ant Design (vd. `close`, `search`, `appstore`). */
12
- type;
13
- theme = 'outline';
14
- spin = false;
12
+ type = input.required();
13
+ theme = input('outline');
14
+ spin = input(false);
15
15
  /** xs | sm | md | lg | xl | number(px) | CSS size string */
16
- size = 'md';
16
+ size = input('md');
17
17
  /** CSS color — ưu tiên design token, vd. `var(--geo-color-primary-default)` */
18
- color;
19
- get resolvedSize() {
20
- if (typeof this.size === 'number') {
21
- return `${this.size}px`;
18
+ color = input(undefined);
19
+ resolvedSize = computed(() => {
20
+ const size = this.size();
21
+ if (typeof size === 'number') {
22
+ return `${size}px`;
22
23
  }
23
- if (this.size in GEO_ICON_SIZE_MAP) {
24
- return GEO_ICON_SIZE_MAP[this.size];
24
+ if (size in GEO_ICON_SIZE_MAP) {
25
+ return GEO_ICON_SIZE_MAP[size];
25
26
  }
26
- return String(this.size);
27
- }
27
+ return String(size);
28
+ });
28
29
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GeoIconComponent, isStandalone: true, selector: "geo-icon", inputs: { type: "type", theme: "theme", spin: "spin", size: "size", color: "color" }, host: { properties: { "style.--geo-icon-size": "resolvedSize", "style.color": "color || null", "class.geo-icon-host--spin": "spin" }, classAttribute: "geo-icon-host" }, ngImport: i0, template: "<span\n class=\"geo-icon\"\n nz-icon\n [nzType]=\"type\"\n [nzTheme]=\"theme\"\n [nzSpin]=\"spin\"\n></span>\n", styles: [".geo-icon-host{display:inline-flex;align-items:center;justify-content:center;line-height:1;color:inherit;vertical-align:middle}.geo-icon-host--spin{color:var(--geo-color-primary-default)}.geo-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:var(--geo-icon-size, 16px)}.geo-icon .anticon{font-size:inherit}\n"], dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], encapsulation: i0.ViewEncapsulation.None });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: GeoIconComponent, isStandalone: true, selector: "geo-icon", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, spin: { classPropertyName: "spin", publicName: "spin", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--geo-icon-size": "resolvedSize()", "style.color": "color() || null", "class.geo-icon-host--spin": "spin()" }, classAttribute: "geo-icon-host" }, ngImport: i0, template: "<span\n class=\"geo-icon\"\n nz-icon\n [nzType]=\"type()\"\n [nzTheme]=\"theme()\"\n [nzSpin]=\"spin()\"\n></span>\n", styles: [".geo-icon-host{display:inline-flex;align-items:center;justify-content:center;line-height:1;color:inherit;vertical-align:middle}.geo-icon-host--spin{color:var(--geo-color-primary-default)}.geo-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:var(--geo-icon-size, 16px)}.geo-icon .anticon{font-size:inherit}\n"], dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
30
31
  }
31
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoIconComponent, decorators: [{
32
33
  type: Component,
33
- args: [{ selector: 'geo-icon', standalone: true, imports: [NzIconModule], encapsulation: ViewEncapsulation.None, host: {
34
+ args: [{ selector: 'geo-icon', standalone: true, imports: [NzIconModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
34
35
  class: 'geo-icon-host',
35
- '[style.--geo-icon-size]': 'resolvedSize',
36
- '[style.color]': 'color || null',
37
- '[class.geo-icon-host--spin]': 'spin',
38
- }, template: "<span\n class=\"geo-icon\"\n nz-icon\n [nzType]=\"type\"\n [nzTheme]=\"theme\"\n [nzSpin]=\"spin\"\n></span>\n", styles: [".geo-icon-host{display:inline-flex;align-items:center;justify-content:center;line-height:1;color:inherit;vertical-align:middle}.geo-icon-host--spin{color:var(--geo-color-primary-default)}.geo-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:var(--geo-icon-size, 16px)}.geo-icon .anticon{font-size:inherit}\n"] }]
39
- }], propDecorators: { type: [{
40
- type: Input,
41
- args: [{ required: true }]
42
- }], theme: [{
43
- type: Input
44
- }], spin: [{
45
- type: Input
46
- }], size: [{
47
- type: Input
48
- }], color: [{
49
- type: Input
50
- }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWljb24vZ2VvLWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWljb24vZ2VvLWljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWhGOzs7R0FHRztBQWVILE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsK0RBQStEO0lBQ3BDLElBQUksQ0FBVTtJQUNoQyxLQUFLLEdBQWlCLFNBQVMsQ0FBQztJQUNoQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLDREQUE0RDtJQUNuRCxJQUFJLEdBQWdCLElBQUksQ0FBQztJQUNsQywrRUFBK0U7SUFDdEUsS0FBSyxDQUFVO0lBRXhCLElBQUksWUFBWTtRQUNkLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQXNDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7d0dBbEJVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLG1VQ3RCN0IscUhBT0Esc1pESVksWUFBWTs7NEZBV1gsZ0JBQWdCO2tCQWQ1QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsaUJBR1IsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsZUFBZTt3QkFDdEIseUJBQXlCLEVBQUUsY0FBYzt3QkFDekMsZUFBZSxFQUFFLGVBQWU7d0JBQ2hDLDZCQUE2QixFQUFFLE1BQU07cUJBQ3RDOzhCQUkwQixJQUFJO3NCQUE5QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5pbXBvcnQgeyBHRU9fSUNPTl9TSVpFX01BUCwgR2VvSWNvblNpemUsIEdlb0ljb25UaGVtZSB9IGZyb20gJy4vZ2VvLWljb24udHlwZXMnO1xuXG4vKipcbiAqIEljb24gd3JhcHBlciDigJQgZG9tYWluIGTDuW5nIGBnZW8taWNvbmAsIGtow7RuZyBkw7luZyBgbnotaWNvbmAgdHLhu7FjIHRp4bq/cC5cbiAqIFdyYXAgQW50IERlc2lnbiBpY29ucyAoxJHDoyByZWdpc3RlciBxdWEgYE5aX0lDT05TYCDhu58gYXBwL1N0b3J5Ym9vaykuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1pY29uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW056SWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8taWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8taWNvbi5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1pY29uLWhvc3QnLFxuICAgICdbc3R5bGUuLS1nZW8taWNvbi1zaXplXSc6ICdyZXNvbHZlZFNpemUnLFxuICAgICdbc3R5bGUuY29sb3JdJzogJ2NvbG9yIHx8IG51bGwnLFxuICAgICdbY2xhc3MuZ2VvLWljb24taG9zdC0tc3Bpbl0nOiAnc3BpbicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0ljb25Db21wb25lbnQge1xuICAvKiogVMOqbiBpY29uIEFudCBEZXNpZ24gKHZkLiBgY2xvc2VgLCBgc2VhcmNoYCwgYGFwcHN0b3JlYCkuICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHR5cGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRoZW1lOiBHZW9JY29uVGhlbWUgPSAnb3V0bGluZSc7XG4gIEBJbnB1dCgpIHNwaW4gPSBmYWxzZTtcbiAgLyoqIHhzIHwgc20gfCBtZCB8IGxnIHwgeGwgfCBudW1iZXIocHgpIHwgQ1NTIHNpemUgc3RyaW5nICovXG4gIEBJbnB1dCgpIHNpemU6IEdlb0ljb25TaXplID0gJ21kJztcbiAgLyoqIENTUyBjb2xvciDigJQgxrB1IHRpw6puIGRlc2lnbiB0b2tlbiwgdmQuIGB2YXIoLS1nZW8tY29sb3ItcHJpbWFyeS1kZWZhdWx0KWAgKi9cbiAgQElucHV0KCkgY29sb3I/OiBzdHJpbmc7XG5cbiAgZ2V0IHJlc29sdmVkU2l6ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdGhpcy5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGAke3RoaXMuc2l6ZX1weGA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNpemUgaW4gR0VPX0lDT05fU0laRV9NQVApIHtcbiAgICAgIHJldHVybiBHRU9fSUNPTl9TSVpFX01BUFt0aGlzLnNpemUgYXMga2V5b2YgdHlwZW9mIEdFT19JQ09OX1NJWkVfTUFQXTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnNpemUpO1xuICB9XG59XG4iLCI8c3BhblxuICBjbGFzcz1cImdlby1pY29uXCJcbiAgbnotaWNvblxuICBbbnpUeXBlXT1cInR5cGVcIlxuICBbbnpUaGVtZV09XCJ0aGVtZVwiXG4gIFtuelNwaW5dPVwic3BpblwiXG4+PC9zcGFuPlxuIl19
36
+ '[style.--geo-icon-size]': 'resolvedSize()',
37
+ '[style.color]': 'color() || null',
38
+ '[class.geo-icon-host--spin]': 'spin()',
39
+ }, template: "<span\n class=\"geo-icon\"\n nz-icon\n [nzType]=\"type()\"\n [nzTheme]=\"theme()\"\n [nzSpin]=\"spin()\"\n></span>\n", styles: [".geo-icon-host{display:inline-flex;align-items:center;justify-content:center;line-height:1;color:inherit;vertical-align:middle}.geo-icon-host--spin{color:var(--geo-color-primary-default)}.geo-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:var(--geo-icon-size, 16px)}.geo-icon .anticon{font-size:inherit}\n"] }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWljb24vZ2VvLWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWljb24vZ2VvLWljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWhGOzs7R0FHRztBQWdCSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLCtEQUErRDtJQUN0RCxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0lBQ2hDLEtBQUssR0FBRyxLQUFLLENBQWUsU0FBUyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3Qiw0REFBNEQ7SUFDbkQsSUFBSSxHQUFHLEtBQUssQ0FBYyxJQUFJLENBQUMsQ0FBQztJQUN6QywrRUFBK0U7SUFDdEUsS0FBSyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFFN0MsWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQzlCLE9BQU8saUJBQWlCLENBQUMsSUFBc0MsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQzt3R0FuQlEsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsNjBCQzdCN0IsMkhBT0Esc1pEVVksWUFBWTs7NEZBWVgsZ0JBQWdCO2tCQWY1QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsaUJBR1IsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsZUFBZTt3QkFDdEIseUJBQXlCLEVBQUUsZ0JBQWdCO3dCQUMzQyxlQUFlLEVBQUUsaUJBQWlCO3dCQUNsQyw2QkFBNkIsRUFBRSxRQUFRO3FCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IEdFT19JQ09OX1NJWkVfTUFQLCBHZW9JY29uU2l6ZSwgR2VvSWNvblRoZW1lIH0gZnJvbSAnLi9nZW8taWNvbi50eXBlcyc7XG5cbi8qKlxuICogSWNvbiB3cmFwcGVyIOKAlCBkb21haW4gZMO5bmcgYGdlby1pY29uYCwga2jDtG5nIGTDuW5nIGBuei1pY29uYCB0cuG7sWMgdGnhur9wLlxuICogV3JhcCBBbnQgRGVzaWduIGljb25zICjEkcOjIHJlZ2lzdGVyIHF1YSBgTlpfSUNPTlNgIOG7nyBhcHAvU3Rvcnlib29rKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLWljb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTnpJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1pY29uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1pY29uLmNvbXBvbmVudC5zY3NzJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1pY29uLWhvc3QnLFxuICAgICdbc3R5bGUuLS1nZW8taWNvbi1zaXplXSc6ICdyZXNvbHZlZFNpemUoKScsXG4gICAgJ1tzdHlsZS5jb2xvcl0nOiAnY29sb3IoKSB8fCBudWxsJyxcbiAgICAnW2NsYXNzLmdlby1pY29uLWhvc3QtLXNwaW5dJzogJ3NwaW4oKScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0ljb25Db21wb25lbnQge1xuICAvKiogVMOqbiBpY29uIEFudCBEZXNpZ24gKHZkLiBgY2xvc2VgLCBgc2VhcmNoYCwgYGFwcHN0b3JlYCkuICovXG4gIHJlYWRvbmx5IHR5cGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHRoZW1lID0gaW5wdXQ8R2VvSWNvblRoZW1lPignb3V0bGluZScpO1xuICByZWFkb25seSBzcGluID0gaW5wdXQoZmFsc2UpO1xuICAvKiogeHMgfCBzbSB8IG1kIHwgbGcgfCB4bCB8IG51bWJlcihweCkgfCBDU1Mgc2l6ZSBzdHJpbmcgKi9cbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PEdlb0ljb25TaXplPignbWQnKTtcbiAgLyoqIENTUyBjb2xvciDigJQgxrB1IHRpw6puIGRlc2lnbiB0b2tlbiwgdmQuIGB2YXIoLS1nZW8tY29sb3ItcHJpbWFyeS1kZWZhdWx0KWAgKi9cbiAgcmVhZG9ubHkgY29sb3IgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUoKTtcbiAgICBpZiAodHlwZW9mIHNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gYCR7c2l6ZX1weGA7XG4gICAgfVxuICAgIGlmIChzaXplIGluIEdFT19JQ09OX1NJWkVfTUFQKSB7XG4gICAgICByZXR1cm4gR0VPX0lDT05fU0laRV9NQVBbc2l6ZSBhcyBrZXlvZiB0eXBlb2YgR0VPX0lDT05fU0laRV9NQVBdO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHNpemUpO1xuICB9KTtcbn1cbiIsIjxzcGFuXG4gIGNsYXNzPVwiZ2VvLWljb25cIlxuICBuei1pY29uXG4gIFtuelR5cGVdPVwidHlwZSgpXCJcbiAgW256VGhlbWVdPVwidGhlbWUoKVwiXG4gIFtuelNwaW5dPVwic3BpbigpXCJcbj48L3NwYW4+XG4iXX0=