@geoit/ui 0.0.2

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 (165) hide show
  1. package/AGENTS.md +25 -0
  2. package/README.md +46 -0
  3. package/ai/AGENTS.md +86 -0
  4. package/ai/README.md +44 -0
  5. package/ai/catalog.json +882 -0
  6. package/ai/components/geo-alert.md +56 -0
  7. package/ai/components/geo-back-button.md +54 -0
  8. package/ai/components/geo-breadcrumb.md +52 -0
  9. package/ai/components/geo-button.md +63 -0
  10. package/ai/components/geo-checkbox.md +54 -0
  11. package/ai/components/geo-column-picker.md +54 -0
  12. package/ai/components/geo-confirm-modal.md +70 -0
  13. package/ai/components/geo-date-picker.md +65 -0
  14. package/ai/components/geo-date-range-picker.md +64 -0
  15. package/ai/components/geo-file-picker.md +62 -0
  16. package/ai/components/geo-form-modal.md +88 -0
  17. package/ai/components/geo-icon.md +53 -0
  18. package/ai/components/geo-input.md +65 -0
  19. package/ai/components/geo-page-title.md +53 -0
  20. package/ai/components/geo-pagination.md +59 -0
  21. package/ai/components/geo-radio.md +67 -0
  22. package/ai/components/geo-row-actions.md +54 -0
  23. package/ai/components/geo-select.md +68 -0
  24. package/ai/components/geo-slider.md +56 -0
  25. package/ai/components/geo-status-tag.md +51 -0
  26. package/ai/components/geo-step-form-layout.md +81 -0
  27. package/ai/components/geo-stepper.md +63 -0
  28. package/ai/components/geo-table-filter.md +65 -0
  29. package/ai/components/geo-table-pagination.md +59 -0
  30. package/ai/components/geo-table-toolbar.md +64 -0
  31. package/ai/components/geo-table.md +98 -0
  32. package/ai/components/geo-tabs.md +62 -0
  33. package/ai/components/geo-textarea.md +59 -0
  34. package/ai/components/geo-toast.md +61 -0
  35. package/ai/components/geo-tree.md +58 -0
  36. package/ai/components/geo-typography.md +57 -0
  37. package/ai/components/geo-upload.md +78 -0
  38. package/ai/recipes.md +111 -0
  39. package/esm2022/geoit-ui.mjs +5 -0
  40. package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +58 -0
  41. package/esm2022/lib/figma/geo-alert/geo-alert.types.mjs +7 -0
  42. package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +48 -0
  43. package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +33 -0
  44. package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.types.mjs +2 -0
  45. package/esm2022/lib/figma/geo-button/geo-button.component.mjs +77 -0
  46. package/esm2022/lib/figma/geo-button/geo-button.types.mjs +2 -0
  47. package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +34 -0
  48. package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +76 -0
  49. package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.types.mjs +2 -0
  50. package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +119 -0
  51. package/esm2022/lib/figma/geo-date-picker/geo-date-picker.types.mjs +2 -0
  52. package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +116 -0
  53. package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.types.mjs +2 -0
  54. package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +145 -0
  55. package/esm2022/lib/figma/geo-file-picker/geo-file-picker.types.mjs +2 -0
  56. package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +153 -0
  57. package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +51 -0
  58. package/esm2022/lib/figma/geo-icon/geo-icon.types.mjs +8 -0
  59. package/esm2022/lib/figma/geo-input/geo-input.component.mjs +118 -0
  60. package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +51 -0
  61. package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +54 -0
  62. package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +95 -0
  63. package/esm2022/lib/figma/geo-radio/geo-radio.types.mjs +2 -0
  64. package/esm2022/lib/figma/geo-select/geo-select.component.mjs +113 -0
  65. package/esm2022/lib/figma/geo-select/geo-select.types.mjs +2 -0
  66. package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +43 -0
  67. package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +62 -0
  68. package/esm2022/lib/figma/geo-status-tag/geo-status-tag.types.mjs +30 -0
  69. package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +157 -0
  70. package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.types.mjs +2 -0
  71. package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +77 -0
  72. package/esm2022/lib/figma/geo-stepper/geo-stepper.types.mjs +2 -0
  73. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +65 -0
  74. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.mjs +31 -0
  75. package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.types.mjs +2 -0
  76. package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +64 -0
  77. package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.mjs +24 -0
  78. package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +195 -0
  79. package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +118 -0
  80. package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +68 -0
  81. package/esm2022/lib/figma/geo-table/geo-table.component.mjs +381 -0
  82. package/esm2022/lib/figma/geo-table/geo-table.types.mjs +4 -0
  83. package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +94 -0
  84. package/esm2022/lib/figma/geo-tabs/geo-tabs.types.mjs +2 -0
  85. package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +85 -0
  86. package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +57 -0
  87. package/esm2022/lib/figma/geo-toast/geo-toast.service.mjs +116 -0
  88. package/esm2022/lib/figma/geo-toast/geo-toast.types.mjs +13 -0
  89. package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +52 -0
  90. package/esm2022/lib/figma/geo-tree/geo-tree.types.mjs +2 -0
  91. package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +112 -0
  92. package/esm2022/lib/figma/geo-typography/geo-typography.types.mjs +96 -0
  93. package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +218 -0
  94. package/esm2022/lib/figma/geo-upload/geo-upload.types.mjs +30 -0
  95. package/esm2022/lib/figma/index.mjs +56 -0
  96. package/esm2022/lib/ng-zorro/ng-zorro-antd.module.mjs +293 -0
  97. package/esm2022/lib/styles/tokens.mjs +144 -0
  98. package/esm2022/public-api.mjs +7 -0
  99. package/fesm2022/geoit-ui.mjs +3805 -0
  100. package/fesm2022/geoit-ui.mjs.map +1 -0
  101. package/index.d.ts +5 -0
  102. package/lib/figma/geo-alert/geo-alert.component.d.ts +17 -0
  103. package/lib/figma/geo-alert/geo-alert.types.d.ts +2 -0
  104. package/lib/figma/geo-back-button/geo-back-button.component.d.ts +18 -0
  105. package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +12 -0
  106. package/lib/figma/geo-breadcrumb/geo-breadcrumb.types.d.ts +10 -0
  107. package/lib/figma/geo-button/geo-button.component.d.ts +27 -0
  108. package/lib/figma/geo-button/geo-button.types.d.ts +4 -0
  109. package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +12 -0
  110. package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +24 -0
  111. package/lib/figma/geo-confirm-modal/geo-confirm-modal.types.d.ts +5 -0
  112. package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +35 -0
  113. package/lib/figma/geo-date-picker/geo-date-picker.types.d.ts +2 -0
  114. package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +34 -0
  115. package/lib/figma/geo-date-range-picker/geo-date-range-picker.types.d.ts +2 -0
  116. package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +39 -0
  117. package/lib/figma/geo-file-picker/geo-file-picker.types.d.ts +4 -0
  118. package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +57 -0
  119. package/lib/figma/geo-icon/geo-icon.component.d.ts +19 -0
  120. package/lib/figma/geo-icon/geo-icon.types.d.ts +3 -0
  121. package/lib/figma/geo-input/geo-input.component.d.ts +37 -0
  122. package/lib/figma/geo-page-title/geo-page-title.component.d.ts +22 -0
  123. package/lib/figma/geo-pagination/geo-pagination.component.d.ts +21 -0
  124. package/lib/figma/geo-radio/geo-radio.component.d.ts +31 -0
  125. package/lib/figma/geo-radio/geo-radio.types.d.ts +9 -0
  126. package/lib/figma/geo-select/geo-select.component.d.ts +33 -0
  127. package/lib/figma/geo-select/geo-select.types.d.ts +7 -0
  128. package/lib/figma/geo-slider/geo-slider.component.d.ts +17 -0
  129. package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +18 -0
  130. package/lib/figma/geo-status-tag/geo-status-tag.types.d.ts +13 -0
  131. package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +67 -0
  132. package/lib/figma/geo-step-form-layout/geo-step-form-layout.types.d.ts +9 -0
  133. package/lib/figma/geo-stepper/geo-stepper.component.d.ts +42 -0
  134. package/lib/figma/geo-stepper/geo-stepper.types.d.ts +9 -0
  135. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +20 -0
  136. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.storage.d.ts +5 -0
  137. package/lib/figma/geo-table/geo-column-picker/geo-column-picker.types.d.ts +17 -0
  138. package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +21 -0
  139. package/lib/figma/geo-table/geo-row-actions/geo-row-actions.types.d.ts +13 -0
  140. package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +75 -0
  141. package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +33 -0
  142. package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +24 -0
  143. package/lib/figma/geo-table/geo-table.component.d.ts +113 -0
  144. package/lib/figma/geo-table/geo-table.types.d.ts +47 -0
  145. package/lib/figma/geo-tabs/geo-tabs.component.d.ts +31 -0
  146. package/lib/figma/geo-tabs/geo-tabs.types.d.ts +7 -0
  147. package/lib/figma/geo-textarea/geo-textarea.component.d.ts +27 -0
  148. package/lib/figma/geo-toast/geo-toast.component.d.ts +23 -0
  149. package/lib/figma/geo-toast/geo-toast.service.d.ts +33 -0
  150. package/lib/figma/geo-toast/geo-toast.types.d.ts +45 -0
  151. package/lib/figma/geo-tree/geo-tree.component.d.ts +23 -0
  152. package/lib/figma/geo-tree/geo-tree.types.d.ts +12 -0
  153. package/lib/figma/geo-typography/geo-typography.component.d.ts +35 -0
  154. package/lib/figma/geo-typography/geo-typography.types.d.ts +12 -0
  155. package/lib/figma/geo-upload/geo-upload.component.d.ts +59 -0
  156. package/lib/figma/geo-upload/geo-upload.types.d.ts +13 -0
  157. package/lib/figma/index.d.ts +55 -0
  158. package/lib/ng-zorro/ng-zorro-antd.module.d.ts +76 -0
  159. package/lib/styles/tokens.d.ts +184 -0
  160. package/package.json +38 -0
  161. package/public-api.d.ts +3 -0
  162. package/src/lib/styles/design-tokens.scss +143 -0
  163. package/src/lib/styles/geo-toast-notification.scss +129 -0
  164. package/src/lib/styles/scrollbar.scss +38 -0
  165. package/src/lib/styles/theme.scss +153 -0
