@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
package/ai/recipes.md CHANGED
@@ -1,25 +1,23 @@
1
- # GEO UI — Recipes (AI)
1
+ # GEO UI — Recipes
2
2
 
3
3
  Copy-paste patterns for common screens. Adjust labels/bindings only.
4
4
 
5
+ Import what you need:
6
+
7
+ ```ts
8
+ import { GeoButtonComponent, GeoInputComponent, GeoFormModalComponent, GeoStepperComponent, GeoBreadcrumbComponent, GeoPageTitleComponent, GeoTableComponent, GeoTableToolbarComponent, GeoToastService, GeoStatusTagComponent, GeoTypographyComponent, GeoConfirmModalComponent } from "@geoit/ui";
9
+ ```
10
+
5
11
  ## 1. Form modal (single step)
6
12
 
7
13
  ```html
8
14
  <geo-button appearance="primary" color="brand" (clicked)="open = true">Mở</geo-button>
9
15
 
10
- <geo-form-modal
11
- [open]="open"
12
- title="Thêm mới danh mục"
13
- cancelText="Hủy bỏ"
14
- okText="Lưu"
15
- [width]="720"
16
- (openChange)="open = $event"
17
- (ok)="onSave()"
18
- (cancel)="open = false"
19
- >
16
+ <geo-form-modal [open]="open" title="Thêm mới danh mục" cancelText="Hủy bỏ" okText="Lưu" [width]="720" (openChange)="open = $event" (ok)="onSave()" (cancel)="open = false">
20
17
  <div style="display:grid;grid-template-columns:1fr 1fr;gap:16px;">
21
18
  <geo-input label="Mã" [required]="true" [block]="true" [(ngModel)]="code"></geo-input>
22
19
  <geo-input label="Tên" [required]="true" [block]="true" [(ngModel)]="name"></geo-input>
20
+ <geo-select label="Trạng thái" [options]="[{ label: 'Active', value: 1 }, { label: 'Inactive', value: 0 }]" [(ngModel)]="status" [block]="true"></geo-select>
23
21
  </div>
24
22
  </geo-form-modal>
25
23
  ```
@@ -27,30 +25,13 @@ Copy-paste patterns for common screens. Adjust labels/bindings only.
27
25
  ## 2. Form modal + steps (multi-step dialog)
28
26
 
29
27
  ```html
30
- <geo-form-modal
31
- [open]="open"
32
- title="Lập phiếu đăng ký khai thác"
33
- [cancelText]="activeIndex === 0 ? 'Hủy bỏ' : 'Quay lại'"
34
- [cancelIcon]="activeIndex === 0 ? undefined : 'left'"
35
- [okText]="isLast ? 'Gửi phiếu đăng ký' : 'Tiếp theo'"
36
- [okIcon]="isLast ? undefined : 'right'"
37
- okIconPlacement="end"
38
- [width]="800"
39
- (ok)="onNext()"
40
- (cancel)="onBackOrClose()"
41
- (openChange)="open = $event"
42
- >
43
- <geo-stepper
44
- [steps]="steps"
45
- [activeIndex]="activeIndex"
46
- orientation="horizontal"
47
- [clickable]="false"
48
- ></geo-stepper>
28
+ <geo-form-modal [open]="open" title="Lập phiếu đăng ký khai thác" [cancelText]="activeIndex === 0 ? 'Hủy bỏ' : 'Quay lại'" [cancelIcon]="activeIndex === 0 ? undefined : 'left'" [okText]="isLast ? 'Gửi phiếu đăng ký' : 'Tiếp theo'" [okIcon]="isLast ? undefined : 'right'" okIconPlacement="end" [width]="800" (ok)="onNext()" (cancel)="onBackOrClose()" (openChange)="open = $event">
29
+ <geo-stepper [steps]="steps" [activeIndex]="activeIndex" orientation="horizontal" [clickable]="false"></geo-stepper>
49
30
 
50
31
  @if (activeIndex === 0) {
51
- <!-- step 1 form fields -->
32
+ <!-- step 1 form fields -->
52
33
  } @else {
53
- <!-- step 2 confirm -->
34
+ <!-- step 2 confirm -->
54
35
  }
55
36
  </geo-form-modal>
56
37
  ```
@@ -60,17 +41,23 @@ steps = [
60
41
  { key: 'info', label: '1. Thông tin phiếu mượn' },
61
42
  { key: 'confirm', label: '2. Xác nhận yêu cầu' },
62
43
  ];
44
+ activeIndex = 0;
45
+ get isLast(): boolean {
46
+ return this.activeIndex >= this.steps.length - 1;
47
+ }
63
48
  ```
64
49
 
65
50
  ## 3. Page header: breadcrumb + title
66
51
 
67
52
  ```html
68
53
  <div style="display:flex;flex-direction:column;gap:16px;">
69
- <geo-breadcrumb [items]="[
54
+ <geo-breadcrumb
55
+ [items]="[
70
56
  { label: 'Trang chủ', link: '/' },
71
57
  { label: 'Tra cứu hồ sơ', link: '/tra-cuu' },
72
58
  { label: 'Xem chi tiết hồ sơ' }
73
- ]"></geo-breadcrumb>
59
+ ]"
60
+ ></geo-breadcrumb>
74
61
  <geo-page-title title="Thông tin chi tiết hồ sơ"></geo-page-title>
75
62
  </div>
76
63
  ```
@@ -85,27 +72,125 @@ constructor(private toast: GeoToastService) {}
85
72
  save(): void {
86
73
  this.toast.success('Thành công!', 'Đã lưu hồ sơ.');
87
74
  }
75
+
76
+ fail(): void {
77
+ this.toast.error('Lỗi!', 'Không thể lưu.');
78
+ }
79
+ ```
80
+
81
+ ## 5. Confirm delete
82
+
83
+ ```html
84
+ <geo-button appearance="primary" color="danger" (clicked)="confirmOpen = true">Xóa</geo-button>
85
+
86
+ <geo-confirm-modal [visible]="confirmOpen" title="Xóa hồ sơ?" message="Hành động không thể hoàn tác." confirmText="Xóa" (confirm)="onDelete()" (visibleChange)="confirmOpen = $event"></geo-confirm-modal>
88
87
  ```
89
88
 
90
- ## 5. Table list (minimal)
89
+ ## 6. Table list (toolbar + table)
91
90
 
92
91
  ```html
93
92
  <geo-table-toolbar [resultCount]="total" [showAdd]="true" (addClick)="openCreate()"></geo-table-toolbar>
94
93
 
95
- <geo-table
96
- [columns]="columns"
97
- [data]="rows"
98
- [total]="total"
99
- [pageIndex]="pageIndex"
100
- [pageSize]="pageSize"
101
- (pageIndexChange)="pageIndex = $event; load()"
102
- (pageSizeChange)="pageSize = $event; load()"
103
- ></geo-table>
94
+ <geo-table [columns]="columns" [data]="rows" [total]="total" [pageIndex]="pageIndex" [pageSize]="pageSize" (pageIndexChange)="pageIndex = $event; load()" (pageSizeChange)="pageSize = $event; load()"></geo-table>
104
95
  ```
105
96
 
106
- ## 6. Typography + status
97
+ ```ts
98
+ columns = [
99
+ { key: "code", title: "Mã", width: 120 },
100
+ { key: "name", title: "Tên" },
101
+ { key: "status", title: "Trạng thái" },
102
+ ];
103
+ ```
104
+
105
+ ## 7. Typography + status
107
106
 
108
107
  ```html
109
- <geo-typography variant="h4" [strong]="true">1. Thông tin cá nhân</geo-typography>
110
- <geo-status-tag status="success" label="Đã duyệt"></geo-status-tag>
108
+ <geo-typography variant="h4" [strong]="true">1. Thông tin cá nhân</geo-typography> <geo-status-tag status="success" label="Đã duyệt"></geo-status-tag>
111
109
  ```
