@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.
- package/AGENTS.md +12 -8
- package/README.md +140 -17
- package/ai/AGENTS.md +43 -32
- package/ai/README.md +36 -2
- package/ai/catalog.json +5585 -437
- package/ai/components/geo-alert.md +75 -21
- package/ai/components/geo-back-button.md +64 -18
- package/ai/components/geo-breadcrumb.md +71 -12
- package/ai/components/geo-button.md +90 -27
- package/ai/components/geo-chart.md +103 -0
- package/ai/components/geo-checkbox.md +67 -20
- package/ai/components/geo-column-picker.md +91 -18
- package/ai/components/geo-confirm-modal.md +92 -27
- package/ai/components/geo-dashboard.md +91 -0
- package/ai/components/geo-date-picker.md +105 -29
- package/ai/components/geo-date-range-picker.md +101 -28
- package/ai/components/geo-empty-state.md +75 -0
- package/ai/components/geo-feedback-form.md +97 -0
- package/ai/components/geo-file-picker.md +99 -26
- package/ai/components/geo-forgot-password.md +78 -0
- package/ai/components/geo-form-modal.md +111 -44
- package/ai/components/geo-icon.md +70 -16
- package/ai/components/geo-input.md +94 -29
- package/ai/components/geo-layout-footer.md +70 -0
- package/ai/components/geo-layout-header-actions.md +82 -0
- package/ai/components/geo-layout-header.md +89 -0
- package/ai/components/geo-layout-sidebar.md +86 -0
- package/ai/components/geo-layout.md +155 -0
- package/ai/components/geo-list-page.md +72 -0
- package/ai/components/geo-login.md +94 -0
- package/ai/components/geo-map-admin-filter.md +80 -0
- package/ai/components/geo-map-basemap-switcher.md +75 -0
- package/ai/components/geo-map-help.md +72 -0
- package/ai/components/geo-map-layer-card.md +73 -0
- package/ai/components/geo-map-layer-panel.md +75 -0
- package/ai/components/geo-map-layers-drawer.md +78 -0
- package/ai/components/geo-map-legend.md +74 -0
- package/ai/components/geo-map-locate.md +75 -0
- package/ai/components/geo-map-location-chip.md +71 -0
- package/ai/components/geo-map-measure.md +74 -0
- package/ai/components/geo-map-opacity.md +75 -0
- package/ai/components/geo-map-parcel-popup.md +79 -0
- package/ai/components/geo-map-search.md +83 -0
- package/ai/components/geo-map-shell.md +110 -0
- package/ai/components/geo-map-snapshot.md +75 -0
- package/ai/components/geo-map-swipe.md +73 -0
- package/ai/components/geo-map-toolbar.md +76 -0
- package/ai/components/geo-map-zoom.md +74 -0
- package/ai/components/geo-map.md +205 -0
- package/ai/components/geo-overlap-result.md +88 -0
- package/ai/components/geo-page-header.md +72 -0
- package/ai/components/geo-page-title.md +62 -16
- package/ai/components/geo-pagination.md +76 -24
- package/ai/components/geo-radio.md +110 -27
- package/ai/components/geo-row-actions.md +87 -19
- package/ai/components/geo-select.md +108 -28
- package/ai/components/geo-slider.md +70 -21
- package/ai/components/geo-stat-card.md +98 -0
- package/ai/components/geo-status-tag.md +67 -15
- package/ai/components/geo-step-form-layout.md +121 -38
- package/ai/components/geo-stepper.md +81 -19
- package/ai/components/geo-table-filter.md +90 -29
- package/ai/components/geo-table-pagination.md +70 -23
- package/ai/components/geo-table-toolbar.md +84 -29
- package/ai/components/geo-table.md +191 -59
- package/ai/components/geo-tabs.md +99 -27
- package/ai/components/geo-textarea.md +84 -23
- package/ai/components/geo-toast.md +138 -27
- package/ai/components/geo-tree.md +94 -22
- package/ai/components/geo-typography.md +70 -19
- package/ai/components/geo-upload.md +109 -39
- package/ai/mockup.html +1194 -0
- package/ai/recipes.md +132 -47
- package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
- package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
- package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
- package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
- package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
- package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
- package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
- package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
- package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
- package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
- package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
- package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
- package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
- package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
- package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
- package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
- package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
- package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
- package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
- package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
- package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
- package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
- package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
- package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
- package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
- package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
- package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
- package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
- package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
- package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
- package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
- package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
- package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
- package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
- package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
- package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
- package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
- package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
- package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
- package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
- package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
- package/esm2022/lib/figma/index.mjs +50 -1
- package/esm2022/lib/styles/tokens.mjs +56 -24
- package/fesm2022/geoit-ui.mjs +5981 -1825
- package/fesm2022/geoit-ui.mjs.map +1 -1
- package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
- package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
- package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
- package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
- package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
- package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
- package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
- package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
- package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
- package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
- package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
- package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
- package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
- package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
- package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
- package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
- package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
- package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
- package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
- package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
- package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
- package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
- package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
- package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
- package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
- package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
- package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
- package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
- package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
- package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
- package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
- package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
- package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
- package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
- package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
- package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
- package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
- package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
- package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
- package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
- package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
- package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
- package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
- package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
- package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
- package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
- package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
- package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
- package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
- package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
- package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
- package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
- package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
- package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
- package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
- package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
- package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
- package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
- package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
- package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
- package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
- package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
- package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
- package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
- package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
- package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
- package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
- package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
- package/lib/figma/index.d.ts +49 -0
- package/lib/styles/tokens.d.ts +56 -23
- package/package.json +4 -2
- package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
- package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
- package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
- package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
- package/src/lib/styles/design-tokens.scss +108 -35
- package/src/lib/styles/scrollbar.scss +2 -2
- package/src/lib/styles/theme.scss +1 -1
|
@@ -1,64 +1,69 @@
|
|
|
1
|
-
import { Component,
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, forwardRef, inject, input, output, signal, viewChild, ViewEncapsulation, } from '@angular/core';
|
|
3
2
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
3
|
import { GeoButtonComponent } from '../geo-button/geo-button.component';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
5
|
let uiFilePickerErrorId = 0;
|
|
7
6
|
export class GeoFilePickerComponent {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
cdr = inject(ChangeDetectorRef);
|
|
8
|
+
fileInput = viewChild('fileInput');
|
|
9
|
+
label = input('Tải file');
|
|
10
|
+
placeholder = input('Chọn giá trị');
|
|
11
|
+
buttonText = input('Chọn file');
|
|
12
|
+
required = input(false);
|
|
13
|
+
disabled = input(false);
|
|
14
|
+
accept = input('');
|
|
15
|
+
multiple = input(false);
|
|
16
|
+
error = input(false);
|
|
17
|
+
errorMessage = input('');
|
|
18
|
+
block = input(false);
|
|
19
|
+
width = input(undefined);
|
|
20
20
|
/**
|
|
21
21
|
* Tên file đã upload (server) — hiện khi chưa có File local trong CVA.
|
|
22
22
|
* Dùng cho flow: chọn file → upload → giữ tên từ API.
|
|
23
23
|
*/
|
|
24
|
-
selectedName = '';
|
|
25
|
-
fileChange =
|
|
24
|
+
selectedName = input('');
|
|
25
|
+
fileChange = output();
|
|
26
26
|
errorMessageId = `geo-file-picker-error-${++uiFilePickerErrorId}`;
|
|
27
|
-
|
|
27
|
+
disabledFromCva = signal(false);
|
|
28
|
+
isDisabled = computed(() => this.disabled() || this.disabledFromCva());
|
|
29
|
+
value = signal(null);
|
|
28
30
|
onChange = () => undefined;
|
|
29
31
|
onTouched = () => undefined;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
hostWidth = computed(() => {
|
|
33
|
+
const width = this.width();
|
|
34
|
+
if (this.block() || width == null) {
|
|
32
35
|
return null;
|
|
33
36
|
}
|
|
34
|
-
return typeof
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
return typeof width === 'number' ? `${width}px` : width;
|
|
38
|
+
});
|
|
39
|
+
displayValue = computed(() => {
|
|
40
|
+
const value = this.value();
|
|
41
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
42
|
+
return value.map((file) => file.name).join(', ');
|
|
39
43
|
}
|
|
40
|
-
if (
|
|
41
|
-
return
|
|
44
|
+
if (value && !Array.isArray(value)) {
|
|
45
|
+
return value.name;
|
|
42
46
|
}
|
|
43
|
-
if (this.selectedName) {
|
|
44
|
-
return this.selectedName;
|
|
47
|
+
if (this.selectedName()) {
|
|
48
|
+
return this.selectedName();
|
|
45
49
|
}
|
|
46
|
-
return this.placeholder;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
return this.placeholder();
|
|
51
|
+
});
|
|
52
|
+
hasValue = computed(() => {
|
|
53
|
+
const value = this.value();
|
|
54
|
+
if (Array.isArray(value)) {
|
|
55
|
+
return value.length > 0;
|
|
51
56
|
}
|
|
52
|
-
if (
|
|
57
|
+
if (value != null) {
|
|
53
58
|
return true;
|
|
54
59
|
}
|
|
55
|
-
return !!this.selectedName;
|
|
56
|
-
}
|
|
60
|
+
return !!this.selectedName();
|
|
61
|
+
});
|
|
57
62
|
openFilePicker() {
|
|
58
|
-
if (this.
|
|
63
|
+
if (this.isDisabled()) {
|
|
59
64
|
return;
|
|
60
65
|
}
|
|
61
|
-
this.fileInput?.nativeElement.click();
|
|
66
|
+
this.fileInput()?.nativeElement.click();
|
|
62
67
|
}
|
|
63
68
|
onFileSelected(event) {
|
|
64
69
|
const input = event.target;
|
|
@@ -66,18 +71,19 @@ export class GeoFilePickerComponent {
|
|
|
66
71
|
if (!files || files.length === 0) {
|
|
67
72
|
return;
|
|
68
73
|
}
|
|
69
|
-
const nextValue = this.multiple ? Array.from(files) : files[0];
|
|
74
|
+
const nextValue = this.multiple() ? Array.from(files) : files[0];
|
|
70
75
|
this.setValue(nextValue);
|
|
71
76
|
input.value = '';
|
|
72
77
|
}
|
|
73
78
|
setValue(value) {
|
|
74
|
-
this.value
|
|
79
|
+
this.value.set(value);
|
|
75
80
|
this.onChange(value);
|
|
76
81
|
this.onTouched();
|
|
77
82
|
this.fileChange.emit(value);
|
|
78
83
|
}
|
|
79
84
|
writeValue(value) {
|
|
80
|
-
this.value
|
|
85
|
+
this.value.set(value);
|
|
86
|
+
this.cdr.markForCheck();
|
|
81
87
|
}
|
|
82
88
|
registerOnChange(fn) {
|
|
83
89
|
this.onChange = fn;
|
|
@@ -86,60 +92,32 @@ export class GeoFilePickerComponent {
|
|
|
86
92
|
this.onTouched = fn;
|
|
87
93
|
}
|
|
88
94
|
setDisabledState(isDisabled) {
|
|
89
|
-
this.
|
|
95
|
+
this.disabledFromCva.set(isDisabled);
|
|
96
|
+
this.cdr.markForCheck();
|
|
90
97
|
}
|
|
91
98
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoFilePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoFilePickerComponent, isStandalone: true, selector: "geo-file-picker", inputs: { label: "label", placeholder: "placeholder", buttonText: "buttonText", required: "required", disabled: "disabled", accept: "accept", multiple: "multiple", error: "error", errorMessage: "errorMessage", block: "block", width: "width", selectedName: "selectedName" }, outputs: { fileChange: "fileChange" }, host: { properties: { "class.geo-file-picker-host--block": "block", "class.geo-file-picker-host--error": "error", "class.geo-file-picker-host--disabled": "
|
|
99
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoFilePickerComponent, isStandalone: true, selector: "geo-file-picker", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, buttonText: { classPropertyName: "buttonText", publicName: "buttonText", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, selectedName: { classPropertyName: "selectedName", publicName: "selectedName", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fileChange: "fileChange" }, host: { properties: { "class.geo-file-picker-host--block": "block()", "class.geo-file-picker-host--error": "error()", "class.geo-file-picker-host--disabled": "isDisabled()", "style.width": "hostWidth()" }, classAttribute: "geo-file-picker-host" }, providers: [
|
|
93
100
|
{
|
|
94
101
|
provide: NG_VALUE_ACCESSOR,
|
|
95
102
|
useExisting: forwardRef(() => GeoFilePickerComponent),
|
|
96
103
|
multi: true,
|
|
97
104
|
},
|
|
98
|
-
], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "@if (label) {\n <div class=\"geo-file-picker__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-file-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-file-picker__control\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n>\n <span\n class=\"geo-file-picker__value\"\n [class.geo-file-picker__value--placeholder]=\"!hasValue\"\n >\n {{ displayValue }}\n </span>\n\n <input\n #fileInput\n class=\"geo-file-picker__input\"\n type=\"file\"\n tabindex=\"-1\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [disabled]=\"
|
|
105
|
+
], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (label()) {\n <div class=\"geo-file-picker__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-file-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-file-picker__control\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n>\n <span\n class=\"geo-file-picker__value\"\n [class.geo-file-picker__value--placeholder]=\"!hasValue()\"\n >\n {{ displayValue() }}\n </span>\n\n <input\n #fileInput\n class=\"geo-file-picker__input\"\n type=\"file\"\n tabindex=\"-1\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFileSelected($event)\"\n />\n\n <geo-button\n class=\"geo-file-picker__button\"\n appearance=\"primary\"\n color=\"brand\"\n icon=\"plus\"\n [disabled]=\"isDisabled()\"\n (clicked)=\"openFilePicker()\"\n >\n {{ buttonText() }}\n </geo-button>\n</div>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-file-picker__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n", styles: ["geo-file-picker.geo-file-picker-host,.geo-file-picker-host{display:inline-flex;flex-direction:column;gap:8px;width:413px;max-width:100%;vertical-align:top}geo-file-picker.geo-file-picker-host.geo-file-picker-host--block,.geo-file-picker-host.geo-file-picker-host--block{display:flex;width:100%;max-width:none}.geo-file-picker__label{display:inline-flex;align-items:flex-start;gap:4px;font-size:14px;line-height:normal;color:var(--geo-color-neutral-900)}.geo-file-picker__required{color:var(--geo-color-error-default)}.geo-file-picker__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:var(--geo-color-neutral-white);transition:border-color .15s ease,box-shadow .15s ease}.geo-file-picker-host:not(.geo-file-picker-host--disabled) .geo-file-picker__control:hover{border-color:var(--geo-color-primary-default)}.geo-file-picker__value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;line-height:normal;color:var(--geo-color-neutral-900)}.geo-file-picker__value--placeholder{color:var(--geo-color-neutral-500)}.geo-file-picker__input{display:none}.geo-file-picker__button .geo-button{height:32px;min-height:32px;padding:8px;flex-shrink:0}.geo-file-picker-host--disabled .geo-file-picker__control{background:var(--geo-color-neutral-100);border-color:var(--geo-color-neutral-300)}.geo-file-picker-host--disabled .geo-file-picker__value,.geo-file-picker-host--disabled .geo-file-picker__value--placeholder{color:var(--geo-color-neutral-disabled-text)}.geo-file-picker__error{margin:0;font-size:14px;line-height:normal;color:var(--geo-color-error-default)}\n"], dependencies: [{ kind: "component", type: GeoButtonComponent, selector: "geo-button", inputs: ["appearance", "color", "icon", "iconTheme", "iconPlacement", "iconOnly", "type", "disabled", "tooltip", "tooltipPlacement", "active", "title"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
99
106
|
}
|
|
100
107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoFilePickerComponent, decorators: [{
|
|
101
108
|
type: Component,
|
|
102
|
-
args: [{ selector: 'geo-file-picker', standalone: true, imports: [
|
|
109
|
+
args: [{ selector: 'geo-file-picker', standalone: true, imports: [GeoButtonComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
103
110
|
class: 'geo-file-picker-host',
|
|
104
|
-
'[class.geo-file-picker-host--block]': 'block',
|
|
105
|
-
'[class.geo-file-picker-host--error]': 'error',
|
|
106
|
-
'[class.geo-file-picker-host--disabled]': '
|
|
107
|
-
'[style.width]': 'hostWidth',
|
|
111
|
+
'[class.geo-file-picker-host--block]': 'block()',
|
|
112
|
+
'[class.geo-file-picker-host--error]': 'error()',
|
|
113
|
+
'[class.geo-file-picker-host--disabled]': 'isDisabled()',
|
|
114
|
+
'[style.width]': 'hostWidth()',
|
|
108
115
|
}, providers: [
|
|
109
116
|
{
|
|
110
117
|
provide: NG_VALUE_ACCESSOR,
|
|
111
118
|
useExisting: forwardRef(() => GeoFilePickerComponent),
|
|
112
119
|
multi: true,
|
|
113
120
|
},
|
|
114
|
-
], template: "@if (label) {\n <div class=\"geo-file-picker__label\">\n <span>{{ label }}</span>\n @if (required) {\n <span class=\"geo-file-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-file-picker__control\"\n [attr.aria-invalid]=\"error ? 'true' : null\"\n [attr.aria-describedby]=\"error && errorMessage ? errorMessageId : null\"\n>\n <span\n class=\"geo-file-picker__value\"\n [class.geo-file-picker__value--placeholder]=\"!hasValue\"\n >\n {{ displayValue }}\n </span>\n\n <input\n #fileInput\n class=\"geo-file-picker__input\"\n type=\"file\"\n tabindex=\"-1\"\n [accept]=\"accept\"\n [multiple]=\"multiple\"\n [disabled]=\"
|
|
115
|
-
}]
|
|
116
|
-
type: ViewChild,
|
|
117
|
-
args: ['fileInput']
|
|
118
|
-
}], label: [{
|
|
119
|
-
type: Input
|
|
120
|
-
}], placeholder: [{
|
|
121
|
-
type: Input
|
|
122
|
-
}], buttonText: [{
|
|
123
|
-
type: Input
|
|
124
|
-
}], required: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}], disabled: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], accept: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], multiple: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], error: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], errorMessage: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], block: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], width: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], selectedName: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], fileChange: [{
|
|
143
|
-
type: Output
|
|
144
|
-
}] } });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWZpbGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1maWxlLXBpY2tlci9nZW8tZmlsZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZpbGUtcGlja2VyL2dlby1maWxlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBRXhFLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBd0I1QixNQUFNLE9BQU8sc0JBQXNCO0lBQ1QsU0FBUyxDQUFnQztJQUV4RCxLQUFLLEdBQUcsVUFBVSxDQUFDO0lBQ25CLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFDN0IsVUFBVSxHQUFHLFdBQVcsQ0FBQztJQUN6QixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNaLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNkLEtBQUssQ0FBbUI7SUFDakM7OztPQUdHO0lBQ00sWUFB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dUIsQ0FBQzs0QkFDckQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBR3VCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFFYixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBHZW9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9nZW8tYnV0dG9uL2dlby1idXR0b24uY29tcG9uZW50JztcblxubGV0IHVpRmlsZVBpY2tlckVycm9ySWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tZmlsZS1waWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBHZW9CdXR0b25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLWZpbGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1maWxlLXBpY2tlci5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1maWxlLXBpY2tlci1ob3N0JyxcbiAgICAnW2NsYXNzLmdlby1maWxlLXBpY2tlci1ob3N0LS1ibG9ja10nOiAnYmxvY2snLFxuICAgICdbY2xhc3MuZ2VvLWZpbGUtcGlja2VyLWhvc3QtLWVycm9yXSc6ICdlcnJvcicsXG4gICAgJ1tjbGFzcy5nZW8tZmlsZS1waWNrZXItaG9zdC0tZGlzYWJsZWRdJzogJ2Rpc2FibGVkJyxcbiAgICAnW3N0eWxlLndpZHRoXSc6ICdob3N0V2lkdGgnLFxuICB9LFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdlb0ZpbGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvRmlsZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQFZpZXdDaGlsZCgnZmlsZUlucHV0JykgZmlsZUlucHV0PzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBASW5wdXQoKSBsYWJlbCA9ICdU4bqjaSBmaWxlJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnQ2jhu41uIGdpw6EgdHLhu4snO1xuICBASW5wdXQoKSBidXR0b25UZXh0ID0gJ0No4buNbiBmaWxlJztcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgYWNjZXB0ID0gJyc7XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZSA9ICcnO1xuICBASW5wdXQoKSBibG9jayA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aD86IG51bWJlciB8IHN0cmluZztcbiAgLyoqXG4gICAqIFTDqm4gZmlsZSDEkcOjIHVwbG9hZCAoc2VydmVyKSDigJQgaGnhu4duIGtoaSBjaMawYSBjw7MgRmlsZSBsb2NhbCB0cm9uZyBDVkEuXG4gICAqIETDuW5nIGNobyBmbG93OiBjaOG7jW4gZmlsZSDihpIgdXBsb2FkIOKGkiBnaeG7ryB0w6puIHThu6sgQVBJLlxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0ZWROYW1lID0gJyc7XG5cbiAgQE91dHB1dCgpIGZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGUgfCBGaWxlW10gfCBudWxsPigpO1xuXG4gIHJlYWRvbmx5IGVycm9yTWVzc2FnZUlkID0gYGdlby1maWxlLXBpY2tlci1lcnJvci0keysrdWlGaWxlUGlja2VyRXJyb3JJZH1gO1xuXG4gIHZhbHVlOiBGaWxlIHwgRmlsZVtdIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBGaWxlIHwgRmlsZVtdIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbiAgZ2V0IGhvc3RXaWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5ibG9jayB8fCB0aGlzLndpZHRoID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2YgdGhpcy53aWR0aCA9PT0gJ251bWJlcicgPyBgJHt0aGlzLndpZHRofXB4YCA6IHRoaXMud2lkdGg7XG4gIH1cblxuICBnZXQgZGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoKGZpbGUpID0+IGZpbGUubmFtZSkuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUubmFtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZE5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIGdldCBoYXNWYWx1ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkTmFtZTtcbiAgfVxuXG4gIG9wZW5GaWxlUGlja2VyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWxlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZXMgPSBpbnB1dC5maWxlcztcblxuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IEFycmF5LmZyb20oZmlsZXMpIDogZmlsZXNbMF07XG4gICAgdGhpcy5zZXRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIGlucHV0LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBGaWxlIHwgRmlsZVtdIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IEZpbGUgfCBGaWxlW10gfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBGaWxlIHwgRmlsZVtdIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG59XG4iLCJAaWYgKGxhYmVsKSB7XG4gIDxkaXYgY2xhc3M9XCJnZW8tZmlsZS1waWNrZXJfX2xhYmVsXCI+XG4gICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgQGlmIChyZXF1aXJlZCkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJnZW8tZmlsZS1waWNrZXJfX3JlcXVpcmVkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICB9XG4gIDwvZGl2PlxufVxuXG48ZGl2XG4gIGNsYXNzPVwiZ2VvLWZpbGUtcGlja2VyX19jb250cm9sXCJcbiAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yID8gJ3RydWUnIDogbnVsbFwiXG4gIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZXJyb3IgJiYgZXJyb3JNZXNzYWdlID8gZXJyb3JNZXNzYWdlSWQgOiBudWxsXCJcbj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cImdlby1maWxlLXBpY2tlcl9fdmFsdWVcIlxuICAgIFtjbGFzcy5nZW8tZmlsZS1waWNrZXJfX3ZhbHVlLS1wbGFjZWhvbGRlcl09XCIhaGFzVmFsdWVcIlxuICA+XG4gICAge3sgZGlzcGxheVZhbHVlIH19XG4gIDwvc3Bhbj5cblxuICA8aW5wdXRcbiAgICAjZmlsZUlucHV0XG4gICAgY2xhc3M9XCJnZW8tZmlsZS1waWNrZXJfX2lucHV0XCJcbiAgICB0eXBlPVwiZmlsZVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAvPlxuXG4gIDxnZW8tYnV0dG9uXG4gICAgY2xhc3M9XCJnZW8tZmlsZS1waWNrZXJfX2J1dHRvblwiXG4gICAgYXBwZWFyYW5jZT1cInByaW1hcnlcIlxuICAgIGNvbG9yPVwiYnJhbmRcIlxuICAgIGljb249XCJwbHVzXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIChjbGlja2VkKT1cIm9wZW5GaWxlUGlja2VyKClcIlxuICA+XG4gICAge3sgYnV0dG9uVGV4dCB9fVxuICA8L2dlby1idXR0b24+XG48L2Rpdj5cblxuQGlmIChlcnJvciAmJiBlcnJvck1lc3NhZ2UpIHtcbiAgPHAgY2xhc3M9XCJnZW8tZmlsZS1waWNrZXJfX2Vycm9yXCIgW2lkXT1cImVycm9yTWVzc2FnZUlkXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JNZXNzYWdlIH19PC9wPlxufVxuIl19
|
|
121
|
+
], template: "@if (label()) {\n <div class=\"geo-file-picker__label\">\n <span>{{ label() }}</span>\n @if (required()) {\n <span class=\"geo-file-picker__required\" aria-hidden=\"true\">*</span>\n }\n </div>\n}\n\n<div\n class=\"geo-file-picker__control\"\n [attr.aria-invalid]=\"error() ? 'true' : null\"\n [attr.aria-describedby]=\"error() && errorMessage() ? errorMessageId : null\"\n>\n <span\n class=\"geo-file-picker__value\"\n [class.geo-file-picker__value--placeholder]=\"!hasValue()\"\n >\n {{ displayValue() }}\n </span>\n\n <input\n #fileInput\n class=\"geo-file-picker__input\"\n type=\"file\"\n tabindex=\"-1\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"isDisabled()\"\n (change)=\"onFileSelected($event)\"\n />\n\n <geo-button\n class=\"geo-file-picker__button\"\n appearance=\"primary\"\n color=\"brand\"\n icon=\"plus\"\n [disabled]=\"isDisabled()\"\n (clicked)=\"openFilePicker()\"\n >\n {{ buttonText() }}\n </geo-button>\n</div>\n\n@if (error() && errorMessage()) {\n <p class=\"geo-file-picker__error\" [id]=\"errorMessageId\" role=\"alert\">{{ errorMessage() }}</p>\n}\n", styles: ["geo-file-picker.geo-file-picker-host,.geo-file-picker-host{display:inline-flex;flex-direction:column;gap:8px;width:413px;max-width:100%;vertical-align:top}geo-file-picker.geo-file-picker-host.geo-file-picker-host--block,.geo-file-picker-host.geo-file-picker-host--block{display:flex;width:100%;max-width:none}.geo-file-picker__label{display:inline-flex;align-items:flex-start;gap:4px;font-size:14px;line-height:normal;color:var(--geo-color-neutral-900)}.geo-file-picker__required{color:var(--geo-color-error-default)}.geo-file-picker__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:var(--geo-color-neutral-white);transition:border-color .15s ease,box-shadow .15s ease}.geo-file-picker-host:not(.geo-file-picker-host--disabled) .geo-file-picker__control:hover{border-color:var(--geo-color-primary-default)}.geo-file-picker__value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;line-height:normal;color:var(--geo-color-neutral-900)}.geo-file-picker__value--placeholder{color:var(--geo-color-neutral-500)}.geo-file-picker__input{display:none}.geo-file-picker__button .geo-button{height:32px;min-height:32px;padding:8px;flex-shrink:0}.geo-file-picker-host--disabled .geo-file-picker__control{background:var(--geo-color-neutral-100);border-color:var(--geo-color-neutral-300)}.geo-file-picker-host--disabled .geo-file-picker__value,.geo-file-picker-host--disabled .geo-file-picker__value--placeholder{color:var(--geo-color-neutral-disabled-text)}.geo-file-picker__error{margin:0;font-size:14px;line-height:normal;color:var(--geo-color-error-default)}\n"] }]
|
|
122
|
+
}] });
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWZpbGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1maWxlLXBpY2tlci9nZW8tZmlsZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZpbGUtcGlja2VyL2dlby1maWxlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUVSLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBRXhFLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBeUI1QixNQUFNLE9BQU8sc0JBQXNCO0lBQ2hCLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUV4QyxTQUFTLEdBQUcsU0FBUyxDQUErQixXQUFXLENBQUMsQ0FBQztJQUVqRSxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLFdBQVcsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEMsVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsTUFBTSxHQUFHLEtB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QWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQzt3R0F2SFUsc0JBQXNCOzRGQUF0QixzQkFBc0IsazNEQVJ0QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3JELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixrSkN4Q0gsaXFDQStDQSwydkREekJZLGtCQUFrQjs7NEZBb0JqQixzQkFBc0I7a0JBdkJsQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLGtCQUFrQixDQUFDLGlCQUdkLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osS0FBSyxFQUFFLHNCQUFzQjt3QkFDN0IscUNBQXFDLEVBQUUsU0FBUzt3QkFDaEQscUNBQXFDLEVBQUUsU0FBUzt3QkFDaEQsd0NBQXdDLEVBQUUsY0FBYzt3QkFDeEQsZUFBZSxFQUFFLGFBQWE7cUJBQy9CLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBHZW9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9nZW8tYnV0dG9uL2dlby1idXR0b24uY29tcG9uZW50JztcblxubGV0IHVpRmlsZVBpY2tlckVycm9ySWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tZmlsZS1waWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbR2VvQnV0dG9uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1maWxlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tZmlsZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZ2VvLWZpbGUtcGlja2VyLWhvc3QnLFxuICAgICdbY2xhc3MuZ2VvLWZpbGUtcGlja2VyLWhvc3QtLWJsb2NrXSc6ICdibG9jaygpJyxcbiAgICAnW2NsYXNzLmdlby1maWxlLXBpY2tlci1ob3N0LS1lcnJvcl0nOiAnZXJyb3IoKScsXG4gICAgJ1tjbGFzcy5nZW8tZmlsZS1waWNrZXItaG9zdC0tZGlzYWJsZWRdJzogJ2lzRGlzYWJsZWQoKScsXG4gICAgJ1tzdHlsZS53aWR0aF0nOiAnaG9zdFdpZHRoKCknLFxuICB9LFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdlb0ZpbGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvRmlsZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHJlYWRvbmx5IGZpbGVJbnB1dCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PignZmlsZUlucHV0Jyk7XG5cbiAgcmVhZG9ubHkgbGFiZWwgPSBpbnB1dCgnVOG6o2kgZmlsZScpO1xuICByZWFkb25seSBwbGFjZWhvbGRlciA9IGlucHV0KCdDaOG7jW4gZ2nDoSB0cuG7iycpO1xuICByZWFkb25seSBidXR0b25UZXh0ID0gaW5wdXQoJ0No4buNbiBmaWxlJyk7XG4gIHJlYWRvbmx5IHJlcXVpcmVkID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcbiAgcmVhZG9ubHkgYWNjZXB0ID0gaW5wdXQoJycpO1xuICByZWFkb25seSBtdWx0aXBsZSA9IGlucHV0KGZhbHNlKTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IGVycm9yTWVzc2FnZSA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgYmxvY2sgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IHdpZHRoID0gaW5wdXQ8bnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogVMOqbiBmaWxlIMSRw6MgdXBsb2FkIChzZXJ2ZXIpIOKAlCBoaeG7h24ga2hpIGNoxrBhIGPDsyBGaWxlIGxvY2FsIHRyb25nIENWQS5cbiAgICogRMO5bmcgY2hvIGZsb3c6IGNo4buNbiBmaWxlIOKGkiB1cGxvYWQg4oaSIGdp4buvIHTDqm4gdOG7qyBBUEkuXG4gICAqL1xuICByZWFkb25seSBzZWxlY3RlZE5hbWUgPSBpbnB1dCgnJyk7XG5cbiAgcmVhZG9ubHkgZmlsZUNoYW5nZSA9IG91dHB1dDxGaWxlIHwgRmlsZVtdIHwgbnVsbD4oKTtcblxuICByZWFkb25seSBlcnJvck1lc3NhZ2VJZCA9IGBnZW8tZmlsZS1waWNrZXItZXJyb3ItJHsrK3VpRmlsZVBpY2tlckVycm9ySWR9YDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVkRnJvbUN2YSA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGlzRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy5kaXNhYmxlZEZyb21DdmEoKSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZhbHVlID0gc2lnbmFsPEZpbGUgfCBGaWxlW10gfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IEZpbGUgfCBGaWxlW10gfCBudWxsKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcblxuICByZWFkb25seSBob3N0V2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoKCk7XG4gICAgaWYgKHRoaXMuYmxvY2soKSB8fCB3aWR0aCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyA/IGAke3dpZHRofXB4YCA6IHdpZHRoO1xuICB9KTtcblxuICByZWFkb25seSBkaXNwbGF5VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZmlsZSkgPT4gZmlsZS5uYW1lKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5uYW1lO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTmFtZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcigpO1xuICB9KTtcblxuICByZWFkb25seSBoYXNWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWROYW1lKCk7XG4gIH0pO1xuXG4gIG9wZW5GaWxlUGlja2VyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmlsZUlucHV0KCk/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZXMgPSBpbnB1dC5maWxlcztcblxuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy5tdWx0aXBsZSgpID8gQXJyYXkuZnJvbShmaWxlcykgOiBmaWxlc1swXTtcbiAgICB0aGlzLnNldFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgaW5wdXQudmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IEZpbGUgfCBGaWxlW10gfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogRmlsZSB8IEZpbGVbXSB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IEZpbGUgfCBGaWxlW10gfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZEZyb21DdmEuc2V0KGlzRGlzYWJsZWQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCJAaWYgKGxhYmVsKCkpIHtcbiAgPGRpdiBjbGFzcz1cImdlby1maWxlLXBpY2tlcl9fbGFiZWxcIj5cbiAgICA8c3Bhbj57eyBsYWJlbCgpIH19PC9zcGFuPlxuICAgIEBpZiAocmVxdWlyZWQoKSkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJnZW8tZmlsZS1waWNrZXJfX3JlcXVpcmVkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICB9XG4gIDwvZGl2PlxufVxuXG48ZGl2XG4gIGNsYXNzPVwiZ2VvLWZpbGUtcGlja2VyX19jb250cm9sXCJcbiAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yKCkgPyAndHJ1ZScgOiBudWxsXCJcbiAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJlcnJvcigpICYmIGVycm9yTWVzc2FnZSgpID8gZXJyb3JNZXNzYWdlSWQgOiBudWxsXCJcbj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cImdlby1maWxlLXBpY2tlcl9fdmFsdWVcIlxuICAgIFtjbGFzcy5nZW8tZmlsZS1waWNrZXJfX3ZhbHVlLS1wbGFjZWhvbGRlcl09XCIhaGFzVmFsdWUoKVwiXG4gID5cbiAgICB7eyBkaXNwbGF5VmFsdWUoKSB9fVxuICA8L3NwYW4+XG5cbiAgPGlucHV0XG4gICAgI2ZpbGVJbnB1dFxuICAgIGNsYXNzPVwiZ2VvLWZpbGUtcGlja2VyX19pbnB1dFwiXG4gICAgdHlwZT1cImZpbGVcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFthY2NlcHRdPVwiYWNjZXB0KClcIlxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAvPlxuXG4gIDxnZW8tYnV0dG9uXG4gICAgY2xhc3M9XCJnZW8tZmlsZS1waWNrZXJfX2J1dHRvblwiXG4gICAgYXBwZWFyYW5jZT1cInByaW1hcnlcIlxuICAgIGNvbG9yPVwiYnJhbmRcIlxuICAgIGljb249XCJwbHVzXCJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCJcbiAgICAoY2xpY2tlZCk9XCJvcGVuRmlsZVBpY2tlcigpXCJcbiAgPlxuICAgIHt7IGJ1dHRvblRleHQoKSB9fVxuICA8L2dlby1idXR0b24+XG48L2Rpdj5cblxuQGlmIChlcnJvcigpICYmIGVycm9yTWVzc2FnZSgpKSB7XG4gIDxwIGNsYXNzPVwiZ2VvLWZpbGUtcGlja2VyX19lcnJvclwiIFtpZF09XCJlcnJvck1lc3NhZ2VJZFwiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yTWVzc2FnZSgpIH19PC9wPlxufVxuIl19
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, model, output, signal, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { GeoAlertComponent } from '../geo-alert/geo-alert.component';
|
|
4
|
+
import { GeoButtonComponent } from '../geo-button/geo-button.component';
|
|
5
|
+
import { GeoInputComponent } from '../geo-input/geo-input.component';
|
|
6
|
+
import { GeoTypographyComponent } from '../geo-typography/geo-typography.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/forms";
|
|
9
|
+
/**
|
|
10
|
+
* Forgot password form (STT 36).
|
|
11
|
+
*
|
|
12
|
+
* @summary Form quên mật khẩu — nhập email để lấy lại mật khẩu.
|
|
13
|
+
* @whenToUse Màn Quên mật khẩu từ đăng nhập.
|
|
14
|
+
* @doNotUseWhen Inline password reset inside profile settings.
|
|
15
|
+
*/
|
|
16
|
+
export class GeoForgotPasswordComponent {
|
|
17
|
+
title = input('Quên mật khẩu');
|
|
18
|
+
subtitle = input('Nhập email đã đăng ký để nhận mật khẩu mới.');
|
|
19
|
+
loading = input(false);
|
|
20
|
+
errorMessage = input('');
|
|
21
|
+
successMessage = input('');
|
|
22
|
+
email = model('');
|
|
23
|
+
submitEmail = output();
|
|
24
|
+
backToLogin = output();
|
|
25
|
+
submitted = signal(false);
|
|
26
|
+
emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
27
|
+
emailInvalid() {
|
|
28
|
+
const value = this.email().trim();
|
|
29
|
+
return !value || !this.emailPattern.test(value);
|
|
30
|
+
}
|
|
31
|
+
submit() {
|
|
32
|
+
this.submitted.set(true);
|
|
33
|
+
if (this.emailInvalid()) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.submitEmail.emit(this.email().trim());
|
|
37
|
+
}
|
|
38
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoForgotPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
39
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoForgotPasswordComponent, isStandalone: true, selector: "geo-forgot-password", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, successMessage: { classPropertyName: "successMessage", publicName: "successMessage", isSignal: true, isRequired: false, transformFunction: null }, email: { classPropertyName: "email", publicName: "email", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { email: "emailChange", submitEmail: "submitEmail", backToLogin: "backToLogin" }, host: { classAttribute: "geo-forgot-password-host" }, ngImport: i0, template: "<section class=\"geo-forgot-password\" aria-label=\"Qu\u00EAn m\u1EADt kh\u1EA9u\">\n <header class=\"geo-forgot-password__header\">\n <geo-typography variant=\"h3\">{{ title() }}</geo-typography>\n @if (subtitle()) {\n <geo-typography variant=\"body\" color=\"secondary\">{{ subtitle() }}</geo-typography>\n }\n </header>\n\n @if (errorMessage()) {\n <geo-alert\n type=\"error\"\n title=\"Kh\u00F4ng th\u1EC3 l\u1EA5y l\u1EA1i m\u1EADt kh\u1EA9u\"\n [message]=\"errorMessage()\"\n [closable]=\"false\"\n />\n }\n @if (successMessage()) {\n <geo-alert\n type=\"success\"\n title=\"\u0110\u00E3 g\u1EEDi y\u00EAu c\u1EA7u\"\n [message]=\"successMessage()\"\n [closable]=\"false\"\n />\n }\n\n <form class=\"geo-forgot-password__form\" (ngSubmit)=\"submit()\">\n <geo-input\n label=\"Email\"\n type=\"email\"\n placeholder=\"Nh\u1EADp email \u0111\u0103ng k\u00FD\"\n [required]=\"true\"\n [block]=\"true\"\n [error]=\"submitted() && emailInvalid()\"\n [errorMessage]=\"\n !email().trim()\n ? 'Vui l\u00F2ng nh\u1EADp email'\n : 'Email ch\u01B0a \u0111\u00FAng \u0111\u1ECBnh d\u1EA1ng'\n \"\n [ngModel]=\"email()\"\n (ngModelChange)=\"email.set($event)\"\n name=\"email\"\n />\n\n <div class=\"geo-forgot-password__actions\">\n <geo-button appearance=\"secondary\" type=\"button\" (clicked)=\"backToLogin.emit()\">\n Quay l\u1EA1i \u0111\u0103ng nh\u1EADp\n </geo-button>\n <geo-button appearance=\"primary\" type=\"submit\" [disabled]=\"loading()\">\n {{ loading() ? '\u0110ang g\u1EEDi\u2026' : 'L\u1EA5y l\u1EA1i m\u1EADt kh\u1EA9u' }}\n </geo-button>\n </div>\n </form>\n</section>\n", styles: [".geo-forgot-password-host{display:block;max-width:420px}.geo-forgot-password{display:flex;flex-direction:column;gap:16px;padding:28px 24px;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated)}.geo-forgot-password__header{display:flex;flex-direction:column;gap:4px}.geo-forgot-password__form{display:flex;flex-direction:column;gap:14px}.geo-forgot-password__actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: GeoAlertComponent, selector: "geo-alert", inputs: ["type", "title", "message", "closable", "visible", "showIcon"], outputs: ["visibleChange", "closed"] }, { kind: "component", type: GeoButtonComponent, selector: "geo-button", inputs: ["appearance", "color", "icon", "iconTheme", "iconPlacement", "iconOnly", "type", "disabled", "tooltip", "tooltipPlacement", "active", "title"], outputs: ["clicked"] }, { kind: "component", type: GeoInputComponent, selector: "geo-input", inputs: ["label", "placeholder", "type", "disabled", "readonly", "required", "error", "errorMessage", "maxlength", "prefixIcon", "suffixIcon", "allowClear", "block", "width"], outputs: ["valueChange", "enterPressed"] }, { kind: "component", type: GeoTypographyComponent, selector: "geo-typography", inputs: ["variant", "color", "strong", "underline", "delete", "mark", "code", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
40
|
+
}
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoForgotPasswordComponent, decorators: [{
|
|
42
|
+
type: Component,
|
|
43
|
+
args: [{ selector: 'geo-forgot-password', standalone: true, imports: [
|
|
44
|
+
FormsModule,
|
|
45
|
+
GeoAlertComponent,
|
|
46
|
+
GeoButtonComponent,
|
|
47
|
+
GeoInputComponent,
|
|
48
|
+
GeoTypographyComponent,
|
|
49
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'geo-forgot-password-host' }, template: "<section class=\"geo-forgot-password\" aria-label=\"Qu\u00EAn m\u1EADt kh\u1EA9u\">\n <header class=\"geo-forgot-password__header\">\n <geo-typography variant=\"h3\">{{ title() }}</geo-typography>\n @if (subtitle()) {\n <geo-typography variant=\"body\" color=\"secondary\">{{ subtitle() }}</geo-typography>\n }\n </header>\n\n @if (errorMessage()) {\n <geo-alert\n type=\"error\"\n title=\"Kh\u00F4ng th\u1EC3 l\u1EA5y l\u1EA1i m\u1EADt kh\u1EA9u\"\n [message]=\"errorMessage()\"\n [closable]=\"false\"\n />\n }\n @if (successMessage()) {\n <geo-alert\n type=\"success\"\n title=\"\u0110\u00E3 g\u1EEDi y\u00EAu c\u1EA7u\"\n [message]=\"successMessage()\"\n [closable]=\"false\"\n />\n }\n\n <form class=\"geo-forgot-password__form\" (ngSubmit)=\"submit()\">\n <geo-input\n label=\"Email\"\n type=\"email\"\n placeholder=\"Nh\u1EADp email \u0111\u0103ng k\u00FD\"\n [required]=\"true\"\n [block]=\"true\"\n [error]=\"submitted() && emailInvalid()\"\n [errorMessage]=\"\n !email().trim()\n ? 'Vui l\u00F2ng nh\u1EADp email'\n : 'Email ch\u01B0a \u0111\u00FAng \u0111\u1ECBnh d\u1EA1ng'\n \"\n [ngModel]=\"email()\"\n (ngModelChange)=\"email.set($event)\"\n name=\"email\"\n />\n\n <div class=\"geo-forgot-password__actions\">\n <geo-button appearance=\"secondary\" type=\"button\" (clicked)=\"backToLogin.emit()\">\n Quay l\u1EA1i \u0111\u0103ng nh\u1EADp\n </geo-button>\n <geo-button appearance=\"primary\" type=\"submit\" [disabled]=\"loading()\">\n {{ loading() ? '\u0110ang g\u1EEDi\u2026' : 'L\u1EA5y l\u1EA1i m\u1EADt kh\u1EA9u' }}\n </geo-button>\n </div>\n </form>\n</section>\n", styles: [".geo-forgot-password-host{display:block;max-width:420px}.geo-forgot-password{display:flex;flex-direction:column;gap:16px;padding:28px 24px;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated)}.geo-forgot-password__header{display:flex;flex-direction:column;gap:4px}.geo-forgot-password__form{display:flex;flex-direction:column;gap:14px}.geo-forgot-password__actions{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:8px}\n"] }]
|
|
50
|
+
}] });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWZvcmdvdC1wYXNzd29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tZm9yZ290LXBhc3N3b3JkL2dlby1mb3Jnb3QtcGFzc3dvcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWZvcmdvdC1wYXNzd29yZC9nZW8tZm9yZ290LXBhc3N3b3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7QUFFcEY7Ozs7OztHQU1HO0FBaUJILE1BQU0sT0FBTywwQkFBMEI7SUFDNUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQixRQUFRLEdBQUcsS0FBSyxDQUN2Qiw2Q0FBNkMsQ0FDOUMsQ0FBQztJQUNPLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsWUFBWSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixjQUFjLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTNCLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbEIsV0FBVyxHQUFHLE1BQU0sRUFBVSxDQUFDO0lBQy9CLFdBQVcsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUU3QixTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxCLFlBQVksR0FDM0IsNEJBQTRCLENBQUM7SUFFL0IsWUFBWTtRQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQzt3R0E5QlUsMEJBQTBCOzRGQUExQiwwQkFBMEIsMi9CQ3RDdkMsNHZEQXFEQSxpakJEM0JJLFdBQVcscS9CQUNYLGlCQUFpQixxS0FDakIsa0JBQWtCLHNPQUNsQixpQkFBaUIsZ1JBQ2pCLHNCQUFzQjs7NEZBUWIsMEJBQTBCO2tCQWhCdEMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGlCQUFpQjt3QkFDakIsc0JBQXNCO3FCQUN2QixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgR2VvQWxlcnRDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tYWxlcnQvZ2VvLWFsZXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9nZW8tYnV0dG9uL2dlby1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEdlb0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLWlucHV0L2dlby1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvVHlwb2dyYXBoeUNvbXBvbmVudCB9IGZyb20gJy4uL2dlby10eXBvZ3JhcGh5L2dlby10eXBvZ3JhcGh5LmNvbXBvbmVudCc7XG5cbi8qKlxuICogRm9yZ290IHBhc3N3b3JkIGZvcm0gKFNUVCAzNikuXG4gKlxuICogQHN1bW1hcnkgRm9ybSBxdcOqbiBt4bqtdCBraOG6qXUg4oCUIG5o4bqtcCBlbWFpbCDEkeG7gyBs4bqleSBs4bqhaSBt4bqtdCBraOG6qXUuXG4gKiBAd2hlblRvVXNlIE3DoG4gUXXDqm4gbeG6rXQga2jhuql1IHThu6sgxJHEg25nIG5o4bqtcC5cbiAqIEBkb05vdFVzZVdoZW4gSW5saW5lIHBhc3N3b3JkIHJlc2V0IGluc2lkZSBwcm9maWxlIHNldHRpbmdzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tZm9yZ290LXBhc3N3b3JkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIEdlb0FsZXJ0Q29tcG9uZW50LFxuICAgIEdlb0J1dHRvbkNvbXBvbmVudCxcbiAgICBHZW9JbnB1dENvbXBvbmVudCxcbiAgICBHZW9UeXBvZ3JhcGh5Q29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLWZvcmdvdC1wYXNzd29yZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tZm9yZ290LXBhc3N3b3JkLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHsgY2xhc3M6ICdnZW8tZm9yZ290LXBhc3N3b3JkLWhvc3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0ZvcmdvdFBhc3N3b3JkQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dCgnUXXDqm4gbeG6rXQga2jhuql1Jyk7XG4gIHJlYWRvbmx5IHN1YnRpdGxlID0gaW5wdXQoXG4gICAgJ05o4bqtcCBlbWFpbCDEkcOjIMSRxINuZyBrw70gxJHhu4Mgbmjhuq1uIG3huq10IGto4bqpdSBt4bubaS4nLFxuICApO1xuICByZWFkb25seSBsb2FkaW5nID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSBlcnJvck1lc3NhZ2UgPSBpbnB1dCgnJyk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NNZXNzYWdlID0gaW5wdXQoJycpO1xuXG4gIHJlYWRvbmx5IGVtYWlsID0gbW9kZWwoJycpO1xuXG4gIHJlYWRvbmx5IHN1Ym1pdEVtYWlsID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYmFja1RvTG9naW4gPSBvdXRwdXQ8dm9pZD4oKTtcblxuICByZWFkb25seSBzdWJtaXR0ZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZW1haWxQYXR0ZXJuID1cbiAgICAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLztcblxuICBlbWFpbEludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmVtYWlsKCkudHJpbSgpO1xuICAgIHJldHVybiAhdmFsdWUgfHwgIXRoaXMuZW1haWxQYXR0ZXJuLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgc3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMuc3VibWl0dGVkLnNldCh0cnVlKTtcbiAgICBpZiAodGhpcy5lbWFpbEludmFsaWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN1Ym1pdEVtYWlsLmVtaXQodGhpcy5lbWFpbCgpLnRyaW0oKSk7XG4gIH1cbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwiZ2VvLWZvcmdvdC1wYXNzd29yZFwiIGFyaWEtbGFiZWw9XCJRdcOqbiBt4bqtdCBraOG6qXVcIj5cbiAgPGhlYWRlciBjbGFzcz1cImdlby1mb3Jnb3QtcGFzc3dvcmRfX2hlYWRlclwiPlxuICAgIDxnZW8tdHlwb2dyYXBoeSB2YXJpYW50PVwiaDNcIj57eyB0aXRsZSgpIH19PC9nZW8tdHlwb2dyYXBoeT5cbiAgICBAaWYgKHN1YnRpdGxlKCkpIHtcbiAgICAgIDxnZW8tdHlwb2dyYXBoeSB2YXJpYW50PVwiYm9keVwiIGNvbG9yPVwic2Vjb25kYXJ5XCI+e3sgc3VidGl0bGUoKSB9fTwvZ2VvLXR5cG9ncmFwaHk+XG4gICAgfVxuICA8L2hlYWRlcj5cblxuICBAaWYgKGVycm9yTWVzc2FnZSgpKSB7XG4gICAgPGdlby1hbGVydFxuICAgICAgdHlwZT1cImVycm9yXCJcbiAgICAgIHRpdGxlPVwiS2jDtG5nIHRo4buDIGzhuqV5IGzhuqFpIG3huq10IGto4bqpdVwiXG4gICAgICBbbWVzc2FnZV09XCJlcnJvck1lc3NhZ2UoKVwiXG4gICAgICBbY2xvc2FibGVdPVwiZmFsc2VcIlxuICAgIC8+XG4gIH1cbiAgQGlmIChzdWNjZXNzTWVzc2FnZSgpKSB7XG4gICAgPGdlby1hbGVydFxuICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgdGl0bGU9XCLEkMOjIGfhu61pIHnDqnUgY+G6p3VcIlxuICAgICAgW21lc3NhZ2VdPVwic3VjY2Vzc01lc3NhZ2UoKVwiXG4gICAgICBbY2xvc2FibGVdPVwiZmFsc2VcIlxuICAgIC8+XG4gIH1cblxuICA8Zm9ybSBjbGFzcz1cImdlby1mb3Jnb3QtcGFzc3dvcmRfX2Zvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0KClcIj5cbiAgICA8Z2VvLWlucHV0XG4gICAgICBsYWJlbD1cIkVtYWlsXCJcbiAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICBwbGFjZWhvbGRlcj1cIk5o4bqtcCBlbWFpbCDEkcSDbmcga8O9XCJcbiAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgIFtlcnJvcl09XCJzdWJtaXR0ZWQoKSAmJiBlbWFpbEludmFsaWQoKVwiXG4gICAgICBbZXJyb3JNZXNzYWdlXT1cIlxuICAgICAgICAhZW1haWwoKS50cmltKClcbiAgICAgICAgICA/ICdWdWkgbMOybmcgbmjhuq1wIGVtYWlsJ1xuICAgICAgICAgIDogJ0VtYWlsIGNoxrBhIMSRw7puZyDEkeG7i25oIGThuqFuZydcbiAgICAgIFwiXG4gICAgICBbbmdNb2RlbF09XCJlbWFpbCgpXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImVtYWlsLnNldCgkZXZlbnQpXCJcbiAgICAgIG5hbWU9XCJlbWFpbFwiXG4gICAgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJnZW8tZm9yZ290LXBhc3N3b3JkX19hY3Rpb25zXCI+XG4gICAgICA8Z2VvLWJ1dHRvbiBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGlja2VkKT1cImJhY2tUb0xvZ2luLmVtaXQoKVwiPlxuICAgICAgICBRdWF5IGzhuqFpIMSRxINuZyBuaOG6rXBcbiAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgIDxnZW8tYnV0dG9uIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJsb2FkaW5nKClcIj5cbiAgICAgICAge3sgbG9hZGluZygpID8gJ8SQYW5nIGfhu61p4oCmJyA6ICdM4bqleSBs4bqhaSBt4bqtdCBraOG6qXUnIH19XG4gICAgICA8L2dlby1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvc2VjdGlvbj5cbiJdfQ==
|