@@ -0,0 +1,153 @@
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';
4
+ import { NzIconModule } from 'ng-zorro-antd/icon';
5
+ import { GeoButtonComponent } from '../geo-button/geo-button.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "ng-zorro-antd/core/transition-patch";
8
+ import * as i2 from "ng-zorro-antd/icon";
9
+ import * as i3 from "ng-zorro-antd/modal";
10
+ /**
11
+ * Modal form dùng chung — API bám Ant Design Modal / ng-zorro nz-modal.
12
+ * Header + footer cố định; body có thể scroll (`bodyScroll`).
13
+ */
14
+ export class GeoFormModalComponent {
15
+ /** Tương đương `open` (antd) / `nzVisible` (ng-zorro). */
16
+ open = false;
17
+ title = '';
18
+ /** Title chữ in hoa. Default `true` theo design. */
19
+ titleUppercase = true;
20
+ okText = 'Lưu';
21
+ cancelText = 'Hủy';
22
+ /** Icon nút cancel (vd. `left` cho Quay lại). */
23
+ cancelIcon;
24
+ cancelIconPlacement = 'start';
25
+ /** Icon nút OK (vd. `right` cho Tiếp theo). */
26
+ okIcon;
27
+ okIconPlacement = 'end';
28
+ /** Nút phụ (vd. Lưu và khởi tạo lại). Chỉ hiện khi có text và không readonly. */
29
+ secondaryOkText = '';
30
+ /** Loading trên nút OK — giống antd `confirmLoading` / nz `nzOkLoading`. */
31
+ confirmLoading = false;
32
+ /** Disable nút OK — giống antd `okButtonProps.disabled` / nz `nzOkDisabled`. */
33
+ okDisabled = false;
34
+ /** Ẩn nút OK (xem chi tiết). */
35
+ readonly = false;
36
+ width = 720;
37
+ closable = true;
38
+ mask = true;
39
+ maskClosable = false;
40
+ keyboard = true;
41
+ centered = true;
42
+ zIndex = 1000;
43
+ className = '';
44
+ wrapClassName = '';
45
+ /** Body cuộn, header/footer cố định. */
46
+ bodyScroll = true;
47
+ /** Max-height của vùng body khi `bodyScroll` (vd `'60vh'`, `400`). */
48
+ bodyMaxHeight = '60vh';
49
+ openChange = new EventEmitter();
50
+ ok = new EventEmitter();
51
+ secondaryOk = new EventEmitter();
52
+ cancel = new EventEmitter();
53
+ afterOpen = new EventEmitter();
54
+ afterClose = new EventEmitter();
55
+ get resolvedWrapClassName() {
56
+ return ['geo-form-modal-wrap', this.wrapClassName].filter(Boolean).join(' ');
57
+ }
58
+ get resolvedClassName() {
59
+ return ['geo-form-modal', this.className].filter(Boolean).join(' ');
60
+ }
61
+ get bodyMaxHeightCss() {
62
+ return typeof this.bodyMaxHeight === 'number'
63
+ ? `${this.bodyMaxHeight}px`
64
+ : this.bodyMaxHeight;
65
+ }
66
+ onOpenChange(open) {
67
+ if (this.open === open) {
68
+ return;
69
+ }
70
+ this.openChange.emit(open);
71
+ }
72
+ onCancel() {
73
+ this.openChange.emit(false);
74
+ this.cancel.emit();
75
+ }
76
+ onOk() {
77
+ if (!this.okDisabled && !this.confirmLoading) {
78
+ this.ok.emit();
79
+ }
80
+ }
81
+ onSecondaryOk() {
82
+ if (!this.okDisabled && !this.confirmLoading) {
83
+ this.secondaryOk.emit();
84
+ }
85
+ }
86
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoFormModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
87
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoFormModalComponent, isStandalone: true, selector: "geo-form-modal", inputs: { open: "open", title: "title", titleUppercase: "titleUppercase", okText: "okText", cancelText: "cancelText", cancelIcon: "cancelIcon", cancelIconPlacement: "cancelIconPlacement", okIcon: "okIcon", okIconPlacement: "okIconPlacement", secondaryOkText: "secondaryOkText", confirmLoading: "confirmLoading", okDisabled: "okDisabled", readonly: "readonly", width: "width", closable: "closable", mask: "mask", maskClosable: "maskClosable", keyboard: "keyboard", centered: "centered", zIndex: "zIndex", className: "className", wrapClassName: "wrapClassName", bodyScroll: "bodyScroll", bodyMaxHeight: "bodyMaxHeight" }, outputs: { openChange: "openChange", ok: "ok", secondaryOk: "secondaryOk", cancel: "cancel", afterOpen: "afterOpen", afterClose: "afterClose" }, ngImport: i0, template: "<nz-modal\n [nzVisible]=\"open\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMask]=\"mask\"\n [nzMaskClosable]=\"maskClosable\"\n [nzKeyboard]=\"keyboard\"\n [nzCentered]=\"centered\"\n [nzWidth]=\"width\"\n [nzZIndex]=\"zIndex\"\n [nzWrapClassName]=\"resolvedWrapClassName\"\n [nzClassName]=\"resolvedClassName\"\n (nzVisibleChange)=\"onOpenChange($event)\"\n (nzAfterOpen)=\"afterOpen.emit()\"\n (nzAfterClose)=\"afterClose.emit()\"\n>\n <ng-container *nzModalContent>\n <div\n class=\"geo-form-modal__content\"\n [class.geo-form-modal__content--body-scroll]=\"bodyScroll\"\n >\n <div class=\"geo-form-modal__header\">\n <h2\n class=\"geo-form-modal__title\"\n [class.geo-form-modal__title--uppercase]=\"titleUppercase\"\n >\n {{ title }}\n </h2>\n @if (closable) {\n <button\n type=\"button\"\n class=\"geo-form-modal__close\"\n aria-label=\"\u0110\u00F3ng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div\n class=\"geo-form-modal__body\"\n [style.--geo-form-modal-body-max-height]=\"bodyScroll ? bodyMaxHeightCss : null\"\n >\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-form-modal__footer\">\n <ng-content select=\"[footerStart]\"></ng-content>\n\n <div class=\"geo-form-modal__footer-actions\">\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n [icon]=\"cancelIcon\"\n [iconPlacement]=\"cancelIconPlacement\"\n (clicked)=\"onCancel()\"\n >\n {{ readonly ? '\u0110\u00F3ng' : cancelText }}\n </geo-button>\n @if (!readonly && secondaryOkText) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onSecondaryOk()\"\n >\n {{ secondaryOkText }}\n </geo-button>\n }\n @if (!readonly) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"confirmLoading ? 'loading' : okIcon\"\n [iconPlacement]=\"okIconPlacement\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onOk()\"\n >\n {{ okText }}\n </geo-button>\n }\n </div>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n", styles: [".geo-form-modal-wrap .ant-modal-header{display:none}.geo-form-modal-wrap .ant-modal{max-width:calc(100vw - 32px)}.geo-form-modal-wrap .ant-modal-content{border-radius:var(--geo-radius);padding:0;overflow:hidden;box-shadow:0 8px 24px #1118271f}.geo-form-modal-wrap .ant-modal-body{padding:0}.geo-form-modal__content{display:flex;flex-direction:column;background:var(--geo-color-neutral-white);max-height:inherit}.geo-form-modal__header{position:relative;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-shrink:0;padding:24px 24px 16px;border-bottom:none}.geo-form-modal__header:after{content:\"\";position:absolute;left:24px;right:24px;bottom:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__title{margin:0;min-width:0;font-family:var(--geo-font-family);font-size:var(--geo-font-size-h4);font-weight:var(--geo-font-weight-bold);line-height:var(--geo-line-height-h4);color:var(--geo-color-neutral-900);letter-spacing:.02em;word-break:break-word}.geo-form-modal__title--uppercase{text-transform:uppercase}.geo-form-modal__close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-500);cursor:pointer;flex-shrink:0;transition:color .15s ease,background-color .15s ease}.geo-form-modal__close .anticon{font-size:14px}.geo-form-modal__close:hover{color:var(--geo-color-neutral-900);background:var(--geo-color-neutral-100)}.geo-form-modal__body{display:flex;flex-direction:column;gap:20px;flex:1 1 auto;min-width:0;min-height:0;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{overflow-x:hidden;overflow-y:auto;max-height:var(--geo-form-modal-body-max-height, 60vh);-webkit-overflow-scrolling:touch}.geo-form-modal__footer{position:relative;display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;flex-shrink:0;padding:16px 24px 24px;border-top:none;background:var(--geo-color-neutral-white)}.geo-form-modal__footer:before{content:\"\";position:absolute;left:24px;right:24px;top:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__footer-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin-left:auto}@media (max-width: 767.98px){.geo-form-modal-wrap .ant-modal{top:0;max-width:calc(100vw - 24px)!important;width:calc(100vw - 24px)!important;margin:12px auto!important;padding-bottom:0}.geo-form-modal-wrap .ant-modal-content{max-height:calc(100dvh - 24px);display:flex;flex-direction:column}.geo-form-modal-wrap .ant-modal-body{flex:1 1 auto;min-height:0;overflow:hidden}.geo-form-modal__content{max-height:calc(100dvh - 24px);min-height:0}.geo-form-modal__header{gap:12px;padding:24px 24px 16px}.geo-form-modal__title{font-size:var(--geo-font-size-subtitle)}.geo-form-modal__body{gap:16px;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{max-height:none;flex:1 1 auto}.geo-form-modal__footer{justify-content:stretch;gap:8px;padding:16px 24px 24px}.geo-form-modal__footer-actions{width:100%;margin-left:0}.geo-form-modal__footer-actions>*{flex:1 1 calc(50% - 4px);min-width:0}.geo-form-modal__footer-actions>*:nth-child(n+3){flex:1 1 100%}.geo-form-modal__footer-actions geo-button{display:block;width:100%}.geo-form-modal__footer-actions .geo-button{width:100%;white-space:normal;height:auto;min-height:40px;padding-block:8px;text-align:center}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NgZorroAntdModule }, { kind: "directive", type: i1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i2.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i3.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: i3.NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "component", type: GeoButtonComponent, selector: "geo-button", inputs: ["appearance", "color", "icon", "iconTheme", "iconPlacement", "iconOnly", "type", "disabled", "tooltip", "tooltipPlacement", "active", "title"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None });
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoFormModalComponent, decorators: [{
90
+ type: Component,
91
+ args: [{ selector: 'geo-form-modal', standalone: true, imports: [CommonModule, NgZorroAntdModule, NzIconModule, GeoButtonComponent], encapsulation: ViewEncapsulation.None, template: "<nz-modal\n [nzVisible]=\"open\"\n [nzTitle]=\"''\"\n [nzFooter]=\"null\"\n [nzClosable]=\"false\"\n [nzMask]=\"mask\"\n [nzMaskClosable]=\"maskClosable\"\n [nzKeyboard]=\"keyboard\"\n [nzCentered]=\"centered\"\n [nzWidth]=\"width\"\n [nzZIndex]=\"zIndex\"\n [nzWrapClassName]=\"resolvedWrapClassName\"\n [nzClassName]=\"resolvedClassName\"\n (nzVisibleChange)=\"onOpenChange($event)\"\n (nzAfterOpen)=\"afterOpen.emit()\"\n (nzAfterClose)=\"afterClose.emit()\"\n>\n <ng-container *nzModalContent>\n <div\n class=\"geo-form-modal__content\"\n [class.geo-form-modal__content--body-scroll]=\"bodyScroll\"\n >\n <div class=\"geo-form-modal__header\">\n <h2\n class=\"geo-form-modal__title\"\n [class.geo-form-modal__title--uppercase]=\"titleUppercase\"\n >\n {{ title }}\n </h2>\n @if (closable) {\n <button\n type=\"button\"\n class=\"geo-form-modal__close\"\n aria-label=\"\u0110\u00F3ng\"\n (click)=\"onCancel()\"\n >\n <span nz-icon nzType=\"close\" nzTheme=\"outline\"></span>\n </button>\n }\n </div>\n\n <div\n class=\"geo-form-modal__body\"\n [style.--geo-form-modal-body-max-height]=\"bodyScroll ? bodyMaxHeightCss : null\"\n >\n <ng-content></ng-content>\n </div>\n\n <div class=\"geo-form-modal__footer\">\n <ng-content select=\"[footerStart]\"></ng-content>\n\n <div class=\"geo-form-modal__footer-actions\">\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n [icon]=\"cancelIcon\"\n [iconPlacement]=\"cancelIconPlacement\"\n (clicked)=\"onCancel()\"\n >\n {{ readonly ? '\u0110\u00F3ng' : cancelText }}\n </geo-button>\n @if (!readonly && secondaryOkText) {\n <geo-button\n appearance=\"secondary\"\n color=\"brand\"\n icon=\"save\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onSecondaryOk()\"\n >\n {{ secondaryOkText }}\n </geo-button>\n }\n @if (!readonly) {\n <geo-button\n appearance=\"primary\"\n color=\"brand\"\n [icon]=\"confirmLoading ? 'loading' : okIcon\"\n [iconPlacement]=\"okIconPlacement\"\n [disabled]=\"okDisabled || confirmLoading\"\n (clicked)=\"onOk()\"\n >\n {{ okText }}\n </geo-button>\n }\n </div>\n </div>\n </div>\n </ng-container>\n</nz-modal>\n", styles: [".geo-form-modal-wrap .ant-modal-header{display:none}.geo-form-modal-wrap .ant-modal{max-width:calc(100vw - 32px)}.geo-form-modal-wrap .ant-modal-content{border-radius:var(--geo-radius);padding:0;overflow:hidden;box-shadow:0 8px 24px #1118271f}.geo-form-modal-wrap .ant-modal-body{padding:0}.geo-form-modal__content{display:flex;flex-direction:column;background:var(--geo-color-neutral-white);max-height:inherit}.geo-form-modal__header{position:relative;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-shrink:0;padding:24px 24px 16px;border-bottom:none}.geo-form-modal__header:after{content:\"\";position:absolute;left:24px;right:24px;bottom:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__title{margin:0;min-width:0;font-family:var(--geo-font-family);font-size:var(--geo-font-size-h4);font-weight:var(--geo-font-weight-bold);line-height:var(--geo-line-height-h4);color:var(--geo-color-neutral-900);letter-spacing:.02em;word-break:break-word}.geo-form-modal__title--uppercase{text-transform:uppercase}.geo-form-modal__close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-500);cursor:pointer;flex-shrink:0;transition:color .15s ease,background-color .15s ease}.geo-form-modal__close .anticon{font-size:14px}.geo-form-modal__close:hover{color:var(--geo-color-neutral-900);background:var(--geo-color-neutral-100)}.geo-form-modal__body{display:flex;flex-direction:column;gap:20px;flex:1 1 auto;min-width:0;min-height:0;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{overflow-x:hidden;overflow-y:auto;max-height:var(--geo-form-modal-body-max-height, 60vh);-webkit-overflow-scrolling:touch}.geo-form-modal__footer{position:relative;display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;flex-shrink:0;padding:16px 24px 24px;border-top:none;background:var(--geo-color-neutral-white)}.geo-form-modal__footer:before{content:\"\";position:absolute;left:24px;right:24px;top:0;height:1px;background:var(--geo-color-primary-default);pointer-events:none}.geo-form-modal__footer-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin-left:auto}@media (max-width: 767.98px){.geo-form-modal-wrap .ant-modal{top:0;max-width:calc(100vw - 24px)!important;width:calc(100vw - 24px)!important;margin:12px auto!important;padding-bottom:0}.geo-form-modal-wrap .ant-modal-content{max-height:calc(100dvh - 24px);display:flex;flex-direction:column}.geo-form-modal-wrap .ant-modal-body{flex:1 1 auto;min-height:0;overflow:hidden}.geo-form-modal__content{max-height:calc(100dvh - 24px);min-height:0}.geo-form-modal__header{gap:12px;padding:24px 24px 16px}.geo-form-modal__title{font-size:var(--geo-font-size-subtitle)}.geo-form-modal__body{gap:16px;padding:24px}.geo-form-modal__content--body-scroll .geo-form-modal__body{max-height:none;flex:1 1 auto}.geo-form-modal__footer{justify-content:stretch;gap:8px;padding:16px 24px 24px}.geo-form-modal__footer-actions{width:100%;margin-left:0}.geo-form-modal__footer-actions>*{flex:1 1 calc(50% - 4px);min-width:0}.geo-form-modal__footer-actions>*:nth-child(n+3){flex:1 1 100%}.geo-form-modal__footer-actions geo-button{display:block;width:100%}.geo-form-modal__footer-actions .geo-button{width:100%;white-space:normal;height:auto;min-height:40px;padding-block:8px;text-align:center}}\n"] }]
92
+ }], propDecorators: { open: [{
93
+ type: Input
94
+ }], title: [{
95
+ type: Input
96
+ }], titleUppercase: [{
97
+ type: Input
98
+ }], okText: [{
99
+ type: Input
100
+ }], cancelText: [{
101
+ type: Input
102
+ }], cancelIcon: [{
103
+ type: Input
104
+ }], cancelIconPlacement: [{
105
+ type: Input
106
+ }], okIcon: [{
107
+ type: Input
108
+ }], okIconPlacement: [{
109
+ type: Input
110
+ }], secondaryOkText: [{
111
+ type: Input
112
+ }], confirmLoading: [{
113
+ type: Input
114
+ }], okDisabled: [{
115
+ type: Input
116
+ }], readonly: [{
117
+ type: Input
118
+ }], width: [{
119
+ type: Input
120
+ }], closable: [{
121
+ type: Input
122
+ }], mask: [{
123
+ type: Input
124
+ }], maskClosable: [{
125
+ type: Input
126
+ }], keyboard: [{
127
+ type: Input
128
+ }], centered: [{
129
+ type: Input
130
+ }], zIndex: [{
131
+ type: Input
132
+ }], className: [{
133
+ type: Input
134
+ }], wrapClassName: [{
135
+ type: Input
136
+ }], bodyScroll: [{
137
+ type: Input
138
+ }], bodyMaxHeight: [{
139
+ type: Input
140
+ }], openChange: [{
141
+ type: Output
142
+ }], ok: [{
143
+ type: Output
144
+ }], secondaryOk: [{
145
+ type: Output
146
+ }], cancel: [{
147
+ type: Output
148
+ }], afterOpen: [{
149
+ type: Output
150
+ }], afterClose: [{
151
+ type: Output
152
+ }] } });
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZvcm0tbW9kYWwvZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZvcm0tbW9kYWwvZ2VvLWZvcm0tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7QUFFeEU7OztHQUdHO0FBU0gsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQywwREFBMEQ7SUFDakQsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNiLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDcEIsb0RBQW9EO0lBQzNDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdEIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsaURBQWlEO0lBQ3hDLFVBQVUsQ0FBVTtJQUNwQixtQkFBbUIsR0FBb0IsT0FBTyxDQUFDO0lBQ3hELCtDQUErQztJQUN0QyxNQUFNLENBQVU7SUFDaEIsZUFBZSxHQUFvQixLQUFLLENBQUM7SUFDbEQsaUZBQWlGO0lBQ3hFLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDOUIs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SUFBSTs4QkFJNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csRUFBRTtzQkFBWCxNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdab3Jyb0FudGRNb2R1bGUgfSBmcm9tICcuLi8uLi9uZy16b3Jyby9uZy16b3Jyby1hbnRkLm1vZHVsZSc7XG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuaW1wb3J0IHsgR2VvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLWJ1dHRvbi9nZW8tYnV0dG9uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogTW9kYWwgZm9ybSBkw7luZyBjaHVuZyDigJQgQVBJIGLDoW0gQW50IERlc2lnbiBNb2RhbCAvIG5nLXpvcnJvIG56LW1vZGFsLlxuICogSGVhZGVyICsgZm9vdGVyIGPhu5EgxJHhu4tuaDsgYm9keSBjw7MgdGjhu4Mgc2Nyb2xsIChgYm9keVNjcm9sbGApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tZm9ybS1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE5nWm9ycm9BbnRkTW9kdWxlLCBOekljb25Nb2R1bGUsIEdlb0J1dHRvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tZm9ybS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tZm9ybS1tb2RhbC5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEdlb0Zvcm1Nb2RhbENvbXBvbmVudCB7XG4gIC8qKiBUxrDGoW5nIMSRxrDGoW5nIGBvcGVuYCAoYW50ZCkgLyBgbnpWaXNpYmxlYCAobmctem9ycm8pLiAqL1xuICBASW5wdXQoKSBvcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRpdGxlID0gJyc7XG4gIC8qKiBUaXRsZSBjaOG7ryBpbiBob2EuIERlZmF1bHQgYHRydWVgIHRoZW8gZGVzaWduLiAqL1xuICBASW5wdXQoKSB0aXRsZVVwcGVyY2FzZSA9IHRydWU7XG4gIEBJbnB1dCgpIG9rVGV4dCA9ICdMxrB1JztcbiAgQElucHV0KCkgY2FuY2VsVGV4dCA9ICdI4buneSc7XG4gIC8qKiBJY29uIG7DunQgY2FuY2VsICh2ZC4gYGxlZnRgIGNobyBRdWF5IGzhuqFpKS4gKi9cbiAgQElucHV0KCkgY2FuY2VsSWNvbj86IHN0cmluZztcbiAgQElucHV0KCkgY2FuY2VsSWNvblBsYWNlbWVudDogJ3N0YXJ0JyB8ICdlbmQnID0gJ3N0YXJ0JztcbiAgLyoqIEljb24gbsO6dCBPSyAodmQuIGByaWdodGAgY2hvIFRp4bq/cCB0aGVvKS4gKi9cbiAgQElucHV0KCkgb2tJY29uPzogc3RyaW5nO1xuICBASW5wdXQoKSBva0ljb25QbGFjZW1lbnQ6ICdzdGFydCcgfCAnZW5kJyA9ICdlbmQnO1xuICAvKiogTsO6dCBwaOG7pSAodmQuIEzGsHUgdsOgIGto4bufaSB04bqhbyBs4bqhaSkuIENo4buJIGhp4buHbiBraGkgY8OzIHRleHQgdsOgIGtow7RuZyByZWFkb25seS4gKi9cbiAgQElucHV0KCkgc2Vjb25kYXJ5T2tUZXh0ID0gJyc7XG4gIC8qKiBMb2FkaW5nIHRyw6puIG7DunQgT0sg4oCUIGdp4buRbmcgYW50ZCBgY29uZmlybUxvYWRpbmdgIC8gbnogYG56T2tMb2FkaW5nYC4gKi9cbiAgQElucHV0KCkgY29uZmlybUxvYWRpbmcgPSBmYWxzZTtcbiAgLyoqIERpc2FibGUgbsO6dCBPSyDigJQgZ2nhu5FuZyBhbnRkIGBva0J1dHRvblByb3BzLmRpc2FibGVkYCAvIG56IGBuek9rRGlzYWJsZWRgLiAqL1xuICBASW5wdXQoKSBva0Rpc2FibGVkID0gZmFsc2U7XG4gIC8qKiDhuqhuIG7DunQgT0sgKHhlbSBjaGkgdGnhur90KS4gKi9cbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciB8IHN0cmluZyA9IDcyMDtcbiAgQElucHV0KCkgY2xvc2FibGUgPSB0cnVlO1xuICBASW5wdXQoKSBtYXNrID0gdHJ1ZTtcbiAgQElucHV0KCkgbWFza0Nsb3NhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGtleWJvYXJkID0gdHJ1ZTtcbiAgQElucHV0KCkgY2VudGVyZWQgPSB0cnVlO1xuICBASW5wdXQoKSB6SW5kZXggPSAxMDAwO1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgd3JhcENsYXNzTmFtZSA9ICcnO1xuICAvKiogQm9keSBjdeG7mW4sIGhlYWRlci9mb290ZXIgY+G7kSDEkeG7i25oLiAqL1xuICBASW5wdXQoKSBib2R5U2Nyb2xsID0gdHJ1ZTtcbiAgLyoqIE1heC1oZWlnaHQgY+G7p2EgdsO5bmcgYm9keSBraGkgYGJvZHlTY3JvbGxgICh2ZCBgJzYwdmgnYCwgYDQwMGApLiAqL1xuICBASW5wdXQoKSBib2R5TWF4SGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIgPSAnNjB2aCc7XG5cbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlY29uZGFyeU9rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWZ0ZXJPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWZ0ZXJDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBnZXQgcmVzb2x2ZWRXcmFwQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFsnZ2VvLWZvcm0tbW9kYWwtd3JhcCcsIHRoaXMud3JhcENsYXNzTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldCByZXNvbHZlZENsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBbJ2dlby1mb3JtLW1vZGFsJywgdGhpcy5jbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG4gIH1cblxuICBnZXQgYm9keU1heEhlaWdodENzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5ib2R5TWF4SGVpZ2h0ID09PSAnbnVtYmVyJ1xuICAgICAgPyBgJHt0aGlzLmJvZHlNYXhIZWlnaHR9cHhgXG4gICAgICA6IHRoaXMuYm9keU1heEhlaWdodDtcbiAgfVxuXG4gIG9uT3BlbkNoYW5nZShvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlbiA9PT0gb3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvbk9rKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5va0Rpc2FibGVkICYmICF0aGlzLmNvbmZpcm1Mb2FkaW5nKSB7XG4gICAgICB0aGlzLm9rLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvblNlY29uZGFyeU9rKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5va0Rpc2FibGVkICYmICF0aGlzLmNvbmZpcm1Mb2FkaW5nKSB7XG4gICAgICB0aGlzLnNlY29uZGFyeU9rLmVtaXQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuei1tb2RhbFxuICBbbnpWaXNpYmxlXT1cIm9wZW5cIlxuICBbbnpUaXRsZV09XCInJ1wiXG4gIFtuekZvb3Rlcl09XCJudWxsXCJcbiAgW256Q2xvc2FibGVdPVwiZmFsc2VcIlxuICBbbnpNYXNrXT1cIm1hc2tcIlxuICBbbnpNYXNrQ2xvc2FibGVdPVwibWFza0Nsb3NhYmxlXCJcbiAgW256S2V5Ym9hcmRdPVwia2V5Ym9hcmRcIlxuICBbbnpDZW50ZXJlZF09XCJjZW50ZXJlZFwiXG4gIFtueldpZHRoXT1cIndpZHRoXCJcbiAgW256WkluZGV4XT1cInpJbmRleFwiXG4gIFtueldyYXBDbGFzc05hbWVdPVwicmVzb2x2ZWRXcmFwQ2xhc3NOYW1lXCJcbiAgW256Q2xhc3NOYW1lXT1cInJlc29sdmVkQ2xhc3NOYW1lXCJcbiAgKG56VmlzaWJsZUNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiXG4gIChuekFmdGVyT3Blbik9XCJhZnRlck9wZW4uZW1pdCgpXCJcbiAgKG56QWZ0ZXJDbG9zZSk9XCJhZnRlckNsb3NlLmVtaXQoKVwiXG4+XG4gIDxuZy1jb250YWluZXIgKm56TW9kYWxDb250ZW50PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2NvbnRlbnRcIlxuICAgICAgW2NsYXNzLmdlby1mb3JtLW1vZGFsX19jb250ZW50LS1ib2R5LXNjcm9sbF09XCJib2R5U2Nyb2xsXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2hlYWRlclwiPlxuICAgICAgICA8aDJcbiAgICAgICAgICBjbGFzcz1cImdlby1mb3JtLW1vZGFsX190aXRsZVwiXG4gICAgICAgICAgW2NsYXNzLmdlby1mb3JtLW1vZGFsX190aXRsZS0tdXBwZXJjYXNlXT1cInRpdGxlVXBwZXJjYXNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRpdGxlIH19XG4gICAgICAgIDwvaDI+XG4gICAgICAgIEBpZiAoY2xvc2FibGUpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2Nsb3NlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCLEkMOzbmdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwiY2xvc2VcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJnZW8tZm9ybS1tb2RhbF9fYm9keVwiXG4gICAgICAgIFtzdHlsZS4tLWdlby1mb3JtLW1vZGFsLWJvZHktbWF4LWhlaWdodF09XCJib2R5U2Nyb2xsID8gYm9keU1heEhlaWdodENzcyA6IG51bGxcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImdlby1mb3JtLW1vZGFsX19mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3RlclN0YXJ0XVwiPjwvbmctY29udGVudD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvLWZvcm0tbW9kYWxfX2Zvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgPGdlby1idXR0b25cbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJicmFuZFwiXG4gICAgICAgICAgICBbaWNvbl09XCJjYW5jZWxJY29uXCJcbiAgICAgICAgICAgIFtpY29uUGxhY2VtZW50XT1cImNhbmNlbEljb25QbGFjZW1lbnRcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgcmVhZG9ubHkgPyAnxJDDs25nJyA6IGNhbmNlbFRleHQgfX1cbiAgICAgICAgICA8L2dlby1idXR0b24+XG4gICAgICAgICAgQGlmICghcmVhZG9ubHkgJiYgc2Vjb25kYXJ5T2tUZXh0KSB7XG4gICAgICAgICAgICA8Z2VvLWJ1dHRvblxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJicmFuZFwiXG4gICAgICAgICAgICAgIGljb249XCJzYXZlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9rRGlzYWJsZWQgfHwgY29uZmlybUxvYWRpbmdcIlxuICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvblNlY29uZGFyeU9rKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWNvbmRhcnlPa1RleHQgfX1cbiAgICAgICAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICghcmVhZG9ubHkpIHtcbiAgICAgICAgICAgIDxnZW8tYnV0dG9uXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJicmFuZFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImNvbmZpcm1Mb2FkaW5nID8gJ2xvYWRpbmcnIDogb2tJY29uXCJcbiAgICAgICAgICAgICAgW2ljb25QbGFjZW1lbnRdPVwib2tJY29uUGxhY2VtZW50XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9rRGlzYWJsZWQgfHwgY29uZmlybUxvYWRpbmdcIlxuICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbk9rKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBva1RleHQgfX1cbiAgICAgICAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uei1tb2RhbD5cbiJdfQ==
@@ -0,0 +1,51 @@
1
+ import { Component, Input, ViewEncapsulation } from '@angular/core';
2
+ import { NzIconModule } from 'ng-zorro-antd/icon';
3
+ import { GEO_ICON_SIZE_MAP } from './geo-icon.types';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "ng-zorro-antd/icon";
6
+ /**
7
+ * Icon wrapper — domain dùng `geo-icon`, không dùng `nz-icon` trực tiếp.
8
+ * Wrap Ant Design icons (đã register qua `NZ_ICONS` ở app/Storybook).
9
+ */
10
+ export class GeoIconComponent {
11
+ /** Tên icon Ant Design (vd. `close`, `search`, `appstore`). */
12
+ type;
13
+ theme = 'outline';
14
+ spin = false;
15
+ /** xs | sm | md | lg | xl | number(px) | CSS size string */
16
+ size = 'md';
17
+ /** CSS color — ưu tiên design token, vd. `var(--geo-color-primary-default)` */
18
+ color;
19
+ get resolvedSize() {
20
+ if (typeof this.size === 'number') {
21
+ return `${this.size}px`;
22
+ }
23
+ if (this.size in GEO_ICON_SIZE_MAP) {
24
+ return GEO_ICON_SIZE_MAP[this.size];
25
+ }
26
+ return String(this.size);
27
+ }
28
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
29
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GeoIconComponent, isStandalone: true, selector: "geo-icon", inputs: { type: "type", theme: "theme", spin: "spin", size: "size", color: "color" }, host: { properties: { "style.--geo-icon-size": "resolvedSize", "style.color": "color || null", "class.geo-icon-host--spin": "spin" }, classAttribute: "geo-icon-host" }, ngImport: i0, template: "<span\n class=\"geo-icon\"\n nz-icon\n [nzType]=\"type\"\n [nzTheme]=\"theme\"\n [nzSpin]=\"spin\"\n></span>\n", styles: [".geo-icon-host{display:inline-flex;align-items:center;justify-content:center;line-height:1;color:inherit;vertical-align:middle}.geo-icon-host--spin{color:var(--geo-color-primary-default)}.geo-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:var(--geo-icon-size, 16px)}.geo-icon .anticon{font-size:inherit}\n"], dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], encapsulation: i0.ViewEncapsulation.None });
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoIconComponent, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: 'geo-icon', standalone: true, imports: [NzIconModule], encapsulation: ViewEncapsulation.None, host: {
34
+ class: 'geo-icon-host',
35
+ '[style.--geo-icon-size]': 'resolvedSize',
36
+ '[style.color]': 'color || null',
37
+ '[class.geo-icon-host--spin]': 'spin',
38
+ }, template: "<span\n class=\"geo-icon\"\n nz-icon\n [nzType]=\"type\"\n [nzTheme]=\"theme\"\n [nzSpin]=\"spin\"\n></span>\n", styles: [".geo-icon-host{display:inline-flex;align-items:center;justify-content:center;line-height:1;color:inherit;vertical-align:middle}.geo-icon-host--spin{color:var(--geo-color-primary-default)}.geo-icon{display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:var(--geo-icon-size, 16px)}.geo-icon .anticon{font-size:inherit}\n"] }]
39
+ }], propDecorators: { type: [{
40
+ type: Input,
41
+ args: [{ required: true }]
42
+ }], theme: [{
43
+ type: Input
44
+ }], spin: [{
45
+ type: Input
46
+ }], size: [{
47
+ type: Input
48
+ }], color: [{
49
+ type: Input
50
+ }] } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWljb24vZ2VvLWljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWljb24vZ2VvLWljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWhGOzs7R0FHRztBQWVILE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsK0RBQStEO0lBQ3BDLElBQUksQ0FBVTtJQUNoQyxLQUFLLEdBQWlCLFNBQVMsQ0FBQztJQUNoQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLDREQUE0RDtJQUNuRCxJQUFJLEdBQWdCLElBQUksQ0FBQztJQUNsQywrRUFBK0U7SUFDdEUsS0FBSyxDQUFVO0lBRXhCLElBQUksWUFBWTtRQUNkLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQXNDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7d0dBbEJVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLG1VQ3RCN0IscUhBT0Esc1pESVksWUFBWTs7NEZBV1gsZ0JBQWdCO2tCQWQ1QixTQUFTOytCQUNFLFVBQVUsY0FDUixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsaUJBR1IsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsZUFBZTt3QkFDdEIseUJBQXlCLEVBQUUsY0FBYzt3QkFDekMsZUFBZSxFQUFFLGVBQWU7d0JBQ2hDLDZCQUE2QixFQUFFLE1BQU07cUJBQ3RDOzhCQUkwQixJQUFJO3NCQUE5QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE56SWNvbk1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaWNvbic7XG5pbXBvcnQgeyBHRU9fSUNPTl9TSVpFX01BUCwgR2VvSWNvblNpemUsIEdlb0ljb25UaGVtZSB9IGZyb20gJy4vZ2VvLWljb24udHlwZXMnO1xuXG4vKipcbiAqIEljb24gd3JhcHBlciDigJQgZG9tYWluIGTDuW5nIGBnZW8taWNvbmAsIGtow7RuZyBkw7luZyBgbnotaWNvbmAgdHLhu7FjIHRp4bq/cC5cbiAqIFdyYXAgQW50IERlc2lnbiBpY29ucyAoxJHDoyByZWdpc3RlciBxdWEgYE5aX0lDT05TYCDhu58gYXBwL1N0b3J5Ym9vaykuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1pY29uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW056SWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8taWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8taWNvbi5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1pY29uLWhvc3QnLFxuICAgICdbc3R5bGUuLS1nZW8taWNvbi1zaXplXSc6ICdyZXNvbHZlZFNpemUnLFxuICAgICdbc3R5bGUuY29sb3JdJzogJ2NvbG9yIHx8IG51bGwnLFxuICAgICdbY2xhc3MuZ2VvLWljb24taG9zdC0tc3Bpbl0nOiAnc3BpbicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0ljb25Db21wb25lbnQge1xuICAvKiogVMOqbiBpY29uIEFudCBEZXNpZ24gKHZkLiBgY2xvc2VgLCBgc2VhcmNoYCwgYGFwcHN0b3JlYCkuICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHR5cGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRoZW1lOiBHZW9JY29uVGhlbWUgPSAnb3V0bGluZSc7XG4gIEBJbnB1dCgpIHNwaW4gPSBmYWxzZTtcbiAgLyoqIHhzIHwgc20gfCBtZCB8IGxnIHwgeGwgfCBudW1iZXIocHgpIHwgQ1NTIHNpemUgc3RyaW5nICovXG4gIEBJbnB1dCgpIHNpemU6IEdlb0ljb25TaXplID0gJ21kJztcbiAgLyoqIENTUyBjb2xvciDigJQgxrB1IHRpw6puIGRlc2lnbiB0b2tlbiwgdmQuIGB2YXIoLS1nZW8tY29sb3ItcHJpbWFyeS1kZWZhdWx0KWAgKi9cbiAgQElucHV0KCkgY29sb3I/OiBzdHJpbmc7XG5cbiAgZ2V0IHJlc29sdmVkU2l6ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdGhpcy5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGAke3RoaXMuc2l6ZX1weGA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNpemUgaW4gR0VPX0lDT05fU0laRV9NQVApIHtcbiAgICAgIHJldHVybiBHRU9fSUNPTl9TSVpFX01BUFt0aGlzLnNpemUgYXMga2V5b2YgdHlwZW9mIEdFT19JQ09OX1NJWkVfTUFQXTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnNpemUpO1xuICB9XG59XG4iLCI8c3BhblxuICBjbGFzcz1cImdlby1pY29uXCJcbiAgbnotaWNvblxuICBbbnpUeXBlXT1cInR5cGVcIlxuICBbbnpUaGVtZV09XCJ0aGVtZVwiXG4gIFtuelNwaW5dPVwic3BpblwiXG4+PC9zcGFuPlxuIl19
@@ -0,0 +1,8 @@
1
+ export const GEO_ICON_SIZE_MAP = {
2
+ xs: '12px',
3
+ sm: '14px',
4
+ md: '16px',
5
+ lg: '20px',
6
+ xl: '24px',
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWljb24udHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8taWNvbi9nZW8taWNvbi50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBcUQ7SUFDakYsRUFBRSxFQUFFLE1BQU07SUFDVixFQUFFLEVBQUUsTUFBTTtJQUNWLEVBQUUsRUFBRSxNQUFNO0lBQ1YsRUFBRSxFQUFFLE1BQU07SUFDVixFQUFFLEVBQUUsTUFBTTtDQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBHZW9JY29uVGhlbWUgPSAnb3V0bGluZScgfCAnZmlsbCcgfCAndHdvdG9uZSc7XG5cbmV4cG9ydCB0eXBlIEdlb0ljb25TaXplID0gJ3hzJyB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcgfCBudW1iZXIgfCBzdHJpbmc7XG5cbmV4cG9ydCBjb25zdCBHRU9fSUNPTl9TSVpFX01BUDogUmVjb3JkPCd4cycgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnLCBzdHJpbmc+ID0ge1xuICB4czogJzEycHgnLFxuICBzbTogJzE0cHgnLFxuICBtZDogJzE2cHgnLFxuICBsZzogJzIwcHgnLFxuICB4bDogJzI0cHgnLFxufTtcbiJdfQ==
@@ -0,0 +1,118 @@
1
+ import { Component, EventEmitter, forwardRef, Input, Output, ViewEncapsulation, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { NzIconModule } from 'ng-zorro-antd/icon';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "ng-zorro-antd/icon";
8
+ let uiInputErrorId = 0;
9
+ export class GeoInputComponent {
10
+ label = '';
11
+ placeholder = '';
12
+ type = 'text';
13
+ disabled = false;
14
+ readonly = false;
15
+ required = false;
16
+ error = false;
17
+ errorMessage = '';
18
+ maxlength;
19
+ prefixIcon;
20
+ suffixIcon;
21
+ allowClear = false;
22
+ block = false;
23
+ width;
24
+ valueChange = new EventEmitter();
25
+ enterPressed = new EventEmitter();
26
+ errorMessageId = `geo-input-error-${++uiInputErrorId}`;
27
+ value = '';
28
+ onChange = () => undefined;
29
+ onTouched = () => undefined;
30
+ get hostWidth() {
31
+ if (this.block || this.width == null) {
32
+ return null;
33
+ }
34
+ return typeof this.width === 'number' ? `${this.width}px` : this.width;
35
+ }
36
+ get showClear() {
37
+ return this.allowClear && !this.disabled && !this.readonly && !!this.value;
38
+ }
39
+ onInput(value) {
40
+ this.value = value;
41
+ this.onChange(value);
42
+ this.valueChange.emit(value);
43
+ }
44
+ onBlur() {
45
+ this.onTouched();
46
+ }
47
+ onClear() {
48
+ this.onInput('');
49
+ }
50
+ writeValue(value) {
51
+ this.value = value == null ? '' : String(value);
52
+ }
53
+ registerOnChange(fn) {
54
+ this.onChange = fn;
55
+ }
56
+ registerOnTouched(fn) {
57
+ this.onTouched = fn;
58
+ }
59
+ setDisabledState(isDisabled) {
60
+ this.disabled = isDisabled;
61
+ }
62
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoInputComponent, isStandalone: true, selector: "geo-input", inputs: { label: "label", placeholder: "placeholder", type: "type", disabled: "disabled", readonly: "readonly", required: "required", error: "error", errorMessage: "errorMessage", maxlength: "maxlength", prefixIcon: "prefixIcon", suffixIcon: "suffixIcon", allowClear: "allowClear", block: "block", width: "width" }, outputs: { valueChange: "valueChange", enterPressed: "enterPressed" }, host: { properties: { "class.geo-input-host--block": "block", "class.geo-input-host--error": "error", "style.width": "hostWidth" }, classAttribute: "geo-input-host" }, providers: [
64
+ {
65
+ provide: NG_VALUE_ACCESSOR,
66
+ useExisting: forwardRef(() => GeoInputComponent),
67
+ multi: true,
68
+ },
69
+ ], ngImport: i0, template: "@if (label) {\n <div class=\"geo-input__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-input__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-input__control\"\n [class.geo-input__control--disabled]=\"disabled\"\n [class.geo-input__control--error]=\"error\"\n>\n @if (prefixIcon) {\n <span class=\"geo-input__icon\" nz-icon [nzType]=\"prefixIcon\" nzTheme=\"outline\"></span>\n }\n\n <input\n class=\"geo-input__field\"\n [type]=\"type\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxlength ?? null\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (keyup.enter)=\"enterPressed.emit()\"\n />\n\n @if (showClear) {\n <button type=\"button\" class=\"geo-input__clear\" aria-label=\"X\u00F3a n\u1ED9i dung\" (click)=\"onClear()\">\n <span nz-icon nzType=\"close-circle\" nzTheme=\"fill\"></span>\n </button>\n }\n\n @if (suffixIcon) {\n <span class=\"geo-input__icon\" nz-icon [nzType]=\"suffixIcon\" nzTheme=\"outline\"></span>\n }\n</div>\n\n@if (error && errorMessage) {\n <p class=\"geo-input__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n", styles: [".geo-input-host{display:inline-flex;flex-direction:column;gap:8px;width:413px;max-width:100%;vertical-align:top}geo-input.geo-input-host.geo-input-host--block,.geo-input-host.geo-input-host--block{display:flex;width:100%;max-width:none}.geo-input__label{display:inline-flex;align-items:flex-start;gap:4px;font-size:14px;line-height:normal;color:var(--geo-color-neutral-900)}.geo-input__required{color:var(--geo-color-error-default)}.geo-input__control{display:flex;align-items:center;gap:10px;min-height:40px;height:40px;padding:8px;border:1px solid var(--geo-color-neutral-300);border-radius:var(--geo-radius);background:transparent;box-sizing:border-box;transition:border-color .15s ease,box-shadow .15s ease}.geo-input__control:hover:not(.geo-input__control--disabled){border-color:var(--geo-color-primary-default)}.geo-input__control:focus-within:not(.geo-input__control--disabled){border-color:var(--geo-color-primary-default);box-shadow:0 0 0 2px color-mix(in srgb,var(--geo-color-primary-default) 12%,transparent)}.geo-input__control--error{border-color:var(--geo-color-error-default)!important}.geo-input__control--error:focus-within{box-shadow:0 0 0 2px color-mix(in srgb,var(--geo-color-error-default) 12%,transparent)!important}.geo-input__control--disabled{background:var(--geo-color-neutral-100);border-color:var(--geo-color-neutral-300)}.geo-input__field{flex:1 1 auto;min-width:0;height:24px;border:none;outline:none;background:transparent;font-size:14px;line-height:24px;color:var(--geo-color-neutral-900);font-family:inherit}.geo-input__field::placeholder{color:var(--geo-color-neutral-500)}.geo-input__field:disabled{color:var(--geo-color-neutral-disabled-text);cursor:not-allowed}.geo-input__icon{display:inline-flex;flex-shrink:0;font-size:16px;color:var(--geo-color-neutral-500)}.geo-input__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;border:none;background:transparent;color:var(--geo-color-neutral-400);font-size:14px;cursor:pointer}.geo-input__clear:hover{color:var(--geo-color-neutral-500)}.geo-input__error{margin:0;font-size:14px;line-height:normal;color:var(--geo-color-error-default)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i2.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], encapsulation: i0.ViewEncapsulation.None });
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoInputComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'geo-input', standalone: true, imports: [CommonModule, FormsModule, NzIconModule], encapsulation: ViewEncapsulation.None, host: {
74
+ class: 'geo-input-host',
75
+ '[class.geo-input-host--block]': 'block',
76
+ '[class.geo-input-host--error]': 'error',
77
+ '[style.width]': 'hostWidth',
78
+ }, providers: [
79
+ {
80
+ provide: NG_VALUE_ACCESSOR,
81
+ useExisting: forwardRef(() => GeoInputComponent),
82
+ multi: true,
83
+ },
84
+ ], template: "@if (label) {\n <div class=\"geo-input__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-input__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-input__control\"\n [class.geo-input__control--disabled]=\"disabled\"\n [class.geo-input__control--error]=\"error\"\n>\n @if (prefixIcon) {\n <span class=\"geo-input__icon\" nz-icon [nzType]=\"prefixIcon\" nzTheme=\"outline\"></span>\n }\n\n <input\n class=\"geo-input__field\"\n [type]=\"type\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxlength ?? null\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n [ngModel]=\"value\"\n (ngModelChange)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (keyup.enter)=\"enterPressed.emit()\"\n />\n\n @if (showClear) {\n <button type=\"button\" class=\"geo-input__clear\" aria-label=\"X\u00F3a n\u1ED9i dung\" (click)=\"onClear()\">\n <span nz-icon nzType=\"close-circle\" nzTheme=\"fill\"></span>\n </button>\n }\n\n @if (suffixIcon) {\n <span class=\"geo-input__icon\" nz-icon [nzType]=\"suffixIcon\" nzTheme=\"outline\"></span>\n }\n</div>\n\n@if (error && errorMessage) {\n <p class=\"geo-input__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage }}</p>\n}\n", styles: [".geo-input-host{display:inline-flex;flex-direction:column;gap:8px;width:413px;max-width:100%;vertical-align:top}geo-input.geo-input-host.geo-input-host--block,.geo-input-host.geo-input-host--block{display:flex;width:100%;max-width:none}.geo-input__label{display:inline-flex;align-items:flex-start;gap:4px;font-size:14px;line-height:normal;color:var(--geo-color-neutral-900)}.geo-input__required{color:var(--geo-color-error-default)}.geo-input__control{display:flex;align-items:center;gap:10px;min-height:40px;height:40px;padding:8px;border:1px solid var(--geo-color-neutral-300);border-radius:var(--geo-radius);background:transparent;box-sizing:border-box;transition:border-color .15s ease,box-shadow .15s ease}.geo-input__control:hover:not(.geo-input__control--disabled){border-color:var(--geo-color-primary-default)}.geo-input__control:focus-within:not(.geo-input__control--disabled){border-color:var(--geo-color-primary-default);box-shadow:0 0 0 2px color-mix(in srgb,var(--geo-color-primary-default) 12%,transparent)}.geo-input__control--error{border-color:var(--geo-color-error-default)!important}.geo-input__control--error:focus-within{box-shadow:0 0 0 2px color-mix(in srgb,var(--geo-color-error-default) 12%,transparent)!important}.geo-input__control--disabled{background:var(--geo-color-neutral-100);border-color:var(--geo-color-neutral-300)}.geo-input__field{flex:1 1 auto;min-width:0;height:24px;border:none;outline:none;background:transparent;font-size:14px;line-height:24px;color:var(--geo-color-neutral-900);font-family:inherit}.geo-input__field::placeholder{color:var(--geo-color-neutral-500)}.geo-input__field:disabled{color:var(--geo-color-neutral-disabled-text);cursor:not-allowed}.geo-input__icon{display:inline-flex;flex-shrink:0;font-size:16px;color:var(--geo-color-neutral-500)}.geo-input__clear{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;border:none;background:transparent;color:var(--geo-color-neutral-400);font-size:14px;cursor:pointer}.geo-input__clear:hover{color:var(--geo-color-neutral-500)}.geo-input__error{margin:0;font-size:14px;line-height:normal;color:var(--geo-color-error-default)}\n"] }]
85
+ }], propDecorators: { label: [{
86
+ type: Input
87
+ }], placeholder: [{
88
+ type: Input
89
+ }], type: [{
90
+ type: Input
91
+ }], disabled: [{
92
+ type: Input
93
+ }], readonly: [{
94
+ type: Input
95
+ }], required: [{
96
+ type: Input
97
+ }], error: [{
98
+ type: Input
99
+ }], errorMessage: [{
100
+ type: Input
101
+ }], maxlength: [{
102
+ type: Input
103
+ }], prefixIcon: [{
104
+ type: Input
105
+ }], suffixIcon: [{
106
+ type: Input
107
+ }], allowClear: [{
108
+ type: Input
109
+ }], block: [{
110
+ type: Input
111
+ }], width: [{
112
+ type: Input
113
+ }], valueChange: [{
114
+ type: Output
115
+ }], enterPressed: [{
116
+ type: Output
117
+ }] } });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1pbnB1dC9nZW8taW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWlucHV0L2dlby1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBRWxELElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQXlCdkIsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLEdBQWlCLE1BQU0sQ0FBQztJQUM1QixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUNsQixTQUFTLENBQVU7SUFDbkIsVUFBVSxDQUFVO0lBQ3BCLFVBQVUsQ0FBVTtJQUNwQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxLQUFLLENBQW1CO0lBRXZCLFdBQVcsR0FBRyxJQUFJ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LFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tICduZy16b3Jyby1hbnRkL2ljb24nO1xuXG5sZXQgdWlJbnB1dEVycm9ySWQgPSAwO1xuXG5leHBvcnQgdHlwZSBHZW9JbnB1dFR5cGUgPSAndGV4dCcgfCAnbnVtYmVyJyB8ICdwYXNzd29yZCcgfCAnZW1haWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8taW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTnpJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8taW5wdXQuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdnZW8taW5wdXQtaG9zdCcsXG4gICAgJ1tjbGFzcy5nZW8taW5wdXQtaG9zdC0tYmxvY2tdJzogJ2Jsb2NrJyxcbiAgICAnW2NsYXNzLmdlby1pbnB1dC1ob3N0LS1lcnJvcl0nOiAnZXJyb3InLFxuICAgICdbc3R5bGUud2lkdGhdJzogJ2hvc3RXaWR0aCcsXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR2VvSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gIEBJbnB1dCgpIHR5cGU6IEdlb0lucHV0VHlwZSA9ICd0ZXh0JztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgZXJyb3IgPSBmYWxzZTtcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlID0gJyc7XG4gIEBJbnB1dCgpIG1heGxlbmd0aD86IG51bWJlcjtcbiAgQElucHV0KCkgcHJlZml4SWNvbj86IHN0cmluZztcbiAgQElucHV0KCkgc3VmZml4SWNvbj86IHN0cmluZztcbiAgQElucHV0KCkgYWxsb3dDbGVhciA9IGZhbHNlO1xuICBASW5wdXQoKSBibG9jayA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aD86IG51bWJlciB8IHN0cmluZztcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGVudGVyUHJlc3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICByZWFkb25seSBlcnJvck1lc3NhZ2VJZCA9IGBnZW8taW5wdXQtZXJyb3ItJHsrK3VpSW5wdXRFcnJvcklkfWA7XG5cbiAgdmFsdWUgPSAnJztcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbiAgZ2V0IGhvc3RXaWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5ibG9jayB8fCB0aGlzLndpZHRoID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2YgdGhpcy53aWR0aCA9PT0gJ251bWJlcicgPyBgJHt0aGlzLndpZHRofXB4YCA6IHRoaXMud2lkdGg7XG4gIH1cblxuICBnZXQgc2hvd0NsZWFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93Q2xlYXIgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkgJiYgISF0aGlzLnZhbHVlO1xuICB9XG5cbiAgb25JbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIG9uQ2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5vbklucHV0KCcnKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbn1cbiIsIkBpZiAobGFiZWwpIHtcbiAgPGRpdiBjbGFzcz1cImdlby1pbnB1dF9fbGFiZWxcIj5cbiAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICA8c3BhbiBjbGFzcz1cImdlby1pbnB1dF9fcmVxdWlyZWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPlxuICAgIH1cbiAgPC9kaXY+XG59XG5cbjxkaXZcbiAgY2xhc3M9XCJnZW8taW5wdXRfX2NvbnRyb2xcIlxuICBbY2xhc3MuZ2VvLWlucHV0X19jb250cm9sLS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtjbGFzcy5nZW8taW5wdXRfX2NvbnRyb2wtLWVycm9yXT1cImVycm9yXCJcbj5cbiAgQGlmIChwcmVmaXhJY29uKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJnZW8taW5wdXRfX2ljb25cIiBuei1pY29uIFtuelR5cGVdPVwicHJlZml4SWNvblwiIG56VGhlbWU9XCJvdXRsaW5lXCI+PC9zcGFuPlxuICB9XG5cbiAgPGlucHV0XG4gICAgY2xhc3M9XCJnZW8taW5wdXRfX2ZpZWxkXCJcbiAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbYXR0ci5tYXhsZW5ndGhdPVwibWF4bGVuZ3RoID8/IG51bGxcIlxuICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJlcnJvciA/ICd0cnVlJyA6IG51bGxcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlID8gZXJyb3JNZXNzYWdlSWQgOiBudWxsXCJcbiAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgKGtleXVwLmVudGVyKT1cImVudGVyUHJlc3NlZC5lbWl0KClcIlxuICAvPlxuXG4gIEBpZiAoc2hvd0NsZWFyKSB7XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJnZW8taW5wdXRfX2NsZWFyXCIgYXJpYS1sYWJlbD1cIljDs2EgbuG7mWkgZHVuZ1wiIChjbGljayk9XCJvbkNsZWFyKClcIj5cbiAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwiY2xvc2UtY2lyY2xlXCIgbnpUaGVtZT1cImZpbGxcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIH1cblxuICBAaWYgKHN1ZmZpeEljb24pIHtcbiAgICA8c3BhbiBjbGFzcz1cImdlby1pbnB1dF9faWNvblwiIG56LWljb24gW256VHlwZV09XCJzdWZmaXhJY29uXCIgbnpUaGVtZT1cIm91dGxpbmVcIj48L3NwYW4+XG4gIH1cbjwvZGl2PlxuXG5AaWYgKGVycm9yICYmIGVycm9yTWVzc2FnZSkge1xuICA8cCBjbGFzcz1cImdlby1pbnB1dF9fZXJyb3JcIiBbaWRdPVwiZXJyb3JNZXNzYWdlSWRcIiByb2xlPVwiYWxlcnRcIj57eyBlcnJvck1lc3NhZ2UgfX08L3A+XG59XG4iXX0=
@@ -0,0 +1,51 @@
1
+ import { Component, Input, ViewEncapsulation } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { GeoTypographyComponent } from '../geo-typography/geo-typography.component';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Page title GEO — chữ in hoa đậm + gạch chân ngắn màu primary (theo design).
7
+ */
8
+ export class GeoPageTitleComponent {
9
+ /** Nội dung tiêu đề. */
10
+ title = '';
11
+ /** Tự chuyển uppercase. Default `true`. */
12
+ uppercase = true;
13
+ /** Chiều rộng gạch chân (px hoặc CSS size). Default `56px`. */
14
+ accentWidth = 56;
15
+ /** Độ dày gạch chân. Default `4px`. */
16
+ accentHeight = 4;
17
+ /** Heading level → geo-typography variant. */
18
+ level = 3;
19
+ get typographyVariant() {
20
+ return `h${this.level}`;
21
+ }
22
+ get accentWidthCss() {
23
+ return typeof this.accentWidth === 'number'
24
+ ? `${this.accentWidth}px`
25
+ : this.accentWidth;
26
+ }
27
+ get accentHeightCss() {
28
+ return typeof this.accentHeight === 'number'
29
+ ? `${this.accentHeight}px`
30
+ : this.accentHeight;
31
+ }
32
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoPageTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoPageTitleComponent, isStandalone: true, selector: "geo-page-title", inputs: { title: "title", uppercase: "uppercase", accentWidth: "accentWidth", accentHeight: "accentHeight", level: "level" }, host: { classAttribute: "geo-page-title-host" }, ngImport: i0, template: "<div\n class=\"geo-page-title\"\n [class.geo-page-title--uppercase]=\"uppercase\"\n>\n <geo-typography [variant]=\"typographyVariant\">\n @if (title) {\n {{ title }}\n } @else {\n <ng-content></ng-content>\n }\n </geo-typography>\n <span\n class=\"geo-page-title__accent\"\n aria-hidden=\"true\"\n [style.width]=\"accentWidthCss\"\n [style.height]=\"accentHeightCss\"\n ></span>\n</div>\n", styles: ["geo-page-title.geo-page-title-host,.geo-page-title-host{display:block;background:transparent;font-family:var(--geo-font-family)}.geo-page-title{display:flex;flex-direction:column;align-items:flex-start;gap:8px;background:transparent}.geo-page-title--uppercase{text-transform:uppercase;letter-spacing:.02em}.geo-page-title__accent{display:block;flex-shrink:0;width:56px;height:4px;border-radius:2px;background:var(--geo-color-primary-default)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: GeoTypographyComponent, selector: "geo-typography", inputs: ["variant", "color", "strong", "underline", "delete", "mark", "code", "disabled"] }], encapsulation: i0.ViewEncapsulation.None });
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoPageTitleComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ selector: 'geo-page-title', standalone: true, imports: [CommonModule, GeoTypographyComponent], encapsulation: ViewEncapsulation.None, host: {
38
+ class: 'geo-page-title-host',
39
+ }, template: "<div\n class=\"geo-page-title\"\n [class.geo-page-title--uppercase]=\"uppercase\"\n>\n <geo-typography [variant]=\"typographyVariant\">\n @if (title) {\n {{ title }}\n } @else {\n <ng-content></ng-content>\n }\n </geo-typography>\n <span\n class=\"geo-page-title__accent\"\n aria-hidden=\"true\"\n [style.width]=\"accentWidthCss\"\n [style.height]=\"accentHeightCss\"\n ></span>\n</div>\n", styles: ["geo-page-title.geo-page-title-host,.geo-page-title-host{display:block;background:transparent;font-family:var(--geo-font-family)}.geo-page-title{display:flex;flex-direction:column;align-items:flex-start;gap:8px;background:transparent}.geo-page-title--uppercase{text-transform:uppercase;letter-spacing:.02em}.geo-page-title__accent{display:block;flex-shrink:0;width:56px;height:4px;border-radius:2px;background:var(--geo-color-primary-default)}\n"] }]
40
+ }], propDecorators: { title: [{
41
+ type: Input
42
+ }], uppercase: [{
43
+ type: Input
44
+ }], accentWidth: [{
45
+ type: Input
46
+ }], accentHeight: [{
47
+ type: Input
48
+ }], level: [{
49
+ type: Input
50
+ }] } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXBhZ2UtdGl0bGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXBhZ2UtdGl0bGUvZ2VvLXBhZ2UtdGl0bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXBhZ2UtdGl0bGUvZ2VvLXBhZ2UtdGl0bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUdwRjs7R0FFRztBQVlILE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsd0JBQXdCO0lBQ2YsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNwQiwyQ0FBMkM7SUFDbEMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQiwrREFBK0Q7SUFDdEQsV0FBVyxHQUFvQixFQUFFLENBQUM7SUFDM0MsdUNBQXVDO0lBQzlCLFlBQVksR0FBb0IsQ0FBQyxDQUFDO0lBQzNDLDhDQUE4QztJQUNyQyxLQUFLLEdBQWtCLENBQUMsQ0FBQztJQUVsQyxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssRUFBMEIsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVE7WUFDekMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSTtZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVE7WUFDMUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSTtZQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN4QixDQUFDO3dHQTFCVSxxQkFBcUI7NEZBQXJCLHFCQUFxQix5UENuQmxDLDJhQWtCQSxxZkRQWSxZQUFZLCtCQUFFLHNCQUFzQjs7NEZBUW5DLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsaUJBR2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osS0FBSyxFQUFFLHFCQUFxQjtxQkFDN0I7OEJBSVEsS0FBSztzQkFBYixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgR2VvVHlwb2dyYXBoeUNvbXBvbmVudCB9IGZyb20gJy4uL2dlby10eXBvZ3JhcGh5L2dlby10eXBvZ3JhcGh5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9UeXBvZ3JhcGh5VmFyaWFudCB9IGZyb20gJy4uL2dlby10eXBvZ3JhcGh5L2dlby10eXBvZ3JhcGh5LnR5cGVzJztcblxuLyoqXG4gKiBQYWdlIHRpdGxlIEdFTyDigJQgY2jhu68gaW4gaG9hIMSR4bqtbSArIGfhuqFjaCBjaMOibiBuZ+G6r24gbcOgdSBwcmltYXJ5ICh0aGVvIGRlc2lnbikuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1wYWdlLXRpdGxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgR2VvVHlwb2dyYXBoeUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tcGFnZS10aXRsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tcGFnZS10aXRsZS5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1wYWdlLXRpdGxlLWhvc3QnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9QYWdlVGl0bGVDb21wb25lbnQge1xuICAvKiogTuG7mWkgZHVuZyB0acOqdSDEkeG7gS4gKi9cbiAgQElucHV0KCkgdGl0bGUgPSAnJztcbiAgLyoqIFThu7EgY2h1eeG7g24gdXBwZXJjYXNlLiBEZWZhdWx0IGB0cnVlYC4gKi9cbiAgQElucHV0KCkgdXBwZXJjYXNlID0gdHJ1ZTtcbiAgLyoqIENoaeG7gXUgcuG7mW5nIGfhuqFjaCBjaMOibiAocHggaG/hurdjIENTUyBzaXplKS4gRGVmYXVsdCBgNTZweGAuICovXG4gIEBJbnB1dCgpIGFjY2VudFdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSA1NjtcbiAgLyoqIMSQ4buZIGTDoHkgZ+G6oWNoIGNow6JuLiBEZWZhdWx0IGA0cHhgLiAqL1xuICBASW5wdXQoKSBhY2NlbnRIZWlnaHQ6IG51bWJlciB8IHN0cmluZyA9IDQ7XG4gIC8qKiBIZWFkaW5nIGxldmVsIOKGkiBnZW8tdHlwb2dyYXBoeSB2YXJpYW50LiAqL1xuICBASW5wdXQoKSBsZXZlbDogMSB8IDIgfCAzIHwgNCA9IDM7XG5cbiAgZ2V0IHR5cG9ncmFwaHlWYXJpYW50KCk6IEdlb1R5cG9ncmFwaHlWYXJpYW50IHtcbiAgICByZXR1cm4gYGgke3RoaXMubGV2ZWx9YCBhcyBHZW9UeXBvZ3JhcGh5VmFyaWFudDtcbiAgfVxuXG4gIGdldCBhY2NlbnRXaWR0aENzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5hY2NlbnRXaWR0aCA9PT0gJ251bWJlcidcbiAgICAgID8gYCR7dGhpcy5hY2NlbnRXaWR0aH1weGBcbiAgICAgIDogdGhpcy5hY2NlbnRXaWR0aDtcbiAgfVxuXG4gIGdldCBhY2NlbnRIZWlnaHRDc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuYWNjZW50SGVpZ2h0ID09PSAnbnVtYmVyJ1xuICAgICAgPyBgJHt0aGlzLmFjY2VudEhlaWdodH1weGBcbiAgICAgIDogdGhpcy5hY2NlbnRIZWlnaHQ7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJnZW8tcGFnZS10aXRsZVwiXG4gIFtjbGFzcy5nZW8tcGFnZS10aXRsZS0tdXBwZXJjYXNlXT1cInVwcGVyY2FzZVwiXG4+XG4gIDxnZW8tdHlwb2dyYXBoeSBbdmFyaWFudF09XCJ0eXBvZ3JhcGh5VmFyaWFudFwiPlxuICAgIEBpZiAodGl0bGUpIHtcbiAgICAgIHt7IHRpdGxlIH19XG4gICAgfSBAZWxzZSB7XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgfVxuICA8L2dlby10eXBvZ3JhcGh5PlxuICA8c3BhblxuICAgIGNsYXNzPVwiZ2VvLXBhZ2UtdGl0bGVfX2FjY2VudFwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICBbc3R5bGUud2lkdGhdPVwiYWNjZW50V2lkdGhDc3NcIlxuICAgIFtzdHlsZS5oZWlnaHRdPVwiYWNjZW50SGVpZ2h0Q3NzXCJcbiAgPjwvc3Bhbj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,54 @@
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
+ import { NzPaginationModule } from 'ng-zorro-antd/pagination';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "ng-zorro-antd/pagination";
5
+ /**
6
+ * Pagination gọn — wrap `nz-pagination`. Dùng cho panel/map (không kèm size changer như `geo-table-pagination`).
7
+ */
8
+ export class GeoPaginationComponent {
9
+ pageIndex = 1;
10
+ pageSize = 10;
11
+ total = 0;
12
+ size = 'default';
13
+ simple = false;
14
+ hideOnSinglePage = false;
15
+ showSizeChanger = false;
16
+ pageSizeOptions = [5, 10, 20, 50];
17
+ pageIndexChange = new EventEmitter();
18
+ pageSizeChange = new EventEmitter();
19
+ onPageIndexChange(page) {
20
+ this.pageIndex = page;
21
+ this.pageIndexChange.emit(page);
22
+ }
23
+ onPageSizeChange(size) {
24
+ this.pageSize = size;
25
+ this.pageSizeChange.emit(size);
26
+ }
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GeoPaginationComponent, isStandalone: true, selector: "geo-pagination", inputs: { pageIndex: "pageIndex", pageSize: "pageSize", total: "total", size: "size", simple: "simple", hideOnSinglePage: "hideOnSinglePage", showSizeChanger: "showSizeChanger", pageSizeOptions: "pageSizeOptions" }, outputs: { pageIndexChange: "pageIndexChange", pageSizeChange: "pageSizeChange" }, host: { classAttribute: "geo-pagination-host" }, ngImport: i0, template: "<div class=\"geo-pagination\">\n <nz-pagination\n [nzSize]=\"size\"\n [nzSimple]=\"simple\"\n [nzPageIndex]=\"pageIndex\"\n [nzPageSize]=\"pageSize\"\n [nzTotal]=\"total\"\n [nzHideOnSinglePage]=\"hideOnSinglePage\"\n [nzShowSizeChanger]=\"showSizeChanger\"\n [nzPageSizeOptions]=\"pageSizeOptions\"\n (nzPageIndexChange)=\"onPageIndexChange($event)\"\n (nzPageSizeChange)=\"onPageSizeChange($event)\"\n ></nz-pagination>\n</div>\n", styles: [".geo-pagination-host{display:inline-flex;align-items:center}.geo-pagination{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i1.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }], encapsulation: i0.ViewEncapsulation.None });
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoPaginationComponent, decorators: [{
31
+ type: Component,
32
+ args: [{ selector: 'geo-pagination', standalone: true, imports: [NzPaginationModule], encapsulation: ViewEncapsulation.None, host: { class: 'geo-pagination-host' }, template: "<div class=\"geo-pagination\">\n <nz-pagination\n [nzSize]=\"size\"\n [nzSimple]=\"simple\"\n [nzPageIndex]=\"pageIndex\"\n [nzPageSize]=\"pageSize\"\n [nzTotal]=\"total\"\n [nzHideOnSinglePage]=\"hideOnSinglePage\"\n [nzShowSizeChanger]=\"showSizeChanger\"\n [nzPageSizeOptions]=\"pageSizeOptions\"\n (nzPageIndexChange)=\"onPageIndexChange($event)\"\n (nzPageSizeChange)=\"onPageSizeChange($event)\"\n ></nz-pagination>\n</div>\n", styles: [".geo-pagination-host{display:inline-flex;align-items:center}.geo-pagination{display:inline-flex}\n"] }]
33
+ }], propDecorators: { pageIndex: [{
34
+ type: Input
35
+ }], pageSize: [{
36
+ type: Input
37
+ }], total: [{
38
+ type: Input
39
+ }], size: [{
40
+ type: Input
41
+ }], simple: [{
42
+ type: Input
43
+ }], hideOnSinglePage: [{
44
+ type: Input
45
+ }], showSizeChanger: [{
46
+ type: Input
47
+ }], pageSizeOptions: [{
48
+ type: Input
49
+ }], pageIndexChange: [{
50
+ type: Output
51
+ }], pageSizeChange: [{
52
+ type: Output
53
+ }] } });
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLXBhZ2luYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXBhZ2luYXRpb24vZ2VvLXBhZ2luYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLXBhZ2luYXRpb24vZ2VvLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBRTlEOztHQUVHO0FBVUgsTUFBTSxPQUFPLHNCQUFzQjtJQUN4QixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLEdBQXdCLFNBQVMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ2YsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDeEIsZUFBZSxHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFM0MsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDN0MsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFdEQsaUJBQWlCLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO3dHQXJCVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixzYUNmbkMsaWRBY0EsMkpETFksa0JBQWtCOzs0RkFNakIsc0JBQXNCO2tCQVRsQyxTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLGtCQUFrQixDQUFDLGlCQUdkLGlCQUFpQixDQUFDLElBQUksUUFDL0IsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUU7OEJBRzdCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnpQYWdpbmF0aW9uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9wYWdpbmF0aW9uJztcblxuLyoqXG4gKiBQYWdpbmF0aW9uIGfhu41uIOKAlCB3cmFwIGBuei1wYWdpbmF0aW9uYC4gRMO5bmcgY2hvIHBhbmVsL21hcCAoa2jDtG5nIGvDqG0gc2l6ZSBjaGFuZ2VyIG5oxrAgYGdlby10YWJsZS1wYWdpbmF0aW9uYCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1wYWdpbmF0aW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW056UGFnaW5hdGlvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tcGFnaW5hdGlvbi5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHsgY2xhc3M6ICdnZW8tcGFnaW5hdGlvbi1ob3N0JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9QYWdpbmF0aW9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcGFnZUluZGV4ID0gMTtcbiAgQElucHV0KCkgcGFnZVNpemUgPSAxMDtcbiAgQElucHV0KCkgdG90YWwgPSAwO1xuICBASW5wdXQoKSBzaXplOiAnZGVmYXVsdCcgfCAnc21hbGwnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBzaW1wbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZU9uU2luZ2xlUGFnZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93U2l6ZUNoYW5nZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDUwXTtcblxuICBAT3V0cHV0KCkgcGFnZUluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwYWdlU2l6ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIG9uUGFnZUluZGV4Q2hhbmdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4ID0gcGFnZTtcbiAgICB0aGlzLnBhZ2VJbmRleENoYW5nZS5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplID0gc2l6ZTtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlLmVtaXQoc2l6ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnZW8tcGFnaW5hdGlvblwiPlxuICA8bnotcGFnaW5hdGlvblxuICAgIFtuelNpemVdPVwic2l6ZVwiXG4gICAgW256U2ltcGxlXT1cInNpbXBsZVwiXG4gICAgW256UGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgW256UGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgIFtuelRvdGFsXT1cInRvdGFsXCJcbiAgICBbbnpIaWRlT25TaW5nbGVQYWdlXT1cImhpZGVPblNpbmdsZVBhZ2VcIlxuICAgIFtuelNob3dTaXplQ2hhbmdlcl09XCJzaG93U2l6ZUNoYW5nZXJcIlxuICAgIFtuelBhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgIChuelBhZ2VJbmRleENoYW5nZSk9XCJvblBhZ2VJbmRleENoYW5nZSgkZXZlbnQpXCJcbiAgICAobnpQYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICA+PC9uei1wYWdpbmF0aW9uPlxuPC9kaXY+XG4iXX0=