110
+
111
+ ## 8. Tabs with content
112
+
113
+ ```html
114
+ <geo-tabs [items]="[{ key: 'info', title: 'Thông tin' }, { key: 'files', title: 'Tệp đính kèm' }]" [(selectedKey)]="tab">
115
+ <ng-template uiTab="info">…</ng-template>
116
+ <ng-template uiTab="files">…</ng-template>
117
+ </geo-tabs>
118
+ ```
119
+
120
+ ## 9. App shell layout
121
+
122
+ ```html
123
+ <geo-layout
124
+ [menuItems]="menu"
125
+ [(expanded)]="expanded"
126
+ [isMobile]="isMobile"
127
+ [(mobileMenuOpen)]="mobileOpen"
128
+ [breadcrumbs]="crumbs"
129
+ [(selectedKey)]="activeKey"
130
+ [user]="{ name: 'vnpt', email: 'vnpt@vnpt.vn' }"
131
+ [showFooter]="true"
132
+ (menuSelect)="onNav($event)"
133
+ (logout)="onLogout()"
134
+ >
135
+ <geo-page-title title="Tra cứu theo thửa"></geo-page-title>
136
+ <!-- page body -->
137
+ </geo-layout>
138
+ ```
139
+
140
+ Pieces (có thể dùng riêng): `geo-layout-sidebar`, `geo-layout-header`, `geo-layout-footer`, `geo-layout-header-actions`.
141
+
142
+ Override header actions:
143
+
144
+ ```html
145
+ <geo-layout ...>
146
+ <div geoLayoutActions>...</div>
147
+ ...
148
+ </geo-layout>
149
+ ```
150
+
151
+ ```ts
152
+ menu = [
153
+ { key: 'home', title: 'Tổng quan', icon: 'dashboard' },
154
+ {
155
+ key: 'lookup',
156
+ title: 'Tra cứu',
157
+ icon: 'file-search',
158
+ children: [
159
+ { key: 'parcel', title: 'Theo thửa' },
160
+ { key: 'owner', title: 'Theo chủ sử dụng' },
161
+ ],
162
+ },
163
+ ];
164
+ ```
165
+
166
+ ## 10. Dashboard (TCQH.1–3)
167
+
168
+ ```html
169
+ <geo-dashboard
170
+ [stats]="stats"
171
+ [wardData]="wards"
172
+ [mismatchData]="mismatch"
173
+ [(period)]="period"
174
+ (mismatchSegmentClick)="openMismatchPopup($event)"
175
+ ></geo-dashboard>
176
+ ```
177
+
178
+ Primitives: `geo-stat-card`, `geo-chart` (bar/donut), `geo-page-header`, `geo-empty-state`.
179
+
180
+ ## 11. Auth (STT 35–36)
181
+
182
+ ```html
183
+ <geo-login (submitLogin)="login($event)" (forgotPassword)="goForgot()"></geo-login>
184
+ <geo-forgot-password (submitEmail)="reset($event)" (backToLogin)="goLogin()"></geo-forgot-password>
185
+ ```
186
+
187
+ ## 12. Phản ánh & phân tích
188
+
189
+ ```html
190
+ <geo-feedback-form (submittedFeedback)="send($event)"></geo-feedback-form>
191
+ <geo-overlap-result [rows]="overlapRows" (rowClick)="focusOnMap($event)"></geo-overlap-result>
192
+ ```
193
+
194
+ List pages (thống kê tờ/bản đồ, QL người dùng, đồng bộ iLIS, QL bản đồ): `geo-list-page` + `geo-table-toolbar` + `geo-table` + `geo-form-modal`.
195
+
196
+ Storybook: `GEO/Pages/Admin CRUD` (STT 28, TCQH.24, STT 31).
@@ -1,22 +1,19 @@
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 { NzIconModule } from 'ng-zorro-antd/icon';
4
3
  import { UI_ALERT_DEFAULT_TITLES } from './geo-alert.types';
5
4
  import * as i0 from "@angular/core";
6
5
  import * as i1 from "ng-zorro-antd/icon";
7
6
  export class GeoAlertComponent {
8
- type = 'info';
9
- title = '';
10
- message = '';
11
- closable = true;
12
- visible = true;
13
- showIcon = true;
14
- closed = new EventEmitter();
15
- get displayTitle() {
16
- return this.title || UI_ALERT_DEFAULT_TITLES[this.type];
17
- }
18
- get iconType() {
19
- switch (this.type) {
7
+ type = input('info');
8
+ title = input('');
9
+ message = input('');
10
+ closable = input(true);
11
+ visible = model(true);
12
+ showIcon = input(true);
13
+ closed = output();
14
+ displayTitle = computed(() => this.title() || UI_ALERT_DEFAULT_TITLES[this.type()]);
15
+ iconType = computed(() => {
16
+ switch (this.type()) {
20
17
  case 'success':
21
18
  return 'check-circle';
22
19
  case 'error':
@@ -26,33 +23,19 @@ export class GeoAlertComponent {
26
23
  default:
27
24
  return 'info-circle';
28
25
  }
29
- }
26
+ });
30
27
  onClose() {
31
- this.visible = false;
28
+ this.visible.set(false);
32
29
  this.closed.emit();
33
30
  }
34
31
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoAlertComponent, isStandalone: true, selector: "geo-alert", inputs: { type: "type", title: "title", message: "message", closable: "closable", visible: "visible", showIcon: "showIcon" }, outputs: { closed: "closed" }, host: { properties: { "class.geo-alert-host--hidden": "!visible" }, classAttribute: "geo-alert-host" }, ngImport: i0, template: "@if (visible) {\n <div class=\"geo-alert\" [class]=\"'geo-alert--' + type\" role=\"alert\">\n <div class=\"geo-alert__main\">\n @if (showIcon) {\n <span class=\"geo-alert__icon\" nz-icon [nzType]=\"iconType\" nzTheme=\"outline\"></span>\n }\n\n <div class=\"geo-alert__content\">\n <p class=\"geo-alert__title\">{{ displayTitle }}</p>\n @if (message) {\n <p class=\"geo-alert__message\">{{ message }}</p>\n }\n </div>\n </div>\n\n @if (closable) {\n <button type=\"button\" class=\"geo-alert__close\" aria-label=\"\u0110\u00F3ng th\u00F4ng b\u00E1o\" (click)=\"onClose()\">\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";geo-alert.geo-alert-host,.geo-alert-host{display:block;width:100%}.geo-alert-host--hidden{display:none}.geo-alert{display:flex;align-items:flex-start;justify-content:space-between;gap:9px;width:100%;padding:16px;border:1px solid transparent;border-radius:var(--geo-radius);box-sizing:border-box}.geo-alert__main{display:flex;align-items:flex-start;gap:8px;min-width:0;flex:1 1 auto}.geo-alert__icon{display:inline-flex;flex-shrink:0;width:24px;height:24px;font-size:24px;line-height:1}.geo-alert__content{display:flex;flex-direction:column;gap:0;min-width:0}.geo-alert__title,.geo-alert__message{margin:0;font-size:var(--geo-font-size-lg);line-height:24px}.geo-alert__title{font-weight:700}.geo-alert__message{font-weight:400}.geo-alert__close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;cursor:pointer;flex-shrink:0}.geo-alert--success{background:var(--geo-color-success-light);border-color:var(--geo-color-success-default)}.geo-alert--success .geo-alert__title,.geo-alert--success .geo-alert__message,.geo-alert--success .geo-alert__icon{color:var(--geo-color-success-dark)}.geo-alert--success .geo-alert__close{color:var(--geo-color-success-default)}.geo-alert--error{background:var(--geo-color-error-light);border-color:var(--geo-color-error-default)}.geo-alert--error .geo-alert__title,.geo-alert--error .geo-alert__message,.geo-alert--error .geo-alert__icon{color:var(--geo-color-error-default)}.geo-alert--error .geo-alert__close{color:var(--geo-color-error-dark)}.geo-alert--warning{background:var(--geo-color-warning-light);border-color:var(--geo-color-warning-default)}.geo-alert--warning .geo-alert__title,.geo-alert--warning .geo-alert__message{color:var(--geo-color-warning-dark)}.geo-alert--warning .geo-alert__icon,.geo-alert--warning .geo-alert__close{color:var(--geo-color-warning-default)}.geo-alert--info{background:var(--geo-color-info-light);border-color:var(--geo-color-info-default)}.geo-alert--info .geo-alert__title,.geo-alert--info .geo-alert__message,.geo-alert--info .geo-alert__icon{color:var(--geo-color-info-dark)}.geo-alert--info .geo-alert__close{color:var(--geo-color-info-default)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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 });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoAlertComponent, isStandalone: true, selector: "geo-alert", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange", closed: "closed" }, host: { properties: { "class.geo-alert-host--hidden": "!visible()" }, classAttribute: "geo-alert-host" }, ngImport: i0, template: "@if (visible()) {\n <div class=\"geo-alert\" [class]=\"'geo-alert--' + type()\" role=\"alert\">\n <div class=\"geo-alert__main\">\n @if (showIcon()) {\n <span class=\"geo-alert__icon\" nz-icon [nzType]=\"iconType()\" nzTheme=\"outline\"></span>\n }\n\n <div class=\"geo-alert__content\">\n <p class=\"geo-alert__title\">{{ displayTitle() }}</p>\n @if (message()) {\n <p class=\"geo-alert__message\">{{ message() }}</p>\n }\n </div>\n </div>\n\n @if (closable()) {\n <button type=\"button\" class=\"geo-alert__close\" aria-label=\"\u0110\u00F3ng th\u00F4ng b\u00E1o\" (click)=\"onClose()\">\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";geo-alert.geo-alert-host,.geo-alert-host{display:block;width:100%}.geo-alert-host--hidden{display:none}.geo-alert{display:flex;align-items:flex-start;justify-content:space-between;gap:9px;width:100%;padding:16px;border:1px solid transparent;border-radius:var(--geo-radius);box-sizing:border-box}.geo-alert__main{display:flex;align-items:flex-start;gap:8px;min-width:0;flex:1 1 auto}.geo-alert__icon{display:inline-flex;flex-shrink:0;width:24px;height:24px;font-size:24px;line-height:1}.geo-alert__content{display:flex;flex-direction:column;gap:0;min-width:0}.geo-alert__title,.geo-alert__message{margin:0;font-size:var(--geo-font-size-lg);line-height:24px}.geo-alert__title{font-weight:700}.geo-alert__message{font-weight:400}.geo-alert__close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;cursor:pointer;flex-shrink:0}.geo-alert--success{background:var(--geo-color-success-light);border-color:var(--geo-color-success-default)}.geo-alert--success .geo-alert__title,.geo-alert--success .geo-alert__message,.geo-alert--success .geo-alert__icon{color:var(--geo-color-success-dark)}.geo-alert--success .geo-alert__close{color:var(--geo-color-success-default)}.geo-alert--error{background:var(--geo-color-error-light);border-color:var(--geo-color-error-default)}.geo-alert--error .geo-alert__title,.geo-alert--error .geo-alert__message,.geo-alert--error .geo-alert__icon{color:var(--geo-color-error-default)}.geo-alert--error .geo-alert__close{color:var(--geo-color-error-dark)}.geo-alert--warning{background:var(--geo-color-warning-light);border-color:var(--geo-color-warning-default)}.geo-alert--warning .geo-alert__title,.geo-alert--warning .geo-alert__message{color:var(--geo-color-warning-dark)}.geo-alert--warning .geo-alert__icon,.geo-alert--warning .geo-alert__close{color:var(--geo-color-warning-default)}.geo-alert--info{background:var(--geo-color-info-light);border-color:var(--geo-color-info-default)}.geo-alert--info .geo-alert__title,.geo-alert--info .geo-alert__message,.geo-alert--info .geo-alert__icon{color:var(--geo-color-info-dark)}.geo-alert--info .geo-alert__close{color:var(--geo-color-info-default)}\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 });
36
33
  }
