@geoit/ui 0.0.6 → 0.0.7
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/README.md +1 -1
- package/ai/catalog.json +64 -2
- package/ai/components/geo-map-admin-filter.md +1 -0
- package/ai/components/geo-map-legend.md +1 -0
- package/ai/components/geo-map-shell.md +7 -0
- package/ai/components/geo-tree.md +2 -0
- package/ai/mockup.html +2 -2
- package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +14 -3
- 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 +5 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +5 -3
- package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +22 -3
- package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +13 -1
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +17 -3
- package/fesm2022/geoit-ui.mjs +72 -13
- package/fesm2022/geoit-ui.mjs.map +1 -1
- package/lib/figma/geo-chart/geo-chart.component.d.ts +9 -0
- package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +3 -1
- package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +3 -1
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +19 -2
- package/lib/figma/geo-map/geo-map.constants.d.ts +6 -0
- package/lib/figma/geo-tree/geo-tree.component.d.ts +5 -1
- package/package.json +1 -1
package/ai/README.md
CHANGED
|
@@ -73,6 +73,6 @@ Agent rules: [`AGENTS.md`](./AGENTS.md) · Recipes: [`recipes.md`](./recipes.md)
|
|
|
73
73
|
| `geo-typography` | display | Text with GEO type scale (h1–tiny) and semantic colors. | [geo-typography.md](./components/geo-typography.md) |
|
|
74
74
|
| `geo-upload` | forms | Drag-drop upload zone with progress list. | [geo-upload.md](./components/geo-upload.md) |
|
|
75
75
|
|
|
76
|
-
Generated: 2026-09-
|
|
76
|
+
Generated: 2026-09-04T07:20:22.166Z
|
|
77
77
|
|
|
78
78
|
Regenerate: `npm run ai:docs`
|
package/ai/catalog.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "@geoit/ui",
|
|
3
3
|
"import": "@geoit/ui",
|
|
4
|
-
"version": "0.0.
|
|
5
|
-
"generatedAt": "2026-09-
|
|
4
|
+
"version": "0.0.7",
|
|
5
|
+
"generatedAt": "2026-09-04T07:20:22.166Z",
|
|
6
6
|
"styles": [
|
|
7
7
|
"@geoit/ui/src/lib/styles/design-tokens.scss",
|
|
8
8
|
"@geoit/ui/src/lib/styles/theme.scss"
|
|
@@ -2610,6 +2610,12 @@
|
|
|
2610
2610
|
"default": "[]",
|
|
2611
2611
|
"note": ""
|
|
2612
2612
|
},
|
|
2613
|
+
{
|
|
2614
|
+
"name": "selectionMode",
|
|
2615
|
+
"type": "'single' | 'multi'",
|
|
2616
|
+
"default": "'multi'",
|
|
2617
|
+
"note": "`single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định)."
|
|
2618
|
+
},
|
|
2613
2619
|
{
|
|
2614
2620
|
"name": "checkedKeys",
|
|
2615
2621
|
"type": "Array<string | number>",
|
|
@@ -2960,6 +2966,12 @@
|
|
|
2960
2966
|
"default": "[]",
|
|
2961
2967
|
"note": ""
|
|
2962
2968
|
},
|
|
2969
|
+
{
|
|
2970
|
+
"name": "catalogMissing",
|
|
2971
|
+
"type": "boolean",
|
|
2972
|
+
"default": "false",
|
|
2973
|
+
"note": "True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`)."
|
|
2974
|
+
},
|
|
2963
2975
|
{
|
|
2964
2976
|
"name": "open",
|
|
2965
2977
|
"type": "boolean",
|
|
@@ -3452,12 +3464,30 @@
|
|
|
3452
3464
|
"default": "GEO_MAP_DEMO_ADMIN_NODES",
|
|
3453
3465
|
"note": ""
|
|
3454
3466
|
},
|
|
3467
|
+
{
|
|
3468
|
+
"name": "adminSelectionMode",
|
|
3469
|
+
"type": "'single' | 'multi'",
|
|
3470
|
+
"default": "'multi'",
|
|
3471
|
+
"note": "`single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định)."
|
|
3472
|
+
},
|
|
3455
3473
|
{
|
|
3456
3474
|
"name": "locationLabel",
|
|
3457
3475
|
"type": "string",
|
|
3458
3476
|
"default": "'Phường 1 — TP Đà Lạt, Lâm Đồng'",
|
|
3459
3477
|
"note": ""
|
|
3460
3478
|
},
|
|
3479
|
+
{
|
|
3480
|
+
"name": "measureDisclaimer",
|
|
3481
|
+
"type": "string | null",
|
|
3482
|
+
"default": "'Giá trị tham khảo trên bản đồ, không có giá trị pháp lý. Diện tích pháp lý của thửa đất lấy theo hồ sơ địa chính.'",
|
|
3483
|
+
"note": "Ghi chú pháp lý hiển thị khi đang đo (BR-10-03). `null` ẩn ghi chú — mặc định giữ nguyên câu chữ đã dùng ở `qh-map-shell`."
|
|
3484
|
+
},
|
|
3485
|
+
{
|
|
3486
|
+
"name": "legendCatalogMissing",
|
|
3487
|
+
"type": "boolean",
|
|
3488
|
+
"default": "false",
|
|
3489
|
+
"note": "True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`)."
|
|
3490
|
+
},
|
|
3461
3491
|
{
|
|
3462
3492
|
"name": "parcelAudience",
|
|
3463
3493
|
"type": "GeoMapParcelAudience",
|
|
@@ -3584,11 +3614,21 @@
|
|
|
3584
3614
|
"type": "OutputEmitterRef<GeoMapClickEvent>",
|
|
3585
3615
|
"note": ""
|
|
3586
3616
|
},
|
|
3617
|
+
{
|
|
3618
|
+
"name": "located",
|
|
3619
|
+
"type": "OutputEmitterRef<[number, number]>",
|
|
3620
|
+
"note": ""
|
|
3621
|
+
},
|
|
3587
3622
|
{
|
|
3588
3623
|
"name": "locateDenied",
|
|
3589
3624
|
"type": "OutputEmitterRef<void>",
|
|
3590
3625
|
"note": ""
|
|
3591
3626
|
},
|
|
3627
|
+
{
|
|
3628
|
+
"name": "locateError",
|
|
3629
|
+
"type": "OutputEmitterRef<{ reason: GeoMapLocateErrorReason; message?: string }>",
|
|
3630
|
+
"note": ""
|
|
3631
|
+
},
|
|
3592
3632
|
{
|
|
3593
3633
|
"name": "actionClick",
|
|
3594
3634
|
"type": "OutputEmitterRef<GeoMapToolbarAction>",
|
|
@@ -3618,6 +3658,16 @@
|
|
|
3618
3658
|
"name": "adminApply",
|
|
3619
3659
|
"type": "OutputEmitterRef<Array<string | number>>",
|
|
3620
3660
|
"note": ""
|
|
3661
|
+
},
|
|
3662
|
+
{
|
|
3663
|
+
"name": "snapshotCaptured",
|
|
3664
|
+
"type": "OutputEmitterRef<void>",
|
|
3665
|
+
"note": ""
|
|
3666
|
+
},
|
|
3667
|
+
{
|
|
3668
|
+
"name": "snapshotError",
|
|
3669
|
+
"type": "OutputEmitterRef<unknown>",
|
|
3670
|
+
"note": ""
|
|
3621
3671
|
}
|
|
3622
3672
|
],
|
|
3623
3673
|
"examples": [
|
|
@@ -5781,12 +5831,24 @@
|
|
|
5781
5831
|
"default": "false",
|
|
5782
5832
|
"note": ""
|
|
5783
5833
|
},
|
|
5834
|
+
{
|
|
5835
|
+
"name": "selectionMode",
|
|
5836
|
+
"type": "'single' | 'multi'",
|
|
5837
|
+
"default": "'multi'",
|
|
5838
|
+
"note": "`single` — click chọn đúng 1 node (BR-06-03); `multi` — giữ hành vi checkbox hiện có."
|
|
5839
|
+
},
|
|
5784
5840
|
{
|
|
5785
5841
|
"name": "checkedKeys",
|
|
5786
5842
|
"type": "Array<string | number>",
|
|
5787
5843
|
"default": "[]",
|
|
5788
5844
|
"note": "Two-way `model()` (supports banana binding)."
|
|
5789
5845
|
},
|
|
5846
|
+
{
|
|
5847
|
+
"name": "selectedKeys",
|
|
5848
|
+
"type": "Array<string | number>",
|
|
5849
|
+
"default": "[]",
|
|
5850
|
+
"note": "Two-way `model()` (supports banana binding)."
|
|
5851
|
+
},
|
|
5790
5852
|
{
|
|
5791
5853
|
"name": "expandedKeys",
|
|
5792
5854
|
"type": "Array<string | number>",
|
|
@@ -45,6 +45,7 @@ Every supported Input (do not invent others):
|
|
|
45
45
|
| `open` | `boolean` | `false` | Two-way `model()` (supports banana binding). |
|
|
46
46
|
| `title` | `string` | `'Đơn vị hành chính'` | — |
|
|
47
47
|
| `nodes` | `GeoTreeNode[]` | `[]` | — |
|
|
48
|
+
| `selectionMode` | `'single' \| 'multi'` | `'multi'` | `single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định). |
|
|
48
49
|
| `checkedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
49
50
|
| `expandedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
50
51
|
|
|
@@ -44,6 +44,7 @@ Every supported Input (do not invent others):
|
|
|
44
44
|
|-------|------|---------|-------------|
|
|
45
45
|
| `title` | `string` | `'Chú giải'` | — |
|
|
46
46
|
| `items` | `GeoMapLegendItem[]` | `[]` | — |
|
|
47
|
+
| `catalogMissing` | `boolean` | `false` | True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`). |
|
|
47
48
|
| `open` | `boolean` | `false` | Two-way `model()` (supports banana binding). |
|
|
48
49
|
|
|
49
50
|
## Outputs
|
|
@@ -56,7 +56,10 @@ Every supported Input (do not invent others):
|
|
|
56
56
|
| `showNav` | `boolean` | `true` | — |
|
|
57
57
|
| `includeDemoLayers` | `boolean` | `true` | — |
|
|
58
58
|
| `adminNodes` | `GeoTreeNode[]` | `GEO_MAP_DEMO_ADMIN_NODES` | — |
|
|
59
|
+
| `adminSelectionMode` | `'single' \| 'multi'` | `'multi'` | `single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định). |
|
|
59
60
|
| `locationLabel` | `string` | `'Phường 1 — TP Đà Lạt, Lâm Đồng'` | — |
|
|
61
|
+
| `measureDisclaimer` | `string \| null` | `'Giá trị tham khảo trên bản đồ, không có giá trị pháp lý. Diện tích pháp lý của thửa đất lấy theo hồ sơ địa chính.'` | Ghi chú pháp lý hiển thị khi đang đo (BR-10-03). `null` ẩn ghi chú — mặc định giữ nguyên câu chữ đã dùng ở `qh-map-shell`. |
|
|
62
|
+
| `legendCatalogMissing` | `boolean` | `false` | True khi danh mục chú giải không tải được (`ERR_MAP_LEGEND_CATALOG_MISSING`). |
|
|
60
63
|
| `parcelAudience` | `GeoMapParcelAudience` | `'citizen'` | — |
|
|
61
64
|
| `provinceExtent` | `readonly [number, number, number, number]` | `GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326` | — |
|
|
62
65
|
| `demoSearch` | `boolean` | `true` | When true, shell seeds mock search results (Storybook / demos). |
|
|
@@ -83,13 +86,17 @@ Every supported Input (do not invent others):
|
|
|
83
86
|
|--------|---------|-------------|
|
|
84
87
|
| `mapReady` | `OutputEmitterRef<GeoMapController>` | — |
|
|
85
88
|
| `mapClick` | `OutputEmitterRef<GeoMapClickEvent>` | — |
|
|
89
|
+
| `located` | `OutputEmitterRef<[number, number]>` | — |
|
|
86
90
|
| `locateDenied` | `OutputEmitterRef<void>` | — |
|
|
91
|
+
| `locateError` | `OutputEmitterRef<{ reason: GeoMapLocateErrorReason; message?: string }>` | — |
|
|
87
92
|
| `actionClick` | `OutputEmitterRef<GeoMapToolbarAction>` | — |
|
|
88
93
|
| `search` | `OutputEmitterRef<GeoMapSearchQuery>` | — |
|
|
89
94
|
| `searchReset` | `OutputEmitterRef<void>` | — |
|
|
90
95
|
| `resultSelect` | `OutputEmitterRef<GeoMapSearchResultItem>` | — |
|
|
91
96
|
| `parcelExport` | `OutputEmitterRef<GeoMapParcelDetail>` | — |
|
|
92
97
|
| `adminApply` | `OutputEmitterRef<Array<string \| number>>` | — |
|
|
98
|
+
| `snapshotCaptured` | `OutputEmitterRef<void>` | — |
|
|
99
|
+
| `snapshotError` | `OutputEmitterRef<unknown>` | — |
|
|
93
100
|
|
|
94
101
|
|
|
95
102
|
## Examples
|
|
@@ -47,7 +47,9 @@ 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ó. |
|
|
50
51
|
| `checkedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
52
|
+
| `selectedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
51
53
|
| `expandedKeys` | `Array<string \| number>` | `[]` | Two-way `model()` (supports banana binding). |
|
|
52
54
|
| `showLine` | `boolean` | `false` | — |
|
|
53
55
|
| `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-04T07:20:22.216Z -->
|
|
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-04T07:20:22.216Z · source: projects/geo-ui/src/lib/styles/design-tokens.scss · 66 component docs in ai/components</span>
|
|
689
689
|
</p>
|
|
690
690
|
</header>
|
|
691
691
|
|
|
@@ -67,6 +67,17 @@ 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
|
+
}
|
|
70
81
|
barWidth(value) {
|
|
71
82
|
const max = this.maxValue() || 1;
|
|
72
83
|
return `${Math.max(2, (value / max) * 100)}%`;
|
|
@@ -79,10 +90,10 @@ export class GeoChartComponent {
|
|
|
79
90
|
this.segmentClick.emit({ datum, index });
|
|
80
91
|
}
|
|
81
92
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
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
|
|
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 trackDatum(item); 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 trackSegment(seg)) {\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 trackSegment(seg)) {\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 });
|
|
83
94
|
}
|
|
84
95
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoChartComponent, decorators: [{
|
|
85
96
|
type: Component,
|
|
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
|
|
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 trackDatum(item); 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 trackSegment(seg)) {\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 trackSegment(seg)) {\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"] }]
|
|
87
98
|
}] });
|
|
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
|
|
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
|
|
@@ -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: ["@charset \"UTF-8\";.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}.geo-list-page__filter:not(:empty){padding:16px;background:var(--geo-color-neutral-white);border:1px solid var(--geo-color-primary-border);border-radius:var(--geo-radius)}.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: ["@charset \"UTF-8\";.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}.geo-list-page__filter:not(:empty){padding:16px;background:var(--geo-color-neutral-white);border:1px solid var(--geo-color-primary-border);border-radius:var(--geo-radius)}.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLWxpc3QtcGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbGlzdC1wYWdlL2dlby1saXN0LXBhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLWxpc3QtcGFnZS9nZW8tbGlzdC1wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7O0FBR3RGOzs7Ozs7R0FNRztBQVdILE1BQU0sT0FBTyxvQkFBb0I7SUFDdEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixVQUFVLEdBQUcsS0FBSyxDQUFzQixFQUFFLENBQUMsQ0FBQztJQUM1QyxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3dHQUh0QixvQkFBb0I7NEZBQXBCLG9CQUFvQix3Z0JDMUJqQywydEJBMkJBLGloQkRSWSxzQkFBc0I7OzRGQU9yQixvQkFBb0I7a0JBVmhDLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLHNCQUFzQixDQUFDLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdlb1BhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9nZW8tcGFnZS1oZWFkZXIvZ2VvLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7IEdlb0JyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi4vZ2VvLWJyZWFkY3J1bWIvZ2VvLWJyZWFkY3J1bWIudHlwZXMnO1xuXG4vKipcbiAqIFN0YW5kYXJkIGxpc3QgLyBDUlVEIHBhZ2UgY2hyb21lIChhZG1pbiAmIHRo4buRbmcga8OqKS5cbiAqXG4gKiBAc3VtbWFyeSBMYXlvdXQgdHJhbmcgZGFuaCBzw6FjaDogaGVhZGVyICsgZmlsdGVyICsgdG9vbGJhciArIG7hu5lpIGR1bmcgYuG6o25nLlxuICogQHdoZW5Ub1VzZSBRTCBuZ8aw4budaSBkw7luZywgxJHhu5NuZyBi4buZIGlMSVMsIFFMIGThu4tjaCB24bulL2LhuqNuIMSR4buTLCB0aOG7kW5nIGvDqiB04budLlxuICogQGRvTm90VXNlV2hlbiBNYXAgcG9ydGFsIOKAlCB1c2UgZ2VvLW1hcC1zaGVsbC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLWxpc3QtcGFnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtHZW9QYWdlSGVhZGVyQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1saXN0LXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VvLWxpc3QtcGFnZS5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnZ2VvLWxpc3QtcGFnZS1ob3N0JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBHZW9MaXN0UGFnZUNvbXBvbmVudCB7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQoJycpO1xuICByZWFkb25seSBicmVhZGNydW1iID0gaW5wdXQ8R2VvQnJlYWRjcnVtYkl0ZW1bXT4oW10pO1xuICByZWFkb25seSB1cHBlcmNhc2UgPSBpbnB1dCh0cnVlKTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJnZW8tbGlzdC1wYWdlXCI+XG4gIDxnZW8tcGFnZS1oZWFkZXJcbiAgICBbdGl0bGVdPVwidGl0bGUoKVwiXG4gICAgW2JyZWFkY3J1bWJdPVwiYnJlYWRjcnVtYigpXCJcbiAgICBbdXBwZXJjYXNlXT1cInVwcGVyY2FzZSgpXCJcbiAgPlxuICAgIDxkaXYgZ2VvUGFnZUFjdGlvbnM+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZ2VvTGlzdEFjdGlvbnNdXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGdlb1BhZ2VGaWx0ZXJzPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2dlb0xpc3RGaWx0ZXJzXVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZ2VvLXBhZ2UtaGVhZGVyPlxuXG4gIDxkaXYgY2xhc3M9XCJnZW8tbGlzdC1wYWdlX19maWx0ZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnZW8tdGFibGUtZmlsdGVyLFtnZW9MaXN0RmlsdGVyXVwiIC8+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJnZW8tbGlzdC1wYWdlX190YWJsZS1wYW5lbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJnZW8tbGlzdC1wYWdlX190b29sYmFyXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJnZW8tdGFibGUtdG9vbGJhcixbZ2VvTGlzdFRvb2xiYXJdXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2VvLWxpc3QtcGFnZV9fYm9keVwiPlxuICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs
CHANGED
|
@@ -14,6 +14,8 @@ export class GeoMapAdminFilterComponent {
|
|
|
14
14
|
open = model(false);
|
|
15
15
|
title = input('Đơn vị hành chính');
|
|
16
16
|
nodes = input([]);
|
|
17
|
+
/** `single` — chọn đúng 1 xã/phường (BR-06-03); `multi` — checkbox nhiều cấp (mặc định). */
|
|
18
|
+
selectionMode = input('multi');
|
|
17
19
|
checkedKeys = model([]);
|
|
18
20
|
expandedKeys = model([]);
|
|
19
21
|
apply = output();
|
|
@@ -40,13 +42,13 @@ export class GeoMapAdminFilterComponent {
|
|
|
40
42
|
this.closed.emit();
|
|
41
43
|
}
|
|
42
44
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapAdminFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
43
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoMapAdminFilterComponent, isStandalone: true, selector: "geo-map-admin-filter", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, checkedKeys: { classPropertyName: "checkedKeys", publicName: "checkedKeys", isSignal: true, isRequired: false, transformFunction: null }, expandedKeys: { classPropertyName: "expandedKeys", publicName: "expandedKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", checkedKeys: "checkedKeysChange", expandedKeys: "expandedKeysChange", apply: "apply", reset: "reset", fitProvince: "fitProvince", closed: "closed", selectionChange: "selectionChange" }, host: { properties: { "class.geo-map-admin-filter-host--open": "open()" }, classAttribute: "geo-map-admin-filter-host" }, ngImport: i0, template: "@if (open()) {\n <section class=\"geo-map-admin-filter\" aria-label=\"L\u1ECDc \u0111\u01A1n v\u1ECB h\u00E0nh ch\u00EDnh\">\n <header class=\"geo-map-admin-filter__header\">\n <h3 class=\"geo-map-admin-filter__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-admin-filter__icon-btn\"\n aria-label=\"\u0110\u00F3ng b\u1ED9 l\u1ECDc\"\n (click)=\"close()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <div class=\"geo-map-admin-filter__body\">\n <geo-tree\n [nodes]=\"nodes()\"\n [checkable]=\"
|
|
45
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GeoMapAdminFilterComponent, isStandalone: true, selector: "geo-map-admin-filter", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, checkedKeys: { classPropertyName: "checkedKeys", publicName: "checkedKeys", isSignal: true, isRequired: false, transformFunction: null }, expandedKeys: { classPropertyName: "expandedKeys", publicName: "expandedKeys", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", checkedKeys: "checkedKeysChange", expandedKeys: "expandedKeysChange", apply: "apply", reset: "reset", fitProvince: "fitProvince", closed: "closed", selectionChange: "selectionChange" }, host: { properties: { "class.geo-map-admin-filter-host--open": "open()" }, classAttribute: "geo-map-admin-filter-host" }, ngImport: i0, template: "@if (open()) {\n <section class=\"geo-map-admin-filter\" aria-label=\"L\u1ECDc \u0111\u01A1n v\u1ECB h\u00E0nh ch\u00EDnh\">\n <header class=\"geo-map-admin-filter__header\">\n <h3 class=\"geo-map-admin-filter__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-admin-filter__icon-btn\"\n aria-label=\"\u0110\u00F3ng b\u1ED9 l\u1ECDc\"\n (click)=\"close()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <div class=\"geo-map-admin-filter__body\">\n <geo-tree\n [nodes]=\"nodes()\"\n [selectionMode]=\"selectionMode()\"\n [checkable]=\"selectionMode() === 'multi'\"\n [checkedKeys]=\"checkedKeys()\"\n [selectedKeys]=\"checkedKeys()\"\n [expandedKeys]=\"expandedKeys()\"\n (checkedKeysChange)=\"onCheckedChange($event)\"\n (selectedKeysChange)=\"onCheckedChange($event)\"\n (expandedKeysChange)=\"expandedKeys.set($event)\"\n />\n </div>\n\n <footer class=\"geo-map-admin-filter__footer\">\n <geo-button appearance=\"secondary\" (clicked)=\"onFitProvince()\">\n Xem to\u00E0n t\u1EC9nh\n </geo-button>\n <div class=\"geo-map-admin-filter__footer-end\">\n <geo-button appearance=\"secondary\" (clicked)=\"onReset()\">\n \u0110\u1EB7t l\u1EA1i\n </geo-button>\n <geo-button appearance=\"primary\" (clicked)=\"onApply()\">\n \u00C1p d\u1EE5ng\n </geo-button>\n </div>\n </footer>\n </section>\n}\n", styles: ["@charset \"UTF-8\";.geo-map-admin-filter-host{display:none}.geo-map-admin-filter-host--open{display:block}.geo-map-admin-filter{border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);box-shadow:var(--geo-shadow-sm);width:min(320px,100vw - 32px);max-height:min(520px,75vh);display:flex;flex-direction:column;overflow:hidden}.geo-map-admin-filter__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-bottom:1px solid var(--geo-color-neutral-100)}.geo-map-admin-filter__title{margin:0;font-size:var(--geo-font-size-body);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-900)}.geo-map-admin-filter__icon-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:40px;min-height:40px;border:0;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-700);font:inherit;font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease;width:32px;min-width:32px;min-height:32px;padding:0}.geo-map-admin-filter__icon-btn:hover:not(:disabled){background:var(--geo-color-primary-soft-hover);color:var(--geo-color-primary-default)}.geo-map-admin-filter__icon-btn:active:not(:disabled){transform:scale(.98)}.geo-map-admin-filter__icon-btn:disabled{opacity:.45;cursor:not-allowed}.geo-map-admin-filter__icon-btn--active,.geo-map-admin-filter__icon-btn--checked{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-admin-filter__icon-btn--icon-only{width:40px;padding:0}.geo-map-admin-filter__body{padding:8px 10px;overflow:auto;flex:1;min-height:160px}.geo-map-admin-filter__footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-top:1px solid var(--geo-color-neutral-100)}.geo-map-admin-filter__footer-end{display:flex;gap:8px;margin-left:auto}\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: GeoIconComponent, selector: "geo-icon", inputs: ["type", "theme", "spin", "size", "color"] }, { kind: "component", type: GeoTreeComponent, selector: "geo-tree", inputs: ["nodes", "checkable", "selectionMode", "checkedKeys", "selectedKeys", "expandedKeys", "showLine", "blockNode"], outputs: ["checkedKeysChange", "selectedKeysChange", "expandedKeysChange", "nodeClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
44
46
|
}
|
|
45
47
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeoMapAdminFilterComponent, decorators: [{
|
|
46
48
|
type: Component,
|
|
47
49
|
args: [{ selector: 'geo-map-admin-filter', standalone: true, imports: [GeoButtonComponent, GeoIconComponent, GeoTreeComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
48
50
|
class: 'geo-map-admin-filter-host',
|
|
49
51
|
'[class.geo-map-admin-filter-host--open]': 'open()',
|
|
50
|
-
}, template: "@if (open()) {\n <section class=\"geo-map-admin-filter\" aria-label=\"L\u1ECDc \u0111\u01A1n v\u1ECB h\u00E0nh ch\u00EDnh\">\n <header class=\"geo-map-admin-filter__header\">\n <h3 class=\"geo-map-admin-filter__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-admin-filter__icon-btn\"\n aria-label=\"\u0110\u00F3ng b\u1ED9 l\u1ECDc\"\n (click)=\"close()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <div class=\"geo-map-admin-filter__body\">\n <geo-tree\n [nodes]=\"nodes()\"\n [checkable]=\"
|
|
52
|
+
}, template: "@if (open()) {\n <section class=\"geo-map-admin-filter\" aria-label=\"L\u1ECDc \u0111\u01A1n v\u1ECB h\u00E0nh ch\u00EDnh\">\n <header class=\"geo-map-admin-filter__header\">\n <h3 class=\"geo-map-admin-filter__title\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"geo-map-admin-filter__icon-btn\"\n aria-label=\"\u0110\u00F3ng b\u1ED9 l\u1ECDc\"\n (click)=\"close()\"\n >\n <geo-icon type=\"close\" size=\"sm\" />\n </button>\n </header>\n\n <div class=\"geo-map-admin-filter__body\">\n <geo-tree\n [nodes]=\"nodes()\"\n [selectionMode]=\"selectionMode()\"\n [checkable]=\"selectionMode() === 'multi'\"\n [checkedKeys]=\"checkedKeys()\"\n [selectedKeys]=\"checkedKeys()\"\n [expandedKeys]=\"expandedKeys()\"\n (checkedKeysChange)=\"onCheckedChange($event)\"\n (selectedKeysChange)=\"onCheckedChange($event)\"\n (expandedKeysChange)=\"expandedKeys.set($event)\"\n />\n </div>\n\n <footer class=\"geo-map-admin-filter__footer\">\n <geo-button appearance=\"secondary\" (clicked)=\"onFitProvince()\">\n Xem to\u00E0n t\u1EC9nh\n </geo-button>\n <div class=\"geo-map-admin-filter__footer-end\">\n <geo-button appearance=\"secondary\" (clicked)=\"onReset()\">\n \u0110\u1EB7t l\u1EA1i\n </geo-button>\n <geo-button appearance=\"primary\" (clicked)=\"onApply()\">\n \u00C1p d\u1EE5ng\n </geo-button>\n </div>\n </footer>\n </section>\n}\n", styles: ["@charset \"UTF-8\";.geo-map-admin-filter-host{display:none}.geo-map-admin-filter-host--open{display:block}.geo-map-admin-filter{border:1px solid var(--geo-color-border-default);border-radius:var(--geo-radius-lg);background:var(--geo-color-surface-elevated);box-shadow:var(--geo-shadow-sm);width:min(320px,100vw - 32px);max-height:min(520px,75vh);display:flex;flex-direction:column;overflow:hidden}.geo-map-admin-filter__header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-bottom:1px solid var(--geo-color-neutral-100)}.geo-map-admin-filter__title{margin:0;font-size:var(--geo-font-size-body);font-weight:var(--geo-font-weight-semibold);color:var(--geo-color-neutral-900)}.geo-map-admin-filter__icon-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:40px;min-height:40px;border:0;border-radius:var(--geo-radius);background:transparent;color:var(--geo-color-neutral-700);font:inherit;font-size:var(--geo-font-size-body-small);font-weight:var(--geo-font-weight-medium);line-height:1;cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease;width:32px;min-width:32px;min-height:32px;padding:0}.geo-map-admin-filter__icon-btn:hover:not(:disabled){background:var(--geo-color-primary-soft-hover);color:var(--geo-color-primary-default)}.geo-map-admin-filter__icon-btn:active:not(:disabled){transform:scale(.98)}.geo-map-admin-filter__icon-btn:disabled{opacity:.45;cursor:not-allowed}.geo-map-admin-filter__icon-btn--active,.geo-map-admin-filter__icon-btn--checked{background:var(--geo-color-primary-soft-active);color:var(--geo-color-primary-default)}.geo-map-admin-filter__icon-btn--icon-only{width:40px;padding:0}.geo-map-admin-filter__body{padding:8px 10px;overflow:auto;flex:1;min-height:160px}.geo-map-admin-filter__footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-top:1px solid var(--geo-color-neutral-100)}.geo-map-admin-filter__footer-end{display:flex;gap:8px;margin-left:auto}\n"] }]
|
|
51
53
|
}] });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC1hZG1pbi1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9jaHJvbWUvZ2VvLW1hcC1hZG1pbi1maWx0ZXIvZ2VvLW1hcC1hZG1pbi1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9jaHJvbWUvZ2VvLW1hcC1hZG1pbi1maWx0ZXIvZ2VvLW1hcC1hZG1pbi1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQUd4RTs7Ozs7O0dBTUc7QUFjSCxNQUFNLE9BQU8sMEJBQTBCO0lBQzVCLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25DLEtBQUssR0FBRyxLQUFLLENBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLDRGQUE0RjtJQUNuRixhQUFhLEdBQUcsS0FBSyxDQUFxQixPQUFPLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQUcsS0FBSyxDQUF5QixFQUFFLENBQUMsQ0FBQztJQUNoRCxZQUFZLEdBQUcsS0FBSyxDQUF5QixFQUFFLENBQUMsQ0FBQztJQUVqRCxLQUFLLEdBQUcsTUFBTSxFQUEwQixDQUFDO0lBQ3pDLEtBQUssR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUN2QixXQUFXLEdBQUcsTUFBTSxFQUFRLENBQUM7SUFDN0IsTUFBTSxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQ3hCLGVBQWUsR0FBRyxNQUFNLEVBQTBCLENBQUM7SUFFNUQsZUFBZSxDQUFDLElBQTRCO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQzt3R0FwQ1UsMEJBQTBCOzRGQUExQiwwQkFBMEIsMnJDQ2pDdkMsOGhEQTJDQSx3a0VEcEJZLGtCQUFrQixzT0FBRSxnQkFBZ0IseUdBQUUsZ0JBQWdCOzs0RkFVckQsMEJBQTBCO2tCQWJ0QyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFHaEQsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixLQUFLLEVBQUUsMkJBQTJCO3dCQUNsQyx5Q0FBeUMsRUFBRSxRQUFRO3FCQUNwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgb3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHZW9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9nZW8tYnV0dG9uL2dlby1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEdlb0ljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9nZW8taWNvbi9nZW8taWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2VvVHJlZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2dlby10cmVlL2dlby10cmVlLmNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7IEdlb1RyZWVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vZ2VvLXRyZWUvZ2VvLXRyZWUudHlwZXMnO1xuXG4vKipcbiAqIEFkbWluaXN0cmF0aXZlIHVuaXQgZmlsdGVyIHRyZWUgKFRDUUguMTQg4oCUIGPhuqVwIHjDoykuXG4gKlxuICogQHN1bW1hcnkgUGFuZWwgbOG7jWMgY8OieSDEkcahbiB24buLIGjDoG5oIGNow61uaCBj4bqlcCB4w6MgdHLDqm4gYuG6o24gxJHhu5MuXG4gKiBAd2hlblRvVXNlIFRyYSBj4bupdSBi4bqjbiDEkeG7kyBj4bqnbiBs4buNYyB0aGVvIHjDoyAvIHBoxrDhu51uZy5cbiAqIEBkb05vdFVzZVdoZW4gR2xvYmFsIG9yZyBjaGFydHMgb3V0c2lkZSBtYXAgY29udGV4dC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2VvLW1hcC1hZG1pbi1maWx0ZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbR2VvQnV0dG9uQ29tcG9uZW50LCBHZW9JY29uQ29tcG9uZW50LCBHZW9UcmVlQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlby1tYXAtYWRtaW4tZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dlby1tYXAtYWRtaW4tZmlsdGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2dlby1tYXAtYWRtaW4tZmlsdGVyLWhvc3QnLFxuICAgICdbY2xhc3MuZ2VvLW1hcC1hZG1pbi1maWx0ZXItaG9zdC0tb3Blbl0nOiAnb3BlbigpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR2VvTWFwQWRtaW5GaWx0ZXJDb21wb25lbnQge1xuICByZWFkb25seSBvcGVuID0gbW9kZWwoZmFsc2UpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KCfEkMahbiB24buLIGjDoG5oIGNow61uaCcpO1xuICByZWFkb25seSBub2RlcyA9IGlucHV0PEdlb1RyZWVOb2RlW10+KFtdKTtcbiAgLyoqIGBzaW5nbGVgIOKAlCBjaOG7jW4gxJHDum5nIDEgeMOjL3BoxrDhu51uZyAoQlItMDYtMDMpOyBgbXVsdGlgIOKAlCBjaGVja2JveCBuaGnhu4F1IGPhuqVwICht4bq3YyDEkeG7i25oKS4gKi9cbiAgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZSA9IGlucHV0PCdzaW5nbGUnIHwgJ211bHRpJz4oJ211bHRpJyk7XG4gIHJlYWRvbmx5IGNoZWNrZWRLZXlzID0gbW9kZWw8QXJyYXk8c3RyaW5nIHwgbnVtYmVyPj4oW10pO1xuICByZWFkb25seSBleHBhbmRlZEtleXMgPSBtb2RlbDxBcnJheTxzdHJpbmcgfCBudW1iZXI+PihbXSk7XG5cbiAgcmVhZG9ubHkgYXBwbHkgPSBvdXRwdXQ8QXJyYXk8c3RyaW5nIHwgbnVtYmVyPj4oKTtcbiAgcmVhZG9ubHkgcmVzZXQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgZml0UHJvdmluY2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2xvc2VkID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxBcnJheTxzdHJpbmcgfCBudW1iZXI+PigpO1xuXG4gIG9uQ2hlY2tlZENoYW5nZShrZXlzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KTogdm9pZCB7XG4gICAgdGhpcy5jaGVja2VkS2V5cy5zZXQoa2V5cyk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChrZXlzKTtcbiAgfVxuXG4gIG9uQXBwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBseS5lbWl0KHRoaXMuY2hlY2tlZEtleXMoKSk7XG4gIH1cblxuICBvblJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tlZEtleXMuc2V0KFtdKTtcbiAgICB0aGlzLnJlc2V0LmVtaXQoKTtcbiAgfVxuXG4gIG9uRml0UHJvdmluY2UoKTogdm9pZCB7XG4gICAgdGhpcy5maXRQcm92aW5jZS5lbWl0KCk7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cbn1cbiIsIkBpZiAob3BlbigpKSB7XG4gIDxzZWN0aW9uIGNsYXNzPVwiZ2VvLW1hcC1hZG1pbi1maWx0ZXJcIiBhcmlhLWxhYmVsPVwiTOG7jWMgxJHGoW4gduG7iyBow6BuaCBjaMOtbmhcIj5cbiAgICA8aGVhZGVyIGNsYXNzPVwiZ2VvLW1hcC1hZG1pbi1maWx0ZXJfX2hlYWRlclwiPlxuICAgICAgPGgzIGNsYXNzPVwiZ2VvLW1hcC1hZG1pbi1maWx0ZXJfX3RpdGxlXCI+e3sgdGl0bGUoKSB9fTwvaDM+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImdlby1tYXAtYWRtaW4tZmlsdGVyX19pY29uLWJ0blwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCLEkMOzbmcgYuG7mSBs4buNY1wiXG4gICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGdlby1pY29uIHR5cGU9XCJjbG9zZVwiIHNpemU9XCJzbVwiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2hlYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJnZW8tbWFwLWFkbWluLWZpbHRlcl9fYm9keVwiPlxuICAgICAgPGdlby10cmVlXG4gICAgICAgIFtub2Rlc109XCJub2RlcygpXCJcbiAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZSgpXCJcbiAgICAgICAgW2NoZWNrYWJsZV09XCJzZWxlY3Rpb25Nb2RlKCkgPT09ICdtdWx0aSdcIlxuICAgICAgICBbY2hlY2tlZEtleXNdPVwiY2hlY2tlZEtleXMoKVwiXG4gICAgICAgIFtzZWxlY3RlZEtleXNdPVwiY2hlY2tlZEtleXMoKVwiXG4gICAgICAgIFtleHBhbmRlZEtleXNdPVwiZXhwYW5kZWRLZXlzKClcIlxuICAgICAgICAoY2hlY2tlZEtleXNDaGFuZ2UpPVwib25DaGVja2VkQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0ZWRLZXlzQ2hhbmdlKT1cIm9uQ2hlY2tlZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGV4cGFuZGVkS2V5c0NoYW5nZSk9XCJleHBhbmRlZEtleXMuc2V0KCRldmVudClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxmb290ZXIgY2xhc3M9XCJnZW8tbWFwLWFkbWluLWZpbHRlcl9fZm9vdGVyXCI+XG4gICAgICA8Z2VvLWJ1dHRvbiBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCIgKGNsaWNrZWQpPVwib25GaXRQcm92aW5jZSgpXCI+XG4gICAgICAgIFhlbSB0b8OgbiB04buJbmhcbiAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnZW8tbWFwLWFkbWluLWZpbHRlcl9fZm9vdGVyLWVuZFwiPlxuICAgICAgICA8Z2VvLWJ1dHRvbiBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCIgKGNsaWNrZWQpPVwib25SZXNldCgpXCI+XG4gICAgICAgICAgxJDhurd0IGzhuqFpXG4gICAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgICAgPGdlby1idXR0b24gYXBwZWFyYW5jZT1cInByaW1hcnlcIiAoY2xpY2tlZCk9XCJvbkFwcGx5KClcIj5cbiAgICAgICAgICDDgXAgZOG7pW5nXG4gICAgICAgIDwvZ2VvLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9vdGVyPlxuICA8L3NlY3Rpb24+XG59XG4iXX0=
|