@spartan-ng/brain 0.0.1-alpha.372

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/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # brain
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test brain` to execute the unit tests.
@@ -0,0 +1,3 @@
1
+ # @spartan-ng/brain/checkbox
2
+
3
+ Secondary entry point of `@spartan-ng/brain`. It can be used by importing from `@spartan-ng/brain/checkbox`.
@@ -0,0 +1,10 @@
1
+ import { BrnCheckboxComponent } from './lib/brn-checkbox.component';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./lib/brn-checkbox.component";
4
+ export * from './lib/brn-checkbox.component';
5
+ export declare const BrnCheckboxImports: readonly [typeof BrnCheckboxComponent];
6
+ export declare class BrnCheckboxModule {
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<BrnCheckboxModule, never>;
8
+ static ɵmod: i0.ɵɵNgModuleDeclaration<BrnCheckboxModule, never, [typeof i1.BrnCheckboxComponent], [typeof i1.BrnCheckboxComponent]>;
9
+ static ɵinj: i0.ɵɵInjectorDeclaration<BrnCheckboxModule>;
10
+ }
@@ -0,0 +1,61 @@
1
+ import { type AfterContentInit, ElementRef, type OnDestroy } from '@angular/core';
2
+ import { ChangeFn, TouchFn } from '@spartan-ng/ui-forms-brain';
3
+ import * as i0 from "@angular/core";
4
+ export declare const BRN_CHECKBOX_VALUE_ACCESSOR: {
5
+ provide: import("@angular/core").InjectionToken<readonly import("@angular/forms").ControlValueAccessor[]>;
6
+ useExisting: import("@angular/core").Type<any>;
7
+ multi: boolean;
8
+ };
9
+ export declare function indeterminateBooleanAttribute(value: unknown): boolean | 'indeterminate';
10
+ export declare class BrnCheckboxComponent implements AfterContentInit, OnDestroy {
11
+ private readonly _renderer;
12
+ private readonly _elementRef;
13
+ private readonly _focusMonitor;
14
+ private readonly _isBrowser;
15
+ private readonly _focusVisible;
16
+ readonly focusVisible: import("@angular/core").Signal<boolean>;
17
+ private readonly _focused;
18
+ readonly focused: import("@angular/core").Signal<boolean>;
19
+ readonly checked: import("@angular/core").ModelSignal<BrnCheckboxValue>;
20
+ readonly isChecked: import("@angular/core").Signal<BrnCheckboxValue>;
21
+ protected readonly _dataState: import("@angular/core").Signal<"indeterminate" | "checked" | "unchecked">;
22
+ protected readonly _ariaChecked: import("@angular/core").Signal<"mixed" | "true" | "false">;
23
+ protected readonly _value: import("@angular/core").Signal<"" | "on" | "off">;
24
+ /** Used to set the id on the underlying input element. */
25
+ readonly id: import("@angular/core").InputSignal<string | null>;
26
+ protected readonly hostId: import("@angular/core").Signal<string | null>;
27
+ /** Used to set the name attribute on the underlying input element. */
28
+ readonly name: import("@angular/core").InputSignal<string | null>;
29
+ protected readonly hostName: import("@angular/core").Signal<string | null>;
30
+ /** Used to set the aria-label attribute on the underlying input element. */
31
+ readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
32
+ /** Used to set the aria-labelledby attribute on the underlying input element. */
33
+ readonly ariaLabelledby: import("@angular/core").InputSignal<string | null>;
34
+ readonly ariaDescribedby: import("@angular/core").InputSignal<string | null>;
35
+ readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
36
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
37
+ protected readonly state: import("@angular/core").Signal<{
38
+ disabled: import("@angular/core").WritableSignal<boolean>;
39
+ }>;
40
+ protected _onChange: ChangeFn<BrnCheckboxValue>;
41
+ private _onTouched;
42
+ readonly checkbox: import("@angular/core").Signal<ElementRef<HTMLInputElement>>;
43
+ readonly changed: import("@angular/core").OutputEmitterRef<BrnCheckboxValue>;
44
+ constructor();
45
+ toggle(event: Event): void;
46
+ ngAfterContentInit(): void;
47
+ ngOnDestroy(): void;
48
+ writeValue(value: BrnCheckboxValue): void;
49
+ registerOnChange(fn: ChangeFn<BrnCheckboxValue>): void;
50
+ registerOnTouched(fn: TouchFn): void;
51
+ /** Implemented as a part of ControlValueAccessor. */
52
+ setDisabledState(isDisabled: boolean): void;
53
+ /**
54
+ * If the space key is pressed, prevent the default action to stop the page from scrolling.
55
+ */
56
+ protected preventScrolling(event: KeyboardEvent): void;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<BrnCheckboxComponent, never>;
58
+ static ɵcmp: i0.ɵɵComponentDeclaration<BrnCheckboxComponent, "brn-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; "ariaDescribedby": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, ["*"], true, never>;
59
+ }
60
+ type BrnCheckboxValue = boolean | 'indeterminate';
61
+ export {};
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { BrnCheckboxComponent } from './lib/brn-checkbox.component';
3
+ import * as i0 from "@angular/core";
4
+ export * from './lib/brn-checkbox.component';
5
+ export const BrnCheckboxImports = [BrnCheckboxComponent];
6
+ export class BrnCheckboxModule {
7
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxModule, imports: [BrnCheckboxComponent], exports: [BrnCheckboxComponent] });
9
+ /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxModule });
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxModule, decorators: [{
12
+ type: NgModule,
13
+ args: [{
14
+ imports: [...BrnCheckboxImports],
15
+ exports: [...BrnCheckboxImports],
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL2NoZWNrYm94L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUVwRSxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsb0JBQW9CLENBQVUsQ0FBQztBQU1sRSxNQUFNLE9BQU8saUJBQWlCOzBIQUFqQixpQkFBaUI7MkhBQWpCLGlCQUFpQixZQU5LLG9CQUFvQixhQUFwQixvQkFBb0I7MkhBTTFDLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFKN0IsUUFBUTttQkFBQztvQkFDVCxPQUFPLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO2lCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJybkNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi9saWIvYnJuLWNoZWNrYm94LmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jybi1jaGVja2JveC5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgQnJuQ2hlY2tib3hJbXBvcnRzID0gW0JybkNoZWNrYm94Q29tcG9uZW50XSBhcyBjb25zdDtcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogWy4uLkJybkNoZWNrYm94SW1wb3J0c10sXG5cdGV4cG9ydHM6IFsuLi5Ccm5DaGVja2JveEltcG9ydHNdLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5DaGVja2JveE1vZHVsZSB7fVxuIl19
@@ -0,0 +1,248 @@
1
+ import { FocusMonitor } from '@angular/cdk/a11y';
2
+ import { NgStyle, isPlatformBrowser } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, ElementRef, HostListener, PLATFORM_ID, Renderer2, ViewEncapsulation, booleanAttribute, computed, effect, forwardRef, inject, input, model, output, signal, viewChild, } from '@angular/core';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import * as i0 from "@angular/core";
6
+ export const BRN_CHECKBOX_VALUE_ACCESSOR = {
7
+ provide: NG_VALUE_ACCESSOR,
8
+ useExisting: forwardRef(() => BrnCheckboxComponent),
9
+ multi: true,
10
+ };
11
+ export function indeterminateBooleanAttribute(value) {
12
+ if (value === 'indeterminate')
13
+ return 'indeterminate';
14
+ return booleanAttribute(value);
15
+ }
16
+ const CONTAINER_POST_FIX = '-checkbox';
17
+ export class BrnCheckboxComponent {
18
+ _renderer = inject(Renderer2);
19
+ _elementRef = inject(ElementRef);
20
+ _focusMonitor = inject(FocusMonitor);
21
+ _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
22
+ _focusVisible = signal(false);
23
+ focusVisible = this._focusVisible.asReadonly();
24
+ _focused = signal(false);
25
+ focused = this._focused.asReadonly();
26
+ checked = model(false);
27
+ isChecked = this.checked.asReadonly();
28
+ _dataState = computed(() => {
29
+ const checked = this.checked();
30
+ if (checked === 'indeterminate')
31
+ return 'indeterminate';
32
+ return checked ? 'checked' : 'unchecked';
33
+ });
34
+ _ariaChecked = computed(() => {
35
+ const checked = this.checked();
36
+ if (checked === 'indeterminate')
37
+ return 'mixed';
38
+ return checked ? 'true' : 'false';
39
+ });
40
+ _value = computed(() => {
41
+ const checked = this.checked();
42
+ if (checked === 'indeterminate')
43
+ return '';
44
+ return checked ? 'on' : 'off';
45
+ });
46
+ /** Used to set the id on the underlying input element. */
47
+ id = input(null);
48
+ hostId = computed(() => (this.id() ? this.id() + CONTAINER_POST_FIX : null));
49
+ /** Used to set the name attribute on the underlying input element. */
50
+ name = input(null);
51
+ hostName = computed(() => (this.name() ? this.name() + CONTAINER_POST_FIX : null));
52
+ /** Used to set the aria-label attribute on the underlying input element. */
53
+ ariaLabel = input(null, { alias: 'aria-label' });
54
+ /** Used to set the aria-labelledby attribute on the underlying input element. */
55
+ ariaLabelledby = input(null, { alias: 'aria-labelledby' });
56
+ ariaDescribedby = input(null, { alias: 'aria-describedby' });
57
+ required = input(false, { transform: booleanAttribute });
58
+ disabled = input(false, { transform: booleanAttribute });
59
+ state = computed(() => ({
60
+ disabled: signal(this.disabled()),
61
+ }));
62
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
63
+ _onChange = () => { };
64
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
65
+ _onTouched = () => { };
66
+ checkbox = viewChild.required('checkBox');
67
+ changed = output();
68
+ constructor() {
69
+ effect(() => {
70
+ const parent = this._renderer.parentNode(this._elementRef.nativeElement);
71
+ if (!parent)
72
+ return;
73
+ // check if parent is a label and assume it is for this checkbox
74
+ if (parent?.tagName === 'LABEL') {
75
+ this._renderer.setAttribute(parent, 'data-disabled', this.state().disabled() ? 'true' : 'false');
76
+ return;
77
+ }
78
+ if (!this._isBrowser)
79
+ return;
80
+ const label = parent?.querySelector(`label[for="${this.id()}"]`);
81
+ if (!label)
82
+ return;
83
+ this._renderer.setAttribute(label, 'data-disabled', this.state().disabled() ? 'true' : 'false');
84
+ });
85
+ }
86
+ toggle(event) {
87
+ if (this.state().disabled())
88
+ return;
89
+ event.preventDefault();
90
+ const previousChecked = this.checked();
91
+ this.checked.set(previousChecked === 'indeterminate' ? true : !previousChecked);
92
+ this._onChange(!previousChecked);
93
+ this.changed.emit(!previousChecked);
94
+ }
95
+ ngAfterContentInit() {
96
+ this._focusMonitor.monitor(this._elementRef, true).subscribe((focusOrigin) => {
97
+ if (focusOrigin)
98
+ this._focused.set(true);
99
+ if (focusOrigin === 'keyboard' || focusOrigin === 'program') {
100
+ this._focusVisible.set(true);
101
+ }
102
+ if (!focusOrigin) {
103
+ // When a focused element becomes disabled, the browser *immediately* fires a blur event.
104
+ // Angular does not expect events to be raised during change detection, so any state
105
+ // change (such as a form control's ng-touched) will cause a changed-after-checked error.
106
+ // See https://github.com/angular/angular/issues/17793. To work around this, we defer
107
+ // telling the form control it has been touched until the next tick.
108
+ Promise.resolve().then(() => {
109
+ this._focusVisible.set(false);
110
+ this._focused.set(false);
111
+ this._onTouched();
112
+ });
113
+ }
114
+ });
115
+ this.checkbox().nativeElement.indeterminate = this.checked() === 'indeterminate';
116
+ if (this.checkbox().nativeElement.indeterminate) {
117
+ this.checkbox().nativeElement.value = 'indeterminate';
118
+ }
119
+ else {
120
+ this.checkbox().nativeElement.value = this.checked() ? 'on' : 'off';
121
+ }
122
+ this.checkbox().nativeElement.dispatchEvent(new Event('change'));
123
+ }
124
+ ngOnDestroy() {
125
+ this._focusMonitor.stopMonitoring(this._elementRef);
126
+ }
127
+ writeValue(value) {
128
+ if (value === 'indeterminate') {
129
+ this.checked.set('indeterminate');
130
+ }
131
+ else {
132
+ this.checked.set(!!value);
133
+ }
134
+ }
135
+ registerOnChange(fn) {
136
+ this._onChange = fn;
137
+ }
138
+ registerOnTouched(fn) {
139
+ this._onTouched = fn;
140
+ }
141
+ /** Implemented as a part of ControlValueAccessor. */
142
+ setDisabledState(isDisabled) {
143
+ this.state().disabled.set(isDisabled);
144
+ }
145
+ /**
146
+ * If the space key is pressed, prevent the default action to stop the page from scrolling.
147
+ */
148
+ preventScrolling(event) {
149
+ event.preventDefault();
150
+ }
151
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
152
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.5", type: BrnCheckboxComponent, isStandalone: true, selector: "brn-checkbox", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", changed: "changed" }, host: { listeners: { "click": "toggle($event)", "keyup.space": "toggle($event)", "keyup.enter": "toggle($event)", "keydown.space": "preventScrolling($event)" }, properties: { "attr.tabindex": "state().disabled() ? \"-1\" : \"0\"", "attr.data-state": "_dataState()", "attr.data-focus-visible": "focusVisible()", "attr.data-focus": "focused()", "attr.data-disabled": "state().disabled()", "attr.aria-labelledby": "null", "attr.aria-label": "null", "attr.aria-describedby": "null", "attr.id": "hostId()", "attr.name": "hostName()" } }, providers: [BRN_CHECKBOX_VALUE_ACCESSOR], viewQueries: [{ propertyName: "checkbox", first: true, predicate: ["checkBox"], descendants: true, isSignal: true }], ngImport: i0, template: `
153
+ <input
154
+ #checkBox
155
+ tabindex="-1"
156
+ type="checkbox"
157
+ role="checkbox"
158
+ [ngStyle]="{
159
+ position: 'absolute',
160
+ width: '1px',
161
+ height: '1px',
162
+ padding: '0',
163
+ margin: '-1px',
164
+ overflow: 'hidden',
165
+ clip: 'rect(0, 0, 0, 0)',
166
+ whiteSpace: 'nowrap',
167
+ borderWidth: '0',
168
+ }"
169
+ [id]="id() ?? ''"
170
+ [name]="name() ?? ''"
171
+ [value]="_value()"
172
+ [checked]="isChecked()"
173
+ [required]="required()"
174
+ [attr.aria-label]="ariaLabel()"
175
+ [attr.aria-labelledby]="ariaLabelledby()"
176
+ [attr.aria-describedby]="ariaDescribedby()"
177
+ [attr.aria-required]="required() || null"
178
+ [attr.aria-checked]="_ariaChecked()"
179
+ />
180
+ <ng-content />
181
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
182
+ }
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxComponent, decorators: [{
184
+ type: Component,
185
+ args: [{
186
+ selector: 'brn-checkbox',
187
+ standalone: true,
188
+ imports: [NgStyle],
189
+ template: `
190
+ <input
191
+ #checkBox
192
+ tabindex="-1"
193
+ type="checkbox"
194
+ role="checkbox"
195
+ [ngStyle]="{
196
+ position: 'absolute',
197
+ width: '1px',
198
+ height: '1px',
199
+ padding: '0',
200
+ margin: '-1px',
201
+ overflow: 'hidden',
202
+ clip: 'rect(0, 0, 0, 0)',
203
+ whiteSpace: 'nowrap',
204
+ borderWidth: '0',
205
+ }"
206
+ [id]="id() ?? ''"
207
+ [name]="name() ?? ''"
208
+ [value]="_value()"
209
+ [checked]="isChecked()"
210
+ [required]="required()"
211
+ [attr.aria-label]="ariaLabel()"
212
+ [attr.aria-labelledby]="ariaLabelledby()"
213
+ [attr.aria-describedby]="ariaDescribedby()"
214
+ [attr.aria-required]="required() || null"
215
+ [attr.aria-checked]="_ariaChecked()"
216
+ />
217
+ <ng-content />
218
+ `,
219
+ host: {
220
+ '[attr.tabindex]': 'state().disabled() ? "-1" : "0"',
221
+ '[attr.data-state]': '_dataState()',
222
+ '[attr.data-focus-visible]': 'focusVisible()',
223
+ '[attr.data-focus]': 'focused()',
224
+ '[attr.data-disabled]': 'state().disabled()',
225
+ '[attr.aria-labelledby]': 'null',
226
+ '[attr.aria-label]': 'null',
227
+ '[attr.aria-describedby]': 'null',
228
+ '[attr.id]': 'hostId()',
229
+ '[attr.name]': 'hostName()',
230
+ },
231
+ providers: [BRN_CHECKBOX_VALUE_ACCESSOR],
232
+ changeDetection: ChangeDetectionStrategy.OnPush,
233
+ encapsulation: ViewEncapsulation.None,
234
+ }]
235
+ }], ctorParameters: () => [], propDecorators: { toggle: [{
236
+ type: HostListener,
237
+ args: ['click', ['$event']]
238
+ }, {
239
+ type: HostListener,
240
+ args: ['keyup.space', ['$event']]
241
+ }, {
242
+ type: HostListener,
243
+ args: ['keyup.enter', ['$event']]
244
+ }], preventScrolling: [{
245
+ type: HostListener,
246
+ args: ['keydown.space', ['$event']]
247
+ }] } });
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vY2hlY2tib3gvc3JjL2xpYi9icm4tY2hlY2tib3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUVOLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFFWixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR25ELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBQzFDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztJQUNuRCxLQUFLLEVBQUUsSUFBSTtDQUNYLENBQUM7QUFFRixNQUFNLFVBQVUsNkJBQTZCLENBQUMsS0FBYztJQUMzRCxJQUFJLEtBQUssS0FBSyxlQUFlO1FBQUUsT0FBTyxlQUFlLENBQUM7SUFDdEQsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUM7QUFvRHZDLE1BQU0sT0FBTyxvQkFBb0I7SUFDZixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLFdBQVcs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d0JBQ2pDLFdBQVcsRUFBRSxVQUFVO3dCQUN2QixhQUFhLEVBQUUsWUFBWTtxQkFDM0I7b0JBQ0QsU0FBUyxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQ3hDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDckM7d0RBb0ZBLE1BQU07c0JBSEwsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUNoQyxZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3RDLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW9FN0IsZ0JBQWdCO3NCQUR6QixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IE5nU3R5bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdHR5cGUgQWZ0ZXJDb250ZW50SW5pdCxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0SG9zdExpc3RlbmVyLFxuXHR0eXBlIE9uRGVzdHJveSxcblx0UExBVEZPUk1fSUQsXG5cdFJlbmRlcmVyMixcblx0Vmlld0VuY2Fwc3VsYXRpb24sXG5cdGJvb2xlYW5BdHRyaWJ1dGUsXG5cdGNvbXB1dGVkLFxuXHRlZmZlY3QsXG5cdGZvcndhcmRSZWYsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdG1vZGVsLFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2hhbmdlRm4sIFRvdWNoRm4gfSBmcm9tICdAc3BhcnRhbi1uZy91aS1mb3Jtcy1icmFpbic7XG5cbmV4cG9ydCBjb25zdCBCUk5fQ0hFQ0tCT1hfVkFMVUVfQUNDRVNTT1IgPSB7XG5cdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBCcm5DaGVja2JveENvbXBvbmVudCksXG5cdG11bHRpOiB0cnVlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluZGV0ZXJtaW5hdGVCb29sZWFuQXR0cmlidXRlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJyB7XG5cdGlmICh2YWx1ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnKSByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuXHRyZXR1cm4gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG59XG5cbmNvbnN0IENPTlRBSU5FUl9QT1NUX0ZJWCA9ICctY2hlY2tib3gnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdicm4tY2hlY2tib3gnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbTmdTdHlsZV0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGlucHV0XG5cdFx0XHQjY2hlY2tCb3hcblx0XHRcdHRhYmluZGV4PVwiLTFcIlxuXHRcdFx0dHlwZT1cImNoZWNrYm94XCJcblx0XHRcdHJvbGU9XCJjaGVja2JveFwiXG5cdFx0XHRbbmdTdHlsZV09XCJ7XG5cdFx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdFx0XHR3aWR0aDogJzFweCcsXG5cdFx0XHRcdGhlaWdodDogJzFweCcsXG5cdFx0XHRcdHBhZGRpbmc6ICcwJyxcblx0XHRcdFx0bWFyZ2luOiAnLTFweCcsXG5cdFx0XHRcdG92ZXJmbG93OiAnaGlkZGVuJyxcblx0XHRcdFx0Y2xpcDogJ3JlY3QoMCwgMCwgMCwgMCknLFxuXHRcdFx0XHR3aGl0ZVNwYWNlOiAnbm93cmFwJyxcblx0XHRcdFx0Ym9yZGVyV2lkdGg6ICcwJyxcblx0XHRcdH1cIlxuXHRcdFx0W2lkXT1cImlkKCkgPz8gJydcIlxuXHRcdFx0W25hbWVdPVwibmFtZSgpID8/ICcnXCJcblx0XHRcdFt2YWx1ZV09XCJfdmFsdWUoKVwiXG5cdFx0XHRbY2hlY2tlZF09XCJpc0NoZWNrZWQoKVwiXG5cdFx0XHRbcmVxdWlyZWRdPVwicmVxdWlyZWQoKVwiXG5cdFx0XHRbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCgpXCJcblx0XHRcdFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRieSgpXCJcblx0XHRcdFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZGJ5KClcIlxuXHRcdFx0W2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZCgpIHx8IG51bGxcIlxuXHRcdFx0W2F0dHIuYXJpYS1jaGVja2VkXT1cIl9hcmlhQ2hlY2tlZCgpXCJcblx0XHQvPlxuXHRcdDxuZy1jb250ZW50IC8+XG5cdGAsXG5cdGhvc3Q6IHtcblx0XHQnW2F0dHIudGFiaW5kZXhdJzogJ3N0YXRlKCkuZGlzYWJsZWQoKSA/IFwiLTFcIiA6IFwiMFwiJyxcblx0XHQnW2F0dHIuZGF0YS1zdGF0ZV0nOiAnX2RhdGFTdGF0ZSgpJyxcblx0XHQnW2F0dHIuZGF0YS1mb2N1cy12aXNpYmxlXSc6ICdmb2N1c1Zpc2libGUoKScsXG5cdFx0J1thdHRyLmRhdGEtZm9jdXNdJzogJ2ZvY3VzZWQoKScsXG5cdFx0J1thdHRyLmRhdGEtZGlzYWJsZWRdJzogJ3N0YXRlKCkuZGlzYWJsZWQoKScsXG5cdFx0J1thdHRyLmFyaWEtbGFiZWxsZWRieV0nOiAnbnVsbCcsXG5cdFx0J1thdHRyLmFyaWEtbGFiZWxdJzogJ251bGwnLFxuXHRcdCdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdudWxsJyxcblx0XHQnW2F0dHIuaWRdJzogJ2hvc3RJZCgpJyxcblx0XHQnW2F0dHIubmFtZV0nOiAnaG9zdE5hbWUoKScsXG5cdH0sXG5cdHByb3ZpZGVyczogW0JSTl9DSEVDS0JPWF9WQUxVRV9BQ0NFU1NPUl0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5DaGVja2JveENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzTW9uaXRvciA9IGluamVjdChGb2N1c01vbml0b3IpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9pc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9mb2N1c1Zpc2libGUgPSBzaWduYWwoZmFsc2UpO1xuXHRwdWJsaWMgcmVhZG9ubHkgZm9jdXNWaXNpYmxlID0gdGhpcy5fZm9jdXNWaXNpYmxlLmFzUmVhZG9ubHkoKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZm9jdXNlZCA9IHNpZ25hbChmYWxzZSk7XG5cdHB1YmxpYyByZWFkb25seSBmb2N1c2VkID0gdGhpcy5fZm9jdXNlZC5hc1JlYWRvbmx5KCk7XG5cblx0cHVibGljIHJlYWRvbmx5IGNoZWNrZWQgPSBtb2RlbDxCcm5DaGVja2JveFZhbHVlPihmYWxzZSk7XG5cdHB1YmxpYyByZWFkb25seSBpc0NoZWNrZWQgPSB0aGlzLmNoZWNrZWQuYXNSZWFkb25seSgpO1xuXG5cdHByb3RlY3RlZCByZWFkb25seSBfZGF0YVN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGNoZWNrZWQgPSB0aGlzLmNoZWNrZWQoKTtcblx0XHRpZiAoY2hlY2tlZCA9PT0gJ2luZGV0ZXJtaW5hdGUnKSByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuXHRcdHJldHVybiBjaGVja2VkID8gJ2NoZWNrZWQnIDogJ3VuY2hlY2tlZCc7XG5cdH0pO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX2FyaWFDaGVja2VkID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGNoZWNrZWQgPSB0aGlzLmNoZWNrZWQoKTtcblx0XHRpZiAoY2hlY2tlZCA9PT0gJ2luZGV0ZXJtaW5hdGUnKSByZXR1cm4gJ21peGVkJztcblx0XHRyZXR1cm4gY2hlY2tlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cdH0pO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX3ZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGNoZWNrZWQgPSB0aGlzLmNoZWNrZWQoKTtcblx0XHRpZiAoY2hlY2tlZCA9PT0gJ2luZGV0ZXJtaW5hdGUnKSByZXR1cm4gJyc7XG5cdFx0cmV0dXJuIGNoZWNrZWQgPyAnb24nIDogJ29mZic7XG5cdH0pO1xuXG5cdC8qKiBVc2VkIHRvIHNldCB0aGUgaWQgb24gdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudC4gKi9cblx0cHVibGljIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cdHByb3RlY3RlZCByZWFkb25seSBob3N0SWQgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5pZCgpID8gdGhpcy5pZCgpICsgQ09OVEFJTkVSX1BPU1RfRklYIDogbnVsbCkpO1xuXG5cdC8qKiBVc2VkIHRvIHNldCB0aGUgbmFtZSBhdHRyaWJ1dGUgb24gdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudC4gKi9cblx0cHVibGljIHJlYWRvbmx5IG5hbWUgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IGhvc3ROYW1lID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMubmFtZSgpID8gdGhpcy5uYW1lKCkgKyBDT05UQUlORVJfUE9TVF9GSVggOiBudWxsKSk7XG5cblx0LyoqIFVzZWQgdG8gc2V0IHRoZSBhcmlhLWxhYmVsIGF0dHJpYnV0ZSBvbiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LiAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgYXJpYUxhYmVsID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ2FyaWEtbGFiZWwnIH0pO1xuXG5cdC8qKiBVc2VkIHRvIHNldCB0aGUgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSBvbiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LiAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgYXJpYUxhYmVsbGVkYnkgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsLCB7IGFsaWFzOiAnYXJpYS1sYWJlbGxlZGJ5JyB9KTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgYXJpYURlc2NyaWJlZGJ5ID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ2FyaWEtZGVzY3JpYmVkYnknIH0pO1xuXG5cdHB1YmxpYyByZWFkb25seSByZXF1aXJlZCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cblx0cHJvdGVjdGVkIHJlYWRvbmx5IHN0YXRlID0gY29tcHV0ZWQoKCkgPT4gKHtcblx0XHRkaXNhYmxlZDogc2lnbmFsKHRoaXMuZGlzYWJsZWQoKSksXG5cdH0pKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG5cdHByb3RlY3RlZCBfb25DaGFuZ2U6IENoYW5nZUZuPEJybkNoZWNrYm94VmFsdWU+ID0gKCkgPT4ge307XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cblx0cHJpdmF0ZSBfb25Ub3VjaGVkOiBUb3VjaEZuID0gKCkgPT4ge307XG5cblx0cHVibGljIHJlYWRvbmx5IGNoZWNrYm94ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+KCdjaGVja0JveCcpO1xuXG5cdHB1YmxpYyByZWFkb25seSBjaGFuZ2VkID0gb3V0cHV0PEJybkNoZWNrYm94VmFsdWU+KCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuX3JlbmRlcmVyLnBhcmVudE5vZGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cdFx0XHQvLyBjaGVjayBpZiBwYXJlbnQgaXMgYSBsYWJlbCBhbmQgYXNzdW1lIGl0IGlzIGZvciB0aGlzIGNoZWNrYm94XG5cdFx0XHRpZiAocGFyZW50Py50YWdOYW1lID09PSAnTEFCRUwnKSB7XG5cdFx0XHRcdHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShwYXJlbnQsICdkYXRhLWRpc2FibGVkJywgdGhpcy5zdGF0ZSgpLmRpc2FibGVkKCkgPyAndHJ1ZScgOiAnZmFsc2UnKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLl9pc0Jyb3dzZXIpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgbGFiZWwgPSBwYXJlbnQ/LnF1ZXJ5U2VsZWN0b3IoYGxhYmVsW2Zvcj1cIiR7dGhpcy5pZCgpfVwiXWApO1xuXHRcdFx0aWYgKCFsYWJlbCkgcmV0dXJuO1xuXHRcdFx0dGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKGxhYmVsLCAnZGF0YS1kaXNhYmxlZCcsIHRoaXMuc3RhdGUoKS5kaXNhYmxlZCgpID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG5cdFx0fSk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG5cdEBIb3N0TGlzdGVuZXIoJ2tleXVwLnNwYWNlJywgWyckZXZlbnQnXSlcblx0QEhvc3RMaXN0ZW5lcigna2V5dXAuZW50ZXInLCBbJyRldmVudCddKVxuXHR0b2dnbGUoZXZlbnQ6IEV2ZW50KSB7XG5cdFx0aWYgKHRoaXMuc3RhdGUoKS5kaXNhYmxlZCgpKSByZXR1cm47XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBwcmV2aW91c0NoZWNrZWQgPSB0aGlzLmNoZWNrZWQoKTtcblx0XHR0aGlzLmNoZWNrZWQuc2V0KHByZXZpb3VzQ2hlY2tlZCA9PT0gJ2luZGV0ZXJtaW5hdGUnID8gdHJ1ZSA6ICFwcmV2aW91c0NoZWNrZWQpO1xuXHRcdHRoaXMuX29uQ2hhbmdlKCFwcmV2aW91c0NoZWNrZWQpO1xuXHRcdHRoaXMuY2hhbmdlZC5lbWl0KCFwcmV2aW91c0NoZWNrZWQpO1xuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsIHRydWUpLnN1YnNjcmliZSgoZm9jdXNPcmlnaW4pID0+IHtcblx0XHRcdGlmIChmb2N1c09yaWdpbikgdGhpcy5fZm9jdXNlZC5zZXQodHJ1ZSk7XG5cdFx0XHRpZiAoZm9jdXNPcmlnaW4gPT09ICdrZXlib2FyZCcgfHwgZm9jdXNPcmlnaW4gPT09ICdwcm9ncmFtJykge1xuXHRcdFx0XHR0aGlzLl9mb2N1c1Zpc2libGUuc2V0KHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFmb2N1c09yaWdpbikge1xuXHRcdFx0XHQvLyBXaGVuIGEgZm9jdXNlZCBlbGVtZW50IGJlY29tZXMgZGlzYWJsZWQsIHRoZSBicm93c2VyICppbW1lZGlhdGVseSogZmlyZXMgYSBibHVyIGV2ZW50LlxuXHRcdFx0XHQvLyBBbmd1bGFyIGRvZXMgbm90IGV4cGVjdCBldmVudHMgdG8gYmUgcmFpc2VkIGR1cmluZyBjaGFuZ2UgZGV0ZWN0aW9uLCBzbyBhbnkgc3RhdGVcblx0XHRcdFx0Ly8gY2hhbmdlIChzdWNoIGFzIGEgZm9ybSBjb250cm9sJ3MgbmctdG91Y2hlZCkgd2lsbCBjYXVzZSBhIGNoYW5nZWQtYWZ0ZXItY2hlY2tlZCBlcnJvci5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE3NzkzLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBkZWZlclxuXHRcdFx0XHQvLyB0ZWxsaW5nIHRoZSBmb3JtIGNvbnRyb2wgaXQgaGFzIGJlZW4gdG91Y2hlZCB1bnRpbCB0aGUgbmV4dCB0aWNrLlxuXHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9mb2N1c1Zpc2libGUuc2V0KGZhbHNlKTtcblx0XHRcdFx0XHR0aGlzLl9mb2N1c2VkLnNldChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5fb25Ub3VjaGVkKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5jaGVja2JveCgpLm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRoaXMuY2hlY2tlZCgpID09PSAnaW5kZXRlcm1pbmF0ZSc7XG5cdFx0aWYgKHRoaXMuY2hlY2tib3goKS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGUpIHtcblx0XHRcdHRoaXMuY2hlY2tib3goKS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJ2luZGV0ZXJtaW5hdGUnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNoZWNrYm94KCkubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuY2hlY2tlZCgpID8gJ29uJyA6ICdvZmYnO1xuXHRcdH1cblx0XHR0aGlzLmNoZWNrYm94KCkubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJykpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpO1xuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogQnJuQ2hlY2tib3hWYWx1ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSA9PT0gJ2luZGV0ZXJtaW5hdGUnKSB7XG5cdFx0XHR0aGlzLmNoZWNrZWQuc2V0KCdpbmRldGVybWluYXRlJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2hlY2tlZC5zZXQoISF2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogQ2hhbmdlRm48QnJuQ2hlY2tib3hWYWx1ZT4pOiB2b2lkIHtcblx0XHR0aGlzLl9vbkNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IFRvdWNoRm4pOiB2b2lkIHtcblx0XHR0aGlzLl9vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdC8qKiBJbXBsZW1lbnRlZCBhcyBhIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuICovXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUoKS5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XG5cdH1cblxuXHQvKipcblx0ICogSWYgdGhlIHNwYWNlIGtleSBpcyBwcmVzc2VkLCBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiB0byBzdG9wIHRoZSBwYWdlIGZyb20gc2Nyb2xsaW5nLlxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcigna2V5ZG93bi5zcGFjZScsIFsnJGV2ZW50J10pXG5cdHByb3RlY3RlZCBwcmV2ZW50U2Nyb2xsaW5nKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0fVxufVxuXG50eXBlIEJybkNoZWNrYm94VmFsdWUgPSBib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGUnO1xuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnRhbi1uZy1icmFpbi1jaGVja2JveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vY2hlY2tib3gvc3JjL3NwYXJ0YW4tbmctYnJhaW4tY2hlY2tib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ // this file can't be empty, otherwise the build will fail
2
+ export default true;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2JyYWluL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsZUFBZSxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0aGlzIGZpbGUgY2FuJ3QgYmUgZW1wdHksIG90aGVyd2lzZSB0aGUgYnVpbGQgd2lsbCBmYWlsXG5leHBvcnQgZGVmYXVsdCB0cnVlO1xuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnRhbi1uZy1icmFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vc3JjL3NwYXJ0YW4tbmctYnJhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,269 @@
1
+ import * as i0 from '@angular/core';
2
+ import { forwardRef, booleanAttribute, inject, Renderer2, ElementRef, PLATFORM_ID, signal, model, computed, input, viewChild, output, effect, Component, ChangeDetectionStrategy, ViewEncapsulation, HostListener, NgModule } from '@angular/core';
3
+ import { FocusMonitor } from '@angular/cdk/a11y';
4
+ import { isPlatformBrowser, NgStyle } from '@angular/common';
5
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
+
7
+ const BRN_CHECKBOX_VALUE_ACCESSOR = {
8
+ provide: NG_VALUE_ACCESSOR,
9
+ useExisting: forwardRef(() => BrnCheckboxComponent),
10
+ multi: true,
11
+ };
12
+ function indeterminateBooleanAttribute(value) {
13
+ if (value === 'indeterminate')
14
+ return 'indeterminate';
15
+ return booleanAttribute(value);
16
+ }
17
+ const CONTAINER_POST_FIX = '-checkbox';
18
+ class BrnCheckboxComponent {
19
+ _renderer = inject(Renderer2);
20
+ _elementRef = inject(ElementRef);
21
+ _focusMonitor = inject(FocusMonitor);
22
+ _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
23
+ _focusVisible = signal(false);
24
+ focusVisible = this._focusVisible.asReadonly();
25
+ _focused = signal(false);
26
+ focused = this._focused.asReadonly();
27
+ checked = model(false);
28
+ isChecked = this.checked.asReadonly();
29
+ _dataState = computed(() => {
30
+ const checked = this.checked();
31
+ if (checked === 'indeterminate')
32
+ return 'indeterminate';
33
+ return checked ? 'checked' : 'unchecked';
34
+ });
35
+ _ariaChecked = computed(() => {
36
+ const checked = this.checked();
37
+ if (checked === 'indeterminate')
38
+ return 'mixed';
39
+ return checked ? 'true' : 'false';
40
+ });
41
+ _value = computed(() => {
42
+ const checked = this.checked();
43
+ if (checked === 'indeterminate')
44
+ return '';
45
+ return checked ? 'on' : 'off';
46
+ });
47
+ /** Used to set the id on the underlying input element. */
48
+ id = input(null);
49
+ hostId = computed(() => (this.id() ? this.id() + CONTAINER_POST_FIX : null));
50
+ /** Used to set the name attribute on the underlying input element. */
51
+ name = input(null);
52
+ hostName = computed(() => (this.name() ? this.name() + CONTAINER_POST_FIX : null));
53
+ /** Used to set the aria-label attribute on the underlying input element. */
54
+ ariaLabel = input(null, { alias: 'aria-label' });
55
+ /** Used to set the aria-labelledby attribute on the underlying input element. */
56
+ ariaLabelledby = input(null, { alias: 'aria-labelledby' });
57
+ ariaDescribedby = input(null, { alias: 'aria-describedby' });
58
+ required = input(false, { transform: booleanAttribute });
59
+ disabled = input(false, { transform: booleanAttribute });
60
+ state = computed(() => ({
61
+ disabled: signal(this.disabled()),
62
+ }));
63
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
64
+ _onChange = () => { };
65
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
66
+ _onTouched = () => { };
67
+ checkbox = viewChild.required('checkBox');
68
+ changed = output();
69
+ constructor() {
70
+ effect(() => {
71
+ const parent = this._renderer.parentNode(this._elementRef.nativeElement);
72
+ if (!parent)
73
+ return;
74
+ // check if parent is a label and assume it is for this checkbox
75
+ if (parent?.tagName === 'LABEL') {
76
+ this._renderer.setAttribute(parent, 'data-disabled', this.state().disabled() ? 'true' : 'false');
77
+ return;
78
+ }
79
+ if (!this._isBrowser)
80
+ return;
81
+ const label = parent?.querySelector(`label[for="${this.id()}"]`);
82
+ if (!label)
83
+ return;
84
+ this._renderer.setAttribute(label, 'data-disabled', this.state().disabled() ? 'true' : 'false');
85
+ });
86
+ }
87
+ toggle(event) {
88
+ if (this.state().disabled())
89
+ return;
90
+ event.preventDefault();
91
+ const previousChecked = this.checked();
92
+ this.checked.set(previousChecked === 'indeterminate' ? true : !previousChecked);
93
+ this._onChange(!previousChecked);
94
+ this.changed.emit(!previousChecked);
95
+ }
96
+ ngAfterContentInit() {
97
+ this._focusMonitor.monitor(this._elementRef, true).subscribe((focusOrigin) => {
98
+ if (focusOrigin)
99
+ this._focused.set(true);
100
+ if (focusOrigin === 'keyboard' || focusOrigin === 'program') {
101
+ this._focusVisible.set(true);
102
+ }
103
+ if (!focusOrigin) {
104
+ // When a focused element becomes disabled, the browser *immediately* fires a blur event.
105
+ // Angular does not expect events to be raised during change detection, so any state
106
+ // change (such as a form control's ng-touched) will cause a changed-after-checked error.
107
+ // See https://github.com/angular/angular/issues/17793. To work around this, we defer
108
+ // telling the form control it has been touched until the next tick.
109
+ Promise.resolve().then(() => {
110
+ this._focusVisible.set(false);
111
+ this._focused.set(false);
112
+ this._onTouched();
113
+ });
114
+ }
115
+ });
116
+ this.checkbox().nativeElement.indeterminate = this.checked() === 'indeterminate';
117
+ if (this.checkbox().nativeElement.indeterminate) {
118
+ this.checkbox().nativeElement.value = 'indeterminate';
119
+ }
120
+ else {
121
+ this.checkbox().nativeElement.value = this.checked() ? 'on' : 'off';
122
+ }
123
+ this.checkbox().nativeElement.dispatchEvent(new Event('change'));
124
+ }
125
+ ngOnDestroy() {
126
+ this._focusMonitor.stopMonitoring(this._elementRef);
127
+ }
128
+ writeValue(value) {
129
+ if (value === 'indeterminate') {
130
+ this.checked.set('indeterminate');
131
+ }
132
+ else {
133
+ this.checked.set(!!value);
134
+ }
135
+ }
136
+ registerOnChange(fn) {
137
+ this._onChange = fn;
138
+ }
139
+ registerOnTouched(fn) {
140
+ this._onTouched = fn;
141
+ }
142
+ /** Implemented as a part of ControlValueAccessor. */
143
+ setDisabledState(isDisabled) {
144
+ this.state().disabled.set(isDisabled);
145
+ }
146
+ /**
147
+ * If the space key is pressed, prevent the default action to stop the page from scrolling.
148
+ */
149
+ preventScrolling(event) {
150
+ event.preventDefault();
151
+ }
152
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
153
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.5", type: BrnCheckboxComponent, isStandalone: true, selector: "brn-checkbox", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", changed: "changed" }, host: { listeners: { "click": "toggle($event)", "keyup.space": "toggle($event)", "keyup.enter": "toggle($event)", "keydown.space": "preventScrolling($event)" }, properties: { "attr.tabindex": "state().disabled() ? \"-1\" : \"0\"", "attr.data-state": "_dataState()", "attr.data-focus-visible": "focusVisible()", "attr.data-focus": "focused()", "attr.data-disabled": "state().disabled()", "attr.aria-labelledby": "null", "attr.aria-label": "null", "attr.aria-describedby": "null", "attr.id": "hostId()", "attr.name": "hostName()" } }, providers: [BRN_CHECKBOX_VALUE_ACCESSOR], viewQueries: [{ propertyName: "checkbox", first: true, predicate: ["checkBox"], descendants: true, isSignal: true }], ngImport: i0, template: `
154
+ <input
155
+ #checkBox
156
+ tabindex="-1"
157
+ type="checkbox"
158
+ role="checkbox"
159
+ [ngStyle]="{
160
+ position: 'absolute',
161
+ width: '1px',
162
+ height: '1px',
163
+ padding: '0',
164
+ margin: '-1px',
165
+ overflow: 'hidden',
166
+ clip: 'rect(0, 0, 0, 0)',
167
+ whiteSpace: 'nowrap',
168
+ borderWidth: '0',
169
+ }"
170
+ [id]="id() ?? ''"
171
+ [name]="name() ?? ''"
172
+ [value]="_value()"
173
+ [checked]="isChecked()"
174
+ [required]="required()"
175
+ [attr.aria-label]="ariaLabel()"
176
+ [attr.aria-labelledby]="ariaLabelledby()"
177
+ [attr.aria-describedby]="ariaDescribedby()"
178
+ [attr.aria-required]="required() || null"
179
+ [attr.aria-checked]="_ariaChecked()"
180
+ />
181
+ <ng-content />
182
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
183
+ }
184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxComponent, decorators: [{
185
+ type: Component,
186
+ args: [{
187
+ selector: 'brn-checkbox',
188
+ standalone: true,
189
+ imports: [NgStyle],
190
+ template: `
191
+ <input
192
+ #checkBox
193
+ tabindex="-1"
194
+ type="checkbox"
195
+ role="checkbox"
196
+ [ngStyle]="{
197
+ position: 'absolute',
198
+ width: '1px',
199
+ height: '1px',
200
+ padding: '0',
201
+ margin: '-1px',
202
+ overflow: 'hidden',
203
+ clip: 'rect(0, 0, 0, 0)',
204
+ whiteSpace: 'nowrap',
205
+ borderWidth: '0',
206
+ }"
207
+ [id]="id() ?? ''"
208
+ [name]="name() ?? ''"
209
+ [value]="_value()"
210
+ [checked]="isChecked()"
211
+ [required]="required()"
212
+ [attr.aria-label]="ariaLabel()"
213
+ [attr.aria-labelledby]="ariaLabelledby()"
214
+ [attr.aria-describedby]="ariaDescribedby()"
215
+ [attr.aria-required]="required() || null"
216
+ [attr.aria-checked]="_ariaChecked()"
217
+ />
218
+ <ng-content />
219
+ `,
220
+ host: {
221
+ '[attr.tabindex]': 'state().disabled() ? "-1" : "0"',
222
+ '[attr.data-state]': '_dataState()',
223
+ '[attr.data-focus-visible]': 'focusVisible()',
224
+ '[attr.data-focus]': 'focused()',
225
+ '[attr.data-disabled]': 'state().disabled()',
226
+ '[attr.aria-labelledby]': 'null',
227
+ '[attr.aria-label]': 'null',
228
+ '[attr.aria-describedby]': 'null',
229
+ '[attr.id]': 'hostId()',
230
+ '[attr.name]': 'hostName()',
231
+ },
232
+ providers: [BRN_CHECKBOX_VALUE_ACCESSOR],
233
+ changeDetection: ChangeDetectionStrategy.OnPush,
234
+ encapsulation: ViewEncapsulation.None,
235
+ }]
236
+ }], ctorParameters: () => [], propDecorators: { toggle: [{
237
+ type: HostListener,
238
+ args: ['click', ['$event']]
239
+ }, {
240
+ type: HostListener,
241
+ args: ['keyup.space', ['$event']]
242
+ }, {
243
+ type: HostListener,
244
+ args: ['keyup.enter', ['$event']]
245
+ }], preventScrolling: [{
246
+ type: HostListener,
247
+ args: ['keydown.space', ['$event']]
248
+ }] } });
249
+
250
+ const BrnCheckboxImports = [BrnCheckboxComponent];
251
+ class BrnCheckboxModule {
252
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
253
+ /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxModule, imports: [BrnCheckboxComponent], exports: [BrnCheckboxComponent] });
254
+ /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxModule });
255
+ }
256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: BrnCheckboxModule, decorators: [{
257
+ type: NgModule,
258
+ args: [{
259
+ imports: [...BrnCheckboxImports],
260
+ exports: [...BrnCheckboxImports],
261
+ }]
262
+ }] });
263
+
264
+ /**
265
+ * Generated bundle index. Do not edit.
266
+ */
267
+
268
+ export { BRN_CHECKBOX_VALUE_ACCESSOR, BrnCheckboxComponent, BrnCheckboxImports, BrnCheckboxModule, indeterminateBooleanAttribute };
269
+ //# sourceMappingURL=spartan-ng-brain-checkbox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spartan-ng-brain-checkbox.mjs","sources":["../../../../libs/brain/checkbox/src/lib/brn-checkbox.component.ts","../../../../libs/brain/checkbox/src/index.ts","../../../../libs/brain/checkbox/src/spartan-ng-brain-checkbox.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport { NgStyle, isPlatformBrowser } from '@angular/common';\nimport {\n\ttype AfterContentInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tHostListener,\n\ttype OnDestroy,\n\tPLATFORM_ID,\n\tRenderer2,\n\tViewEncapsulation,\n\tbooleanAttribute,\n\tcomputed,\n\teffect,\n\tforwardRef,\n\tinject,\n\tinput,\n\tmodel,\n\toutput,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ChangeFn, TouchFn } from '@spartan-ng/ui-forms-brain';\n\nexport const BRN_CHECKBOX_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnCheckboxComponent),\n\tmulti: true,\n};\n\nexport function indeterminateBooleanAttribute(value: unknown): boolean | 'indeterminate' {\n\tif (value === 'indeterminate') return 'indeterminate';\n\treturn booleanAttribute(value);\n}\n\nconst CONTAINER_POST_FIX = '-checkbox';\n\n@Component({\n\tselector: 'brn-checkbox',\n\tstandalone: true,\n\timports: [NgStyle],\n\ttemplate: `\n\t\t<input\n\t\t\t#checkBox\n\t\t\ttabindex=\"-1\"\n\t\t\ttype=\"checkbox\"\n\t\t\trole=\"checkbox\"\n\t\t\t[ngStyle]=\"{\n\t\t\t\tposition: 'absolute',\n\t\t\t\twidth: '1px',\n\t\t\t\theight: '1px',\n\t\t\t\tpadding: '0',\n\t\t\t\tmargin: '-1px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tclip: 'rect(0, 0, 0, 0)',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tborderWidth: '0',\n\t\t\t}\"\n\t\t\t[id]=\"id() ?? ''\"\n\t\t\t[name]=\"name() ?? ''\"\n\t\t\t[value]=\"_value()\"\n\t\t\t[checked]=\"isChecked()\"\n\t\t\t[required]=\"required()\"\n\t\t\t[attr.aria-label]=\"ariaLabel()\"\n\t\t\t[attr.aria-labelledby]=\"ariaLabelledby()\"\n\t\t\t[attr.aria-describedby]=\"ariaDescribedby()\"\n\t\t\t[attr.aria-required]=\"required() || null\"\n\t\t\t[attr.aria-checked]=\"_ariaChecked()\"\n\t\t/>\n\t\t<ng-content />\n\t`,\n\thost: {\n\t\t'[attr.tabindex]': 'state().disabled() ? \"-1\" : \"0\"',\n\t\t'[attr.data-state]': '_dataState()',\n\t\t'[attr.data-focus-visible]': 'focusVisible()',\n\t\t'[attr.data-focus]': 'focused()',\n\t\t'[attr.data-disabled]': 'state().disabled()',\n\t\t'[attr.aria-labelledby]': 'null',\n\t\t'[attr.aria-label]': 'null',\n\t\t'[attr.aria-describedby]': 'null',\n\t\t'[attr.id]': 'hostId()',\n\t\t'[attr.name]': 'hostName()',\n\t},\n\tproviders: [BRN_CHECKBOX_VALUE_ACCESSOR],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n})\nexport class BrnCheckboxComponent implements AfterContentInit, OnDestroy {\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _elementRef = inject(ElementRef);\n\tprivate readonly _focusMonitor = inject(FocusMonitor);\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n\tprivate readonly _focusVisible = signal(false);\n\tpublic readonly focusVisible = this._focusVisible.asReadonly();\n\tprivate readonly _focused = signal(false);\n\tpublic readonly focused = this._focused.asReadonly();\n\n\tpublic readonly checked = model<BrnCheckboxValue>(false);\n\tpublic readonly isChecked = this.checked.asReadonly();\n\n\tprotected readonly _dataState = computed(() => {\n\t\tconst checked = this.checked();\n\t\tif (checked === 'indeterminate') return 'indeterminate';\n\t\treturn checked ? 'checked' : 'unchecked';\n\t});\n\tprotected readonly _ariaChecked = computed(() => {\n\t\tconst checked = this.checked();\n\t\tif (checked === 'indeterminate') return 'mixed';\n\t\treturn checked ? 'true' : 'false';\n\t});\n\tprotected readonly _value = computed(() => {\n\t\tconst checked = this.checked();\n\t\tif (checked === 'indeterminate') return '';\n\t\treturn checked ? 'on' : 'off';\n\t});\n\n\t/** Used to set the id on the underlying input element. */\n\tpublic readonly id = input<string | null>(null);\n\tprotected readonly hostId = computed(() => (this.id() ? this.id() + CONTAINER_POST_FIX : null));\n\n\t/** Used to set the name attribute on the underlying input element. */\n\tpublic readonly name = input<string | null>(null);\n\tprotected readonly hostName = computed(() => (this.name() ? this.name() + CONTAINER_POST_FIX : null));\n\n\t/** Used to set the aria-label attribute on the underlying input element. */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/** Used to set the aria-labelledby attribute on the underlying input element. */\n\tpublic readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n\tpublic readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n\n\tpublic readonly required = input(false, { transform: booleanAttribute });\n\n\tpublic readonly disabled = input(false, { transform: booleanAttribute });\n\n\tprotected readonly state = computed(() => ({\n\t\tdisabled: signal(this.disabled()),\n\t}));\n\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprotected _onChange: ChangeFn<BrnCheckboxValue> = () => {};\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onTouched: TouchFn = () => {};\n\n\tpublic readonly checkbox = viewChild.required<ElementRef<HTMLInputElement>>('checkBox');\n\n\tpublic readonly changed = output<BrnCheckboxValue>();\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst parent = this._renderer.parentNode(this._elementRef.nativeElement);\n\t\t\tif (!parent) return;\n\t\t\t// check if parent is a label and assume it is for this checkbox\n\t\t\tif (parent?.tagName === 'LABEL') {\n\t\t\t\tthis._renderer.setAttribute(parent, 'data-disabled', this.state().disabled() ? 'true' : 'false');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this._isBrowser) return;\n\n\t\t\tconst label = parent?.querySelector(`label[for=\"${this.id()}\"]`);\n\t\t\tif (!label) return;\n\t\t\tthis._renderer.setAttribute(label, 'data-disabled', this.state().disabled() ? 'true' : 'false');\n\t\t});\n\t}\n\n\t@HostListener('click', ['$event'])\n\t@HostListener('keyup.space', ['$event'])\n\t@HostListener('keyup.enter', ['$event'])\n\ttoggle(event: Event) {\n\t\tif (this.state().disabled()) return;\n\t\tevent.preventDefault();\n\t\tconst previousChecked = this.checked();\n\t\tthis.checked.set(previousChecked === 'indeterminate' ? true : !previousChecked);\n\t\tthis._onChange(!previousChecked);\n\t\tthis.changed.emit(!previousChecked);\n\t}\n\n\tngAfterContentInit() {\n\t\tthis._focusMonitor.monitor(this._elementRef, true).subscribe((focusOrigin) => {\n\t\t\tif (focusOrigin) this._focused.set(true);\n\t\t\tif (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n\t\t\t\tthis._focusVisible.set(true);\n\t\t\t}\n\t\t\tif (!focusOrigin) {\n\t\t\t\t// When a focused element becomes disabled, the browser *immediately* fires a blur event.\n\t\t\t\t// Angular does not expect events to be raised during change detection, so any state\n\t\t\t\t// change (such as a form control's ng-touched) will cause a changed-after-checked error.\n\t\t\t\t// See https://github.com/angular/angular/issues/17793. To work around this, we defer\n\t\t\t\t// telling the form control it has been touched until the next tick.\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tthis._focusVisible.set(false);\n\t\t\t\t\tthis._focused.set(false);\n\t\t\t\t\tthis._onTouched();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.checkbox().nativeElement.indeterminate = this.checked() === 'indeterminate';\n\t\tif (this.checkbox().nativeElement.indeterminate) {\n\t\t\tthis.checkbox().nativeElement.value = 'indeterminate';\n\t\t} else {\n\t\t\tthis.checkbox().nativeElement.value = this.checked() ? 'on' : 'off';\n\t\t}\n\t\tthis.checkbox().nativeElement.dispatchEvent(new Event('change'));\n\t}\n\n\tngOnDestroy() {\n\t\tthis._focusMonitor.stopMonitoring(this._elementRef);\n\t}\n\n\twriteValue(value: BrnCheckboxValue): void {\n\t\tif (value === 'indeterminate') {\n\t\t\tthis.checked.set('indeterminate');\n\t\t} else {\n\t\t\tthis.checked.set(!!value);\n\t\t}\n\t}\n\n\tregisterOnChange(fn: ChangeFn<BrnCheckboxValue>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\t/** Implemented as a part of ControlValueAccessor. */\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.state().disabled.set(isDisabled);\n\t}\n\n\t/**\n\t * If the space key is pressed, prevent the default action to stop the page from scrolling.\n\t */\n\t@HostListener('keydown.space', ['$event'])\n\tprotected preventScrolling(event: KeyboardEvent): void {\n\t\tevent.preventDefault();\n\t}\n}\n\ntype BrnCheckboxValue = boolean | 'indeterminate';\n","import { NgModule } from '@angular/core';\n\nimport { BrnCheckboxComponent } from './lib/brn-checkbox.component';\n\nexport * from './lib/brn-checkbox.component';\n\nexport const BrnCheckboxImports = [BrnCheckboxComponent] as const;\n\n@NgModule({\n\timports: [...BrnCheckboxImports],\n\texports: [...BrnCheckboxImports],\n})\nexport class BrnCheckboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ // this file can't be empty, otherwise the build will fail
2
+ var index = true;
3
+
4
+ /**
5
+ * Generated bundle index. Do not edit.
6
+ */
7
+ //# sourceMappingURL=spartan-ng-brain.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spartan-ng-brain.mjs","sources":["../../../../libs/brain/src/index.ts","../../../../libs/brain/src/spartan-ng-brain.ts"],"sourcesContent":["// this file can't be empty, otherwise the build will fail\nexport default true;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AACA,YAAe,IAAI;;ACDnB;;AAEG"}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ declare const _default: true;
2
+ export default _default;
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@spartan-ng/brain",
3
+ "version": "0.0.1-alpha.372",
4
+ "peerDependencies": {
5
+ "@angular/common": ">=18.0.0",
6
+ "@angular/core": ">=18.0.0",
7
+ "@angular/cdk": ">=18.0.0",
8
+ "@angular/forms": ">=18.0.0",
9
+ "@spartan-ng/ui-forms-brain": "0.0.1-alpha.372"
10
+ },
11
+ "dependencies": {
12
+ "tslib": "^2.3.0"
13
+ },
14
+ "sideEffects": false,
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "module": "fesm2022/spartan-ng-brain.mjs",
19
+ "typings": "index.d.ts",
20
+ "exports": {
21
+ "./package.json": {
22
+ "default": "./package.json"
23
+ },
24
+ ".": {
25
+ "types": "./index.d.ts",
26
+ "esm2022": "./esm2022/spartan-ng-brain.mjs",
27
+ "esm": "./esm2022/spartan-ng-brain.mjs",
28
+ "default": "./fesm2022/spartan-ng-brain.mjs"
29
+ },
30
+ "./checkbox": {
31
+ "types": "./checkbox/index.d.ts",
32
+ "esm2022": "./esm2022/checkbox/spartan-ng-brain-checkbox.mjs",
33
+ "esm": "./esm2022/checkbox/spartan-ng-brain-checkbox.mjs",
34
+ "default": "./fesm2022/spartan-ng-brain-checkbox.mjs"
35
+ }
36
+ }
37
+ }