@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
@@ -0,0 +1,163 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, DestroyRef, effect, inject, input, output, signal, ViewEncapsulation, } from '@angular/core';
2
+ import { GeoIconComponent } from '../geo-icon/geo-icon.component';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * KPI / summary tile for dashboard (TCQH.1).
6
+ *
7
+ * @summary Ô thống kê tổng quan (diện tích, số thửa…).
8
+ * @whenToUse Dashboard hoặc đầu trang thống kê.
9
+ * @doNotUseWhen Form field summaries — use typography.
10
+ */
11
+ export class GeoStatCardComponent {
12
+ cdr = inject(ChangeDetectorRef);
13
+ destroyRef = inject(DestroyRef);
14
+ label = input('');
15
+ value = input('');
16
+ unit = input('');
17
+ icon = input('bar-chart');
18
+ hint = input('');
19
+ clickable = input(false);
20
+ /** Count-up number animation. Honors `prefers-reduced-motion`. */
21
+ animate = input(true);
22
+ /** Count-up duration in ms. */
23
+ animationDuration = input(1000);
24
+ /** Stagger delay before count-up starts (ms). */
25
+ animationDelay = input(0);
26
+ clicked = output();
27
+ /** Convenience: bind a whole item object. */
28
+ item = input(null);
29
+ /** Animated / resolved value shown in the template. */
30
+ displayValue = signal('');
31
+ rafId = 0;
32
+ delayId = 0;
33
+ animToken = 0;
34
+ resolvedLabel = computed(() => this.item()?.label ?? this.label());
35
+ resolvedUnit = computed(() => this.item()?.unit ?? this.unit());
36
+ resolvedIcon = computed(() => this.item()?.icon ?? this.icon());
37
+ resolvedHint = computed(() => this.item()?.hint ?? this.hint());
38
+ resolvedRawValue = computed(() => this.item()?.value ?? this.value());
39
+ /** Fallback when animation has not painted yet. */
40
+ resolvedRawFallback = computed(() => String(this.resolvedRawValue() ?? ''));
41
+ constructor() {
42
+ effect(() => {
43
+ const raw = this.resolvedRawValue();
44
+ const shouldAnimate = this.animate();
45
+ const duration = this.animationDuration();
46
+ const delay = this.animationDelay();
47
+ // Defer writes out of the effect graph (Angular 18 signal write rules).
48
+ queueMicrotask(() => this.startCountUp(raw, shouldAnimate, duration, delay));
49
+ }, { allowSignalWrites: true });
50
+ this.destroyRef.onDestroy(() => this.cancelAnimation());
51
+ }
52
+ onClick() {
53
+ if (this.clickable()) {
54
+ this.clicked.emit();
55
+ }
56
+ }
57
+ startCountUp(raw, shouldAnimate, duration, delay) {
58
+ this.cancelAnimation();
59
+ const token = ++this.animToken;
60
+ const parsed = this.parseValue(raw);
61
+ const reducedMotion = typeof window !== 'undefined' &&
62
+ window.matchMedia('(prefers-reduced-motion: reduce)').matches;
63
+ if (!parsed.numeric || !shouldAnimate || reducedMotion) {
64
+ this.displayValue.set(parsed.raw);
65
+ this.cdr.markForCheck();
66
+ return;
67
+ }
68
+ this.displayValue.set(this.formatValue(0, parsed.decimals));
69
+ this.cdr.markForCheck();
70
+ const run = () => {
71
+ if (token !== this.animToken) {
72
+ return;
73
+ }
74
+ const started = performance.now();
75
+ let lastShown = Number.NaN;
76
+ // Ít bước hiển thị hơn → mượt dù duration ngắn (tránh spam mọi số nguyên).
77
+ const visualSteps = Math.min(36, Math.max(22, Math.round(duration / 36)));
78
+ const tick = (now) => {
79
+ if (token !== this.animToken) {
80
+ return;
81
+ }
82
+ const progress = Math.min(1, (now - started) / Math.max(duration, 1));
83
+ const eased = this.easeOutSoft(progress);
84
+ const step = Math.min(visualSteps, Math.round(eased * visualSteps));
85
+ const current = (parsed.target * step) / visualSteps;
86
+ const rounded = parsed.decimals > 0
87
+ ? Number(current.toFixed(parsed.decimals))
88
+ : Math.round(current);
89
+ if (rounded !== lastShown) {
90
+ lastShown = rounded;
91
+ this.displayValue.set(this.formatValue(rounded, parsed.decimals));
92
+ this.cdr.markForCheck();
93
+ }
94
+ if (progress < 1) {
95
+ this.rafId = requestAnimationFrame(tick);
96
+ }
97
+ else {
98
+ this.displayValue.set(parsed.raw);
99
+ this.cdr.markForCheck();
100
+ }
101
+ };
102
+ this.rafId = requestAnimationFrame(tick);
103
+ };
104
+ if (delay > 0 && typeof window !== 'undefined') {
105
+ this.delayId = window.setTimeout(run, delay);
106
+ }
107
+ else {
108
+ run();
109
+ }
110
+ }
111
+ cancelAnimation() {
112
+ this.animToken += 1;
113
+ if (this.rafId) {
114
+ cancelAnimationFrame(this.rafId);
115
+ this.rafId = 0;
116
+ }
117
+ if (this.delayId) {
118
+ clearTimeout(this.delayId);
119
+ this.delayId = 0;
120
+ }
121
+ }
122
+ /** Soft ease-out — nhanh gọn, hạ tốc nhẹ khi kết thúc. */
123
+ easeOutSoft(t) {
124
+ return 1 - Math.pow(1 - t, 2.25);
125
+ }
126
+ parseValue(raw) {
127
+ if (typeof raw === 'number' && Number.isFinite(raw)) {
128
+ const decimals = Number.isInteger(raw) ? 0 : 1;
129
+ return {
130
+ target: raw,
131
+ decimals,
132
+ raw: this.formatValue(raw, decimals),
133
+ numeric: true,
134
+ };
135
+ }
136
+ const text = String(raw ?? '').trim();
137
+ // vi-VN: 412.680,5 or plain 284517
138
+ const normalized = text.replace(/\./g, '').replace(',', '.');
139
+ const target = Number(normalized);
140
+ if (!text || Number.isNaN(target)) {
141
+ return { target: 0, decimals: 0, raw: text, numeric: false };
142
+ }
143
+ const decimals = text.includes(',') ? (text.split(',')[1]?.length ?? 0) : 0;
144
+ return { target, decimals, raw: text, numeric: true };
145
+ }
146
+ formatValue(value, decimals) {
147
+ return value.toLocaleString('vi-VN', {
148
+ minimumFractionDigits: decimals,
149
+ maximumFractionDigits: decimals,
150
+ });
151
+ }
152
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoStatCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
153
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoStatCardComponent, isStandalone: true, selector: "geo-stat-card", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, animate: { classPropertyName: "animate", publicName: "animate", isSignal: true, isRequired: false, transformFunction: null }, animationDuration: { classPropertyName: "animationDuration", publicName: "animationDuration", isSignal: true, isRequired: false, transformFunction: null }, animationDelay: { classPropertyName: "animationDelay", publicName: "animationDelay", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { properties: { "class.geo-stat-card-host--clickable": "clickable()", "class.geo-stat-card-host--animate": "animate()" }, classAttribute: "geo-stat-card-host" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"geo-stat-card\"\n [class.geo-stat-card--static]=\"!clickable()\"\n [attr.aria-disabled]=\"!clickable() || null\"\n (click)=\"onClick()\"\n>\n <span class=\"geo-stat-card__icon\" aria-hidden=\"true\">\n <geo-icon class=\"geo-stat-card__icon-glyph\" [type]=\"resolvedIcon()\" size=\"md\" />\n </span>\n <span class=\"geo-stat-card__body\">\n <span class=\"geo-stat-card__label\">{{ resolvedLabel() }}</span>\n <span class=\"geo-stat-card__value-row\">\n <span class=\"geo-stat-card__value\">\n {{ displayValue() || resolvedRawFallback() }}\n </span>\n @if (resolvedUnit()) {\n <span class=\"geo-stat-card__unit\">{{ resolvedUnit() }}</span>\n }\n </span>\n @if (resolvedHint()) {\n <span class=\"geo-stat-card__hint\">{{ resolvedHint() }}</span>\n }\n </span>\n</button>\n", styles: [".geo-stat-card-host{display:block;min-width:0}.geo-stat-card{display:flex;align-items:flex-start;gap:14px;width:100%;margin:0;padding:16px 18px;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);color:inherit;font:inherit;text-align:left;cursor:default;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease}.geo-stat-card-host--clickable .geo-stat-card{cursor:pointer}.geo-stat-card-host--clickable .geo-stat-card:hover{border-color:var(--geo-color-primary-default);box-shadow:var(--geo-shadow-sm)}.geo-stat-card-host--clickable .geo-stat-card:active{transform:translateY(1px)}.geo-stat-card--static{cursor:default}.geo-stat-card__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:40px;height:40px;border-radius:var(--geo-radius);background:var(--geo-color-primary-soft);color:var(--geo-color-primary-default);transition:background .25s ease,transform .25s cubic-bezier(.16,1,.3,1),box-shadow .25s ease}.geo-stat-card__icon-glyph{display:inline-flex;transition:transform .35s cubic-bezier(.16,1,.3,1)}.geo-stat-card:hover .geo-stat-card__icon{background:var(--geo-color-primary-soft-strong, var(--geo-color-primary-soft));transform:scale(1.08);box-shadow:0 4px 12px color-mix(in srgb,var(--geo-color-primary-default) 18%,transparent)}.geo-stat-card:hover .geo-stat-card__icon-glyph{transform:translateY(-2px) rotate(-8deg) scale(1.08)}.geo-stat-card__body{display:flex;flex-direction:column;gap:4px;min-width:0}.geo-stat-card__label{font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);color:var(--geo-color-neutral-600);line-height:1.35}.geo-stat-card__value-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px}.geo-stat-card__value{font-size:var(--geo-font-size-h3, 1.5rem);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-900);line-height:1.2;font-variant-numeric:tabular-nums;letter-spacing:-.01em}.geo-stat-card__unit,.geo-stat-card__hint{font-size:var(--geo-font-size-caption);color:var(--geo-color-neutral-500)}@media (prefers-reduced-motion: reduce){.geo-stat-card,.geo-stat-card__icon,.geo-stat-card__icon-glyph{transition:none}.geo-stat-card:hover .geo-stat-card__icon,.geo-stat-card:hover .geo-stat-card__icon-glyph{transform:none}}\n"], dependencies: [{ kind: "component", type: GeoIconComponent, selector: "geo-icon", inputs: ["type", "theme", "spin", "size", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoStatCardComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'geo-stat-card', standalone: true, imports: [GeoIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
158
+ class: 'geo-stat-card-host',
159
+ '[class.geo-stat-card-host--clickable]': 'clickable()',
160
+ '[class.geo-stat-card-host--animate]': 'animate()',
161
+ }, template: "<button\n type=\"button\"\n class=\"geo-stat-card\"\n [class.geo-stat-card--static]=\"!clickable()\"\n [attr.aria-disabled]=\"!clickable() || null\"\n (click)=\"onClick()\"\n>\n <span class=\"geo-stat-card__icon\" aria-hidden=\"true\">\n <geo-icon class=\"geo-stat-card__icon-glyph\" [type]=\"resolvedIcon()\" size=\"md\" />\n </span>\n <span class=\"geo-stat-card__body\">\n <span class=\"geo-stat-card__label\">{{ resolvedLabel() }}</span>\n <span class=\"geo-stat-card__value-row\">\n <span class=\"geo-stat-card__value\">\n {{ displayValue() || resolvedRawFallback() }}\n </span>\n @if (resolvedUnit()) {\n <span class=\"geo-stat-card__unit\">{{ resolvedUnit() }}</span>\n }\n </span>\n @if (resolvedHint()) {\n <span class=\"geo-stat-card__hint\">{{ resolvedHint() }}</span>\n }\n </span>\n</button>\n", styles: [".geo-stat-card-host{display:block;min-width:0}.geo-stat-card{display:flex;align-items:flex-start;gap:14px;width:100%;margin:0;padding:16px 18px;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);color:inherit;font:inherit;text-align:left;cursor:default;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease}.geo-stat-card-host--clickable .geo-stat-card{cursor:pointer}.geo-stat-card-host--clickable .geo-stat-card:hover{border-color:var(--geo-color-primary-default);box-shadow:var(--geo-shadow-sm)}.geo-stat-card-host--clickable .geo-stat-card:active{transform:translateY(1px)}.geo-stat-card--static{cursor:default}.geo-stat-card__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:40px;height:40px;border-radius:var(--geo-radius);background:var(--geo-color-primary-soft);color:var(--geo-color-primary-default);transition:background .25s ease,transform .25s cubic-bezier(.16,1,.3,1),box-shadow .25s ease}.geo-stat-card__icon-glyph{display:inline-flex;transition:transform .35s cubic-bezier(.16,1,.3,1)}.geo-stat-card:hover .geo-stat-card__icon{background:var(--geo-color-primary-soft-strong, var(--geo-color-primary-soft));transform:scale(1.08);box-shadow:0 4px 12px color-mix(in srgb,var(--geo-color-primary-default) 18%,transparent)}.geo-stat-card:hover .geo-stat-card__icon-glyph{transform:translateY(-2px) rotate(-8deg) scale(1.08)}.geo-stat-card__body{display:flex;flex-direction:column;gap:4px;min-width:0}.geo-stat-card__label{font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);color:var(--geo-color-neutral-600);line-height:1.35}.geo-stat-card__value-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px}.geo-stat-card__value{font-size:var(--geo-font-size-h3, 1.5rem);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-900);line-height:1.2;font-variant-numeric:tabular-nums;letter-spacing:-.01em}.geo-stat-card__unit,.geo-stat-card__hint{font-size:var(--geo-font-size-caption);color:var(--geo-color-neutral-500)}@media (prefers-reduced-motion: reduce){.geo-stat-card,.geo-stat-card__icon,.geo-stat-card__icon-glyph{transition:none}.geo-stat-card:hover .geo-stat-card__icon,.geo-stat-card:hover .geo-stat-card__icon-glyph{transform:none}}\n"] }]
162
+ }], ctorParameters: () => [] });
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXN0YXQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tc3RhdC1jYXJkL2dlby1zdGF0LWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXN0YXQtY2FyZC9nZW8tc3RhdC1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQVdsRTs7Ozs7O0dBTUc7QUFlSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ2QsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixLQUFLLEdBQUcsS0FBSyxDQUFrQixFQUFFLENBQUMsQ0FBQztJQUNuQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQixTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLGtFQUFrRTtJQUN6RCxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFD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RSxRQUFRO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBM0tVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLG1oREM3Q2pDLDAyQkF5QkEsaTJFRFNZLGdCQUFnQjs7NEZBV2Ysb0JBQW9CO2tCQWRoQyxTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFHVix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLEtBQUssRUFBRSxvQkFBb0I7d0JBQzNCLHVDQUF1QyxFQUFFLGFBQWE7d0JBQ3RELHFDQUFxQyxFQUFFLFdBQVc7cUJBQ25EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHZW9JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLWljb24vZ2VvLWljb24uY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgR2VvU3RhdENhcmRJdGVtIH0gZnJvbSAnLi9nZW8tc3RhdC1jYXJkLnR5cGVzJztcblxuaW50ZXJmYWNlIFBhcnNlZFN0YXRWYWx1ZSB7XG4gIHRhcmdldDogbnVtYmVyO1xuICBkZWNpbWFsczogbnVtYmVyO1xuICAvKiogT3JpZ2luYWwgZGlzcGxheSBzdHJpbmcuICovXG4gIHJhdzogc3RyaW5nO1xuICBudW1lcmljOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEtQSSAvIHN1bW1hcnkgdGlsZSBmb3IgZGFzaGJvYXJkIChUQ1FILjEpLlxuICpcbiAqIEBzdW1tYXJ5IMOUIHRo4buRbmcga8OqIHThu5VuZyBxdWFuIChkaeG7h24gdMOtY2gsIHPhu5EgdGjhu61h4oCmKS5cbiAqIEB3aGVuVG9Vc2UgRGFzaGJvYXJkIGhv4bq3YyDEkeG6p3UgdHJhbmcgdGjhu5FuZyBrw6ouXG4gKiBAZG9Ob3RVc2VXaGVuIEZvcm0gZmllbGQgc3VtbWFyaWVzIOKAlCB1c2UgdHlwb2dyYXBoeS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLXN0YXQtY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtHZW9JY29uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1zdGF0LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VvLXN0YXQtY2FyZC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdnZW8tc3RhdC1jYXJkLWhvc3QnLFxuICAgICdbY2xhc3MuZ2VvLXN0YXQtY2FyZC1ob3N0LS1jbGlja2FibGVdJzogJ2NsaWNrYWJsZSgpJyxcbiAgICAnW2NsYXNzLmdlby1zdGF0LWNhcmQtaG9zdC0tYW5pbWF0ZV0nOiAnYW5pbWF0ZSgpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvU3RhdENhcmRDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICByZWFkb25seSBsYWJlbCA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgdmFsdWUgPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCcnKTtcbiAgcmVhZG9ubHkgdW5pdCA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgaWNvbiA9IGlucHV0KCdiYXItY2hhcnQnKTtcbiAgcmVhZG9ubHkgaGludCA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgY2xpY2thYmxlID0gaW5wdXQoZmFsc2UpO1xuICAvKiogQ291bnQtdXAgbnVtYmVyIGFuaW1hdGlvbi4gSG9ub3JzIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYC4gKi9cbiAgcmVhZG9ubHkgYW5pbWF0ZSA9IGlucHV0KHRydWUpO1xuICAvKiogQ291bnQtdXAgZHVyYXRpb24gaW4gbXMuICovXG4gIHJlYWRvbmx5IGFuaW1hdGlvbkR1cmF0aW9uID0gaW5wdXQoMTAwMCk7XG4gIC8qKiBTdGFnZ2VyIGRlbGF5IGJlZm9yZSBjb3VudC11cCBzdGFydHMgKG1zKS4gKi9cbiAgcmVhZG9ubHkgYW5pbWF0aW9uRGVsYXkgPSBpbnB1dCgwKTtcblxuICByZWFkb25seSBjbGlja2VkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgLyoqIENvbnZlbmllbmNlOiBiaW5kIGEgd2hvbGUgaXRlbSBvYmplY3QuICovXG4gIHJlYWRvbmx5IGl0ZW0gPSBpbnB1dDxHZW9TdGF0Q2FyZEl0ZW0gfCBudWxsPihudWxsKTtcblxuICAvKiogQW5pbWF0ZWQgLyByZXNvbHZlZCB2YWx1ZSBzaG93biBpbiB0aGUgdGVtcGxhdGUuICovXG4gIHJlYWRvbmx5IGRpc3BsYXlWYWx1ZSA9IHNpZ25hbCgnJyk7XG5cbiAgcHJpdmF0ZSByYWZJZCA9IDA7XG4gIHByaXZhdGUgZGVsYXlJZCA9IDA7XG4gIHByaXZhdGUgYW5pbVRva2VuID0gMDtcblxuICByZWFkb25seSByZXNvbHZlZExhYmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pdGVtKCk/LmxhYmVsID8/IHRoaXMubGFiZWwoKSk7XG4gIHJlYWRvbmx5IHJlc29sdmVkVW5pdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXRlbSgpPy51bml0ID8/IHRoaXMudW5pdCgpKTtcbiAgcmVhZG9ubHkgcmVzb2x2ZWRJY29uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pdGVtKCk/Lmljb24gPz8gdGhpcy5pY29uKCkpO1xuICByZWFkb25seSByZXNvbHZlZEhpbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLml0ZW0oKT8uaGludCA/PyB0aGlzLmhpbnQoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlZFJhd1ZhbHVlID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5pdGVtKCk/LnZhbHVlID8/IHRoaXMudmFsdWUoKSxcbiAgKTtcblxuICAvKiogRmFsbGJhY2sgd2hlbiBhbmltYXRpb24gaGFzIG5vdCBwYWludGVkIHlldC4gKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRSYXdGYWxsYmFjayA9IGNvbXB1dGVkKCgpID0+IFN0cmluZyh0aGlzLnJlc29sdmVkUmF3VmFsdWUoKSA/PyAnJykpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcmF3ID0gdGhpcy5yZXNvbHZlZFJhd1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNob3VsZEFuaW1hdGUgPSB0aGlzLmFuaW1hdGUoKTtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5hbmltYXRpb25EZWxheSgpO1xuICAgICAgICAvLyBEZWZlciB3cml0ZXMgb3V0IG9mIHRoZSBlZmZlY3QgZ3JhcGggKEFuZ3VsYXIgMTggc2lnbmFsIHdyaXRlIHJ1bGVzKS5cbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5zdGFydENvdW50VXAocmF3LCBzaG91bGRBbmltYXRlLCBkdXJhdGlvbiwgZGVsYXkpKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcblxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gdGhpcy5jYW5jZWxBbmltYXRpb24oKSk7XG4gIH1cblxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsaWNrYWJsZSgpKSB7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRDb3VudFVwKFxuICAgIHJhdzogc3RyaW5nIHwgbnVtYmVyLFxuICAgIHNob3VsZEFuaW1hdGU6IGJvb2xlYW4sXG4gICAgZHVyYXRpb246IG51bWJlcixcbiAgICBkZWxheTogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbEFuaW1hdGlvbigpO1xuICAgIGNvbnN0IHRva2VuID0gKyt0aGlzLmFuaW1Ub2tlbjtcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlVmFsdWUocmF3KTtcbiAgICBjb25zdCByZWR1Y2VkTW90aW9uID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKS5tYXRjaGVzO1xuXG4gICAgaWYgKCFwYXJzZWQubnVtZXJpYyB8fCAhc2hvdWxkQW5pbWF0ZSB8fCByZWR1Y2VkTW90aW9uKSB7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQocGFyc2VkLnJhdyk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQodGhpcy5mb3JtYXRWYWx1ZSgwLCBwYXJzZWQuZGVjaW1hbHMpKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IHJ1biA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0b2tlbiAhPT0gdGhpcy5hbmltVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRlZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgbGV0IGxhc3RTaG93biA9IE51bWJlci5OYU47XG4gICAgICAvLyDDjXQgYsaw4bubYyBoaeG7g24gdGjhu4sgaMahbiDihpIgbcaw4bujdCBkw7kgZHVyYXRpb24gbmfhuq9uICh0csOhbmggc3BhbSBt4buNaSBz4buRIG5ndXnDqm4pLlxuICAgICAgY29uc3QgdmlzdWFsU3RlcHMgPSBNYXRoLm1pbigzNiwgTWF0aC5tYXgoMjIsIE1hdGgucm91bmQoZHVyYXRpb24gLyAzNikpKTtcbiAgICAgIGNvbnN0IHRpY2sgPSAobm93OiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHRva2VuICE9PSB0aGlzLmFuaW1Ub2tlbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkKSAvIE1hdGgubWF4KGR1cmF0aW9uLCAxKSk7XG4gICAgICAgIGNvbnN0IGVhc2VkID0gdGhpcy5lYXNlT3V0U29mdChwcm9ncmVzcyk7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBNYXRoLm1pbih2aXN1YWxTdGVwcywgTWF0aC5yb3VuZChlYXNlZCAqIHZpc3VhbFN0ZXBzKSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSAocGFyc2VkLnRhcmdldCAqIHN0ZXApIC8gdmlzdWFsU3RlcHM7XG4gICAgICAgIGNvbnN0IHJvdW5kZWQgPVxuICAgICAgICAgIHBhcnNlZC5kZWNpbWFscyA+IDBcbiAgICAgICAgICAgID8gTnVtYmVyKGN1cnJlbnQudG9GaXhlZChwYXJzZWQuZGVjaW1hbHMpKVxuICAgICAgICAgICAgOiBNYXRoLnJvdW5kKGN1cnJlbnQpO1xuICAgICAgICBpZiAocm91bmRlZCAhPT0gbGFzdFNob3duKSB7XG4gICAgICAgICAgbGFzdFNob3duID0gcm91bmRlZDtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQodGhpcy5mb3JtYXRWYWx1ZShyb3VuZGVkLCBwYXJzZWQuZGVjaW1hbHMpKTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvZ3Jlc3MgPCAxKSB7XG4gICAgICAgICAgdGhpcy5yYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZS5zZXQocGFyc2VkLnJhdyk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH07XG5cbiAgICBpZiAoZGVsYXkgPiAwICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmRlbGF5SWQgPSB3aW5kb3cuc2V0VGltZW91dChydW4sIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnVuKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxBbmltYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5hbmltVG9rZW4gKz0gMTtcbiAgICBpZiAodGhpcy5yYWZJZCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yYWZJZCk7XG4gICAgICB0aGlzLnJhZklkID0gMDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVsYXlJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVsYXlJZCk7XG4gICAgICB0aGlzLmRlbGF5SWQgPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTb2Z0IGVhc2Utb3V0IOKAlCBuaGFuaCBn4buNbiwgaOG6oSB04buRYyBuaOG6uSBraGkga+G6v3QgdGjDumMuICovXG4gIHByaXZhdGUgZWFzZU91dFNvZnQodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCAyLjI1KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWx1ZShyYXc6IHN0cmluZyB8IG51bWJlcik6IFBhcnNlZFN0YXRWYWx1ZSB7XG4gICAgaWYgKHR5cGVvZiByYXcgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShyYXcpKSB7XG4gICAgICBjb25zdCBkZWNpbWFscyA9IE51bWJlci5pc0ludGVnZXIocmF3KSA/IDAgOiAxO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFyZ2V0OiByYXcsXG4gICAgICAgIGRlY2ltYWxzLFxuICAgICAgICByYXc6IHRoaXMuZm9ybWF0VmFsdWUocmF3LCBkZWNpbWFscyksXG4gICAgICAgIG51bWVyaWM6IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHRleHQgPSBTdHJpbmcocmF3ID8/ICcnKS50cmltKCk7XG4gICAgLy8gdmktVk46IDQxMi42ODAsNSBvciBwbGFpbiAyODQ1MTdcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGV4dC5yZXBsYWNlKC9cXC4vZywgJycpLnJlcGxhY2UoJywnLCAnLicpO1xuICAgIGNvbnN0IHRhcmdldCA9IE51bWJlcihub3JtYWxpemVkKTtcbiAgICBpZiAoIXRleHQgfHwgTnVtYmVyLmlzTmFOKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB7IHRhcmdldDogMCwgZGVjaW1hbHM6IDAsIHJhdzogdGV4dCwgbnVtZXJpYzogZmFsc2UgfTtcbiAgICB9XG4gICAgY29uc3QgZGVjaW1hbHMgPSB0ZXh0LmluY2x1ZGVzKCcsJykgPyAodGV4dC5zcGxpdCgnLCcpWzFdPy5sZW5ndGggPz8gMCkgOiAwO1xuICAgIHJldHVybiB7IHRhcmdldCwgZGVjaW1hbHMsIHJhdzogdGV4dCwgbnVtZXJpYzogdHJ1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZSh2YWx1ZTogbnVtYmVyLCBkZWNpbWFsczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUudG9Mb2NhbGVTdHJpbmcoJ3ZpLVZOJywge1xuICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkZWNpbWFscyxcbiAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZGVjaW1hbHMsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIGNsYXNzPVwiZ2VvLXN0YXQtY2FyZFwiXG4gIFtjbGFzcy5nZW8tc3RhdC1jYXJkLS1zdGF0aWNdPVwiIWNsaWNrYWJsZSgpXCJcbiAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCIhY2xpY2thYmxlKCkgfHwgbnVsbFwiXG4gIChjbGljayk9XCJvbkNsaWNrKClcIlxuPlxuICA8c3BhbiBjbGFzcz1cImdlby1zdGF0LWNhcmRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8Z2VvLWljb24gY2xhc3M9XCJnZW8tc3RhdC1jYXJkX19pY29uLWdseXBoXCIgW3R5cGVdPVwicmVzb2x2ZWRJY29uKClcIiBzaXplPVwibWRcIiAvPlxuICA8L3NwYW4+XG4gIDxzcGFuIGNsYXNzPVwiZ2VvLXN0YXQtY2FyZF9fYm9keVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZ2VvLXN0YXQtY2FyZF9fbGFiZWxcIj57eyByZXNvbHZlZExhYmVsKCkgfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJnZW8tc3RhdC1jYXJkX192YWx1ZS1yb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLXN0YXQtY2FyZF9fdmFsdWVcIj5cbiAgICAgICAge3sgZGlzcGxheVZhbHVlKCkgfHwgcmVzb2x2ZWRSYXdGYWxsYmFjaygpIH19XG4gICAgICA8L3NwYW4+XG4gICAgICBAaWYgKHJlc29sdmVkVW5pdCgpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLXN0YXQtY2FyZF9fdW5pdFwiPnt7IHJlc29sdmVkVW5pdCgpIH19PC9zcGFuPlxuICAgICAgfVxuICAgIDwvc3Bhbj5cbiAgICBAaWYgKHJlc29sdmVkSGludCgpKSB7XG4gICAgICA8c3BhbiBjbGFzcz1cImdlby1zdGF0LWNhcmRfX2hpbnRcIj57eyByZXNvbHZlZEhpbnQoKSB9fTwvc3Bhbj5cbiAgICB9XG4gIDwvc3Bhbj5cbjwvYnV0dG9uPlxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXN0YXQtY2FyZC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1zdGF0LWNhcmQvZ2VvLXN0YXQtY2FyZC50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBHZW9TdGF0Q2FyZEl0ZW0ge1xuICBpZD86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIHVuaXQgc2hvd24gYWZ0ZXIgdmFsdWUgKGUuZy4gbcKyLCB0aOG7rWEpLiAqL1xuICB1bml0Pzogc3RyaW5nO1xuICAvKiogQW50IERlc2lnbiBpY29uIG5hbWUuICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBoZWxwZXIgLyB0cmVuZCB0ZXh0LiAqL1xuICBoaW50Pzogc3RyaW5nO1xufVxuIl19
@@ -1,5 +1,4 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
1
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
3
2
  import { GEO_STATUS_COLOR_MAP, GEO_STATUS_LABELS, } from './geo-status-tag.types';