37
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoAlertComponent, decorators: [{
38
35
  type: Component,
39
- args: [{ selector: 'geo-alert', standalone: true, imports: [CommonModule, NzIconModule], encapsulation: ViewEncapsulation.None, host: {
36
+ args: [{ selector: 'geo-alert', standalone: true, imports: [NzIconModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
40
37
  class: 'geo-alert-host',
41
- '[class.geo-alert-host--hidden]': '!visible',
42
- }, template: "@if (visible) {\n <div class=\"geo-alert\" [class]=\"'geo-alert--' + type\" role=\"alert\">\n <div class=\"geo-alert__main\">\n @if (showIcon) {\n <span class=\"geo-alert__icon\" nz-icon [nzType]=\"iconType\" nzTheme=\"outline\"></span>\n }\n\n <div class=\"geo-alert__content\">\n <p class=\"geo-alert__title\">{{ displayTitle }}</p>\n @if (message) {\n <p class=\"geo-alert__message\">{{ message }}</p>\n }\n </div>\n </div>\n\n @if (closable) {\n <button type=\"button\" class=\"geo-alert__close\" aria-label=\"\u0110\u00F3ng th\u00F4ng b\u00E1o\" (click)=\"onClose()\">\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";geo-alert.geo-alert-host,.geo-alert-host{display:block;width:100%}.geo-alert-host--hidden{display:none}.geo-alert{display:flex;align-items:flex-start;justify-content:space-between;gap:9px;width:100%;padding:16px;border:1px solid transparent;border-radius:var(--geo-radius);box-sizing:border-box}.geo-alert__main{display:flex;align-items:flex-start;gap:8px;min-width:0;flex:1 1 auto}.geo-alert__icon{display:inline-flex;flex-shrink:0;width:24px;height:24px;font-size:24px;line-height:1}.geo-alert__content{display:flex;flex-direction:column;gap:0;min-width:0}.geo-alert__title,.geo-alert__message{margin:0;font-size:var(--geo-font-size-lg);line-height:24px}.geo-alert__title{font-weight:700}.geo-alert__message{font-weight:400}.geo-alert__close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;cursor:pointer;flex-shrink:0}.geo-alert--success{background:var(--geo-color-success-light);border-color:var(--geo-color-success-default)}.geo-alert--success .geo-alert__title,.geo-alert--success .geo-alert__message,.geo-alert--success .geo-alert__icon{color:var(--geo-color-success-dark)}.geo-alert--success .geo-alert__close{color:var(--geo-color-success-default)}.geo-alert--error{background:var(--geo-color-error-light);border-color:var(--geo-color-error-default)}.geo-alert--error .geo-alert__title,.geo-alert--error .geo-alert__message,.geo-alert--error .geo-alert__icon{color:var(--geo-color-error-default)}.geo-alert--error .geo-alert__close{color:var(--geo-color-error-dark)}.geo-alert--warning{background:var(--geo-color-warning-light);border-color:var(--geo-color-warning-default)}.geo-alert--warning .geo-alert__title,.geo-alert--warning .geo-alert__message{color:var(--geo-color-warning-dark)}.geo-alert--warning .geo-alert__icon,.geo-alert--warning .geo-alert__close{color:var(--geo-color-warning-default)}.geo-alert--info{background:var(--geo-color-info-light);border-color:var(--geo-color-info-default)}.geo-alert--info .geo-alert__title,.geo-alert--info .geo-alert__message,.geo-alert--info .geo-alert__icon{color:var(--geo-color-info-dark)}.geo-alert--info .geo-alert__close{color:var(--geo-color-info-default)}\n"] }]
43
- }], propDecorators: { type: [{
44
- type: Input
45
- }], title: [{
46
- type: Input
47
- }], message: [{
48
- type: Input
49
- }], closable: [{
50
- type: Input
51
- }], visible: [{
52
- type: Input
53
- }], showIcon: [{
54
- type: Input
55
- }], closed: [{
56
- type: Output
57
- }] } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWFsZXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1hbGVydC9nZW8tYWxlcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWFsZXJ0L2dlby1hbGVydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBZ0IsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBYzFFLE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsSUFBSSxHQUFpQixNQUFNLENBQUM7SUFDNUIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDZixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBRWYsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFNUMsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sY0FBYyxDQUFDO1lBQ3hCLEtBQUssT0FBTztnQkFDVixPQUFPLGNBQWMsQ0FBQztZQUN4QixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxvQkFBb0IsQ0FBQztZQUM5QjtnQkFDRSxPQUFPLGFBQWEsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7d0dBOUJVLGlCQUFpQjs0RkFBakIsaUJBQWlCLDBVQ3ZCOUIsa3ZCQXNCQSx3dUVEUlksWUFBWSw4QkFBRSxZQUFZOzs0RkFTekIsaUJBQWlCO2tCQVo3QixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLGlCQUd0QixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLEtBQUssRUFBRSxnQkFBZ0I7d0JBQ3ZCLGdDQUFnQyxFQUFFLFVBQVU7cUJBQzdDOzhCQUdRLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuaW1wb3J0IHsgVUlfQUxFUlRfREVGQVVMVF9USVRMRVMsIEdlb0FsZXJ0VHlwZSB9IGZyb20gJy4vZ2VvLWFsZXJ0LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLWFsZXJ0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTnpJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1hbGVydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tYWxlcnQuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdnZW8tYWxlcnQtaG9zdCcsXG4gICAgJ1tjbGFzcy5nZW8tYWxlcnQtaG9zdC0taGlkZGVuXSc6ICchdmlzaWJsZScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0FsZXJ0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgdHlwZTogR2VvQWxlcnRUeXBlID0gJ2luZm8nO1xuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xuICBASW5wdXQoKSBtZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIGNsb3NhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgdmlzaWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dJY29uID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGdldCBkaXNwbGF5VGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50aXRsZSB8fCBVSV9BTEVSVF9ERUZBVUxUX1RJVExFU1t0aGlzLnR5cGVdO1xuICB9XG5cbiAgZ2V0IGljb25UeXBlKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gJ2NoZWNrLWNpcmNsZSc7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHJldHVybiAnY2xvc2UtY2lyY2xlJztcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICByZXR1cm4gJ2V4Y2xhbWF0aW9uLWNpcmNsZSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2luZm8tY2lyY2xlJztcbiAgICB9XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxufVxuIiwiQGlmICh2aXNpYmxlKSB7XG4gIDxkaXYgY2xhc3M9XCJnZW8tYWxlcnRcIiBbY2xhc3NdPVwiJ2dlby1hbGVydC0tJyArIHR5cGVcIiByb2xlPVwiYWxlcnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2VvLWFsZXJ0X19tYWluXCI+XG4gICAgICBAaWYgKHNob3dJY29uKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLWFsZXJ0X19pY29uXCIgbnotaWNvbiBbbnpUeXBlXT1cImljb25UeXBlXCIgbnpUaGVtZT1cIm91dGxpbmVcIj48L3NwYW4+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnZW8tYWxlcnRfX2NvbnRlbnRcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJnZW8tYWxlcnRfX3RpdGxlXCI+e3sgZGlzcGxheVRpdGxlIH19PC9wPlxuICAgICAgICBAaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICA8cCBjbGFzcz1cImdlby1hbGVydF9fbWVzc2FnZVwiPnt7IG1lc3NhZ2UgfX08L3A+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChjbG9zYWJsZSkge1xuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJnZW8tYWxlcnRfX2Nsb3NlXCIgYXJpYS1sYWJlbD1cIsSQw7NuZyB0aMO0bmcgYsOhb1wiIChjbGljayk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJjbG9zZVwiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbn1cbiJdfQ==
38
+ '[class.geo-alert-host--hidden]': '!visible()',
39
+ }, template: "@if (visible()) {\n <div class=\"geo-alert\" [class]=\"'geo-alert--' + type()\" role=\"alert\">\n <div class=\"geo-alert__main\">\n @if (showIcon()) {\n <span class=\"geo-alert__icon\" nz-icon [nzType]=\"iconType()\" nzTheme=\"outline\"></span>\n }\n\n <div class=\"geo-alert__content\">\n <p class=\"geo-alert__title\">{{ displayTitle() }}</p>\n @if (message()) {\n <p class=\"geo-alert__message\">{{ message() }}</p>\n }\n </div>\n </div>\n\n @if (closable()) {\n <button type=\"button\" class=\"geo-alert__close\" aria-label=\"\u0110\u00F3ng th\u00F4ng b\u00E1o\" (click)=\"onClose()\">\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n}\n", styles: ["@charset \"UTF-8\";geo-alert.geo-alert-host,.geo-alert-host{display:block;width:100%}.geo-alert-host--hidden{display:none}.geo-alert{display:flex;align-items:flex-start;justify-content:space-between;gap:9px;width:100%;padding:16px;border:1px solid transparent;border-radius:var(--geo-radius);box-sizing:border-box}.geo-alert__main{display:flex;align-items:flex-start;gap:8px;min-width:0;flex:1 1 auto}.geo-alert__icon{display:inline-flex;flex-shrink:0;width:24px;height:24px;font-size:24px;line-height:1}.geo-alert__content{display:flex;flex-direction:column;gap:0;min-width:0}.geo-alert__title,.geo-alert__message{margin:0;font-size:var(--geo-font-size-lg);line-height:24px}.geo-alert__title{font-weight:700}.geo-alert__message{font-weight:400}.geo-alert__close{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:none;background:transparent;cursor:pointer;flex-shrink:0}.geo-alert--success{background:var(--geo-color-success-light);border-color:var(--geo-color-success-default)}.geo-alert--success .geo-alert__title,.geo-alert--success .geo-alert__message,.geo-alert--success .geo-alert__icon{color:var(--geo-color-success-dark)}.geo-alert--success .geo-alert__close{color:var(--geo-color-success-default)}.geo-alert--error{background:var(--geo-color-error-light);border-color:var(--geo-color-error-default)}.geo-alert--error .geo-alert__title,.geo-alert--error .geo-alert__message,.geo-alert--error .geo-alert__icon{color:var(--geo-color-error-default)}.geo-alert--error .geo-alert__close{color:var(--geo-color-error-dark)}.geo-alert--warning{background:var(--geo-color-warning-light);border-color:var(--geo-color-warning-default)}.geo-alert--warning .geo-alert__title,.geo-alert--warning .geo-alert__message{color:var(--geo-color-warning-dark)}.geo-alert--warning .geo-alert__icon,.geo-alert--warning .geo-alert__close{color:var(--geo-color-warning-default)}.geo-alert--info{background:var(--geo-color-info-light);border-color:var(--geo-color-info-default)}.geo-alert--info .geo-alert__title,.geo-alert--info .geo-alert__message,.geo-alert--info .geo-alert__icon{color:var(--geo-color-info-dark)}.geo-alert--info .geo-alert__close{color:var(--geo-color-info-default)}\n"] }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWFsZXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1hbGVydC9nZW8tYWxlcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWFsZXJ0L2dlby1hbGVydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQWdCLE1BQU0sbUJBQW1CLENBQUM7OztBQWUxRSxNQUFNLE9BQU8saUJBQWlCO0lBQ25CLElBQUksR0FBRyxLQUFLLENBQWUsTUFBTSxDQUFDLENBQUM7SUFDbkMsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXZCLE1BQU0sR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUV4QixZQUFZLEdBQUcsUUFBUSxDQUM5QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQzNELENBQUM7SUFFTyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLEtBQUssU0FBUztnQkFDWixPQUFPLGNBQWMsQ0FBQztZQUN4QixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxjQUFjLENBQUM7WUFDeEIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sb0JBQW9CLENBQUM7WUFDOUI7Z0JBQ0UsT0FBTyxhQUFhLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQzt3R0E5QlUsaUJBQWlCOzRGQUFqQixpQkFBaUIsKzlCQ3pCOUIsa3dCQXNCQSx3dUVEUFksWUFBWTs7NEZBVVgsaUJBQWlCO2tCQWI3QixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsaUJBR1IsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsZ0JBQWdCO3dCQUN2QixnQ0FBZ0MsRUFBRSxZQUFZO3FCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IFVJX0FMRVJUX0RFRkFVTFRfVElUTEVTLCBHZW9BbGVydFR5cGUgfSBmcm9tICcuL2dlby1hbGVydC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1hbGVydCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOekljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLWFsZXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1hbGVydC5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdnZW8tYWxlcnQtaG9zdCcsXG4gICAgJ1tjbGFzcy5nZW8tYWxlcnQtaG9zdC0taGlkZGVuXSc6ICchdmlzaWJsZSgpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvQWxlcnRDb21wb25lbnQge1xuICByZWFkb25seSB0eXBlID0gaW5wdXQ8R2VvQWxlcnRUeXBlPignaW5mbycpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgbWVzc2FnZSA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgY2xvc2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgcmVhZG9ubHkgdmlzaWJsZSA9IG1vZGVsKHRydWUpO1xuICByZWFkb25seSBzaG93SWNvbiA9IGlucHV0KHRydWUpO1xuXG4gIHJlYWRvbmx5IGNsb3NlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXlUaXRsZSA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMudGl0bGUoKSB8fCBVSV9BTEVSVF9ERUZBVUxUX1RJVExFU1t0aGlzLnR5cGUoKV1cbiAgKTtcblxuICByZWFkb25seSBpY29uVHlwZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSgpKSB7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuICdjaGVjay1jaXJjbGUnO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gJ2Nsb3NlLWNpcmNsZSc7XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgcmV0dXJuICdleGNsYW1hdGlvbi1jaXJjbGUnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdpbmZvLWNpcmNsZSc7XG4gICAgfVxuICB9KTtcblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxufVxuIiwiQGlmICh2aXNpYmxlKCkpIHtcbiAgPGRpdiBjbGFzcz1cImdlby1hbGVydFwiIFtjbGFzc109XCInZ2VvLWFsZXJ0LS0nICsgdHlwZSgpXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgPGRpdiBjbGFzcz1cImdlby1hbGVydF9fbWFpblwiPlxuICAgICAgQGlmIChzaG93SWNvbigpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLWFsZXJ0X19pY29uXCIgbnotaWNvbiBbbnpUeXBlXT1cImljb25UeXBlKClcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cbiAgICAgIH1cblxuICAgICAgPGRpdiBjbGFzcz1cImdlby1hbGVydF9fY29udGVudFwiPlxuICAgICAgICA8cCBjbGFzcz1cImdlby1hbGVydF9fdGl0bGVcIj57eyBkaXNwbGF5VGl0bGUoKSB9fTwvcD5cbiAgICAgICAgQGlmIChtZXNzYWdlKCkpIHtcbiAgICAgICAgICA8cCBjbGFzcz1cImdlby1hbGVydF9fbWVzc2FnZVwiPnt7IG1lc3NhZ2UoKSB9fTwvcD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGNsb3NhYmxlKCkpIHtcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ2VvLWFsZXJ0X19jbG9zZVwiIGFyaWEtbGFiZWw9XCLEkMOzbmcgdGjDtG5nIGLDoW9cIiAoY2xpY2spPVwib25DbG9zZSgpXCI+XG4gICAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwiY2xvc2VcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
- import { CommonModule, Location } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, inject, } from '@angular/core';
1
+ import { Location } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, inject, input, output, } from '@angular/core';
3
3
  import { NzIconModule } from 'ng-zorro-antd/icon';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "ng-zorro-antd/icon";
