@radix-ng/primitives 1.0.0-beta.0 → 1.0.0-beta.2
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/fesm2022/radix-ng-primitives-accordion.mjs +2 -2
- package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-calendar.mjs +109 -84
- package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +2 -2
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-combobox.mjs +1923 -0
- package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-context-menu.mjs +1 -1
- package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +591 -470
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-cropper.mjs +287 -308
- package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +66 -15
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-dialog.mjs +1 -1
- package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-drawer.mjs +7 -106
- package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs +305 -24
- package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +86 -6
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-fieldset.mjs +1 -1
- package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-form.mjs +207 -0
- package/fesm2022/radix-ng-primitives-form.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-input.mjs +85 -4
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +413 -5
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1 -1
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +2 -2
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs +22 -5
- package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-preview-card.mjs +1 -1
- package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +923 -0
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-select.mjs +421 -224
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +3 -2
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +12 -3
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +27 -3
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toast.mjs +839 -0
- package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toolbar.mjs +2 -2
- package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tooltip.mjs +11 -3
- package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
- package/package.json +18 -2
- package/schematics/ng-add/index.js +57 -0
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.d.ts +1 -0
- package/schematics/ng-add/schema.json +6 -0
- package/types/radix-ng-primitives-accordion.d.ts +3 -2
- package/types/radix-ng-primitives-calendar.d.ts +38 -18
- package/types/radix-ng-primitives-checkbox.d.ts +5 -5
- package/types/radix-ng-primitives-collapsible.d.ts +2 -1
- package/types/radix-ng-primitives-combobox.d.ts +1265 -0
- package/types/radix-ng-primitives-context-menu.d.ts +3 -2
- package/types/radix-ng-primitives-core.d.ts +187 -56
- package/types/radix-ng-primitives-cropper.d.ts +89 -56
- package/types/radix-ng-primitives-date-field.d.ts +11 -5
- package/types/radix-ng-primitives-dialog.d.ts +2 -1
- package/types/radix-ng-primitives-drawer.d.ts +5 -27
- package/types/radix-ng-primitives-editable.d.ts +90 -13
- package/types/radix-ng-primitives-field.d.ts +74 -4
- package/types/radix-ng-primitives-fieldset.d.ts +3 -2
- package/types/radix-ng-primitives-focus-scope.d.ts +2 -1
- package/types/radix-ng-primitives-form.d.ts +124 -0
- package/types/radix-ng-primitives-input.d.ts +75 -5
- package/types/radix-ng-primitives-menu.d.ts +16 -4
- package/types/radix-ng-primitives-menubar.d.ts +2 -1
- package/types/radix-ng-primitives-meter.d.ts +3 -2
- package/types/radix-ng-primitives-navigation-menu.d.ts +1 -1
- package/types/radix-ng-primitives-number-field.d.ts +6 -6
- package/types/radix-ng-primitives-popover.d.ts +2 -1
- package/types/radix-ng-primitives-popper.d.ts +19 -2
- package/types/radix-ng-primitives-preview-card.d.ts +1 -1
- package/types/radix-ng-primitives-progress.d.ts +3 -2
- package/types/radix-ng-primitives-roving-focus.d.ts +4 -3
- package/types/radix-ng-primitives-scroll-area.d.ts +253 -0
- package/types/radix-ng-primitives-select.d.ts +296 -136
- package/types/radix-ng-primitives-slider.d.ts +1 -1
- package/types/radix-ng-primitives-switch.d.ts +1 -1
- package/types/radix-ng-primitives-tabs.d.ts +1 -1
- package/types/radix-ng-primitives-toast.d.ts +378 -0
- package/types/radix-ng-primitives-toggle-group.d.ts +2 -1
- package/types/radix-ng-primitives-toolbar.d.ts +3 -2
- package/types/radix-ng-primitives-tooltip.d.ts +3 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, model, input, booleanAttribute, numberAttribute, computed, signal,
|
|
3
|
-
import { createContext, watch } from '@radix-ng/primitives/core';
|
|
2
|
+
import { inject, model, input, booleanAttribute, numberAttribute, output, computed, linkedSignal, signal, effect, afterRenderEffect, Directive, ElementRef, afterNextRender, NgModule } from '@angular/core';
|
|
3
|
+
import { createContext, watch, ENTER } from '@radix-ng/primitives/core';
|
|
4
4
|
import * as i1 from '@radix-ng/primitives/dismissable-layer';
|
|
5
5
|
import { RdxFocusOutside, RdxPointerDownOutside } from '@radix-ng/primitives/dismissable-layer';
|
|
6
6
|
|
|
7
|
-
const [injectEditableRootContext, provideEditableRootContext] = createContext('EditableRoot');
|
|
7
|
+
const [injectEditableRootContext, provideEditableRootContext] = createContext('EditableRoot', 'components/editable');
|
|
8
8
|
const rootContext = () => {
|
|
9
9
|
const context = inject(RdxEditableRoot);
|
|
10
10
|
return {
|
|
@@ -15,16 +15,19 @@ const rootContext = () => {
|
|
|
15
15
|
isEditing: context.isEditing,
|
|
16
16
|
submitMode: context.submitMode,
|
|
17
17
|
activationMode: context.activationMode,
|
|
18
|
-
edit: context.edit,
|
|
19
|
-
cancel: context.cancel,
|
|
20
|
-
submit: context.submit,
|
|
18
|
+
edit: () => context.edit(),
|
|
19
|
+
cancel: () => context.cancel(),
|
|
20
|
+
submit: () => context.submit(),
|
|
21
21
|
maxLength: context.maxLength,
|
|
22
|
+
required: context.required,
|
|
22
23
|
startWithEditMode: context.startWithEditMode,
|
|
23
24
|
isEmpty: context.isEmpty,
|
|
24
25
|
readonly: context.readonly,
|
|
25
26
|
autoResize: context.autoResize,
|
|
26
27
|
selectOnFocus: context.selectOnFocus,
|
|
27
|
-
inputRef: context.inputRef
|
|
28
|
+
inputRef: context.inputRef,
|
|
29
|
+
previewRef: context.previewRef,
|
|
30
|
+
canActivateOnFocus: () => context.canActivateOnFocus()
|
|
28
31
|
};
|
|
29
32
|
};
|
|
30
33
|
/**
|
|
@@ -35,6 +38,8 @@ class RdxEditableRoot {
|
|
|
35
38
|
this.focusOutside = inject(RdxFocusOutside);
|
|
36
39
|
this.pointerDownOutside = inject(RdxPointerDownOutside);
|
|
37
40
|
this.value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
|
|
41
|
+
/** Uncontrolled initial value. */
|
|
42
|
+
this.defaultValue = input(...(ngDevMode ? [undefined, { debugName: "defaultValue" }] : /* istanbul ignore next */ []));
|
|
38
43
|
this.placeholder = input('Enter text...', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
39
44
|
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
40
45
|
this.readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
@@ -48,18 +53,28 @@ class RdxEditableRoot {
|
|
|
48
53
|
this.activationMode = input('focus', ...(ngDevMode ? [{ debugName: "activationMode" }] : /* istanbul ignore next */ []));
|
|
49
54
|
this.autoResize = input(false, { ...(ngDevMode ? { debugName: "autoResize" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
50
55
|
this.required = input(false, { ...(ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
51
|
-
|
|
56
|
+
/** Emitted when the value is committed (on submit). */
|
|
57
|
+
this.onValueChange = output();
|
|
58
|
+
this.isEmpty = computed(() => {
|
|
59
|
+
const value = this.value();
|
|
60
|
+
return value === undefined || value === null || value === '';
|
|
61
|
+
}, ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
|
|
52
62
|
this.$placeholder = computed(() => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
: this.placeholder();
|
|
63
|
+
const placeholder = this.placeholder();
|
|
64
|
+
return { edit: placeholder, preview: placeholder };
|
|
56
65
|
}, ...(ngDevMode ? [{ debugName: "$placeholder" }] : /* istanbul ignore next */ []));
|
|
57
|
-
|
|
58
|
-
this.
|
|
66
|
+
/** Seeded from `startWithEditMode`; flipped imperatively by edit/submit/cancel. */
|
|
67
|
+
this.isEditing = linkedSignal(() => this.startWithEditMode(), ...(ngDevMode ? [{ debugName: "isEditing" }] : /* istanbul ignore next */ []));
|
|
68
|
+
/** Working copy of the value while editing; reseeded whenever the committed value changes. */
|
|
69
|
+
this.inputValue = linkedSignal(() => this.value(), ...(ngDevMode ? [{ debugName: "inputValue" }] : /* istanbul ignore next */ []));
|
|
59
70
|
this.inputRef = signal(undefined, ...(ngDevMode ? [{ debugName: "inputRef" }] : /* istanbul ignore next */ []));
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
71
|
+
this.previewRef = signal(undefined, ...(ngDevMode ? [{ debugName: "previewRef" }] : /* istanbul ignore next */ []));
|
|
72
|
+
this.restoreFocusOnExit = false;
|
|
73
|
+
/** True while focus is being restored programmatically, to avoid re-entering edit mode. */
|
|
74
|
+
this.suppressFocusActivation = false;
|
|
75
|
+
effect(() => {
|
|
76
|
+
if (this.defaultValue() !== undefined) {
|
|
77
|
+
this.value.set(this.defaultValue());
|
|
63
78
|
}
|
|
64
79
|
});
|
|
65
80
|
watch([this.isEditing], ([value]) => {
|
|
@@ -68,11 +83,24 @@ class RdxEditableRoot {
|
|
|
68
83
|
});
|
|
69
84
|
this.pointerDownOutside.pointerDownOutside.subscribe(() => this.handleDismiss());
|
|
70
85
|
this.focusOutside.focusOutside.subscribe(() => this.handleDismiss());
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
86
|
+
// Restore focus to the preview after leaving edit mode, once the input is hidden
|
|
87
|
+
// and the preview is visible again. Runs after render so the DOM reflects isEditing.
|
|
88
|
+
afterRenderEffect(() => {
|
|
89
|
+
const editing = this.isEditing();
|
|
90
|
+
if (!editing && this.restoreFocusOnExit) {
|
|
91
|
+
this.restoreFocusOnExit = false;
|
|
92
|
+
const preview = this.previewRef();
|
|
93
|
+
if (preview) {
|
|
94
|
+
this.suppressFocusActivation = true;
|
|
95
|
+
preview.focus({ preventScroll: true });
|
|
96
|
+
this.suppressFocusActivation = false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
74
99
|
});
|
|
75
100
|
}
|
|
101
|
+
canActivateOnFocus() {
|
|
102
|
+
return !this.suppressFocusActivation;
|
|
103
|
+
}
|
|
76
104
|
handleDismiss() {
|
|
77
105
|
if (this.isEditing()) {
|
|
78
106
|
if (this.submitMode() === 'blur' || this.submitMode() === 'both') {
|
|
@@ -84,18 +112,23 @@ class RdxEditableRoot {
|
|
|
84
112
|
}
|
|
85
113
|
}
|
|
86
114
|
submit() {
|
|
87
|
-
|
|
115
|
+
const value = this.inputValue() ?? '';
|
|
116
|
+
this.value.set(value);
|
|
117
|
+
this.onValueChange.emit(value);
|
|
118
|
+
this.restoreFocusOnExit = true;
|
|
88
119
|
this.isEditing.set(false);
|
|
89
120
|
}
|
|
90
121
|
cancel() {
|
|
122
|
+
this.inputValue.set(this.value());
|
|
123
|
+
this.restoreFocusOnExit = true;
|
|
91
124
|
this.isEditing.set(false);
|
|
92
125
|
}
|
|
93
126
|
edit() {
|
|
94
|
-
this.isEditing.set(true);
|
|
95
127
|
this.inputValue.set(this.value());
|
|
128
|
+
this.isEditing.set(true);
|
|
96
129
|
}
|
|
97
130
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
98
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableRoot, isStandalone: true, selector: "[rdxEditableRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, selectOnFocus: { classPropertyName: "selectOnFocus", publicName: "selectOnFocus", isSignal: true, isRequired: false, transformFunction: null }, submitMode: { classPropertyName: "submitMode", publicName: "submitMode", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, startWithEditMode: { classPropertyName: "startWithEditMode", publicName: "startWithEditMode", isSignal: true, isRequired: false, transformFunction: null }, activationMode: { classPropertyName: "activationMode", publicName: "activationMode", isSignal: true, isRequired: false, transformFunction: null }, autoResize: { classPropertyName: "autoResize", publicName: "autoResize", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "attr.data-dismissable-layer": "\"\"" } }, providers: [provideEditableRootContext(rootContext)], exportAs: ["rdxEditableRoot"], hostDirectives: [{ directive: i1.RdxFocusOutside }, { directive: i1.RdxPointerDownOutside }], ngImport: i0 }); }
|
|
131
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableRoot, isStandalone: true, selector: "[rdxEditableRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, selectOnFocus: { classPropertyName: "selectOnFocus", publicName: "selectOnFocus", isSignal: true, isRequired: false, transformFunction: null }, submitMode: { classPropertyName: "submitMode", publicName: "submitMode", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, startWithEditMode: { classPropertyName: "startWithEditMode", publicName: "startWithEditMode", isSignal: true, isRequired: false, transformFunction: null }, activationMode: { classPropertyName: "activationMode", publicName: "activationMode", isSignal: true, isRequired: false, transformFunction: null }, autoResize: { classPropertyName: "autoResize", publicName: "autoResize", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onValueChange: "onValueChange" }, host: { properties: { "attr.data-dismissable-layer": "\"\"" } }, providers: [provideEditableRootContext(rootContext)], exportAs: ["rdxEditableRoot"], hostDirectives: [{ directive: i1.RdxFocusOutside }, { directive: i1.RdxPointerDownOutside }], ngImport: i0 }); }
|
|
99
132
|
}
|
|
100
133
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableRoot, decorators: [{
|
|
101
134
|
type: Directive,
|
|
@@ -108,11 +141,259 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
108
141
|
'[attr.data-dismissable-layer]': '""'
|
|
109
142
|
}
|
|
110
143
|
}]
|
|
111
|
-
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], selectOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectOnFocus", required: false }] }], submitMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitMode", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], startWithEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "startWithEditMode", required: false }] }], activationMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "activationMode", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }] } });
|
|
144
|
+
}], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], selectOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectOnFocus", required: false }] }], submitMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitMode", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], startWithEditMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "startWithEditMode", required: false }] }], activationMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "activationMode", required: false }] }], autoResize: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoResize", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], onValueChange: [{ type: i0.Output, args: ["onValueChange"] }] } });
|
|
145
|
+
|
|
146
|
+
class RdxEditableArea {
|
|
147
|
+
constructor() {
|
|
148
|
+
this.rootContext = injectEditableRootContext();
|
|
149
|
+
}
|
|
150
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableArea, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
151
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxEditableArea, isStandalone: true, selector: "[rdxEditableArea]", host: { properties: { "attr.data-placeholder-shown": "rootContext.isEditing() ? undefined : \"\"", "attr.data-focus": "rootContext.isEditing() ? \"\" : undefined", "attr.data-empty": "rootContext.isEmpty() ? \"\" : undefined", "attr.data-readonly": "rootContext.readonly() ? \"\" : undefined", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.data-auto-resize": "rootContext.autoResize() ? \"\" : undefined", "style.display": "rootContext.autoResize() ? \"inline-grid\" : undefined" } }, ngImport: i0 }); }
|
|
152
|
+
}
|
|
153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableArea, decorators: [{
|
|
154
|
+
type: Directive,
|
|
155
|
+
args: [{
|
|
156
|
+
selector: '[rdxEditableArea]',
|
|
157
|
+
host: {
|
|
158
|
+
'[attr.data-placeholder-shown]': 'rootContext.isEditing() ? undefined : ""',
|
|
159
|
+
'[attr.data-focus]': 'rootContext.isEditing() ? "" : undefined',
|
|
160
|
+
'[attr.data-empty]': 'rootContext.isEmpty() ? "" : undefined',
|
|
161
|
+
'[attr.data-readonly]': 'rootContext.readonly() ? "" : undefined',
|
|
162
|
+
'[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
|
|
163
|
+
'[attr.data-auto-resize]': 'rootContext.autoResize() ? "" : undefined',
|
|
164
|
+
// Auto-resize overlays the preview and input in a single grid cell so the area
|
|
165
|
+
// sizes to the larger of the two. This is the layout mechanism for the feature,
|
|
166
|
+
// not theming; consumers style everything else via the data-* attributes above.
|
|
167
|
+
'[style.display]': 'rootContext.autoResize() ? "inline-grid" : undefined'
|
|
168
|
+
}
|
|
169
|
+
}]
|
|
170
|
+
}] });
|
|
171
|
+
|
|
172
|
+
class RdxEditableCancelTrigger {
|
|
173
|
+
constructor() {
|
|
174
|
+
this.rootContext = injectEditableRootContext();
|
|
175
|
+
/** Accessible label for the trigger. Override to localize. */
|
|
176
|
+
this.ariaLabel = input('cancel', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
177
|
+
}
|
|
178
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableCancelTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
179
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableCancelTrigger, isStandalone: true, selector: "button[rdxEditableCancelTrigger]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "rootContext.cancel()" }, properties: { "attr.aria-label": "ariaLabel()", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.disabled": "rootContext.disabled() ? \"\" : undefined", "attr.hidden": "rootContext.isEditing() ? \"\" : undefined" } }, ngImport: i0 }); }
|
|
180
|
+
}
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableCancelTrigger, decorators: [{
|
|
182
|
+
type: Directive,
|
|
183
|
+
args: [{
|
|
184
|
+
selector: 'button[rdxEditableCancelTrigger]',
|
|
185
|
+
host: {
|
|
186
|
+
type: 'button',
|
|
187
|
+
'[attr.aria-label]': 'ariaLabel()',
|
|
188
|
+
'[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
|
|
189
|
+
'[attr.disabled]': 'rootContext.disabled() ? "" : undefined',
|
|
190
|
+
'[attr.hidden]': 'rootContext.isEditing() ? "" : undefined',
|
|
191
|
+
'(click)': 'rootContext.cancel()'
|
|
192
|
+
}
|
|
193
|
+
}]
|
|
194
|
+
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
|
|
195
|
+
|
|
196
|
+
class RdxEditableEditTrigger {
|
|
197
|
+
constructor() {
|
|
198
|
+
this.rootContext = injectEditableRootContext();
|
|
199
|
+
/** Accessible label for the trigger. Override to localize. */
|
|
200
|
+
this.ariaLabel = input('edit', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
201
|
+
}
|
|
202
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableEditTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
203
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableEditTrigger, isStandalone: true, selector: "button[rdxEditableEditTrigger]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "rootContext.edit()" }, properties: { "attr.aria-label": "ariaLabel()", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.disabled": "rootContext.disabled() ? \"\" : undefined", "attr.hidden": "rootContext.isEditing() ? \"\" : undefined" } }, ngImport: i0 }); }
|
|
204
|
+
}
|
|
205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableEditTrigger, decorators: [{
|
|
206
|
+
type: Directive,
|
|
207
|
+
args: [{
|
|
208
|
+
selector: 'button[rdxEditableEditTrigger]',
|
|
209
|
+
host: {
|
|
210
|
+
type: 'button',
|
|
211
|
+
'[attr.aria-label]': 'ariaLabel()',
|
|
212
|
+
'[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
|
|
213
|
+
'[attr.disabled]': 'rootContext.disabled() ? "" : undefined',
|
|
214
|
+
'[attr.hidden]': 'rootContext.isEditing() ? "" : undefined',
|
|
215
|
+
'(click)': 'rootContext.edit()'
|
|
216
|
+
}
|
|
217
|
+
}]
|
|
218
|
+
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
|
|
219
|
+
|
|
220
|
+
class RdxEditableInput {
|
|
221
|
+
constructor() {
|
|
222
|
+
this.inputRef = inject(ElementRef).nativeElement;
|
|
223
|
+
this.rootContext = injectEditableRootContext();
|
|
224
|
+
/** Accessible label for the input. Override to localize. */
|
|
225
|
+
this.ariaLabel = input('editable input', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
226
|
+
this.placeholder = computed(() => this.rootContext.placeholder().edit, ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
227
|
+
this.disabled = computed(() => this.rootContext.disabled(), ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
228
|
+
afterNextRender(() => {
|
|
229
|
+
this.rootContext.inputRef.set(this.inputRef);
|
|
230
|
+
});
|
|
231
|
+
// Focus (and optionally select) the input whenever it enters edit mode.
|
|
232
|
+
// Runs after render so the input is no longer hidden, and is browser-only (SSR-safe).
|
|
233
|
+
afterRenderEffect(() => {
|
|
234
|
+
const editing = this.rootContext.isEditing();
|
|
235
|
+
const el = this.rootContext.inputRef();
|
|
236
|
+
if (editing && el) {
|
|
237
|
+
el.focus({ preventScroll: true });
|
|
238
|
+
if (this.rootContext.selectOnFocus()) {
|
|
239
|
+
el.select();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
handleInput(event) {
|
|
245
|
+
this.rootContext.inputValue.set(event.target.value);
|
|
246
|
+
}
|
|
247
|
+
handleSubmitKeyDown(event) {
|
|
248
|
+
const keyEvent = event;
|
|
249
|
+
if ((this.rootContext.submitMode() === 'enter' || this.rootContext.submitMode() === 'both') &&
|
|
250
|
+
keyEvent.key === ENTER &&
|
|
251
|
+
!keyEvent.shiftKey &&
|
|
252
|
+
!keyEvent.metaKey) {
|
|
253
|
+
this.rootContext.submit();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
257
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableInput, isStandalone: true, selector: "input[rdxEditableInput]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "handleInput($event)", "keydown.escape": "rootContext.cancel()", "keydown.enter": "handleSubmitKeyDown($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-required": "rootContext.required() ? \"true\" : undefined", "attr.data-disabled": "disabled() ? \"\" : undefined", "attr.data-readonly": "rootContext.readonly() ? \"\" : undefined", "readonly": "rootContext.readonly()", "required": "rootContext.required()", "attr.disabled": "disabled() ? \"\" : undefined", "attr.maxlength": "rootContext.maxLength()", "attr.value": "rootContext.inputValue()", "attr.placeholder": "placeholder()", "attr.data-auto-resize": "rootContext.autoResize() ? \"\" : undefined", "attr.hidden": "rootContext.autoResize() || rootContext.isEditing() ? undefined : \"\"", "style.all": "rootContext.autoResize() ? \"unset\" : undefined", "style.grid-area": "rootContext.autoResize() ? \"1 / 1 / auto / auto\" : undefined", "style.visibility": "rootContext.autoResize() && !rootContext.isEditing() ? \"hidden\" : undefined" } }, ngImport: i0 }); }
|
|
258
|
+
}
|
|
259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableInput, decorators: [{
|
|
260
|
+
type: Directive,
|
|
261
|
+
args: [{
|
|
262
|
+
selector: 'input[rdxEditableInput]',
|
|
263
|
+
host: {
|
|
264
|
+
'[attr.aria-label]': 'ariaLabel()',
|
|
265
|
+
'[attr.aria-required]': 'rootContext.required() ? "true" : undefined',
|
|
266
|
+
'[attr.data-disabled]': 'disabled() ? "" : undefined',
|
|
267
|
+
'[attr.data-readonly]': 'rootContext.readonly() ? "" : undefined',
|
|
268
|
+
'[readonly]': 'rootContext.readonly()',
|
|
269
|
+
'[required]': 'rootContext.required()',
|
|
270
|
+
'[attr.disabled]': 'disabled() ? "" : undefined',
|
|
271
|
+
'[attr.maxlength]': 'rootContext.maxLength()',
|
|
272
|
+
'[attr.value]': 'rootContext.inputValue()',
|
|
273
|
+
'[attr.placeholder]': 'placeholder()',
|
|
274
|
+
'[attr.data-auto-resize]': 'rootContext.autoResize() ? "" : undefined',
|
|
275
|
+
'[attr.hidden]': 'rootContext.autoResize() || rootContext.isEditing() ? undefined : ""',
|
|
276
|
+
// Auto-resize overlay mechanism (see RdxEditableArea): strip native chrome with `all: unset`
|
|
277
|
+
// and share the preview's grid cell so the input inherits its measured width.
|
|
278
|
+
'[style.all]': 'rootContext.autoResize() ? "unset" : undefined',
|
|
279
|
+
'[style.grid-area]': 'rootContext.autoResize() ? "1 / 1 / auto / auto" : undefined',
|
|
280
|
+
'[style.visibility]': 'rootContext.autoResize() && !rootContext.isEditing() ? "hidden" : undefined',
|
|
281
|
+
'(input)': 'handleInput($event)',
|
|
282
|
+
'(keydown.escape)': 'rootContext.cancel()',
|
|
283
|
+
'(keydown.enter)': 'handleSubmitKeyDown($event)'
|
|
284
|
+
}
|
|
285
|
+
}]
|
|
286
|
+
}], ctorParameters: () => [], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
|
|
287
|
+
|
|
288
|
+
class RdxEditablePreview {
|
|
289
|
+
constructor() {
|
|
290
|
+
this.elementRef = inject(ElementRef);
|
|
291
|
+
this.rootContext = injectEditableRootContext();
|
|
292
|
+
this.placeholder = computed(() => {
|
|
293
|
+
return this.rootContext.placeholder().preview;
|
|
294
|
+
}, ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
295
|
+
afterNextRender(() => {
|
|
296
|
+
this.rootContext.previewRef.set(this.elementRef.nativeElement);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
handleFocus() {
|
|
300
|
+
// Ignore focus that we restored programmatically after leaving edit mode,
|
|
301
|
+
// otherwise focus-mode activation would immediately re-open the editor.
|
|
302
|
+
if (this.rootContext.activationMode() === 'focus' && this.rootContext.canActivateOnFocus()) {
|
|
303
|
+
this.rootContext.edit();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
handleDoubleClick() {
|
|
307
|
+
if (this.rootContext.activationMode() === 'dblclick') {
|
|
308
|
+
this.rootContext.edit();
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditablePreview, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
312
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxEditablePreview, isStandalone: true, selector: "span[rdxEditablePreview]", host: { attributes: { "tabindex": "0" }, listeners: { "focusin": "handleFocus()", "dblclick": "handleDoubleClick()" }, properties: { "attr.data-placeholder-shown": "rootContext.isEditing() ? undefined : \"\"", "attr.data-auto-resize": "rootContext.autoResize() ? \"\" : undefined", "attr.hidden": "!rootContext.autoResize() && rootContext.isEditing() ? \"\" : undefined", "style.grid-area": "rootContext.autoResize() ? \"1 / 1 / auto / auto\" : undefined", "style.white-space": "rootContext.autoResize() ? \"pre\" : undefined", "style.visibility": "rootContext.autoResize() && rootContext.isEditing() ? \"hidden\" : undefined" } }, exportAs: ["rdxEditablePreview"], ngImport: i0 }); }
|
|
313
|
+
}
|
|
314
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditablePreview, decorators: [{
|
|
315
|
+
type: Directive,
|
|
316
|
+
args: [{
|
|
317
|
+
selector: 'span[rdxEditablePreview]',
|
|
318
|
+
exportAs: 'rdxEditablePreview',
|
|
319
|
+
host: {
|
|
320
|
+
tabindex: '0',
|
|
321
|
+
'[attr.data-placeholder-shown]': 'rootContext.isEditing() ? undefined : ""',
|
|
322
|
+
'[attr.data-auto-resize]': 'rootContext.autoResize() ? "" : undefined',
|
|
323
|
+
'[attr.hidden]': '!rootContext.autoResize() && rootContext.isEditing() ? "" : undefined',
|
|
324
|
+
// Auto-resize overlay mechanism (see RdxEditableArea): share the grid cell with the input
|
|
325
|
+
// and stay measurable so the area keeps the preview's width while editing. `white-space: pre`
|
|
326
|
+
// keeps that measured width stable. Cosmetics (overflow, ellipsis, user-select) are left to
|
|
327
|
+
// the consumer via [data-auto-resize].
|
|
328
|
+
'[style.grid-area]': 'rootContext.autoResize() ? "1 / 1 / auto / auto" : undefined',
|
|
329
|
+
'[style.white-space]': 'rootContext.autoResize() ? "pre" : undefined',
|
|
330
|
+
'[style.visibility]': 'rootContext.autoResize() && rootContext.isEditing() ? "hidden" : undefined',
|
|
331
|
+
'(focusin)': 'handleFocus()',
|
|
332
|
+
'(dblclick)': 'handleDoubleClick()'
|
|
333
|
+
}
|
|
334
|
+
}]
|
|
335
|
+
}], ctorParameters: () => [] });
|
|
336
|
+
|
|
337
|
+
class RdxEditableSubmitTrigger {
|
|
338
|
+
constructor() {
|
|
339
|
+
this.rootContext = injectEditableRootContext();
|
|
340
|
+
/** Accessible label for the trigger. Override to localize. */
|
|
341
|
+
this.ariaLabel = input('submit', { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
342
|
+
}
|
|
343
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableSubmitTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
344
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxEditableSubmitTrigger, isStandalone: true, selector: "button[rdxEditableSubmitTrigger]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "button" }, listeners: { "click": "rootContext.submit()" }, properties: { "attr.aria-label": "ariaLabel()", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.disabled": "rootContext.disabled() ? \"\" : undefined" } }, ngImport: i0 }); }
|
|
345
|
+
}
|
|
346
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableSubmitTrigger, decorators: [{
|
|
347
|
+
type: Directive,
|
|
348
|
+
args: [{
|
|
349
|
+
selector: 'button[rdxEditableSubmitTrigger]',
|
|
350
|
+
host: {
|
|
351
|
+
type: 'button',
|
|
352
|
+
'[attr.aria-label]': 'ariaLabel()',
|
|
353
|
+
'[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
|
|
354
|
+
'[attr.disabled]': 'rootContext.disabled() ? "" : undefined',
|
|
355
|
+
'(click)': 'rootContext.submit()'
|
|
356
|
+
}
|
|
357
|
+
}]
|
|
358
|
+
}], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
|
|
359
|
+
|
|
360
|
+
const _imports = [
|
|
361
|
+
RdxEditableRoot,
|
|
362
|
+
RdxEditableArea,
|
|
363
|
+
RdxEditablePreview,
|
|
364
|
+
RdxEditableInput,
|
|
365
|
+
RdxEditableEditTrigger,
|
|
366
|
+
RdxEditableSubmitTrigger,
|
|
367
|
+
RdxEditableCancelTrigger
|
|
368
|
+
];
|
|
369
|
+
class RdxEditableModule {
|
|
370
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
371
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableModule, imports: [RdxEditableRoot,
|
|
372
|
+
RdxEditableArea,
|
|
373
|
+
RdxEditablePreview,
|
|
374
|
+
RdxEditableInput,
|
|
375
|
+
RdxEditableEditTrigger,
|
|
376
|
+
RdxEditableSubmitTrigger,
|
|
377
|
+
RdxEditableCancelTrigger], exports: [RdxEditableRoot,
|
|
378
|
+
RdxEditableArea,
|
|
379
|
+
RdxEditablePreview,
|
|
380
|
+
RdxEditableInput,
|
|
381
|
+
RdxEditableEditTrigger,
|
|
382
|
+
RdxEditableSubmitTrigger,
|
|
383
|
+
RdxEditableCancelTrigger] }); }
|
|
384
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableModule }); }
|
|
385
|
+
}
|
|
386
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxEditableModule, decorators: [{
|
|
387
|
+
type: NgModule,
|
|
388
|
+
args: [{
|
|
389
|
+
imports: [..._imports],
|
|
390
|
+
exports: [..._imports]
|
|
391
|
+
}]
|
|
392
|
+
}] });
|
|
112
393
|
|
|
113
394
|
/**
|
|
114
395
|
* Generated bundle index. Do not edit.
|
|
115
396
|
*/
|
|
116
397
|
|
|
117
|
-
export { RdxEditableRoot, injectEditableRootContext, provideEditableRootContext };
|
|
398
|
+
export { RdxEditableArea, RdxEditableCancelTrigger, RdxEditableEditTrigger, RdxEditableInput, RdxEditableModule, RdxEditablePreview, RdxEditableRoot, RdxEditableSubmitTrigger, injectEditableRootContext, provideEditableRootContext };
|
|
118
399
|
//# sourceMappingURL=radix-ng-primitives-editable.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radix-ng-primitives-editable.mjs","sources":["../../../packages/primitives/editable/src/editable-root.ts","../../../packages/primitives/editable/radix-ng-primitives-editable.ts"],"sourcesContent":["import {\n afterNextRender,\n booleanAttribute,\n computed,\n Directive,\n inject,\n input,\n model,\n numberAttribute,\n Signal,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { BooleanInput, createContext, NumberInput, watch } from '@radix-ng/primitives/core';\nimport { RdxFocusOutside, RdxPointerDownOutside } from '@radix-ng/primitives/dismissable-layer';\n\ntype EditableRootContext = {\n disabled: Signal<boolean>;\n value: Signal<string | null | undefined>;\n inputValue: WritableSignal<string | undefined>;\n placeholder: Signal<{ edit: string; preview: string }>;\n isEditing: Signal<boolean>;\n submitMode: Signal<SubmitMode>;\n activationMode: Signal<ActivationMode>;\n edit: () => void;\n cancel: () => void;\n submit: () => void;\n maxLength: Signal<number | undefined>;\n startWithEditMode: Signal<boolean>;\n isEmpty: Signal<boolean>;\n readonly: Signal<boolean>;\n selectOnFocus: Signal<boolean>;\n autoResize: Signal<boolean>;\n inputRef: WritableSignal<HTMLInputElement | undefined>;\n};\n\nexport const [injectEditableRootContext, provideEditableRootContext] =\n createContext<EditableRootContext>('EditableRoot');\n\nconst rootContext = (): EditableRootContext => {\n const context = inject(RdxEditableRoot);\n return {\n disabled: context.disabled,\n value: context.value,\n inputValue: context.inputValue,\n placeholder: context.$placeholder as Signal<{ edit: string; preview: string }>,\n isEditing: context.isEditing,\n submitMode: context.submitMode,\n activationMode: context.activationMode,\n edit: context.edit,\n cancel: context.cancel,\n submit: context.submit,\n maxLength: context.maxLength,\n startWithEditMode: context.startWithEditMode,\n isEmpty: context.isEmpty,\n readonly: context.readonly,\n autoResize: context.autoResize,\n selectOnFocus: context.selectOnFocus,\n inputRef: context.inputRef\n };\n};\n\ntype ActivationMode = 'focus' | 'dblclick' | 'none';\ntype SubmitMode = 'blur' | 'enter' | 'none' | 'both';\n\n/**\n * @group Components\n */\n@Directive({\n selector: '[rdxEditableRoot]',\n exportAs: 'rdxEditableRoot',\n providers: [provideEditableRootContext(rootContext)],\n hostDirectives: [RdxFocusOutside, RdxPointerDownOutside],\n host: {\n '[attr.data-dismissable-layer]': '\"\"'\n }\n})\nexport class RdxEditableRoot {\n private readonly focusOutside = inject(RdxFocusOutside);\n readonly pointerDownOutside = inject(RdxPointerDownOutside);\n\n readonly value = model<string>();\n\n readonly placeholder = input<string>('Enter text...');\n\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly selectOnFocus = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly submitMode = input<SubmitMode>('blur');\n\n readonly maxLength = input<number, NumberInput>(undefined, { transform: numberAttribute });\n\n /**\n * Whether to start with the edit mode active\n */\n readonly startWithEditMode = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly activationMode = input<ActivationMode>('focus');\n\n readonly autoResize = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly isEmpty = computed(() => this.value() === '');\n\n readonly $placeholder = computed(() => {\n return typeof this.placeholder() === 'string'\n ? { edit: this.placeholder(), preview: this.placeholder() }\n : this.placeholder();\n });\n\n readonly isEditing = signal(false);\n\n readonly inputValue = signal(this.value());\n\n readonly inputRef = signal<HTMLInputElement | undefined>(undefined);\n\n constructor() {\n watch([this.value], ([value]) => {\n if (value) {\n this.inputValue.set(this.value());\n }\n });\n\n watch([this.isEditing], ([value]) => {\n this.pointerDownOutside.enabled = value;\n this.focusOutside.enabled = value;\n });\n\n this.pointerDownOutside.pointerDownOutside.subscribe(() => this.handleDismiss());\n this.focusOutside.focusOutside.subscribe(() => this.handleDismiss());\n\n afterNextRender(() => {\n this.isEditing.set(this.startWithEditMode() ?? false);\n this.inputValue.set(this.value());\n });\n }\n\n handleDismiss() {\n if (this.isEditing()) {\n if (this.submitMode() === 'blur' || this.submitMode() === 'both') {\n this.submit();\n } else {\n this.cancel();\n }\n }\n }\n\n submit() {\n this.value.set(this.inputValue());\n this.isEditing.set(false);\n }\n\n cancel() {\n this.isEditing.set(false);\n }\n\n edit() {\n this.isEditing.set(true);\n this.inputValue.set(this.value());\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"radix-ng-primitives-editable.mjs","sources":["../../../packages/primitives/editable/src/editable-root.ts","../../../packages/primitives/editable/src/editable-area.ts","../../../packages/primitives/editable/src/editable-cancel-trigger.ts","../../../packages/primitives/editable/src/editable-edit-trigger.ts","../../../packages/primitives/editable/src/editable-input.ts","../../../packages/primitives/editable/src/editable-preview.ts","../../../packages/primitives/editable/src/editable-submit-trigger.ts","../../../packages/primitives/editable/index.ts","../../../packages/primitives/editable/radix-ng-primitives-editable.ts"],"sourcesContent":["import {\n afterRenderEffect,\n booleanAttribute,\n computed,\n Directive,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n numberAttribute,\n output,\n signal,\n Signal,\n WritableSignal\n} from '@angular/core';\nimport { BooleanInput, createContext, NumberInput, watch } from '@radix-ng/primitives/core';\nimport { RdxFocusOutside, RdxPointerDownOutside } from '@radix-ng/primitives/dismissable-layer';\n\nexport type EditableActivationMode = 'focus' | 'dblclick' | 'none';\nexport type EditableSubmitMode = 'blur' | 'enter' | 'none' | 'both';\n\nexport type EditableRootContext = {\n disabled: Signal<boolean>;\n value: Signal<string | undefined>;\n inputValue: WritableSignal<string | undefined>;\n placeholder: Signal<{ edit: string; preview: string }>;\n isEditing: Signal<boolean>;\n submitMode: Signal<EditableSubmitMode>;\n activationMode: Signal<EditableActivationMode>;\n edit: () => void;\n cancel: () => void;\n submit: () => void;\n maxLength: Signal<number | undefined>;\n required: Signal<boolean>;\n startWithEditMode: Signal<boolean>;\n isEmpty: Signal<boolean>;\n readonly: Signal<boolean>;\n selectOnFocus: Signal<boolean>;\n autoResize: Signal<boolean>;\n inputRef: WritableSignal<HTMLInputElement | undefined>;\n previewRef: WritableSignal<HTMLElement | undefined>;\n canActivateOnFocus: () => boolean;\n};\n\nexport const [injectEditableRootContext, provideEditableRootContext] = createContext<EditableRootContext>(\n 'EditableRoot',\n 'components/editable'\n);\n\nconst rootContext = (): EditableRootContext => {\n const context = inject(RdxEditableRoot);\n return {\n disabled: context.disabled,\n value: context.value,\n inputValue: context.inputValue,\n placeholder: context.$placeholder,\n isEditing: context.isEditing,\n submitMode: context.submitMode,\n activationMode: context.activationMode,\n edit: () => context.edit(),\n cancel: () => context.cancel(),\n submit: () => context.submit(),\n maxLength: context.maxLength,\n required: context.required,\n startWithEditMode: context.startWithEditMode,\n isEmpty: context.isEmpty,\n readonly: context.readonly,\n autoResize: context.autoResize,\n selectOnFocus: context.selectOnFocus,\n inputRef: context.inputRef,\n previewRef: context.previewRef,\n canActivateOnFocus: () => context.canActivateOnFocus()\n };\n};\n\n/**\n * @group Components\n */\n@Directive({\n selector: '[rdxEditableRoot]',\n exportAs: 'rdxEditableRoot',\n providers: [provideEditableRootContext(rootContext)],\n hostDirectives: [RdxFocusOutside, RdxPointerDownOutside],\n host: {\n '[attr.data-dismissable-layer]': '\"\"'\n }\n})\nexport class RdxEditableRoot {\n private readonly focusOutside = inject(RdxFocusOutside);\n private readonly pointerDownOutside = inject(RdxPointerDownOutside);\n\n readonly value = model<string>();\n\n /** Uncontrolled initial value. */\n readonly defaultValue = input<string>();\n\n readonly placeholder = input<string>('Enter text...');\n\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly readonly = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly selectOnFocus = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly submitMode = input<EditableSubmitMode>('blur');\n\n readonly maxLength = input<number | undefined, NumberInput>(undefined, { transform: numberAttribute });\n\n /**\n * Whether to start with the edit mode active\n */\n readonly startWithEditMode = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly activationMode = input<EditableActivationMode>('focus');\n\n readonly autoResize = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Emitted when the value is committed (on submit). */\n readonly onValueChange = output<string>();\n\n readonly isEmpty = computed(() => {\n const value = this.value();\n return value === undefined || value === null || value === '';\n });\n\n readonly $placeholder = computed(() => {\n const placeholder = this.placeholder();\n return { edit: placeholder, preview: placeholder };\n });\n\n /** Seeded from `startWithEditMode`; flipped imperatively by edit/submit/cancel. */\n readonly isEditing = linkedSignal(() => this.startWithEditMode());\n\n /** Working copy of the value while editing; reseeded whenever the committed value changes. */\n readonly inputValue = linkedSignal(() => this.value());\n\n readonly inputRef = signal<HTMLInputElement | undefined>(undefined);\n\n readonly previewRef = signal<HTMLElement | undefined>(undefined);\n\n private restoreFocusOnExit = false;\n\n /** True while focus is being restored programmatically, to avoid re-entering edit mode. */\n private suppressFocusActivation = false;\n\n constructor() {\n effect(() => {\n if (this.defaultValue() !== undefined) {\n this.value.set(this.defaultValue());\n }\n });\n\n watch([this.isEditing], ([value]) => {\n this.pointerDownOutside.enabled = value;\n this.focusOutside.enabled = value;\n });\n\n this.pointerDownOutside.pointerDownOutside.subscribe(() => this.handleDismiss());\n this.focusOutside.focusOutside.subscribe(() => this.handleDismiss());\n\n // Restore focus to the preview after leaving edit mode, once the input is hidden\n // and the preview is visible again. Runs after render so the DOM reflects isEditing.\n afterRenderEffect(() => {\n const editing = this.isEditing();\n if (!editing && this.restoreFocusOnExit) {\n this.restoreFocusOnExit = false;\n const preview = this.previewRef();\n if (preview) {\n this.suppressFocusActivation = true;\n preview.focus({ preventScroll: true });\n this.suppressFocusActivation = false;\n }\n }\n });\n }\n\n canActivateOnFocus(): boolean {\n return !this.suppressFocusActivation;\n }\n\n handleDismiss() {\n if (this.isEditing()) {\n if (this.submitMode() === 'blur' || this.submitMode() === 'both') {\n this.submit();\n } else {\n this.cancel();\n }\n }\n }\n\n submit() {\n const value = this.inputValue() ?? '';\n this.value.set(value);\n this.onValueChange.emit(value);\n this.restoreFocusOnExit = true;\n this.isEditing.set(false);\n }\n\n cancel() {\n this.inputValue.set(this.value());\n this.restoreFocusOnExit = true;\n this.isEditing.set(false);\n }\n\n edit() {\n this.inputValue.set(this.value());\n this.isEditing.set(true);\n }\n}\n","import { Directive } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: '[rdxEditableArea]',\n host: {\n '[attr.data-placeholder-shown]': 'rootContext.isEditing() ? undefined : \"\"',\n '[attr.data-focus]': 'rootContext.isEditing() ? \"\" : undefined',\n '[attr.data-empty]': 'rootContext.isEmpty() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.data-auto-resize]': 'rootContext.autoResize() ? \"\" : undefined',\n // Auto-resize overlays the preview and input in a single grid cell so the area\n // sizes to the larger of the two. This is the layout mechanism for the feature,\n // not theming; consumers style everything else via the data-* attributes above.\n '[style.display]': 'rootContext.autoResize() ? \"inline-grid\" : undefined'\n }\n})\nexport class RdxEditableArea {\n protected readonly rootContext = injectEditableRootContext();\n}\n","import { Directive, input } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'button[rdxEditableCancelTrigger]',\n host: {\n type: 'button',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.hidden]': 'rootContext.isEditing() ? \"\" : undefined',\n\n '(click)': 'rootContext.cancel()'\n }\n})\nexport class RdxEditableCancelTrigger {\n protected readonly rootContext = injectEditableRootContext();\n\n /** Accessible label for the trigger. Override to localize. */\n readonly ariaLabel = input<string>('cancel', { alias: 'aria-label' });\n}\n","import { Directive, input } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'button[rdxEditableEditTrigger]',\n host: {\n type: 'button',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.hidden]': 'rootContext.isEditing() ? \"\" : undefined',\n\n '(click)': 'rootContext.edit()'\n }\n})\nexport class RdxEditableEditTrigger {\n protected readonly rootContext = injectEditableRootContext();\n\n /** Accessible label for the trigger. Override to localize. */\n readonly ariaLabel = input<string>('edit', { alias: 'aria-label' });\n}\n","import { afterNextRender, afterRenderEffect, computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { ENTER } from '@radix-ng/primitives/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'input[rdxEditableInput]',\n host: {\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-required]': 'rootContext.required() ? \"true\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-readonly]': 'rootContext.readonly() ? \"\" : undefined',\n '[readonly]': 'rootContext.readonly()',\n '[required]': 'rootContext.required()',\n '[attr.disabled]': 'disabled() ? \"\" : undefined',\n '[attr.maxlength]': 'rootContext.maxLength()',\n '[attr.value]': 'rootContext.inputValue()',\n '[attr.placeholder]': 'placeholder()',\n '[attr.data-auto-resize]': 'rootContext.autoResize() ? \"\" : undefined',\n '[attr.hidden]': 'rootContext.autoResize() || rootContext.isEditing() ? undefined : \"\"',\n\n // Auto-resize overlay mechanism (see RdxEditableArea): strip native chrome with `all: unset`\n // and share the preview's grid cell so the input inherits its measured width.\n '[style.all]': 'rootContext.autoResize() ? \"unset\" : undefined',\n '[style.grid-area]': 'rootContext.autoResize() ? \"1 / 1 / auto / auto\" : undefined',\n '[style.visibility]': 'rootContext.autoResize() && !rootContext.isEditing() ? \"hidden\" : undefined',\n\n '(input)': 'handleInput($event)',\n '(keydown.escape)': 'rootContext.cancel()',\n '(keydown.enter)': 'handleSubmitKeyDown($event)'\n }\n})\nexport class RdxEditableInput {\n private readonly inputRef = inject(ElementRef).nativeElement as HTMLInputElement;\n\n protected readonly rootContext = injectEditableRootContext();\n\n /** Accessible label for the input. Override to localize. */\n readonly ariaLabel = input<string>('editable input', { alias: 'aria-label' });\n\n readonly placeholder = computed(() => this.rootContext.placeholder().edit);\n\n readonly disabled = computed(() => this.rootContext.disabled());\n\n constructor() {\n afterNextRender(() => {\n this.rootContext.inputRef.set(this.inputRef);\n });\n\n // Focus (and optionally select) the input whenever it enters edit mode.\n // Runs after render so the input is no longer hidden, and is browser-only (SSR-safe).\n afterRenderEffect(() => {\n const editing = this.rootContext.isEditing();\n const el = this.rootContext.inputRef();\n if (editing && el) {\n el.focus({ preventScroll: true });\n if (this.rootContext.selectOnFocus()) {\n el.select();\n }\n }\n });\n }\n\n handleInput(event: Event) {\n this.rootContext.inputValue.set((event.target as HTMLInputElement).value);\n }\n\n handleSubmitKeyDown(event: Event) {\n const keyEvent = event as KeyboardEvent;\n if (\n (this.rootContext.submitMode() === 'enter' || this.rootContext.submitMode() === 'both') &&\n keyEvent.key === ENTER &&\n !keyEvent.shiftKey &&\n !keyEvent.metaKey\n ) {\n this.rootContext.submit();\n }\n }\n}\n","import { afterNextRender, computed, Directive, ElementRef, inject } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'span[rdxEditablePreview]',\n exportAs: 'rdxEditablePreview',\n host: {\n tabindex: '0',\n '[attr.data-placeholder-shown]': 'rootContext.isEditing() ? undefined : \"\"',\n '[attr.data-auto-resize]': 'rootContext.autoResize() ? \"\" : undefined',\n '[attr.hidden]': '!rootContext.autoResize() && rootContext.isEditing() ? \"\" : undefined',\n\n // Auto-resize overlay mechanism (see RdxEditableArea): share the grid cell with the input\n // and stay measurable so the area keeps the preview's width while editing. `white-space: pre`\n // keeps that measured width stable. Cosmetics (overflow, ellipsis, user-select) are left to\n // the consumer via [data-auto-resize].\n '[style.grid-area]': 'rootContext.autoResize() ? \"1 / 1 / auto / auto\" : undefined',\n '[style.white-space]': 'rootContext.autoResize() ? \"pre\" : undefined',\n '[style.visibility]': 'rootContext.autoResize() && rootContext.isEditing() ? \"hidden\" : undefined',\n\n '(focusin)': 'handleFocus()',\n '(dblclick)': 'handleDoubleClick()'\n }\n})\nexport class RdxEditablePreview {\n private readonly elementRef = inject(ElementRef);\n\n protected readonly rootContext = injectEditableRootContext();\n\n readonly placeholder = computed(() => {\n return this.rootContext.placeholder().preview;\n });\n\n constructor() {\n afterNextRender(() => {\n this.rootContext.previewRef.set(this.elementRef.nativeElement);\n });\n }\n\n handleFocus() {\n // Ignore focus that we restored programmatically after leaving edit mode,\n // otherwise focus-mode activation would immediately re-open the editor.\n if (this.rootContext.activationMode() === 'focus' && this.rootContext.canActivateOnFocus()) {\n this.rootContext.edit();\n }\n }\n\n handleDoubleClick() {\n if (this.rootContext.activationMode() === 'dblclick') {\n this.rootContext.edit();\n }\n }\n}\n","import { Directive, input } from '@angular/core';\nimport { injectEditableRootContext } from './editable-root';\n\n@Directive({\n selector: 'button[rdxEditableSubmitTrigger]',\n host: {\n type: 'button',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.data-disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '[attr.disabled]': 'rootContext.disabled() ? \"\" : undefined',\n '(click)': 'rootContext.submit()'\n }\n})\nexport class RdxEditableSubmitTrigger {\n protected readonly rootContext = injectEditableRootContext();\n\n /** Accessible label for the trigger. Override to localize. */\n readonly ariaLabel = input<string>('submit', { alias: 'aria-label' });\n}\n","import { NgModule } from '@angular/core';\nimport { RdxEditableArea } from './src/editable-area';\nimport { RdxEditableCancelTrigger } from './src/editable-cancel-trigger';\nimport { RdxEditableEditTrigger } from './src/editable-edit-trigger';\nimport { RdxEditableInput } from './src/editable-input';\nimport { RdxEditablePreview } from './src/editable-preview';\nimport { RdxEditableRoot } from './src/editable-root';\nimport { RdxEditableSubmitTrigger } from './src/editable-submit-trigger';\n\nexport * from './src/editable-area';\nexport * from './src/editable-cancel-trigger';\nexport * from './src/editable-edit-trigger';\nexport * from './src/editable-input';\nexport * from './src/editable-preview';\nexport * from './src/editable-root';\nexport * from './src/editable-submit-trigger';\n\nconst _imports = [\n RdxEditableRoot,\n RdxEditableArea,\n RdxEditablePreview,\n RdxEditableInput,\n RdxEditableEditTrigger,\n RdxEditableSubmitTrigger,\n RdxEditableCancelTrigger\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxEditableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AA6CO,MAAM,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,GAAG,aAAa,CAChF,cAAc,EACd,qBAAqB;AAGzB,MAAM,WAAW,GAAG,MAA0B;AAC1C,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;IACvC,OAAO;QACH,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,YAAY;QACjC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;AACtC,QAAA,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE;AAC1B,QAAA,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE;AAC9B,QAAA,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;AAC9B,QAAA,kBAAkB,EAAE,MAAM,OAAO,CAAC,kBAAkB;KACvD;AACL,CAAC;AAED;;AAEG;MAUU,eAAe,CAAA;AA4DxB,IAAA,WAAA,GAAA;AA3DiB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;AACtC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAE1D,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;;QAGvB,IAAA,CAAA,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AAE9B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,eAAe,kFAAC;QAE5C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;QAE/E,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;QAE/E,IAAA,CAAA,aAAa,GAAG,KAAK,CAAwB,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEpF,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAqB,MAAM,iFAAC;QAE9C,IAAA,CAAA,SAAS,GAAG,KAAK,CAAkC,SAAS,iFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAEtG;;AAEG;QACM,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAwB,KAAK,yFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExF,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAyB,OAAO,qFAAC;QAEvD,IAAA,CAAA,UAAU,GAAG,KAAK,CAAwB,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;QAEjF,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;QAG/E,IAAA,CAAA,aAAa,GAAG,MAAM,EAAU;AAEhC,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;AAChE,QAAA,CAAC,8EAAC;AAEO,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;YACtC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;AACtD,QAAA,CAAC,mFAAC;;QAGO,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;QAGxD,IAAA,CAAA,UAAU,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE7C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAA+B,SAAS,+EAAC;AAE1D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,SAAS,iFAAC;QAExD,IAAA,CAAA,kBAAkB,GAAG,KAAK;;QAG1B,IAAA,CAAA,uBAAuB,GAAG,KAAK;QAGnC,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,EAAE;gBACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAI;AAChC,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,KAAK;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK;AACrC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAChF,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;;;QAIpE,iBAAiB,CAAC,MAAK;AACnB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,OAAO,EAAE;AACT,oBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;oBACnC,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACtC,oBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;gBACxC;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,kBAAkB,GAAA;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,uBAAuB;IACxC;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;gBAC9D,IAAI,CAAC,MAAM,EAAE;YACjB;iBAAO;gBACH,IAAI,CAAC,MAAM,EAAE;YACjB;QACJ;IACJ;IAEA,MAAM,GAAA;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;IAEA,MAAM,GAAA;QACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;8GA1HS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,mzDANb,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAM3C,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,SAAS,EAAE,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;AACpD,oBAAA,cAAc,EAAE,CAAC,eAAe,EAAE,qBAAqB,CAAC;AACxD,oBAAA,IAAI,EAAE;AACF,wBAAA,+BAA+B,EAAE;AACpC;AACJ,iBAAA;;;MCrEY,eAAe,CAAA;AAf5B,IAAA,WAAA,GAAA;QAgBuB,IAAA,CAAA,WAAW,GAAG,yBAAyB,EAAE;AAC/D,IAAA;8GAFY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6BAAA,EAAA,4CAAA,EAAA,iBAAA,EAAA,4CAAA,EAAA,iBAAA,EAAA,0CAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,uBAAA,EAAA,6CAAA,EAAA,eAAA,EAAA,wDAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAf3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACF,wBAAA,+BAA+B,EAAE,0CAA0C;AAC3E,wBAAA,mBAAmB,EAAE,0CAA0C;AAC/D,wBAAA,mBAAmB,EAAE,wCAAwC;AAC7D,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,yBAAyB,EAAE,2CAA2C;;;;AAItE,wBAAA,iBAAiB,EAAE;AACtB;AACJ,iBAAA;;;MCFY,wBAAwB,CAAA;AAZrC,IAAA,WAAA,GAAA;QAauB,IAAA,CAAA,WAAW,GAAG,yBAAyB,EAAE;;QAGnD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,QAAQ,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;AACxE,IAAA;8GALY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,eAAA,EAAA,2CAAA,EAAA,aAAA,EAAA,4CAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAZpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,iBAAiB,EAAE,yCAAyC;AAC5D,wBAAA,eAAe,EAAE,0CAA0C;AAE3D,wBAAA,SAAS,EAAE;AACd;AACJ,iBAAA;;;MCCY,sBAAsB,CAAA;AAZnC,IAAA,WAAA,GAAA;QAauB,IAAA,CAAA,WAAW,GAAG,yBAAyB,EAAE;;QAGnD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,MAAM,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;AACtE,IAAA;8GALY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,eAAA,EAAA,2CAAA,EAAA,aAAA,EAAA,4CAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,iBAAiB,EAAE,yCAAyC;AAC5D,wBAAA,eAAe,EAAE,0CAA0C;AAE3D,wBAAA,SAAS,EAAE;AACd;AACJ,iBAAA;;;MCiBY,gBAAgB,CAAA;AAYzB,IAAA,WAAA,GAAA;AAXiB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAAiC;QAE7D,IAAA,CAAA,WAAW,GAAG,yBAAyB,EAAE;;QAGnD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,gBAAgB,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;AAEpE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,kFAAC;AAEjE,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,+EAAC;QAG3D,eAAe,CAAC,MAAK;YACjB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChD,QAAA,CAAC,CAAC;;;QAIF,iBAAiB,CAAC,MAAK;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;YAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AACtC,YAAA,IAAI,OAAO,IAAI,EAAE,EAAE;gBACf,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACjC,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE;oBAClC,EAAE,CAAC,MAAM,EAAE;gBACf;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;IAC7E;AAEA,IAAA,mBAAmB,CAAC,KAAY,EAAA;QAC5B,MAAM,QAAQ,GAAG,KAAsB;AACvC,QAAA,IACI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,MAAM;YACtF,QAAQ,CAAC,GAAG,KAAK,KAAK;YACtB,CAAC,QAAQ,CAAC,QAAQ;AAClB,YAAA,CAAC,QAAQ,CAAC,OAAO,EACnB;AACE,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;QAC7B;IACJ;8GA7CS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,6BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,+CAAA,EAAA,oBAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,+BAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,6CAAA,EAAA,aAAA,EAAA,wEAAA,EAAA,WAAA,EAAA,kDAAA,EAAA,iBAAA,EAAA,gEAAA,EAAA,kBAAA,EAAA,+EAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA3B5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,IAAI,EAAE;AACF,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,sBAAsB,EAAE,6CAA6C;AACrE,wBAAA,sBAAsB,EAAE,6BAA6B;AACrD,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,YAAY,EAAE,wBAAwB;AACtC,wBAAA,YAAY,EAAE,wBAAwB;AACtC,wBAAA,iBAAiB,EAAE,6BAA6B;AAChD,wBAAA,kBAAkB,EAAE,yBAAyB;AAC7C,wBAAA,cAAc,EAAE,0BAA0B;AAC1C,wBAAA,oBAAoB,EAAE,eAAe;AACrC,wBAAA,yBAAyB,EAAE,2CAA2C;AACtE,wBAAA,eAAe,EAAE,sEAAsE;;;AAIvF,wBAAA,aAAa,EAAE,gDAAgD;AAC/D,wBAAA,mBAAmB,EAAE,8DAA8D;AACnF,wBAAA,oBAAoB,EAAE,6EAA6E;AAEnG,wBAAA,SAAS,EAAE,qBAAqB;AAChC,wBAAA,kBAAkB,EAAE,sBAAsB;AAC1C,wBAAA,iBAAiB,EAAE;AACtB;AACJ,iBAAA;;;MCNY,kBAAkB,CAAA;AAS3B,IAAA,WAAA,GAAA;AARiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAE7B,IAAA,CAAA,WAAW,GAAG,yBAAyB,EAAE;AAEnD,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACjC,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO;AACjD,QAAA,CAAC,kFAAC;QAGE,eAAe,CAAC,MAAK;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAClE,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;;;AAGP,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,EAAE;AACxF,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAC3B;IACJ;IAEA,iBAAiB,GAAA;QACb,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,UAAU,EAAE;AAClD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAC3B;IACJ;8GA3BS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6BAAA,EAAA,4CAAA,EAAA,uBAAA,EAAA,6CAAA,EAAA,aAAA,EAAA,yEAAA,EAAA,iBAAA,EAAA,gEAAA,EAAA,mBAAA,EAAA,gDAAA,EAAA,kBAAA,EAAA,8EAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBArB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACF,wBAAA,QAAQ,EAAE,GAAG;AACb,wBAAA,+BAA+B,EAAE,0CAA0C;AAC3E,wBAAA,yBAAyB,EAAE,2CAA2C;AACtE,wBAAA,eAAe,EAAE,uEAAuE;;;;;AAMxF,wBAAA,mBAAmB,EAAE,8DAA8D;AACnF,wBAAA,qBAAqB,EAAE,8CAA8C;AACrE,wBAAA,oBAAoB,EAAE,4EAA4E;AAElG,wBAAA,WAAW,EAAE,eAAe;AAC5B,wBAAA,YAAY,EAAE;AACjB;AACJ,iBAAA;;;MCVY,wBAAwB,CAAA;AAVrC,IAAA,WAAA,GAAA;QAWuB,IAAA,CAAA,WAAW,GAAG,yBAAyB,EAAE;;QAGnD,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,QAAQ,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;AACxE,IAAA;8GALY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,2CAAA,EAAA,eAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,iBAAiB,EAAE,yCAAyC;AAC5D,wBAAA,SAAS,EAAE;AACd;AACJ,iBAAA;;;ACKD,MAAM,QAAQ,GAAG;IACb,eAAe;IACf,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,sBAAsB;IACtB,wBAAwB;IACxB;CACH;MAMY,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAb1B,eAAe;YACf,eAAe;YACf,kBAAkB;YAClB,gBAAgB;YAChB,sBAAsB;YACtB,wBAAwB;AACxB,YAAA,wBAAwB,aANxB,eAAe;YACf,eAAe;YACf,kBAAkB;YAClB,gBAAgB;YAChB,sBAAsB;YACtB,wBAAwB;YACxB,wBAAwB,CAAA,EAAA,CAAA,CAAA;+GAOf,iBAAiB,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC;AACtB,oBAAA,OAAO,EAAE,CAAC,GAAG,QAAQ;AACxB,iBAAA;;;AC9BD;;AAEG;;;;"}
|