4
3
  import * as i0 from "@angular/core";
5
4
  export class GeoStatusTagComponent {
@@ -8,16 +7,17 @@ export class GeoStatusTagComponent {
8
7
  * Semantic: success | primary | error | warning | info | teal | neutral
9
8
  * Legacy: completed | cancelled | in_progress | adjusting
10
9
  */
11
- status = 'success';
10
+ status = input('success');
12
11
  /** Override label text. */
13
- label;
12
+ label = input(undefined);
14
13
  /** Show leading status dot (design default). */
15
- showDot = true;
16
- get resolvedColor() {
17
- if (this.status in GEO_STATUS_COLOR_MAP) {
18
- return GEO_STATUS_COLOR_MAP[this.status];
14
+ showDot = input(true);
15
+ resolvedColor = computed(() => {
16
+ const status = this.status();
17
+ if (status in GEO_STATUS_COLOR_MAP) {
18
+ return GEO_STATUS_COLOR_MAP[status];
19
19
  }
20
- const normalized = this.status
20
+ const normalized = status
21
21
  .toLowerCase()
22
22
  .replace(/\s+/g, '_')
23
23
  .normalize('NFD')
@@ -37,26 +37,22 @@ export class GeoStatusTagComponent {
37
37
  if (normalized.includes('muon') || normalized.includes('thuc_hien'))
38
38
  return 'primary';
39
39
  return 'primary';
40
- }
41
- get displayLabel() {
42
- if (this.label)
43
- return this.label;
44
- if (this.status in GEO_STATUS_LABELS) {
45
- return GEO_STATUS_LABELS[this.status];
40
+ });
41
+ displayLabel = computed(() => {
42
+ const label = this.label();
43
+ if (label)
44
+ return label;
45
+ const status = this.status();
46
+ if (status in GEO_STATUS_LABELS) {
47
+ return GEO_STATUS_LABELS[status];
46
48
  }
47
- return this.status;
48
- }
49
+ return status;
50
+ });
49
51
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoStatusTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
50
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoStatusTagComponent, isStandalone: true, selector: "geo-status-tag", inputs: { status: "status", label: "label", showDot: "showDot" }, ngImport: i0, template: "<span\n class=\"geo-status-tag\"\n [class]=\"'geo-status-tag geo-status-tag--' + resolvedColor\"\n>\n @if (showDot) {\n <span class=\"geo-status-tag__dot\" aria-hidden=\"true\"></span>\n }\n <span class=\"geo-status-tag__label\">{{ displayLabel }}</span>\n</span>\n", styles: ["@charset \"UTF-8\";.geo-status-tag{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;min-height:24px;padding:4px 12px;border:1px solid transparent;border-radius:999px;font-family:var(--geo-font-family);font-size:var(--geo-font-size-caption);font-weight:var(--geo-font-weight-medium);line-height:var(--geo-line-height-caption);white-space:nowrap;vertical-align:middle}.geo-status-tag__dot{flex-shrink:0;width:6px;height:6px;border-radius:50%}.geo-status-tag__label{display:inline-flex;align-items:center}.geo-status-tag--success{background:var(--geo-color-success-light);border-color:color-mix(in srgb,var(--geo-color-success-default) 45%,var(--geo-color-success-light));color:var(--geo-color-success-dark)}.geo-status-tag--success .geo-status-tag__dot{background:var(--geo-color-success-dark)}.geo-status-tag--primary{background:var(--geo-color-primary-surface-light);border-color:var(--geo-color-primary-border);color:var(--geo-color-primary-default)}.geo-status-tag--primary .geo-status-tag__dot{background:var(--geo-color-primary-default)}.geo-status-tag--error{background:var(--geo-color-error-light);border-color:color-mix(in srgb,var(--geo-color-error-default) 40%,var(--geo-color-error-light));color:var(--geo-color-error-dark)}.geo-status-tag--error .geo-status-tag__dot{background:var(--geo-color-error-dark)}.geo-status-tag--warning{background:var(--geo-color-warning-light);border-color:color-mix(in srgb,var(--geo-color-warning-default) 45%,var(--geo-color-warning-light));color:var(--geo-color-warning-dark)}.geo-status-tag--warning .geo-status-tag__dot{background:var(--geo-color-warning-dark)}.geo-status-tag--info{background:var(--geo-color-info-light);border-color:color-mix(in srgb,var(--geo-color-info-default) 40%,var(--geo-color-info-light));color:var(--geo-color-info-dark)}.geo-status-tag--info .geo-status-tag__dot{background:var(--geo-color-info-dark)}.geo-status-tag--teal{background:var(--geo-color-teal-light);border-color:color-mix(in srgb,var(--geo-color-teal-default) 40%,var(--geo-color-teal-light));color:var(--geo-color-teal-dark)}.geo-status-tag--teal .geo-status-tag__dot{background:var(--geo-color-teal-dark)}.geo-status-tag--neutral{background:var(--geo-color-neutral-100);border-color:var(--geo-color-neutral-300);color:var(--geo-color-neutral-800)}.geo-status-tag--neutral .geo-status-tag__dot{background:var(--geo-color-neutral-800)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
52
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoStatusTagComponent, isStandalone: true, selector: "geo-status-tag", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, showDot: { classPropertyName: "showDot", publicName: "showDot", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span\n class=\"geo-status-tag\"\n [class]=\"'geo-status-tag geo-status-tag--' + resolvedColor()\"\n>\n @if (showDot()) {\n <span class=\"geo-status-tag__dot\" aria-hidden=\"true\"></span>\n }\n <span class=\"geo-status-tag__label\">{{ displayLabel() }}</span>\n</span>\n", styles: ["@charset \"UTF-8\";.geo-status-tag{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;min-height:24px;padding:4px 12px;border:1px solid transparent;border-radius:var(--geo-radius-full);font-family:var(--geo-font-family);font-size:var(--geo-font-size-caption);font-weight:var(--geo-font-weight-medium);line-height:var(--geo-line-height-caption);white-space:nowrap;vertical-align:middle}.geo-status-tag__dot{flex-shrink:0;width:6px;height:6px;border-radius:50%}.geo-status-tag__label{display:inline-flex;align-items:center}.geo-status-tag--success{background:var(--geo-color-success-light);border-color:color-mix(in srgb,var(--geo-color-success-default) 45%,var(--geo-color-success-light));color:var(--geo-color-success-dark)}.geo-status-tag--success .geo-status-tag__dot{background:var(--geo-color-success-dark)}.geo-status-tag--primary{background:var(--geo-color-primary-surface-light);border-color:var(--geo-color-primary-border);color:var(--geo-color-primary-default)}.geo-status-tag--primary .geo-status-tag__dot{background:var(--geo-color-primary-default)}.geo-status-tag--error{background:var(--geo-color-error-light);border-color:color-mix(in srgb,var(--geo-color-error-default) 40%,var(--geo-color-error-light));color:var(--geo-color-error-dark)}.geo-status-tag--error .geo-status-tag__dot{background:var(--geo-color-error-dark)}.geo-status-tag--warning{background:var(--geo-color-warning-light);border-color:color-mix(in srgb,var(--geo-color-warning-default) 45%,var(--geo-color-warning-light));color:var(--geo-color-warning-dark)}.geo-status-tag--warning .geo-status-tag__dot{background:var(--geo-color-warning-dark)}.geo-status-tag--info{background:var(--geo-color-info-light);border-color:color-mix(in srgb,var(--geo-color-info-default) 40%,var(--geo-color-info-light));color:var(--geo-color-info-dark)}.geo-status-tag--info .geo-status-tag__dot{background:var(--geo-color-info-dark)}.geo-status-tag--teal{background:var(--geo-color-teal-light);border-color:color-mix(in srgb,var(--geo-color-teal-default) 40%,var(--geo-color-teal-light));color:var(--geo-color-teal-dark)}.geo-status-tag--teal .geo-status-tag__dot{background:var(--geo-color-teal-dark)}.geo-status-tag--neutral{background:var(--geo-color-neutral-100);border-color:var(--geo-color-neutral-300);color:var(--geo-color-neutral-800)}.geo-status-tag--neutral .geo-status-tag__dot{background:var(--geo-color-neutral-800)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
51
53
  }
52
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoStatusTagComponent, decorators: [{
53
55
  type: Component,
54
- args: [{ selector: 'geo-status-tag', standalone: true, imports: [CommonModule], template: "<span\n class=\"geo-status-tag\"\n [class]=\"'geo-status-tag geo-status-tag--' + resolvedColor\"\n>\n @if (showDot) {\n <span class=\"geo-status-tag__dot\" aria-hidden=\"true\"></span>\n }\n <span class=\"geo-status-tag__label\">{{ displayLabel }}</span>\n</span>\n", styles: ["@charset \"UTF-8\";.geo-status-tag{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;min-height:24px;padding:4px 12px;border:1px solid transparent;border-radius:999px;font-family:var(--geo-font-family);font-size:var(--geo-font-size-caption);font-weight:var(--geo-font-weight-medium);line-height:var(--geo-line-height-caption);white-space:nowrap;vertical-align:middle}.geo-status-tag__dot{flex-shrink:0;width:6px;height:6px;border-radius:50%}.geo-status-tag__label{display:inline-flex;align-items:center}.geo-status-tag--success{background:var(--geo-color-success-light);border-color:color-mix(in srgb,var(--geo-color-success-default) 45%,var(--geo-color-success-light));color:var(--geo-color-success-dark)}.geo-status-tag--success .geo-status-tag__dot{background:var(--geo-color-success-dark)}.geo-status-tag--primary{background:var(--geo-color-primary-surface-light);border-color:var(--geo-color-primary-border);color:var(--geo-color-primary-default)}.geo-status-tag--primary .geo-status-tag__dot{background:var(--geo-color-primary-default)}.geo-status-tag--error{background:var(--geo-color-error-light);border-color:color-mix(in srgb,var(--geo-color-error-default) 40%,var(--geo-color-error-light));color:var(--geo-color-error-dark)}.geo-status-tag--error .geo-status-tag__dot{background:var(--geo-color-error-dark)}.geo-status-tag--warning{background:var(--geo-color-warning-light);border-color:color-mix(in srgb,var(--geo-color-warning-default) 45%,var(--geo-color-warning-light));color:var(--geo-color-warning-dark)}.geo-status-tag--warning .geo-status-tag__dot{background:var(--geo-color-warning-dark)}.geo-status-tag--info{background:var(--geo-color-info-light);border-color:color-mix(in srgb,var(--geo-color-info-default) 40%,var(--geo-color-info-light));color:var(--geo-color-info-dark)}.geo-status-tag--info .geo-status-tag__dot{background:var(--geo-color-info-dark)}.geo-status-tag--teal{background:var(--geo-color-teal-light);border-color:color-mix(in srgb,var(--geo-color-teal-default) 40%,var(--geo-color-teal-light));color:var(--geo-color-teal-dark)}.geo-status-tag--teal .geo-status-tag__dot{background:var(--geo-color-teal-dark)}.geo-status-tag--neutral{background:var(--geo-color-neutral-100);border-color:var(--geo-color-neutral-300);color:var(--geo-color-neutral-800)}.geo-status-tag--neutral .geo-status-tag__dot{background:var(--geo-color-neutral-800)}\n"] }]
55
- }], propDecorators: { status: [{
56
- type: Input
57
- }], label: [{
58
- type: Input
59
- }], showDot: [{
60
- type: Input
61
- }] } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXN0YXR1cy10YWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXN0YXR1cy10YWcvZ2VvLXN0YXR1cy10YWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXN0YXR1cy10YWcvZ2VvLXN0YXR1cy10YWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsaUJBQWlCLEdBR2xCLE1BQU0sd0JBQXdCLENBQUM7O0FBU2hDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7Ozs7T0FJRztJQUNNLE1BQU0sR0FBNkIsU0FBUyxDQUFDO0lBQ3RELDJCQUEyQjtJQUNsQixLQUFLLENBQVU7SUFDeEIsZ0RBQWdEO0lBQ3ZDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFFeEIsSUFBSSxhQUFhO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDeEMsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBeUIsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTTthQUMzQixXQUFXLEVBQUU7YUFDYixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzthQUNwQixTQUFTLENBQUMsS0FBSyxDQUFDO2FBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVuQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNyRixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUNqRixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUMzRixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUMvRSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUN4RixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN0RixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUN0RixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNyQyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUF5QixDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO3dHQXZDVSxxQkFBcUI7NEZBQXJCLHFCQUFxQiw0SUNoQmxDLG1SQVNBLG81RURHWSxZQUFZOzs0RkFJWCxxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDOzhCQVVkLE1BQU07c0JBQWQsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEdFT19TVEFUVVNfQ09MT1JfTUFQLFxuICBHRU9fU1RBVFVTX0xBQkVMUyxcbiAgR2VvU3RhdHVzQ29sb3IsXG4gIEdlb1N0YXR1c1ByZXNldCxcbn0gZnJvbSAnLi9nZW8tc3RhdHVzLXRhZy50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1zdGF0dXMtdGFnJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tc3RhdHVzLXRhZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tc3RhdHVzLXRhZy5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEdlb1N0YXR1c1RhZ0NvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBTdGF0dXMgcHJlc2V0IG9yIGZyZWUtZm9ybSBzdHJpbmcuXG4gICAqIFNlbWFudGljOiBzdWNjZXNzIHwgcHJpbWFyeSB8IGVycm9yIHwgd2FybmluZyB8IGluZm8gfCB0ZWFsIHwgbmV1dHJhbFxuICAgKiBMZWdhY3k6IGNvbXBsZXRlZCB8IGNhbmNlbGxlZCB8IGluX3Byb2dyZXNzIHwgYWRqdXN0aW5nXG4gICAqL1xuICBASW5wdXQoKSBzdGF0dXM6IEdlb1N0YXR1c1ByZXNldCB8IHN0cmluZyA9ICdzdWNjZXNzJztcbiAgLyoqIE92ZXJyaWRlIGxhYmVsIHRleHQuICovXG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nO1xuICAvKiogU2hvdyBsZWFkaW5nIHN0YXR1cyBkb3QgKGRlc2lnbiBkZWZhdWx0KS4gKi9cbiAgQElucHV0KCkgc2hvd0RvdCA9IHRydWU7XG5cbiAgZ2V0IHJlc29sdmVkQ29sb3IoKTogR2VvU3RhdHVzQ29sb3Ige1xuICAgIGlmICh0aGlzLnN0YXR1cyBpbiBHRU9fU1RBVFVTX0NPTE9SX01BUCkge1xuICAgICAgcmV0dXJuIEdFT19TVEFUVVNfQ09MT1JfTUFQW3RoaXMuc3RhdHVzIGFzIEdlb1N0YXR1c1ByZXNldF07XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMuc3RhdHVzXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJ18nKVxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG5cbiAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygnc2FuX3NhbmcnKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdob2FuJykpIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3R1X2Nob2knKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdodXknKSkgcmV0dXJuICdlcnJvcic7XG4gICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2Jhbl90aGFvJykgfHwgbm9ybWFsaXplZC5pbmNsdWRlcygnZGlldV9jaGluaCcpKSByZXR1cm4gJ3dhcm5pbmcnO1xuICAgIGlmIChub3JtYWxpemVkLmluY2x1ZGVzKCdkYV9ub3AnKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdub3AnKSkgcmV0dXJuICdpbmZvJztcbiAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygndHJhX2tldF9xdWEnKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdrZXRfcXVhJykpIHJldHVybiAndGVhbCc7XG4gICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2NodWFfeHVfbHknKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdjaG8nKSkgcmV0dXJuICduZXV0cmFsJztcbiAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygnbXVvbicpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3RodWNfaGllbicpKSByZXR1cm4gJ3ByaW1hcnknO1xuICAgIHJldHVybiAncHJpbWFyeSc7XG4gIH1cblxuICBnZXQgZGlzcGxheUxhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubGFiZWwpIHJldHVybiB0aGlzLmxhYmVsO1xuICAgIGlmICh0aGlzLnN0YXR1cyBpbiBHRU9fU1RBVFVTX0xBQkVMUykge1xuICAgICAgcmV0dXJuIEdFT19TVEFUVVNfTEFCRUxTW3RoaXMuc3RhdHVzIGFzIEdlb1N0YXR1c1ByZXNldF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXR1cztcbiAgfVxufVxuIiwiPHNwYW5cbiAgY2xhc3M9XCJnZW8tc3RhdHVzLXRhZ1wiXG4gIFtjbGFzc109XCInZ2VvLXN0YXR1cy10YWcgZ2VvLXN0YXR1cy10YWctLScgKyByZXNvbHZlZENvbG9yXCJcbj5cbiAgQGlmIChzaG93RG90KSB7XG4gICAgPHNwYW4gY2xhc3M9XCJnZW8tc3RhdHVzLXRhZ19fZG90XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICB9XG4gIDxzcGFuIGNsYXNzPVwiZ2VvLXN0YXR1cy10YWdfX2xhYmVsXCI+e3sgZGlzcGxheUxhYmVsIH19PC9zcGFuPlxuPC9zcGFuPlxuIl19
56
+ args: [{ selector: 'geo-status-tag', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span\n class=\"geo-status-tag\"\n [class]=\"'geo-status-tag geo-status-tag--' + resolvedColor()\"\n>\n @if (showDot()) {\n <span class=\"geo-status-tag__dot\" aria-hidden=\"true\"></span>\n }\n <span class=\"geo-status-tag__label\">{{ displayLabel() }}</span>\n</span>\n", styles: ["@charset \"UTF-8\";.geo-status-tag{display:inline-flex;align-items:center;gap:6px;box-sizing:border-box;min-height:24px;padding:4px 12px;border:1px solid transparent;border-radius:var(--geo-radius-full);font-family:var(--geo-font-family);font-size:var(--geo-font-size-caption);font-weight:var(--geo-font-weight-medium);line-height:var(--geo-line-height-caption);white-space:nowrap;vertical-align:middle}.geo-status-tag__dot{flex-shrink:0;width:6px;height:6px;border-radius:50%}.geo-status-tag__label{display:inline-flex;align-items:center}.geo-status-tag--success{background:var(--geo-color-success-light);border-color:color-mix(in srgb,var(--geo-color-success-default) 45%,var(--geo-color-success-light));color:var(--geo-color-success-dark)}.geo-status-tag--success .geo-status-tag__dot{background:var(--geo-color-success-dark)}.geo-status-tag--primary{background:var(--geo-color-primary-surface-light);border-color:var(--geo-color-primary-border);color:var(--geo-color-primary-default)}.geo-status-tag--primary .geo-status-tag__dot{background:var(--geo-color-primary-default)}.geo-status-tag--error{background:var(--geo-color-error-light);border-color:color-mix(in srgb,var(--geo-color-error-default) 40%,var(--geo-color-error-light));color:var(--geo-color-error-dark)}.geo-status-tag--error .geo-status-tag__dot{background:var(--geo-color-error-dark)}.geo-status-tag--warning{background:var(--geo-color-warning-light);border-color:color-mix(in srgb,var(--geo-color-warning-default) 45%,var(--geo-color-warning-light));color:var(--geo-color-warning-dark)}.geo-status-tag--warning .geo-status-tag__dot{background:var(--geo-color-warning-dark)}.geo-status-tag--info{background:var(--geo-color-info-light);border-color:color-mix(in srgb,var(--geo-color-info-default) 40%,var(--geo-color-info-light));color:var(--geo-color-info-dark)}.geo-status-tag--info .geo-status-tag__dot{background:var(--geo-color-info-dark)}.geo-status-tag--teal{background:var(--geo-color-teal-light);border-color:color-mix(in srgb,var(--geo-color-teal-default) 40%,var(--geo-color-teal-light));color:var(--geo-color-teal-dark)}.geo-status-tag--teal .geo-status-tag__dot{background:var(--geo-color-teal-dark)}.geo-status-tag--neutral{background:var(--geo-color-neutral-100);border-color:var(--geo-color-neutral-300);color:var(--geo-color-neutral-800)}.geo-status-tag--neutral .geo-status-tag__dot{background:var(--geo-color-neutral-800)}\n"] }]
57
+ }] });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXN0YXR1cy10YWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXN0YXR1cy10YWcvZ2VvLXN0YXR1cy10YWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXN0YXR1cy10YWcvZ2VvLXN0YXR1cy10YWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsaUJBQWlCLEdBR2xCLE1BQU0sd0JBQXdCLENBQUM7O0FBU2hDLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7Ozs7T0FJRztJQUNNLE1BQU0sR0FBRyxLQUFLLENBQTJCLFNBQVMsQ0FBQyxDQUFDO0lBQzdELDJCQUEyQjtJQUNsQixLQUFLLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUN0RCxnREFBZ0Q7SUFDdkMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0QixhQUFhLEdBQUcsUUFBUSxDQUFpQixHQUFHLEVBQUU7UUFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLElBQUksTUFBTSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDbkMsT0FBTyxvQkFBb0IsQ0FBQyxNQUF5QixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU07YUFDdEIsV0FBVyxFQUFFO2FBQ2IsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFDcEIsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUNoQixPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbkMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDckYsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDakYsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDM0YsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDL0UsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDeEYsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDdEYsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDdEYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFFTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLElBQUksTUFBTSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDaEMsT0FBTyxpQkFBaUIsQ0FBQyxNQUF5QixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO3dHQTFDUSxxQkFBcUI7NEZBQXJCLHFCQUFxQix1Y0NmbEMseVJBU0E7OzRGRE1hLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLG1CQUdDLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEdFT19TVEFUVVNfQ09MT1JfTUFQLFxuICBHRU9fU1RBVFVTX0xBQkVMUyxcbiAgR2VvU3RhdHVzQ29sb3IsXG4gIEdlb1N0YXR1c1ByZXNldCxcbn0gZnJvbSAnLi9nZW8tc3RhdHVzLXRhZy50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1zdGF0dXMtdGFnJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1zdGF0dXMtdGFnLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1zdGF0dXMtdGFnLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEdlb1N0YXR1c1RhZ0NvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBTdGF0dXMgcHJlc2V0IG9yIGZyZWUtZm9ybSBzdHJpbmcuXG4gICAqIFNlbWFudGljOiBzdWNjZXNzIHwgcHJpbWFyeSB8IGVycm9yIHwgd2FybmluZyB8IGluZm8gfCB0ZWFsIHwgbmV1dHJhbFxuICAgKiBMZWdhY3k6IGNvbXBsZXRlZCB8IGNhbmNlbGxlZCB8IGluX3Byb2dyZXNzIHwgYWRqdXN0aW5nXG4gICAqL1xuICByZWFkb25seSBzdGF0dXMgPSBpbnB1dDxHZW9TdGF0dXNQcmVzZXQgfCBzdHJpbmc+KCdzdWNjZXNzJyk7XG4gIC8qKiBPdmVycmlkZSBsYWJlbCB0ZXh0LiAqL1xuICByZWFkb25seSBsYWJlbCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIFNob3cgbGVhZGluZyBzdGF0dXMgZG90IChkZXNpZ24gZGVmYXVsdCkuICovXG4gIHJlYWRvbmx5IHNob3dEb3QgPSBpbnB1dCh0cnVlKTtcblxuICByZWFkb25seSByZXNvbHZlZENvbG9yID0gY29tcHV0ZWQ8R2VvU3RhdHVzQ29sb3I+KCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnN0YXR1cygpO1xuICAgIGlmIChzdGF0dXMgaW4gR0VPX1NUQVRVU19DT0xPUl9NQVApIHtcbiAgICAgIHJldHVybiBHRU9fU1RBVFVTX0NPTE9SX01BUFtzdGF0dXMgYXMgR2VvU3RhdHVzUHJlc2V0XTtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gc3RhdHVzXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJ18nKVxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG5cbiAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygnc2FuX3NhbmcnKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdob2FuJykpIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3R1X2Nob2knKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdodXknKSkgcmV0dXJuICdlcnJvcic7XG4gICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2Jhbl90aGFvJykgfHwgbm9ybWFsaXplZC5pbmNsdWRlcygnZGlldV9jaGluaCcpKSByZXR1cm4gJ3dhcm5pbmcnO1xuICAgIGlmIChub3JtYWxpemVkLmluY2x1ZGVzKCdkYV9ub3AnKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdub3AnKSkgcmV0dXJuICdpbmZvJztcbiAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygndHJhX2tldF9xdWEnKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdrZXRfcXVhJykpIHJldHVybiAndGVhbCc7XG4gICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2NodWFfeHVfbHknKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCdjaG8nKSkgcmV0dXJuICduZXV0cmFsJztcbiAgICBpZiAobm9ybWFsaXplZC5pbmNsdWRlcygnbXVvbicpIHx8IG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3RodWNfaGllbicpKSByZXR1cm4gJ3ByaW1hcnknO1xuICAgIHJldHVybiAncHJpbWFyeSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXlMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwoKTtcbiAgICBpZiAobGFiZWwpIHJldHVybiBsYWJlbDtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnN0YXR1cygpO1xuICAgIGlmIChzdGF0dXMgaW4gR0VPX1NUQVRVU19MQUJFTFMpIHtcbiAgICAgIHJldHVybiBHRU9fU1RBVFVTX0xBQkVMU1tzdGF0dXMgYXMgR2VvU3RhdHVzUHJlc2V0XTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfSk7XG59XG4iLCI8c3BhblxuICBjbGFzcz1cImdlby1zdGF0dXMtdGFnXCJcbiAgW2NsYXNzXT1cIidnZW8tc3RhdHVzLXRhZyBnZW8tc3RhdHVzLXRhZy0tJyArIHJlc29sdmVkQ29sb3IoKVwiXG4+XG4gIEBpZiAoc2hvd0RvdCgpKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJnZW8tc3RhdHVzLXRhZ19fZG90XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICB9XG4gIDxzcGFuIGNsYXNzPVwiZ2VvLXN0YXR1cy10YWdfX2xhYmVsXCI+e3sgZGlzcGxheUxhYmVsKCkgfX08L3NwYW4+XG48L3NwYW4+XG4iXX0=