@geoit/ui 0.0.8 → 0.1.1
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/ai/AGENTS.md +4 -0
- package/ai/README.md +4 -1
- package/ai/catalog.json +202 -56
- package/ai/components/geo-accordion.md +92 -0
- package/ai/components/geo-detail-view.md +91 -0
- package/ai/components/geo-map-admin-filter.md +0 -1
- package/ai/components/geo-map-legend.md +0 -1
- package/ai/components/geo-map-shell.md +3 -7
- package/ai/components/geo-switch.md +76 -0
- package/ai/components/geo-tree.md +0 -2
- package/ai/mockup.html +2 -2
- package/esm2022/lib/figma/geo-accordion/geo-accordion.component.mjs +67 -0
- package/esm2022/lib/figma/geo-accordion/geo-accordion.types.mjs +2 -0
- package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +3 -14
- package/esm2022/lib/figma/geo-detail-view/geo-detail-view.component.mjs +47 -0
- package/esm2022/lib/figma/geo-detail-view/geo-detail-view.types.mjs +2 -0
- package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +3 -5
- package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +3 -5
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +16 -39
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.util.mjs +38 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +2 -2
- package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +23 -20
- package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +3 -3
- package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +5 -5
- package/esm2022/lib/figma/geo-switch/geo-switch.component.mjs +44 -0
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +3 -17
- package/esm2022/lib/figma/index.mjs +6 -1
- package/fesm2022/geoit-ui.mjs +262 -130
- package/fesm2022/geoit-ui.mjs.map +1 -1
- package/lib/figma/geo-accordion/geo-accordion.component.d.ts +34 -0
- package/lib/figma/geo-accordion/geo-accordion.types.d.ts +7 -0
- package/lib/figma/geo-chart/geo-chart.component.d.ts +0 -9
- package/lib/figma/geo-detail-view/geo-detail-view.component.d.ts +30 -0
- package/lib/figma/geo-detail-view/geo-detail-view.types.d.ts +8 -0
- package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +1 -3
- package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +1 -3
- package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.util.d.ts +16 -0
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +6 -14
- package/lib/figma/geo-map/geo-map.constants.d.ts +3 -3
- package/lib/figma/geo-switch/geo-switch.component.d.ts +25 -0
- package/lib/figma/geo-tree/geo-tree.component.d.ts +1 -5
- package/lib/figma/index.d.ts +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# geo-switch
|
|
2
|
+
|
|
3
|
+
> Complete usage reference for **GeoSwitchComponent** (`@geoit/ui`)
|
|
4
|
+
>
|
|
5
|
+
> Read this file before using the component. Use **only** the Inputs/Outputs listed here.
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
On/off toggle (nz-switch) with optional trailing label; bind with [(checked)] (not CVA).
|
|
9
|
+
|
|
10
|
+
## Import
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { GeoSwitchComponent } from '@geoit/ui';
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Add to the consuming standalone component:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
imports: [GeoSwitchComponent]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Selector
|
|
23
|
+
`geo-switch`
|
|
24
|
+
|
|
25
|
+
## Category
|
|
26
|
+
`forms`
|
|
27
|
+
|
|
28
|
+
## When to use
|
|
29
|
+
Bật/tắt trạng thái tức thì, không cần nút Lưu — hiển thị/ẩn, kích hoạt/vô hiệu hóa.
|
|
30
|
+
|
|
31
|
+
## Do not use when
|
|
32
|
+
Lựa chọn trong form cần submit — use geo-checkbox.
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
## Binding
|
|
36
|
+
|
|
37
|
+
Standalone component — drive via Inputs (`input()` / `model()`) and Outputs (`output()`). Banana bindings work for any `model()` fields (e.g. `[(open)]`, `[(pageIndex)]`).
|
|
38
|
+
|
|
39
|
+
## Inputs
|
|
40
|
+
|
|
41
|
+
Every supported Input (do not invent others):
|
|
42
|
+
|
|
43
|
+
| Input | Type | Default | Description |
|
|
44
|
+
|-------|------|---------|-------------|
|
|
45
|
+
| `label` | `string` | `''` | — |
|
|
46
|
+
| `checked` | `boolean` | `false` | Two-way: `[(checked)]`. — Two-way `model()` (supports banana binding). |
|
|
47
|
+
| `disabled` | `boolean` | `false` | — |
|
|
48
|
+
| `loading` | `boolean` | `false` | — |
|
|
49
|
+
| `size` | `'default' \| 'small'` | `'default'` | — |
|
|
50
|
+
| `checkedLabel` | `string` | `''` | Text hiển thị trong pill khi bật. |
|
|
51
|
+
| `uncheckedLabel` | `string` | `''` | Text hiển thị trong pill khi tắt. |
|
|
52
|
+
|
|
53
|
+
## Outputs
|
|
54
|
+
|
|
55
|
+
_None_
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## Examples
|
|
59
|
+
|
|
60
|
+
### Example
|
|
61
|
+
|
|
62
|
+
```html
|
|
63
|
+
<geo-switch label="Kích hoạt" [(checked)]="active"></geo-switch>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Package path
|
|
67
|
+
`node_modules/@geoit/ui/ai/components/geo-switch.md`
|
|
68
|
+
|
|
69
|
+
## Source
|
|
70
|
+
`projects/geo-ui/src/lib/figma/geo-switch/geo-switch.component.ts`
|
|
71
|
+
|
|
72
|
+
## Rules for AI / consumers
|
|
73
|
+
- Prefer this component over raw ng-zorro / HTML for the same UI role.
|
|
74
|
+
- Use design tokens (`var(--geo-*)`) — never hardcode brand colors or radius.
|
|
75
|
+
- Match props exactly to the Inputs table; do not invent unsupported inputs.
|
|
76
|
+
- Copy examples and adapt labels/bindings only.
|
|
@@ -47,9 +47,7 @@ Every supported Input (do not invent others):
|
|
|
47
47
|
|-------|------|---------|-------------|
|
|
48
48
|
| `nodes` | `GeoTreeNode[]` | `[]` | — |
|
|
49
49
|
| `checkable` | `boolean` | `false` | — |
|
|
50
|
-
| `selectionMode` | `'single' \| 'multi'` | `'multi'` | `single` — click chọn đúng 1 node (BR-06-03); `multi` — giữ hành vi checkbox hiện có. |
|
|
51
50
|
| `checkedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
52
|
-
| `selectedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
53
51
|
| `expandedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
54
52
|
| `showLine` | `boolean` | `false` | — |
|
|
55
53
|
| `blockNode` | `boolean` | `false` | — |
|
package/ai/mockup.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>@geoit/ui — Component mockup (design tokens)</title>
|
|
7
7
|
<!-- Generated by tools/generate-mockup.js — do not edit ai/mockup.html by hand -->
|
|
8
|
-
<!-- 2026-09-
|
|
8
|
+
<!-- 2026-09-11T02:34:24.225Z -->
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
11
11
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
|
@@ -685,7 +685,7 @@
|
|
|
685
685
|
HTML tĩnh mô phỏng visual của các <code>geo-*</code> trong <code>ai/components</code>,
|
|
686
686
|
dùng đúng CSS variables từ <code>design-tokens.scss</code>.
|
|
687
687
|
Tokens được inject tự động khi <code>npm run ai:docs</code> / <code>npm run build</code>.
|
|
688
|
-
<br /><span class="typo-caption typo-secondary">Generated 2026-09-
|
|
688
|
+
<br /><span class="typo-caption typo-secondary">Generated 2026-09-11T02:34:24.225Z · source: projects/geo-ui/src/lib/styles/design-tokens.scss · 69 component docs in ai/components</span>
|
|
689
689
|
</p>
|
|
690
690
|
</header>
|
|
691
691
|
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChildren, Directive, inject, input, model, output, TemplateRef, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
3
|
+
import { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "ng-zorro-antd/collapse";
|
|
6
|
+
export class GeoAccordionPanelDirective {
|
|
7
|
+
key = input.required({ alias: 'uiPanel' });
|
|
8
|
+
template = inject((TemplateRef));
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoAccordionPanelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
10
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: GeoAccordionPanelDirective, isStandalone: true, selector: "[uiPanel]", inputs: { key: { classPropertyName: "key", publicName: "uiPanel", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoAccordionPanelDirective, decorators: [{
|
|
13
|
+
type: Directive,
|
|
14
|
+
args: [{
|
|
15
|
+
selector: '[uiPanel]',
|
|
16
|
+
standalone: true,
|
|
17
|
+
}]
|
|
18
|
+
}] });
|
|
19
|
+
/**
|
|
20
|
+
* Collapsible panel group.
|
|
21
|
+
*
|
|
22
|
+
* @summary Nhóm panel thu gọn/mở rộng (nz-collapse); mỗi panel chiếu nội dung qua `[uiPanel]`.
|
|
23
|
+
* @whenToUse Gom nhiều nhóm thông tin dài trên cùng trang (FAQ, chi tiết theo mục).
|
|
24
|
+
* @doNotUseWhen Điều hướng giữa các view ngang hàng — use geo-tabs.
|
|
25
|
+
*/
|
|
26
|
+
export class GeoAccordionComponent {
|
|
27
|
+
items = input([]);
|
|
28
|
+
/** `true` → chỉ 1 panel mở tại một thời điểm (maps to `nzAccordion`). */
|
|
29
|
+
accordion = input(false);
|
|
30
|
+
bordered = input(true);
|
|
31
|
+
ghost = input(false);
|
|
32
|
+
activeKeys = model([]);
|
|
33
|
+
panelChange = output();
|
|
34
|
+
panelTemplates;
|
|
35
|
+
isActive(key) {
|
|
36
|
+
return this.activeKeys().includes(key);
|
|
37
|
+
}
|
|
38
|
+
onActiveChange(key, active) {
|
|
39
|
+
if (this.accordion()) {
|
|
40
|
+
this.activeKeys.set(active ? [key] : []);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const next = new Set(this.activeKeys());
|
|
44
|
+
if (active) {
|
|
45
|
+
next.add(key);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
next.delete(key);
|
|
49
|
+
}
|
|
50
|
+
this.activeKeys.set([...next]);
|
|
51
|
+
}
|
|
52
|
+
this.panelChange.emit({ key, active });
|
|
53
|
+
}
|
|
54
|
+
getTemplate(key) {
|
|
55
|
+
return this.panelTemplates?.find((panel) => panel.key() === key)?.template ?? null;
|
|
56
|
+
}
|
|
57
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoAccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
58
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoAccordionComponent, isStandalone: true, selector: "geo-accordion", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, accordion: { classPropertyName: "accordion", publicName: "accordion", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, ghost: { classPropertyName: "ghost", publicName: "ghost", isSignal: true, isRequired: false, transformFunction: null }, activeKeys: { classPropertyName: "activeKeys", publicName: "activeKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeKeys: "activeKeysChange", panelChange: "panelChange" }, host: { classAttribute: "geo-accordion-host" }, queries: [{ propertyName: "panelTemplates", predicate: GeoAccordionPanelDirective }], ngImport: i0, template: "<nz-collapse\n class=\"geo-accordion\"\n [nzAccordion]=\"accordion()\"\n [nzBordered]=\"bordered()\"\n [nzGhost]=\"ghost()\"\n>\n @for (item of items(); track item.key) {\n <nz-collapse-panel\n [nzHeader]=\"item.title\"\n [nzActive]=\"isActive(item.key)\"\n [nzDisabled]=\"item.disabled ?? false\"\n [nzExtra]=\"item.extra ?? ''\"\n (nzActiveChange)=\"onActiveChange(item.key, $event)\"\n >\n @if (getTemplate(item.key); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n }\n </nz-collapse-panel>\n }\n</nz-collapse>\n", styles: [".geo-accordion-host{display:block;width:100%}.geo-accordion.ant-collapse{background:transparent;border-color:var(--geo-color-border-default);border-radius:var(--geo-radius)}.geo-accordion .ant-collapse-item{border-color:var(--geo-color-border-default)}.geo-accordion .ant-collapse-header{font-family:var(--geo-font-family);font-size:14px;font-weight:500;color:var(--geo-color-neutral-900);padding:12px 16px}.geo-accordion .ant-collapse-item-active>.ant-collapse-header{color:var(--geo-color-primary-default)}.geo-accordion .ant-collapse-item-disabled>.ant-collapse-header,.geo-accordion .ant-collapse-item-disabled>.ant-collapse-header .ant-collapse-header-text{color:var(--geo-color-neutral-disabled-text)}.geo-accordion .ant-collapse-content-box{padding:12px 16px 16px;font-size:14px;color:var(--geo-color-neutral-900)}.geo-accordion .ant-collapse-extra{color:var(--geo-color-neutral-500);font-size:13px}\n"], dependencies: [{ kind: "ngmodule", type: NgZorroAntdModule }, { kind: "component", type: i1.NzCollapsePanelComponent, selector: "nz-collapse-panel", inputs: ["nzActive", "nzDisabled", "nzShowArrow", "nzExtra", "nzHeader", "nzExpandedIcon"], outputs: ["nzActiveChange"], exportAs: ["nzCollapsePanel"] }, { kind: "component", type: i1.NzCollapseComponent, selector: "nz-collapse", inputs: ["nzAccordion", "nzBordered", "nzGhost", "nzExpandIconPosition"], exportAs: ["nzCollapse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoAccordionComponent, decorators: [{
|
|
61
|
+
type: Component,
|
|
62
|
+
args: [{ selector: 'geo-accordion', standalone: true, imports: [NgZorroAntdModule, NgTemplateOutlet], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'geo-accordion-host' }, template: "<nz-collapse\n class=\"geo-accordion\"\n [nzAccordion]=\"accordion()\"\n [nzBordered]=\"bordered()\"\n [nzGhost]=\"ghost()\"\n>\n @for (item of items(); track item.key) {\n <nz-collapse-panel\n [nzHeader]=\"item.title\"\n [nzActive]=\"isActive(item.key)\"\n [nzDisabled]=\"item.disabled ?? false\"\n [nzExtra]=\"item.extra ?? ''\"\n (nzActiveChange)=\"onActiveChange(item.key, $event)\"\n >\n @if (getTemplate(item.key); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n }\n </nz-collapse-panel>\n }\n</nz-collapse>\n", styles: [".geo-accordion-host{display:block;width:100%}.geo-accordion.ant-collapse{background:transparent;border-color:var(--geo-color-border-default);border-radius:var(--geo-radius)}.geo-accordion .ant-collapse-item{border-color:var(--geo-color-border-default)}.geo-accordion .ant-collapse-header{font-family:var(--geo-font-family);font-size:14px;font-weight:500;color:var(--geo-color-neutral-900);padding:12px 16px}.geo-accordion .ant-collapse-item-active>.ant-collapse-header{color:var(--geo-color-primary-default)}.geo-accordion .ant-collapse-item-disabled>.ant-collapse-header,.geo-accordion .ant-collapse-item-disabled>.ant-collapse-header .ant-collapse-header-text{color:var(--geo-color-neutral-disabled-text)}.geo-accordion .ant-collapse-content-box{padding:12px 16px 16px;font-size:14px;color:var(--geo-color-neutral-900)}.geo-accordion .ant-collapse-extra{color:var(--geo-color-neutral-500);font-size:13px}\n"] }]
|
|
63
|
+
}], propDecorators: { panelTemplates: [{
|
|
64
|
+
type: ContentChildren,
|
|
65
|
+
args: [GeoAccordionPanelDirective]
|
|
66
|
+
}] } });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWFjY29yZGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tYWNjb3JkaW9uL2dlby1hY2NvcmRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWFjY29yZGlvbi9nZW8tYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7OztBQU94RSxNQUFNLE9BQU8sMEJBQTBCO0lBQzVCLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbkQsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQW9CLENBQUEsQ0FBQyxDQUFDO3dHQUZ0QywwQkFBMEI7NEZBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFKdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQU1EOzs7Ozs7R0FNRztBQVdILE1BQU0sT0FBTyxxQkFBcUI7SUFDdkIsS0FBSyxHQUFHLEtBQUssQ0FBcUIsRUFBRSxDQUFDLENBQUM7SUFDL0MseUVBQXlFO0lBQ2hFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLFVBQVUsR0FBRyxLQUFLLENBQVcsRUFBRSxDQUFDLENBQUM7SUFFakMsV0FBVyxHQUFHLE1BQU0sRUFBb0MsQ0FBQztJQUVyQixjQUFjLENBQXlDO0lBRXBHLFFBQVEsQ0FBQyxHQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQVcsRUFBRSxNQUFlO1FBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDO0lBQ3JGLENBQUM7d0dBakNVLHFCQUFxQjs0RkFBckIscUJBQXFCLHkyQkFVZiwwQkFBMEIsNkJDckQ3QyxxbEJBb0JBLHE4QkRnQlksaUJBQWlCLGtjQUFFLGdCQUFnQjs7NEZBT2xDLHFCQUFxQjtrQkFWakMsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsaUJBRy9CLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7OEJBWVEsY0FBYztzQkFBMUQsZUFBZTt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ1pvcnJvQW50ZE1vZHVsZSB9IGZyb20gJy4uLy4uL25nLXpvcnJvL25nLXpvcnJvLWFudGQubW9kdWxlJztcbmltcG9ydCB7IEdlb0FjY29yZGlvbkl0ZW0gfSBmcm9tICcuL2dlby1hY2NvcmRpb24udHlwZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdWlQYW5lbF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBHZW9BY2NvcmRpb25QYW5lbERpcmVjdGl2ZSB7XG4gIHJlYWRvbmx5IGtleSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oeyBhbGlhczogJ3VpUGFuZWwnIH0pO1xuICByZWFkb25seSB0ZW1wbGF0ZSA9IGluamVjdChUZW1wbGF0ZVJlZjx1bmtub3duPik7XG59XG5cbi8qKlxuICogQ29sbGFwc2libGUgcGFuZWwgZ3JvdXAuXG4gKlxuICogQHN1bW1hcnkgTmjDs20gcGFuZWwgdGh1IGfhu41uL23hu58gcuG7mW5nIChuei1jb2xsYXBzZSk7IG3hu5dpIHBhbmVsIGNoaeG6v3UgbuG7mWkgZHVuZyBxdWEgYFt1aVBhbmVsXWAuXG4gKiBAd2hlblRvVXNlIEdvbSBuaGnhu4F1IG5ow7NtIHRow7RuZyB0aW4gZMOgaSB0csOqbiBjw7luZyB0cmFuZyAoRkFRLCBjaGkgdGnhur90IHRoZW8gbeG7pWMpLlxuICogQGRvTm90VXNlV2hlbiDEkGnhu4F1IGjGsOG7m25nIGdp4buvYSBjw6FjIHZpZXcgbmdhbmcgaMOgbmcg4oCUIHVzZSBnZW8tdGFicy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLWFjY29yZGlvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ1pvcnJvQW50ZE1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW8tYWNjb3JkaW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1hY2NvcmRpb24uY29tcG9uZW50LnNjc3MnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2dlby1hY2NvcmRpb24taG9zdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvQWNjb3JkaW9uQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgaXRlbXMgPSBpbnB1dDxHZW9BY2NvcmRpb25JdGVtW10+KFtdKTtcbiAgLyoqIGB0cnVlYCDihpIgY2jhu4kgMSBwYW5lbCBt4bufIHThuqFpIG3hu5l0IHRo4budaSDEkWnhu4NtIChtYXBzIHRvIGBuekFjY29yZGlvbmApLiAqL1xuICByZWFkb25seSBhY2NvcmRpb24gPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IGJvcmRlcmVkID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGdob3N0ID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSBhY3RpdmVLZXlzID0gbW9kZWw8c3RyaW5nW10+KFtdKTtcblxuICByZWFkb25seSBwYW5lbENoYW5nZSA9IG91dHB1dDx7IGtleTogc3RyaW5nOyBhY3RpdmU6IGJvb2xlYW4gfT4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKEdlb0FjY29yZGlvblBhbmVsRGlyZWN0aXZlKSBwYW5lbFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxHZW9BY2NvcmRpb25QYW5lbERpcmVjdGl2ZT47XG5cbiAgaXNBY3RpdmUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVLZXlzKCkuaW5jbHVkZXMoa2V5KTtcbiAgfVxuXG4gIG9uQWN0aXZlQ2hhbmdlKGtleTogc3RyaW5nLCBhY3RpdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY2NvcmRpb24oKSkge1xuICAgICAgdGhpcy5hY3RpdmVLZXlzLnNldChhY3RpdmUgPyBba2V5XSA6IFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQodGhpcy5hY3RpdmVLZXlzKCkpO1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBuZXh0LmFkZChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dC5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlS2V5cy5zZXQoWy4uLm5leHRdKTtcbiAgICB9XG4gICAgdGhpcy5wYW5lbENoYW5nZS5lbWl0KHsga2V5LCBhY3RpdmUgfSk7XG4gIH1cblxuICBnZXRUZW1wbGF0ZShrZXk6IHN0cmluZyk6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxUZW1wbGF0ZXM/LmZpbmQoKHBhbmVsKSA9PiBwYW5lbC5rZXkoKSA9PT0ga2V5KT8udGVtcGxhdGUgPz8gbnVsbDtcbiAgfVxufVxuIiwiPG56LWNvbGxhcHNlXG4gIGNsYXNzPVwiZ2VvLWFjY29yZGlvblwiXG4gIFtuekFjY29yZGlvbl09XCJhY2NvcmRpb24oKVwiXG4gIFtuekJvcmRlcmVkXT1cImJvcmRlcmVkKClcIlxuICBbbnpHaG9zdF09XCJnaG9zdCgpXCJcbj5cbiAgQGZvciAoaXRlbSBvZiBpdGVtcygpOyB0cmFjayBpdGVtLmtleSkge1xuICAgIDxuei1jb2xsYXBzZS1wYW5lbFxuICAgICAgW256SGVhZGVyXT1cIml0ZW0udGl0bGVcIlxuICAgICAgW256QWN0aXZlXT1cImlzQWN0aXZlKGl0ZW0ua2V5KVwiXG4gICAgICBbbnpEaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8/IGZhbHNlXCJcbiAgICAgIFtuekV4dHJhXT1cIml0ZW0uZXh0cmEgPz8gJydcIlxuICAgICAgKG56QWN0aXZlQ2hhbmdlKT1cIm9uQWN0aXZlQ2hhbmdlKGl0ZW0ua2V5LCAkZXZlbnQpXCJcbiAgICA+XG4gICAgICBAaWYgKGdldFRlbXBsYXRlKGl0ZW0ua2V5KTsgYXMgdHBsKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9uei1jb2xsYXBzZS1wYW5lbD5cbiAgfVxuPC9uei1jb2xsYXBzZT5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWFjY29yZGlvbi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1hY2NvcmRpb24vZ2VvLWFjY29yZGlvbi50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBHZW9BY2NvcmRpb25JdGVtIHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIFRleHQgcGjhu6UgaGnhu4NuIHRo4buLIGLDqm4gcGjhuqNpIGhlYWRlciAodmQ6IHRy4bqhbmcgdGjDoWksIHPhu5EgbMaw4bujbmcpLiAqL1xuICBleHRyYT86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -67,17 +67,6 @@ export class GeoChartComponent {
|
|
|
67
67
|
colorOf(item, index) {
|
|
68
68
|
return item.color || DEFAULT_COLORS[index % DEFAULT_COLORS.length];
|
|
69
69
|
}
|
|
70
|
-
/**
|
|
71
|
-
* `@for` track dùng qua method thay vì `item.id ?? item.label` trực tiếp trong template —
|
|
72
|
-
* Angular linker (18.2.14) sinh sai scope biến tạm cho track expression chứa `??` khi bị
|
|
73
|
-
* hoist lên module scope, gây `ReferenceError: tmp_x_0 is not defined` lúc chạy.
|
|
74
|
-
*/
|
|
75
|
-
trackDatum(item) {
|
|
76
|
-
return item.id ?? item.label;
|
|
77
|
-
}
|
|
78
|
-
trackSegment(seg) {
|
|
79
|
-
return seg.datum.id ?? seg.datum.label;
|
|
80
|
-
}
|
|
81
70
|
barWidth(value) {
|
|
82
71
|
const max = this.maxValue() || 1;
|
|
83
72
|
return `${Math.max(2, (value / max) * 100)}%`;
|
|
@@ -90,10 +79,10 @@ export class GeoChartComponent {
|
|
|
90
79
|
this.segmentClick.emit({ datum, index });
|
|
91
80
|
}
|
|
92
81
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
93
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoChartComponent, isStandalone: true, selector: "geo-chart", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, showSort: { classPropertyName: "showSort", publicName: "showSort", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sort: "sortChange", segmentClick: "segmentClick", sortChange: "sortChange" }, host: { classAttribute: "geo-chart-host" }, ngImport: i0, template: "<div class=\"geo-chart\" [style.--geo-chart-height.px]=\"height()\">\n <header class=\"geo-chart__header\">\n @if (title()) {\n <h3 class=\"geo-chart__title\">{{ title() }}</h3>\n }\n @if (showSort() && type() === 'bar') {\n <div class=\"geo-chart__sort\" role=\"group\" aria-label=\"S\u1EAFp x\u1EBFp\">\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'desc'\"\n (clicked)=\"setSort('desc')\"\n >\n Gi\u1EA3m d\u1EA7n\n </geo-button>\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'asc'\"\n (clicked)=\"setSort('asc')\"\n >\n T\u0103ng d\u1EA7n\n </geo-button>\n </div>\n }\n </header>\n\n @if (!sortedData().length) {\n <geo-empty-state [title]=\"emptyText()\" icon=\"bar-chart\" />\n } @else if (type() === 'bar') {\n <div class=\"geo-chart__bars\" role=\"img\" [attr.aria-label]=\"title() || 'Bi\u1EC3u \u0111\u1ED3 c\u1ED9t'\">\n @for (item of sortedData(); track
|
|
82
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoChartComponent, isStandalone: true, selector: "geo-chart", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, showSort: { classPropertyName: "showSort", publicName: "showSort", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sort: "sortChange", segmentClick: "segmentClick", sortChange: "sortChange" }, host: { classAttribute: "geo-chart-host" }, ngImport: i0, template: "<div class=\"geo-chart\" [style.--geo-chart-height.px]=\"height()\">\n <header class=\"geo-chart__header\">\n @if (title()) {\n <h3 class=\"geo-chart__title\">{{ title() }}</h3>\n }\n @if (showSort() && type() === 'bar') {\n <div class=\"geo-chart__sort\" role=\"group\" aria-label=\"S\u1EAFp x\u1EBFp\">\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'desc'\"\n (clicked)=\"setSort('desc')\"\n >\n Gi\u1EA3m d\u1EA7n\n </geo-button>\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'asc'\"\n (clicked)=\"setSort('asc')\"\n >\n T\u0103ng d\u1EA7n\n </geo-button>\n </div>\n }\n </header>\n\n @if (!sortedData().length) {\n <geo-empty-state [title]=\"emptyText()\" icon=\"bar-chart\" />\n } @else if (type() === 'bar') {\n <div class=\"geo-chart__bars\" role=\"img\" [attr.aria-label]=\"title() || 'Bi\u1EC3u \u0111\u1ED3 c\u1ED9t'\">\n @for (item of sortedData(); track item.id ?? item.label; let i = $index) {\n <button\n type=\"button\"\n class=\"geo-chart__bar-row\"\n (click)=\"onSegment(item, i)\"\n >\n <span class=\"geo-chart__bar-label\" [title]=\"item.label\">{{ item.label }}</span>\n <span class=\"geo-chart__bar-track\">\n <span\n class=\"geo-chart__bar-fill\"\n [style.width]=\"barWidth(item.value)\"\n [style.background]=\"colorOf(item, i)\"\n ></span>\n </span>\n <span class=\"geo-chart__bar-value\">\n {{ item.value }}{{ unit() ? ' ' + unit() : '' }}\n </span>\n </button>\n }\n </div>\n } @else {\n <div class=\"geo-chart__donut-wrap\">\n <svg\n class=\"geo-chart__donut\"\n viewBox=\"0 0 140 140\"\n role=\"img\"\n [attr.aria-label]=\"title() || 'Bi\u1EC3u \u0111\u1ED3 donut'\"\n >\n <circle\n class=\"geo-chart__donut-track\"\n cx=\"70\"\n cy=\"70\"\n r=\"56\"\n fill=\"none\"\n stroke-width=\"18\"\n />\n @for (seg of donutSegments(); track seg.datum.id ?? seg.datum.label) {\n <circle\n class=\"geo-chart__donut-seg\"\n cx=\"70\"\n cy=\"70\"\n r=\"56\"\n fill=\"none\"\n stroke-width=\"18\"\n [attr.stroke]=\"seg.color\"\n [attr.stroke-dasharray]=\"seg.dasharray\"\n [attr.stroke-dashoffset]=\"seg.dashoffset\"\n transform=\"rotate(-90 70 70)\"\n (click)=\"onSegment(seg.datum, seg.index)\"\n />\n }\n <text x=\"70\" y=\"66\" text-anchor=\"middle\" class=\"geo-chart__donut-center-label\">\n T\u1ED5ng\n </text>\n <text x=\"70\" y=\"84\" text-anchor=\"middle\" class=\"geo-chart__donut-center-value\">\n {{ total() }}\n </text>\n </svg>\n\n @if (showLegend()) {\n <ul class=\"geo-chart__legend\">\n @for (seg of donutSegments(); track seg.datum.id ?? seg.datum.label) {\n <li>\n <button\n type=\"button\"\n class=\"geo-chart__legend-item\"\n (click)=\"onSegment(seg.datum, seg.index)\"\n >\n <span\n class=\"geo-chart__swatch\"\n [style.background]=\"seg.color\"\n ></span>\n <span class=\"geo-chart__legend-label\">{{ seg.datum.label }}</span>\n <span class=\"geo-chart__legend-value\">{{ seg.percent }}%</span>\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n</div>\n", styles: [".geo-chart-host{display:block}.geo-chart{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);min-height:var(--geo-chart-height, 260px)}.geo-chart__header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.geo-chart__title{margin:0;font-size:var(--geo-font-size-body);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-900)}.geo-chart__sort{display:inline-flex;gap:4px}.geo-chart__bars{display:flex;flex-direction:column;gap:10px;max-height:calc(var(--geo-chart-height, 260px) - 48px);overflow:auto;padding-right:4px}.geo-chart__bar-row{display:grid;grid-template-columns:minmax(88px,140px) 1fr auto;align-items:center;gap:10px;margin:0;padding:0;border:0;background:transparent;font:inherit;color:inherit;cursor:pointer;text-align:left}.geo-chart__bar-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--geo-font-size-caption);color:var(--geo-color-neutral-700)}.geo-chart__bar-track{height:12px;border-radius:var(--geo-radius-sm);background:var(--geo-color-neutral-100);overflow:hidden}.geo-chart__bar-fill{display:block;height:100%;border-radius:inherit;transition:width .2s ease}.geo-chart__bar-value{font-size:var(--geo-font-size-caption);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-800);white-space:nowrap}.geo-chart__donut-wrap{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.geo-chart__donut{width:180px;height:180px;flex-shrink:0}.geo-chart__donut-track{stroke:var(--geo-color-neutral-100)}.geo-chart__donut-seg{cursor:pointer;transition:opacity .15s ease}.geo-chart__donut-seg:hover{opacity:.85}.geo-chart__donut-center-label{fill:var(--geo-color-neutral-500);font-size:11px}.geo-chart__donut-center-value{fill:var(--geo-color-neutral-900);font-size:16px;font-weight:600}.geo-chart__legend{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;flex:1;min-width:160px}.geo-chart__legend-item{display:grid;grid-template-columns:12px 1fr auto;align-items:center;gap:8px;width:100%;margin:0;padding:4px 0;border:0;background:transparent;font:inherit;color:inherit;cursor:pointer;text-align:left}.geo-chart__swatch{width:12px;height:12px;border-radius:2px}.geo-chart__legend-label{font-size:var(--geo-font-size-body-small);color:var(--geo-color-neutral-800)}.geo-chart__legend-value{font-size:var(--geo-font-size-caption);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-600)}\n"], dependencies: [{ 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: GeoEmptyStateComponent, selector: "geo-empty-state", inputs: ["title", "description", "icon", "actionLabel"], outputs: ["actionClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
94
83
|
}
|
|
95
84
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoChartComponent, decorators: [{
|
|
96
85
|
type: Component,
|
|
97
|
-
args: [{ selector: 'geo-chart', standalone: true, imports: [GeoButtonComponent, GeoEmptyStateComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'geo-chart-host' }, template: "<div class=\"geo-chart\" [style.--geo-chart-height.px]=\"height()\">\n <header class=\"geo-chart__header\">\n @if (title()) {\n <h3 class=\"geo-chart__title\">{{ title() }}</h3>\n }\n @if (showSort() && type() === 'bar') {\n <div class=\"geo-chart__sort\" role=\"group\" aria-label=\"S\u1EAFp x\u1EBFp\">\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'desc'\"\n (clicked)=\"setSort('desc')\"\n >\n Gi\u1EA3m d\u1EA7n\n </geo-button>\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'asc'\"\n (clicked)=\"setSort('asc')\"\n >\n T\u0103ng d\u1EA7n\n </geo-button>\n </div>\n }\n </header>\n\n @if (!sortedData().length) {\n <geo-empty-state [title]=\"emptyText()\" icon=\"bar-chart\" />\n } @else if (type() === 'bar') {\n <div class=\"geo-chart__bars\" role=\"img\" [attr.aria-label]=\"title() || 'Bi\u1EC3u \u0111\u1ED3 c\u1ED9t'\">\n @for (item of sortedData(); track
|
|
86
|
+
args: [{ selector: 'geo-chart', standalone: true, imports: [GeoButtonComponent, GeoEmptyStateComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'geo-chart-host' }, template: "<div class=\"geo-chart\" [style.--geo-chart-height.px]=\"height()\">\n <header class=\"geo-chart__header\">\n @if (title()) {\n <h3 class=\"geo-chart__title\">{{ title() }}</h3>\n }\n @if (showSort() && type() === 'bar') {\n <div class=\"geo-chart__sort\" role=\"group\" aria-label=\"S\u1EAFp x\u1EBFp\">\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'desc'\"\n (clicked)=\"setSort('desc')\"\n >\n Gi\u1EA3m d\u1EA7n\n </geo-button>\n <geo-button\n appearance=\"tertiary\"\n [active]=\"sort() === 'asc'\"\n (clicked)=\"setSort('asc')\"\n >\n T\u0103ng d\u1EA7n\n </geo-button>\n </div>\n }\n </header>\n\n @if (!sortedData().length) {\n <geo-empty-state [title]=\"emptyText()\" icon=\"bar-chart\" />\n } @else if (type() === 'bar') {\n <div class=\"geo-chart__bars\" role=\"img\" [attr.aria-label]=\"title() || 'Bi\u1EC3u \u0111\u1ED3 c\u1ED9t'\">\n @for (item of sortedData(); track item.id ?? item.label; let i = $index) {\n <button\n type=\"button\"\n class=\"geo-chart__bar-row\"\n (click)=\"onSegment(item, i)\"\n >\n <span class=\"geo-chart__bar-label\" [title]=\"item.label\">{{ item.label }}</span>\n <span class=\"geo-chart__bar-track\">\n <span\n class=\"geo-chart__bar-fill\"\n [style.width]=\"barWidth(item.value)\"\n [style.background]=\"colorOf(item, i)\"\n ></span>\n </span>\n <span class=\"geo-chart__bar-value\">\n {{ item.value }}{{ unit() ? ' ' + unit() : '' }}\n </span>\n </button>\n }\n </div>\n } @else {\n <div class=\"geo-chart__donut-wrap\">\n <svg\n class=\"geo-chart__donut\"\n viewBox=\"0 0 140 140\"\n role=\"img\"\n [attr.aria-label]=\"title() || 'Bi\u1EC3u \u0111\u1ED3 donut'\"\n >\n <circle\n class=\"geo-chart__donut-track\"\n cx=\"70\"\n cy=\"70\"\n r=\"56\"\n fill=\"none\"\n stroke-width=\"18\"\n />\n @for (seg of donutSegments(); track seg.datum.id ?? seg.datum.label) {\n <circle\n class=\"geo-chart__donut-seg\"\n cx=\"70\"\n cy=\"70\"\n r=\"56\"\n fill=\"none\"\n stroke-width=\"18\"\n [attr.stroke]=\"seg.color\"\n [attr.stroke-dasharray]=\"seg.dasharray\"\n [attr.stroke-dashoffset]=\"seg.dashoffset\"\n transform=\"rotate(-90 70 70)\"\n (click)=\"onSegment(seg.datum, seg.index)\"\n />\n }\n <text x=\"70\" y=\"66\" text-anchor=\"middle\" class=\"geo-chart__donut-center-label\">\n T\u1ED5ng\n </text>\n <text x=\"70\" y=\"84\" text-anchor=\"middle\" class=\"geo-chart__donut-center-value\">\n {{ total() }}\n </text>\n </svg>\n\n @if (showLegend()) {\n <ul class=\"geo-chart__legend\">\n @for (seg of donutSegments(); track seg.datum.id ?? seg.datum.label) {\n <li>\n <button\n type=\"button\"\n class=\"geo-chart__legend-item\"\n (click)=\"onSegment(seg.datum, seg.index)\"\n >\n <span\n class=\"geo-chart__swatch\"\n [style.background]=\"seg.color\"\n ></span>\n <span class=\"geo-chart__legend-label\">{{ seg.datum.label }}</span>\n <span class=\"geo-chart__legend-value\">{{ seg.percent }}%</span>\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n</div>\n", styles: [".geo-chart-host{display:block}.geo-chart{display:flex;flex-direction:column;gap:12px;padding:16px;border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);min-height:var(--geo-chart-height, 260px)}.geo-chart__header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.geo-chart__title{margin:0;font-size:var(--geo-font-size-body);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-900)}.geo-chart__sort{display:inline-flex;gap:4px}.geo-chart__bars{display:flex;flex-direction:column;gap:10px;max-height:calc(var(--geo-chart-height, 260px) - 48px);overflow:auto;padding-right:4px}.geo-chart__bar-row{display:grid;grid-template-columns:minmax(88px,140px) 1fr auto;align-items:center;gap:10px;margin:0;padding:0;border:0;background:transparent;font:inherit;color:inherit;cursor:pointer;text-align:left}.geo-chart__bar-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--geo-font-size-caption);color:var(--geo-color-neutral-700)}.geo-chart__bar-track{height:12px;border-radius:var(--geo-radius-sm);background:var(--geo-color-neutral-100);overflow:hidden}.geo-chart__bar-fill{display:block;height:100%;border-radius:inherit;transition:width .2s ease}.geo-chart__bar-value{font-size:var(--geo-font-size-caption);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-800);white-space:nowrap}.geo-chart__donut-wrap{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.geo-chart__donut{width:180px;height:180px;flex-shrink:0}.geo-chart__donut-track{stroke:var(--geo-color-neutral-100)}.geo-chart__donut-seg{cursor:pointer;transition:opacity .15s ease}.geo-chart__donut-seg:hover{opacity:.85}.geo-chart__donut-center-label{fill:var(--geo-color-neutral-500);font-size:11px}.geo-chart__donut-center-value{fill:var(--geo-color-neutral-900);font-size:16px;font-weight:600}.geo-chart__legend{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;flex:1;min-width:160px}.geo-chart__legend-item{display:grid;grid-template-columns:12px 1fr auto;align-items:center;gap:8px;width:100%;margin:0;padding:4px 0;border:0;background:transparent;font:inherit;color:inherit;cursor:pointer;text-align:left}.geo-chart__swatch{width:12px;height:12px;border-radius:2px}.geo-chart__legend-label{font-size:var(--geo-font-size-body-small);color:var(--geo-color-neutral-800)}.geo-chart__legend-value{font-size:var(--geo-font-size-caption);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-600)}\n"] }]
|
|
98
87
|
}] });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1jaGFydC9nZW8tY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWNoYXJ0L2dlby1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztBQVF0RixNQUFNLGNBQWMsR0FBRztJQUNyQixrQ0FBa0M7SUFDbEMsa0NBQWtDO0lBQ2xDLGtDQUFrQztJQUNsQywrQkFBK0I7SUFDL0Isd0NBQXdDO0lBQ3hDLDhCQUE4QjtDQUMvQixDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQVdILE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsSUFBSSxHQUFHLEtBQUssQ0FBZSxLQUFLLENBQUMsQ0FBQztJQUNsQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLElBQUksR0FBRyxLQUFLLENBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLElBQUksR0FBRyxLQUFLLENBQWUsTUFBTSxDQUFDLENBQUM7SUFD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QixDQUFDLElBQUksUUFDL0IsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBvdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdlb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2dlby1idXR0b24vZ2VvLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvRW1wdHlTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dlby1lbXB0eS1zdGF0ZS9nZW8tZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHtcbiAgR2VvQ2hhcnREYXR1bSxcbiAgR2VvQ2hhcnRTZWdtZW50Q2xpY2ssXG4gIEdlb0NoYXJ0U29ydCxcbiAgR2VvQ2hhcnRUeXBlLFxufSBmcm9tICcuL2dlby1jaGFydC50eXBlcyc7XG5cbmNvbnN0IERFRkFVTFRfQ09MT1JTID0gW1xuICAndmFyKC0tZ2VvLWNvbG9yLXByaW1hcnktZGVmYXVsdCknLFxuICAndmFyKC0tZ2VvLWNvbG9yLXdhcm5pbmctZGVmYXVsdCknLFxuICAndmFyKC0tZ2VvLWNvbG9yLXN1Y2Nlc3MtZGVmYXVsdCknLFxuICAndmFyKC0tZ2VvLWNvbG9yLWluZm8tZGVmYXVsdCknLFxuICAndmFyKC0tZ2VvLWNvbG9yLXRlYWwtZGVmYXVsdCwgIzBkOTQ4OCknLFxuICAndmFyKC0tZ2VvLWNvbG9yLW5ldXRyYWwtNTAwKScsXG5dO1xuXG4vKipcbiAqIExpZ2h0d2VpZ2h0IFNWRyBjaGFydHMgZm9yIGRhc2hib2FyZCAvIHRo4buRbmcga8OqIChUQ1FILjLigJMzKS5cbiAqIE5vIGNoYXJ0LWxpYnJhcnkgcGVlciBkZXBlbmRlbmN5IOKAlCBob3N0IGJpbmRzIGRhdGEgb25seS5cbiAqXG4gKiBAc3VtbWFyeSBCaeG7g3UgxJHhu5MgY+G7mXQgLyBkb251dCB0aHXhuqduIFNWRyBjaG8gdHJhbmcgdGjhu5FuZyBrw6ouXG4gKiBAd2hlblRvVXNlIERhc2hib2FyZCBkaeG7h24gdMOtY2ggdGhlbyB4w6MsIHThu7cgbOG7hyB0aOG7rWEgbOG7h2NoIG3hu6VjIMSRw61jaC5cbiAqIEBkb05vdFVzZVdoZW4gSGVhdnkgQkkgZGFzaGJvYXJkcyBuZWVkaW5nIHpvb20vYnJ1c2gg4oCUIHVzZSBhIGNoYXJ0IGxpYiBpbiB0aGUgYXBwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tY2hhcnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbR2VvQnV0dG9uQ29tcG9uZW50LCBHZW9FbXB0eVN0YXRlQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tY2hhcnQuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeyBjbGFzczogJ2dlby1jaGFydC1ob3N0JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9DaGFydENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IHR5cGUgPSBpbnB1dDxHZW9DaGFydFR5cGU+KCdiYXInKTtcbiAgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dCgnJyk7XG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDxHZW9DaGFydERhdHVtW10+KFtdKTtcbiAgcmVhZG9ubHkgaGVpZ2h0ID0gaW5wdXQoMjYwKTtcbiAgcmVhZG9ubHkgc2hvd0xlZ2VuZCA9IGlucHV0KHRydWUpO1xuICByZWFkb25seSBzaG93U29ydCA9IGlucHV0KGZhbHNlKTtcbiAgcmVhZG9ubHkgc29ydCA9IG1vZGVsPEdlb0NoYXJ0U29ydD4oJ2Rlc2MnKTtcbiAgcmVhZG9ubHkgZW1wdHlUZXh0ID0gaW5wdXQoJ0NoxrBhIGPDsyBk4buvIGxp4buHdSB0aOG7kW5nIGvDqi4nKTtcbiAgcmVhZG9ubHkgdW5pdCA9IGlucHV0KCcnKTtcblxuICByZWFkb25seSBzZWdtZW50Q2xpY2sgPSBvdXRwdXQ8R2VvQ2hhcnRTZWdtZW50Q2xpY2s+KCk7XG4gIHJlYWRvbmx5IHNvcnRDaGFuZ2UgPSBvdXRwdXQ8R2VvQ2hhcnRTb3J0PigpO1xuXG4gIHJlYWRvbmx5IHNvcnRlZERhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5kYXRhKCldO1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnNvcnQoKTtcbiAgICBpZiAoc29ydCA9PT0gJ2FzYycpIHtcbiAgICAgIHJldHVybiBpdGVtcy5zb3J0KChhLCBiKSA9PiBhLnZhbHVlIC0gYi52YWx1ZSk7XG4gICAgfVxuICAgIGlmIChzb3J0ID09PSAnZGVzYycpIHtcbiAgICAgIHJldHVybiBpdGVtcy5zb3J0KChhLCBiKSA9PiBiLnZhbHVlIC0gYS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWF4VmFsdWUgPSBjb21wdXRlZCgoKSA9PlxuICAgIE1hdGgubWF4KDAsIC4uLnRoaXMuc29ydGVkRGF0YSgpLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSkpLFxuICApO1xuXG4gIHJlYWRvbmx5IHRvdGFsID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNvcnRlZERhdGEoKS5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgaXRlbS52YWx1ZSwgMCksXG4gICk7XG5cbiAgcmVhZG9ubHkgZG9udXRTZWdtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbCgpIHx8IDE7XG4gICAgY29uc3QgcmFkaXVzID0gNTY7XG4gICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogcmFkaXVzO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCByYXRpbyA9IGl0ZW0udmFsdWUgLyB0b3RhbDtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHJhdGlvICogY2lyY3VtZmVyZW5jZTtcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSB7XG4gICAgICAgIGRhdHVtOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgY29sb3I6IGl0ZW0uY29sb3IgfHwgREVGQVVMVF9DT0xPUlNbaW5kZXggJSBERUZBVUxUX0NPTE9SUy5sZW5ndGhdLFxuICAgICAgICBkYXNoYXJyYXk6IGAke2xlbmd0aH0gJHtjaXJjdW1mZXJlbmNlIC0gbGVuZ3RofWAsXG4gICAgICAgIGRhc2hvZmZzZXQ6IC1vZmZzZXQsXG4gICAgICAgIHBlcmNlbnQ6IE1hdGgucm91bmQocmF0aW8gKiAxMDAwKSAvIDEwLFxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBsZW5ndGg7XG4gICAgICByZXR1cm4gc2VnbWVudDtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29sb3JPZihpdGVtOiBHZW9DaGFydERhdHVtLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5jb2xvciB8fCBERUZBVUxUX0NPTE9SU1tpbmRleCAlIERFRkFVTFRfQ09MT1JTLmxlbmd0aF07XG4gIH1cblxuICAvKipcbiAgICogYEBmb3JgIHRyYWNrIGTDuW5nIHF1YSBtZXRob2QgdGhheSB2w6wgYGl0ZW0uaWQgPz8gaXRlbS5sYWJlbGAgdHLhu7FjIHRp4bq/cCB0cm9uZyB0ZW1wbGF0ZSDigJRcbiAgICogQW5ndWxhciBsaW5rZXIgKDE4LjIuMTQpIHNpbmggc2FpIHNjb3BlIGJp4bq/biB04bqhbSBjaG8gdHJhY2sgZXhwcmVzc2lvbiBjaOG7qWEgYD8/YCBraGkgYuG7i1xuICAgKiBob2lzdCBsw6puIG1vZHVsZSBzY29wZSwgZ8OieSBgUmVmZXJlbmNlRXJyb3I6IHRtcF94XzAgaXMgbm90IGRlZmluZWRgIGzDumMgY2jhuqF5LlxuICAgKi9cbiAgdHJhY2tEYXR1bShpdGVtOiBHZW9DaGFydERhdHVtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5pZCA/PyBpdGVtLmxhYmVsO1xuICB9XG5cbiAgdHJhY2tTZWdtZW50KHNlZzogeyBkYXR1bTogR2VvQ2hhcnREYXR1bSB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2VnLmRhdHVtLmlkID8/IHNlZy5kYXR1bS5sYWJlbDtcbiAgfVxuXG4gIGJhcldpZHRoKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1heCA9IHRoaXMubWF4VmFsdWUoKSB8fCAxO1xuICAgIHJldHVybiBgJHtNYXRoLm1heCgyLCAodmFsdWUgLyBtYXgpICogMTAwKX0lYDtcbiAgfVxuXG4gIHNldFNvcnQobmV4dDogR2VvQ2hhcnRTb3J0KTogdm9pZCB7XG4gICAgdGhpcy5zb3J0LnNldChuZXh0KTtcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIG9uU2VnbWVudChkYXR1bTogR2VvQ2hhcnREYXR1bSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VnbWVudENsaWNrLmVtaXQoeyBkYXR1bSwgaW5kZXggfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnZW8tY2hhcnRcIiBbc3R5bGUuLS1nZW8tY2hhcnQtaGVpZ2h0LnB4XT1cImhlaWdodCgpXCI+XG4gIDxoZWFkZXIgY2xhc3M9XCJnZW8tY2hhcnRfX2hlYWRlclwiPlxuICAgIEBpZiAodGl0bGUoKSkge1xuICAgICAgPGgzIGNsYXNzPVwiZ2VvLWNoYXJ0X190aXRsZVwiPnt7IHRpdGxlKCkgfX08L2gzPlxuICAgIH1cbiAgICBAaWYgKHNob3dTb3J0KCkgJiYgdHlwZSgpID09PSAnYmFyJykge1xuICAgICAgPGRpdiBjbGFzcz1cImdlby1jaGFydF9fc29ydFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJT4bqvcCB44bq/cFwiPlxuICAgICAgICA8Z2VvLWJ1dHRvblxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgW2FjdGl2ZV09XCJzb3J0KCkgPT09ICdkZXNjJ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwic2V0U29ydCgnZGVzYycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEdp4bqjbSBk4bqnblxuICAgICAgICA8L2dlby1idXR0b24+XG4gICAgICAgIDxnZW8tYnV0dG9uXG4gICAgICAgICAgYXBwZWFyYW5jZT1cInRlcnRpYXJ5XCJcbiAgICAgICAgICBbYWN0aXZlXT1cInNvcnQoKSA9PT0gJ2FzYydcIlxuICAgICAgICAgIChjbGlja2VkKT1cInNldFNvcnQoJ2FzYycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIFTEg25nIGThuqduXG4gICAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9oZWFkZXI+XG5cbiAgQGlmICghc29ydGVkRGF0YSgpLmxlbmd0aCkge1xuICAgIDxnZW8tZW1wdHktc3RhdGUgW3RpdGxlXT1cImVtcHR5VGV4dCgpXCIgaWNvbj1cImJhci1jaGFydFwiIC8+XG4gIH0gQGVsc2UgaWYgKHR5cGUoKSA9PT0gJ2JhcicpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZ2VvLWNoYXJ0X19iYXJzXCIgcm9sZT1cImltZ1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidGl0bGUoKSB8fCAnQmnhu4N1IMSR4buTIGPhu5l0J1wiPlxuICAgICAgQGZvciAoaXRlbSBvZiBzb3J0ZWREYXRhKCk7IHRyYWNrIHRyYWNrRGF0dW0oaXRlbSk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImdlby1jaGFydF9fYmFyLXJvd1wiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2VnbWVudChpdGVtLCBpKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby1jaGFydF9fYmFyLWxhYmVsXCIgW3RpdGxlXT1cIml0ZW0ubGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLWNoYXJ0X19iYXItdHJhY2tcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ2VvLWNoYXJ0X19iYXItZmlsbFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJiYXJXaWR0aChpdGVtLnZhbHVlKVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImNvbG9yT2YoaXRlbSwgaSlcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnZW8tY2hhcnRfX2Jhci12YWx1ZVwiPlxuICAgICAgICAgICAge3sgaXRlbS52YWx1ZSB9fXt7IHVuaXQoKSA/ICcgJyArIHVuaXQoKSA6ICcnIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cImdlby1jaGFydF9fZG9udXQtd3JhcFwiPlxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzcz1cImdlby1jaGFydF9fZG9udXRcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDE0MCAxNDBcIlxuICAgICAgICByb2xlPVwiaW1nXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0aXRsZSgpIHx8ICdCaeG7g3UgxJHhu5MgZG9udXQnXCJcbiAgICAgID5cbiAgICAgICAgPGNpcmNsZVxuICAgICAgICAgIGNsYXNzPVwiZ2VvLWNoYXJ0X19kb251dC10cmFja1wiXG4gICAgICAgICAgY3g9XCI3MFwiXG4gICAgICAgICAgY3k9XCI3MFwiXG4gICAgICAgICAgcj1cIjU2XCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMThcIlxuICAgICAgICAvPlxuICAgICAgICBAZm9yIChzZWcgb2YgZG9udXRTZWdtZW50cygpOyB0cmFjayB0cmFja1NlZ21lbnQoc2VnKSkge1xuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiZ2VvLWNoYXJ0X19kb251dC1zZWdcIlxuICAgICAgICAgICAgY3g9XCI3MFwiXG4gICAgICAgICAgICBjeT1cIjcwXCJcbiAgICAgICAgICAgIHI9XCI1NlwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxOFwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic2VnLmNvbG9yXCJcbiAgICAgICAgICAgIFthdHRyLnN0cm9rZS1kYXNoYXJyYXldPVwic2VnLmRhc2hhcnJheVwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaG9mZnNldF09XCJzZWcuZGFzaG9mZnNldFwiXG4gICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoLTkwIDcwIDcwKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TZWdtZW50KHNlZy5kYXR1bSwgc2VnLmluZGV4KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICA8dGV4dCB4PVwiNzBcIiB5PVwiNjZcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGNsYXNzPVwiZ2VvLWNoYXJ0X19kb251dC1jZW50ZXItbGFiZWxcIj5cbiAgICAgICAgICBU4buVbmdcbiAgICAgICAgPC90ZXh0PlxuICAgICAgICA8dGV4dCB4PVwiNzBcIiB5PVwiODRcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGNsYXNzPVwiZ2VvLWNoYXJ0X19kb251dC1jZW50ZXItdmFsdWVcIj5cbiAgICAgICAgICB7eyB0b3RhbCgpIH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgIDwvc3ZnPlxuXG4gICAgICBAaWYgKHNob3dMZWdlbmQoKSkge1xuICAgICAgICA8dWwgY2xhc3M9XCJnZW8tY2hhcnRfX2xlZ2VuZFwiPlxuICAgICAgICAgIEBmb3IgKHNlZyBvZiBkb251dFNlZ21lbnRzKCk7IHRyYWNrIHRyYWNrU2VnbWVudChzZWcpKSB7XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImdlby1jaGFydF9fbGVnZW5kLWl0ZW1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlZ21lbnQoc2VnLmRhdHVtLCBzZWcuaW5kZXgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImdlby1jaGFydF9fc3dhdGNoXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInNlZy5jb2xvclwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby1jaGFydF9fbGVnZW5kLWxhYmVsXCI+e3sgc2VnLmRhdHVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLWNoYXJ0X19sZWdlbmQtdmFsdWVcIj57eyBzZWcucGVyY2VudCB9fSU8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdWw+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1jaGFydC9nZW8tY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWNoYXJ0L2dlby1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOztBQVF0RixNQUFNLGNBQWMsR0FBRztJQUNyQixrQ0FBa0M7SUFDbEMsa0NBQWtDO0lBQ2xDLGtDQUFrQztJQUNsQywrQkFBK0I7SUFDL0Isd0NBQXdDO0lBQ3hDLDhCQUE4QjtDQUMvQixDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQVdILE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsSUFBSSxHQUFHLEtBQUssQ0FBZSxLQUFLLENBQUMsQ0FBQztJQUNsQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLElBQUksR0FBRyxLQUFLLENBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLElBQUksR0FBRyxLQUFLLENBQWUsTUFBTSxDQUFDLENBQUM7SUFD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QUFPLElBQUksQ0FBQyxLQUFLLElBQUksY0FBYyxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDaEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFrQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW9CLEVBQUUsS0FBYTtRQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7d0dBeEVVLGlCQUFpQjs0RkFBakIsaUJBQWlCLHl5Q0M3QzlCLHl1SEErR0EseWxGRHpFWSxrQkFBa0Isc09BQUUsc0JBQXNCOzs0RkFPekMsaUJBQWlCO2tCQVY3QixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBRSxzQkFBc0IsQ0FBQyxtQkFHcEMsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2VvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLWJ1dHRvbi9nZW8tYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW9FbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VvLWVtcHR5LXN0YXRlL2dlby1lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUge1xuICBHZW9DaGFydERhdHVtLFxuICBHZW9DaGFydFNlZ21lbnRDbGljayxcbiAgR2VvQ2hhcnRTb3J0LFxuICBHZW9DaGFydFR5cGUsXG59IGZyb20gJy4vZ2VvLWNoYXJ0LnR5cGVzJztcblxuY29uc3QgREVGQVVMVF9DT0xPUlMgPSBbXG4gICd2YXIoLS1nZW8tY29sb3ItcHJpbWFyeS1kZWZhdWx0KScsXG4gICd2YXIoLS1nZW8tY29sb3Itd2FybmluZy1kZWZhdWx0KScsXG4gICd2YXIoLS1nZW8tY29sb3Itc3VjY2Vzcy1kZWZhdWx0KScsXG4gICd2YXIoLS1nZW8tY29sb3ItaW5mby1kZWZhdWx0KScsXG4gICd2YXIoLS1nZW8tY29sb3ItdGVhbC1kZWZhdWx0LCAjMGQ5NDg4KScsXG4gICd2YXIoLS1nZW8tY29sb3ItbmV1dHJhbC01MDApJyxcbl07XG5cbi8qKlxuICogTGlnaHR3ZWlnaHQgU1ZHIGNoYXJ0cyBmb3IgZGFzaGJvYXJkIC8gdGjhu5FuZyBrw6ogKFRDUUguMuKAkzMpLlxuICogTm8gY2hhcnQtbGlicmFyeSBwZWVyIGRlcGVuZGVuY3kg4oCUIGhvc3QgYmluZHMgZGF0YSBvbmx5LlxuICpcbiAqIEBzdW1tYXJ5IEJp4buDdSDEkeG7kyBj4buZdCAvIGRvbnV0IHRodeG6p24gU1ZHIGNobyB0cmFuZyB0aOG7kW5nIGvDqi5cbiAqIEB3aGVuVG9Vc2UgRGFzaGJvYXJkIGRp4buHbiB0w61jaCB0aGVvIHjDoywgdOG7tyBs4buHIHRo4butYSBs4buHY2ggbeG7pWMgxJHDrWNoLlxuICogQGRvTm90VXNlV2hlbiBIZWF2eSBCSSBkYXNoYm9hcmRzIG5lZWRpbmcgem9vbS9icnVzaCDigJQgdXNlIGEgY2hhcnQgbGliIGluIHRoZSBhcHAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dlby1jaGFydCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtHZW9CdXR0b25Db21wb25lbnQsIEdlb0VtcHR5U3RhdGVDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1jaGFydC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnZ2VvLWNoYXJ0LWhvc3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0NoYXJ0Q29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdHlwZSA9IGlucHV0PEdlb0NoYXJ0VHlwZT4oJ2JhcicpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgZGF0YSA9IGlucHV0PEdlb0NoYXJ0RGF0dW1bXT4oW10pO1xuICByZWFkb25seSBoZWlnaHQgPSBpbnB1dCgyNjApO1xuICByZWFkb25seSBzaG93TGVnZW5kID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IHNob3dTb3J0ID0gaW5wdXQoZmFsc2UpO1xuICByZWFkb25seSBzb3J0ID0gbW9kZWw8R2VvQ2hhcnRTb3J0PignZGVzYycpO1xuICByZWFkb25seSBlbXB0eVRleHQgPSBpbnB1dCgnQ2jGsGEgY8OzIGThu68gbGnhu4d1IHRo4buRbmcga8OqLicpO1xuICByZWFkb25seSB1bml0ID0gaW5wdXQoJycpO1xuXG4gIHJlYWRvbmx5IHNlZ21lbnRDbGljayA9IG91dHB1dDxHZW9DaGFydFNlZ21lbnRDbGljaz4oKTtcbiAgcmVhZG9ubHkgc29ydENoYW5nZSA9IG91dHB1dDxHZW9DaGFydFNvcnQ+KCk7XG5cbiAgcmVhZG9ubHkgc29ydGVkRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLmRhdGEoKV07XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc29ydCgpO1xuICAgIGlmIChzb3J0ID09PSAnYXNjJykge1xuICAgICAgcmV0dXJuIGl0ZW1zLnNvcnQoKGEsIGIpID0+IGEudmFsdWUgLSBiLnZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHNvcnQgPT09ICdkZXNjJykge1xuICAgICAgcmV0dXJuIGl0ZW1zLnNvcnQoKGEsIGIpID0+IGIudmFsdWUgLSBhLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9KTtcblxuICByZWFkb25seSBtYXhWYWx1ZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgTWF0aC5tYXgoMCwgLi4udGhpcy5zb3J0ZWREYXRhKCkubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSksXG4gICk7XG5cbiAgcmVhZG9ubHkgdG90YWwgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuc29ydGVkRGF0YSgpLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyBpdGVtLnZhbHVlLCAwKSxcbiAgKTtcblxuICByZWFkb25seSBkb251dFNlZ21lbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5zb3J0ZWREYXRhKCk7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLnRvdGFsKCkgfHwgMTtcbiAgICBjb25zdCByYWRpdXMgPSA1NjtcbiAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiByYWRpdXM7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gaXRlbS52YWx1ZSAvIHRvdGFsO1xuICAgICAgY29uc3QgbGVuZ3RoID0gcmF0aW8gKiBjaXJjdW1mZXJlbmNlO1xuICAgICAgY29uc3Qgc2VnbWVudCA9IHtcbiAgICAgICAgZGF0dW06IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBjb2xvcjogaXRlbS5jb2xvciB8fCBERUZBVUxUX0NPTE9SU1tpbmRleCAlIERFRkFVTFRfQ09MT1JTLmxlbmd0aF0sXG4gICAgICAgIGRhc2hhcnJheTogYCR7bGVuZ3RofSAke2NpcmN1bWZlcmVuY2UgLSBsZW5ndGh9YCxcbiAgICAgICAgZGFzaG9mZnNldDogLW9mZnNldCxcbiAgICAgICAgcGVyY2VudDogTWF0aC5yb3VuZChyYXRpbyAqIDEwMDApIC8gMTAsXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ICs9IGxlbmd0aDtcbiAgICAgIHJldHVybiBzZWdtZW50O1xuICAgIH0pO1xuICB9KTtcblxuICBjb2xvck9mKGl0ZW06IEdlb0NoYXJ0RGF0dW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmNvbG9yIHx8IERFRkFVTFRfQ09MT1JTW2luZGV4ICUgREVGQVVMVF9DT0xPUlMubGVuZ3RoXTtcbiAgfVxuXG4gIGJhcldpZHRoKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1heCA9IHRoaXMubWF4VmFsdWUoKSB8fCAxO1xuICAgIHJldHVybiBgJHtNYXRoLm1heCgyLCAodmFsdWUgLyBtYXgpICogMTAwKX0lYDtcbiAgfVxuXG4gIHNldFNvcnQobmV4dDogR2VvQ2hhcnRTb3J0KTogdm9pZCB7XG4gICAgdGhpcy5zb3J0LnNldChuZXh0KTtcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIG9uU2VnbWVudChkYXR1bTogR2VvQ2hhcnREYXR1bSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VnbWVudENsaWNrLmVtaXQoeyBkYXR1bSwgaW5kZXggfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnZW8tY2hhcnRcIiBbc3R5bGUuLS1nZW8tY2hhcnQtaGVpZ2h0LnB4XT1cImhlaWdodCgpXCI+XG4gIDxoZWFkZXIgY2xhc3M9XCJnZW8tY2hhcnRfX2hlYWRlclwiPlxuICAgIEBpZiAodGl0bGUoKSkge1xuICAgICAgPGgzIGNsYXNzPVwiZ2VvLWNoYXJ0X190aXRsZVwiPnt7IHRpdGxlKCkgfX08L2gzPlxuICAgIH1cbiAgICBAaWYgKHNob3dTb3J0KCkgJiYgdHlwZSgpID09PSAnYmFyJykge1xuICAgICAgPGRpdiBjbGFzcz1cImdlby1jaGFydF9fc29ydFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJT4bqvcCB44bq/cFwiPlxuICAgICAgICA8Z2VvLWJ1dHRvblxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgW2FjdGl2ZV09XCJzb3J0KCkgPT09ICdkZXNjJ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwic2V0U29ydCgnZGVzYycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEdp4bqjbSBk4bqnblxuICAgICAgICA8L2dlby1idXR0b24+XG4gICAgICAgIDxnZW8tYnV0dG9uXG4gICAgICAgICAgYXBwZWFyYW5jZT1cInRlcnRpYXJ5XCJcbiAgICAgICAgICBbYWN0aXZlXT1cInNvcnQoKSA9PT0gJ2FzYydcIlxuICAgICAgICAgIChjbGlja2VkKT1cInNldFNvcnQoJ2FzYycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIFTEg25nIGThuqduXG4gICAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9oZWFkZXI+XG5cbiAgQGlmICghc29ydGVkRGF0YSgpLmxlbmd0aCkge1xuICAgIDxnZW8tZW1wdHktc3RhdGUgW3RpdGxlXT1cImVtcHR5VGV4dCgpXCIgaWNvbj1cImJhci1jaGFydFwiIC8+XG4gIH0gQGVsc2UgaWYgKHR5cGUoKSA9PT0gJ2JhcicpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZ2VvLWNoYXJ0X19iYXJzXCIgcm9sZT1cImltZ1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidGl0bGUoKSB8fCAnQmnhu4N1IMSR4buTIGPhu5l0J1wiPlxuICAgICAgQGZvciAoaXRlbSBvZiBzb3J0ZWREYXRhKCk7IHRyYWNrIGl0ZW0uaWQgPz8gaXRlbS5sYWJlbDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiZ2VvLWNoYXJ0X19iYXItcm93XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWdtZW50KGl0ZW0sIGkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLWNoYXJ0X19iYXItbGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnZW8tY2hhcnRfX2Jhci10cmFja1wiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJnZW8tY2hhcnRfX2Jhci1maWxsXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImJhcldpZHRoKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiY29sb3JPZihpdGVtLCBpKVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby1jaGFydF9fYmFyLXZhbHVlXCI+XG4gICAgICAgICAgICB7eyBpdGVtLnZhbHVlIH19e3sgdW5pdCgpID8gJyAnICsgdW5pdCgpIDogJycgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwiZ2VvLWNoYXJ0X19kb251dC13cmFwXCI+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwiZ2VvLWNoYXJ0X19kb251dFwiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiXG4gICAgICAgIHJvbGU9XCJpbWdcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRpdGxlKCkgfHwgJ0Jp4buDdSDEkeG7kyBkb251dCdcIlxuICAgICAgPlxuICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgY2xhc3M9XCJnZW8tY2hhcnRfX2RvbnV0LXRyYWNrXCJcbiAgICAgICAgICBjeD1cIjcwXCJcbiAgICAgICAgICBjeT1cIjcwXCJcbiAgICAgICAgICByPVwiNTZcIlxuICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxOFwiXG4gICAgICAgIC8+XG4gICAgICAgIEBmb3IgKHNlZyBvZiBkb251dFNlZ21lbnRzKCk7IHRyYWNrIHNlZy5kYXR1bS5pZCA/PyBzZWcuZGF0dW0ubGFiZWwpIHtcbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImdlby1jaGFydF9fZG9udXQtc2VnXCJcbiAgICAgICAgICAgIGN4PVwiNzBcIlxuICAgICAgICAgICAgY3k9XCI3MFwiXG4gICAgICAgICAgICByPVwiNTZcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMThcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlZy5jb2xvclwiXG4gICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlZy5kYXNoYXJyYXlcIlxuICAgICAgICAgICAgW2F0dHIuc3Ryb2tlLWRhc2hvZmZzZXRdPVwic2VnLmRhc2hvZmZzZXRcIlxuICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKC05MCA3MCA3MClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VnbWVudChzZWcuZGF0dW0sIHNlZy5pbmRleClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgICAgPHRleHQgeD1cIjcwXCIgeT1cIjY2XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBjbGFzcz1cImdlby1jaGFydF9fZG9udXQtY2VudGVyLWxhYmVsXCI+XG4gICAgICAgICAgVOG7lW5nXG4gICAgICAgIDwvdGV4dD5cbiAgICAgICAgPHRleHQgeD1cIjcwXCIgeT1cIjg0XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBjbGFzcz1cImdlby1jaGFydF9fZG9udXQtY2VudGVyLXZhbHVlXCI+XG4gICAgICAgICAge3sgdG90YWwoKSB9fVxuICAgICAgICA8L3RleHQ+XG4gICAgICA8L3N2Zz5cblxuICAgICAgQGlmIChzaG93TGVnZW5kKCkpIHtcbiAgICAgICAgPHVsIGNsYXNzPVwiZ2VvLWNoYXJ0X19sZWdlbmRcIj5cbiAgICAgICAgICBAZm9yIChzZWcgb2YgZG9udXRTZWdtZW50cygpOyB0cmFjayBzZWcuZGF0dW0uaWQgPz8gc2VnLmRhdHVtLmxhYmVsKSB7XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImdlby1jaGFydF9fbGVnZW5kLWl0ZW1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlZ21lbnQoc2VnLmRhdHVtLCBzZWcuaW5kZXgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImdlby1jaGFydF9fc3dhdGNoXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInNlZy5jb2xvclwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdlby1jaGFydF9fbGVnZW5kLWxhYmVsXCI+e3sgc2VnLmRhdHVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2VvLWNoYXJ0X19sZWdlbmQtdmFsdWVcIj57eyBzZWcucGVyY2VudCB9fSU8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdWw+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChildren, Directive, inject, input, TemplateRef, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
3
|
+
import { NgZorroAntdModule } from '../../ng-zorro/ng-zorro-antd.module';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "ng-zorro-antd/descriptions";
|
|
6
|
+
export class GeoDetailViewItemDirective {
|
|
7
|
+
key = input.required({ alias: 'uiDetailItem' });
|
|
8
|
+
template = inject((TemplateRef));
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoDetailViewItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
10
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: GeoDetailViewItemDirective, isStandalone: true, selector: "[uiDetailItem]", inputs: { key: { classPropertyName: "key", publicName: "uiDetailItem", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoDetailViewItemDirective, decorators: [{
|
|
13
|
+
type: Directive,
|
|
14
|
+
args: [{
|
|
15
|
+
selector: '[uiDetailItem]',
|
|
16
|
+
standalone: true,
|
|
17
|
+
}]
|
|
18
|
+
}] });
|
|
19
|
+
/**
|
|
20
|
+
* Read-only key/value grid for viewing entity details.
|
|
21
|
+
*
|
|
22
|
+
* @summary Lưới label/value chỉ đọc (nz-descriptions); value tùy biến qua `[uiDetailItem]`.
|
|
23
|
+
* @whenToUse Trang/khối xem chi tiết hồ sơ, thửa đất, người dùng… (không chỉnh sửa).
|
|
24
|
+
* @doNotUseWhen Cần nhập liệu — use geo-input/geo-select trong form.
|
|
25
|
+
*/
|
|
26
|
+
export class GeoDetailViewComponent {
|
|
27
|
+
title = input('');
|
|
28
|
+
items = input([]);
|
|
29
|
+
column = input(2);
|
|
30
|
+
bordered = input(true);
|
|
31
|
+
layout = input('horizontal');
|
|
32
|
+
size = input('default');
|
|
33
|
+
itemTemplates;
|
|
34
|
+
getTemplate(key) {
|
|
35
|
+
return this.itemTemplates?.find((item) => item.key() === key)?.template ?? null;
|
|
36
|
+
}
|
|
37
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoDetailViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
38
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoDetailViewComponent, isStandalone: true, selector: "geo-detail-view", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "geo-detail-view-host" }, queries: [{ propertyName: "itemTemplates", predicate: GeoDetailViewItemDirective }], ngImport: i0, template: "<nz-descriptions\n class=\"geo-detail-view\"\n [nzTitle]=\"title()\"\n [nzColumn]=\"column()\"\n [nzBordered]=\"bordered()\"\n [nzLayout]=\"layout()\"\n [nzSize]=\"size()\"\n>\n @for (item of items(); track item.key) {\n <nz-descriptions-item [nzTitle]=\"item.label\" [nzSpan]=\"item.span ?? 1\">\n @if (getTemplate(item.key); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n } @else {\n {{ item.value ?? '\u2014' }}\n }\n </nz-descriptions-item>\n }\n</nz-descriptions>\n", styles: [".geo-detail-view-host{display:block;width:100%}.geo-detail-view.ant-descriptions{font-family:var(--geo-font-family)}.geo-detail-view .ant-descriptions-title{font-size:var(--geo-font-size-h4, 16px);font-weight:var(--geo-font-weight-bold, 600);color:var(--geo-color-neutral-900)}.geo-detail-view .ant-descriptions-item-label{color:var(--geo-color-neutral-500);font-weight:500;background:var(--geo-color-surface-subtle)}.geo-detail-view .ant-descriptions-item-content{color:var(--geo-color-neutral-900)}.geo-detail-view.ant-descriptions-bordered .ant-descriptions-view{border-radius:var(--geo-radius);border-color:var(--geo-color-border-default)}.geo-detail-view.ant-descriptions-bordered .ant-descriptions-item-label,.geo-detail-view.ant-descriptions-bordered .ant-descriptions-item-content{border-color:var(--geo-color-border-default)}\n"], dependencies: [{ kind: "ngmodule", type: NgZorroAntdModule }, { kind: "component", type: i1.NzDescriptionsComponent, selector: "nz-descriptions", inputs: ["nzBordered", "nzLayout", "nzColumn", "nzSize", "nzTitle", "nzExtra", "nzColon"], exportAs: ["nzDescriptions"] }, { kind: "component", type: i1.NzDescriptionsItemComponent, selector: "nz-descriptions-item", inputs: ["nzSpan", "nzTitle"], exportAs: ["nzDescriptionsItem"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoDetailViewComponent, decorators: [{
|
|
41
|
+
type: Component,
|
|
42
|
+
args: [{ selector: 'geo-detail-view', standalone: true, imports: [NgZorroAntdModule, NgTemplateOutlet], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'geo-detail-view-host' }, template: "<nz-descriptions\n class=\"geo-detail-view\"\n [nzTitle]=\"title()\"\n [nzColumn]=\"column()\"\n [nzBordered]=\"bordered()\"\n [nzLayout]=\"layout()\"\n [nzSize]=\"size()\"\n>\n @for (item of items(); track item.key) {\n <nz-descriptions-item [nzTitle]=\"item.label\" [nzSpan]=\"item.span ?? 1\">\n @if (getTemplate(item.key); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\"></ng-container>\n } @else {\n {{ item.value ?? '\u2014' }}\n }\n </nz-descriptions-item>\n }\n</nz-descriptions>\n", styles: [".geo-detail-view-host{display:block;width:100%}.geo-detail-view.ant-descriptions{font-family:var(--geo-font-family)}.geo-detail-view .ant-descriptions-title{font-size:var(--geo-font-size-h4, 16px);font-weight:var(--geo-font-weight-bold, 600);color:var(--geo-color-neutral-900)}.geo-detail-view .ant-descriptions-item-label{color:var(--geo-color-neutral-500);font-weight:500;background:var(--geo-color-surface-subtle)}.geo-detail-view .ant-descriptions-item-content{color:var(--geo-color-neutral-900)}.geo-detail-view.ant-descriptions-bordered .ant-descriptions-view{border-radius:var(--geo-radius);border-color:var(--geo-color-border-default)}.geo-detail-view.ant-descriptions-bordered .ant-descriptions-item-label,.geo-detail-view.ant-descriptions-bordered .ant-descriptions-item-content{border-color:var(--geo-color-border-default)}\n"] }]
|
|
43
|
+
}], propDecorators: { itemTemplates: [{
|
|
44
|
+
type: ContentChildren,
|
|
45
|
+
args: [GeoDetailViewItemDirective]
|
|
46
|
+
}] } });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWRldGFpbC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dlby11aS9zcmMvbGliL2ZpZ21hL2dlby1kZXRhaWwtdmlldy9nZW8tZGV0YWlsLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWRldGFpbC12aWV3L2dlby1kZXRhaWwtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBRUwsV0FBVyxFQUNYLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBVXhFLE1BQU0sT0FBTywwQkFBMEI7SUFDNUIsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQVMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN4RCxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUEsV0FBb0IsQ0FBQSxDQUFDLENBQUM7d0dBRnRDLDBCQUEwQjs0RkFBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUp0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFNRDs7Ozs7O0dBTUc7QUFXSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ3hCLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBc0IsRUFBRSxDQUFDLENBQUM7SUFDdkMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sR0FBRyxLQUFLLENBQXNCLFlBQVksQ0FBQyxDQUFDO0lBQ2xELElBQUksR0FBRyxLQUFLLENBQW9CLFNBQVMsQ0FBQyxDQUFDO0lBRVAsYUFBYSxDQUF5QztJQUVuRyxXQUFXLENBQUMsR0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQztJQUNsRixDQUFDO3dHQVpVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLG00QkFRaEIsMEJBQTBCLDZCQ3BEN0MsMmhCQWtCQSw2M0JEbUJZLGlCQUFpQiw4WUFBRSxnQkFBZ0I7OzRGQU9sQyxzQkFBc0I7a0JBVmxDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsaUJBRy9CLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7OEJBVU0sYUFBYTtzQkFBekQsZUFBZTt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ1pvcnJvQW50ZE1vZHVsZSB9IGZyb20gJy4uLy4uL25nLXpvcnJvL25nLXpvcnJvLWFudGQubW9kdWxlJztcbmltcG9ydCB7IEdlb0RldGFpbFZpZXdJdGVtIH0gZnJvbSAnLi9nZW8tZGV0YWlsLXZpZXcudHlwZXMnO1xuXG5leHBvcnQgdHlwZSBHZW9EZXRhaWxWaWV3TGF5b3V0ID0gJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbmV4cG9ydCB0eXBlIEdlb0RldGFpbFZpZXdTaXplID0gJ2RlZmF1bHQnIHwgJ3NtYWxsJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3VpRGV0YWlsSXRlbV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBHZW9EZXRhaWxWaWV3SXRlbURpcmVjdGl2ZSB7XG4gIHJlYWRvbmx5IGtleSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oeyBhbGlhczogJ3VpRGV0YWlsSXRlbScgfSk7XG4gIHJlYWRvbmx5IHRlbXBsYXRlID0gaW5qZWN0KFRlbXBsYXRlUmVmPHVua25vd24+KTtcbn1cblxuLyoqXG4gKiBSZWFkLW9ubHkga2V5L3ZhbHVlIGdyaWQgZm9yIHZpZXdpbmcgZW50aXR5IGRldGFpbHMuXG4gKlxuICogQHN1bW1hcnkgTMaw4bubaSBsYWJlbC92YWx1ZSBjaOG7iSDEkeG7jWMgKG56LWRlc2NyaXB0aW9ucyk7IHZhbHVlIHTDuXkgYmnhur9uIHF1YSBgW3VpRGV0YWlsSXRlbV1gLlxuICogQHdoZW5Ub1VzZSBUcmFuZy9raOG7kWkgeGVtIGNoaSB0aeG6v3QgaOG7kyBzxqEsIHRo4butYSDEkeG6pXQsIG5nxrDhu51pIGTDuW5n4oCmIChraMO0bmcgY2jhu4luaCBz4butYSkuXG4gKiBAZG9Ob3RVc2VXaGVuIEPhuqduIG5o4bqtcCBsaeG7h3Ug4oCUIHVzZSBnZW8taW5wdXQvZ2VvLXNlbGVjdCB0cm9uZyBmb3JtLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tZGV0YWlsLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdab3Jyb0FudGRNb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLWRldGFpbC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1kZXRhaWwtdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnZ2VvLWRldGFpbC12aWV3LWhvc3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0RldGFpbFZpZXdDb21wb25lbnQge1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KCcnKTtcbiAgcmVhZG9ubHkgaXRlbXMgPSBpbnB1dDxHZW9EZXRhaWxWaWV3SXRlbVtdPihbXSk7XG4gIHJlYWRvbmx5IGNvbHVtbiA9IGlucHV0KDIpO1xuICByZWFkb25seSBib3JkZXJlZCA9IGlucHV0KHRydWUpO1xuICByZWFkb25seSBsYXlvdXQgPSBpbnB1dDxHZW9EZXRhaWxWaWV3TGF5b3V0PignaG9yaXpvbnRhbCcpO1xuICByZWFkb25seSBzaXplID0gaW5wdXQ8R2VvRGV0YWlsVmlld1NpemU+KCdkZWZhdWx0Jyk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihHZW9EZXRhaWxWaWV3SXRlbURpcmVjdGl2ZSkgaXRlbVRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxHZW9EZXRhaWxWaWV3SXRlbURpcmVjdGl2ZT47XG5cbiAgZ2V0VGVtcGxhdGUoa2V5OiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLml0ZW1UZW1wbGF0ZXM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5KCkgPT09IGtleSk/LnRlbXBsYXRlID8/IG51bGw7XG4gIH1cbn1cbiIsIjxuei1kZXNjcmlwdGlvbnNcbiAgY2xhc3M9XCJnZW8tZGV0YWlsLXZpZXdcIlxuICBbbnpUaXRsZV09XCJ0aXRsZSgpXCJcbiAgW256Q29sdW1uXT1cImNvbHVtbigpXCJcbiAgW256Qm9yZGVyZWRdPVwiYm9yZGVyZWQoKVwiXG4gIFtuekxheW91dF09XCJsYXlvdXQoKVwiXG4gIFtuelNpemVdPVwic2l6ZSgpXCJcbj5cbiAgQGZvciAoaXRlbSBvZiBpdGVtcygpOyB0cmFjayBpdGVtLmtleSkge1xuICAgIDxuei1kZXNjcmlwdGlvbnMtaXRlbSBbbnpUaXRsZV09XCJpdGVtLmxhYmVsXCIgW256U3Bhbl09XCJpdGVtLnNwYW4gPz8gMVwiPlxuICAgICAgQGlmIChnZXRUZW1wbGF0ZShpdGVtLmtleSk7IGFzIHRwbCkge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHt7IGl0ZW0udmFsdWUgPz8gJ+KAlCcgfX1cbiAgICAgIH1cbiAgICA8L256LWRlc2NyaXB0aW9ucy1pdGVtPlxuICB9XG48L256LWRlc2NyaXB0aW9ucz5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWRldGFpbC12aWV3LnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWRldGFpbC12aWV3L2dlby1kZXRhaWwtdmlldy50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBHZW9EZXRhaWxWaWV3SXRlbSB7XG4gIGtleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogQuG7jyBxdWEgbuG6v3UgZMO5bmcgYFt1aURldGFpbEl0ZW1dYCDEkeG7gyBjaGnhur91IG7hu5lpIGR1bmcgdMO5eSBiaeG6v24uICovXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFPhu5EgY+G7mXQgY2hp4bq/bSBk4bulbmcgKG3hurdjIMSR4buLbmggMSkuICovXG4gIHNwYW4/OiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -13,10 +13,10 @@ export class GeoListPageComponent {
|
|
|
13
13
|
breadcrumb = input([]);
|
|
14
14
|
uppercase = input(true);
|
|
15
15
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoListPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: GeoListPageComponent, isStandalone: true, selector: "geo-list-page", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", isSignal: true, isRequired: false, transformFunction: null }, uppercase: { classPropertyName: "uppercase", publicName: "uppercase", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "geo-list-page-host" }, ngImport: i0, template: "<div class=\"geo-list-page\">\n <geo-page-header\n [title]=\"title()\"\n [breadcrumb]=\"breadcrumb()\"\n [uppercase]=\"uppercase()\"\n >\n <div geoPageActions>\n <ng-content select=\"[geoListActions]\" />\n </div>\n <div geoPageFilters>\n <ng-content select=\"[geoListFilters]\" />\n </div>\n </geo-page-header>\n\n <div class=\"geo-list-page__filter\">\n <ng-content select=\"geo-table-filter,[geoListFilter]\" />\n </div>\n\n <div class=\"geo-list-page__table-panel\">\n <div class=\"geo-list-page__toolbar\">\n <ng-content select=\"geo-table-toolbar,[geoListToolbar]\" />\n </div>\n <div class=\"geo-list-page__body\">\n <ng-content />\n </div>\n </div>\n</div>\n", styles: ["
|
|
16
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: GeoListPageComponent, isStandalone: true, selector: "geo-list-page", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, breadcrumb: { classPropertyName: "breadcrumb", publicName: "breadcrumb", isSignal: true, isRequired: false, transformFunction: null }, uppercase: { classPropertyName: "uppercase", publicName: "uppercase", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "geo-list-page-host" }, ngImport: i0, template: "<div class=\"geo-list-page\">\n <geo-page-header\n [title]=\"title()\"\n [breadcrumb]=\"breadcrumb()\"\n [uppercase]=\"uppercase()\"\n >\n <div geoPageActions>\n <ng-content select=\"[geoListActions]\" />\n </div>\n <div geoPageFilters>\n <ng-content select=\"[geoListFilters]\" />\n </div>\n </geo-page-header>\n\n <div class=\"geo-list-page__filter\">\n <ng-content select=\"geo-table-filter,[geoListFilter]\" />\n </div>\n\n <div class=\"geo-list-page__table-panel\">\n <div class=\"geo-list-page__toolbar\">\n <ng-content select=\"geo-table-toolbar,[geoListToolbar]\" />\n </div>\n <div class=\"geo-list-page__body\">\n <ng-content />\n </div>\n </div>\n</div>\n", styles: [".geo-list-page-host{display:block}.geo-list-page{display:flex;flex-direction:column;gap:16px}.geo-list-page__filter:empty,.geo-list-page__toolbar:empty{display:none}[geoPageActions]{display:contents}.geo-list-page__table-panel{display:flex;flex-direction:column;min-width:0;gap:0}.geo-list-page__body{min-width:0}\n"], dependencies: [{ kind: "component", type: GeoPageHeaderComponent, selector: "geo-page-header", inputs: ["title", "breadcrumb", "uppercase"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
17
17
|
}
|
|
18
18
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoListPageComponent, decorators: [{
|
|
19
19
|
type: Component,
|
|
20
|
-
args: [{ selector: 'geo-list-page', standalone: true, imports: [GeoPageHeaderComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'geo-list-page-host' }, template: "<div class=\"geo-list-page\">\n <geo-page-header\n [title]=\"title()\"\n [breadcrumb]=\"breadcrumb()\"\n [uppercase]=\"uppercase()\"\n >\n <div geoPageActions>\n <ng-content select=\"[geoListActions]\" />\n </div>\n <div geoPageFilters>\n <ng-content select=\"[geoListFilters]\" />\n </div>\n </geo-page-header>\n\n <div class=\"geo-list-page__filter\">\n <ng-content select=\"geo-table-filter,[geoListFilter]\" />\n </div>\n\n <div class=\"geo-list-page__table-panel\">\n <div class=\"geo-list-page__toolbar\">\n <ng-content select=\"geo-table-toolbar,[geoListToolbar]\" />\n </div>\n <div class=\"geo-list-page__body\">\n <ng-content />\n </div>\n </div>\n</div>\n", styles: ["
|
|
20
|
+
args: [{ selector: 'geo-list-page', standalone: true, imports: [GeoPageHeaderComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'geo-list-page-host' }, template: "<div class=\"geo-list-page\">\n <geo-page-header\n [title]=\"title()\"\n [breadcrumb]=\"breadcrumb()\"\n [uppercase]=\"uppercase()\"\n >\n <div geoPageActions>\n <ng-content select=\"[geoListActions]\" />\n </div>\n <div geoPageFilters>\n <ng-content select=\"[geoListFilters]\" />\n </div>\n </geo-page-header>\n\n <div class=\"geo-list-page__filter\">\n <ng-content select=\"geo-table-filter,[geoListFilter]\" />\n </div>\n\n <div class=\"geo-list-page__table-panel\">\n <div class=\"geo-list-page__toolbar\">\n <ng-content select=\"geo-table-toolbar,[geoListToolbar]\" />\n </div>\n <div class=\"geo-list-page__body\">\n <ng-content />\n </div>\n </div>\n</div>\n", styles: [".geo-list-page-host{display:block}.geo-list-page{display:flex;flex-direction:column;gap:16px}.geo-list-page__filter:empty,.geo-list-page__toolbar:empty{display:none}[geoPageActions]{display:contents}.geo-list-page__table-panel{display:flex;flex-direction:column;min-width:0;gap:0}.geo-list-page__body{min-width:0}\n"] }]
|
|
21
21
|
}] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWxpc3QtcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbGlzdC1wYWdlL2dlby1saXN0LXBhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWxpc3QtcGFnZS9nZW8tbGlzdC1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7O0FBR3RGOzs7Ozs7R0FNRztBQVdILE1BQU0sT0FBTyxvQkFBb0I7SUFDdEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixVQUFVLEdBQUcsS0FBSyxDQUFzQixFQUFFLENBQUMsQ0FBQztJQUM1QyxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3dHQUh0QixvQkFBb0I7NEZBQXBCLG9CQUFvQix3Z0JDMUJqQywydEJBMkJBLHFYRFJZLHNCQUFzQjs7NEZBT3JCLG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQLENBQUMsc0JBQXNCLENBQUMsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0IsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgR2VvUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2dlby1wYWdlLWhlYWRlci9nZW8tcGFnZS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgR2VvQnJlYWRjcnVtYkl0ZW0gfSBmcm9tICcuLi9nZW8tYnJlYWRjcnVtYi9nZW8tYnJlYWRjcnVtYi50eXBlcyc7XG5cbi8qKlxuICogU3RhbmRhcmQgbGlzdCAvIENSVUQgcGFnZSBjaHJvbWUgKGFkbWluICYgdGjhu5FuZyBrw6opLlxuICpcbiAqIEBzdW1tYXJ5IExheW91dCB0cmFuZyBkYW5oIHPDoWNoOiBoZWFkZXIgKyBmaWx0ZXIgKyB0b29sYmFyICsgbuG7mWkgZHVuZyBi4bqjbmcuXG4gKiBAd2hlblRvVXNlIFFMIG5nxrDhu51pIGTDuW5nLCDEkeG7k25nIGLhu5kgaUxJUywgUUwgZOG7i2NoIHbhu6UvYuG6o24gxJHhu5MsIHRo4buRbmcga8OqIHThu50uXG4gKiBAZG9Ob3RVc2VXaGVuIE1hcCBwb3J0YWwg4oCUIHVzZSBnZW8tbWFwLXNoZWxsLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnZW8tbGlzdC1wYWdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0dlb1BhZ2VIZWFkZXJDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvLWxpc3QtcGFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9nZW8tbGlzdC1wYWdlLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHsgY2xhc3M6ICdnZW8tbGlzdC1wYWdlLWhvc3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIEdlb0xpc3RQYWdlQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dCgnJyk7XG4gIHJlYWRvbmx5IGJyZWFkY3J1bWIgPSBpbnB1dDxHZW9CcmVhZGNydW1iSXRlbVtdPihbXSk7XG4gIHJlYWRvbmx5IHVwcGVyY2FzZSA9IGlucHV0KHRydWUpO1xufVxuIiwiPGRpdiBjbGFzcz1cImdlby1saXN0LXBhZ2VcIj5cbiAgPGdlby1wYWdlLWhlYWRlclxuICAgIFt0aXRsZV09XCJ0aXRsZSgpXCJcbiAgICBbYnJlYWRjcnVtYl09XCJicmVhZGNydW1iKClcIlxuICAgIFt1cHBlcmNhc2VdPVwidXBwZXJjYXNlKClcIlxuICA+XG4gICAgPGRpdiBnZW9QYWdlQWN0aW9ucz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltnZW9MaXN0QWN0aW9uc11cIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZ2VvUGFnZUZpbHRlcnM+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZ2VvTGlzdEZpbHRlcnNdXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9nZW8tcGFnZS1oZWFkZXI+XG5cbiAgPGRpdiBjbGFzcz1cImdlby1saXN0LXBhZ2VfX2ZpbHRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImdlby10YWJsZS1maWx0ZXIsW2dlb0xpc3RGaWx0ZXJdXCIgLz5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdlby1saXN0LXBhZ2VfX3RhYmxlLXBhbmVsXCI+XG4gICAgPGRpdiBjbGFzcz1cImdlby1saXN0LXBhZ2VfX3Rvb2xiYXJcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImdlby10YWJsZS10b29sYmFyLFtnZW9MaXN0VG9vbGJhcl1cIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnZW8tbGlzdC1wYWdlX19ib2R5XCI+XG4gICAgICA8bmctY29udGVudCAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|