@3ddv/software-division-components 2.0.9 → 2.0.12
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/3ddv-software-division-components-dvm-map-loader.mjs +47 -27
- package/fesm2022/3ddv-software-division-components-dvm-map-loader.mjs.map +1 -1
- package/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs +3 -3
- package/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs.map +1 -1
- package/fesm2022/3ddv-software-division-components-dvm-popover.mjs +15 -6
- package/fesm2022/3ddv-software-division-components-dvm-popover.mjs.map +1 -1
- package/fesm2022/3ddv-software-division-components-generic-add-digital-wallet.mjs +13 -5
- package/fesm2022/3ddv-software-division-components-generic-add-digital-wallet.mjs.map +1 -1
- package/fesm2022/3ddv-software-division-components-generic-braintree.mjs +66 -6
- package/fesm2022/3ddv-software-division-components-generic-braintree.mjs.map +1 -1
- package/fesm2022/3ddv-software-division-components-generic-icon.mjs +2 -1
- package/fesm2022/3ddv-software-division-components-generic-icon.mjs.map +1 -1
- package/package.json +1 -1
- package/styles.css +1 -1
- package/types/3ddv-software-division-components-dvm-map-loader.d.ts +4 -2
- package/types/3ddv-software-division-components-dvm-popover.d.ts +5 -2
- package/types/3ddv-software-division-components-generic-add-digital-wallet.d.ts +3 -2
- package/types/3ddv-software-division-components-generic-braintree.d.ts +22 -3
|
@@ -1,10 +1,39 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
1
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { viewChild, ElementRef, input, output, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { signal, viewChild, ElementRef, input, output, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
|
|
5
|
+
/** Pass an instance to BraintreeComponent's [trigger] input. Call fire() to request payment. */
|
|
6
|
+
class BraintreeTrigger {
|
|
7
|
+
_count = signal(0, ...(ngDevMode ? [{ debugName: "_count" }] : []));
|
|
8
|
+
signal = this._count.asReadonly();
|
|
9
|
+
_resolve = null;
|
|
10
|
+
_reject = null;
|
|
11
|
+
/** Triggers the drop-in UI to request a payment method. Resolves with the payload on success, rejects on error. */
|
|
12
|
+
requestPayment() {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
this._resolve = resolve;
|
|
15
|
+
this._reject = reject;
|
|
16
|
+
this._count.update(c => c + 1);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/** @internal Called by BraintreeComponent when payment succeeds */
|
|
20
|
+
settle(payload) {
|
|
21
|
+
this._resolve?.(payload);
|
|
22
|
+
this._resolve = null;
|
|
23
|
+
this._reject = null;
|
|
24
|
+
}
|
|
25
|
+
/** @internal Called by BraintreeComponent when payment fails */
|
|
26
|
+
fail(err) {
|
|
27
|
+
this._reject?.(err);
|
|
28
|
+
this._resolve = null;
|
|
29
|
+
this._reject = null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
4
32
|
|
|
5
33
|
/**
|
|
6
34
|
* Braintree Drop‑in component that auto‑wires clicks
|
|
7
35
|
* on the first projected element and errors if more than one.
|
|
36
|
+
* It also accepts a BraintreeTrigger to get the nonce without a projected element.
|
|
8
37
|
* Recreates the drop‑in UI whenever isDigitalWalletPayment changes,
|
|
9
38
|
* ensuring the container is empty before initialization.
|
|
10
39
|
*/
|
|
@@ -16,21 +45,40 @@ class BraintreeComponent {
|
|
|
16
45
|
token = input.required(...(ngDevMode ? [{ debugName: "token" }] : []));
|
|
17
46
|
/** Toggle to require cardholder name */
|
|
18
47
|
isDigitalWalletPayment = input(false, ...(ngDevMode ? [{ debugName: "isDigitalWalletPayment" }] : []));
|
|
48
|
+
/** BraintreeTrigger instance — call trigger.fire() from anywhere to request payment */
|
|
49
|
+
trigger = input(...(ngDevMode ? [undefined, { debugName: "trigger" }] : []));
|
|
19
50
|
/** Emits when a payment payload is ready */
|
|
20
51
|
onSubmit = output();
|
|
21
52
|
/** Holds the Drop‑in instance */
|
|
22
53
|
dropinInstance;
|
|
23
54
|
constructor(elRef) {
|
|
24
55
|
this.elRef = elRef;
|
|
56
|
+
// Call requestPayment whenever trigger.fire() increments the counter
|
|
57
|
+
effect(() => {
|
|
58
|
+
const t = this.trigger();
|
|
59
|
+
if (!t)
|
|
60
|
+
return;
|
|
61
|
+
const count = t.signal();
|
|
62
|
+
if (count > 0) {
|
|
63
|
+
this.requestPayment();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
25
66
|
// Re-initialize drop‑in UI on config change
|
|
26
67
|
effect(() => {
|
|
27
68
|
const requireName = this.isDigitalWalletPayment();
|
|
28
69
|
this.teardownDropin();
|
|
29
70
|
this.initializeDropin(requireName);
|
|
30
71
|
});
|
|
31
|
-
// Attach click handler to the single projected element
|
|
72
|
+
// Attach click handler to the single projected element (only when no trigger is provided)
|
|
32
73
|
effect(onCleanup => {
|
|
74
|
+
if (this.trigger())
|
|
75
|
+
return;
|
|
33
76
|
const projectedEls = Array.from(this.elRef.nativeElement.children).filter(el => el.id !== 'braintree-container');
|
|
77
|
+
// No projected elements, quit from trying to append event to button
|
|
78
|
+
if (projectedEls.length === 0) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// More than one button projected, problematic scenario, quit with an error.
|
|
34
82
|
if (projectedEls.length > 1) {
|
|
35
83
|
throw new Error(`sdc-braintree: only one projected element allowed, found ${projectedEls.length}`);
|
|
36
84
|
}
|
|
@@ -83,10 +131,22 @@ class BraintreeComponent {
|
|
|
83
131
|
this.dropinInstance.requestPaymentMethod((err, payload) => {
|
|
84
132
|
if (err) {
|
|
85
133
|
console.error('sdc-braintree payment error:', err);
|
|
134
|
+
this.trigger()?.fail(err);
|
|
135
|
+
this.focusContainer();
|
|
86
136
|
return;
|
|
87
137
|
}
|
|
88
138
|
this.onSubmit.emit(payload);
|
|
139
|
+
this.trigger()?.settle(payload);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/** Scrolls the drop-in container into view and focuses it — called on payment error to redirect user attention. */
|
|
143
|
+
focusContainer() {
|
|
144
|
+
const container = this.braintreeContainer()?.nativeElement;
|
|
145
|
+
container?.scrollIntoView({
|
|
146
|
+
behavior: 'smooth', // animated
|
|
147
|
+
block: 'center', // keeps form fully visible mid-viewport
|
|
89
148
|
});
|
|
149
|
+
container?.focus({ preventScroll: true /* avoid jump-fighting the smooth scroll above */ });
|
|
90
150
|
}
|
|
91
151
|
/** Tears down the drop-in instance if present */
|
|
92
152
|
teardownDropin() {
|
|
@@ -96,7 +156,7 @@ class BraintreeComponent {
|
|
|
96
156
|
this.dropinInstance = null;
|
|
97
157
|
}
|
|
98
158
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: BraintreeComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
99
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.4", type: BraintreeComponent, isStandalone: true, selector: "sdc-braintree", inputs: { token: { classPropertyName: "token", publicName: "token", isSignal: true, isRequired: true, transformFunction: null }, isDigitalWalletPayment: { classPropertyName: "isDigitalWalletPayment", publicName: "isDigitalWalletPayment", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "braintreeContainer", first: true, predicate: ["braintreeContainer"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
|
|
159
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.1.4", type: BraintreeComponent, isStandalone: true, selector: "sdc-braintree", inputs: { token: { classPropertyName: "token", publicName: "token", isSignal: true, isRequired: true, transformFunction: null }, isDigitalWalletPayment: { classPropertyName: "isDigitalWalletPayment", publicName: "isDigitalWalletPayment", isSignal: true, isRequired: false, transformFunction: null }, trigger: { classPropertyName: "trigger", publicName: "trigger", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "braintreeContainer", first: true, predicate: ["braintreeContainer"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
|
|
100
160
|
<div #braintreeContainer id="braintree-container"></div>
|
|
101
161
|
<ng-content></ng-content>
|
|
102
162
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
@@ -113,7 +173,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
113
173
|
<ng-content></ng-content>
|
|
114
174
|
`,
|
|
115
175
|
}]
|
|
116
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { braintreeContainer: [{ type: i0.ViewChild, args: ['braintreeContainer', { ...{ read: (ElementRef) }, isSignal: true }] }], token: [{ type: i0.Input, args: [{ isSignal: true, alias: "token", required: true }] }], isDigitalWalletPayment: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDigitalWalletPayment", required: false }] }], onSubmit: [{ type: i0.Output, args: ["onSubmit"] }] } });
|
|
176
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { braintreeContainer: [{ type: i0.ViewChild, args: ['braintreeContainer', { ...{ read: (ElementRef) }, isSignal: true }] }], token: [{ type: i0.Input, args: [{ isSignal: true, alias: "token", required: true }] }], isDigitalWalletPayment: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDigitalWalletPayment", required: false }] }], trigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "trigger", required: false }] }], onSubmit: [{ type: i0.Output, args: ["onSubmit"] }] } });
|
|
117
177
|
|
|
118
178
|
/*
|
|
119
179
|
* Public API Surface of software-division-components
|
|
@@ -123,5 +183,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
123
183
|
* Generated bundle index. Do not edit.
|
|
124
184
|
*/
|
|
125
185
|
|
|
126
|
-
export { BraintreeComponent };
|
|
186
|
+
export { BraintreeComponent, BraintreeTrigger };
|
|
127
187
|
//# sourceMappingURL=3ddv-software-division-components-generic-braintree.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3ddv-software-division-components-generic-braintree.mjs","sources":["../../generic/braintree/braintree.component.ts","../../generic/braintree/public-api.ts","../../generic/braintree/3ddv-software-division-components-generic-braintree.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n input,\n OnDestroy,\n output,\n viewChild,\n} from '@angular/core';\nimport { BraintreePayload } from './types';\n\ndeclare let braintree: any;\n\n/**\n * Braintree Drop‑in component that auto‑wires clicks\n * on the first projected element and errors if more than one.\n * Recreates the drop‑in UI whenever isDigitalWalletPayment changes,\n * ensuring the container is empty before initialization.\n */\n@Component({\n standalone: true,\n selector: 'sdc-braintree',\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div #braintreeContainer id=\"braintree-container\"></div>\n <ng-content></ng-content>\n `,\n})\nexport class BraintreeComponent implements OnDestroy {\n /** Braintree element reference */\n public braintreeContainer = viewChild('braintreeContainer', { read: ElementRef<HTMLElement> });\n\n /** Braintree client token input */\n public readonly token = input.required<string>();\n\n /** Toggle to require cardholder name */\n public readonly isDigitalWalletPayment = input<boolean>(false);\n\n /** Emits when a payment payload is ready */\n public readonly onSubmit = output<BraintreePayload>();\n\n /** Holds the Drop‑in instance */\n private dropinInstance: any;\n\n constructor(private readonly elRef: ElementRef) {\n // Re-initialize drop‑in UI on config change\n effect(() => {\n const requireName = this.isDigitalWalletPayment();\n this.teardownDropin();\n this.initializeDropin(requireName);\n });\n\n // Attach click handler to the single projected element\n effect(onCleanup => {\n const projectedEls = Array.from((this.elRef.nativeElement as HTMLElement).children).filter(\n el => el.id !== 'braintree-container'\n );\n if (projectedEls.length > 1) {\n throw new Error(`sdc-braintree: only one projected element allowed, found ${projectedEls.length}`);\n }\n if (projectedEls.length === 1) {\n const btn = projectedEls[0] as HTMLElement;\n const handler = () => this.requestPayment();\n btn.addEventListener('click', handler);\n onCleanup(() => btn.removeEventListener('click', handler));\n }\n });\n }\n\n ngOnDestroy(): void {\n this.teardownDropin();\n }\n\n /** Clears previous drop-in UI and recreates it */\n private initializeDropin(requireName: boolean): void {\n if (this.dropinInstance) return;\n const container = this.braintreeContainer()?.nativeElement as HTMLElement;\n\n if (!container) {\n console.error('sdc-braintree: missing container element');\n return;\n }\n\n const cardOptions = requireName\n ? {\n card: { cardholderName: { required: requireName } },\n number: { supportedCardBrand: ['visa', 'mastercard', 'diners-club', 'discover', 'american-express'] },\n }\n : undefined;\n\n setTimeout(() => {\n braintree.dropin.create(\n {\n authorization: this.token(),\n container: container,\n ...cardOptions,\n },\n (err: any, instance: any) => {\n if (err) {\n console.error('Braintree init error:', err);\n return;\n }\n this.dropinInstance = instance;\n }\n );\n }, 0);\n }\n\n /** Requests payment method and emits payload */\n private requestPayment(): void {\n if (!this.dropinInstance) {\n console.warn('sdc-braintree: drop‑in not ready');\n return;\n }\n this.dropinInstance.requestPaymentMethod((err: any, payload: BraintreePayload) => {\n if (err) {\n console.error('sdc-braintree payment error:', err);\n return;\n }\n this.onSubmit.emit(payload);\n });\n }\n\n /** Tears down the drop-in instance if present */\n private teardownDropin(): void {\n if (this.dropinInstance?.teardown) {\n this.dropinInstance.teardown();\n }\n this.dropinInstance = null;\n }\n}\n","/*\n * Public API Surface of software-division-components\n */\n\nexport * from './braintree.component';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"3ddv-software-division-components-generic-braintree.mjs","sources":["../../generic/braintree/braintree-trigger.ts","../../generic/braintree/braintree.component.ts","../../generic/braintree/public-api.ts","../../generic/braintree/3ddv-software-division-components-generic-braintree.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { BraintreePayload } from './types';\n\n/** Pass an instance to BraintreeComponent's [trigger] input. Call fire() to request payment. */\nexport class BraintreeTrigger {\n private readonly _count = signal(0);\n public readonly signal = this._count.asReadonly();\n\n private _resolve: ((payload: BraintreePayload) => void) | null = null;\n private _reject: ((err: any) => void) | null = null;\n\n /** Triggers the drop-in UI to request a payment method. Resolves with the payload on success, rejects on error. */\n public requestPayment(): Promise<BraintreePayload> {\n return new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n this._count.update(c => c + 1);\n });\n }\n\n /** @internal Called by BraintreeComponent when payment succeeds */\n public settle(payload: BraintreePayload): void {\n this._resolve?.(payload);\n this._resolve = null;\n this._reject = null;\n }\n\n /** @internal Called by BraintreeComponent when payment fails */\n public fail(err: any): void {\n this._reject?.(err);\n this._resolve = null;\n this._reject = null;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n input,\n OnDestroy,\n output,\n viewChild,\n} from '@angular/core';\nimport { BraintreeTrigger } from './braintree-trigger';\nimport { BraintreePayload } from './types';\n\ndeclare let braintree: any;\n\n/**\n * Braintree Drop‑in component that auto‑wires clicks\n * on the first projected element and errors if more than one.\n * It also accepts a BraintreeTrigger to get the nonce without a projected element.\n * Recreates the drop‑in UI whenever isDigitalWalletPayment changes,\n * ensuring the container is empty before initialization.\n */\n@Component({\n standalone: true,\n selector: 'sdc-braintree',\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div #braintreeContainer id=\"braintree-container\"></div>\n <ng-content></ng-content>\n `,\n})\nexport class BraintreeComponent implements OnDestroy {\n /** Braintree element reference */\n public braintreeContainer = viewChild('braintreeContainer', { read: ElementRef<HTMLElement> });\n\n /** Braintree client token input */\n public readonly token = input.required<string>();\n\n /** Toggle to require cardholder name */\n public readonly isDigitalWalletPayment = input<boolean>(false);\n\n /** BraintreeTrigger instance — call trigger.fire() from anywhere to request payment */\n public readonly trigger = input<BraintreeTrigger>();\n\n /** Emits when a payment payload is ready */\n public readonly onSubmit = output<BraintreePayload>();\n\n /** Holds the Drop‑in instance */\n private dropinInstance: any;\n\n constructor(private readonly elRef: ElementRef) {\n // Call requestPayment whenever trigger.fire() increments the counter\n effect(() => {\n const t = this.trigger();\n if (!t) return;\n\n const count = t.signal();\n if (count > 0) {\n this.requestPayment();\n }\n });\n\n // Re-initialize drop‑in UI on config change\n effect(() => {\n const requireName = this.isDigitalWalletPayment();\n this.teardownDropin();\n this.initializeDropin(requireName);\n });\n\n // Attach click handler to the single projected element (only when no trigger is provided)\n effect(onCleanup => {\n if (this.trigger()) return;\n\n const projectedEls = Array.from((this.elRef.nativeElement as HTMLElement).children).filter(\n el => el.id !== 'braintree-container'\n );\n\n // No projected elements, quit from trying to append event to button\n if (projectedEls.length === 0) {\n return;\n }\n\n // More than one button projected, problematic scenario, quit with an error.\n if (projectedEls.length > 1) {\n throw new Error(`sdc-braintree: only one projected element allowed, found ${projectedEls.length}`);\n }\n\n if (projectedEls.length === 1) {\n const btn = projectedEls[0] as HTMLElement;\n const handler = () => this.requestPayment();\n btn.addEventListener('click', handler);\n onCleanup(() => btn.removeEventListener('click', handler));\n }\n });\n }\n\n ngOnDestroy(): void {\n this.teardownDropin();\n }\n\n /** Clears previous drop-in UI and recreates it */\n private initializeDropin(requireName: boolean): void {\n if (this.dropinInstance) return;\n const container = this.braintreeContainer()?.nativeElement as HTMLElement;\n\n if (!container) {\n console.error('sdc-braintree: missing container element');\n return;\n }\n\n const cardOptions = requireName\n ? {\n card: { cardholderName: { required: requireName } },\n number: { supportedCardBrand: ['visa', 'mastercard', 'diners-club', 'discover', 'american-express'] },\n }\n : undefined;\n\n setTimeout(() => {\n braintree.dropin.create(\n {\n authorization: this.token(),\n container: container,\n ...cardOptions,\n },\n (err: any, instance: any) => {\n if (err) {\n console.error('Braintree init error:', err);\n return;\n }\n this.dropinInstance = instance;\n }\n );\n }, 0);\n }\n\n /** Requests payment method and emits payload */\n public requestPayment(): void {\n if (!this.dropinInstance) {\n console.warn('sdc-braintree: drop‑in not ready');\n return;\n }\n\n this.dropinInstance.requestPaymentMethod((err: any, payload: BraintreePayload) => {\n if (err) {\n console.error('sdc-braintree payment error:', err);\n this.trigger()?.fail(err);\n this.focusContainer();\n return;\n }\n this.onSubmit.emit(payload);\n this.trigger()?.settle(payload);\n });\n }\n\n /** Scrolls the drop-in container into view and focuses it — called on payment error to redirect user attention. */\n private focusContainer(): void {\n const container = this.braintreeContainer()?.nativeElement;\n container?.scrollIntoView({\n behavior: 'smooth', // animated\n block: 'center', // keeps form fully visible mid-viewport\n });\n container?.focus({ preventScroll: true /* avoid jump-fighting the smooth scroll above */ });\n }\n\n /** Tears down the drop-in instance if present */\n private teardownDropin(): void {\n if (this.dropinInstance?.teardown) {\n this.dropinInstance.teardown();\n }\n\n this.dropinInstance = null;\n }\n}\n","/*\n * Public API Surface of software-division-components\n */\n\nexport * from './braintree-trigger';\nexport * from './braintree.component';\nexport * from './types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,11 @@ import { inject, ElementRef, input, signal, effect, ChangeDetectionStrategy, Vie
|
|
|
4
4
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
5
5
|
import { map, shareReplay } from 'rxjs';
|
|
6
6
|
|
|
7
|
+
const iconCache = new Map();
|
|
7
8
|
class SvgIconComponent {
|
|
8
9
|
// DI
|
|
9
10
|
http = inject(HttpClient);
|
|
10
|
-
cache =
|
|
11
|
+
cache = iconCache;
|
|
11
12
|
sanitizer = inject(DomSanitizer);
|
|
12
13
|
elementRef = inject(ElementRef);
|
|
13
14
|
// INPUTS / OUTPUTS
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3ddv-software-division-components-generic-icon.mjs","sources":["../../generic/icon/icon.component.ts","../../generic/icon/icon.component.html","../../generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.token.ts","../../generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.ts","../../generic/icon/lib/ui-icon-helm/src/index.ts","../../generic/icon/public-api.ts","../../generic/icon/3ddv-software-division-components-generic-icon.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { map, Observable, shareReplay } from 'rxjs';\n\n@Component({\n selector: 'sdc-svg-icon',\n templateUrl: './icon.component.html',\n styleUrl: './icon.component.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'className()',\n },\n})\nexport class SvgIconComponent {\n // DI\n private readonly http = inject(HttpClient);\n private readonly cache = new Map<string, Observable<string>>();\n private readonly sanitizer = inject(DomSanitizer);\n private readonly elementRef = inject(ElementRef);\n\n // INPUTS / OUTPUTS\n public readonly name = input.required<string>();\n public readonly iconFolder = input<string>();\n public readonly className = input<string>('');\n public readonly color = input<string>('currentColor');\n public readonly strokeWidth = input<number>(1);\n\n // STATE\n public readonly svgContent = signal<SafeHtml | null>(null);\n\n public constructor() {\n effect(() => {\n this.getIcon(this.name()).subscribe({\n next: svg => {\n const element = this.elementRef.nativeElement as HTMLElement;\n\n // Apply dynamic properties\n element.style.setProperty('--icon-color', this.resolveColor(this.color()));\n element.style.setProperty('--icon-stroke-width', this.strokeWidth().toString());\n\n this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(svg));\n },\n error: (error: unknown) => {\n console.error('Failed to load icon:', error);\n // Optional: set a minimal fallback SVG or clear content\n this.svgContent.set(\n this.sanitizer.bypassSecurityTrustHtml(\n `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 8v4m0 4h.01\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/></svg>`\n )\n );\n },\n });\n });\n }\n\n public getIcon(name: string): Observable<string> {\n if (!this.cache.has(name)) {\n const folder = this.iconFolder() ?? 'assets';\n const icon$ = this.http.get(`/${folder}/${name}.svg`, { responseType: 'text' }).pipe(\n map(svg => this.sanitizeSvg(svg)),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n this.cache.set(name, icon$);\n }\n\n return this.cache.get(name)!;\n }\n\n private sanitizeSvg(svg: string): string {\n return (\n svg\n // Remove any existing width/height attributes to make the SVG more flexible\n .replace(/\\swidth=\"[^\"]*\"/g, '')\n .replace(/\\sheight=\"[^\"]*\"/g, '')\n // Strip hardcoded fill/stroke so CSS variable takes effect\n .replace(/\\sfill=\"(?!none)[^\"]*\"/g, '')\n .replace(/\\sstroke=\"(?!none)[^\"]*\"/g, '')\n );\n }\n\n /**\n * Resolves the color input to a valid CSS value.\n * - Already-valid CSS values (var(), #hex, rgb(), hsl(), currentColor) pass through unchanged.\n * - A raw CSS variable name starting with \"--\" is wrapped: \"--my-var\" → \"var(--my-var)\".\n * - Any other string is treated as a design-token name and resolved via the\n * \"--color-\" prefix convention: \"accent\" → \"var(--color-accent)\".\n */\n private resolveColor(color: string): string {\n const passThroughPrefixes = ['currentColor', 'var(', '#', 'rgb(', 'rgba(', 'hsl(', 'hsla('];\n\n if (passThroughPrefixes.some(prefix => color.startsWith(prefix))) {\n return color;\n }\n\n if (color.startsWith('--')) {\n return `var(${color})`;\n }\n\n return `var(--color-${color})`;\n }\n}\n","@if (svgContent(); as content) {\n <span class=\"inline-block app-svg-icon\" [innerHTML]=\"content\"></span>\n}\n","import { InjectionToken, ValueProvider, inject } from '@angular/core';\nimport type { IconSize } from './hlm-icon';\n\nexport interface HlmIconConfig {\n size: IconSize;\n}\n\nconst defaultConfig: HlmIconConfig = {\n size: 'base',\n};\n\nconst HlmIconConfigToken = new InjectionToken<HlmIconConfig>('HlmIconConfig');\n\nexport function provideHlmIconConfig(config: Partial<HlmIconConfig>): ValueProvider {\n return { provide: HlmIconConfigToken, useValue: { ...defaultConfig, ...config } };\n}\n\nexport function injectHlmIconConfig(): HlmIconConfig {\n return inject(HlmIconConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { injectHlmIconConfig } from './hlm-icon.token';\n\nexport type IconSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | 'none' | (Record<never, never> & string);\n\n@Directive({\n selector: 'ng-icon[hlm]',\n standalone: true,\n host: {\n '[style.--ng-icon__size]': '_computedSize()',\n },\n})\nexport class HlmIcon {\n private readonly _config = injectHlmIconConfig();\n public readonly size = input<IconSize>(this._config.size);\n public readonly variant = input<'light' | 'dark'>('light');\n\n protected readonly _computedSize = computed(() => {\n const size = this.size();\n\n switch (size) {\n case 'xs':\n return '12px';\n case 'sm':\n return '16px';\n case 'base':\n return '24px';\n case 'lg':\n return '32px';\n case 'xl':\n return '48px';\n default: {\n return size;\n }\n }\n });\n}\n","import { NgModule } from '@angular/core';\nimport { HlmIcon } from './lib/hlm-icon';\n\nexport * from './lib/hlm-icon';\nexport * from './lib/hlm-icon.token';\n\n@NgModule({\n imports: [HlmIcon],\n exports: [HlmIcon],\n})\nexport class HlmIconModule {}\n","/*\n * Public API Surface of software-division-components\n */\n\nexport * from './icon.component';\nexport { HlmIcon, HlmIconModule } from './lib/ui-icon-helm/src';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"3ddv-software-division-components-generic-icon.mjs","sources":["../../generic/icon/icon.component.ts","../../generic/icon/icon.component.html","../../generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.token.ts","../../generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.ts","../../generic/icon/lib/ui-icon-helm/src/index.ts","../../generic/icon/public-api.ts","../../generic/icon/3ddv-software-division-components-generic-icon.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { map, Observable, shareReplay } from 'rxjs';\n\nconst iconCache = new Map<string, Observable<string>>();\n\n@Component({\n selector: 'sdc-svg-icon',\n templateUrl: './icon.component.html',\n styleUrl: './icon.component.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'className()',\n },\n})\nexport class SvgIconComponent {\n // DI\n private readonly http = inject(HttpClient);\n private readonly cache = iconCache;\n private readonly sanitizer = inject(DomSanitizer);\n private readonly elementRef = inject(ElementRef);\n\n // INPUTS / OUTPUTS\n public readonly name = input.required<string>();\n public readonly iconFolder = input<string>();\n public readonly className = input<string>('');\n public readonly color = input<string>('currentColor');\n public readonly strokeWidth = input<number>(1);\n\n // STATE\n public readonly svgContent = signal<SafeHtml | null>(null);\n\n public constructor() {\n effect(() => {\n this.getIcon(this.name()).subscribe({\n next: svg => {\n const element = this.elementRef.nativeElement as HTMLElement;\n\n // Apply dynamic properties\n element.style.setProperty('--icon-color', this.resolveColor(this.color()));\n element.style.setProperty('--icon-stroke-width', this.strokeWidth().toString());\n\n this.svgContent.set(this.sanitizer.bypassSecurityTrustHtml(svg));\n },\n error: (error: unknown) => {\n console.error('Failed to load icon:', error);\n // Optional: set a minimal fallback SVG or clear content\n this.svgContent.set(\n this.sanitizer.bypassSecurityTrustHtml(\n `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 8v4m0 4h.01\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/></svg>`\n )\n );\n },\n });\n });\n }\n\n public getIcon(name: string): Observable<string> {\n if (!this.cache.has(name)) {\n const folder = this.iconFolder() ?? 'assets';\n const icon$ = this.http.get(`/${folder}/${name}.svg`, { responseType: 'text' }).pipe(\n map(svg => this.sanitizeSvg(svg)),\n shareReplay({ bufferSize: 1, refCount: true })\n );\n\n this.cache.set(name, icon$);\n }\n\n return this.cache.get(name)!;\n }\n\n private sanitizeSvg(svg: string): string {\n return (\n svg\n // Remove any existing width/height attributes to make the SVG more flexible\n .replace(/\\swidth=\"[^\"]*\"/g, '')\n .replace(/\\sheight=\"[^\"]*\"/g, '')\n // Strip hardcoded fill/stroke so CSS variable takes effect\n .replace(/\\sfill=\"(?!none)[^\"]*\"/g, '')\n .replace(/\\sstroke=\"(?!none)[^\"]*\"/g, '')\n );\n }\n\n /**\n * Resolves the color input to a valid CSS value.\n * - Already-valid CSS values (var(), #hex, rgb(), hsl(), currentColor) pass through unchanged.\n * - A raw CSS variable name starting with \"--\" is wrapped: \"--my-var\" → \"var(--my-var)\".\n * - Any other string is treated as a design-token name and resolved via the\n * \"--color-\" prefix convention: \"accent\" → \"var(--color-accent)\".\n */\n private resolveColor(color: string): string {\n const passThroughPrefixes = ['currentColor', 'var(', '#', 'rgb(', 'rgba(', 'hsl(', 'hsla('];\n\n if (passThroughPrefixes.some(prefix => color.startsWith(prefix))) {\n return color;\n }\n\n if (color.startsWith('--')) {\n return `var(${color})`;\n }\n\n return `var(--color-${color})`;\n }\n}\n","@if (svgContent(); as content) {\n <span class=\"inline-block app-svg-icon\" [innerHTML]=\"content\"></span>\n}\n","import { InjectionToken, ValueProvider, inject } from '@angular/core';\nimport type { IconSize } from './hlm-icon';\n\nexport interface HlmIconConfig {\n size: IconSize;\n}\n\nconst defaultConfig: HlmIconConfig = {\n size: 'base',\n};\n\nconst HlmIconConfigToken = new InjectionToken<HlmIconConfig>('HlmIconConfig');\n\nexport function provideHlmIconConfig(config: Partial<HlmIconConfig>): ValueProvider {\n return { provide: HlmIconConfigToken, useValue: { ...defaultConfig, ...config } };\n}\n\nexport function injectHlmIconConfig(): HlmIconConfig {\n return inject(HlmIconConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import { Directive, computed, input } from '@angular/core';\nimport { injectHlmIconConfig } from './hlm-icon.token';\n\nexport type IconSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | 'none' | (Record<never, never> & string);\n\n@Directive({\n selector: 'ng-icon[hlm]',\n standalone: true,\n host: {\n '[style.--ng-icon__size]': '_computedSize()',\n },\n})\nexport class HlmIcon {\n private readonly _config = injectHlmIconConfig();\n public readonly size = input<IconSize>(this._config.size);\n public readonly variant = input<'light' | 'dark'>('light');\n\n protected readonly _computedSize = computed(() => {\n const size = this.size();\n\n switch (size) {\n case 'xs':\n return '12px';\n case 'sm':\n return '16px';\n case 'base':\n return '24px';\n case 'lg':\n return '32px';\n case 'xl':\n return '48px';\n default: {\n return size;\n }\n }\n });\n}\n","import { NgModule } from '@angular/core';\nimport { HlmIcon } from './lib/hlm-icon';\n\nexport * from './lib/hlm-icon';\nexport * from './lib/hlm-icon.token';\n\n@NgModule({\n imports: [HlmIcon],\n exports: [HlmIcon],\n})\nexport class HlmIconModule {}\n","/*\n * Public API Surface of software-division-components\n */\n\nexport * from './icon.component';\nexport { HlmIcon, HlmIconModule } from './lib/ui-icon-helm/src';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3ddv/software-division-components",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.12",
|
|
4
4
|
"main": "./fesm2022/3ddv-software-division-components.mjs",
|
|
5
5
|
"module": "fesm2022/3ddv-software-division-components.mjs",
|
|
6
6
|
"typings": "types/3ddv-software-division-components.d.ts",
|
package/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! tailwindcss v4.2.
|
|
1
|
+
/*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */
|
|
2
2
|
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-600:oklch(57.7% .245 27.325);--color-green-600:oklch(62.7% .194 149.214);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-gray-600:oklch(44.6% .03 256.802);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-2xl:1.5rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-extrabold:800;--tracking-tight:-.025em;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--radius-sm:calc(var(--radius) - 4px);--radius-md:calc(var(--radius) - 2px);--radius-lg:var(--radius);--radius-xl:calc(var(--radius) + 4px);--radius-2xl:1rem;--radius-3xl:1.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary:var(--primary);--color-secondary:var(--secondary);--color-accent:var(--accent)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.-top-12{top:calc(var(--spacing) * -12)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.-right-12{right:calc(var(--spacing) * -12)}.right-1{right:calc(var(--spacing) * 1)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.-bottom-12{bottom:calc(var(--spacing) * -12)}.-left-12{left:calc(var(--spacing) * -12)}.left-1{left:calc(var(--spacing) * 1)}.left-1\/2{left:50%}.z-50{z-index:50}.z-\[2\]{z-index:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.container{margin-inline:auto;padding-inline:2rem}.-mt-4{margin-top:calc(var(--spacing) * -4)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-3{margin-right:calc(var(--spacing) * 3)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.-ml-4{margin-left:calc(var(--spacing) * -4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-24{height:calc(var(--spacing) * 24)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-72{width:calc(var(--spacing) * 72)}.w-\[280px\]{width:280px}.w-auto{width:auto}.w-full{width:100%}.max-w-lg{max-width:var(--container-lg)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[8rem\]{min-width:8rem}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow-0{flex-grow:0}.basis-full{flex-basis:100%}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-default{cursor:default}.resize{resize:both}.resize-none{resize:none}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-8{border-style:var(--tw-border-style);border-width:8px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-blue-500{border-color:var(--color-blue-500)}.border-border{border-color:var(--border)}.border-destructive{border-color:var(--destructive)}.border-input{border-color:var(--input)}.bg-background{background-color:var(--background)}.bg-black{background-color:var(--color-black)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-destructive{background-color:var(--destructive)}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-black{color:var(--color-black)}.text-blue-500{color:var(--color-blue-500)}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-gray-600{color:var(--color-gray-600)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.italic{font-style:italic}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-accent{outline-color:var(--accent)}.outline-white{outline-color:var(--color-white)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[animation-duration\:200\]{animation-duration:200}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}@media (hover:hover){.hover\:scale-95:hover{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-accent:focus{--tw-ring-color:var(--accent)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:transform-none:disabled:hover{transform:none}}.has-\[\>ng-icon\]\:px-2\.5:has(>ng-icon){padding-inline:calc(var(--spacing) * 2.5)}.has-\[\>ng-icon\]\:px-3:has(>ng-icon){padding-inline:calc(var(--spacing) * 3)}.has-\[\>ng-icon\]\:px-4:has(>ng-icon){padding-inline:calc(var(--spacing) * 4)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-\[active\]\:bg-accent[data-active]{background-color:var(--accent)}.data-\[active\]\:text-white[data-active]{color:var(--color-white)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:text-muted-foreground[data-disabled]{color:var(--muted-foreground)}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[outside\]\:text-muted-foreground[data-outside]{color:var(--muted-foreground)}.data-\[outside\]\:opacity-50[data-outside]{opacity:.5}.data-\[outside\]\:aria-selected\:bg-accent\/50[data-outside][aria-selected=true]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.data-\[outside\]\:aria-selected\:bg-accent\/50[data-outside][aria-selected=true]{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.data-\[outside\]\:aria-selected\:text-muted-foreground[data-outside][aria-selected=true]{color:var(--muted-foreground)}.data-\[outside\]\:aria-selected\:opacity-30[data-outside][aria-selected=true]{opacity:.3}.data-\[selected\]\:bg-accent[data-selected]{background-color:var(--accent)}.data-\[selected\]\:bg-primary[data-selected]{background-color:var(--primary)}.data-\[selected\]\:text-primary-foreground[data-selected]{color:var(--primary-foreground)}.first\:data-\[selected\]\:rounded-l-md:first-child[data-selected]{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:data-\[selected\]\:rounded-r-md:last-child[data-selected]{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}@media (hover:hover){.data-\[selected\]\:hover\:bg-primary[data-selected]:hover{background-color:var(--primary)}.data-\[selected\]\:hover\:text-primary-foreground[data-selected]:hover{color:var(--primary-foreground)}}.data-\[selected\]\:focus\:bg-primary[data-selected]:focus{background-color:var(--primary)}.data-\[selected\]\:focus\:text-primary-foreground[data-selected]:focus{color:var(--primary-foreground)}.data-\[selected\]\:data-\[outside\]\:bg-accent\/50[data-selected][data-outside]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.data-\[selected\]\:data-\[outside\]\:bg-accent\/50[data-selected][data-outside]{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.data-\[side\=bottom\]\:top-\[2px\][data-side=bottom]{top:2px}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-.5rem}.data-\[side\=top\]\:bottom-\[2px\][data-side=top]{bottom:2px}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:.5rem}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing) * 9)}.data-\[size\=sm\]\:h-6[data-size=sm]{height:calc(var(--spacing) * 6)}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:slide-out-to-top-\[2\%\][data-state=closed]{--tw-exit-translate-y:-2%}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:slide-in-from-top-\[2\%\][data-state=open]{--tw-enter-translate-y:-2%}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[today\]\:bg-accent[data-today]{background-color:var(--accent)}.data-\[today\]\:text-accent-foreground[data-today]{color:var(--accent-foreground)}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}.sm\:text-left{text-align:left}}@media (min-width:48rem){.md\:mr-6{margin-right:calc(var(--spacing) * 6)}.md\:w-full{width:100%}}@media (min-width:64rem){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}@media (prefers-color-scheme:dark){.dark\:border-input{border-color:var(--input)}.dark\:bg-destructive\/60{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/60{background-color:color-mix(in oklab, var(--destructive) 60%, transparent)}}.dark\:bg-input\/30{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30{background-color:color-mix(in oklab, var(--input) 30%, transparent)}}@media (hover:hover){.dark\:hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-accent\/50:hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.dark\:hover\:bg-input\/50:hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}.dark\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}.dark\:focus-visible\:ring-destructive\/40:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.dark\:aria-invalid\:ring-destructive\/40[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}}.\[\&_ng-icon\]\:pointer-events-none ng-icon{pointer-events:none}.\[\&_ng-icon\]\:shrink-0 ng-icon{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\.ng-invalid\.ng-touched\]\:border-destructive.ng-invalid.ng-touched{border-color:var(--destructive)}.\[\&\.ng-invalid\.ng-touched\]\:text-destructive.ng-invalid.ng-touched{color:var(--destructive)}.\[\&\.ng-invalid\.ng-touched\]\:focus-visible\:ring-destructive\/20.ng-invalid.ng-touched:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.\[\&\.ng-invalid\.ng-touched\]\:focus-visible\:ring-destructive\/20.ng-invalid.ng-touched:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}@media (prefers-color-scheme:dark){.dark\:\[\&\.ng-invalid\.ng-touched\]\:focus-visible\:ring-destructive\/40.ng-invalid.ng-touched:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:\[\&\.ng-invalid\.ng-touched\]\:focus-visible\:ring-destructive\/40.ng-invalid.ng-touched:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}}.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing) * 0)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x) var(--tw-translate-y)}.\[\&\>ng-icon\]\:pointer-events-none>ng-icon{pointer-events:none}.\[\&\>ng-icon\]\:size-4>ng-icon{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>ng-icon\]\:shrink-0>ng-icon{flex-shrink:0}.\[\&\>ng-icon\]\:text-muted-foreground>ng-icon{color:var(--muted-foreground)}.\[\&\>ng-icon\]\:text-white>ng-icon{color:var(--color-white)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;width:100%;height:100%;top:0;left:0}.cdk-overlay-container{z-index:1000;position:fixed}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{z-index:1000;display:flex;position:absolute}.cdk-overlay-pane{pointer-events:auto;box-sizing:border-box;z-index:1000;max-width:100%;max-height:100%;display:flex;position:absolute}.cdk-overlay-backdrop{pointer-events:auto;-webkit-tap-highlight-color:#0000;opacity:0;touch-action:manipulation;z-index:1000;transition:opacity .4s cubic-bezier(.25,.8,.25,1);position:absolute;inset:0}@media (prefers-reduced-motion){.cdk-overlay-backdrop{transition-duration:1ms}}.cdk-overlay-backdrop-showing{opacity:1}@media (forced-colors:active){.cdk-overlay-backdrop-showing{opacity:.6}}.cdk-overlay-dark-backdrop{background:#00000052}.cdk-overlay-transparent-backdrop{visibility:hidden;opacity:1;transition:visibility 1ms linear,opacity 1ms linear}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing,.cdk-high-contrast-active .cdk-overlay-transparent-backdrop{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{z-index:1000;flex-direction:column;min-width:1px;min-height:1px;display:flex;position:absolute}.cdk-global-scrollblock{width:100%;position:fixed;overflow-y:scroll}.cdk-overlay-popover{pointer-events:none;white-space:normal;color:inherit;background:0 0;border:none;outline:0;width:100%;height:100%;padding:0;text-decoration:none;position:fixed;inset:0 auto auto 0;overflow:visible}.cdk-overlay-popover::backdrop{display:none}.cdk-overlay-popover .cdk-overlay-backdrop{z-index:auto;position:fixed}@keyframes indeterminate{0%{transform:translate(-100%)scaleX(.5)}to{transform:translate(100%)scaleX(.5)}}:root{--font-primary:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-secondary:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--text-xxs:.625rem;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--font-light:300;--font-regular:400;--font-medium:500;--font-semibold:600;--font-bold:700;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--space-0:0;--space-px:1px;--space-0_5:.125rem;--space-1:.25rem;--space-1_5:.375rem;--space-2:.5rem;--space-2_5:.625rem;--space-3:.75rem;--space-3_5:.875rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-7:1.75rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--space-20:5rem;--space-24:6rem;--radius-none:0;--radius-sm:.125rem;--radius-default:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--radius-full:9999px;--border-0:0;--border-default:1px;--border-2:2px;--border-3:3px;--border-4:4px;--border-6:6px;--border-8:8px;--color-neutral-50:#f8fafc;--color-neutral-100:#f1f5f9;--color-neutral-200:#e1e7ef;--color-neutral-250:#dedede;--color-neutral-300:#cbd2dc;--color-neutral-400:#97a3b4;--color-neutral-500:#61748f;--color-neutral-600:#435670;--color-neutral-650:#373a53;--color-neutral-700:#324258;--color-neutral-800:#1d283a;--color-neutral-900:#0f1729;--color-pure-white:#fff;--color-pure-black:#000;--color-pure-gray:gray;--color-primary:#ff820d;--color-primary-hover:#e06c00;--color-primary-active:#b85900;--color-primary-50:#fff7f0;--color-primary-100:#ffe7d1;--color-primary-200:#ffd5ad;--color-secondary:#0f2b5e;--color-secondary-hover:#14387b;--color-secondary-active:#19469a;--color-secondary-50:#f2f6fd;--color-secondary-100:#e0e9fa;--color-secondary-200:#c6d7f6;--color-alternative:#0da2e7;--color-alternative-hover:#0788c0;--color-alternative-active:#0369a0;--color-alternative-50:#f0f9ff;--color-alternative-100:#e1f3fe;--color-success:#36d399;--color-success-hover:#10b77f;--color-success-active:#059467;--color-success-50:#edfdf5;--color-success-100:#d1fae5;--color-warning:#fbbd23;--color-warning-hover:#db7706;--color-warning-active:#ad5700;--color-warning-50:#fffbeb;--color-warning-100:#fef3c8;--color-danger:#dc2828;--color-danger-hover:#b51c1c;--color-danger-active:#891010;--color-danger-50:#fef1f1;--color-danger-100:#fee1e1;--font-sans:"Geist Sans", sans-serif;--background:var(--color-pure-white);--foreground:var(--color-neutral-600);--card:var(--color-pure-white);--card-foreground:var(--color-neutral-600);--popover:var(--color-pure-white);--popover-foreground:var(--color-neutral-600);--primary:var(--color-primary);--primary-foreground:var(--color-pure-white);--secondary:var(--color-neutral-100);--secondary-foreground:var(--color-neutral-600);--muted:var(--color-neutral-50);--muted-foreground:var(--color-neutral-500);--accent:var(--color-primary-200);--accent-foreground:var(--color-neutral-700);--destructive:var(--color-danger);--destructive-foreground:var(--color-pure-white);--border:var(--color-neutral-200);--input:var(--color-neutral-200);--ring:var(--color-primary);--radius:var(--radius-lg);color-scheme:light}@media (max-width:1024px){.cdk-overlay-pane:has(>hlm-select-content),.cdk-overlay-pane:has(>hlm-select-content.full-width){width:100%!important;left:0!important;right:0!important}}:root{--p-button-primary-color:white!important;--p-button-primary-contrast-color:white!important;--p-button-primary-hover-color:white!important}.sdc-datepicker{--sdc-datepicker-label-color:var(--color-neutral-700);--sdc-datepicker-label-size:var(--text-base);--sdc-datepicker-label-weight:var(--font-semibold);--sdc-datepicker-label-gap:var(--space-6);--sdc-datepicker-label-width:auto;--sdc-datepicker-input-width:100%;--sdc-datepicker-input-background:var(--color-pure-white);--sdc-datepicker-input-border-color:var(--color-neutral-300);--sdc-datepicker-input-border-width:var(--border-default);--sdc-datepicker-input-border-radius:var(--radius-full);--sdc-datepicker-input-padding-vertical:var(--space-2);--sdc-datepicker-input-padding-horizontal:var(--space-3);--sdc-datepicker-input-text-color:var(--color-neutral-900);--sdc-datepicker-input-text-size:var(--text-base);--sdc-datepicker-input-text-weight:var(--font-medium);--sdc-datepicker-input-border-hover:var(--color-neutral-500);--sdc-datepicker-input-focus-ring-width:var(--border-default);--sdc-datepicker-input-focus-ring-color:var(--color-primary);--sdc-datepicker-input-focus-ring-offset:var(--border-2);--sdc-datepicker-placeholder-color:var(--color-neutral-500);--sdc-datepicker-placeholder-size:var(--text-sm);--sdc-datepicker-placeholder-weight:var(--font-medium);--sdc-datepicker-hint-color:var(--color-neutral-600);--sdc-datepicker-hint-size:var(--text-xs);--sdc-datepicker-error-color:var(--color-danger);--sdc-datepicker-error-size:var(--text-xs);--sdc-datepicker-calendar-background:var(--color-pure-white);--sdc-datepicker-calendar-border-color:var(--color-neutral-200);--sdc-datepicker-calendar-border-width:var(--border-default);--sdc-datepicker-calendar-border-radius:var(--radius-lg);--sdc-datepicker-calendar-shadow:0 1px 3px #00000014;--sdc-datepicker-calendar-padding:var(--space-4);--sdc-datepicker-month-year-text-color:var(--color-neutral-900);--sdc-datepicker-month-year-text-size:var(--text-base);--sdc-datepicker-month-year-text-weight:var(--font-semibold);--sdc-datepicker-month-year-hover-text-color:var(--color-neutral-900);--sdc-datepicker-month-year-padding:var(--space-2);--sdc-datepicker-month-year-button-background:var(--color-pure-white);--sdc-datepicker-month-year-button-text-color-hover:var(--color-pure-white);--sdc-datepicker-month-year-button-background-hover:var(--color-neutral-900);--sdc-datepicker-day-button-disabled-background:transparent;--sdc-datepicker-day-button-disabled-text-color:var(--color-neutral-300);--sdc-datepicker-day-button-background:transparent;--sdc-datepicker-day-button-text-color:var(--color-neutral-900);--sdc-datepicker-day-button-text-size:var(--text-sm);--sdc-datepicker-day-button-text-weight:var(--font-semibold);--sdc-datepicker-day-button-border-radius:var(--radius-md);--sdc-datepicker-day-button-padding:var(--space-2);--sdc-datepicker-day-button-hover-background:var(--color-secondary);--sdc-datepicker-day-button-hover-text-color:var(--color-pure-white)}.component-container{gap:var(--sdc-datepicker-label-gap);width:var(--sdc-datepicker-input-width);flex-direction:column;display:flex}.component-container hlm-date-picker{width:var(--sdc-datepicker-input-width)}.sdc-datepicker-label{font-weight:var(--sdc-datepicker-label-weight);font-size:var(--sdc-datepicker-label-size);color:hsl(var(--sdc-datepicker-label-color));width:var(--sdc-datepicker-label-width);padding-left:var(--sdc-datepicker-input-padding-horizontal);line-height:1.25rem;display:block}.component-container:has(.sdc-datepicker-label.left){flex-direction:row;align-items:center;padding-left:0}.sdc-datepicker button[brnpopovertrigger]{width:var(--sdc-datepicker-input-width);background:var(--sdc-datepicker-input-background);border:var(--sdc-datepicker-input-border-width) solid hsl(var(--sdc-datepicker-input-border-color));border-radius:var(--sdc-datepicker-input-border-radius);padding:var(--sdc-datepicker-input-padding-vertical) var(--sdc-datepicker-input-padding-horizontal);color:hsl(var(--sdc-datepicker-input-text-color));font-size:var(--sdc-datepicker-input-text-size);font-weight:var(--sdc-datepicker-input-text-weight);cursor:pointer;outline:none}.sdc-datepicker-placeholder{color:hsl(var(--sdc-datepicker-placeholder-color));font-size:var(--sdc-datepicker-placeholder-size);font-weight:var(--sdc-datepicker-placeholder-weight)}.sdc-datepicker button[brnpopovertrigger]:hover:not(:disabled){border-color:hsl(var(--sdc-datepicker-input-border-hover))}.sdc-datepicker button[brnpopovertrigger][data-state=open]{outline:var(--sdc-datepicker-input-focus-ring-width) solid hsl(var(--sdc-datepicker-input-focus-ring-color));outline-offset:var(--sdc-datepicker-input-focus-ring-offset)}.sdc-datepicker button[brnpopovertrigger]:disabled{opacity:.6;cursor:not-allowed;background:hsl(var(--color-neutral-100))}.sdc-datepicker-error{color:hsl(var(--sdc-datepicker-error-color));font-size:var(--sdc-datepicker-error-size);line-height:1rem}.sdc-datepicker-hint{color:hsl(var(--sdc-datepicker-hint-color));font-size:var(--sdc-datepicker-hint-size);line-height:1rem}.sdc-datepicker div[brncalendar]{background:hsl(var(--sdc-datepicker-calendar-background));border:var(--sdc-datepicker-calendar-border-width) solid hsl(var(--sdc-datepicker-calendar-border-color));border-radius:var(--sdc-datepicker-calendar-border-radius);box-shadow:var(--sdc-datepicker-calendar-shadow);padding:var(--sdc-datepicker-calendar-padding)}.sdc-datepicker div[brncalendarheader]{color:hsl(var(--sdc-datepicker-month-year-text-color));font-size:var(--sdc-datepicker-month-year-text-size);font-weight:var(--sdc-datepicker-month-year-text-weight);padding:var(--sdc-datepicker-month-year-padding)}.sdc-datepicker button[brncalendarpreviousbutton],.sdc-datepicker button[brncalendarnextbutton]{cursor:pointer;color:hsl(var(--sdc-datepicker-month-year-text-color));background:hsl(var(--sdc-datepicker-month-year-button-background));transition:all .2s}.sdc-datepicker button[brncalendarpreviousbutton]:disabled,.sdc-datepicker button[brncalendarnextbutton]:disabled{opacity:.6;cursor:not-allowed;color:hsl(var(--color-neutral-100))}.sdc-datepicker button[brncalendarpreviousbutton]:hover:not(:disabled),.sdc-datepicker button[brncalendarnextbutton]:hover:not(:disabled){color:hsl(var(--sdc-datepicker-month-year-button-text-color-hover));background:hsl(var(--sdc-datepicker-month-year-button-background-hover))}.sdc-datepicker button[brncalendarcellbutton]{background:hsl(var(--sdc-datepicker-day-button-background));color:hsl(var(--sdc-datepicker-day-button-text-color));font-size:var(--sdc-datepicker-day-button-text-size);font-weight:var(--sdc-datepicker-day-button-text-weight);border-radius:var(--sdc-datepicker-day-button-border-radius);padding:var(--sdc-datepicker-day-button-padding);cursor:pointer;transition:all .2s}.sdc-datepicker button[brncalendarcellbutton]:hover:not(:disabled){background-color:hsl(var(--sdc-datepicker-day-button-hover-background));color:hsl(var(--sdc-datepicker-day-button-hover-text-color))}.sdc-datepicker button[brncalendarcellbutton]:disabled{background-color:hsl(var(--sdc-datepicker-day-button-disabled-background));color:hsl(var(--sdc-datepicker-day-button-disabled-text-color));cursor:not-allowed}.variant-primary.sdc-datepicker{--sdc-datepicker-day-button-hover-background:var(--color-primary)}.variant-secondary.sdc-datepicker{--sdc-datepicker-day-button-hover-background:var(--color-secondary)}.variant-alternative.sdc-datepicker{--sdc-datepicker-day-button-hover-background:var(--color-alternative)}.variant-success.sdc-datepicker{--sdc-datepicker-day-button-hover-background:var(--color-success)}.variant-warning.sdc-datepicker{--sdc-datepicker-day-button-hover-background:var(--color-warning)}.variant-danger.sdc-datepicker{--sdc-datepicker-day-button-hover-background:var(--color-danger)}.radius-default.sdc-datepicker{--sdc-datepicker-input-border-radius:var(--radius-default);--sdc-datepicker-day-button-border-radius:var(--radius-default)}.radius-sm.sdc-datepicker{--sdc-datepicker-input-border-radius:var(--radius-sm);--sdc-datepicker-day-button-border-radius:var(--radius-sm)}.radius-md.sdc-datepicker{--sdc-datepicker-input-border-radius:var(--radius-md);--sdc-datepicker-day-button-border-radius:var(--radius-md)}.radius-lg.sdc-datepicker{--sdc-datepicker-input-border-radius:var(--radius-lg);--sdc-datepicker-day-button-border-radius:var(--radius-lg)}.radius-xl.sdc-datepicker{--sdc-datepicker-input-border-radius:var(--radius-xl);--sdc-datepicker-day-button-border-radius:var(--radius-xl)}.dialog-overlay-margin{margin:0 1rem}.sdc-ripple{background-color:var(--sdc-button-ripple-color);pointer-events:none;border-radius:50%;animation:.6s linear ripple-animation;position:absolute;transform:scale(0)}@keyframes ripple-animation{to{opacity:0;transform:scale(4)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0), var(--tw-enter-translate-y,0), 0) scale3d(var(--tw-enter-scale,1), var(--tw-enter-scale,1), var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0), var(--tw-exit-translate-y,0), 0) scale3d(var(--tw-exit-scale,1), var(--tw-exit-scale,1), var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
|
|
@@ -6,17 +6,19 @@ declare class MapLoaderComponent implements OnInit, OnDestroy {
|
|
|
6
6
|
viewerService: _angular_core.InputSignal<{
|
|
7
7
|
waitInitialize: () => Observable<any>;
|
|
8
8
|
getObservable: (value: "load_success" | "load_start") => Observable<any>;
|
|
9
|
-
}>;
|
|
9
|
+
} | undefined>;
|
|
10
10
|
logo: _angular_core.InputSignal<string>;
|
|
11
11
|
color: _angular_core.InputSignal<string>;
|
|
12
12
|
duration: _angular_core.InputSignal<number>;
|
|
13
13
|
size: _angular_core.InputSignal<"sm" | "md">;
|
|
14
|
+
isLoading: _angular_core.InputSignal<boolean | null>;
|
|
14
15
|
pill: _angular_core.Signal<ElementRef<any> | undefined>;
|
|
15
16
|
pillContainer: _angular_core.Signal<ElementRef<any> | undefined>;
|
|
16
17
|
container: _angular_core.Signal<ElementRef<any> | undefined>;
|
|
17
18
|
private isFirstLoad;
|
|
18
19
|
private varName;
|
|
19
20
|
private readonly handlers;
|
|
21
|
+
private _isLoading;
|
|
20
22
|
/**
|
|
21
23
|
* Retorna la variable CSS para el color del ripple.
|
|
22
24
|
* Necesitamos setear la variable css --ripple-color con el color accent de la configuración.
|
|
@@ -52,7 +54,7 @@ declare class MapLoaderComponent implements OnInit, OnDestroy {
|
|
|
52
54
|
*/
|
|
53
55
|
private destroyComponent;
|
|
54
56
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MapLoaderComponent, never>;
|
|
55
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MapLoaderComponent, "sdc-map-loader", never, { "viewerService": { "alias": "viewerService"; "required":
|
|
57
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MapLoaderComponent, "sdc-map-loader", never, { "viewerService": { "alias": "viewerService"; "required": false; "isSignal": true; }; "logo": { "alias": "logo"; "required": true; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
export { MapLoaderComponent };
|
|
@@ -330,6 +330,7 @@ declare abstract class BasePopoverComponent implements OnInit, OnDestroy {
|
|
|
330
330
|
declare class SeatPopoverComponent extends BasePopoverComponent implements OnInit {
|
|
331
331
|
data: SeatPopoverData;
|
|
332
332
|
showLoader: boolean;
|
|
333
|
+
load3dView: EventEmitter<void>;
|
|
333
334
|
private readonly thumbnailProvider;
|
|
334
335
|
protected readonly cdr: ChangeDetectorRef;
|
|
335
336
|
protected thumbnail?: string;
|
|
@@ -340,8 +341,9 @@ declare class SeatPopoverComponent extends BasePopoverComponent implements OnIni
|
|
|
340
341
|
protected get formattedSeat(): string;
|
|
341
342
|
protected onEnter(event: MouseEvent): void;
|
|
342
343
|
protected onLeave(event: MouseEvent): void;
|
|
344
|
+
protected onLoad3dView(): void;
|
|
343
345
|
static ɵfac: i0.ɵɵFactoryDeclaration<SeatPopoverComponent, never>;
|
|
344
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SeatPopoverComponent, "sdc-seat-popover", never, { "data": { "alias": "data"; "required": false; }; "showLoader": { "alias": "showLoader"; "required": false; }; }, {}, never, never, true, never>;
|
|
346
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SeatPopoverComponent, "sdc-seat-popover", never, { "data": { "alias": "data"; "required": false; }; "showLoader": { "alias": "showLoader"; "required": false; }; }, { "load3dView": "load3dView"; }, never, never, true, never>;
|
|
345
347
|
}
|
|
346
348
|
|
|
347
349
|
declare class SectionPopoverComponent extends BasePopoverComponent implements OnInit {
|
|
@@ -351,6 +353,7 @@ declare class SectionPopoverComponent extends BasePopoverComponent implements On
|
|
|
351
353
|
showOpenSeatMap: boolean;
|
|
352
354
|
excludeSeatMapSections: string[];
|
|
353
355
|
isTicketFeeEnabled: boolean;
|
|
356
|
+
isAdaEnabled: boolean;
|
|
354
357
|
load3dView: EventEmitter<void>;
|
|
355
358
|
selectForBA: EventEmitter<boolean>;
|
|
356
359
|
openSeatMap: EventEmitter<void>;
|
|
@@ -369,7 +372,7 @@ declare class SectionPopoverComponent extends BasePopoverComponent implements On
|
|
|
369
372
|
protected onSelectForBA(): void;
|
|
370
373
|
protected onOpenSeatMap(): void;
|
|
371
374
|
static ɵfac: i0.ɵɵFactoryDeclaration<SectionPopoverComponent, never>;
|
|
372
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SectionPopoverComponent, "sdc-section-popover", never, { "data": { "alias": "data"; "required": false; }; "showLoader": { "alias": "showLoader"; "required": false; }; "showBestAvailable": { "alias": "showBestAvailable"; "required": false; }; "showOpenSeatMap": { "alias": "showOpenSeatMap"; "required": false; }; "excludeSeatMapSections": { "alias": "excludeSeatMapSections"; "required": false; }; "isTicketFeeEnabled": { "alias": "isTicketFeeEnabled"; "required": false; }; }, { "load3dView": "load3dView"; "selectForBA": "selectForBA"; "openSeatMap": "openSeatMap"; }, never, never, true, never>;
|
|
375
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SectionPopoverComponent, "sdc-section-popover", never, { "data": { "alias": "data"; "required": false; }; "showLoader": { "alias": "showLoader"; "required": false; }; "showBestAvailable": { "alias": "showBestAvailable"; "required": false; }; "showOpenSeatMap": { "alias": "showOpenSeatMap"; "required": false; }; "excludeSeatMapSections": { "alias": "excludeSeatMapSections"; "required": false; }; "isTicketFeeEnabled": { "alias": "isTicketFeeEnabled"; "required": false; }; "isAdaEnabled": { "alias": "isAdaEnabled"; "required": false; }; }, { "load3dView": "load3dView"; "selectForBA": "selectForBA"; "openSeatMap": "openSeatMap"; }, never, never, true, never>;
|
|
373
376
|
}
|
|
374
377
|
|
|
375
378
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { OnInit } from '@angular/core';
|
|
3
|
-
import { BraintreePayload } from '@3ddv/software-division-components/generic/braintree';
|
|
3
|
+
import { BraintreePayload, BraintreeTrigger } from '@3ddv/software-division-components/generic/braintree';
|
|
4
4
|
import { FormControl } from '@angular/forms';
|
|
5
5
|
|
|
6
6
|
declare class AddDigitalWalletComponent implements OnInit {
|
|
@@ -12,9 +12,10 @@ declare class AddDigitalWalletComponent implements OnInit {
|
|
|
12
12
|
readonly cancelClick: _angular_core.OutputEmitterRef<void>;
|
|
13
13
|
readonly useDefaultCard: _angular_core.OutputEmitterRef<boolean>;
|
|
14
14
|
useDefaultCardCtrl: FormControl<boolean | null>;
|
|
15
|
+
readonly trigger: BraintreeTrigger;
|
|
15
16
|
private readonly destroyRef;
|
|
16
17
|
ngOnInit(): void;
|
|
17
|
-
|
|
18
|
+
onSaveCard(): Promise<void>;
|
|
18
19
|
onCancel(): void;
|
|
19
20
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AddDigitalWalletComponent, never>;
|
|
20
21
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AddDigitalWalletComponent, "sdc-add-digital-wallet", never, { "token": { "alias": "token"; "required": true; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "showCancelButton": { "alias": "showCancelButton"; "required": false; "isSignal": true; }; "showIsDefaultCardCheckbox": { "alias": "showIsDefaultCardCheckbox"; "required": false; "isSignal": true; }; }, { "braintreePayload": "braintreePayload"; "cancelClick": "cancelClick"; "useDefaultCard": "useDefaultCard"; }, never, never, true, never>;
|
|
@@ -28,9 +28,24 @@ interface BraintreeBinData {
|
|
|
28
28
|
countryOfIssuance: string;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
/** Pass an instance to BraintreeComponent's [trigger] input. Call fire() to request payment. */
|
|
32
|
+
declare class BraintreeTrigger {
|
|
33
|
+
private readonly _count;
|
|
34
|
+
readonly signal: _angular_core.Signal<number>;
|
|
35
|
+
private _resolve;
|
|
36
|
+
private _reject;
|
|
37
|
+
/** Triggers the drop-in UI to request a payment method. Resolves with the payload on success, rejects on error. */
|
|
38
|
+
requestPayment(): Promise<BraintreePayload>;
|
|
39
|
+
/** @internal Called by BraintreeComponent when payment succeeds */
|
|
40
|
+
settle(payload: BraintreePayload): void;
|
|
41
|
+
/** @internal Called by BraintreeComponent when payment fails */
|
|
42
|
+
fail(err: any): void;
|
|
43
|
+
}
|
|
44
|
+
|
|
31
45
|
/**
|
|
32
46
|
* Braintree Drop‑in component that auto‑wires clicks
|
|
33
47
|
* on the first projected element and errors if more than one.
|
|
48
|
+
* It also accepts a BraintreeTrigger to get the nonce without a projected element.
|
|
34
49
|
* Recreates the drop‑in UI whenever isDigitalWalletPayment changes,
|
|
35
50
|
* ensuring the container is empty before initialization.
|
|
36
51
|
*/
|
|
@@ -42,6 +57,8 @@ declare class BraintreeComponent implements OnDestroy {
|
|
|
42
57
|
readonly token: _angular_core.InputSignal<string>;
|
|
43
58
|
/** Toggle to require cardholder name */
|
|
44
59
|
readonly isDigitalWalletPayment: _angular_core.InputSignal<boolean>;
|
|
60
|
+
/** BraintreeTrigger instance — call trigger.fire() from anywhere to request payment */
|
|
61
|
+
readonly trigger: _angular_core.InputSignal<BraintreeTrigger | undefined>;
|
|
45
62
|
/** Emits when a payment payload is ready */
|
|
46
63
|
readonly onSubmit: _angular_core.OutputEmitterRef<BraintreePayload>;
|
|
47
64
|
/** Holds the Drop‑in instance */
|
|
@@ -51,12 +68,14 @@ declare class BraintreeComponent implements OnDestroy {
|
|
|
51
68
|
/** Clears previous drop-in UI and recreates it */
|
|
52
69
|
private initializeDropin;
|
|
53
70
|
/** Requests payment method and emits payload */
|
|
54
|
-
|
|
71
|
+
requestPayment(): void;
|
|
72
|
+
/** Scrolls the drop-in container into view and focuses it — called on payment error to redirect user attention. */
|
|
73
|
+
private focusContainer;
|
|
55
74
|
/** Tears down the drop-in instance if present */
|
|
56
75
|
private teardownDropin;
|
|
57
76
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BraintreeComponent, never>;
|
|
58
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BraintreeComponent, "sdc-braintree", never, { "token": { "alias": "token"; "required": true; "isSignal": true; }; "isDigitalWalletPayment": { "alias": "isDigitalWalletPayment"; "required": false; "isSignal": true; }; }, { "onSubmit": "onSubmit"; }, never, ["*"], true, never>;
|
|
77
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BraintreeComponent, "sdc-braintree", never, { "token": { "alias": "token"; "required": true; "isSignal": true; }; "isDigitalWalletPayment": { "alias": "isDigitalWalletPayment"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; }, { "onSubmit": "onSubmit"; }, never, ["*"], true, never>;
|
|
59
78
|
}
|
|
60
79
|
|
|
61
|
-
export { BraintreeComponent };
|
|
80
|
+
export { BraintreeComponent, BraintreeTrigger };
|
|
62
81
|
export type { BraintreeBinData, BraintreeDetails, BraintreePayload };
|