verben-ng-ui 1.5.9 → 1.6.0
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/esm2022/src/lib/components/svg/lib-icon-manifest.mjs +104 -0
- package/esm2022/src/lib/components/svg/svg.component.mjs +111 -76
- package/esm2022/src/lib/services/icon.service.mjs +15 -4
- package/esm2022/src/lib/verbena-input/verbena-input.component.mjs +2 -2
- package/esm2022/src/lib/verbena-textarea/verbena-textarea.component.mjs +2 -2
- package/fesm2022/verben-ng-ui-src-lib-components-svg.mjs +213 -75
- package/fesm2022/verben-ng-ui-src-lib-components-svg.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-services.mjs +14 -3
- package/fesm2022/verben-ng-ui-src-lib-services.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-verbena-input.mjs +2 -2
- package/fesm2022/verben-ng-ui-src-lib-verbena-input.mjs.map +1 -1
- package/fesm2022/verben-ng-ui-src-lib-verbena-textarea.mjs +2 -2
- package/fesm2022/verben-ng-ui-src-lib-verbena-textarea.mjs.map +1 -1
- package/package.json +69 -69
- package/src/lib/components/svg/lib-icon-manifest.d.ts +1 -0
- package/src/lib/components/svg/svg.component.d.ts +12 -3
- package/src/lib/services/icon.service.d.ts +1 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal manifest of built-in SVG icon names shipped in `verben-ng-ui/assets/{default,outline,solid}`.
|
|
3
|
+
* Used by `SvgComponent` to avoid issuing failing HTTP 404 requests to `assets/lib-icons/...`
|
|
4
|
+
* when a consumer passes an application-level custom icon from `assets/icons/...`.
|
|
5
|
+
*/
|
|
6
|
+
const SHARED_LIB_ICONS = [
|
|
7
|
+
'academic-cap', 'adjustments-horizontal', 'adjustments-vertical', 'archive-box',
|
|
8
|
+
'archive-box-arrow-down', 'archive-box-x-mark', 'arrow-down', 'arrow-down-circle',
|
|
9
|
+
'arrow-down-left', 'arrow-down-on-square', 'arrow-down-on-square-stack',
|
|
10
|
+
'arrow-down-right', 'arrow-down-tray', 'arrow-left', 'arrow-left-circle',
|
|
11
|
+
'arrow-left-end-on-rectangle', 'arrow-left-on-rectangle',
|
|
12
|
+
'arrow-left-start-on-rectangle', 'arrow-long-down', 'arrow-long-left',
|
|
13
|
+
'arrow-long-right', 'arrow-long-up', 'arrow-path', 'arrow-path-rounded-square',
|
|
14
|
+
'arrow-right', 'arrow-right-circle', 'arrow-right-end-on-rectangle',
|
|
15
|
+
'arrow-right-on-rectangle', 'arrow-right-start-on-rectangle', 'arrow-small-down',
|
|
16
|
+
'arrow-small-left', 'arrow-small-right', 'arrow-small-up',
|
|
17
|
+
'arrow-top-right-on-square', 'arrow-trending-down', 'arrow-trending-up',
|
|
18
|
+
'arrow-turn-down-left', 'arrow-turn-down-right', 'arrow-turn-left-down',
|
|
19
|
+
'arrow-turn-left-up', 'arrow-turn-right-down', 'arrow-turn-right-up',
|
|
20
|
+
'arrow-turn-up-left', 'arrow-turn-up-right', 'arrow-up', 'arrow-up-circle',
|
|
21
|
+
'arrow-up-left', 'arrow-up-on-square', 'arrow-up-on-square-stack',
|
|
22
|
+
'arrow-up-right', 'arrow-up-tray', 'arrow-uturn-down', 'arrow-uturn-left',
|
|
23
|
+
'arrow-uturn-right', 'arrow-uturn-up', 'arrows-pointing-in',
|
|
24
|
+
'arrows-pointing-out', 'arrows-right-left', 'arrows-up-down', 'at-symbol',
|
|
25
|
+
'backspace', 'backward', 'banknotes', 'bars-2', 'bars-3', 'bars-3-bottom-left',
|
|
26
|
+
'bars-3-bottom-right', 'bars-3-center-left', 'bars-4', 'bars-arrow-down',
|
|
27
|
+
'bars-arrow-up', 'battery-0', 'battery-100', 'battery-50', 'beaker', 'bell',
|
|
28
|
+
'bell-alert', 'bell-slash', 'bell-snooze', 'bold', 'bolt', 'bolt-slash',
|
|
29
|
+
'book-open', 'bookmark', 'bookmark-slash', 'bookmark-square', 'briefcase',
|
|
30
|
+
'bug-ant', 'building-library', 'building-office', 'building-office-2',
|
|
31
|
+
'building-storefront', 'cake', 'calculator', 'calendar', 'calendar-date-range',
|
|
32
|
+
'calendar-days', 'camera', 'chart-bar', 'chart-bar-square', 'chart-pie',
|
|
33
|
+
'chat-bubble-bottom-center', 'chat-bubble-bottom-center-text',
|
|
34
|
+
'chat-bubble-left', 'chat-bubble-left-ellipsis', 'chat-bubble-left-right',
|
|
35
|
+
'chat-bubble-oval-left', 'chat-bubble-oval-left-ellipsis', 'check',
|
|
36
|
+
'check-badge', 'check-circle', 'chevron-double-down', 'chevron-double-left',
|
|
37
|
+
'chevron-double-right', 'chevron-double-up', 'chevron-down', 'chevron-left',
|
|
38
|
+
'chevron-right', 'chevron-up', 'chevron-up-down', 'circle-stack', 'clipboard',
|
|
39
|
+
'clipboard-document', 'clipboard-document-check', 'clipboard-document-list',
|
|
40
|
+
'clock', 'cloud', 'cloud-arrow-down', 'cloud-arrow-up', 'code-bracket',
|
|
41
|
+
'code-bracket-square', 'cog', 'cog-6-tooth', 'cog-8-tooth', 'command-line',
|
|
42
|
+
'computer-desktop', 'cpu-chip', 'credit-card', 'cube', 'cube-transparent',
|
|
43
|
+
'currency-bangladeshi', 'currency-dollar', 'currency-euro', 'currency-pound',
|
|
44
|
+
'currency-rupee', 'currency-yen', 'cursor-arrow-rays', 'cursor-arrow-ripple',
|
|
45
|
+
'device-phone-mobile', 'device-tablet', 'divide', 'document',
|
|
46
|
+
'document-arrow-down', 'document-arrow-up', 'document-chart-bar',
|
|
47
|
+
'document-check', 'document-currency-bangladeshi', 'document-currency-dollar',
|
|
48
|
+
'document-currency-euro', 'document-currency-pound', 'document-currency-rupee',
|
|
49
|
+
'document-currency-yen', 'document-duplicate', 'document-magnifying-glass',
|
|
50
|
+
'document-minus', 'document-plus', 'document-text', 'ellipsis-horizontal',
|
|
51
|
+
'ellipsis-horizontal-circle', 'ellipsis-vertical', 'envelope', 'envelope-open',
|
|
52
|
+
'equals', 'exclamation-circle', 'exclamation-triangle', 'eye', 'eye-dropper',
|
|
53
|
+
'eye-slash', 'face-frown', 'face-smile', 'film', 'finger-print', 'fire', 'flag',
|
|
54
|
+
'folder', 'folder-arrow-down', 'folder-minus', 'folder-open', 'folder-plus',
|
|
55
|
+
'forward', 'funnel', 'gif', 'gift', 'gift-top', 'globe-alt', 'globe-americas',
|
|
56
|
+
'globe-asia-australia', 'globe-europe-africa', 'h1', 'h2', 'h3', 'hand-raised',
|
|
57
|
+
'hand-thumb-down', 'hand-thumb-up', 'hashtag', 'heart', 'home', 'home-modern',
|
|
58
|
+
'identification', 'inbox', 'inbox-arrow-down', 'inbox-stack',
|
|
59
|
+
'information-circle', 'italic', 'key', 'language', 'lifebuoy', 'light-bulb',
|
|
60
|
+
'link', 'link-slash', 'list-bullet', 'lock-closed', 'lock-open',
|
|
61
|
+
'magnifying-glass', 'magnifying-glass-circle', 'magnifying-glass-minus',
|
|
62
|
+
'magnifying-glass-plus', 'map', 'map-pin', 'megaphone', 'microphone', 'minus',
|
|
63
|
+
'minus-circle', 'minus-small', 'moon', 'musical-note', 'newspaper', 'no-symbol',
|
|
64
|
+
'numbered-list', 'paint-brush', 'paper-airplane', 'paper-clip', 'pause',
|
|
65
|
+
'pause-circle', 'pencil', 'pencil-square', 'percent-badge', 'phone',
|
|
66
|
+
'phone-arrow-down-left', 'phone-arrow-up-right', 'phone-x-mark', 'photo', 'play',
|
|
67
|
+
'play-circle', 'play-pause', 'plus', 'plus-circle', 'plus-small', 'power',
|
|
68
|
+
'presentation-chart-bar', 'presentation-chart-line', 'printer', 'puzzle-piece',
|
|
69
|
+
'qr-code', 'question-mark-circle', 'queue-list', 'radio', 'receipt-percent',
|
|
70
|
+
'receipt-refund', 'rectangle-group', 'rectangle-stack', 'rocket-launch', 'rss',
|
|
71
|
+
'scale', 'scissors', 'server', 'server-stack', 'share', 'shield-check',
|
|
72
|
+
'shield-exclamation', 'shopping-bag', 'shopping-cart', 'signal', 'signal-slash',
|
|
73
|
+
'slash', 'sparkles', 'speaker-wave', 'speaker-x-mark', 'square-2-stack',
|
|
74
|
+
'square-3-stack-3d', 'squares-2x2', 'squares-plus', 'star', 'stop',
|
|
75
|
+
'stop-circle', 'strikethrough', 'sun', 'swatch', 'table-cells', 'tag', 'ticket',
|
|
76
|
+
'trash', 'trophy', 'truck', 'tv', 'underline', 'user', 'user-circle',
|
|
77
|
+
'user-group', 'user-minus', 'user-plus', 'users', 'variable', 'video-camera',
|
|
78
|
+
'video-camera-slash', 'view-columns', 'viewfinder-circle', 'wallet', 'wifi',
|
|
79
|
+
'window', 'wrench', 'wrench-screwdriver', 'x-circle', 'x-mark',
|
|
80
|
+
];
|
|
81
|
+
const DEFAULT_ONLY_LIB_ICONS = [
|
|
82
|
+
'2fa-mail', '2fa-sms', 'accounting', 'accounting-new', 'add', 'alert',
|
|
83
|
+
'apple-logo', 'arrow-down-3', 'attach', 'cardViewAlt', 'chart-of-account',
|
|
84
|
+
'chat', 'check-2', 'checked', 'chevron', 'chevron-right-thick', 'close',
|
|
85
|
+
'close-circle', 'close-circle-full', 'close-no-circle', 'column', 'dangerInfo',
|
|
86
|
+
'dashboard', 'defaultPageIcon', 'delete', 'edit', 'edit-icon', 'elipsis',
|
|
87
|
+
'emoji', 'error', 'export', 'eye-closed', 'file', 'filter', 'gear',
|
|
88
|
+
'google-logo', 'grid', 'grid-2', 'grid-3', 'info', 'list', 'list-view',
|
|
89
|
+
'long-arrow', 'menu', 'microsoft-logo', 'not-allowed', 'off', 'on',
|
|
90
|
+
'procurement', 'sales', 'search', 'search2', 'security', 'select',
|
|
91
|
+
'skip-forward', 'sort', 'square-dot', 'stat', 'success', 'table-view',
|
|
92
|
+
'terminal', 'tick', 'warning', 'workflow',
|
|
93
|
+
];
|
|
94
|
+
const VARIANT_ICON_SET = new Set(SHARED_LIB_ICONS);
|
|
95
|
+
const DEFAULT_ICON_SET = new Set([
|
|
96
|
+
...SHARED_LIB_ICONS,
|
|
97
|
+
...DEFAULT_ONLY_LIB_ICONS,
|
|
98
|
+
]);
|
|
99
|
+
export const LIB_ICON_SETS = {
|
|
100
|
+
default: DEFAULT_ICON_SET,
|
|
101
|
+
outline: VARIANT_ICON_SET,
|
|
102
|
+
solid: VARIANT_ICON_SET,
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWljb24tbWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3N2Zy9saWItaWNvbi1tYW5pZmVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBc0I7SUFDMUMsY0FBYyxFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLGFBQWE7SUFDL0Usd0JBQXdCLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLG1CQUFtQjtJQUNqRixpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSw0QkFBNEI7SUFDdkUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQjtJQUN4RSw2QkFBNkIsRUFBRSx5QkFBeUI7SUFDeEQsK0JBQStCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCO0lBQ3JFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsMkJBQTJCO0lBQzlFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSw4QkFBOEI7SUFDbkUsMEJBQTBCLEVBQUUsZ0NBQWdDLEVBQUUsa0JBQWtCO0lBQ2hGLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQjtJQUN6RCwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUI7SUFDdkUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCO0lBQ3ZFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQjtJQUNwRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsaUJBQWlCO0lBQzFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEI7SUFDakUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN6RSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0I7SUFDM0QscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVztJQUN6RSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLG9CQUFvQjtJQUM5RSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsaUJBQWlCO0lBQ3hFLGVBQWUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUMzRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVk7SUFDdkUsV0FBVyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxXQUFXO0lBQ3pFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUI7SUFDckUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUscUJBQXFCO0lBQzlFLGVBQWUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLFdBQVc7SUFDdkUsMkJBQTJCLEVBQUUsZ0NBQWdDO0lBQzdELGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLHdCQUF3QjtJQUN6RSx1QkFBdUIsRUFBRSxnQ0FBZ0MsRUFBRSxPQUFPO0lBQ2xFLGFBQWEsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCO0lBQzNFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxjQUFjO0lBQzNFLGVBQWUsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFdBQVc7SUFDN0Usb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCO0lBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYztJQUN0RSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFjO0lBQzFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGtCQUFrQjtJQUN6RSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCO0lBQzVFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUI7SUFDNUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxVQUFVO0lBQzVELHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQjtJQUNoRSxnQkFBZ0IsRUFBRSwrQkFBK0IsRUFBRSwwQkFBMEI7SUFDN0Usd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCO0lBQzlFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLDJCQUEyQjtJQUMxRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLHFCQUFxQjtJQUN6RSw0QkFBNEIsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsZUFBZTtJQUM5RSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLGFBQWE7SUFDNUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTTtJQUMvRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhO0lBQzNFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGdCQUFnQjtJQUM3RSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhO0lBQzlFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhO0lBQzdFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhO0lBQzVELG9CQUFvQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZO0lBQzNFLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXO0lBQy9ELGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QjtJQUN2RSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTztJQUM3RSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVc7SUFDL0UsZUFBZSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsT0FBTztJQUN2RSxjQUFjLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsT0FBTztJQUNuRSx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU07SUFDaEYsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxPQUFPO0lBQ3pFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxjQUFjO0lBQzlFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGlCQUFpQjtJQUMzRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsS0FBSztJQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLGNBQWM7SUFDdEUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsY0FBYztJQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0I7SUFDdkUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTTtJQUNsRSxhQUFhLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRO0lBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGFBQWE7SUFDcEUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjO0lBQzVFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUMzRSxRQUFRLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxRQUFRO0NBQy9ELENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUFzQjtJQUNoRCxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsT0FBTztJQUNyRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCO0lBQ3pFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxPQUFPO0lBQ3ZFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsWUFBWTtJQUM5RSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUztJQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNO0lBQ2xFLGFBQWEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVc7SUFDdEUsWUFBWSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUk7SUFDbEUsYUFBYSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRO0lBQ2pFLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWTtJQUNyRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVO0NBQzFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUF3QixJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sZ0JBQWdCLEdBQXdCLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsZ0JBQWdCO0lBQ25CLEdBQUcsc0JBQXNCO0NBQzFCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUU7SUFDekYsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLEtBQUssRUFBRSxnQkFBZ0I7Q0FDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZXJuYWwgbWFuaWZlc3Qgb2YgYnVpbHQtaW4gU1ZHIGljb24gbmFtZXMgc2hpcHBlZCBpbiBgdmVyYmVuLW5nLXVpL2Fzc2V0cy97ZGVmYXVsdCxvdXRsaW5lLHNvbGlkfWAuXG4gKiBVc2VkIGJ5IGBTdmdDb21wb25lbnRgIHRvIGF2b2lkIGlzc3VpbmcgZmFpbGluZyBIVFRQIDQwNCByZXF1ZXN0cyB0byBgYXNzZXRzL2xpYi1pY29ucy8uLi5gXG4gKiB3aGVuIGEgY29uc3VtZXIgcGFzc2VzIGFuIGFwcGxpY2F0aW9uLWxldmVsIGN1c3RvbSBpY29uIGZyb20gYGFzc2V0cy9pY29ucy8uLi5gLlxuICovXG5jb25zdCBTSEFSRURfTElCX0lDT05TOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgJ2FjYWRlbWljLWNhcCcsICdhZGp1c3RtZW50cy1ob3Jpem9udGFsJywgJ2FkanVzdG1lbnRzLXZlcnRpY2FsJywgJ2FyY2hpdmUtYm94JyxcbiAgJ2FyY2hpdmUtYm94LWFycm93LWRvd24nLCAnYXJjaGl2ZS1ib3gteC1tYXJrJywgJ2Fycm93LWRvd24nLCAnYXJyb3ctZG93bi1jaXJjbGUnLFxuICAnYXJyb3ctZG93bi1sZWZ0JywgJ2Fycm93LWRvd24tb24tc3F1YXJlJywgJ2Fycm93LWRvd24tb24tc3F1YXJlLXN0YWNrJyxcbiAgJ2Fycm93LWRvd24tcmlnaHQnLCAnYXJyb3ctZG93bi10cmF5JywgJ2Fycm93LWxlZnQnLCAnYXJyb3ctbGVmdC1jaXJjbGUnLFxuICAnYXJyb3ctbGVmdC1lbmQtb24tcmVjdGFuZ2xlJywgJ2Fycm93LWxlZnQtb24tcmVjdGFuZ2xlJyxcbiAgJ2Fycm93LWxlZnQtc3RhcnQtb24tcmVjdGFuZ2xlJywgJ2Fycm93LWxvbmctZG93bicsICdhcnJvdy1sb25nLWxlZnQnLFxuICAnYXJyb3ctbG9uZy1yaWdodCcsICdhcnJvdy1sb25nLXVwJywgJ2Fycm93LXBhdGgnLCAnYXJyb3ctcGF0aC1yb3VuZGVkLXNxdWFyZScsXG4gICdhcnJvdy1yaWdodCcsICdhcnJvdy1yaWdodC1jaXJjbGUnLCAnYXJyb3ctcmlnaHQtZW5kLW9uLXJlY3RhbmdsZScsXG4gICdhcnJvdy1yaWdodC1vbi1yZWN0YW5nbGUnLCAnYXJyb3ctcmlnaHQtc3RhcnQtb24tcmVjdGFuZ2xlJywgJ2Fycm93LXNtYWxsLWRvd24nLFxuICAnYXJyb3ctc21hbGwtbGVmdCcsICdhcnJvdy1zbWFsbC1yaWdodCcsICdhcnJvdy1zbWFsbC11cCcsXG4gICdhcnJvdy10b3AtcmlnaHQtb24tc3F1YXJlJywgJ2Fycm93LXRyZW5kaW5nLWRvd24nLCAnYXJyb3ctdHJlbmRpbmctdXAnLFxuICAnYXJyb3ctdHVybi1kb3duLWxlZnQnLCAnYXJyb3ctdHVybi1kb3duLXJpZ2h0JywgJ2Fycm93LXR1cm4tbGVmdC1kb3duJyxcbiAgJ2Fycm93LXR1cm4tbGVmdC11cCcsICdhcnJvdy10dXJuLXJpZ2h0LWRvd24nLCAnYXJyb3ctdHVybi1yaWdodC11cCcsXG4gICdhcnJvdy10dXJuLXVwLWxlZnQnLCAnYXJyb3ctdHVybi11cC1yaWdodCcsICdhcnJvdy11cCcsICdhcnJvdy11cC1jaXJjbGUnLFxuICAnYXJyb3ctdXAtbGVmdCcsICdhcnJvdy11cC1vbi1zcXVhcmUnLCAnYXJyb3ctdXAtb24tc3F1YXJlLXN0YWNrJyxcbiAgJ2Fycm93LXVwLXJpZ2h0JywgJ2Fycm93LXVwLXRyYXknLCAnYXJyb3ctdXR1cm4tZG93bicsICdhcnJvdy11dHVybi1sZWZ0JyxcbiAgJ2Fycm93LXV0dXJuLXJpZ2h0JywgJ2Fycm93LXV0dXJuLXVwJywgJ2Fycm93cy1wb2ludGluZy1pbicsXG4gICdhcnJvd3MtcG9pbnRpbmctb3V0JywgJ2Fycm93cy1yaWdodC1sZWZ0JywgJ2Fycm93cy11cC1kb3duJywgJ2F0LXN5bWJvbCcsXG4gICdiYWNrc3BhY2UnLCAnYmFja3dhcmQnLCAnYmFua25vdGVzJywgJ2JhcnMtMicsICdiYXJzLTMnLCAnYmFycy0zLWJvdHRvbS1sZWZ0JyxcbiAgJ2JhcnMtMy1ib3R0b20tcmlnaHQnLCAnYmFycy0zLWNlbnRlci1sZWZ0JywgJ2JhcnMtNCcsICdiYXJzLWFycm93LWRvd24nLFxuICAnYmFycy1hcnJvdy11cCcsICdiYXR0ZXJ5LTAnLCAnYmF0dGVyeS0xMDAnLCAnYmF0dGVyeS01MCcsICdiZWFrZXInLCAnYmVsbCcsXG4gICdiZWxsLWFsZXJ0JywgJ2JlbGwtc2xhc2gnLCAnYmVsbC1zbm9vemUnLCAnYm9sZCcsICdib2x0JywgJ2JvbHQtc2xhc2gnLFxuICAnYm9vay1vcGVuJywgJ2Jvb2ttYXJrJywgJ2Jvb2ttYXJrLXNsYXNoJywgJ2Jvb2ttYXJrLXNxdWFyZScsICdicmllZmNhc2UnLFxuICAnYnVnLWFudCcsICdidWlsZGluZy1saWJyYXJ5JywgJ2J1aWxkaW5nLW9mZmljZScsICdidWlsZGluZy1vZmZpY2UtMicsXG4gICdidWlsZGluZy1zdG9yZWZyb250JywgJ2Nha2UnLCAnY2FsY3VsYXRvcicsICdjYWxlbmRhcicsICdjYWxlbmRhci1kYXRlLXJhbmdlJyxcbiAgJ2NhbGVuZGFyLWRheXMnLCAnY2FtZXJhJywgJ2NoYXJ0LWJhcicsICdjaGFydC1iYXItc3F1YXJlJywgJ2NoYXJ0LXBpZScsXG4gICdjaGF0LWJ1YmJsZS1ib3R0b20tY2VudGVyJywgJ2NoYXQtYnViYmxlLWJvdHRvbS1jZW50ZXItdGV4dCcsXG4gICdjaGF0LWJ1YmJsZS1sZWZ0JywgJ2NoYXQtYnViYmxlLWxlZnQtZWxsaXBzaXMnLCAnY2hhdC1idWJibGUtbGVmdC1yaWdodCcsXG4gICdjaGF0LWJ1YmJsZS1vdmFsLWxlZnQnLCAnY2hhdC1idWJibGUtb3ZhbC1sZWZ0LWVsbGlwc2lzJywgJ2NoZWNrJyxcbiAgJ2NoZWNrLWJhZGdlJywgJ2NoZWNrLWNpcmNsZScsICdjaGV2cm9uLWRvdWJsZS1kb3duJywgJ2NoZXZyb24tZG91YmxlLWxlZnQnLFxuICAnY2hldnJvbi1kb3VibGUtcmlnaHQnLCAnY2hldnJvbi1kb3VibGUtdXAnLCAnY2hldnJvbi1kb3duJywgJ2NoZXZyb24tbGVmdCcsXG4gICdjaGV2cm9uLXJpZ2h0JywgJ2NoZXZyb24tdXAnLCAnY2hldnJvbi11cC1kb3duJywgJ2NpcmNsZS1zdGFjaycsICdjbGlwYm9hcmQnLFxuICAnY2xpcGJvYXJkLWRvY3VtZW50JywgJ2NsaXBib2FyZC1kb2N1bWVudC1jaGVjaycsICdjbGlwYm9hcmQtZG9jdW1lbnQtbGlzdCcsXG4gICdjbG9jaycsICdjbG91ZCcsICdjbG91ZC1hcnJvdy1kb3duJywgJ2Nsb3VkLWFycm93LXVwJywgJ2NvZGUtYnJhY2tldCcsXG4gICdjb2RlLWJyYWNrZXQtc3F1YXJlJywgJ2NvZycsICdjb2ctNi10b290aCcsICdjb2ctOC10b290aCcsICdjb21tYW5kLWxpbmUnLFxuICAnY29tcHV0ZXItZGVza3RvcCcsICdjcHUtY2hpcCcsICdjcmVkaXQtY2FyZCcsICdjdWJlJywgJ2N1YmUtdHJhbnNwYXJlbnQnLFxuICAnY3VycmVuY3ktYmFuZ2xhZGVzaGknLCAnY3VycmVuY3ktZG9sbGFyJywgJ2N1cnJlbmN5LWV1cm8nLCAnY3VycmVuY3ktcG91bmQnLFxuICAnY3VycmVuY3ktcnVwZWUnLCAnY3VycmVuY3kteWVuJywgJ2N1cnNvci1hcnJvdy1yYXlzJywgJ2N1cnNvci1hcnJvdy1yaXBwbGUnLFxuICAnZGV2aWNlLXBob25lLW1vYmlsZScsICdkZXZpY2UtdGFibGV0JywgJ2RpdmlkZScsICdkb2N1bWVudCcsXG4gICdkb2N1bWVudC1hcnJvdy1kb3duJywgJ2RvY3VtZW50LWFycm93LXVwJywgJ2RvY3VtZW50LWNoYXJ0LWJhcicsXG4gICdkb2N1bWVudC1jaGVjaycsICdkb2N1bWVudC1jdXJyZW5jeS1iYW5nbGFkZXNoaScsICdkb2N1bWVudC1jdXJyZW5jeS1kb2xsYXInLFxuICAnZG9jdW1lbnQtY3VycmVuY3ktZXVybycsICdkb2N1bWVudC1jdXJyZW5jeS1wb3VuZCcsICdkb2N1bWVudC1jdXJyZW5jeS1ydXBlZScsXG4gICdkb2N1bWVudC1jdXJyZW5jeS15ZW4nLCAnZG9jdW1lbnQtZHVwbGljYXRlJywgJ2RvY3VtZW50LW1hZ25pZnlpbmctZ2xhc3MnLFxuICAnZG9jdW1lbnQtbWludXMnLCAnZG9jdW1lbnQtcGx1cycsICdkb2N1bWVudC10ZXh0JywgJ2VsbGlwc2lzLWhvcml6b250YWwnLFxuICAnZWxsaXBzaXMtaG9yaXpvbnRhbC1jaXJjbGUnLCAnZWxsaXBzaXMtdmVydGljYWwnLCAnZW52ZWxvcGUnLCAnZW52ZWxvcGUtb3BlbicsXG4gICdlcXVhbHMnLCAnZXhjbGFtYXRpb24tY2lyY2xlJywgJ2V4Y2xhbWF0aW9uLXRyaWFuZ2xlJywgJ2V5ZScsICdleWUtZHJvcHBlcicsXG4gICdleWUtc2xhc2gnLCAnZmFjZS1mcm93bicsICdmYWNlLXNtaWxlJywgJ2ZpbG0nLCAnZmluZ2VyLXByaW50JywgJ2ZpcmUnLCAnZmxhZycsXG4gICdmb2xkZXInLCAnZm9sZGVyLWFycm93LWRvd24nLCAnZm9sZGVyLW1pbnVzJywgJ2ZvbGRlci1vcGVuJywgJ2ZvbGRlci1wbHVzJyxcbiAgJ2ZvcndhcmQnLCAnZnVubmVsJywgJ2dpZicsICdnaWZ0JywgJ2dpZnQtdG9wJywgJ2dsb2JlLWFsdCcsICdnbG9iZS1hbWVyaWNhcycsXG4gICdnbG9iZS1hc2lhLWF1c3RyYWxpYScsICdnbG9iZS1ldXJvcGUtYWZyaWNhJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2hhbmQtcmFpc2VkJyxcbiAgJ2hhbmQtdGh1bWItZG93bicsICdoYW5kLXRodW1iLXVwJywgJ2hhc2h0YWcnLCAnaGVhcnQnLCAnaG9tZScsICdob21lLW1vZGVybicsXG4gICdpZGVudGlmaWNhdGlvbicsICdpbmJveCcsICdpbmJveC1hcnJvdy1kb3duJywgJ2luYm94LXN0YWNrJyxcbiAgJ2luZm9ybWF0aW9uLWNpcmNsZScsICdpdGFsaWMnLCAna2V5JywgJ2xhbmd1YWdlJywgJ2xpZmVidW95JywgJ2xpZ2h0LWJ1bGInLFxuICAnbGluaycsICdsaW5rLXNsYXNoJywgJ2xpc3QtYnVsbGV0JywgJ2xvY2stY2xvc2VkJywgJ2xvY2stb3BlbicsXG4gICdtYWduaWZ5aW5nLWdsYXNzJywgJ21hZ25pZnlpbmctZ2xhc3MtY2lyY2xlJywgJ21hZ25pZnlpbmctZ2xhc3MtbWludXMnLFxuICAnbWFnbmlmeWluZy1nbGFzcy1wbHVzJywgJ21hcCcsICdtYXAtcGluJywgJ21lZ2FwaG9uZScsICdtaWNyb3Bob25lJywgJ21pbnVzJyxcbiAgJ21pbnVzLWNpcmNsZScsICdtaW51cy1zbWFsbCcsICdtb29uJywgJ211c2ljYWwtbm90ZScsICduZXdzcGFwZXInLCAnbm8tc3ltYm9sJyxcbiAgJ251bWJlcmVkLWxpc3QnLCAncGFpbnQtYnJ1c2gnLCAncGFwZXItYWlycGxhbmUnLCAncGFwZXItY2xpcCcsICdwYXVzZScsXG4gICdwYXVzZS1jaXJjbGUnLCAncGVuY2lsJywgJ3BlbmNpbC1zcXVhcmUnLCAncGVyY2VudC1iYWRnZScsICdwaG9uZScsXG4gICdwaG9uZS1hcnJvdy1kb3duLWxlZnQnLCAncGhvbmUtYXJyb3ctdXAtcmlnaHQnLCAncGhvbmUteC1tYXJrJywgJ3Bob3RvJywgJ3BsYXknLFxuICAncGxheS1jaXJjbGUnLCAncGxheS1wYXVzZScsICdwbHVzJywgJ3BsdXMtY2lyY2xlJywgJ3BsdXMtc21hbGwnLCAncG93ZXInLFxuICAncHJlc2VudGF0aW9uLWNoYXJ0LWJhcicsICdwcmVzZW50YXRpb24tY2hhcnQtbGluZScsICdwcmludGVyJywgJ3B1enpsZS1waWVjZScsXG4gICdxci1jb2RlJywgJ3F1ZXN0aW9uLW1hcmstY2lyY2xlJywgJ3F1ZXVlLWxpc3QnLCAncmFkaW8nLCAncmVjZWlwdC1wZXJjZW50JyxcbiAgJ3JlY2VpcHQtcmVmdW5kJywgJ3JlY3RhbmdsZS1ncm91cCcsICdyZWN0YW5nbGUtc3RhY2snLCAncm9ja2V0LWxhdW5jaCcsICdyc3MnLFxuICAnc2NhbGUnLCAnc2Npc3NvcnMnLCAnc2VydmVyJywgJ3NlcnZlci1zdGFjaycsICdzaGFyZScsICdzaGllbGQtY2hlY2snLFxuICAnc2hpZWxkLWV4Y2xhbWF0aW9uJywgJ3Nob3BwaW5nLWJhZycsICdzaG9wcGluZy1jYXJ0JywgJ3NpZ25hbCcsICdzaWduYWwtc2xhc2gnLFxuICAnc2xhc2gnLCAnc3BhcmtsZXMnLCAnc3BlYWtlci13YXZlJywgJ3NwZWFrZXIteC1tYXJrJywgJ3NxdWFyZS0yLXN0YWNrJyxcbiAgJ3NxdWFyZS0zLXN0YWNrLTNkJywgJ3NxdWFyZXMtMngyJywgJ3NxdWFyZXMtcGx1cycsICdzdGFyJywgJ3N0b3AnLFxuICAnc3RvcC1jaXJjbGUnLCAnc3RyaWtldGhyb3VnaCcsICdzdW4nLCAnc3dhdGNoJywgJ3RhYmxlLWNlbGxzJywgJ3RhZycsICd0aWNrZXQnLFxuICAndHJhc2gnLCAndHJvcGh5JywgJ3RydWNrJywgJ3R2JywgJ3VuZGVybGluZScsICd1c2VyJywgJ3VzZXItY2lyY2xlJyxcbiAgJ3VzZXItZ3JvdXAnLCAndXNlci1taW51cycsICd1c2VyLXBsdXMnLCAndXNlcnMnLCAndmFyaWFibGUnLCAndmlkZW8tY2FtZXJhJyxcbiAgJ3ZpZGVvLWNhbWVyYS1zbGFzaCcsICd2aWV3LWNvbHVtbnMnLCAndmlld2ZpbmRlci1jaXJjbGUnLCAnd2FsbGV0JywgJ3dpZmknLFxuICAnd2luZG93JywgJ3dyZW5jaCcsICd3cmVuY2gtc2NyZXdkcml2ZXInLCAneC1jaXJjbGUnLCAneC1tYXJrJyxcbl07XG5cbmNvbnN0IERFRkFVTFRfT05MWV9MSUJfSUNPTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnMmZhLW1haWwnLCAnMmZhLXNtcycsICdhY2NvdW50aW5nJywgJ2FjY291bnRpbmctbmV3JywgJ2FkZCcsICdhbGVydCcsXG4gICdhcHBsZS1sb2dvJywgJ2Fycm93LWRvd24tMycsICdhdHRhY2gnLCAnY2FyZFZpZXdBbHQnLCAnY2hhcnQtb2YtYWNjb3VudCcsXG4gICdjaGF0JywgJ2NoZWNrLTInLCAnY2hlY2tlZCcsICdjaGV2cm9uJywgJ2NoZXZyb24tcmlnaHQtdGhpY2snLCAnY2xvc2UnLFxuICAnY2xvc2UtY2lyY2xlJywgJ2Nsb3NlLWNpcmNsZS1mdWxsJywgJ2Nsb3NlLW5vLWNpcmNsZScsICdjb2x1bW4nLCAnZGFuZ2VySW5mbycsXG4gICdkYXNoYm9hcmQnLCAnZGVmYXVsdFBhZ2VJY29uJywgJ2RlbGV0ZScsICdlZGl0JywgJ2VkaXQtaWNvbicsICdlbGlwc2lzJyxcbiAgJ2Vtb2ppJywgJ2Vycm9yJywgJ2V4cG9ydCcsICdleWUtY2xvc2VkJywgJ2ZpbGUnLCAnZmlsdGVyJywgJ2dlYXInLFxuICAnZ29vZ2xlLWxvZ28nLCAnZ3JpZCcsICdncmlkLTInLCAnZ3JpZC0zJywgJ2luZm8nLCAnbGlzdCcsICdsaXN0LXZpZXcnLFxuICAnbG9uZy1hcnJvdycsICdtZW51JywgJ21pY3Jvc29mdC1sb2dvJywgJ25vdC1hbGxvd2VkJywgJ29mZicsICdvbicsXG4gICdwcm9jdXJlbWVudCcsICdzYWxlcycsICdzZWFyY2gnLCAnc2VhcmNoMicsICdzZWN1cml0eScsICdzZWxlY3QnLFxuICAnc2tpcC1mb3J3YXJkJywgJ3NvcnQnLCAnc3F1YXJlLWRvdCcsICdzdGF0JywgJ3N1Y2Nlc3MnLCAndGFibGUtdmlldycsXG4gICd0ZXJtaW5hbCcsICd0aWNrJywgJ3dhcm5pbmcnLCAnd29ya2Zsb3cnLFxuXTtcblxuY29uc3QgVkFSSUFOVF9JQ09OX1NFVDogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoU0hBUkVEX0xJQl9JQ09OUyk7XG5jb25zdCBERUZBVUxUX0lDT05fU0VUOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gIC4uLlNIQVJFRF9MSUJfSUNPTlMsXG4gIC4uLkRFRkFVTFRfT05MWV9MSUJfSUNPTlMsXG5dKTtcblxuZXhwb3J0IGNvbnN0IExJQl9JQ09OX1NFVFM6IFJlY29yZDwnZGVmYXVsdCcgfCAnb3V0bGluZScgfCAnc29saWQnLCBSZWFkb25seVNldDxzdHJpbmc+PiA9IHtcbiAgZGVmYXVsdDogREVGQVVMVF9JQ09OX1NFVCxcbiAgb3V0bGluZTogVkFSSUFOVF9JQ09OX1NFVCxcbiAgc29saWQ6IFZBUklBTlRfSUNPTl9TRVQsXG59O1xuIl19
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import { of } from 'rxjs';
|
|
3
|
+
import { catchError, map, shareReplay, switchMap } from 'rxjs/operators';
|
|
4
|
+
import { LIB_ICON_SETS } from './lib-icon-manifest';
|
|
2
5
|
import * as i0 from "@angular/core";
|
|
3
6
|
import * as i1 from "@angular/common/http";
|
|
4
7
|
import * as i2 from "@angular/platform-browser";
|
|
5
8
|
export class SvgComponent {
|
|
6
9
|
http;
|
|
7
10
|
sanitizer;
|
|
11
|
+
static svgCache = new Map();
|
|
12
|
+
static libIconsStatus = 'unknown';
|
|
13
|
+
static libIconsProbe$ = null;
|
|
8
14
|
icon = '';
|
|
9
15
|
width = 24;
|
|
10
16
|
height = 24;
|
|
@@ -14,17 +20,37 @@ export class SvgComponent {
|
|
|
14
20
|
type = 'default';
|
|
15
21
|
size;
|
|
16
22
|
svgContainer;
|
|
23
|
+
loadedKey = '';
|
|
24
|
+
rawSvgContent = null;
|
|
25
|
+
sub;
|
|
17
26
|
constructor(http, sanitizer) {
|
|
18
27
|
this.http = http;
|
|
19
28
|
this.sanitizer = sanitizer;
|
|
20
29
|
}
|
|
21
30
|
ngOnInit() {
|
|
22
31
|
this.color = this.fill.length > 0 ? this.fill : this.stroke;
|
|
23
|
-
this.
|
|
32
|
+
if (!this.loadedKey && this.icon) {
|
|
33
|
+
this.loadSvgIcon(this.icon);
|
|
34
|
+
}
|
|
24
35
|
}
|
|
25
36
|
ngOnChanges() {
|
|
26
37
|
this.color = this.fill.length > 0 ? this.fill : this.stroke;
|
|
27
|
-
this.
|
|
38
|
+
const trimmed = this.icon?.trim() || '';
|
|
39
|
+
const nextKey = trimmed ? `${this.type}:${trimmed}` : '';
|
|
40
|
+
if (nextKey !== this.loadedKey) {
|
|
41
|
+
this.loadSvgIcon(this.icon);
|
|
42
|
+
}
|
|
43
|
+
else if (this.rawSvgContent) {
|
|
44
|
+
try {
|
|
45
|
+
this.updateSvg(this.rawSvgContent);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
// Ignore DOM parse errors
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
ngOnDestroy() {
|
|
53
|
+
this.sub?.unsubscribe();
|
|
28
54
|
}
|
|
29
55
|
getIconDimensions() {
|
|
30
56
|
let width = this.width;
|
|
@@ -60,12 +86,22 @@ export class SvgComponent {
|
|
|
60
86
|
return { width, height };
|
|
61
87
|
}
|
|
62
88
|
loadSvgIcon(iconName) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
.
|
|
68
|
-
if (
|
|
89
|
+
const trimmed = iconName?.trim() || '';
|
|
90
|
+
if (!trimmed) {
|
|
91
|
+
this.loadedKey = '';
|
|
92
|
+
this.rawSvgContent = null;
|
|
93
|
+
this.sub?.unsubscribe();
|
|
94
|
+
if (this.svgContainer?.nativeElement) {
|
|
95
|
+
this.svgContainer.nativeElement.innerHTML = '';
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const iconType = this.type || 'default';
|
|
100
|
+
this.loadedKey = `${iconType}:${trimmed}`;
|
|
101
|
+
this.sub?.unsubscribe();
|
|
102
|
+
this.sub = this.resolveSvg$(trimmed, iconType).subscribe((svgContent) => {
|
|
103
|
+
if (svgContent) {
|
|
104
|
+
this.rawSvgContent = svgContent;
|
|
69
105
|
try {
|
|
70
106
|
this.updateSvg(svgContent);
|
|
71
107
|
}
|
|
@@ -73,70 +109,78 @@ export class SvgComponent {
|
|
|
73
109
|
// console.log({ Error: err });
|
|
74
110
|
}
|
|
75
111
|
}
|
|
76
|
-
else {
|
|
77
|
-
// If response is not a valid SVG, try loading from project assets
|
|
78
|
-
this.fallbackLoad(iconName);
|
|
79
|
-
}
|
|
80
|
-
}, (error) => {
|
|
81
|
-
this.fallbackLoad(iconName);
|
|
82
112
|
});
|
|
83
113
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
114
|
+
resolveSvg$(iconName, type) {
|
|
115
|
+
const cacheKey = `${type}:${iconName}`;
|
|
116
|
+
const existing = SvgComponent.svgCache.get(cacheKey);
|
|
117
|
+
if (existing) {
|
|
118
|
+
return existing;
|
|
119
|
+
}
|
|
120
|
+
const inRequestedSet = LIB_ICON_SETS[type]?.has(iconName) ?? false;
|
|
121
|
+
const inDefaultSet = LIB_ICON_SETS.default.has(iconName);
|
|
122
|
+
const libFolder = inRequestedSet
|
|
123
|
+
? type
|
|
124
|
+
: inDefaultSet
|
|
125
|
+
? 'default'
|
|
126
|
+
: null;
|
|
127
|
+
let request$;
|
|
128
|
+
if (!libFolder || SvgComponent.libIconsStatus === 'unavailable') {
|
|
129
|
+
// Icon is not in the library's built-in set (custom app icon) or lib-icons is not mounted
|
|
130
|
+
request$ = this.fetchFromAppAssets$(iconName);
|
|
131
|
+
}
|
|
132
|
+
else if (SvgComponent.libIconsStatus === 'available') {
|
|
133
|
+
request$ = this.fetchFromLibAssets$(libFolder, iconName);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// First library icon requested: probe `assets/lib-icons` once and share status across concurrent icons
|
|
137
|
+
if (!SvgComponent.libIconsProbe$) {
|
|
138
|
+
const firstTry$ = this.http
|
|
139
|
+
.get(`assets/lib-icons/${libFolder}/${iconName}.svg`, {
|
|
140
|
+
responseType: 'text',
|
|
141
|
+
})
|
|
142
|
+
.pipe(map((svg) => (svg && svg.includes('<svg') ? svg : null)), catchError(() => of(null)), shareReplay({ bufferSize: 1, refCount: false }));
|
|
143
|
+
SvgComponent.libIconsProbe$ = firstTry$.pipe(map((svg) => {
|
|
144
|
+
const available = svg !== null;
|
|
145
|
+
SvgComponent.libIconsStatus = available ? 'available' : 'unavailable';
|
|
146
|
+
return available;
|
|
147
|
+
}), shareReplay({ bufferSize: 1, refCount: false }));
|
|
148
|
+
request$ = firstTry$.pipe(switchMap((svg) => {
|
|
149
|
+
if (svg !== null) {
|
|
150
|
+
SvgComponent.libIconsStatus = 'available';
|
|
151
|
+
return of(svg);
|
|
152
|
+
}
|
|
153
|
+
SvgComponent.libIconsStatus = 'unavailable';
|
|
154
|
+
return this.fetchFromAppAssets$(iconName);
|
|
155
|
+
}));
|
|
95
156
|
}
|
|
96
157
|
else {
|
|
97
|
-
|
|
158
|
+
request$ = SvgComponent.libIconsProbe$.pipe(switchMap((available) => available
|
|
159
|
+
? this.fetchFromLibAssets$(libFolder, iconName)
|
|
160
|
+
: this.fetchFromAppAssets$(iconName)));
|
|
98
161
|
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
162
|
+
}
|
|
163
|
+
const shared$ = request$.pipe(shareReplay({ bufferSize: 1, refCount: false }));
|
|
164
|
+
SvgComponent.svgCache.set(cacheKey, shared$);
|
|
165
|
+
return shared$;
|
|
166
|
+
}
|
|
167
|
+
fetchFromLibAssets$(folder, iconName) {
|
|
168
|
+
return this.http
|
|
169
|
+
.get(`assets/lib-icons/${folder}/${iconName}.svg`, {
|
|
170
|
+
responseType: 'text',
|
|
171
|
+
})
|
|
172
|
+
.pipe(switchMap((svgContent) => {
|
|
173
|
+
if (svgContent && svgContent.includes('<svg')) {
|
|
174
|
+
return of(svgContent);
|
|
175
|
+
}
|
|
176
|
+
return this.fetchFromAppAssets$(iconName);
|
|
177
|
+
}), catchError(() => this.fetchFromAppAssets$(iconName)));
|
|
178
|
+
}
|
|
179
|
+
fetchFromAppAssets$(iconName) {
|
|
180
|
+
return this.http
|
|
181
|
+
.get(`assets/icons/${iconName}.svg`, { responseType: 'text' })
|
|
182
|
+
.pipe(map((svgContent) => svgContent && svgContent.includes('<svg') ? svgContent : null), catchError(() => of(null)));
|
|
102
183
|
}
|
|
103
|
-
// loadSvgIcon(iconName: string): void {
|
|
104
|
-
// this.http
|
|
105
|
-
// .get(`assets/lib-icons/${this.type}/${iconName}.svg`, {
|
|
106
|
-
// responseType: 'text',
|
|
107
|
-
// })
|
|
108
|
-
// .subscribe(
|
|
109
|
-
// (svgContent: string | null) => {
|
|
110
|
-
// //console.log({SvgContent: svgContent});
|
|
111
|
-
// if (svgContent) {
|
|
112
|
-
// try {
|
|
113
|
-
// this.updateSvg(svgContent);
|
|
114
|
-
// } catch (err: any) {
|
|
115
|
-
// console.log({ Error: err });
|
|
116
|
-
// }
|
|
117
|
-
// }
|
|
118
|
-
// },
|
|
119
|
-
// (error) => {
|
|
120
|
-
// this.http
|
|
121
|
-
// .get(`assets/icons/${iconName}.svg`, { responseType: 'text' })
|
|
122
|
-
// .subscribe(
|
|
123
|
-
// (svgContent: string | null) => {
|
|
124
|
-
// //console.log({SvgContent: svgContent});
|
|
125
|
-
// if (svgContent) {
|
|
126
|
-
// try {
|
|
127
|
-
// this.updateSvg(svgContent);
|
|
128
|
-
// } catch (err: any) {
|
|
129
|
-
// console.log({ Error: err });
|
|
130
|
-
// }
|
|
131
|
-
// }
|
|
132
|
-
// },
|
|
133
|
-
// (error) => {
|
|
134
|
-
// console.error(`Error loading SVG icon: ${error}`);
|
|
135
|
-
// }
|
|
136
|
-
// );
|
|
137
|
-
// }
|
|
138
|
-
// );
|
|
139
|
-
// }
|
|
140
184
|
updateSvg(svgContent) {
|
|
141
185
|
const parser = new DOMParser();
|
|
142
186
|
const svgDoc = parser.parseFromString(svgContent, 'image/svg+xml');
|
|
@@ -160,15 +204,6 @@ export class SvgComponent {
|
|
|
160
204
|
element.getAttribute('stroke') !== 'none';
|
|
161
205
|
const hasFill = element.hasAttribute('fill') &&
|
|
162
206
|
element.getAttribute('fill') !== 'none';
|
|
163
|
-
// if (this.icon == 'academic-cap') {
|
|
164
|
-
// console.log({
|
|
165
|
-
// Element: element,
|
|
166
|
-
// hasStroke: hasStroke,
|
|
167
|
-
// hasFill: hasFill,
|
|
168
|
-
// Stroke: element.getAttribute('stroke'),
|
|
169
|
-
// Fill: element.getAttribute('fill'),
|
|
170
|
-
// });
|
|
171
|
-
// }
|
|
172
207
|
// Set as inline style (not just the presentation attribute) so theme
|
|
173
208
|
// tokens like `var(--vbn-color-error)` resolve — CSS custom properties
|
|
174
209
|
// are not honored in SVG presentation attributes.
|
|
@@ -219,4 +254,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
|
|
|
219
254
|
type: ViewChild,
|
|
220
255
|
args: ['svgContainer', { static: true }]
|
|
221
256
|
}] } });
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvc3ZnL3N2Zy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDOzs7O0FBU3ZCLE1BQU0sT0FBTyxZQUFZO0lBYUg7SUFBMEI7SUFackMsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFDN0IsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNWLElBQUksR0FBVyxFQUFFLENBQUM7SUFDbEIsTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUNwQixJQUFJLEdBQW9DLFNBQVMsQ0FBQztJQUVsRCxJQUFJLENBQXFEO0lBRXJCLFlBQVksQ0FBYztJQUV2RSxZQUFvQixJQUFnQixFQUFVLFNBQXVCO1FBQWpELFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFjO0lBQUcsQ0FBQztJQUV6RSxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1B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QVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBPbkNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLXN2ZycsXG4gIHRlbXBsYXRlOiAnPHNwYW4gI3N2Z0NvbnRhaW5lcj48L3NwYW4+JyxcbiAgc3R5bGVVcmxzOiBbJy4vc3ZnLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3ZnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBpY29uOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciA9IDI0O1xuICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlciA9IDI0O1xuICBjb2xvcjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGZpbGw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzdHJva2U6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB0eXBlOiAnZGVmYXVsdCcgfCAnb3V0bGluZScgfCAnc29saWQnID0gJ2RlZmF1bHQnO1xuXG4gIEBJbnB1dCgpIHNpemU/OiAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnIHwgJzJ4bCcgfCAnM3hsJyB8ICc0eGwnO1xuXG4gIEBWaWV3Q2hpbGQoJ3N2Z0NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIHN2Z0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sb3IgPSB0aGlzLmZpbGwubGVuZ3RoID4gMCA/IHRoaXMuZmlsbCA6IHRoaXMuc3Ryb2tlO1xuICAgIHRoaXMubG9hZFN2Z0ljb24odGhpcy5pY29uKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29sb3IgPSB0aGlzLmZpbGwubGVuZ3RoID4gMCA/IHRoaXMuZmlsbCA6IHRoaXMuc3Ryb2tlO1xuICAgIHRoaXMubG9hZFN2Z0ljb24odGhpcy5pY29uKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SWNvbkRpbWVuc2lvbnMoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICBsZXQgd2lkdGggPSB0aGlzLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IDE2O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSAyNDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGcnOlxuICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMzI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3hsJzpcbiAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IDQ4O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcyeGwnOlxuICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gNTI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzN4bCc6XG4gICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSA2NDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnNHhsJzpcbiAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IDgwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMTY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCB9O1xuICB9XG5cbiAgbG9hZFN2Z0ljb24oaWNvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaHR0cFxuICAgICAgLmdldChgYXNzZXRzL2xpYi1pY29ucy8ke3RoaXMudHlwZX0vJHtpY29uTmFtZX0uc3ZnYCwge1xuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoc3ZnQ29udGVudDogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgICAgIGlmIChzdmdDb250ZW50ICYmIHN2Z0NvbnRlbnQuaW5jbHVkZXMoJzxzdmcnKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdmcoc3ZnQ29udGVudCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh7IEVycm9yOiBlcnIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHJlc3BvbnNlIGlzIG5vdCBhIHZhbGlkIFNWRywgdHJ5IGxvYWRpbmcgZnJvbSBwcm9qZWN0IGFzc2V0c1xuICAgICAgICAgICAgdGhpcy5mYWxsYmFja0xvYWQoaWNvbk5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5mYWxsYmFja0xvYWQoaWNvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWxsYmFja0xvYWQoaWNvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaHR0cFxuICAgICAgLmdldChgYXNzZXRzL2ljb25zLyR7aWNvbk5hbWV9LnN2Z2AsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChzdmdDb250ZW50OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICAgICAgaWYgKHN2Z0NvbnRlbnQgJiYgc3ZnQ29udGVudC5pbmNsdWRlcygnPHN2ZycpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN2ZyhzdmdDb250ZW50KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgRXJyb3I6IGVyciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9jb25zb2xlLmVycm9yKGBJbnZhbGlkIFNWRyByZXNwb25zZSBmb3IgJHtpY29uTmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgU1ZHIGljb246ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvLyBsb2FkU3ZnSWNvbihpY29uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIC8vICAgdGhpcy5odHRwXG4gIC8vICAgICAuZ2V0KGBhc3NldHMvbGliLWljb25zLyR7dGhpcy50eXBlfS8ke2ljb25OYW1lfS5zdmdgLCB7XG4gIC8vICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAvLyAgICAgfSlcbiAgLy8gICAgIC5zdWJzY3JpYmUoXG4gIC8vICAgICAgIChzdmdDb250ZW50OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gIC8vICAgICAgICAgLy9jb25zb2xlLmxvZyh7U3ZnQ29udGVudDogc3ZnQ29udGVudH0pO1xuICAvLyAgICAgICAgIGlmIChzdmdDb250ZW50KSB7XG4gIC8vICAgICAgICAgICB0cnkge1xuICAvLyAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN2ZyhzdmdDb250ZW50KTtcbiAgLy8gICAgICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gIC8vICAgICAgICAgICAgIGNvbnNvbGUubG9nKHsgRXJyb3I6IGVyciB9KTtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH0sXG4gIC8vICAgICAgIChlcnJvcikgPT4ge1xuICAvLyAgICAgICAgIHRoaXMuaHR0cFxuICAvLyAgICAgICAgICAgLmdldChgYXNzZXRzL2ljb25zLyR7aWNvbk5hbWV9LnN2Z2AsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcbiAgLy8gICAgICAgICAgIC5zdWJzY3JpYmUoXG4gIC8vICAgICAgICAgICAgIChzdmdDb250ZW50OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gIC8vICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh7U3ZnQ29udGVudDogc3ZnQ29udGVudH0pO1xuICAvLyAgICAgICAgICAgICAgIGlmIChzdmdDb250ZW50KSB7XG4gIC8vICAgICAgICAgICAgICAgICB0cnkge1xuICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN2ZyhzdmdDb250ZW50KTtcbiAgLy8gICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gIC8vICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHsgRXJyb3I6IGVyciB9KTtcbiAgLy8gICAgICAgICAgICAgICAgIH1cbiAgLy8gICAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICAgIH0sXG4gIC8vICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAvLyAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgU1ZHIGljb246ICR7ZXJyb3J9YCk7XG4gIC8vICAgICAgICAgICAgIH1cbiAgLy8gICAgICAgICAgICk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICBwcml2YXRlIHVwZGF0ZVN2ZyhzdmdDb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgY29uc3Qgc3ZnRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhzdmdDb250ZW50LCAnaW1hZ2Uvc3ZnK3htbCcpO1xuICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSBzdmdEb2MuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmdldEljb25EaW1lbnNpb25zKCk7XG5cbiAgICBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3aWR0aC50b1N0cmluZygpKTtcbiAgICBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgaGVpZ2h0LnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgZWxlbWVudHNUb1VwZGF0ZSA9IFtcbiAgICAgICdwYXRoJyxcbiAgICAgICdjaXJjbGUnLFxuICAgICAgJ2xpbmUnLFxuICAgICAgJ3JlY3QnLFxuICAgICAgJ3BvbHlnb24nLFxuICAgICAgJ3BvbHlsaW5lJyxcbiAgICAgICdlbGxpcHNlJyxcbiAgICBdO1xuXG4gICAgZWxlbWVudHNUb1VwZGF0ZS5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gc3ZnRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHRhZyk7XG4gICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc1N0cm9rZSA9XG4gICAgICAgICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3N0cm9rZScpICYmXG4gICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0cm9rZScpICE9PSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IGhhc0ZpbGwgPVxuICAgICAgICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdmaWxsJykgJiZcbiAgICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZmlsbCcpICE9PSAnbm9uZSc7XG5cbiAgICAgICAgLy8gIGlmICh0aGlzLmljb24gPT0gJ2FjYWRlbWljLWNhcCcpIHtcbiAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgLy8gICAgICAgRWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgLy8gICAgICAgaGFzU3Ryb2tlOiBoYXNTdHJva2UsXG4gICAgICAgIC8vICAgICAgIGhhc0ZpbGw6IGhhc0ZpbGwsXG4gICAgICAgIC8vICAgICAgIFN0cm9rZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0cm9rZScpLFxuICAgICAgICAvLyAgICAgICBGaWxsOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZmlsbCcpLFxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyBTZXQgYXMgaW5saW5lIHN0eWxlIChub3QganVzdCB0aGUgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZSkgc28gdGhlbWVcbiAgICAgICAgLy8gdG9rZW5zIGxpa2UgYHZhcigtLXZibi1jb2xvci1lcnJvcilgIHJlc29sdmUg4oCUIENTUyBjdXN0b20gcHJvcGVydGllc1xuICAgICAgICAvLyBhcmUgbm90IGhvbm9yZWQgaW4gU1ZHIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzLlxuICAgICAgICBpZiAodGhpcy5jb2xvciAmJiBoYXNGaWxsKSB7XG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCB0aGlzLmNvbG9yKTtcbiAgICAgICAgICAoZWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZmlsbCA9IHRoaXMuY29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sb3IgJiYgaGFzU3Ryb2tlKSB7XG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHRoaXMuY29sb3IpO1xuICAgICAgICAgIChlbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5zdHJva2UgPSB0aGlzLmNvbG9yO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG1hc2tzID0gc3ZnRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdtYXNrJyk7XG4gICAgbWFza3MuZm9yRWFjaCgobWFzaywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld01hc2tJZCA9IGBtYXNrXyR7dGhpcy5pY29ufV8ke2luZGV4fWA7XG4gICAgICBtYXNrLnNldEF0dHJpYnV0ZSgnaWQnLCBuZXdNYXNrSWQpO1xuXG4gICAgICBjb25zdCBtYXNrUmVmZXJlbmNlcyA9IHN2Z0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYFttYXNrPVwidXJsKCMke21hc2suaWR9KVwiXWBcbiAgICAgICk7XG4gICAgICBtYXNrUmVmZXJlbmNlcy5mb3JFYWNoKChyZWYpID0+IHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnbWFzaycsIGB1cmwoIyR7bmV3TWFza0lkfSlgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc3ZnQ29udGFpbmVyRWwgPSB0aGlzLnN2Z0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgIHN2Z0NvbnRhaW5lckVsLmlubmVySFRNTCA9ICcnO1xuICAgIHN2Z0NvbnRhaW5lckVsLmFwcGVuZENoaWxkKHN2Z0VsZW1lbnQpO1xuICB9XG59XG4iXX0=
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvc3ZnL3N2Zy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBNEIsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFPcEQsTUFBTSxPQUFPLFlBQVk7SUFxQkg7SUFBMEI7SUFwQnRDLE1BQU0sQ0FBVSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7SUFDeEUsTUFBTSxDQUFDLGNBQWMsR0FBNEMsU0FBUyxDQUFDO0lBQzNFLE1BQU0sQ0FBQyxjQUFjLEdBQStCLElBQUksQ0FBQztJQUV4RCxJQUFJLEdBQVcsRUFBRSxDQUFDO0lBQ2xCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUM3QixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ1YsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixNQUFNLEdBQVcsRUFBRSxDQUFDO0lBQ3BCLElBQUksR0FBb0MsU0FBUyxDQUFDO0lBRWxELElBQUksQ0FBcUQ7SUFFckIsWUFBWSxDQUFjO0lBRS9ELFNBQVMsR0FBVyxFQUFFLENBQUM7SUFDdkIsYUFBYSxHQUFrQixJQUFJLENBQUM7SUFDcEMsR0FBRyxDQUFnQjtJQUUzQixZQUFvQixJQUFnQixFQUFVLFNBQXVCO1FBQWpELFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxjQUFT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QUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUN2RCxjQUFjLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUM5QixjQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7d0dBclJVLFlBQVk7NEZBQVosWUFBWSwyVEFIYiw2QkFBNkI7OzRGQUc1QixZQUFZO2tCQUx4QixTQUFTOytCQUNFLFlBQVksWUFDWiw2QkFBNkI7MEdBUTlCLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExJQl9JQ09OX1NFVFMgfSBmcm9tICcuL2xpYi1pY29uLW1hbmlmZXN0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmVyYmVuLXN2ZycsXG4gIHRlbXBsYXRlOiAnPHNwYW4gI3N2Z0NvbnRhaW5lcj48L3NwYW4+JyxcbiAgc3R5bGVVcmxzOiBbJy4vc3ZnLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3ZnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHN2Z0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4+KCk7XG4gIHByaXZhdGUgc3RhdGljIGxpYkljb25zU3RhdHVzOiAndW5rbm93bicgfCAnYXZhaWxhYmxlJyB8ICd1bmF2YWlsYWJsZScgPSAndW5rbm93bic7XG4gIHByaXZhdGUgc3RhdGljIGxpYkljb25zUHJvYmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgPSAyNDtcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXIgPSAyNDtcbiAgY29sb3I6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBmaWxsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc3Ryb2tlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdHlwZTogJ2RlZmF1bHQnIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJyB8ICcyeGwnIHwgJzN4bCcgfCAnNHhsJztcblxuICBAVmlld0NoaWxkKCdzdmdDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdmdDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgbG9hZGVkS2V5OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSByYXdTdmdDb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29sb3IgPSB0aGlzLmZpbGwubGVuZ3RoID4gMCA/IHRoaXMuZmlsbCA6IHRoaXMuc3Ryb2tlO1xuICAgIGlmICghdGhpcy5sb2FkZWRLZXkgJiYgdGhpcy5pY29uKSB7XG4gICAgICB0aGlzLmxvYWRTdmdJY29uKHRoaXMuaWNvbik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb2xvciA9IHRoaXMuZmlsbC5sZW5ndGggPiAwID8gdGhpcy5maWxsIDogdGhpcy5zdHJva2U7XG4gICAgY29uc3QgdHJpbW1lZCA9IHRoaXMuaWNvbj8udHJpbSgpIHx8ICcnO1xuICAgIGNvbnN0IG5leHRLZXkgPSB0cmltbWVkID8gYCR7dGhpcy50eXBlfToke3RyaW1tZWR9YCA6ICcnO1xuXG4gICAgaWYgKG5leHRLZXkgIT09IHRoaXMubG9hZGVkS2V5KSB7XG4gICAgICB0aGlzLmxvYWRTdmdJY29uKHRoaXMuaWNvbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJhd1N2Z0NvbnRlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3ZnKHRoaXMucmF3U3ZnQ29udGVudCk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAvLyBJZ25vcmUgRE9NIHBhcnNlIGVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJY29uRGltZW5zaW9ucygpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0ge1xuICAgIGxldCB3aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgbGV0IGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuc2l6ZSkge1xuICAgICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgICAgY2FzZSAnc20nOlxuICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMTY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IDI0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsZyc6XG4gICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSAzMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gNDg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzJ4bCc6XG4gICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSA1MjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnM3hsJzpcbiAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IDY0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICc0eGwnOlxuICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gODA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSAxNjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0IH07XG4gIH1cblxuICBsb2FkU3ZnSWNvbihpY29uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdHJpbW1lZCA9IGljb25OYW1lPy50cmltKCkgfHwgJyc7XG4gICAgaWYgKCF0cmltbWVkKSB7XG4gICAgICB0aGlzLmxvYWRlZEtleSA9ICcnO1xuICAgICAgdGhpcy5yYXdTdmdDb250ZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgaWYgKHRoaXMuc3ZnQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc3ZnQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWNvblR5cGUgPSB0aGlzLnR5cGUgfHwgJ2RlZmF1bHQnO1xuICAgIHRoaXMubG9hZGVkS2V5ID0gYCR7aWNvblR5cGV9OiR7dHJpbW1lZH1gO1xuICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJlc29sdmVTdmckKHRyaW1tZWQsIGljb25UeXBlKS5zdWJzY3JpYmUoKHN2Z0NvbnRlbnQpID0+IHtcbiAgICAgIGlmIChzdmdDb250ZW50KSB7XG4gICAgICAgIHRoaXMucmF3U3ZnQ29udGVudCA9IHN2Z0NvbnRlbnQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdmcoc3ZnQ29udGVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coeyBFcnJvcjogZXJyIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdmckKFxuICAgIGljb25OYW1lOiBzdHJpbmcsXG4gICAgdHlwZTogJ2RlZmF1bHQnIHwgJ291dGxpbmUnIHwgJ3NvbGlkJ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke3R5cGV9OiR7aWNvbk5hbWV9YDtcbiAgICBjb25zdCBleGlzdGluZyA9IFN2Z0NvbXBvbmVudC5zdmdDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cblxuICAgIGNvbnN0IGluUmVxdWVzdGVkU2V0ID0gTElCX0lDT05fU0VUU1t0eXBlXT8uaGFzKGljb25OYW1lKSA/PyBmYWxzZTtcbiAgICBjb25zdCBpbkRlZmF1bHRTZXQgPSBMSUJfSUNPTl9TRVRTLmRlZmF1bHQuaGFzKGljb25OYW1lKTtcbiAgICBjb25zdCBsaWJGb2xkZXI6ICdkZWZhdWx0JyB8ICdvdXRsaW5lJyB8ICdzb2xpZCcgfCBudWxsID0gaW5SZXF1ZXN0ZWRTZXRcbiAgICAgID8gdHlwZVxuICAgICAgOiBpbkRlZmF1bHRTZXRcbiAgICAgID8gJ2RlZmF1bHQnXG4gICAgICA6IG51bGw7XG5cbiAgICBsZXQgcmVxdWVzdCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG5cbiAgICBpZiAoIWxpYkZvbGRlciB8fCBTdmdDb21wb25lbnQubGliSWNvbnNTdGF0dXMgPT09ICd1bmF2YWlsYWJsZScpIHtcbiAgICAgIC8vIEljb24gaXMgbm90IGluIHRoZSBsaWJyYXJ5J3MgYnVpbHQtaW4gc2V0IChjdXN0b20gYXBwIGljb24pIG9yIGxpYi1pY29ucyBpcyBub3QgbW91bnRlZFxuICAgICAgcmVxdWVzdCQgPSB0aGlzLmZldGNoRnJvbUFwcEFzc2V0cyQoaWNvbk5hbWUpO1xuICAgIH0gZWxzZSBpZiAoU3ZnQ29tcG9uZW50LmxpYkljb25zU3RhdHVzID09PSAnYXZhaWxhYmxlJykge1xuICAgICAgcmVxdWVzdCQgPSB0aGlzLmZldGNoRnJvbUxpYkFzc2V0cyQobGliRm9sZGVyLCBpY29uTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZpcnN0IGxpYnJhcnkgaWNvbiByZXF1ZXN0ZWQ6IHByb2JlIGBhc3NldHMvbGliLWljb25zYCBvbmNlIGFuZCBzaGFyZSBzdGF0dXMgYWNyb3NzIGNvbmN1cnJlbnQgaWNvbnNcbiAgICAgIGlmICghU3ZnQ29tcG9uZW50LmxpYkljb25zUHJvYmUkKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VHJ5JCA9IHRoaXMuaHR0cFxuICAgICAgICAgIC5nZXQoYGFzc2V0cy9saWItaWNvbnMvJHtsaWJGb2xkZXJ9LyR7aWNvbk5hbWV9LnN2Z2AsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN2ZykgPT4gKHN2ZyAmJiBzdmcuaW5jbHVkZXMoJzxzdmcnKSA/IHN2ZyA6IG51bGwpKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogZmFsc2UgfSlcbiAgICAgICAgICApO1xuXG4gICAgICAgIFN2Z0NvbXBvbmVudC5saWJJY29uc1Byb2JlJCA9IGZpcnN0VHJ5JC5waXBlKFxuICAgICAgICAgIG1hcCgoc3ZnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGUgPSBzdmcgIT09IG51bGw7XG4gICAgICAgICAgICBTdmdDb21wb25lbnQubGliSWNvbnNTdGF0dXMgPSBhdmFpbGFibGUgPyAnYXZhaWxhYmxlJyA6ICd1bmF2YWlsYWJsZSc7XG4gICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IGZhbHNlIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVxdWVzdCQgPSBmaXJzdFRyeSQucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKHN2ZykgPT4ge1xuICAgICAgICAgICAgaWYgKHN2ZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBTdmdDb21wb25lbnQubGliSWNvbnNTdGF0dXMgPSAnYXZhaWxhYmxlJztcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHN2Zyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBTdmdDb21wb25lbnQubGliSWNvbnNTdGF0dXMgPSAndW5hdmFpbGFibGUnO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hGcm9tQXBwQXNzZXRzJChpY29uTmFtZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3QkID0gU3ZnQ29tcG9uZW50LmxpYkljb25zUHJvYmUkLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChhdmFpbGFibGUpID0+XG4gICAgICAgICAgICBhdmFpbGFibGVcbiAgICAgICAgICAgICAgPyB0aGlzLmZldGNoRnJvbUxpYkFzc2V0cyQobGliRm9sZGVyLCBpY29uTmFtZSlcbiAgICAgICAgICAgICAgOiB0aGlzLmZldGNoRnJvbUFwcEFzc2V0cyQoaWNvbk5hbWUpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlZCQgPSByZXF1ZXN0JC5waXBlKHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IGZhbHNlIH0pKTtcbiAgICBTdmdDb21wb25lbnQuc3ZnQ2FjaGUuc2V0KGNhY2hlS2V5LCBzaGFyZWQkKTtcbiAgICByZXR1cm4gc2hhcmVkJDtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hGcm9tTGliQXNzZXRzJChcbiAgICBmb2xkZXI6ICdkZWZhdWx0JyB8ICdvdXRsaW5lJyB8ICdzb2xpZCcsXG4gICAgaWNvbk5hbWU6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGBhc3NldHMvbGliLWljb25zLyR7Zm9sZGVyfS8ke2ljb25OYW1lfS5zdmdgLCB7XG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHN2Z0NvbnRlbnQpID0+IHtcbiAgICAgICAgICBpZiAoc3ZnQ29udGVudCAmJiBzdmdDb250ZW50LmluY2x1ZGVzKCc8c3ZnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihzdmdDb250ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hGcm9tQXBwQXNzZXRzJChpY29uTmFtZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHRoaXMuZmV0Y2hGcm9tQXBwQXNzZXRzJChpY29uTmFtZSkpXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaEZyb21BcHBBc3NldHMkKGljb25OYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGBhc3NldHMvaWNvbnMvJHtpY29uTmFtZX0uc3ZnYCwgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoc3ZnQ29udGVudCkgPT5cbiAgICAgICAgICBzdmdDb250ZW50ICYmIHN2Z0NvbnRlbnQuaW5jbHVkZXMoJzxzdmcnKSA/IHN2Z0NvbnRlbnQgOiBudWxsXG4gICAgICAgICksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdmcoc3ZnQ29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgIGNvbnN0IHN2Z0RvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3ZnQ29udGVudCwgJ2ltYWdlL3N2Zyt4bWwnKTtcbiAgICBjb25zdCBzdmdFbGVtZW50ID0gc3ZnRG9jLmRvY3VtZW50RWxlbWVudDtcblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5nZXRJY29uRGltZW5zaW9ucygpO1xuXG4gICAgc3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2lkdGgudG9TdHJpbmcoKSk7XG4gICAgc3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGhlaWdodC50b1N0cmluZygpKTtcblxuICAgIGNvbnN0IGVsZW1lbnRzVG9VcGRhdGUgPSBbXG4gICAgICAncGF0aCcsXG4gICAgICAnY2lyY2xlJyxcbiAgICAgICdsaW5lJyxcbiAgICAgICdyZWN0JyxcbiAgICAgICdwb2x5Z29uJyxcbiAgICAgICdwb2x5bGluZScsXG4gICAgICAnZWxsaXBzZScsXG4gICAgXTtcblxuICAgIGVsZW1lbnRzVG9VcGRhdGUuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IHN2Z0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCh0YWcpO1xuICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNTdHJva2UgPVxuICAgICAgICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdzdHJva2UnKSAmJlxuICAgICAgICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHJva2UnKSAhPT0gJ25vbmUnO1xuICAgICAgICBjb25zdCBoYXNGaWxsID1cbiAgICAgICAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZmlsbCcpICYmXG4gICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSAhPT0gJ25vbmUnO1xuXG4gICAgICAgIC8vIFNldCBhcyBpbmxpbmUgc3R5bGUgKG5vdCBqdXN0IHRoZSBwcmVzZW50YXRpb24gYXR0cmlidXRlKSBzbyB0aGVtZVxuICAgICAgICAvLyB0b2tlbnMgbGlrZSBgdmFyKC0tdmJuLWNvbG9yLWVycm9yKWAgcmVzb2x2ZSDigJQgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG4gICAgICAgIC8vIGFyZSBub3QgaG9ub3JlZCBpbiBTVkcgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMuXG4gICAgICAgIGlmICh0aGlzLmNvbG9yICYmIGhhc0ZpbGwpIHtcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZmlsbCcsIHRoaXMuY29sb3IpO1xuICAgICAgICAgIChlbGVtZW50IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5maWxsID0gdGhpcy5jb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2xvciAmJiBoYXNTdHJva2UpIHtcbiAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgdGhpcy5jb2xvcik7XG4gICAgICAgICAgKGVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnN0cm9rZSA9IHRoaXMuY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbWFza3MgPSBzdmdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ21hc2snKTtcbiAgICBtYXNrcy5mb3JFYWNoKChtYXNrLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWFza0lkID0gYG1hc2tfJHt0aGlzLmljb259XyR7aW5kZXh9YDtcbiAgICAgIG1hc2suc2V0QXR0cmlidXRlKCdpZCcsIG5ld01hc2tJZCk7XG5cbiAgICAgIGNvbnN0IG1hc2tSZWZlcmVuY2VzID0gc3ZnRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgW21hc2s9XCJ1cmwoIyR7bWFzay5pZH0pXCJdYFxuICAgICAgKTtcbiAgICAgIG1hc2tSZWZlcmVuY2VzLmZvckVhY2goKHJlZikgPT4ge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdtYXNrJywgYHVybCgjJHtuZXdNYXNrSWR9KWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdmdDb250YWluZXJFbCA9IHRoaXMuc3ZnQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgc3ZnQ29udGFpbmVyRWwuaW5uZXJIVE1MID0gJyc7XG4gICAgc3ZnQ29udGFpbmVyRWwuYXBwZW5kQ2hpbGQoc3ZnRWxlbWVudCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { of } from 'rxjs';
|
|
3
|
-
import { catchError } from 'rxjs/operators';
|
|
3
|
+
import { catchError, shareReplay } from 'rxjs/operators';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/common/http";
|
|
6
6
|
export class IconService {
|
|
7
7
|
http;
|
|
8
|
+
cache = new Map();
|
|
8
9
|
constructor(http) {
|
|
9
10
|
this.http = http;
|
|
10
11
|
}
|
|
11
12
|
getIcon(iconName) {
|
|
12
|
-
|
|
13
|
-
)
|
|
13
|
+
const trimmed = iconName?.trim();
|
|
14
|
+
if (!trimmed) {
|
|
15
|
+
return of('');
|
|
16
|
+
}
|
|
17
|
+
const cached = this.cache.get(trimmed);
|
|
18
|
+
if (cached) {
|
|
19
|
+
return cached;
|
|
20
|
+
}
|
|
21
|
+
const req$ = this.http.get(`/icons/${trimmed}.svg`, { responseType: 'text' }).pipe(catchError(() => of('')), // Handle errors (e.g., if the SVG doesn't exist)
|
|
22
|
+
shareReplay({ bufferSize: 1, refCount: false }));
|
|
23
|
+
this.cache.set(trimmed, req$);
|
|
24
|
+
return req$;
|
|
14
25
|
}
|
|
15
26
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: IconService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
16
27
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: IconService, providedIn: 'root' });
|
|
@@ -21,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
|
|
|
21
32
|
providedIn: 'root',
|
|
22
33
|
}]
|
|
23
34
|
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvc2VydmljZXMvaWNvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLekQsTUFBTSxPQUFPLFdBQVc7SUFHRjtJQUZILEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztJQUUvRCxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQUcsQ0FBQztJQUV4QyxPQUFPLENBQUMsUUFBZ0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsT0FBTyxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2hGLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxpREFBaUQ7UUFDM0UsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDaEQsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBdEJVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEljb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPHN0cmluZz4+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gIGdldEljb24oaWNvbk5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgdHJpbW1lZCA9IGljb25OYW1lPy50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkKSB7XG4gICAgICByZXR1cm4gb2YoJycpO1xuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KHRyaW1tZWQpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxJCA9IHRoaXMuaHR0cC5nZXQoYC9pY29ucy8ke3RyaW1tZWR9LnN2Z2AsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoJycpKSwgLy8gSGFuZGxlIGVycm9ycyAoZS5nLiwgaWYgdGhlIFNWRyBkb2Vzbid0IGV4aXN0KVxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogZmFsc2UgfSlcbiAgICApO1xuICAgIHRoaXMuY2FjaGUuc2V0KHRyaW1tZWQsIHJlcSQpO1xuICAgIHJldHVybiByZXEkO1xuICB9XG59XG4iXX0=
|
|
@@ -191,11 +191,11 @@ export class VerbenaInputComponent {
|
|
|
191
191
|
this.validate();
|
|
192
192
|
}
|
|
193
193
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: VerbenaInputComponent, deps: [{ token: forwardRef(() => NgControl), optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
194
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: VerbenaInputComponent, selector: "verbena-input", inputs: { disabled: "disabled", label: "label", placeHolder: "placeHolder", required: "required", svgPosition: "svgPosition", minLength: "minLength", maxLength: "maxLength", type: "type", bgColor: "bgColor", border: "border", borderRadius: "borderRadius", textColor: "textColor", value: "value", labelPosition: "labelPosition", labelColor: "labelColor", disable: "disable", readOnly: "readOnly", min: "min", max: "max", showBorder: "showBorder", showErrorMessage: "showErrorMessage", errorMessageColor: "errorMessageColor", errorBorderColor: "errorBorderColor", errorPosition: "errorPosition", svg: "svg", fontSize: "fontSize", svgWidth: "svgWidth", svgHeight: "svgHeight", svgColor: "svgColor", capitalization: "capitalization", inputContainerClass: "inputContainerClass", inputFieldClass: "inputFieldClass", passLength: "passLength", inputWrapperClass: "inputWrapperClass", passwordToggle: "passwordToggle", customErrorMessages: "customErrorMessages", icon: "icon", textPass: "textPass" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div\n class=\"input-container {{ inputContainerClass }}\"\n [ngStyle]=\"{\n display: 'flex',\n 'flex-direction': 'column'\n }\"\n>\n <div\n [ngStyle]=\"{\n display: 'flex',\n 'justify-content': labelPosition,\n color: labelColor,\n padding: '0'\n }\"\n class=\"input-field\"\n >\n <div\n [ngStyle]=\"{\n width: '100%',\n display: 'flex',\n 'justify-content': 'space-between'\n }\"\n >\n <label [for]=\"label\">{{ label }}</label>\n <!-- incase i need it back -->\n <!-- <div *ngIf=\" passwordToggle === true\" [ngStyle]=\"{\n\n 'display': 'flex',\n 'align-item':'center',\n 'gap':'4px',\n 'color':'var(--vbn-color-text-muted)',\n 'cursor':'pointer'\n\n }\"\n (click)=\"toggleIcon()\"\n >\n <verben-svg\n [icon]=\"icon\"\n [width]=\"20\"\n [height]=\"20\"\n color=\"var(--vbn-color-text)\"\n ></verben-svg>\n <p>{{ textPass }}</p>\n </div> -->\n </div>\n </div>\n\n <div class=\"input-wrapper\" [ngStyle]=\"{ position: 'relative', overflow: 'hidden' }\">\n <div\n *ngIf=\"passwordToggle === true\"\n [ngStyle]=\"{\n\n 'display': 'grid',\n 'align-items':'center',\n 'justify-content':'center',\n 'gap':'4px',\n 'color':'var(--vbn-color-text-muted)',\n 'cursor':'pointer',\n 'position': 'absolute',\n 'right':'0px',\n 'top':'0',\n 'bottom':'0',\n 'background': bgColor,\n 'z-index': '1',\n 'margin': '1px',\n 'padding': '0 8px',\n 'border-radius': borderRadius,\n\n\n\n }\"\n (click)=\"toggleIcon()\"\n >\n <verben-svg\n [icon]=\"icon\"\n [width]=\"20\"\n [height]=\"20\"\n color=\"var(--vbn-color-text)\"\n ></verben-svg>\n </div>\n <input\n [disabled]=\"disabled || disable\"\n [readonly]=\"readOnly\"\n [type]=\"type\"\n [placeholder]=\"placeHolder\"\n [id]=\"label\"\n [attr.minlength]=\"minLength\"\n [attr.maxlength]=\"maxLength\"\n [attr.aria-invalid]=\"isInvalid\"\n [attr.aria-describedby]=\"isInvalid ? label + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n \n [ngStyle]=\"{\n 'background-color': bgColor,\n 'border': isInvalid && errorBorderColor ? '1px solid ' + errorBorderColor : border,\n 'border-radius': borderRadius,\n 'color': textColor,\n 'font-size': fontSize,\n }\"\n [ngClass]=\"{ 'ng-invalid': isInvalid }\"\n class=\"input-field verben-input {{ inputWrapperClass }}\"\n />\n </div>\n\n <div\n *ngIf=\"isInvalid && showErrorMessage\"\n class=\"error-message\"\n [ngStyle]=\"{\n color: errorMessageColor,\n position: errorPosition\n }\"\n >\n {{ errorMessage }}\n </div>\n</div>\n", styles: ["*{font-family:
|
|
194
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: VerbenaInputComponent, selector: "verbena-input", inputs: { disabled: "disabled", label: "label", placeHolder: "placeHolder", required: "required", svgPosition: "svgPosition", minLength: "minLength", maxLength: "maxLength", type: "type", bgColor: "bgColor", border: "border", borderRadius: "borderRadius", textColor: "textColor", value: "value", labelPosition: "labelPosition", labelColor: "labelColor", disable: "disable", readOnly: "readOnly", min: "min", max: "max", showBorder: "showBorder", showErrorMessage: "showErrorMessage", errorMessageColor: "errorMessageColor", errorBorderColor: "errorBorderColor", errorPosition: "errorPosition", svg: "svg", fontSize: "fontSize", svgWidth: "svgWidth", svgHeight: "svgHeight", svgColor: "svgColor", capitalization: "capitalization", inputContainerClass: "inputContainerClass", inputFieldClass: "inputFieldClass", passLength: "passLength", inputWrapperClass: "inputWrapperClass", passwordToggle: "passwordToggle", customErrorMessages: "customErrorMessages", icon: "icon", textPass: "textPass" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div\n class=\"input-container {{ inputContainerClass }}\"\n [ngStyle]=\"{\n display: 'flex',\n 'flex-direction': 'column'\n }\"\n>\n <div\n [ngStyle]=\"{\n display: 'flex',\n 'justify-content': labelPosition,\n color: labelColor,\n padding: '0'\n }\"\n class=\"input-field\"\n >\n <div\n [ngStyle]=\"{\n width: '100%',\n display: 'flex',\n 'justify-content': 'space-between'\n }\"\n >\n <label [for]=\"label\">{{ label }}</label>\n <!-- incase i need it back -->\n <!-- <div *ngIf=\" passwordToggle === true\" [ngStyle]=\"{\n\n 'display': 'flex',\n 'align-item':'center',\n 'gap':'4px',\n 'color':'var(--vbn-color-text-muted)',\n 'cursor':'pointer'\n\n }\"\n (click)=\"toggleIcon()\"\n >\n <verben-svg\n [icon]=\"icon\"\n [width]=\"20\"\n [height]=\"20\"\n color=\"var(--vbn-color-text)\"\n ></verben-svg>\n <p>{{ textPass }}</p>\n </div> -->\n </div>\n </div>\n\n <div class=\"input-wrapper\" [ngStyle]=\"{ position: 'relative', overflow: 'hidden' }\">\n <div\n *ngIf=\"passwordToggle === true\"\n [ngStyle]=\"{\n\n 'display': 'grid',\n 'align-items':'center',\n 'justify-content':'center',\n 'gap':'4px',\n 'color':'var(--vbn-color-text-muted)',\n 'cursor':'pointer',\n 'position': 'absolute',\n 'right':'0px',\n 'top':'0',\n 'bottom':'0',\n 'background': bgColor,\n 'z-index': '1',\n 'margin': '1px',\n 'padding': '0 8px',\n 'border-radius': borderRadius,\n\n\n\n }\"\n (click)=\"toggleIcon()\"\n >\n <verben-svg\n [icon]=\"icon\"\n [width]=\"20\"\n [height]=\"20\"\n color=\"var(--vbn-color-text)\"\n ></verben-svg>\n </div>\n <input\n [disabled]=\"disabled || disable\"\n [readonly]=\"readOnly\"\n [type]=\"type\"\n [placeholder]=\"placeHolder\"\n [id]=\"label\"\n [attr.minlength]=\"minLength\"\n [attr.maxlength]=\"maxLength\"\n [attr.aria-invalid]=\"isInvalid\"\n [attr.aria-describedby]=\"isInvalid ? label + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n \n [ngStyle]=\"{\n 'background-color': bgColor,\n 'border': isInvalid && errorBorderColor ? '1px solid ' + errorBorderColor : border,\n 'border-radius': borderRadius,\n 'color': textColor,\n 'font-size': fontSize,\n }\"\n [ngClass]=\"{ 'ng-invalid': isInvalid }\"\n class=\"input-field verben-input {{ inputWrapperClass }}\"\n />\n </div>\n\n <div\n *ngIf=\"isInvalid && showErrorMessage\"\n class=\"error-message\"\n [ngStyle]=\"{\n color: errorMessageColor,\n position: errorPosition\n }\"\n >\n {{ errorMessage }}\n </div>\n</div>\n", styles: ["*{font-family:var(--vbn-font-family);font-size:var(--vbn-font-size-base)}.w-100{width:100%}.h-100{height:100%}.flex{display:flex}.flex-col{flex-direction:column}.font-bold{font-weight:var(--vbn-font-weight-bold)}.justify-center{justify-content:center}.justify-end{justify-content:end}.align-items-center{align-items:center}.grid{display:grid}.verben-error-message{font-size:var(--vbn-font-size-sm);color:var(--vbn-color-error)}.verben-input{border:1px solid var(--vbn-input-border);outline:none;border-radius:var(--vbn-radius);color:var(--vbn-input-text);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s,outline-color .2s}.verben-input::placeholder{color:var(--vbn-input-placeholder)}.verben-input:hover{border:1px solid var(--vbn-input-border-hover)}.verben-input.disabled{opacity:1;background-color:var(--vbn-input-disabled-bg);pointer-events:none;color:var(--vbn-color-text-muted)}.verben-input:disabled{opacity:1;background-color:var(--vbn-input-disabled-bg);pointer-events:none;color:var(--vbn-color-text-muted)}.verben-input.focused{border-color:var(--vbn-input-border-focus);outline:none}.verben-input:focus{border-color:var(--vbn-input-border-focus);outline:none}.verben-input.ng-invalid{border-color:var(--vbn-color-error)}.verben-button{padding:8px 15px;border-radius:var(--vbn-radius-sm);border:none;text-align:center}.verben-button.primary{background-color:var(--vbn-color-primary)}.verben-button.secondary{background-color:var(--vbn-color-secondary)}.input-container{display:flex;flex-direction:column;gap:5px;position:relative}.input-field{width:100%;display:block;padding:6px}.error-message-text{font-size:12px;margin:0}.error-top{position:absolute;top:0;left:50%}.error-bottom{position:relative;margin-top:5px}.error-left{position:absolute;left:-10px}.error-right{position:absolute;right:-10px;top:0}.input-wrapper{position:relative}.input-field{width:100%;padding:8px}.error-dot{position:absolute;top:0%;right:-10px;transform:translateY(-50%);width:8px;height:8px;border-radius:50%;cursor:pointer}.error-message{position:absolute;z-index:1;left:0;right:0;bottom:-20px}.top-error .error-message{position:absolute!important;top:-20px!important;bottom:initial!important}.left-error{position:absolute!important;bottom:50%!important;right:calc(100% + 10px)!important;width:max-content;left:initial!important;transform:translateY(50%);top:-100px}.right-error .error-message{position:absolute!important;bottom:50%!important;left:calc(100% + 10px)!important;width:max-content;right:initial!important;transform:translateY(50%)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
|
|
195
195
|
}
|
|
196
196
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: VerbenaInputComponent, decorators: [{
|
|
197
197
|
type: Component,
|
|
198
|
-
args: [{ selector: 'verbena-input', template: "<div\n class=\"input-container {{ inputContainerClass }}\"\n [ngStyle]=\"{\n display: 'flex',\n 'flex-direction': 'column'\n }\"\n>\n <div\n [ngStyle]=\"{\n display: 'flex',\n 'justify-content': labelPosition,\n color: labelColor,\n padding: '0'\n }\"\n class=\"input-field\"\n >\n <div\n [ngStyle]=\"{\n width: '100%',\n display: 'flex',\n 'justify-content': 'space-between'\n }\"\n >\n <label [for]=\"label\">{{ label }}</label>\n <!-- incase i need it back -->\n <!-- <div *ngIf=\" passwordToggle === true\" [ngStyle]=\"{\n\n 'display': 'flex',\n 'align-item':'center',\n 'gap':'4px',\n 'color':'var(--vbn-color-text-muted)',\n 'cursor':'pointer'\n\n }\"\n (click)=\"toggleIcon()\"\n >\n <verben-svg\n [icon]=\"icon\"\n [width]=\"20\"\n [height]=\"20\"\n color=\"var(--vbn-color-text)\"\n ></verben-svg>\n <p>{{ textPass }}</p>\n </div> -->\n </div>\n </div>\n\n <div class=\"input-wrapper\" [ngStyle]=\"{ position: 'relative', overflow: 'hidden' }\">\n <div\n *ngIf=\"passwordToggle === true\"\n [ngStyle]=\"{\n\n 'display': 'grid',\n 'align-items':'center',\n 'justify-content':'center',\n 'gap':'4px',\n 'color':'var(--vbn-color-text-muted)',\n 'cursor':'pointer',\n 'position': 'absolute',\n 'right':'0px',\n 'top':'0',\n 'bottom':'0',\n 'background': bgColor,\n 'z-index': '1',\n 'margin': '1px',\n 'padding': '0 8px',\n 'border-radius': borderRadius,\n\n\n\n }\"\n (click)=\"toggleIcon()\"\n >\n <verben-svg\n [icon]=\"icon\"\n [width]=\"20\"\n [height]=\"20\"\n color=\"var(--vbn-color-text)\"\n ></verben-svg>\n </div>\n <input\n [disabled]=\"disabled || disable\"\n [readonly]=\"readOnly\"\n [type]=\"type\"\n [placeholder]=\"placeHolder\"\n [id]=\"label\"\n [attr.minlength]=\"minLength\"\n [attr.maxlength]=\"maxLength\"\n [attr.aria-invalid]=\"isInvalid\"\n [attr.aria-describedby]=\"isInvalid ? label + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n \n [ngStyle]=\"{\n 'background-color': bgColor,\n 'border': isInvalid && errorBorderColor ? '1px solid ' + errorBorderColor : border,\n 'border-radius': borderRadius,\n 'color': textColor,\n 'font-size': fontSize,\n }\"\n [ngClass]=\"{ 'ng-invalid': isInvalid }\"\n class=\"input-field verben-input {{ inputWrapperClass }}\"\n />\n </div>\n\n <div\n *ngIf=\"isInvalid && showErrorMessage\"\n class=\"error-message\"\n [ngStyle]=\"{\n color: errorMessageColor,\n position: errorPosition\n }\"\n >\n {{ errorMessage }}\n </div>\n</div>\n", styles: ["*{font-family:
|
|
198
|
+
args: [{ selector: 'verbena-input', template: "<div\n class=\"input-container {{ inputContainerClass }}\"\n [ngStyle]=\"{\n display: 'flex',\n 'flex-direction': 'column'\n }\"\n>\n <div\n [ngStyle]=\"{\n display: 'flex',\n 'justify-content': labelPosition,\n color: labelColor,\n padding: '0'\n }\"\n class=\"input-field\"\n >\n <div\n [ngStyle]=\"{\n width: '100%',\n display: 'flex',\n 'justify-content': 'space-between'\n }\"\n >\n <label [for]=\"label\">{{ label }}</label>\n <!-- incase i need it back -->\n <!-- <div *ngIf=\" passwordToggle === true\" [ngStyle]=\"{\n\n 'display': 'flex',\n 'align-item':'center',\n 'gap':'4px',\n 'color':'var(--vbn-color-text-muted)',\n 'cursor':'pointer'\n\n }\"\n (click)=\"toggleIcon()\"\n >\n <verben-svg\n [icon]=\"icon\"\n [width]=\"20\"\n [height]=\"20\"\n color=\"var(--vbn-color-text)\"\n ></verben-svg>\n <p>{{ textPass }}</p>\n </div> -->\n </div>\n </div>\n\n <div class=\"input-wrapper\" [ngStyle]=\"{ position: 'relative', overflow: 'hidden' }\">\n <div\n *ngIf=\"passwordToggle === true\"\n [ngStyle]=\"{\n\n 'display': 'grid',\n 'align-items':'center',\n 'justify-content':'center',\n 'gap':'4px',\n 'color':'var(--vbn-color-text-muted)',\n 'cursor':'pointer',\n 'position': 'absolute',\n 'right':'0px',\n 'top':'0',\n 'bottom':'0',\n 'background': bgColor,\n 'z-index': '1',\n 'margin': '1px',\n 'padding': '0 8px',\n 'border-radius': borderRadius,\n\n\n\n }\"\n (click)=\"toggleIcon()\"\n >\n <verben-svg\n [icon]=\"icon\"\n [width]=\"20\"\n [height]=\"20\"\n color=\"var(--vbn-color-text)\"\n ></verben-svg>\n </div>\n <input\n [disabled]=\"disabled || disable\"\n [readonly]=\"readOnly\"\n [type]=\"type\"\n [placeholder]=\"placeHolder\"\n [id]=\"label\"\n [attr.minlength]=\"minLength\"\n [attr.maxlength]=\"maxLength\"\n [attr.aria-invalid]=\"isInvalid\"\n [attr.aria-describedby]=\"isInvalid ? label + '-error' : null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n \n [ngStyle]=\"{\n 'background-color': bgColor,\n 'border': isInvalid && errorBorderColor ? '1px solid ' + errorBorderColor : border,\n 'border-radius': borderRadius,\n 'color': textColor,\n 'font-size': fontSize,\n }\"\n [ngClass]=\"{ 'ng-invalid': isInvalid }\"\n class=\"input-field verben-input {{ inputWrapperClass }}\"\n />\n </div>\n\n <div\n *ngIf=\"isInvalid && showErrorMessage\"\n class=\"error-message\"\n [ngStyle]=\"{\n color: errorMessageColor,\n position: errorPosition\n }\"\n >\n {{ errorMessage }}\n </div>\n</div>\n", styles: ["*{font-family:var(--vbn-font-family);font-size:var(--vbn-font-size-base)}.w-100{width:100%}.h-100{height:100%}.flex{display:flex}.flex-col{flex-direction:column}.font-bold{font-weight:var(--vbn-font-weight-bold)}.justify-center{justify-content:center}.justify-end{justify-content:end}.align-items-center{align-items:center}.grid{display:grid}.verben-error-message{font-size:var(--vbn-font-size-sm);color:var(--vbn-color-error)}.verben-input{border:1px solid var(--vbn-input-border);outline:none;border-radius:var(--vbn-radius);color:var(--vbn-input-text);transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s,outline-color .2s}.verben-input::placeholder{color:var(--vbn-input-placeholder)}.verben-input:hover{border:1px solid var(--vbn-input-border-hover)}.verben-input.disabled{opacity:1;background-color:var(--vbn-input-disabled-bg);pointer-events:none;color:var(--vbn-color-text-muted)}.verben-input:disabled{opacity:1;background-color:var(--vbn-input-disabled-bg);pointer-events:none;color:var(--vbn-color-text-muted)}.verben-input.focused{border-color:var(--vbn-input-border-focus);outline:none}.verben-input:focus{border-color:var(--vbn-input-border-focus);outline:none}.verben-input.ng-invalid{border-color:var(--vbn-color-error)}.verben-button{padding:8px 15px;border-radius:var(--vbn-radius-sm);border:none;text-align:center}.verben-button.primary{background-color:var(--vbn-color-primary)}.verben-button.secondary{background-color:var(--vbn-color-secondary)}.input-container{display:flex;flex-direction:column;gap:5px;position:relative}.input-field{width:100%;display:block;padding:6px}.error-message-text{font-size:12px;margin:0}.error-top{position:absolute;top:0;left:50%}.error-bottom{position:relative;margin-top:5px}.error-left{position:absolute;left:-10px}.error-right{position:absolute;right:-10px;top:0}.input-wrapper{position:relative}.input-field{width:100%;padding:8px}.error-dot{position:absolute;top:0%;right:-10px;transform:translateY(-50%);width:8px;height:8px;border-radius:50%;cursor:pointer}.error-message{position:absolute;z-index:1;left:0;right:0;bottom:-20px}.top-error .error-message{position:absolute!important;top:-20px!important;bottom:initial!important}.left-error{position:absolute!important;bottom:50%!important;right:calc(100% + 10px)!important;width:max-content;left:initial!important;transform:translateY(50%);top:-100px}.right-error .error-message{position:absolute!important;bottom:50%!important;left:calc(100% + 10px)!important;width:max-content;right:initial!important;transform:translateY(50%)}\n"] }]
|
|
199
199
|
}], ctorParameters: () => [{ type: i2.NgControl, decorators: [{
|
|
200
200
|
type: Optional
|
|
201
201
|
}, {
|