@elderbyte/ngx-starter 18.13.0-beta.0 → 18.13.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/_index.scss +6 -18
- package/esm2022/lib/common/exceptions/public_api.mjs +2 -0
- package/esm2022/lib/common/exceptions/unreachable-case-error.mjs +6 -0
- package/esm2022/lib/common/public_api.mjs +2 -1
- package/esm2022/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +3 -3
- package/esm2022/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +3 -3
- package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox-controller.mjs +97 -0
- package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox.directive.mjs +50 -0
- package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox-controller.mjs +102 -0
- package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox.directive.mjs +50 -0
- package/esm2022/lib/components/forms/directives/elder-forms-directives.module.mjs +9 -3
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.mjs +5 -12
- package/esm2022/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.mjs +3 -3
- package/esm2022/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.mjs +3 -3
- package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.mjs +3 -3
- package/esm2022/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +3 -3
- package/esm2022/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +3 -3
- package/esm2022/lib/components/select/single/elder-select/elder-select.component.mjs +5 -3
- package/esm2022/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +3 -3
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker.component.mjs +3 -3
- package/fesm2022/elderbyte-ngx-starter.mjs +343 -174
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/exceptions/public_api.d.ts +1 -0
- package/lib/common/exceptions/unreachable-case-error.d.ts +4 -0
- package/lib/common/public_api.d.ts +1 -0
- package/lib/components/forms/directives/checkbox/elder-single-state-checkbox-controller.d.ts +46 -0
- package/lib/components/forms/directives/checkbox/elder-single-state-checkbox.directive.d.ts +34 -0
- package/lib/components/forms/directives/checkbox/elder-triple-state-checkbox-controller.d.ts +47 -0
- package/lib/components/forms/directives/{elder-triple-state-checkbox.directive.d.ts → checkbox/elder-triple-state-checkbox.directive.d.ts} +10 -23
- package/lib/components/forms/directives/elder-forms-directives.module.d.ts +9 -7
- package/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.d.ts +1 -2
- package/package.json +1 -1
- package/src/lib/components/button-group/elder-button-group/elder-button-group.component.scss +7 -1
- package/src/lib/components/card-organizer/card-stack/elder-card-stack.component.scss +14 -3
- package/src/lib/components/cards/elder-card/elder-card.component.scss +8 -2
- package/src/lib/components/chips/_elder-chip-theme.scss +12 -101
- package/src/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.scss +6 -0
- package/src/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.scss +0 -11
- package/src/lib/components/data-view/grid/elder-grid/elder-grid.component.scss +22 -15
- package/src/lib/components/data-view/table/elder-table/elder-table.component.scss +18 -11
- package/src/lib/components/errors/exception-detail/elder-exception-detail.component.scss +9 -2
- package/src/lib/components/expand-toggle-button/elder-expand-toggle-button.component.scss +8 -2
- package/src/lib/components/files/drag-n-drop/elder-drop-zone/elder-drop-zone.component.scss +10 -7
- package/src/lib/components/iframes/iframe-host/iframe-host.component.scss +4 -0
- package/src/lib/components/navigation/nav/_elder-nav-theme.scss +24 -12
- package/src/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.scss +4 -1
- package/src/lib/components/panels/card-panel/elder-card-panel.component.scss +12 -3
- package/src/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.scss +12 -4
- package/src/lib/components/panels/flat/_elder-panel-theme.scss +9 -26
- package/src/lib/components/select/_elder-select-base.scss +9 -1
- package/src/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.scss +4 -1
- package/src/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.scss +39 -10
- package/src/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.scss +52 -19
- package/src/lib/components/select/single/elder-select/elder-select.component.scss +40 -24
- package/src/lib/components/time/_elder-time-input.theme.scss +3 -0
- package/theming/_elder-common.scss +399 -6
- package/theming/_elder-defaults.scss +7 -3
- package/theming/_elder-mdc-support.scss +142 -59
- package/theming/_elder-palettes.scss +148 -0
- package/theming/_elder-scrollbar-theme.scss +12 -2
- package/theming/_elder-style-fixes.scss +109 -41
- package/theming/_elder-theme.scss +51 -0
- package/theming/_elder-toast-theme.scss +46 -0
- package/theming/_elder-typography-utils.scss +11 -0
- package/theming/_mat-icon-button-size.scss +34 -0
- package/theming/_mixins.scss +0 -35
- package/esm2022/lib/components/forms/directives/elder-triple-state-checkbox.directive.mjs +0 -120
- package/src/lib/components/chips/_elder-chip-theme-old.scss +0 -122
- package/theming/_elder-color-variants.scss +0 -26
- package/theming/_elder-form.scss +0 -308
- package/theming/_elder-layout-system.scss +0 -242
- package/theming/_elder-m3-theme.scss +0 -754
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
@use '@angular/material' as mat;
|
|
2
|
+
@use 'sass:map';
|
|
3
|
+
|
|
4
|
+
/***************************************************************************
|
|
5
|
+
* *
|
|
6
|
+
* Overriding Material Base Variables *
|
|
7
|
+
* *
|
|
8
|
+
**************************************************************************/
|
|
9
|
+
|
|
10
|
+
$dark-primary-text: rgba(black, 0.87);
|
|
11
|
+
$light-primary-text: white;
|
|
12
|
+
|
|
13
|
+
/***************************************************************************
|
|
14
|
+
* *
|
|
15
|
+
* Material Color Palettes *
|
|
16
|
+
* *
|
|
17
|
+
**************************************************************************/
|
|
18
|
+
|
|
19
|
+
// ElderByte Theme
|
|
20
|
+
|
|
21
|
+
$elder-blue: (
|
|
22
|
+
50: #dfe3e8,
|
|
23
|
+
100: #b3bcc8,
|
|
24
|
+
200: #8593a7,
|
|
25
|
+
300: #546883,
|
|
26
|
+
400: #2f4869,
|
|
27
|
+
500: #0b284f,
|
|
28
|
+
// Official Main Color tone: #002852 (#0B284F)
|
|
29
|
+
600: #0a2448,
|
|
30
|
+
700: #092040,
|
|
31
|
+
800: #081c38,
|
|
32
|
+
900: #061529,
|
|
33
|
+
A100: #809ec5,
|
|
34
|
+
A200: #5179bf,
|
|
35
|
+
A400: #004390,
|
|
36
|
+
A700: #00006b,
|
|
37
|
+
contrast: (
|
|
38
|
+
50: $dark-primary-text,
|
|
39
|
+
100: $dark-primary-text,
|
|
40
|
+
200: $dark-primary-text,
|
|
41
|
+
300: $dark-primary-text,
|
|
42
|
+
400: $light-primary-text,
|
|
43
|
+
500: $light-primary-text,
|
|
44
|
+
600: $light-primary-text,
|
|
45
|
+
700: $light-primary-text,
|
|
46
|
+
800: $light-primary-text,
|
|
47
|
+
900: $light-primary-text,
|
|
48
|
+
A100: $light-primary-text,
|
|
49
|
+
A200: $light-primary-text,
|
|
50
|
+
A400: $light-primary-text,
|
|
51
|
+
A700: $light-primary-text,
|
|
52
|
+
),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
$elder-gold: (
|
|
56
|
+
50: #f6f3ec,
|
|
57
|
+
100: #e8e1d1,
|
|
58
|
+
200: #dacfb4,
|
|
59
|
+
300: #ccbc96,
|
|
60
|
+
400: #c1ad80,
|
|
61
|
+
500: #b69f6a,
|
|
62
|
+
// Official ElderByte Accent tone
|
|
63
|
+
600: #a69160,
|
|
64
|
+
700: #948156,
|
|
65
|
+
800: #81714b,
|
|
66
|
+
900: #5f5337,
|
|
67
|
+
A100: #e1d1a9,
|
|
68
|
+
A200: #efd08f,
|
|
69
|
+
A400: #dbbe7a,
|
|
70
|
+
A700: #af9144,
|
|
71
|
+
contrast: (
|
|
72
|
+
50: $dark-primary-text,
|
|
73
|
+
100: $dark-primary-text,
|
|
74
|
+
200: $dark-primary-text,
|
|
75
|
+
300: $dark-primary-text,
|
|
76
|
+
400: $dark-primary-text,
|
|
77
|
+
500: $dark-primary-text,
|
|
78
|
+
600: $dark-primary-text,
|
|
79
|
+
700: $dark-primary-text,
|
|
80
|
+
800: $dark-primary-text,
|
|
81
|
+
900: $dark-primary-text,
|
|
82
|
+
A100: $dark-primary-text,
|
|
83
|
+
A200: $dark-primary-text,
|
|
84
|
+
A400: $dark-primary-text,
|
|
85
|
+
A700: $dark-primary-text,
|
|
86
|
+
),
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
/***************************************************************************
|
|
90
|
+
* *
|
|
91
|
+
* Dark Theme Palettes *
|
|
92
|
+
* *
|
|
93
|
+
**************************************************************************/
|
|
94
|
+
|
|
95
|
+
$grey-palette: mat.$m2-grey-palette;
|
|
96
|
+
$light-primary-text: rgba(white, 0.87);
|
|
97
|
+
$light-secondary-text: rgba(white, 0.4);
|
|
98
|
+
$light-disabled-text: rgba(white, 0.38);
|
|
99
|
+
$light-dividers: rgba(white, 0.12);
|
|
100
|
+
$light-focused: rgba(white, 0.12);
|
|
101
|
+
|
|
102
|
+
$dark-background-dp-01: #1f1f1f; // 5%
|
|
103
|
+
$dark-background-dp-02: #222222; // 7%
|
|
104
|
+
$dark-background-dp-03: #262626; // 8%
|
|
105
|
+
$dark-background-dp-04: #272727; // 9%
|
|
106
|
+
$dark-background-dp-06: #2c2c2c; // 11%
|
|
107
|
+
$dark-background-dp-08: #2d2d2d; // 12%
|
|
108
|
+
$dark-background-dp-12: #333333; // 14%
|
|
109
|
+
|
|
110
|
+
// Background palette for dark themes.
|
|
111
|
+
$elder-dark-theme-background: (
|
|
112
|
+
status-bar: black,
|
|
113
|
+
app-bar: $dark-background-dp-01,
|
|
114
|
+
background: #121212,
|
|
115
|
+
// #121212
|
|
116
|
+
hover: rgba(white, 0.04),
|
|
117
|
+
card: $dark-background-dp-03,
|
|
118
|
+
dialog: $dark-background-dp-12,
|
|
119
|
+
// $my-dark-dp-06
|
|
120
|
+
disabled-button: rgba(white, 0.12),
|
|
121
|
+
raised-button: map.get($grey-palette, 800),
|
|
122
|
+
focused-button: $light-focused,
|
|
123
|
+
selected-button: map.get($grey-palette, 900),
|
|
124
|
+
selected-disabled-button: map.get($grey-palette, 800),
|
|
125
|
+
disabled-button-toggle: black,
|
|
126
|
+
unselected-chip: map.get($grey-palette, 800),
|
|
127
|
+
disabled-list-option: rgba(white, 0.12),
|
|
128
|
+
tooltip: map.get($grey-palette, 800),
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
// Foreground palette for dark themes.
|
|
132
|
+
$elder-dark-theme-foreground: (
|
|
133
|
+
base: rgba(white, 0.87),
|
|
134
|
+
divider: $light-dividers,
|
|
135
|
+
dividers: $light-dividers,
|
|
136
|
+
disabled: $light-disabled-text,
|
|
137
|
+
disabled-button: rgba(white, 0.38),
|
|
138
|
+
disabled-text: $light-disabled-text,
|
|
139
|
+
elevation: black,
|
|
140
|
+
hint-text: $light-disabled-text,
|
|
141
|
+
secondary-text: $light-secondary-text,
|
|
142
|
+
icon: rgba(white, 0.87),
|
|
143
|
+
icons: rgba(white, 0.87),
|
|
144
|
+
text: rgba(white, 0.87),
|
|
145
|
+
slider-min: rgba(white, 0.87),
|
|
146
|
+
slider-off: rgba(white, 0.38),
|
|
147
|
+
slider-off-active: rgba(white, 0.38),
|
|
148
|
+
);
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
$scrollbarStyling: map.get($theme, elder, scrollbar-styling);
|
|
10
10
|
|
|
11
11
|
@if $scrollbarStyling {
|
|
12
|
+
$primary: map-get($theme, primary);
|
|
13
|
+
$accent: map-get($theme, accent);
|
|
14
|
+
$warn: map-get($theme, warn);
|
|
15
|
+
$background: map-get($theme, background);
|
|
16
|
+
$foreground: map-get($theme, foreground);
|
|
12
17
|
$commonSizes: map.get($theme, elder, common-sizes);
|
|
13
18
|
|
|
14
19
|
@include scrollbar-width(map.get($commonSizes, sm)); // default
|
|
@@ -37,15 +42,20 @@
|
|
|
37
42
|
@include scrollbar-width(map.get($commonSizes, xxl));
|
|
38
43
|
}
|
|
39
44
|
|
|
45
|
+
/* Track */
|
|
46
|
+
::-webkit-scrollbar-track {
|
|
47
|
+
// background: mat.get-color-from-palette($background, background);
|
|
48
|
+
}
|
|
49
|
+
|
|
40
50
|
/* Handle */
|
|
41
51
|
::-webkit-scrollbar-thumb {
|
|
42
|
-
background:
|
|
52
|
+
background: mat.m2-get-color-from-palette($primary);
|
|
43
53
|
border-radius: 5px;
|
|
44
54
|
}
|
|
45
55
|
|
|
46
56
|
/* Handle on hover */
|
|
47
57
|
::-webkit-scrollbar-thumb:hover {
|
|
48
|
-
background:
|
|
58
|
+
background: mat.m2-get-color-from-palette($primary, 300);
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
61
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
@use '@angular/material' as mat;
|
|
2
|
-
@use '
|
|
2
|
+
@use 'mixins' as mixins;
|
|
3
3
|
@use 'sass:map';
|
|
4
4
|
|
|
5
5
|
@mixin elder-style-fixes($theme) {
|
|
6
6
|
@include _ng-style-fixes;
|
|
7
7
|
@include _mat-style-fixes($theme);
|
|
8
|
-
@include _mat3-fixes($theme);
|
|
9
8
|
|
|
10
9
|
// elder custom icons fill color
|
|
11
10
|
.mat-icon.svg-icon-inherit-color svg * {
|
|
@@ -91,6 +90,88 @@
|
|
|
91
90
|
z-index: 1;
|
|
92
91
|
}
|
|
93
92
|
|
|
93
|
+
.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper {
|
|
94
|
+
padding-left: 0 !important;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper {
|
|
98
|
+
padding-right: 0 !important;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.mat-mdc-form-field:not(.mat-mdc-form-field.elder-dense) {
|
|
102
|
+
$density: map-get($theme, elder, density, form-field);
|
|
103
|
+
|
|
104
|
+
/******************************
|
|
105
|
+
Fix big paddings for dense form fields
|
|
106
|
+
*******************************/
|
|
107
|
+
|
|
108
|
+
.mat-mdc-text-field-wrapper {
|
|
109
|
+
padding-left: calc-side-paddings($density);
|
|
110
|
+
padding-right: calc-side-paddings($density);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/******************************
|
|
114
|
+
Fix icon size and placement in mat label
|
|
115
|
+
*******************************/
|
|
116
|
+
|
|
117
|
+
@include mixins.form-field-icons($density);
|
|
118
|
+
|
|
119
|
+
/******************************
|
|
120
|
+
Fix text and hover placement of small filled form fields
|
|
121
|
+
*******************************/
|
|
122
|
+
|
|
123
|
+
$mat-mdc-form-field-label-transform: 0.75;
|
|
124
|
+
$mat-mdc-form-field-label-offset-x: -16px;
|
|
125
|
+
$form-field-density: map-get($theme, elder, density, form-field);
|
|
126
|
+
|
|
127
|
+
@if $form-field-density < -1 {
|
|
128
|
+
.mdc-text-field--filled {
|
|
129
|
+
.mdc-floating-label--float-above {
|
|
130
|
+
transform: var(
|
|
131
|
+
$mat-mdc-form-field-label-transform,
|
|
132
|
+
translateY(-50%)
|
|
133
|
+
translateX(calc(1 * (44px + var($mat-mdc-form-field-label-offset-x, 0px))))
|
|
134
|
+
) !important;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.mat-mdc-form-field-infix {
|
|
138
|
+
padding-top: calc-padding-top-form-field-inflix($form-field-density) !important;
|
|
139
|
+
padding-bottom: 2px !important;
|
|
140
|
+
min-height: 40px; // (24 + 2*16) = 56px by default
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/******************************
|
|
146
|
+
Material Form Field Label stealing clicks
|
|
147
|
+
*******************************/
|
|
148
|
+
|
|
149
|
+
.mat-mdc-floating-label.mdc-floating-label {
|
|
150
|
+
pointer-events: none !important;
|
|
151
|
+
|
|
152
|
+
mat-label {
|
|
153
|
+
pointer-events: none !important;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.mdc-notched-outline__notch {
|
|
158
|
+
pointer-events: none !important;
|
|
159
|
+
|
|
160
|
+
.mdc-floating-label {
|
|
161
|
+
pointer-events: none !important;
|
|
162
|
+
|
|
163
|
+
mat-label {
|
|
164
|
+
pointer-events: none !important;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.mat-mdc-form-field-error-wrapper {
|
|
170
|
+
display: flex;
|
|
171
|
+
padding-right: 0;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
94
175
|
/******************************
|
|
95
176
|
Material chip make regular chips clickable when applying this class
|
|
96
177
|
*******************************/
|
|
@@ -100,49 +181,36 @@
|
|
|
100
181
|
cursor: pointer;
|
|
101
182
|
}
|
|
102
183
|
}
|
|
184
|
+
}
|
|
103
185
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
*******************************/
|
|
107
|
-
.elder-primary-text {
|
|
108
|
-
color: var(--md-sys-color-primary);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
.elder-accent-text {
|
|
112
|
-
color: var(--md-sys-color-tertiary);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.elder-warn-text {
|
|
116
|
-
color: var(--md-sys-color-error);
|
|
117
|
-
}
|
|
186
|
+
.mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-floating-label {
|
|
187
|
+
display: block !important;
|
|
118
188
|
}
|
|
119
189
|
|
|
120
|
-
@
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
--mat-toolbar-container-text-color: var(--md-sys-color-on-tertiary);
|
|
138
|
-
--mat-toolbar-container-background-color: var(--md-sys-color-tertiary);
|
|
139
|
-
.mat-mdc-icon-button {
|
|
140
|
-
color: var(--md-sys-color-on-tertiary);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
190
|
+
@function calc-side-paddings($density) {
|
|
191
|
+
$paddingDensityNeg4: 8px;
|
|
192
|
+
$paddingDensityNeg3: 10px;
|
|
193
|
+
$paddingDensityNeg2: 12px;
|
|
194
|
+
$paddingDensityNeg1: 14px;
|
|
195
|
+
$paddingDensity0: 16px;
|
|
196
|
+
|
|
197
|
+
@if $density == -4 {
|
|
198
|
+
@return $paddingDensityNeg4;
|
|
199
|
+
} @else if $density == -3 {
|
|
200
|
+
@return $paddingDensityNeg3;
|
|
201
|
+
} @else if $density == -2 {
|
|
202
|
+
@return $paddingDensityNeg2;
|
|
203
|
+
} @else if $density == -1 {
|
|
204
|
+
@return $paddingDensityNeg1;
|
|
205
|
+
} @else if $density == 0 {
|
|
206
|
+
@return $paddingDensity0;
|
|
143
207
|
}
|
|
208
|
+
}
|
|
144
209
|
|
|
145
|
-
|
|
146
|
-
|
|
210
|
+
@function calc-padding-top-form-field-inflix($density) {
|
|
211
|
+
@if $density > -3 {
|
|
212
|
+
@return 20px;
|
|
213
|
+
} @else {
|
|
214
|
+
@return 14px;
|
|
147
215
|
}
|
|
148
216
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
@use '@angular/material' as mat;
|
|
2
|
+
@use 'sass:map';
|
|
3
|
+
@use 'elder-palettes' as palettes;
|
|
4
|
+
|
|
5
|
+
/***************************************************************************
|
|
6
|
+
* *
|
|
7
|
+
* Public API *
|
|
8
|
+
* *
|
|
9
|
+
**************************************************************************/
|
|
10
|
+
|
|
11
|
+
@function define-dark-elder-theme($config) {
|
|
12
|
+
$result: $config;
|
|
13
|
+
@if map.get($config, color) {
|
|
14
|
+
$color-settings: map.get($config, color);
|
|
15
|
+
$primary: map.get($color-settings, primary);
|
|
16
|
+
$accent: map.get($color-settings, accent);
|
|
17
|
+
$warn: map.get($color-settings, warn);
|
|
18
|
+
$result: map.merge(
|
|
19
|
+
$config,
|
|
20
|
+
(
|
|
21
|
+
color: _mat-create-dark-color-config($primary, $accent, $warn),
|
|
22
|
+
)
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
@return _create-backwards-compatibility-theme($result);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/***************************************************************************
|
|
29
|
+
* *
|
|
30
|
+
* Private functions *
|
|
31
|
+
* *
|
|
32
|
+
**************************************************************************/
|
|
33
|
+
|
|
34
|
+
@function _mat-create-dark-color-config($primary, $accent, $warn: null) {
|
|
35
|
+
@return (
|
|
36
|
+
primary: $primary,
|
|
37
|
+
accent: $accent,
|
|
38
|
+
warn: if($warn != null, $warn, mat.m2-define-palette(mat.$m2-red-palette)),
|
|
39
|
+
is-dark: true,
|
|
40
|
+
foreground: palettes.$elder-dark-theme-foreground,
|
|
41
|
+
background: palettes.$elder-dark-theme-background
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@function _create-backwards-compatibility-theme($theme) {
|
|
46
|
+
@if not map.get($theme, color) {
|
|
47
|
+
@return $theme;
|
|
48
|
+
}
|
|
49
|
+
$color: map.get($theme, color);
|
|
50
|
+
@return map.merge($theme, $color);
|
|
51
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
@use '@angular/material' as mat;
|
|
2
|
+
|
|
3
|
+
@mixin theme($theme) {
|
|
4
|
+
$primary: map-get($theme, primary);
|
|
5
|
+
$accent: map-get($theme, accent);
|
|
6
|
+
$warn: map-get($theme, warn);
|
|
7
|
+
$background: map-get($theme, background);
|
|
8
|
+
$foreground: map-get($theme, foreground);
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
.elder-primary-toast {
|
|
12
|
+
background: mat.get-color-from-palette($background, dialog);
|
|
13
|
+
color: mat.get-color-from-palette($primary);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.elder-accent-toast {
|
|
17
|
+
background: mat.get-color-from-palette($background, dialog);
|
|
18
|
+
color: mat.get-color-from-palette($accent);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.elder-success-toast {
|
|
22
|
+
background: mat.get-color-from-palette($background, dialog);
|
|
23
|
+
color: mat.get-color-from-palette($primary);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.elder-warning-toast {
|
|
27
|
+
background: mat.get-color-from-palette($background, dialog);
|
|
28
|
+
color: mat.get-color-from-palette($accent);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.elder-error-toast {
|
|
32
|
+
background-color: mat.get-color-from-palette($warn);
|
|
33
|
+
}*/
|
|
34
|
+
|
|
35
|
+
.elder-primary-text {
|
|
36
|
+
color: mat.m2-get-color-from-palette($primary);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.elder-accent-text {
|
|
40
|
+
color: mat.m2-get-color-from-palette($accent);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.elder-warn-text {
|
|
44
|
+
color: mat.m2-get-color-from-palette($warn);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -10,3 +10,14 @@
|
|
|
10
10
|
@function coerce-unitless-to-em($value) {
|
|
11
11
|
@return if(math.is-unitless($value), 1em * $value, $value);
|
|
12
12
|
}
|
|
13
|
+
|
|
14
|
+
@function get-typography-config($config) {
|
|
15
|
+
$typography: mat.m2-get-typography-config($config);
|
|
16
|
+
|
|
17
|
+
// If no actual typography configuration has been specified, create a default one.
|
|
18
|
+
@if not $typography {
|
|
19
|
+
$typography: mat.m2-define-typography-config();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@return $typography;
|
|
23
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Based on https://github.com/btxtiger/mat-icon-button-sizes
|
|
3
|
+
* The default factor between button and icon size is *= 0.6
|
|
4
|
+
*/
|
|
5
|
+
@mixin matIconButtonSize($buttonSize, $iconSize) {
|
|
6
|
+
width: $buttonSize !important;
|
|
7
|
+
height: $buttonSize !important;
|
|
8
|
+
padding: 0px !important;
|
|
9
|
+
display: inline-flex !important;
|
|
10
|
+
align-items: center;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
|
|
13
|
+
.mat-icon,
|
|
14
|
+
img {
|
|
15
|
+
width: $iconSize;
|
|
16
|
+
height: $iconSize;
|
|
17
|
+
font-size: $iconSize;
|
|
18
|
+
|
|
19
|
+
svg {
|
|
20
|
+
width: $iconSize;
|
|
21
|
+
height: $iconSize;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
svg {
|
|
26
|
+
width: $iconSize;
|
|
27
|
+
height: $iconSize;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.mat-mdc-button-touch-target {
|
|
31
|
+
width: $buttonSize !important;
|
|
32
|
+
height: $buttonSize !important;
|
|
33
|
+
}
|
|
34
|
+
}
|
package/theming/_mixins.scss
CHANGED
|
@@ -50,38 +50,3 @@
|
|
|
50
50
|
@return 40px;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Based on https://github.com/btxtiger/mat-icon-button-sizes
|
|
56
|
-
* The default factor between button and icon size is *= 0.6
|
|
57
|
-
*/
|
|
58
|
-
@mixin matIconButtonSize($buttonSize, $iconSize) {
|
|
59
|
-
width: $buttonSize !important;
|
|
60
|
-
height: $buttonSize !important;
|
|
61
|
-
padding: 0 !important;
|
|
62
|
-
display: inline-flex !important;
|
|
63
|
-
align-items: center;
|
|
64
|
-
justify-content: center;
|
|
65
|
-
|
|
66
|
-
.mat-icon,
|
|
67
|
-
img {
|
|
68
|
-
width: $iconSize;
|
|
69
|
-
height: $iconSize;
|
|
70
|
-
font-size: $iconSize;
|
|
71
|
-
|
|
72
|
-
svg {
|
|
73
|
-
width: $iconSize;
|
|
74
|
-
height: $iconSize;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
svg {
|
|
79
|
-
width: $iconSize;
|
|
80
|
-
height: $iconSize;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.mat-mdc-button-touch-target {
|
|
84
|
-
width: $buttonSize !important;
|
|
85
|
-
height: $buttonSize !important;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { Directive, Optional } from '@angular/core';
|
|
2
|
-
import { ParseUtil } from '../../../common/utils/parse-util';
|
|
3
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/material/checkbox";
|
|
6
|
-
import * as i2 from "@angular/forms";
|
|
7
|
-
export var ElderCheckboxState;
|
|
8
|
-
(function (ElderCheckboxState) {
|
|
9
|
-
ElderCheckboxState[ElderCheckboxState["UNCHECKED"] = 0] = "UNCHECKED";
|
|
10
|
-
ElderCheckboxState[ElderCheckboxState["CHECKED"] = 1] = "CHECKED";
|
|
11
|
-
ElderCheckboxState[ElderCheckboxState["INDETERMINATE"] = 2] = "INDETERMINATE";
|
|
12
|
-
})(ElderCheckboxState || (ElderCheckboxState = {}));
|
|
13
|
-
export class ElderTripleStateCheckboxDirective {
|
|
14
|
-
/***************************************************************************
|
|
15
|
-
* *
|
|
16
|
-
* Constructor *
|
|
17
|
-
* *
|
|
18
|
-
**************************************************************************/
|
|
19
|
-
constructor(checkbox, ngModel) {
|
|
20
|
-
this.checkbox = checkbox;
|
|
21
|
-
this.ngModel = ngModel;
|
|
22
|
-
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
23
|
-
}
|
|
24
|
-
/***************************************************************************
|
|
25
|
-
* *
|
|
26
|
-
* Life Cycle *
|
|
27
|
-
* *
|
|
28
|
-
**************************************************************************/
|
|
29
|
-
ngOnInit() {
|
|
30
|
-
this.state = this.state;
|
|
31
|
-
this.checkbox.registerOnChange(() => this.toggleNextState());
|
|
32
|
-
this.ngModel.valueChanges.subscribe((value) => (this.state = this.controlValueToState(value)));
|
|
33
|
-
}
|
|
34
|
-
/***************************************************************************
|
|
35
|
-
* *
|
|
36
|
-
* Properties *
|
|
37
|
-
* *
|
|
38
|
-
**************************************************************************/
|
|
39
|
-
get state() {
|
|
40
|
-
return this.controlValueToState(this.readControlValue());
|
|
41
|
-
}
|
|
42
|
-
set state(newState) {
|
|
43
|
-
switch (newState) {
|
|
44
|
-
case ElderCheckboxState.UNCHECKED:
|
|
45
|
-
this.setCheckboxUnchecked();
|
|
46
|
-
break;
|
|
47
|
-
case ElderCheckboxState.CHECKED:
|
|
48
|
-
this.setCheckboxChecked();
|
|
49
|
-
break;
|
|
50
|
-
case ElderCheckboxState.INDETERMINATE:
|
|
51
|
-
this.setCheckboxIndeterminate();
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/***************************************************************************
|
|
56
|
-
* *
|
|
57
|
-
* Private methods *
|
|
58
|
-
* *
|
|
59
|
-
**************************************************************************/
|
|
60
|
-
controlValueToState(value) {
|
|
61
|
-
switch (ParseUtil.parseBoolOrUndefined(value)) {
|
|
62
|
-
case false:
|
|
63
|
-
return ElderCheckboxState.UNCHECKED;
|
|
64
|
-
case true:
|
|
65
|
-
return ElderCheckboxState.CHECKED;
|
|
66
|
-
case undefined:
|
|
67
|
-
return ElderCheckboxState.INDETERMINATE;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
toggleNextState() {
|
|
71
|
-
this.state = (this.state + 1) % 3;
|
|
72
|
-
}
|
|
73
|
-
setCheckboxUnchecked() {
|
|
74
|
-
this.checkbox.value = 'false';
|
|
75
|
-
this.checkbox.checked = false;
|
|
76
|
-
this.checkbox.indeterminate = false;
|
|
77
|
-
this.updateModelIfPresent(false);
|
|
78
|
-
}
|
|
79
|
-
setCheckboxChecked() {
|
|
80
|
-
this.checkbox.value = 'true';
|
|
81
|
-
this.checkbox.checked = true;
|
|
82
|
-
this.checkbox.indeterminate = false;
|
|
83
|
-
this.updateModelIfPresent(true);
|
|
84
|
-
}
|
|
85
|
-
setCheckboxIndeterminate() {
|
|
86
|
-
this.checkbox.value = undefined;
|
|
87
|
-
this.checkbox.indeterminate = true;
|
|
88
|
-
this.updateModelIfPresent(undefined);
|
|
89
|
-
}
|
|
90
|
-
readControlValue() {
|
|
91
|
-
if (this.ngModel) {
|
|
92
|
-
return this.ngModel.viewModel;
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
return this.checkbox.value;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
updateModelIfPresent(val) {
|
|
99
|
-
if (this.ngModel !== null && this.ngModel.viewModel !== val) {
|
|
100
|
-
this.ngModel.control.setValue(val, {
|
|
101
|
-
onlySelf: false,
|
|
102
|
-
emitEvent: true,
|
|
103
|
-
emitModelToViewChange: true,
|
|
104
|
-
emitViewToModelChange: true,
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ElderTripleStateCheckboxDirective, deps: [{ token: i1.MatCheckbox }, { token: i2.NgModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
109
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.5", type: ElderTripleStateCheckboxDirective, isStandalone: true, selector: "mat-checkbox[elderTripleStateCheckbox]", ngImport: i0 }); }
|
|
110
|
-
}
|
|
111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ElderTripleStateCheckboxDirective, decorators: [{
|
|
112
|
-
type: Directive,
|
|
113
|
-
args: [{
|
|
114
|
-
selector: 'mat-checkbox[elderTripleStateCheckbox]',
|
|
115
|
-
standalone: true,
|
|
116
|
-
}]
|
|
117
|
-
}], ctorParameters: () => [{ type: i1.MatCheckbox }, { type: i2.NgModel, decorators: [{
|
|
118
|
-
type: Optional
|
|
119
|
-
}] }] });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItdHJpcGxlLXN0YXRlLWNoZWNrYm94LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvZGlyZWN0aXZlcy9lbGRlci10cmlwbGUtc3RhdGUtY2hlY2tib3guZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7Ozs7QUFFcEQsTUFBTSxDQUFOLElBQVksa0JBSVg7QUFKRCxXQUFZLGtCQUFrQjtJQUM1QixxRUFBYSxDQUFBO0lBQ2IsaUVBQVcsQ0FBQTtJQUNYLDZFQUFpQixDQUFBO0FBQ25CLENBQUMsRUFKVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBSTdCO0FBTUQsTUFBTSxPQUFPLGlDQUFpQztJQUc1Qzs7OztnRkFJNEU7SUFFNUUsWUFDVSxRQUFxQixFQUNULE9BQWdCO1FBRDVCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDVCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBVnJCLFFBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7SUFXbEUsQ0FBQztJQUVKOzs7O2dGQUk0RTtJQUVyRSxRQUFRO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUE7UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FB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RSxLQUFLO2dCQUNmLFNBQVMsRUFBRSxJQUFJO2dCQUNmLHFCQUFxQixFQUFFLElBQUk7Z0JBQzNCLHFCQUFxQixFQUFFLElBQUk7YUFDNUIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7OEdBOUdVLGlDQUFpQztrR0FBakMsaUNBQWlDOzsyRkFBakMsaUNBQWlDO2tCQUo3QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3Q0FBd0M7b0JBQ2xELFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBWUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBNYXRDaGVja2JveCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94J1xuaW1wb3J0IHsgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgUGFyc2VVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWxzL3BhcnNlLXV0aWwnXG5pbXBvcnQgeyBMb2dnZXJGYWN0b3J5IH0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInXG5cbmV4cG9ydCBlbnVtIEVsZGVyQ2hlY2tib3hTdGF0ZSB7XG4gIFVOQ0hFQ0tFRCA9IDAsXG4gIENIRUNLRUQgPSAxLFxuICBJTkRFVEVSTUlOQVRFID0gMixcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbWF0LWNoZWNrYm94W2VsZGVyVHJpcGxlU3RhdGVDaGVja2JveF0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBFbGRlclRyaXBsZVN0YXRlQ2hlY2tib3hEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSlcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoZWNrYm94OiBNYXRDaGVja2JveCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5nTW9kZWw6IE5nTW9kZWxcbiAgKSB7fVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5zdGF0ZVxuICAgIHRoaXMuY2hlY2tib3gucmVnaXN0ZXJPbkNoYW5nZSgoKSA9PiB0aGlzLnRvZ2dsZU5leHRTdGF0ZSgpKVxuICAgIHRoaXMubmdNb2RlbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gKHRoaXMuc3RhdGUgPSB0aGlzLmNvbnRyb2xWYWx1ZVRvU3RhdGUodmFsdWUpKSlcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgZ2V0IHN0YXRlKCk6IEVsZGVyQ2hlY2tib3hTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFZhbHVlVG9TdGF0ZSh0aGlzLnJlYWRDb250cm9sVmFsdWUoKSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0IHN0YXRlKG5ld1N0YXRlOiBFbGRlckNoZWNrYm94U3RhdGUpIHtcbiAgICBzd2l0Y2ggKG5ld1N0YXRlKSB7XG4gICAgICBjYXNlIEVsZGVyQ2hlY2tib3hTdGF0ZS5VTkNIRUNLRUQ6XG4gICAgICAgIHRoaXMuc2V0Q2hlY2tib3hVbmNoZWNrZWQoKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIEVsZGVyQ2hlY2tib3hTdGF0ZS5DSEVDS0VEOlxuICAgICAgICB0aGlzLnNldENoZWNrYm94Q2hlY2tlZCgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgRWxkZXJDaGVja2JveFN0YXRlLklOREVURVJNSU5BVEU6XG4gICAgICAgIHRoaXMuc2V0Q2hlY2tib3hJbmRldGVybWluYXRlKClcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGNvbnRyb2xWYWx1ZVRvU3RhdGUodmFsdWU6IGFueSk6IEVsZGVyQ2hlY2tib3hTdGF0ZSB7XG4gICAgc3dpdGNoIChQYXJzZVV0aWwucGFyc2VCb29sT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBjYXNlIGZhbHNlOlxuICAgICAgICByZXR1cm4gRWxkZXJDaGVja2JveFN0YXRlLlVOQ0hFQ0tFRFxuICAgICAgY2FzZSB0cnVlOlxuICAgICAgICByZXR1cm4gRWxkZXJDaGVja2JveFN0YXRlLkNIRUNLRURcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gRWxkZXJDaGVja2JveFN0YXRlLklOREVURVJNSU5BVEVcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZU5leHRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gKHRoaXMuc3RhdGUgKyAxKSAlIDNcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hlY2tib3hVbmNoZWNrZWQoKSB7XG4gICAgdGhpcy5jaGVja2JveC52YWx1ZSA9ICdmYWxzZSdcbiAgICB0aGlzLmNoZWNrYm94LmNoZWNrZWQgPSBmYWxzZVxuICAgIHRoaXMuY2hlY2tib3guaW5kZXRlcm1pbmF0ZSA9IGZhbHNlXG4gICAgdGhpcy51cGRhdGVNb2RlbElmUHJlc2VudChmYWxzZSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2hlY2tib3hDaGVja2VkKCkge1xuICAgIHRoaXMuY2hlY2tib3gudmFsdWUgPSAndHJ1ZSdcbiAgICB0aGlzLmNoZWNrYm94LmNoZWNrZWQgPSB0cnVlXG4gICAgdGhpcy5jaGVja2JveC5pbmRldGVybWluYXRlID0gZmFsc2VcbiAgICB0aGlzLnVwZGF0ZU1vZGVsSWZQcmVzZW50KHRydWUpXG4gIH1cblxuICBwcml2YXRlIHNldENoZWNrYm94SW5kZXRlcm1pbmF0ZSgpIHtcbiAgICB0aGlzLmNoZWNrYm94LnZhbHVlID0gdW5kZWZpbmVkXG4gICAgdGhpcy5jaGVja2JveC5pbmRldGVybWluYXRlID0gdHJ1ZVxuICAgIHRoaXMudXBkYXRlTW9kZWxJZlByZXNlbnQodW5kZWZpbmVkKVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29udHJvbFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMubmdNb2RlbCkge1xuICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbC52aWV3TW9kZWxcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tib3gudmFsdWVcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGVsSWZQcmVzZW50KHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMubmdNb2RlbCAhPT0gbnVsbCAmJiB0aGlzLm5nTW9kZWwudmlld01vZGVsICE9PSB2YWwpIHtcbiAgICAgIHRoaXMubmdNb2RlbC5jb250cm9sLnNldFZhbHVlKHZhbCwge1xuICAgICAgICBvbmx5U2VsZjogZmFsc2UsXG4gICAgICAgIGVtaXRFdmVudDogdHJ1ZSxcbiAgICAgICAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiB0cnVlLFxuICAgICAgICBlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6IHRydWUsXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIl19
|