@@ -9,40 +9,30 @@ import * as i1 from "ng-zorro-antd/icon";
9
9
  */
10
10
  export class GeoBackButtonComponent {
11
11
  location = inject(Location);
12
- ariaLabel = 'Quay lại';
13
- title = 'Quay lại';
14
- disabled = false;
12
+ ariaLabel = input('Quay lại');
13
+ title = input('Quay lại');
14
+ disabled = input(false);
15
15
  /** `true` (mặc định): `Location.back()` — về trang trước trong history. */
16
- historyBack = true;
17
- clicked = new EventEmitter();
16
+ historyBack = input(true);
17
+ clicked = output();
18
18
  onClick(event) {
19
- if (this.disabled) {
19
+ if (this.disabled()) {
20
20
  return;
21
21
  }
22
22
  event.preventDefault();
23
23
  event.stopPropagation();
24
24
  this.clicked.emit(event);
25
- if (this.historyBack) {
25
+ if (this.historyBack()) {
26
26
  this.location.back();
27
27
  }
28
28
  }
29
29
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoBackButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GeoBackButtonComponent, isStandalone: true, selector: "geo-back-button", inputs: { ariaLabel: "ariaLabel", title: "title", disabled: "disabled", historyBack: "historyBack" }, outputs: { clicked: "clicked" }, host: { classAttribute: "geo-back-button-host" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"geo-back-button\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.title]=\"title || ariaLabel\"\n [disabled]=\"disabled\"\n (click)=\"onClick($event)\"\n>\n <span nz-icon nzType=\"arrow-left\" nzTheme=\"outline\" aria-hidden=\"true\"></span>\n</button>\n", styles: [":host,.geo-back-button-host{display:inline-flex;flex-shrink:0;position:relative;z-index:2;pointer-events:auto}.geo-back-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:0;border-radius:var(--geo-radius);background:var(--geo-color-primary-surface-light);color:var(--geo-color-primary-default);cursor:pointer;pointer-events:auto;transition:background-color .15s ease}.geo-back-button .anticon{font-size:16px;pointer-events:none}.geo-back-button:hover:not(:disabled){background:var(--geo-color-primary-surface-light)}.geo-back-button:focus-visible{outline:2px solid var(--geo-color-primary-default);outline-offset:2px}.geo-back-button:disabled{opacity:.45;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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 });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: GeoBackButtonComponent, isStandalone: true, selector: "geo-back-button", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, historyBack: { classPropertyName: "historyBack", publicName: "historyBack", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { classAttribute: "geo-back-button-host" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"geo-back-button\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.title]=\"title() || ariaLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick($event)\"\n>\n <span nz-icon nzType=\"arrow-left\" nzTheme=\"outline\" aria-hidden=\"true\"></span>\n</button>\n", styles: [":host,.geo-back-button-host{display:inline-flex;flex-shrink:0;position:relative;z-index:2;pointer-events:auto}.geo-back-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:0;border-radius:var(--geo-radius);background:var(--geo-color-primary-surface-light);color:var(--geo-color-primary-default);cursor:pointer;pointer-events:auto;transition:background-color .15s ease}.geo-back-button .anticon{font-size:16px;pointer-events:none}.geo-back-button:hover:not(:disabled){background:var(--geo-color-primary-surface-light)}.geo-back-button:focus-visible{outline:2px solid var(--geo-color-primary-default);outline-offset:2px}.geo-back-button:disabled{opacity:.45;cursor:not-allowed}\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 });
31
31
  }
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoBackButtonComponent, decorators: [{
33
33
  type: Component,
34
- args: [{ selector: 'geo-back-button', standalone: true, imports: [CommonModule, NzIconModule], changeDetection: ChangeDetectionStrategy.OnPush, host: {
34
+ args: [{ selector: 'geo-back-button', standalone: true, imports: [NzIconModule], changeDetection: ChangeDetectionStrategy.OnPush, host: {
35
35
  class: 'geo-back-button-host',
36
- }, template: "<button\n type=\"button\"\n class=\"geo-back-button\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.title]=\"title || ariaLabel\"\n [disabled]=\"disabled\"\n (click)=\"onClick($event)\"\n>\n <span nz-icon nzType=\"arrow-left\" nzTheme=\"outline\" aria-hidden=\"true\"></span>\n</button>\n", styles: [":host,.geo-back-button-host{display:inline-flex;flex-shrink:0;position:relative;z-index:2;pointer-events:auto}.geo-back-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:0;border-radius:var(--geo-radius);background:var(--geo-color-primary-surface-light);color:var(--geo-color-primary-default);cursor:pointer;pointer-events:auto;transition:background-color .15s ease}.geo-back-button .anticon{font-size:16px;pointer-events:none}.geo-back-button:hover:not(:disabled){background:var(--geo-color-primary-surface-light)}.geo-back-button:focus-visible{outline:2px solid var(--geo-color-primary-default);outline-offset:2px}.geo-back-button:disabled{opacity:.45;cursor:not-allowed}\n"] }]
37
- }], propDecorators: { ariaLabel: [{
38
- type: Input
39
- }], title: [{
40
- type: Input
41
- }], disabled: [{
42
- type: Input
43
- }], historyBack: [{
44
- type: Input
45
- }], clicked: [{
46
- type: Output
47
- }] } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWJhY2stYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1iYWNrLWJ1dHRvbi9nZW8tYmFjay1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWJhY2stYnV0dG9uL2dlby1iYWNrLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUVsRDs7O0dBR0c7QUFZSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2hCLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFcEMsU0FBUyxHQUFHLFVBQVUsQ0FBQztJQUN2QixLQUFLLEdBQUcsVUFBVSxDQUFDO0lBQ25CLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDMUIsMkVBQTJFO0lBQ2xFLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFbEIsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7SUFFbkQsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO3dHQXZCVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixvUUMxQm5DLHFTQVVBLHV4QkRRWSxZQUFZLDhCQUFFLFlBQVk7OzRGQVF6QixzQkFBc0I7a0JBWGxDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxtQkFHcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsc0JBQXNCO3FCQUM5Qjs4QkFLUSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcblxuLyoqXG4gKiBOw7p0IHF1YXkgbOG6oWkgZMO5bmcgY2h1bmcgY2hvIGPDoWMgcGFnZSBmb3JtL2RldGFpbC5cbiAqIE3hurdjIMSR4buLbmggYGhpc3RvcnkuYmFjaygpYCAo4oiSMSkuIFNldCBgW2hpc3RvcnlCYWNrXT1cImZhbHNlXCJgIG7hur91IHBhcmVudCB04buxIG5hdmlnYXRlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tYmFjay1idXR0b24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOekljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLWJhY2stYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1iYWNrLWJ1dHRvbi5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdnZW8tYmFjay1idXR0b24taG9zdCcsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0JhY2tCdXR0b25Db21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcblxuICBASW5wdXQoKSBhcmlhTGFiZWwgPSAnUXVheSBs4bqhaSc7XG4gIEBJbnB1dCgpIHRpdGxlID0gJ1F1YXkgbOG6oWknO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAvKiogYHRydWVgICht4bq3YyDEkeG7i25oKTogYExvY2F0aW9uLmJhY2soKWAg4oCUIHbhu4EgdHJhbmcgdHLGsOG7m2MgdHJvbmcgaGlzdG9yeS4gKi9cbiAgQElucHV0KCkgaGlzdG9yeUJhY2sgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jbGlja2VkLmVtaXQoZXZlbnQpO1xuXG4gICAgaWYgKHRoaXMuaGlzdG9yeUJhY2spIHtcbiAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGJ1dHRvblxuICB0eXBlPVwiYnV0dG9uXCJcbiAgY2xhc3M9XCJnZW8tYmFjay1idXR0b25cIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gIFthdHRyLnRpdGxlXT1cInRpdGxlIHx8IGFyaWFMYWJlbFwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuPlxuICA8c3BhbiBuei1pY29uIG56VHlwZT1cImFycm93LWxlZnRcIiBuelRoZW1lPVwib3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbjwvYnV0dG9uPlxuIl19
36
+ }, template: "<button\n type=\"button\"\n class=\"geo-back-button\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.title]=\"title() || ariaLabel()\"\n [disabled]=\"disabled()\"\n (click)=\"onClick($event)\"\n>\n <span nz-icon nzType=\"arrow-left\" nzTheme=\"outline\" aria-hidden=\"true\"></span>\n</button>\n", styles: [":host,.geo-back-button-host{display:inline-flex;flex-shrink:0;position:relative;z-index:2;pointer-events:auto}.geo-back-button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;padding:0;border:0;border-radius:var(--geo-radius);background:var(--geo-color-primary-surface-light);color:var(--geo-color-primary-default);cursor:pointer;pointer-events:auto;transition:background-color .15s ease}.geo-back-button .anticon{font-size:16px;pointer-events:none}.geo-back-button:hover:not(:disabled){background:var(--geo-color-primary-surface-light)}.geo-back-button:focus-visible{outline:2px solid var(--geo-color-primary-default);outline-offset:2px}.geo-back-button:disabled{opacity:.45;cursor:not-allowed}\n"] }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWJhY2stYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1iYWNrLWJ1dHRvbi9nZW8tYmFjay1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWJhY2stYnV0dG9uL2dlby1iYWNrLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFbEQ7OztHQUdHO0FBWUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNoQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXBDLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLDJFQUEyRTtJQUNsRSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFCLE9BQU8sR0FBRyxNQUFNLEVBQWMsQ0FBQztJQUV4QyxPQUFPLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO3dHQXZCVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixpckJDekJuQyw2U0FVQSx1eEJET1ksWUFBWTs7NEZBUVgsc0JBQXNCO2tCQVhsQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxzQkFBc0I7cUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5cbi8qKlxuICogTsO6dCBxdWF5IGzhuqFpIGTDuW5nIGNodW5nIGNobyBjw6FjIHBhZ2UgZm9ybS9kZXRhaWwuXG4gKiBN4bq3YyDEkeG7i25oIGBoaXN0b3J5LmJhY2soKWAgKOKIkjEpLiBTZXQgYFtoaXN0b3J5QmFja109XCJmYWxzZVwiYCBu4bq/dSBwYXJlbnQgdOG7sSBuYXZpZ2F0ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLWJhY2stYnV0dG9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW056SWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tYmFjay1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VvLWJhY2stYnV0dG9uLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1iYWNrLWJ1dHRvbi1ob3N0JyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvQmFja0J1dHRvbkNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xuXG4gIHJlYWRvbmx5IGFyaWFMYWJlbCA9IGlucHV0KCdRdWF5IGzhuqFpJyk7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQoJ1F1YXkgbOG6oWknKTtcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSk7XG4gIC8qKiBgdHJ1ZWAgKG3hurdjIMSR4buLbmgpOiBgTG9jYXRpb24uYmFjaygpYCDigJQgduG7gSB0cmFuZyB0csaw4bubYyB0cm9uZyBoaXN0b3J5LiAqL1xuICByZWFkb25seSBoaXN0b3J5QmFjayA9IGlucHV0KHRydWUpO1xuXG4gIHJlYWRvbmx5IGNsaWNrZWQgPSBvdXRwdXQ8TW91c2VFdmVudD4oKTtcblxuICBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jbGlja2VkLmVtaXQoZXZlbnQpO1xuXG4gICAgaWYgKHRoaXMuaGlzdG9yeUJhY2soKSkge1xuICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBjbGFzcz1cImdlby1iYWNrLWJ1dHRvblwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsKClcIlxuICBbYXR0ci50aXRsZV09XCJ0aXRsZSgpIHx8IGFyaWFMYWJlbCgpXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCJcbj5cbiAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJhcnJvdy1sZWZ0XCIgbnpUaGVtZT1cIm91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG48L2J1dHRvbj5cbiJdfQ==
@@ -1,5 +1,4 @@
1
- import { Component, Input, ViewEncapsulation } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
1
+ import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';
3
2
  import { RouterModule } from '@angular/router';
4
3
  import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';
5
4
  import { NzIconModule } from 'ng-zorro-antd/icon';
@@ -12,22 +11,20 @@ import * as i3 from "ng-zorro-antd/icon";
12
11
  * Item thường: neutral gray; item active (cuối): primary + semibold.
13
12
  */
14
13
  export class GeoBreadcrumbComponent {
15
- items = [];
14
+ items = input([]);
16
15
  isActive(item, index) {
17
16
  if (item.active != null) {
18
17
  return item.active;
19
18
  }
20
- return index === this.items.length - 1;
19
+ return index === this.items().length - 1;
21
20
  }
22
21
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoBreadcrumbComponent, isStandalone: true, selector: "geo-breadcrumb", inputs: { items: "items" }, host: { classAttribute: "geo-breadcrumb-host" }, ngImport: i0, template: "<nav class=\"geo-breadcrumb\" aria-label=\"Breadcrumb\">\n <nz-breadcrumb class=\"geo-breadcrumb__antd\" [nzSeparator]=\"separatorTpl\">\n @for (item of items; track $index) {\n <nz-breadcrumb-item>\n @if (item.link && !isActive(item, $index)) {\n <a\n class=\"geo-breadcrumb__link\"\n [routerLink]=\"item.link\"\n [queryParams]=\"item.queryParams || null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"geo-breadcrumb__text\"\n [class.geo-breadcrumb__text--active]=\"isActive(item, $index)\"\n [attr.aria-current]=\"isActive(item, $index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n </nz-breadcrumb-item>\n }\n </nz-breadcrumb>\n</nav>\n\n<ng-template #separatorTpl>\n <span class=\"geo-breadcrumb__separator\" nz-icon nzType=\"right\" nzTheme=\"outline\"></span>\n</ng-template>\n", styles: ["geo-breadcrumb.geo-breadcrumb-host,.geo-breadcrumb-host{display:block;background:transparent;font-family:var(--geo-font-family)}.geo-breadcrumb__antd.ant-breadcrumb{font-size:var(--geo-font-size-body);line-height:var(--geo-line-height-body);color:var(--geo-color-neutral-500)}.geo-breadcrumb__antd.ant-breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;gap:0;margin:0;padding:0}.geo-breadcrumb__antd.ant-breadcrumb .ant-breadcrumb-separator{margin:0 8px;color:var(--geo-color-neutral-500)}.geo-breadcrumb__separator{font-size:10px;color:var(--geo-color-neutral-500)}.geo-breadcrumb__link{color:var(--geo-color-neutral-500);font-weight:var(--geo-font-weight-regular);text-decoration:none;transition:color .15s ease}.geo-breadcrumb__link:hover{color:var(--geo-color-primary-default)}.geo-breadcrumb__text{color:var(--geo-color-neutral-500);font-weight:var(--geo-font-weight-regular)}.geo-breadcrumb__text--active{color:var(--geo-color-primary-default);font-weight:var(--geo-font-weight-semibold)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: NzBreadCrumbModule }, { kind: "component", type: i2.NzBreadCrumbComponent, selector: "nz-breadcrumb", inputs: ["nzAutoGenerate", "nzSeparator", "nzRouteLabel", "nzRouteLabelFn", "nzRouteFn"], exportAs: ["nzBreadcrumb"] }, { kind: "component", type: i2.NzBreadCrumbItemComponent, selector: "nz-breadcrumb-item", inputs: ["nzOverlay"], exportAs: ["nzBreadcrumbItem"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i3.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], encapsulation: i0.ViewEncapsulation.None });
22
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoBreadcrumbComponent, isStandalone: true, selector: "geo-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "geo-breadcrumb-host" }, ngImport: i0, template: "<nav class=\"geo-breadcrumb\" aria-label=\"Breadcrumb\">\n <nz-breadcrumb class=\"geo-breadcrumb__antd\" [nzSeparator]=\"separatorTpl\">\n @for (item of items(); track $index) {\n <nz-breadcrumb-item>\n @if (item.link && !isActive(item, $index)) {\n <a\n class=\"geo-breadcrumb__link\"\n [routerLink]=\"item.link\"\n [queryParams]=\"item.queryParams || null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"geo-breadcrumb__text\"\n [class.geo-breadcrumb__text--active]=\"isActive(item, $index)\"\n [attr.aria-current]=\"isActive(item, $index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n </nz-breadcrumb-item>\n }\n </nz-breadcrumb>\n</nav>\n\n<ng-template #separatorTpl>\n <span class=\"geo-breadcrumb__separator\" nz-icon nzType=\"right\" nzTheme=\"outline\"></span>\n</ng-template>\n", styles: ["geo-breadcrumb.geo-breadcrumb-host,.geo-breadcrumb-host{display:block;background:transparent;font-family:var(--geo-font-family)}.geo-breadcrumb__antd.ant-breadcrumb{font-size:var(--geo-font-size-body);line-height:var(--geo-line-height-body);color:var(--geo-color-neutral-500)}.geo-breadcrumb__antd.ant-breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;gap:0;margin:0;padding:0}.geo-breadcrumb__antd.ant-breadcrumb .ant-breadcrumb-separator{margin:0 8px;color:var(--geo-color-neutral-500)}.geo-breadcrumb__separator{font-size:10px;color:var(--geo-color-neutral-500)}.geo-breadcrumb__link{color:var(--geo-color-neutral-500);font-weight:var(--geo-font-weight-regular);text-decoration:none;transition:color .15s ease}.geo-breadcrumb__link:hover{color:var(--geo-color-primary-default)}.geo-breadcrumb__text{color:var(--geo-color-neutral-500);font-weight:var(--geo-font-weight-regular)}.geo-breadcrumb__text--active{color:var(--geo-color-primary-default);font-weight:var(--geo-font-weight-semibold)}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: NzBreadCrumbModule }, { kind: "component", type: i2.NzBreadCrumbComponent, selector: "nz-breadcrumb", inputs: ["nzAutoGenerate", "nzSeparator", "nzRouteLabel", "nzRouteLabelFn", "nzRouteFn"], exportAs: ["nzBreadcrumb"] }, { kind: "component", type: i2.NzBreadCrumbItemComponent, selector: "nz-breadcrumb-item", inputs: ["nzOverlay"], exportAs: ["nzBreadcrumbItem"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i3.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
24
23
  }
25
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoBreadcrumbComponent, decorators: [{
26
25
  type: Component,
27
- args: [{ selector: 'geo-breadcrumb', standalone: true, imports: [CommonModule, RouterModule, NzBreadCrumbModule, NzIconModule], encapsulation: ViewEncapsulation.None, host: {
26
+ args: [{ selector: 'geo-breadcrumb', standalone: true, imports: [RouterModule, NzBreadCrumbModule, NzIconModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
28
27
  class: 'geo-breadcrumb-host',
29
- }, template: "<nav class=\"geo-breadcrumb\" aria-label=\"Breadcrumb\">\n <nz-breadcrumb class=\"geo-breadcrumb__antd\" [nzSeparator]=\"separatorTpl\">\n @for (item of items; track $index) {\n <nz-breadcrumb-item>\n @if (item.link && !isActive(item, $index)) {\n <a\n class=\"geo-breadcrumb__link\"\n [routerLink]=\"item.link\"\n [queryParams]=\"item.queryParams || null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"geo-breadcrumb__text\"\n [class.geo-breadcrumb__text--active]=\"isActive(item, $index)\"\n [attr.aria-current]=\"isActive(item, $index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n </nz-breadcrumb-item>\n }\n </nz-breadcrumb>\n</nav>\n\n<ng-template #separatorTpl>\n <span class=\"geo-breadcrumb__separator\" nz-icon nzType=\"right\" nzTheme=\"outline\"></span>\n</ng-template>\n", styles: ["geo-breadcrumb.geo-breadcrumb-host,.geo-breadcrumb-host{display:block;background:transparent;font-family:var(--geo-font-family)}.geo-breadcrumb__antd.ant-breadcrumb{font-size:var(--geo-font-size-body);line-height:var(--geo-line-height-body);color:var(--geo-color-neutral-500)}.geo-breadcrumb__antd.ant-breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;gap:0;margin:0;padding:0}.geo-breadcrumb__antd.ant-breadcrumb .ant-breadcrumb-separator{margin:0 8px;color:var(--geo-color-neutral-500)}.geo-breadcrumb__separator{font-size:10px;color:var(--geo-color-neutral-500)}.geo-breadcrumb__link{color:var(--geo-color-neutral-500);font-weight:var(--geo-font-weight-regular);text-decoration:none;transition:color .15s ease}.geo-breadcrumb__link:hover{color:var(--geo-color-primary-default)}.geo-breadcrumb__text{color:var(--geo-color-neutral-500);font-weight:var(--geo-font-weight-regular)}.geo-breadcrumb__text--active{color:var(--geo-color-primary-default);font-weight:var(--geo-font-weight-semibold)}\n"] }]
30
- }], propDecorators: { items: [{
31
- type: Input
32
- }] } });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWJyZWFkY3J1bWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWJyZWFkY3J1bWIvZ2VvLWJyZWFkY3J1bWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWJyZWFkY3J1bWIvZ2VvLWJyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7O0FBR2xEOzs7R0FHRztBQVlILE1BQU0sT0FBTyxzQkFBc0I7SUFDeEIsS0FBSyxHQUF3QixFQUFFLENBQUM7SUFFekMsUUFBUSxDQUFDLElBQXVCLEVBQUUsS0FBYTtRQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQzt3R0FSVSxzQkFBc0I7NEZBQXRCLHNCQUFzQix1SkN0Qm5DLGkrQkE2QkEsdWlDRGZZLFlBQVksOEJBQUUsWUFBWSwrUUFBRSxrQkFBa0Isd1hBQUUsWUFBWTs7NEZBUTNELHNCQUFzQjtrQkFYbEMsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxpQkFHeEQsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUscUJBQXFCO3FCQUM3Qjs4QkFHUSxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOekJyZWFkQ3J1bWJNb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2JyZWFkY3J1bWInO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcbmltcG9ydCB7IEdlb0JyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi9nZW8tYnJlYWRjcnVtYi50eXBlcyc7XG5cbi8qKlxuICogQnJlYWRjcnVtYiBHRU8g4oCUIGThu7FhIHRyw6puIGBuei1icmVhZGNydW1iYC5cbiAqIEl0ZW0gdGjGsOG7nW5nOiBuZXV0cmFsIGdyYXk7IGl0ZW0gYWN0aXZlIChjdeG7kWkpOiBwcmltYXJ5ICsgc2VtaWJvbGQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1icmVhZGNydW1iJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlLCBOekJyZWFkQ3J1bWJNb2R1bGUsIE56SWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tYnJlYWRjcnVtYi5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1icmVhZGNydW1iLWhvc3QnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9CcmVhZGNydW1iQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaXRlbXM6IEdlb0JyZWFkY3J1bWJJdGVtW10gPSBbXTtcblxuICBpc0FjdGl2ZShpdGVtOiBHZW9CcmVhZGNydW1iSXRlbSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChpdGVtLmFjdGl2ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gaXRlbS5hY3RpdmU7XG4gICAgfVxuICAgIHJldHVybiBpbmRleCA9PT0gdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xuICB9XG59XG4iLCI8bmF2IGNsYXNzPVwiZ2VvLWJyZWFkY3J1bWJcIiBhcmlhLWxhYmVsPVwiQnJlYWRjcnVtYlwiPlxuICA8bnotYnJlYWRjcnVtYiBjbGFzcz1cImdlby1icmVhZGNydW1iX19hbnRkXCIgW256U2VwYXJhdG9yXT1cInNlcGFyYXRvclRwbFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgPG56LWJyZWFkY3J1bWItaXRlbT5cbiAgICAgICAgQGlmIChpdGVtLmxpbmsgJiYgIWlzQWN0aXZlKGl0ZW0sICRpbmRleCkpIHtcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgY2xhc3M9XCJnZW8tYnJlYWRjcnVtYl9fbGlua1wiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLmxpbmtcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXMgfHwgbnVsbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiZ2VvLWJyZWFkY3J1bWJfX3RleHRcIlxuICAgICAgICAgICAgW2NsYXNzLmdlby1icmVhZGNydW1iX190ZXh0LS1hY3RpdmVdPVwiaXNBY3RpdmUoaXRlbSwgJGluZGV4KVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXNBY3RpdmUoaXRlbSwgJGluZGV4KSA/ICdwYWdlJyA6IG51bGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvbnotYnJlYWRjcnVtYi1pdGVtPlxuICAgIH1cbiAgPC9uei1icmVhZGNydW1iPlxuPC9uYXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2VwYXJhdG9yVHBsPlxuICA8c3BhbiBjbGFzcz1cImdlby1icmVhZGNydW1iX19zZXBhcmF0b3JcIiBuei1pY29uIG56VHlwZT1cInJpZ2h0XCIgbnpUaGVtZT1cIm91dGxpbmVcIj48L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
28
+ }, template: "<nav class=\"geo-breadcrumb\" aria-label=\"Breadcrumb\">\n <nz-breadcrumb class=\"geo-breadcrumb__antd\" [nzSeparator]=\"separatorTpl\">\n @for (item of items(); track $index) {\n <nz-breadcrumb-item>\n @if (item.link && !isActive(item, $index)) {\n <a\n class=\"geo-breadcrumb__link\"\n [routerLink]=\"item.link\"\n [queryParams]=\"item.queryParams || null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"geo-breadcrumb__text\"\n [class.geo-breadcrumb__text--active]=\"isActive(item, $index)\"\n [attr.aria-current]=\"isActive(item, $index) ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n </nz-breadcrumb-item>\n }\n </nz-breadcrumb>\n</nav>\n\n<ng-template #separatorTpl>\n <span class=\"geo-breadcrumb__separator\" nz-icon nzType=\"right\" nzTheme=\"outline\"></span>\n</ng-template>\n", styles: ["geo-breadcrumb.geo-breadcrumb-host,.geo-breadcrumb-host{display:block;background:transparent;font-family:var(--geo-font-family)}.geo-breadcrumb__antd.ant-breadcrumb{font-size:var(--geo-font-size-body);line-height:var(--geo-line-height-body);color:var(--geo-color-neutral-500)}.geo-breadcrumb__antd.ant-breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;gap:0;margin:0;padding:0}.geo-breadcrumb__antd.ant-breadcrumb .ant-breadcrumb-separator{margin:0 8px;color:var(--geo-color-neutral-500)}.geo-breadcrumb__separator{font-size:10px;color:var(--geo-color-neutral-500)}.geo-breadcrumb__link{color:var(--geo-color-neutral-500);font-weight:var(--geo-font-weight-regular);text-decoration:none;transition:color .15s ease}.geo-breadcrumb__link:hover{color:var(--geo-color-primary-default)}.geo-breadcrumb__text{color:var(--geo-color-neutral-500);font-weight:var(--geo-font-weight-regular)}.geo-breadcrumb__text--active{color:var(--geo-color-primary-default);font-weight:var(--geo-font-weight-semibold)}\n"] }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWJyZWFkY3J1bWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWJyZWFkY3J1bWIvZ2VvLWJyZWFkY3J1bWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWJyZWFkY3J1bWIvZ2VvLWJyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFHbEQ7OztHQUdHO0FBYUgsTUFBTSxPQUFPLHNCQUFzQjtJQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFzQixFQUFFLENBQUMsQ0FBQztJQUVoRCxRQUFRLENBQUMsSUFBdUIsRUFBRSxLQUFhO1FBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7d0dBUlUsc0JBQXNCOzRGQUF0QixzQkFBc0IsK1BDdEJuQyxtK0JBNkJBLHVpQ0RoQlksWUFBWSwrUUFBRSxrQkFBa0Isd1hBQUUsWUFBWTs7NEZBUzdDLHNCQUFzQjtrQkFabEMsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLGlCQUcxQyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxxQkFBcUI7cUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTnpCcmVhZENydW1iTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9icmVhZGNydW1iJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5pbXBvcnQgeyBHZW9CcmVhZGNydW1iSXRlbSB9IGZyb20gJy4vZ2VvLWJyZWFkY3J1bWIudHlwZXMnO1xuXG4vKipcbiAqIEJyZWFkY3J1bWIgR0VPIOKAlCBk4buxYSB0csOqbiBgbnotYnJlYWRjcnVtYmAuXG4gKiBJdGVtIHRoxrDhu51uZzogbmV1dHJhbCBncmF5OyBpdGVtIGFjdGl2ZSAoY3Xhu5FpKTogcHJpbWFyeSArIHNlbWlib2xkLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tYnJlYWRjcnVtYicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUsIE56QnJlYWRDcnVtYk1vZHVsZSwgTnpJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1icmVhZGNydW1iLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1icmVhZGNydW1iLmNvbXBvbmVudC5zY3NzJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1icmVhZGNydW1iLWhvc3QnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9CcmVhZGNydW1iQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgaXRlbXMgPSBpbnB1dDxHZW9CcmVhZGNydW1iSXRlbVtdPihbXSk7XG5cbiAgaXNBY3RpdmUoaXRlbTogR2VvQnJlYWRjcnVtYkl0ZW0sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbS5hY3RpdmUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGl0ZW0uYWN0aXZlO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXggPT09IHRoaXMuaXRlbXMoKS5sZW5ndGggLSAxO1xuICB9XG59XG4iLCI8bmF2IGNsYXNzPVwiZ2VvLWJyZWFkY3J1bWJcIiBhcmlhLWxhYmVsPVwiQnJlYWRjcnVtYlwiPlxuICA8bnotYnJlYWRjcnVtYiBjbGFzcz1cImdlby1icmVhZGNydW1iX19hbnRkXCIgW256U2VwYXJhdG9yXT1cInNlcGFyYXRvclRwbFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8bnotYnJlYWRjcnVtYi1pdGVtPlxuICAgICAgICBAaWYgKGl0ZW0ubGluayAmJiAhaXNBY3RpdmUoaXRlbSwgJGluZGV4KSkge1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cImdlby1icmVhZGNydW1iX19saW5rXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ubGlua1wiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiaXRlbS5xdWVyeVBhcmFtcyB8fCBudWxsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJnZW8tYnJlYWRjcnVtYl9fdGV4dFwiXG4gICAgICAgICAgICBbY2xhc3MuZ2VvLWJyZWFkY3J1bWJfX3RleHQtLWFjdGl2ZV09XCJpc0FjdGl2ZShpdGVtLCAkaW5kZXgpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpc0FjdGl2ZShpdGVtLCAkaW5kZXgpID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9uei1icmVhZGNydW1iLWl0ZW0+XG4gICAgfVxuICA8L256LWJyZWFkY3J1bWI+XG48L25hdj5cblxuPG5nLXRlbXBsYXRlICNzZXBhcmF0b3JUcGw+XG4gIDxzcGFuIGNsYXNzPVwiZ2VvLWJyZWFkY3J1bWJfX3NlcGFyYXRvclwiIG56LWljb24gbnpUeXBlPVwicmlnaHRcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=