c3-components 0.15.3 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/c3-components.mjs +650 -65
- package/fesm2022/c3-components.mjs.map +1 -1
- package/index.d.ts +249 -22
- package/lib/c3-modal/styles/_c3-modal.scss +39 -0
- package/lib/c3-navbar/styles/_c3-navbar.scss +65 -0
- package/lib/c3-rounded-title/styles/_c3-rounded-title.scss +37 -0
- package/lib/c3-styles/_c3-core.scss +8 -0
- package/lib/c3-tabs/components/c3-tabs/c3-tabs.component.scss +39 -0
- package/lib/c3-tabs/styles/_c3-tabs.scss +19 -0
- package/package.json +1 -1
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, signal, viewChild, TemplateRef, inject, ChangeDetectorRef, effect, Component, forwardRef,
|
|
2
|
+
import { input, signal, viewChild, TemplateRef, computed, inject, ChangeDetectorRef, effect, Component, forwardRef, ElementRef, ViewContainerRef, HostListener, Directive, NgModule, Inject, Injector, Injectable, Pipe, output, ViewEncapsulation, Optional, InjectionToken, contentChild, contentChildren, HostBinding, model, DestroyRef, PLATFORM_ID, ChangeDetectionStrategy, ContentChildren, ViewChild } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
5
5
|
import * as i2 from '@angular/forms';
|
|
6
6
|
import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
7
|
-
import
|
|
8
|
-
import { OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
7
|
+
import { Overlay, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
9
8
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
10
|
-
import { Subscription, Subject, merge, takeUntil, BehaviorSubject, filter, skip, debounceTime, of, mergeMap, map, tap, startWith } from 'rxjs';
|
|
11
|
-
import * as i1$
|
|
9
|
+
import { Subscription, Subject, merge, takeUntil, BehaviorSubject, filter, skip, debounceTime, of, mergeMap, map, tap, startWith, distinctUntilChanged } from 'rxjs';
|
|
10
|
+
import * as i1$1 from '@angular/material/dialog';
|
|
12
11
|
import { MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog';
|
|
13
12
|
import * as i3 from '@angular/material/button';
|
|
14
13
|
import { MatButtonModule } from '@angular/material/button';
|
|
@@ -21,9 +20,9 @@ import * as i2$1 from '@angular/material/icon';
|
|
|
21
20
|
import { MatIconModule } from '@angular/material/icon';
|
|
22
21
|
import * as i5$1 from '@angular/material/toolbar';
|
|
23
22
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
24
|
-
import * as i1$
|
|
23
|
+
import * as i1$3 from '@angular/common/http';
|
|
25
24
|
import { provideHttpClient, withInterceptorsFromDi, HttpClient } from '@angular/common/http';
|
|
26
|
-
import * as i1$
|
|
25
|
+
import * as i1$2 from '@angular/platform-browser';
|
|
27
26
|
import * as i3$2 from '@angular/material/core';
|
|
28
27
|
import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
|
|
29
28
|
import * as i5$2 from '@angular/material/menu';
|
|
@@ -34,28 +33,54 @@ import autoAnimate from '@formkit/auto-animate';
|
|
|
34
33
|
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
35
34
|
import * as i4$1 from '@angular/material/progress-spinner';
|
|
36
35
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
37
|
-
import * as i1$
|
|
36
|
+
import * as i1$4 from '@angular/material/tree';
|
|
38
37
|
import { MatTreeFlattener, MatTreeFlatDataSource, MatTreeModule } from '@angular/material/tree';
|
|
39
|
-
import * as i1$
|
|
40
|
-
import { Router, ActivatedRoute, RouterModule } from '@angular/router';
|
|
38
|
+
import * as i1$5 from '@angular/router';
|
|
39
|
+
import { Router, ActivatedRoute, RouterModule, NavigationEnd, RouterLink } from '@angular/router';
|
|
41
40
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
42
41
|
|
|
43
42
|
class C3DropdownComponent {
|
|
44
43
|
constructor() {
|
|
44
|
+
/** Classes set directly on the component via [panelClass]. */
|
|
45
45
|
this.panelClass = input(...(ngDevMode ? [undefined, { debugName: "panelClass" }] : []));
|
|
46
|
+
/** Classes set by the trigger directive via [c3DropdownClass] or [dropdownClass]. */
|
|
47
|
+
this.dropdownClass = signal(undefined, ...(ngDevMode ? [{ debugName: "dropdownClass" }] : []));
|
|
48
|
+
/** Whether the dropdown is currently open. */
|
|
46
49
|
this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
|
|
47
50
|
this.template = viewChild.required((TemplateRef));
|
|
51
|
+
/** Merges panelClass (from component input) and dropdownClass (from trigger). */
|
|
52
|
+
this.mergedClass = computed(() => {
|
|
53
|
+
const panel = this.panelClass();
|
|
54
|
+
const dropdown = this.dropdownClass();
|
|
55
|
+
if (!panel && !dropdown)
|
|
56
|
+
return '';
|
|
57
|
+
if (!panel)
|
|
58
|
+
return dropdown;
|
|
59
|
+
if (!dropdown)
|
|
60
|
+
return panel;
|
|
61
|
+
// Merge both into an array
|
|
62
|
+
const toArray = (v) => {
|
|
63
|
+
if (typeof v === 'string')
|
|
64
|
+
return v ? [v] : [];
|
|
65
|
+
if (Array.isArray(v))
|
|
66
|
+
return v;
|
|
67
|
+
if (v instanceof Set)
|
|
68
|
+
return [...v];
|
|
69
|
+
return Object.keys(v).filter((k) => v[k]);
|
|
70
|
+
};
|
|
71
|
+
return [...toArray(panel), ...toArray(dropdown)];
|
|
72
|
+
}, ...(ngDevMode ? [{ debugName: "mergedClass" }] : []));
|
|
48
73
|
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
49
74
|
effect(() => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
75
|
+
// Trigger change detection when either class source changes
|
|
76
|
+
this.mergedClass();
|
|
77
|
+
this._changeDetectorRef.markForCheck();
|
|
53
78
|
});
|
|
54
79
|
}
|
|
55
80
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.14", type: C3DropdownComponent, isStandalone: false, selector: "c3-dropdown", inputs: { panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "template", first: true, predicate: (TemplateRef), descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
81
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.14", type: C3DropdownComponent, isStandalone: false, selector: "c3-dropdown", inputs: { panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "template", first: true, predicate: (TemplateRef), descendants: true, isSignal: true }], exportAs: ["c3Dropdown"], ngImport: i0, template: `
|
|
57
82
|
<ng-template>
|
|
58
|
-
<div class="c3-dropdown-panel" [ngClass]="
|
|
83
|
+
<div class="c3-dropdown-panel" [ngClass]="mergedClass()">
|
|
59
84
|
<ng-content></ng-content>
|
|
60
85
|
</div>
|
|
61
86
|
</ng-template>
|
|
@@ -65,9 +90,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
65
90
|
type: Component,
|
|
66
91
|
args: [{
|
|
67
92
|
selector: 'c3-dropdown',
|
|
93
|
+
exportAs: 'c3Dropdown',
|
|
68
94
|
template: `
|
|
69
95
|
<ng-template>
|
|
70
|
-
<div class="c3-dropdown-panel" [ngClass]="
|
|
96
|
+
<div class="c3-dropdown-panel" [ngClass]="mergedClass()">
|
|
71
97
|
<ng-content></ng-content>
|
|
72
98
|
</div>
|
|
73
99
|
</ng-template>
|
|
@@ -84,28 +110,42 @@ const MAT_DROPDOWN_VALUE_ACCESSOR = {
|
|
|
84
110
|
/**
|
|
85
111
|
* @description The C3DropdownTrigger directive is used to display or hide a dropdown menu
|
|
86
112
|
* C3DropdownComponent when an item is clicked.
|
|
87
|
-
* @selector [c3Dropdown]
|
|
113
|
+
* @selector [c3Dropdown], [c3DropdownTrigger]
|
|
88
114
|
* @exportAs c3DropdownTrigger
|
|
89
115
|
* @input c3Dropdown - A reference to an instance of C3DropdownComponent.
|
|
116
|
+
* @input c3DropdownTrigger - A reference to an instance of C3DropdownComponent (alias).
|
|
90
117
|
* @input c3DropdownDisabled - A boolean indicating whether the directive should be disabled.
|
|
91
|
-
* @input c3DropdownClass
|
|
92
|
-
* object representing the CSS classes to be applied to the dropdown menu.
|
|
118
|
+
* @input c3DropdownClass / dropdownClass - CSS classes to be applied to the dropdown panel.
|
|
93
119
|
*/
|
|
94
120
|
class C3DropdownTrigger {
|
|
95
|
-
constructor(
|
|
96
|
-
this._element = _element;
|
|
97
|
-
this._overlay = _overlay;
|
|
98
|
-
this._viewContainerRef = _viewContainerRef;
|
|
121
|
+
constructor() {
|
|
99
122
|
this._closingActionsSubscription = Subscription.EMPTY;
|
|
100
123
|
this._destroyed = new Subject();
|
|
101
|
-
|
|
102
|
-
this.
|
|
103
|
-
|
|
104
|
-
|
|
124
|
+
this._element = inject((ElementRef));
|
|
125
|
+
this._overlay = inject(Overlay);
|
|
126
|
+
this._viewContainerRef = inject(ViewContainerRef);
|
|
127
|
+
/** The dropdown menu instance (via [c3Dropdown] binding). */
|
|
128
|
+
this.c3Dropdown = input(null, ...(ngDevMode ? [{ debugName: "c3Dropdown" }] : []));
|
|
129
|
+
/** The dropdown menu instance (via [c3DropdownTrigger] binding). */
|
|
130
|
+
this.c3DropdownTrigger = input(null, ...(ngDevMode ? [{ debugName: "c3DropdownTrigger" }] : []));
|
|
131
|
+
/** Resolved dropdown reference (supports both binding syntaxes). */
|
|
132
|
+
this._dropdown = computed(() => this.c3Dropdown() ?? this.c3DropdownTrigger(), ...(ngDevMode ? [{ debugName: "_dropdown" }] : []));
|
|
105
133
|
/** Whether the dropdown is disabled. */
|
|
106
|
-
this.dropdownDisabled = input(false, ...(ngDevMode ? [{ debugName: "dropdownDisabled" }] : [
|
|
107
|
-
|
|
108
|
-
|
|
134
|
+
this.dropdownDisabled = input(false, ...(ngDevMode ? [{ debugName: "dropdownDisabled", alias: 'c3DropdownDisabled' }] : [{
|
|
135
|
+
alias: 'c3DropdownDisabled',
|
|
136
|
+
}]));
|
|
137
|
+
/** Classes to be passed to the dropdown menu via [c3DropdownClass]. */
|
|
138
|
+
this.c3DropdownClass = input(undefined, ...(ngDevMode ? [{ debugName: "c3DropdownClass" }] : []));
|
|
139
|
+
/** Classes to be passed to the dropdown menu via [dropdownClass]. */
|
|
140
|
+
this.dropdownClass = input(undefined, ...(ngDevMode ? [{ debugName: "dropdownClass" }] : []));
|
|
141
|
+
// Push trigger class changes to the dropdown component
|
|
142
|
+
effect(() => {
|
|
143
|
+
const dropdown = this._dropdown();
|
|
144
|
+
const cls = this.c3DropdownClass() ?? this.dropdownClass();
|
|
145
|
+
if (dropdown) {
|
|
146
|
+
dropdown.dropdownClass.set(cls);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
109
149
|
}
|
|
110
150
|
onClick() {
|
|
111
151
|
this.show();
|
|
@@ -117,19 +157,21 @@ class C3DropdownTrigger {
|
|
|
117
157
|
this.close();
|
|
118
158
|
}
|
|
119
159
|
show() {
|
|
120
|
-
|
|
160
|
+
const dropdown = this._dropdown();
|
|
161
|
+
if (!dropdown?.template())
|
|
121
162
|
return;
|
|
122
|
-
|
|
163
|
+
dropdown.isOpen.set(true);
|
|
123
164
|
const overlayRef = this._overlay.create(this._getOverlayConfig());
|
|
124
|
-
const portal = new TemplatePortal(
|
|
165
|
+
const portal = new TemplatePortal(dropdown.template(), this._viewContainerRef);
|
|
125
166
|
overlayRef.attach(portal);
|
|
126
167
|
this.overlayRef = overlayRef;
|
|
127
168
|
this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.close());
|
|
128
169
|
}
|
|
129
170
|
close() {
|
|
130
|
-
if (this.overlayRef
|
|
171
|
+
if (this.overlayRef?.hasAttached()) {
|
|
131
172
|
this.overlayRef.detach();
|
|
132
|
-
|
|
173
|
+
}
|
|
174
|
+
this._dropdown()?.isOpen.set(false);
|
|
133
175
|
}
|
|
134
176
|
_getOverlayConfig() {
|
|
135
177
|
const belowPosition = {
|
|
@@ -143,9 +185,6 @@ class C3DropdownTrigger {
|
|
|
143
185
|
originY: 'top',
|
|
144
186
|
overlayX: 'start',
|
|
145
187
|
overlayY: 'bottom',
|
|
146
|
-
// The overlay edge connected to the trigger should have squared corners, while
|
|
147
|
-
// the opposite end has rounded corners. We apply a CSS class to swap the
|
|
148
|
-
// border-radius based on the overlay position.
|
|
149
188
|
panelClass: 'mat-autocomplete-panel-above',
|
|
150
189
|
};
|
|
151
190
|
const positionStrategy = this._overlay
|
|
@@ -165,17 +204,18 @@ class C3DropdownTrigger {
|
|
|
165
204
|
const detachments = this.overlayRef.detachments();
|
|
166
205
|
return merge(backdrop, detachments).pipe(takeUntil(this._destroyed));
|
|
167
206
|
}
|
|
168
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DropdownTrigger, deps: [
|
|
169
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.14", type: C3DropdownTrigger, isStandalone: false, selector: "[c3DropdownTrigger]", inputs: {
|
|
207
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DropdownTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
208
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.14", type: C3DropdownTrigger, isStandalone: false, selector: "[c3Dropdown], [c3DropdownTrigger]", inputs: { c3Dropdown: { classPropertyName: "c3Dropdown", publicName: "c3Dropdown", isSignal: true, isRequired: false, transformFunction: null }, c3DropdownTrigger: { classPropertyName: "c3DropdownTrigger", publicName: "c3DropdownTrigger", isSignal: true, isRequired: false, transformFunction: null }, dropdownDisabled: { classPropertyName: "dropdownDisabled", publicName: "c3DropdownDisabled", isSignal: true, isRequired: false, transformFunction: null }, c3DropdownClass: { classPropertyName: "c3DropdownClass", publicName: "c3DropdownClass", isSignal: true, isRequired: false, transformFunction: null }, dropdownClass: { classPropertyName: "dropdownClass", publicName: "dropdownClass", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()" } }, providers: [MAT_DROPDOWN_VALUE_ACCESSOR], exportAs: ["c3DropdownTrigger"], ngImport: i0 }); }
|
|
170
209
|
}
|
|
171
210
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DropdownTrigger, decorators: [{
|
|
172
211
|
type: Directive,
|
|
173
212
|
args: [{
|
|
174
|
-
selector: '[c3DropdownTrigger]',
|
|
213
|
+
selector: '[c3Dropdown], [c3DropdownTrigger]',
|
|
214
|
+
exportAs: 'c3DropdownTrigger',
|
|
175
215
|
providers: [MAT_DROPDOWN_VALUE_ACCESSOR],
|
|
176
216
|
standalone: false,
|
|
177
217
|
}]
|
|
178
|
-
}], ctorParameters: () => [{ type: i0.
|
|
218
|
+
}], ctorParameters: () => [], propDecorators: { c3Dropdown: [{ type: i0.Input, args: [{ isSignal: true, alias: "c3Dropdown", required: false }] }], c3DropdownTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "c3DropdownTrigger", required: false }] }], dropdownDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "c3DropdownDisabled", required: false }] }], c3DropdownClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "c3DropdownClass", required: false }] }], dropdownClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropdownClass", required: false }] }], onClick: [{
|
|
179
219
|
type: HostListener,
|
|
180
220
|
args: ['click']
|
|
181
221
|
}] } });
|
|
@@ -202,7 +242,7 @@ class C3AlertDialogComponent {
|
|
|
202
242
|
onNoClick() {
|
|
203
243
|
this.dialogRef.close();
|
|
204
244
|
}
|
|
205
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3AlertDialogComponent, deps: [{ token: i1$
|
|
245
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3AlertDialogComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
206
246
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: C3AlertDialogComponent, isStandalone: false, selector: "AlertDialogComponent", ngImport: i0, template: `
|
|
207
247
|
<mat-dialog-content>
|
|
208
248
|
<div [innerHtml]="data.text"></div>
|
|
@@ -212,7 +252,7 @@ class C3AlertDialogComponent {
|
|
|
212
252
|
{{ data.acceptText || 'ok' }}
|
|
213
253
|
</button>
|
|
214
254
|
</mat-dialog-actions>
|
|
215
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$
|
|
255
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
|
|
216
256
|
}
|
|
217
257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3AlertDialogComponent, decorators: [{
|
|
218
258
|
type: Component,
|
|
@@ -230,7 +270,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
230
270
|
`,
|
|
231
271
|
standalone: false
|
|
232
272
|
}]
|
|
233
|
-
}], ctorParameters: () => [{ type: i1$
|
|
273
|
+
}], ctorParameters: () => [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
|
|
234
274
|
type: Inject,
|
|
235
275
|
args: [MAT_DIALOG_DATA]
|
|
236
276
|
}] }] });
|
|
@@ -243,7 +283,7 @@ class ConfirmDialogComponent {
|
|
|
243
283
|
onNoClick() {
|
|
244
284
|
this.dialogRef.close();
|
|
245
285
|
}
|
|
246
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: ConfirmDialogComponent, deps: [{ token: i1$
|
|
286
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: ConfirmDialogComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
247
287
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: ConfirmDialogComponent, isStandalone: false, selector: "ConfirmDialogComponent", ngImport: i0, template: `
|
|
248
288
|
<mat-dialog-content>
|
|
249
289
|
<div [innerHtml]="data.text"></div>
|
|
@@ -256,7 +296,7 @@ class ConfirmDialogComponent {
|
|
|
256
296
|
{{ data.accept?.text }}
|
|
257
297
|
</button>
|
|
258
298
|
</mat-dialog-actions>
|
|
259
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$
|
|
299
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
|
|
260
300
|
}
|
|
261
301
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
|
|
262
302
|
type: Component,
|
|
@@ -277,7 +317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
277
317
|
`,
|
|
278
318
|
standalone: false
|
|
279
319
|
}]
|
|
280
|
-
}], ctorParameters: () => [{ type: i1$
|
|
320
|
+
}], ctorParameters: () => [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
|
|
281
321
|
type: Inject,
|
|
282
322
|
args: [MAT_DIALOG_DATA]
|
|
283
323
|
}] }] });
|
|
@@ -292,7 +332,7 @@ class C3PromptDialogComponent {
|
|
|
292
332
|
onNoClick() {
|
|
293
333
|
this.dialogRef.close();
|
|
294
334
|
}
|
|
295
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3PromptDialogComponent, deps: [{ token: i1$
|
|
335
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3PromptDialogComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
296
336
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3PromptDialogComponent, isStandalone: false, selector: "PrompDialogComponent", ngImport: i0, template: `
|
|
297
337
|
<div mat-dialog-title>{{ data.text }}</div>
|
|
298
338
|
<mat-dialog-content>
|
|
@@ -329,7 +369,7 @@ class C3PromptDialogComponent {
|
|
|
329
369
|
{{ data.accept?.text }}
|
|
330
370
|
</button>
|
|
331
371
|
</mat-dialog-actions>
|
|
332
|
-
`, isInline: true, styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$
|
|
372
|
+
`, isInline: true, styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i6.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
|
|
333
373
|
}
|
|
334
374
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3PromptDialogComponent, decorators: [{
|
|
335
375
|
type: Component,
|
|
@@ -370,7 +410,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
370
410
|
</button>
|
|
371
411
|
</mat-dialog-actions>
|
|
372
412
|
`, standalone: false, styles: ["mat-form-field{width:100%}\n"] }]
|
|
373
|
-
}], ctorParameters: () => [{ type: i1$
|
|
413
|
+
}], ctorParameters: () => [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
|
|
374
414
|
type: Inject,
|
|
375
415
|
args: [MAT_DIALOG_DATA]
|
|
376
416
|
}] }, { type: i2.FormBuilder }] });
|
|
@@ -438,7 +478,7 @@ class C3DialogEmbedChildComponent {
|
|
|
438
478
|
}
|
|
439
479
|
}
|
|
440
480
|
}
|
|
441
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DialogEmbedChildComponent, deps: [{ token: i1$
|
|
481
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DialogEmbedChildComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
442
482
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3DialogEmbedChildComponent, isStandalone: false, selector: "C3DialogEmbedChildComponent", viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
|
|
443
483
|
<div [class]="'dialog-content-container ' + (data.classContainer || '')">
|
|
444
484
|
@if (data.toolbar) {
|
|
@@ -497,7 +537,7 @@ class C3DialogEmbedChildComponent {
|
|
|
497
537
|
</div>
|
|
498
538
|
}
|
|
499
539
|
</div>
|
|
500
|
-
`, isInline: true, styles: [".dialog-content-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow:auto}.dialog-content-container .dialog-content{display:flex;flex-direction:column;height:100%;overflow:auto;flex-grow:1}.dialog-content-container .mat-toolbar{display:flex;justify-content:space-between;align-items:center;border-radius:.25rem}.dialog-content-container .mat-toolbar span{color:inherit}.dialog-content-container .spacer{flex:1 1 auto;min-width:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$
|
|
540
|
+
`, isInline: true, styles: [".dialog-content-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow:auto}.dialog-content-container .dialog-content{display:flex;flex-direction:column;height:100%;overflow:auto;flex-grow:1}.dialog-content-container .mat-toolbar{display:flex;justify-content:space-between;align-items:center;border-radius:.25rem}.dialog-content-container .mat-toolbar span{color:inherit}.dialog-content-container .spacer{flex:1 1 auto;min-width:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }] }); }
|
|
501
541
|
}
|
|
502
542
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3DialogEmbedChildComponent, decorators: [{
|
|
503
543
|
type: Component,
|
|
@@ -560,7 +600,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
560
600
|
}
|
|
561
601
|
</div>
|
|
562
602
|
`, standalone: false, styles: [".dialog-content-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow:auto}.dialog-content-container .dialog-content{display:flex;flex-direction:column;height:100%;overflow:auto;flex-grow:1}.dialog-content-container .mat-toolbar{display:flex;justify-content:space-between;align-items:center;border-radius:.25rem}.dialog-content-container .mat-toolbar span{color:inherit}.dialog-content-container .spacer{flex:1 1 auto;min-width:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:.5rem}\n"] }]
|
|
563
|
-
}], ctorParameters: () => [{ type: i1$
|
|
603
|
+
}], ctorParameters: () => [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
|
|
564
604
|
type: Inject,
|
|
565
605
|
args: [MAT_DIALOG_DATA]
|
|
566
606
|
}] }, { type: i0.ChangeDetectorRef }], propDecorators: { target: [{ type: i0.ViewChild, args: ['target', { ...{
|
|
@@ -931,7 +971,7 @@ class C3SafeUrlPipe {
|
|
|
931
971
|
transform(url) {
|
|
932
972
|
return url ? this.sanitizer.bypassSecurityTrustResourceUrl(url) : '';
|
|
933
973
|
}
|
|
934
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3SafeUrlPipe, deps: [{ token: i1$
|
|
974
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3SafeUrlPipe, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
935
975
|
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.14", ngImport: i0, type: C3SafeUrlPipe, isStandalone: true, name: "c3SafeUrl" }); }
|
|
936
976
|
}
|
|
937
977
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3SafeUrlPipe, decorators: [{
|
|
@@ -940,7 +980,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
940
980
|
name: 'c3SafeUrl',
|
|
941
981
|
standalone: true,
|
|
942
982
|
}]
|
|
943
|
-
}], ctorParameters: () => [{ type: i1$
|
|
983
|
+
}], ctorParameters: () => [{ type: i1$2.DomSanitizer }] });
|
|
944
984
|
|
|
945
985
|
class C3FileViewerImageComponent {
|
|
946
986
|
constructor() {
|
|
@@ -1050,7 +1090,7 @@ class C3FileViewerComponent {
|
|
|
1050
1090
|
this.fileViewer().styleHeight =
|
|
1051
1091
|
'calc(100% - ' + this.screenHeightOccupied() + 'px)';
|
|
1052
1092
|
}
|
|
1053
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileViewerComponent, deps: [{ token: 'config', optional: true }, { token: i1$
|
|
1093
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileViewerComponent, deps: [{ token: 'config', optional: true }, { token: i1$3.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1054
1094
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3FileViewerComponent, isStandalone: false, selector: "c3-file-viewer", inputs: { screenHeightOccupied: { classPropertyName: "screenHeightOccupied", publicName: "screenHeightOccupied", isSignal: true, isRequired: false, transformFunction: null }, fileViewer: { classPropertyName: "fileViewer", publicName: "fileViewer", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { indexChange: "indexChange", configChange: "configChange", customFileEvent: "customFileEvent" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseleave": "onMouseLeave()", "window:keyup.ArrowRight": "next($event)", "window:keyup.ArrowLeft": "previous($event)" }, classAttribute: "c3-file-viewer" }, usesOnChanges: true, ngImport: i0, template: "@if (fileViewer(); as viewer) {\n<div\n class=\"c3-file-container\"\n [c3-full-screen]=\"viewer.fullscreen$ | async\"\n [style.height]=\"viewer.styleHeight\"\n [style.backgroundColor]=\"viewer.config.containerBackgroundColor\"\n (wheel)=\"viewer.scrollZoom($event)\"\n (dragover)=\"viewer.onDragOver($event)\"\n>\n @if (viewer.currentFile.type.startsWith('image')) {\n <c3-file-viewer-image\n [fileViewer]=\"viewer\"\n [style]=\"viewer.style\"\n (dragstart)=\"viewer.onDragStart($event)\"\n />\n } @else if (viewer.currentFile.type.startsWith('video')) {\n <c3-file-viewer-video\n [fileViewer]=\"viewer\"\n />\n } @else if (viewer.currentFile.type.startsWith('application/pdf')) {\n <c3-file-viewer-pdf\n [fileViewer]=\"viewer\"\n />\n } @else {\n <c3-file-viewer-default\n [fileViewer]=\"viewer\"\n />\n }\n\n <!-- Div below will be used to hide the 'ghost' image when dragging -->\n <div></div>\n @if (viewer.loading) {\n <div class=\"spinner-container\">\n <div class=\"spinner\"></div>\n </div>\n }\n\n <c3-file-viewer-actions [fileViewer]=\"viewer\" />\n </div>\n}\n", styles: [".c3-file-container{position:relative;width:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: FullScreenDirective, selector: "[C3FullScreen], [c3-full-screen]", inputs: ["c3Screenfull", "c3-full-screen"] }, { kind: "component", type: C3FileViewerActionsComponent, selector: "c3-file-viewer-actions", inputs: ["fileViewer"] }, { kind: "component", type: C3FileViewerImageComponent, selector: "c3-file-viewer-image, [c3-file-viewer-image]", inputs: ["fileViewer"], outputs: ["dragstart"] }, { kind: "component", type: C3FileViewerPdfComponent, selector: "c3-file-viewer-pdf", inputs: ["fileViewer"], outputs: ["dragstart"] }, { kind: "component", type: C3FileViewerVideoComponent, selector: "c3-file-viewer-video", inputs: ["fileViewer"] }, { kind: "component", type: C3FileViewerDefaultComponent, selector: "c3-file-viewer-default", inputs: ["fileViewer"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
1055
1095
|
}
|
|
1056
1096
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileViewerComponent, decorators: [{
|
|
@@ -1063,7 +1103,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
1063
1103
|
}, {
|
|
1064
1104
|
type: Inject,
|
|
1065
1105
|
args: ['config']
|
|
1066
|
-
}] }, { type: i1$
|
|
1106
|
+
}] }, { type: i1$3.HttpClient }], propDecorators: { screenHeightOccupied: [{ type: i0.Input, args: [{ isSignal: true, alias: "screenHeightOccupied", required: false }] }], fileViewer: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileViewer", required: true }] }], indexChange: [{ type: i0.Output, args: ["indexChange"] }], configChange: [{ type: i0.Output, args: ["configChange"] }], customFileEvent: [{ type: i0.Output, args: ["customFileEvent"] }], onMouseOver: [{
|
|
1067
1107
|
type: HostListener,
|
|
1068
1108
|
args: ['mouseover']
|
|
1069
1109
|
}], onMouseLeave: [{
|
|
@@ -1528,7 +1568,7 @@ class C3FileViewerDialogComponent {
|
|
|
1528
1568
|
...this.dialogConfig(),
|
|
1529
1569
|
});
|
|
1530
1570
|
}
|
|
1531
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileViewerDialogComponent, deps: [{ token: i1$
|
|
1571
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileViewerDialogComponent, deps: [{ token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1532
1572
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.14", type: C3FileViewerDialogComponent, isStandalone: false, selector: "c3-file-viewer-dialog", inputs: { fileViewer: { classPropertyName: "fileViewer", publicName: "fileViewer", isSignal: true, isRequired: true, transformFunction: null }, dialogConfig: { classPropertyName: "dialogConfig", publicName: "dialogConfig", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "openDialog()" }, classAttribute: "c3-file-viewer-dialog" }, ngImport: i0, template: ` <ng-content /> `, isInline: true }); }
|
|
1533
1573
|
}
|
|
1534
1574
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3FileViewerDialogComponent, decorators: [{
|
|
@@ -1541,7 +1581,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
1541
1581
|
},
|
|
1542
1582
|
standalone: false
|
|
1543
1583
|
}]
|
|
1544
|
-
}], ctorParameters: () => [{ type: i1$
|
|
1584
|
+
}], ctorParameters: () => [{ type: i1$1.MatDialog }], propDecorators: { fileViewer: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileViewer", required: true }] }], dialogConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "dialogConfig", required: false }] }], openDialog: [{
|
|
1545
1585
|
type: HostListener,
|
|
1546
1586
|
args: ['click']
|
|
1547
1587
|
}] } });
|
|
@@ -2117,7 +2157,7 @@ class C3TreeComponent {
|
|
|
2117
2157
|
});
|
|
2118
2158
|
}
|
|
2119
2159
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2120
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3TreeComponent, isStandalone: true, selector: "c3-tree", inputs: { treeData: { classPropertyName: "treeData", publicName: "treeData", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { treeData: "treeDataChange", isLoading: "isLoadingChange", treeDataSelected: "treeDataSelected" }, ngImport: i0, template: "@if(isLoading()) {\r\n<div class=\"c3-tree-loader\">\r\n <mat-spinner diameter=\"50\"></mat-spinner>\r\n</div>\r\n}\r\n\r\n<mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding class=\"children\">\r\n <button mat-ripple (click)=\"treeDataSelected.emit(node)\">\r\n {{ node.name }}\r\n </button>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n class=\"has-children\"\r\n >\r\n <button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n <div class=\"mat-tree-node-content\">\r\n <ng-content>\r\n <span>{{ node.name }}</span>\r\n </ng-content>\r\n </div>\r\n </mat-tree-node>\r\n</mat-tree>\r\n", styles: [":host{display:block;width:100%;position:relative;min-height:100%;padding:4px 0}.c3-tree-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}mat-tree{width:100%;height:100%;background-color:transparent;border:1px solid var(--mat-divider-color);border-radius:4px;overflow:auto}mat-tree mat-tree-node{display:flex;align-items:center;justify-content:start;gap:1rem}mat-tree mat-tree-node.has-children>button{height:32px;width:32px;border-radius:50%;display:flex;justify-content:center;align-items:center;border:1px solid transparent;margin:.5rem}mat-tree mat-tree-node.has-children>button:hover{border-color:var(--mat-divider-color)}mat-tree mat-tree-node.has-children:hover{background-color:var(--background-hover)}mat-tree mat-tree-node.has-children .mat-tree-node-content{padding-right:.25rem;display:flex;justify-content:space-between;align-items:center;width:100%}mat-tree mat-tree-node.children button{width:100%;border-radius:.25rem;padding:0 1rem;height:2rem;text-align:left}mat-tree mat-tree-node.children button:hover{background-color:var(--background-hover)}mat-tree mat-tree-node:hover{background-color:var(--background-hover)}\n"], dependencies: [{ kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i1$
|
|
2160
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3TreeComponent, isStandalone: true, selector: "c3-tree", inputs: { treeData: { classPropertyName: "treeData", publicName: "treeData", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { treeData: "treeDataChange", isLoading: "isLoadingChange", treeDataSelected: "treeDataSelected" }, ngImport: i0, template: "@if(isLoading()) {\r\n<div class=\"c3-tree-loader\">\r\n <mat-spinner diameter=\"50\"></mat-spinner>\r\n</div>\r\n}\r\n\r\n<mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding class=\"children\">\r\n <button mat-ripple (click)=\"treeDataSelected.emit(node)\">\r\n {{ node.name }}\r\n </button>\r\n </mat-tree-node>\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n class=\"has-children\"\r\n >\r\n <button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl.isExpanded(node) ? \"expand_more\" : \"chevron_right\" }}\r\n </mat-icon>\r\n </button>\r\n <div class=\"mat-tree-node-content\">\r\n <ng-content>\r\n <span>{{ node.name }}</span>\r\n </ng-content>\r\n </div>\r\n </mat-tree-node>\r\n</mat-tree>\r\n", styles: [":host{display:block;width:100%;position:relative;min-height:100%;padding:4px 0}.c3-tree-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}mat-tree{width:100%;height:100%;background-color:transparent;border:1px solid var(--mat-divider-color);border-radius:4px;overflow:auto}mat-tree mat-tree-node{display:flex;align-items:center;justify-content:start;gap:1rem}mat-tree mat-tree-node.has-children>button{height:32px;width:32px;border-radius:50%;display:flex;justify-content:center;align-items:center;border:1px solid transparent;margin:.5rem}mat-tree mat-tree-node.has-children>button:hover{border-color:var(--mat-divider-color)}mat-tree mat-tree-node.has-children:hover{background-color:var(--background-hover)}mat-tree mat-tree-node.has-children .mat-tree-node-content{padding-right:.25rem;display:flex;justify-content:space-between;align-items:center;width:100%}mat-tree mat-tree-node.children button{width:100%;border-radius:.25rem;padding:0 1rem;height:2rem;text-align:left}mat-tree mat-tree-node.children button:hover{background-color:var(--background-hover)}mat-tree mat-tree-node:hover{background-color:var(--background-hover)}\n"], dependencies: [{ kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i1$4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i1$4.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i1$4.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i1$4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i1$4.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i3$2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
2121
2161
|
}
|
|
2122
2162
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TreeComponent, decorators: [{
|
|
2123
2163
|
type: Component,
|
|
@@ -2385,7 +2425,7 @@ class C3MenuComponent {
|
|
|
2385
2425
|
this._c3Menu = inject(C3MenuService);
|
|
2386
2426
|
}
|
|
2387
2427
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2388
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3MenuComponent, isStandalone: false, selector: "c3-menu", ngImport: i0, template: "@if(!_c3Menu.isHeadless()) {\n <div id=\"app-menu\">\n <div class=\"ui-scroll\">\n <ul>\n <ng-content></ng-content>\n </ul>\n </div>\n </div>\n}\n<div class=\"layout-main\" [class.headless]=\"_c3Menu.isHeadless()\">\n <router-outlet></router-outlet>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1$
|
|
2428
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3MenuComponent, isStandalone: false, selector: "c3-menu", ngImport: i0, template: "@if(!_c3Menu.isHeadless()) {\n <div id=\"app-menu\">\n <div class=\"ui-scroll\">\n <ul>\n <ng-content></ng-content>\n </ul>\n </div>\n </div>\n}\n<div class=\"layout-main\" [class.headless]=\"_c3Menu.isHeadless()\">\n <router-outlet></router-outlet>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1$5.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
2389
2429
|
}
|
|
2390
2430
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3MenuComponent, decorators: [{
|
|
2391
2431
|
type: Component,
|
|
@@ -2422,7 +2462,7 @@ class C3NavItemComponent {
|
|
|
2422
2462
|
});
|
|
2423
2463
|
}
|
|
2424
2464
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3NavItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2425
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.14", type: C3NavItemComponent, isStandalone: false, selector: "c3-nav-item", inputs: { route: { classPropertyName: "route", publicName: "route", isSignal: true, isRequired: true, transformFunction: null }, itemTitle: { classPropertyName: "itemTitle", publicName: "itemTitle", isSignal: true, isRequired: true, transformFunction: null }, check: { classPropertyName: "check", publicName: "check", isSignal: true, isRequired: false, transformFunction: null }, isExternal: { classPropertyName: "isExternal", publicName: "isExternal", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "element", first: true, predicate: ["button"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<li #button>\n <a matRipple matRippleColor=\"#ffffff66\" [routerLink]=\"isExternal() ? null : route()\" [href]=\"isExternal() ? route() : null\">\n <ng-content></ng-content>\n <span> {{ itemTitle() }} </span>\n </a>\n</li>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1$
|
|
2465
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.14", type: C3NavItemComponent, isStandalone: false, selector: "c3-nav-item", inputs: { route: { classPropertyName: "route", publicName: "route", isSignal: true, isRequired: true, transformFunction: null }, itemTitle: { classPropertyName: "itemTitle", publicName: "itemTitle", isSignal: true, isRequired: true, transformFunction: null }, check: { classPropertyName: "check", publicName: "check", isSignal: true, isRequired: false, transformFunction: null }, isExternal: { classPropertyName: "isExternal", publicName: "isExternal", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "element", first: true, predicate: ["button"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<li #button>\n <a matRipple matRippleColor=\"#ffffff66\" [routerLink]=\"isExternal() ? null : route()\" [href]=\"isExternal() ? route() : null\">\n <ng-content></ng-content>\n <span> {{ itemTitle() }} </span>\n </a>\n</li>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3$2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }] }); }
|
|
2426
2466
|
}
|
|
2427
2467
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3NavItemComponent, decorators: [{
|
|
2428
2468
|
type: Component,
|
|
@@ -2446,6 +2486,551 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
2446
2486
|
}]
|
|
2447
2487
|
}] });
|
|
2448
2488
|
|
|
2489
|
+
/**
|
|
2490
|
+
* @description Directive that highlights matching text within the host element's content.
|
|
2491
|
+
* Wraps matched text in `<span class="c3-highlight">` inside a `<span class="c3-highlight_container">`.
|
|
2492
|
+
*
|
|
2493
|
+
* @selector [c3HighlightText]
|
|
2494
|
+
* @input c3HighlightText - The text to highlight.
|
|
2495
|
+
* @input c3HighlightTextCaseSensitive - Whether the match should be case-sensitive (default: false).
|
|
2496
|
+
*
|
|
2497
|
+
* @example
|
|
2498
|
+
* ```html
|
|
2499
|
+
* <p [c3HighlightText]="searchTerm">Some text to search in</p>
|
|
2500
|
+
* <p [c3HighlightText]="searchTerm" [c3HighlightTextCaseSensitive]="true">Case-sensitive match</p>
|
|
2501
|
+
* ```
|
|
2502
|
+
*/
|
|
2503
|
+
class C3HighlightTextDirective {
|
|
2504
|
+
constructor() {
|
|
2505
|
+
/** The text string to highlight within the host element. */
|
|
2506
|
+
this.highlightText = input('', ...(ngDevMode ? [{ debugName: "highlightText", alias: 'c3HighlightText' }] : [{
|
|
2507
|
+
alias: 'c3HighlightText',
|
|
2508
|
+
}]));
|
|
2509
|
+
/** Whether the highlighting should be case-sensitive. Defaults to false. */
|
|
2510
|
+
this.caseSensitive = input(false, ...(ngDevMode ? [{ debugName: "caseSensitive", alias: 'c3HighlightTextCaseSensitive' }] : [{
|
|
2511
|
+
alias: 'c3HighlightTextCaseSensitive',
|
|
2512
|
+
}]));
|
|
2513
|
+
this._el = inject(ElementRef);
|
|
2514
|
+
effect(() => {
|
|
2515
|
+
const text = this.highlightText();
|
|
2516
|
+
const sensitive = this.caseSensitive();
|
|
2517
|
+
if (text) {
|
|
2518
|
+
this._applyHighlight(this._el.nativeElement, text, sensitive);
|
|
2519
|
+
}
|
|
2520
|
+
else {
|
|
2521
|
+
this._resetHighlights(this._el.nativeElement);
|
|
2522
|
+
}
|
|
2523
|
+
});
|
|
2524
|
+
}
|
|
2525
|
+
/** Walks the DOM tree and wraps matching text nodes in highlight spans. */
|
|
2526
|
+
_applyHighlight(element, text, caseSensitive) {
|
|
2527
|
+
this._resetHighlights(element);
|
|
2528
|
+
if (!text)
|
|
2529
|
+
return;
|
|
2530
|
+
const flags = caseSensitive ? '' : 'i';
|
|
2531
|
+
const regex = new RegExp(`(${this._escapeRegExp(text)})`, flags);
|
|
2532
|
+
const textNodes = this._getTextNodes(element);
|
|
2533
|
+
textNodes.forEach((node) => {
|
|
2534
|
+
const parentNode = node.parentNode;
|
|
2535
|
+
if (!(parentNode instanceof Element))
|
|
2536
|
+
return;
|
|
2537
|
+
if (parentNode.classList.contains('c3-highlight_container'))
|
|
2538
|
+
return;
|
|
2539
|
+
const match = node.textContent?.match(regex);
|
|
2540
|
+
if (match) {
|
|
2541
|
+
const wrapper = document.createElement('span');
|
|
2542
|
+
wrapper.classList.add('c3-highlight_container');
|
|
2543
|
+
wrapper.innerHTML = node.textContent.replace(regex, '<span class="c3-highlight">$1</span>');
|
|
2544
|
+
parentNode.replaceChild(wrapper, node);
|
|
2545
|
+
}
|
|
2546
|
+
});
|
|
2547
|
+
}
|
|
2548
|
+
/** Escapes special regex characters in the search text. */
|
|
2549
|
+
_escapeRegExp(text) {
|
|
2550
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
2551
|
+
}
|
|
2552
|
+
/** Removes all previously applied highlight wrappers, restoring original text nodes. */
|
|
2553
|
+
_resetHighlights(element) {
|
|
2554
|
+
element
|
|
2555
|
+
.querySelectorAll('.c3-highlight_container')
|
|
2556
|
+
.forEach((highlight) => {
|
|
2557
|
+
const parent = highlight.parentNode;
|
|
2558
|
+
if (parent) {
|
|
2559
|
+
parent.insertBefore(document.createTextNode(highlight.textContent ?? ''), highlight);
|
|
2560
|
+
parent.removeChild(highlight);
|
|
2561
|
+
}
|
|
2562
|
+
});
|
|
2563
|
+
}
|
|
2564
|
+
/** Recursively collects all text nodes within an element. */
|
|
2565
|
+
_getTextNodes(element) {
|
|
2566
|
+
const textNodes = [];
|
|
2567
|
+
const nodes = element.childNodes;
|
|
2568
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
2569
|
+
const node = nodes[i];
|
|
2570
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
2571
|
+
textNodes.push(node);
|
|
2572
|
+
}
|
|
2573
|
+
else if (node.nodeType === Node.ELEMENT_NODE) {
|
|
2574
|
+
textNodes.push(...this._getTextNodes(node));
|
|
2575
|
+
}
|
|
2576
|
+
}
|
|
2577
|
+
return textNodes;
|
|
2578
|
+
}
|
|
2579
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3HighlightTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2580
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.14", type: C3HighlightTextDirective, isStandalone: true, selector: "[c3HighlightText]", inputs: { highlightText: { classPropertyName: "highlightText", publicName: "c3HighlightText", isSignal: true, isRequired: false, transformFunction: null }, caseSensitive: { classPropertyName: "caseSensitive", publicName: "c3HighlightTextCaseSensitive", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
2581
|
+
}
|
|
2582
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3HighlightTextDirective, decorators: [{
|
|
2583
|
+
type: Directive,
|
|
2584
|
+
args: [{
|
|
2585
|
+
selector: '[c3HighlightText]',
|
|
2586
|
+
standalone: true,
|
|
2587
|
+
}]
|
|
2588
|
+
}], ctorParameters: () => [], propDecorators: { highlightText: [{ type: i0.Input, args: [{ isSignal: true, alias: "c3HighlightText", required: false }] }], caseSensitive: [{ type: i0.Input, args: [{ isSignal: true, alias: "c3HighlightTextCaseSensitive", required: false }] }] } });
|
|
2589
|
+
|
|
2590
|
+
class C3HighlightTextModule {
|
|
2591
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3HighlightTextModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2592
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.14", ngImport: i0, type: C3HighlightTextModule, imports: [C3HighlightTextDirective], exports: [C3HighlightTextDirective] }); }
|
|
2593
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3HighlightTextModule }); }
|
|
2594
|
+
}
|
|
2595
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3HighlightTextModule, decorators: [{
|
|
2596
|
+
type: NgModule,
|
|
2597
|
+
args: [{
|
|
2598
|
+
imports: [C3HighlightTextDirective],
|
|
2599
|
+
exports: [C3HighlightTextDirective],
|
|
2600
|
+
}]
|
|
2601
|
+
}] });
|
|
2602
|
+
|
|
2603
|
+
/**
|
|
2604
|
+
* @description A rounded title container that wraps projected content in a pill-shaped element.
|
|
2605
|
+
* Styled via the `c3-rounded-title-theme` SCSS mixin.
|
|
2606
|
+
*
|
|
2607
|
+
* @selector c3-rounded-title
|
|
2608
|
+
*
|
|
2609
|
+
* @example
|
|
2610
|
+
* ```html
|
|
2611
|
+
* <c3-rounded-title>My Section Title</c3-rounded-title>
|
|
2612
|
+
* ```
|
|
2613
|
+
*/
|
|
2614
|
+
class C3RoundedTitleComponent {
|
|
2615
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3RoundedTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2616
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: C3RoundedTitleComponent, isStandalone: true, selector: "c3-rounded-title", host: { classAttribute: "c3-rounded-title" }, ngImport: i0, template: `
|
|
2617
|
+
<div class="title">
|
|
2618
|
+
<ng-content></ng-content>
|
|
2619
|
+
</div>
|
|
2620
|
+
`, isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2621
|
+
}
|
|
2622
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3RoundedTitleComponent, decorators: [{
|
|
2623
|
+
type: Component,
|
|
2624
|
+
args: [{
|
|
2625
|
+
selector: 'c3-rounded-title',
|
|
2626
|
+
template: `
|
|
2627
|
+
<div class="title">
|
|
2628
|
+
<ng-content></ng-content>
|
|
2629
|
+
</div>
|
|
2630
|
+
`,
|
|
2631
|
+
encapsulation: ViewEncapsulation.None,
|
|
2632
|
+
host: { class: 'c3-rounded-title' },
|
|
2633
|
+
standalone: true,
|
|
2634
|
+
}]
|
|
2635
|
+
}] });
|
|
2636
|
+
|
|
2637
|
+
class C3RoundedTitleModule {
|
|
2638
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3RoundedTitleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2639
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.14", ngImport: i0, type: C3RoundedTitleModule, imports: [C3RoundedTitleComponent], exports: [C3RoundedTitleComponent] }); }
|
|
2640
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3RoundedTitleModule }); }
|
|
2641
|
+
}
|
|
2642
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3RoundedTitleModule, decorators: [{
|
|
2643
|
+
type: NgModule,
|
|
2644
|
+
args: [{
|
|
2645
|
+
imports: [C3RoundedTitleComponent],
|
|
2646
|
+
exports: [C3RoundedTitleComponent],
|
|
2647
|
+
}]
|
|
2648
|
+
}] });
|
|
2649
|
+
|
|
2650
|
+
/**
|
|
2651
|
+
* @description A simple navigation bar component with elevation.
|
|
2652
|
+
* Content is projected via `ng-content`. Styled via the `c3-navbar-theme` SCSS mixin.
|
|
2653
|
+
*
|
|
2654
|
+
* @selector c3-navbar
|
|
2655
|
+
*
|
|
2656
|
+
* @example
|
|
2657
|
+
* ```html
|
|
2658
|
+
* <c3-navbar>
|
|
2659
|
+
* <a routerLink="/home" routerLinkActive="selected">Home</a>
|
|
2660
|
+
* <a routerLink="/settings" routerLinkActive="selected">Settings</a>
|
|
2661
|
+
* </c3-navbar>
|
|
2662
|
+
* ```
|
|
2663
|
+
*/
|
|
2664
|
+
class C3NavbarComponent {
|
|
2665
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3NavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2666
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: C3NavbarComponent, isStandalone: true, selector: "c3-navbar", host: { classAttribute: "c3-navbar mat-elevation-z4" }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2667
|
+
}
|
|
2668
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3NavbarComponent, decorators: [{
|
|
2669
|
+
type: Component,
|
|
2670
|
+
args: [{
|
|
2671
|
+
selector: 'c3-navbar',
|
|
2672
|
+
template: `<ng-content></ng-content>`,
|
|
2673
|
+
encapsulation: ViewEncapsulation.None,
|
|
2674
|
+
host: { class: 'c3-navbar mat-elevation-z4' },
|
|
2675
|
+
standalone: true,
|
|
2676
|
+
}]
|
|
2677
|
+
}] });
|
|
2678
|
+
|
|
2679
|
+
class C3NavbarModule {
|
|
2680
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3NavbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2681
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.14", ngImport: i0, type: C3NavbarModule, imports: [C3NavbarComponent], exports: [C3NavbarComponent] }); }
|
|
2682
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3NavbarModule }); }
|
|
2683
|
+
}
|
|
2684
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3NavbarModule, decorators: [{
|
|
2685
|
+
type: NgModule,
|
|
2686
|
+
args: [{
|
|
2687
|
+
imports: [C3NavbarComponent],
|
|
2688
|
+
exports: [C3NavbarComponent],
|
|
2689
|
+
}]
|
|
2690
|
+
}] });
|
|
2691
|
+
|
|
2692
|
+
/**
|
|
2693
|
+
* @description A side-panel modal component that slides in from the right.
|
|
2694
|
+
* Uses a `router-outlet` for content and provides a close button that navigates
|
|
2695
|
+
* back to the computed return route.
|
|
2696
|
+
*
|
|
2697
|
+
* The return route is automatically computed from the current route tree,
|
|
2698
|
+
* or can be overridden via the `returnRoute` input.
|
|
2699
|
+
*
|
|
2700
|
+
* @selector c3-modal
|
|
2701
|
+
*
|
|
2702
|
+
* @example
|
|
2703
|
+
* ```html
|
|
2704
|
+
* <!-- Auto-computed return route -->
|
|
2705
|
+
* <c3-modal></c3-modal>
|
|
2706
|
+
*
|
|
2707
|
+
* <!-- Custom return route -->
|
|
2708
|
+
* <c3-modal returnRoute="/dashboard"></c3-modal>
|
|
2709
|
+
* ```
|
|
2710
|
+
*/
|
|
2711
|
+
class C3ModalComponent {
|
|
2712
|
+
constructor() {
|
|
2713
|
+
/** Override the auto-computed return route. */
|
|
2714
|
+
this.returnRoute = input(null, ...(ngDevMode ? [{ debugName: "returnRoute" }] : []));
|
|
2715
|
+
/** Resolved return route (input override or auto-computed). */
|
|
2716
|
+
this._returnRoute = signal('/', ...(ngDevMode ? [{ debugName: "_returnRoute" }] : []));
|
|
2717
|
+
this.height = signal('400px', ...(ngDevMode ? [{ debugName: "height" }] : []));
|
|
2718
|
+
this.posButton = signal(0, ...(ngDevMode ? [{ debugName: "posButton" }] : []));
|
|
2719
|
+
this.container = viewChild('container', ...(ngDevMode ? [{ debugName: "container" }] : []));
|
|
2720
|
+
this._activatedRoute = inject(ActivatedRoute);
|
|
2721
|
+
this._cdr = inject(ChangeDetectorRef);
|
|
2722
|
+
this._platformId = inject(PLATFORM_ID);
|
|
2723
|
+
// Compute return route from the route tree
|
|
2724
|
+
const snapshot = this._activatedRoute.snapshot;
|
|
2725
|
+
const currentSegment = snapshot.url[0];
|
|
2726
|
+
const autoReturn = this._activatedRoute.pathFromRoot.reduce((accu, route) => {
|
|
2727
|
+
if (route.snapshot.url[0] &&
|
|
2728
|
+
route.snapshot.url[0] !== currentSegment) {
|
|
2729
|
+
accu += route.snapshot.url[0].path + '/';
|
|
2730
|
+
}
|
|
2731
|
+
return accu;
|
|
2732
|
+
}, '/');
|
|
2733
|
+
this._returnRoute.set(autoReturn);
|
|
2734
|
+
}
|
|
2735
|
+
ngAfterViewInit() {
|
|
2736
|
+
if (!isPlatformBrowser(this._platformId))
|
|
2737
|
+
return;
|
|
2738
|
+
// Update height on window resize
|
|
2739
|
+
this._updateHeight();
|
|
2740
|
+
this._resizeListener = () => this._updateHeight();
|
|
2741
|
+
window.addEventListener('resize', this._resizeListener);
|
|
2742
|
+
// Watch container width changes for close button positioning
|
|
2743
|
+
this._containerWatcher = setInterval(() => {
|
|
2744
|
+
const el = this.container()?.nativeElement;
|
|
2745
|
+
if (el && this.posButton() !== el.clientWidth - 26) {
|
|
2746
|
+
this.posButton.set(el.clientWidth - 26);
|
|
2747
|
+
this._cdr.markForCheck();
|
|
2748
|
+
}
|
|
2749
|
+
}, 1000);
|
|
2750
|
+
}
|
|
2751
|
+
ngOnDestroy() {
|
|
2752
|
+
if (isPlatformBrowser(this._platformId)) {
|
|
2753
|
+
if (this._resizeListener) {
|
|
2754
|
+
window.removeEventListener('resize', this._resizeListener);
|
|
2755
|
+
}
|
|
2756
|
+
if (this._containerWatcher) {
|
|
2757
|
+
clearInterval(this._containerWatcher);
|
|
2758
|
+
}
|
|
2759
|
+
}
|
|
2760
|
+
}
|
|
2761
|
+
_updateHeight() {
|
|
2762
|
+
this.height.set(window.innerHeight + 'px');
|
|
2763
|
+
this._cdr.markForCheck();
|
|
2764
|
+
}
|
|
2765
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2766
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.14", type: C3ModalComponent, isStandalone: true, selector: "c3-modal", inputs: { returnRoute: { classPropertyName: "returnRoute", publicName: "returnRoute", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "c3-modal" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
2767
|
+
<div class="outer" [routerLink]="_returnRoute()"></div>
|
|
2768
|
+
<div #container class="container" [style.height]="height()">
|
|
2769
|
+
<div>
|
|
2770
|
+
<router-outlet></router-outlet>
|
|
2771
|
+
</div>
|
|
2772
|
+
</div>
|
|
2773
|
+
@if (posButton()) {
|
|
2774
|
+
<button
|
|
2775
|
+
[routerLink]="_returnRoute()"
|
|
2776
|
+
class="close-button c3-modal"
|
|
2777
|
+
mat-fab
|
|
2778
|
+
[style.right.px]="posButton()"
|
|
2779
|
+
>
|
|
2780
|
+
<mat-icon>close</mat-icon>
|
|
2781
|
+
</button>
|
|
2782
|
+
}
|
|
2783
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$5.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2784
|
+
}
|
|
2785
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3ModalComponent, decorators: [{
|
|
2786
|
+
type: Component,
|
|
2787
|
+
args: [{
|
|
2788
|
+
selector: 'c3-modal',
|
|
2789
|
+
template: `
|
|
2790
|
+
<div class="outer" [routerLink]="_returnRoute()"></div>
|
|
2791
|
+
<div #container class="container" [style.height]="height()">
|
|
2792
|
+
<div>
|
|
2793
|
+
<router-outlet></router-outlet>
|
|
2794
|
+
</div>
|
|
2795
|
+
</div>
|
|
2796
|
+
@if (posButton()) {
|
|
2797
|
+
<button
|
|
2798
|
+
[routerLink]="_returnRoute()"
|
|
2799
|
+
class="close-button c3-modal"
|
|
2800
|
+
mat-fab
|
|
2801
|
+
[style.right.px]="posButton()"
|
|
2802
|
+
>
|
|
2803
|
+
<mat-icon>close</mat-icon>
|
|
2804
|
+
</button>
|
|
2805
|
+
}
|
|
2806
|
+
`,
|
|
2807
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2808
|
+
encapsulation: ViewEncapsulation.None,
|
|
2809
|
+
host: { class: 'c3-modal' },
|
|
2810
|
+
standalone: true,
|
|
2811
|
+
imports: [RouterModule, MatIconModule, MatButtonModule],
|
|
2812
|
+
}]
|
|
2813
|
+
}], ctorParameters: () => [], propDecorators: { returnRoute: [{ type: i0.Input, args: [{ isSignal: true, alias: "returnRoute", required: false }] }], container: [{ type: i0.ViewChild, args: ['container', { isSignal: true }] }] } });
|
|
2814
|
+
|
|
2815
|
+
class C3ModalModule {
|
|
2816
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3ModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2817
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.14", ngImport: i0, type: C3ModalModule, imports: [C3ModalComponent], exports: [C3ModalComponent] }); }
|
|
2818
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3ModalModule, imports: [C3ModalComponent] }); }
|
|
2819
|
+
}
|
|
2820
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3ModalModule, decorators: [{
|
|
2821
|
+
type: NgModule,
|
|
2822
|
+
args: [{
|
|
2823
|
+
imports: [C3ModalComponent],
|
|
2824
|
+
exports: [C3ModalComponent],
|
|
2825
|
+
}]
|
|
2826
|
+
}] });
|
|
2827
|
+
|
|
2828
|
+
/**
|
|
2829
|
+
* @description A single tab item used inside `c3-tabs`.
|
|
2830
|
+
* Provides a ripple effect and wraps projected content.
|
|
2831
|
+
*
|
|
2832
|
+
* @selector c3-tab, [c3-tab]
|
|
2833
|
+
*
|
|
2834
|
+
* @example
|
|
2835
|
+
* ```html
|
|
2836
|
+
* <c3-tabs>
|
|
2837
|
+
* <c3-tab><a routerLink="/page-a">Page A</a></c3-tab>
|
|
2838
|
+
* <c3-tab><a routerLink="/page-b">Page B</a></c3-tab>
|
|
2839
|
+
* </c3-tabs>
|
|
2840
|
+
* ```
|
|
2841
|
+
*/
|
|
2842
|
+
class C3TabComponent {
|
|
2843
|
+
constructor() {
|
|
2844
|
+
this.elementRef = inject(ElementRef);
|
|
2845
|
+
}
|
|
2846
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2847
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.14", type: C3TabComponent, isStandalone: true, selector: "c3-tab, [c3-tab]", host: { classAttribute: "item" }, ngImport: i0, template: `
|
|
2848
|
+
<div matRipple style="padding: 0 8px; border-radius: 18px">
|
|
2849
|
+
<ng-content></ng-content>
|
|
2850
|
+
</div>
|
|
2851
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i3$2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
2852
|
+
}
|
|
2853
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TabComponent, decorators: [{
|
|
2854
|
+
type: Component,
|
|
2855
|
+
args: [{
|
|
2856
|
+
selector: 'c3-tab, [c3-tab]',
|
|
2857
|
+
template: `
|
|
2858
|
+
<div matRipple style="padding: 0 8px; border-radius: 18px">
|
|
2859
|
+
<ng-content></ng-content>
|
|
2860
|
+
</div>
|
|
2861
|
+
`,
|
|
2862
|
+
encapsulation: ViewEncapsulation.None,
|
|
2863
|
+
host: { class: 'item' },
|
|
2864
|
+
imports: [MatRippleModule],
|
|
2865
|
+
}]
|
|
2866
|
+
}] });
|
|
2867
|
+
|
|
2868
|
+
/**
|
|
2869
|
+
* @description A pill-shaped tab bar with an animated background indicator
|
|
2870
|
+
* that slides to the active tab. Works with Angular Router to auto-detect
|
|
2871
|
+
* the active route.
|
|
2872
|
+
*
|
|
2873
|
+
* @selector c3-tabs, [c3-tabs]
|
|
2874
|
+
* @input ignoreQueryParams - If true, query params are ignored when matching active route.
|
|
2875
|
+
*
|
|
2876
|
+
* @example
|
|
2877
|
+
* ```html
|
|
2878
|
+
* <c3-tabs>
|
|
2879
|
+
* <c3-tab><a routerLink="/page-a">Page A</a></c3-tab>
|
|
2880
|
+
* <c3-tab><a routerLink="/page-b">Page B</a></c3-tab>
|
|
2881
|
+
* </c3-tabs>
|
|
2882
|
+
*
|
|
2883
|
+
* <!-- Ignore query params for route matching -->
|
|
2884
|
+
* <c3-tabs [ignoreQueryParams]="true">
|
|
2885
|
+
* <c3-tab><a routerLink="/search" [queryParams]="{ q: 'test' }">Search</a></c3-tab>
|
|
2886
|
+
* </c3-tabs>
|
|
2887
|
+
* ```
|
|
2888
|
+
*/
|
|
2889
|
+
class C3TabsComponent {
|
|
2890
|
+
constructor() {
|
|
2891
|
+
/** Whether to ignore query parameters when matching the active route. */
|
|
2892
|
+
this.ignoreQueryParams = input(false, ...(ngDevMode ? [{ debugName: "ignoreQueryParams" }] : []));
|
|
2893
|
+
this.btnBackgroundOffset = 0;
|
|
2894
|
+
this.btnWidth = 0;
|
|
2895
|
+
this._router = inject(Router);
|
|
2896
|
+
this._cdr = inject(ChangeDetectorRef);
|
|
2897
|
+
this._platformId = inject(PLATFORM_ID);
|
|
2898
|
+
this._destroyRef = inject(DestroyRef);
|
|
2899
|
+
}
|
|
2900
|
+
ngAfterViewInit() {
|
|
2901
|
+
if (!this.items.length)
|
|
2902
|
+
return;
|
|
2903
|
+
if (!this.links.length) {
|
|
2904
|
+
this.setSelectedItem();
|
|
2905
|
+
}
|
|
2906
|
+
else {
|
|
2907
|
+
// Defer subscription to avoid ExpressionChangedAfterItHasBeenCheckedError
|
|
2908
|
+
setTimeout(() => this._router.events
|
|
2909
|
+
.pipe(startWith(null), filter((event) => event instanceof NavigationEnd || !this.selectedItem), map(() => this._getActiveTabIndex()), distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))
|
|
2910
|
+
.subscribe((index) => this.setSelectedItem(index)), 300);
|
|
2911
|
+
}
|
|
2912
|
+
this._cdr.detectChanges();
|
|
2913
|
+
}
|
|
2914
|
+
/**
|
|
2915
|
+
* Gets the left position of an element relative to the viewport.
|
|
2916
|
+
* Returns 0 on server platform.
|
|
2917
|
+
*/
|
|
2918
|
+
getLeftPositionElement(element) {
|
|
2919
|
+
if (!isPlatformBrowser(this._platformId))
|
|
2920
|
+
return 0;
|
|
2921
|
+
return element.getBoundingClientRect().left;
|
|
2922
|
+
}
|
|
2923
|
+
/** Computes the offset for the sliding background indicator. */
|
|
2924
|
+
getBtnBackgroundOffset() {
|
|
2925
|
+
try {
|
|
2926
|
+
if (!this.selectedItem)
|
|
2927
|
+
return 0;
|
|
2928
|
+
return (this.getLeftPositionElement(this.selectedItem.elementRef.nativeElement) -
|
|
2929
|
+
this.getLeftPositionElement(this.containerElement.nativeElement) +
|
|
2930
|
+
'px');
|
|
2931
|
+
}
|
|
2932
|
+
catch {
|
|
2933
|
+
return 0;
|
|
2934
|
+
}
|
|
2935
|
+
}
|
|
2936
|
+
/** Selects a tab by index and updates the indicator position. */
|
|
2937
|
+
setSelectedItem(index = 0) {
|
|
2938
|
+
this.selectedItem = this.items.get(index);
|
|
2939
|
+
setTimeout(() => this._setBtn(), 0);
|
|
2940
|
+
}
|
|
2941
|
+
/**
|
|
2942
|
+
* Finds the active tab index by matching router links.
|
|
2943
|
+
* When multiple links match, the most specific one (most query params) wins.
|
|
2944
|
+
*/
|
|
2945
|
+
_getActiveTabIndex() {
|
|
2946
|
+
const opts = {
|
|
2947
|
+
paths: 'exact',
|
|
2948
|
+
queryParams: this.ignoreQueryParams()
|
|
2949
|
+
? 'ignored'
|
|
2950
|
+
: 'subset',
|
|
2951
|
+
fragment: 'ignored',
|
|
2952
|
+
matrixParams: 'ignored',
|
|
2953
|
+
};
|
|
2954
|
+
const linkArray = this.links.toArray();
|
|
2955
|
+
let bestIndex = 0;
|
|
2956
|
+
let bestParamCount = -1;
|
|
2957
|
+
for (let i = 0; i < linkArray.length; i++) {
|
|
2958
|
+
const link = linkArray[i];
|
|
2959
|
+
if (link.urlTree == null ||
|
|
2960
|
+
!this._router.isActive(link.urlTree, opts))
|
|
2961
|
+
continue;
|
|
2962
|
+
const paramCount = Object.keys(link.urlTree.queryParams).length;
|
|
2963
|
+
if (paramCount > bestParamCount) {
|
|
2964
|
+
bestParamCount = paramCount;
|
|
2965
|
+
bestIndex = i;
|
|
2966
|
+
}
|
|
2967
|
+
}
|
|
2968
|
+
return bestIndex;
|
|
2969
|
+
}
|
|
2970
|
+
/** Updates the sliding indicator position and width. */
|
|
2971
|
+
_setBtn() {
|
|
2972
|
+
this.btnBackgroundOffset = this.getBtnBackgroundOffset();
|
|
2973
|
+
if (this.selectedItem) {
|
|
2974
|
+
this.btnWidth =
|
|
2975
|
+
this.selectedItem.elementRef.nativeElement.offsetWidth + 'px';
|
|
2976
|
+
}
|
|
2977
|
+
this._cdr.markForCheck();
|
|
2978
|
+
}
|
|
2979
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2980
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.14", type: C3TabsComponent, isStandalone: false, selector: "c3-tabs, [c3-tabs]", inputs: { ignoreQueryParams: { classPropertyName: "ignoreQueryParams", publicName: "ignoreQueryParams", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "c3-tabs" }, queries: [{ propertyName: "items", predicate: C3TabComponent }, { propertyName: "links", predicate: RouterLink }], viewQueries: [{ propertyName: "containerElement", first: true, predicate: ["mc"], descendants: true }], ngImport: i0, template: `
|
|
2981
|
+
<div class="flex flex-row items-center justify-center">
|
|
2982
|
+
<div #mc class="menu-text__container mat-elevation-z2">
|
|
2983
|
+
<div
|
|
2984
|
+
class="toggle-btn__background mat-elevation-z2"
|
|
2985
|
+
[style]="{ left: btnBackgroundOffset, width: btnWidth }"
|
|
2986
|
+
>
|
|
2987
|
+
<em> </em>
|
|
2988
|
+
</div>
|
|
2989
|
+
<ng-content></ng-content>
|
|
2990
|
+
</div>
|
|
2991
|
+
</div>
|
|
2992
|
+
`, isInline: true, styles: [".c3-tabs{display:block}.c3-tabs .menu-text__container{position:relative;display:flex;border-radius:26px;height:44px;padding:4px}.c3-tabs .menu-text__container .item,.c3-tabs .menu-text__container .item a{z-index:1;cursor:pointer;transition:.5s all ease;line-height:36px;text-decoration:none;color:#fff;padding:0 8px}.c3-tabs .menu-text__container .item:not(.active),.c3-tabs .menu-text__container .item:not(.active) a{color:#fff}.c3-tabs .menu-text__container .toggle-btn__background{position:absolute;width:70px;border-radius:18px;height:36px;transition:.5s all ease;-webkit-user-select:none;user-select:none}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
2993
|
+
}
|
|
2994
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TabsComponent, decorators: [{
|
|
2995
|
+
type: Component,
|
|
2996
|
+
args: [{ selector: 'c3-tabs, [c3-tabs]', template: `
|
|
2997
|
+
<div class="flex flex-row items-center justify-center">
|
|
2998
|
+
<div #mc class="menu-text__container mat-elevation-z2">
|
|
2999
|
+
<div
|
|
3000
|
+
class="toggle-btn__background mat-elevation-z2"
|
|
3001
|
+
[style]="{ left: btnBackgroundOffset, width: btnWidth }"
|
|
3002
|
+
>
|
|
3003
|
+
<em> </em>
|
|
3004
|
+
</div>
|
|
3005
|
+
<ng-content></ng-content>
|
|
3006
|
+
</div>
|
|
3007
|
+
</div>
|
|
3008
|
+
`, encapsulation: ViewEncapsulation.None, host: { class: 'c3-tabs' }, standalone: false, styles: [".c3-tabs{display:block}.c3-tabs .menu-text__container{position:relative;display:flex;border-radius:26px;height:44px;padding:4px}.c3-tabs .menu-text__container .item,.c3-tabs .menu-text__container .item a{z-index:1;cursor:pointer;transition:.5s all ease;line-height:36px;text-decoration:none;color:#fff;padding:0 8px}.c3-tabs .menu-text__container .item:not(.active),.c3-tabs .menu-text__container .item:not(.active) a{color:#fff}.c3-tabs .menu-text__container .toggle-btn__background{position:absolute;width:70px;border-radius:18px;height:36px;transition:.5s all ease;-webkit-user-select:none;user-select:none}\n"] }]
|
|
3009
|
+
}], propDecorators: { ignoreQueryParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "ignoreQueryParams", required: false }] }], containerElement: [{
|
|
3010
|
+
type: ViewChild,
|
|
3011
|
+
args: ['mc']
|
|
3012
|
+
}], items: [{
|
|
3013
|
+
type: ContentChildren,
|
|
3014
|
+
args: [C3TabComponent]
|
|
3015
|
+
}], links: [{
|
|
3016
|
+
type: ContentChildren,
|
|
3017
|
+
args: [RouterLink]
|
|
3018
|
+
}] } });
|
|
3019
|
+
|
|
3020
|
+
class C3TabsModule {
|
|
3021
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TabsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
3022
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.14", ngImport: i0, type: C3TabsModule, declarations: [C3TabsComponent], imports: [CommonModule, RouterModule, MatRippleModule, C3TabComponent], exports: [C3TabsComponent, C3TabComponent] }); }
|
|
3023
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TabsModule, imports: [CommonModule, RouterModule, MatRippleModule, C3TabComponent] }); }
|
|
3024
|
+
}
|
|
3025
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: C3TabsModule, decorators: [{
|
|
3026
|
+
type: NgModule,
|
|
3027
|
+
args: [{
|
|
3028
|
+
declarations: [C3TabsComponent],
|
|
3029
|
+
imports: [CommonModule, RouterModule, MatRippleModule, C3TabComponent],
|
|
3030
|
+
exports: [C3TabsComponent, C3TabComponent],
|
|
3031
|
+
}]
|
|
3032
|
+
}] });
|
|
3033
|
+
|
|
2449
3034
|
/*
|
|
2450
3035
|
* Public API Surface of c3-components
|
|
2451
3036
|
*/
|
|
@@ -2460,5 +3045,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImpo
|
|
|
2460
3045
|
* Generated bundle index. Do not edit.
|
|
2461
3046
|
*/
|
|
2462
3047
|
|
|
2463
|
-
export { C3AlertDialogComponent, C3AutoAnimateDirective, C3DialogEmbedChildComponent, C3DialogModule, C3DialogService, C3DialogTemplateComponent, C3DropdownComponent, C3DropdownModule, C3DropdownTrigger, C3ExpansionComponent, C3ExpansionHeaderComponent, C3ExpansionModule, C3FileDisplayCardComponent, C3FileDisplayGridComponent, C3FileDisplayIconComponent, C3FileDisplayListCellDefDirective, C3FileDisplayListColumnDefDirective, C3FileDisplayListComponent, C3FileDisplayListHeaderCellDefDirective, C3FileDisplayerModule, C3FileViewer, C3FileViewerComponent, C3FileViewerDialog, C3FileViewerDialogComponent, C3FileViewerModule, C3FlowingMenuComponent, C3FlowingMenuItemComponent, C3FlowingMenuItemContentComponent, C3FlowingMenuModule, C3MenuComponent, C3MenuModule, C3NavItemComponent, C3OpenDialogDirective, C3PreventClickDirective, C3PreventKeyboardEventDirective, C3PromptDialogComponent, C3SafeUrlPipe, C3SelectOnFocusDirective, C3StopPropagationDirective, C3TraceCardAlignLeftDirective, C3TraceCardAlignRightDirective, C3TraceCardComponent, C3TraceCardContentComponent, C3TraceCardModule, C3TraceCardTitleComponent, C3TreeComponent, C3_FILE_DISPLAY_LIST, ConfirmDialogComponent, CustomFileEvent, FullScreenDirective, MAT_DROPDOWN_VALUE_ACCESSOR };
|
|
3048
|
+
export { C3AlertDialogComponent, C3AutoAnimateDirective, C3DialogEmbedChildComponent, C3DialogModule, C3DialogService, C3DialogTemplateComponent, C3DropdownComponent, C3DropdownModule, C3DropdownTrigger, C3ExpansionComponent, C3ExpansionHeaderComponent, C3ExpansionModule, C3FileDisplayCardComponent, C3FileDisplayGridComponent, C3FileDisplayIconComponent, C3FileDisplayListCellDefDirective, C3FileDisplayListColumnDefDirective, C3FileDisplayListComponent, C3FileDisplayListHeaderCellDefDirective, C3FileDisplayerModule, C3FileViewer, C3FileViewerComponent, C3FileViewerDialog, C3FileViewerDialogComponent, C3FileViewerModule, C3FlowingMenuComponent, C3FlowingMenuItemComponent, C3FlowingMenuItemContentComponent, C3FlowingMenuModule, C3HighlightTextDirective, C3HighlightTextModule, C3MenuComponent, C3MenuModule, C3ModalComponent, C3ModalModule, C3NavItemComponent, C3NavbarComponent, C3NavbarModule, C3OpenDialogDirective, C3PreventClickDirective, C3PreventKeyboardEventDirective, C3PromptDialogComponent, C3RoundedTitleComponent, C3RoundedTitleModule, C3SafeUrlPipe, C3SelectOnFocusDirective, C3StopPropagationDirective, C3TabComponent, C3TabsComponent, C3TabsModule, C3TraceCardAlignLeftDirective, C3TraceCardAlignRightDirective, C3TraceCardComponent, C3TraceCardContentComponent, C3TraceCardModule, C3TraceCardTitleComponent, C3TreeComponent, C3_FILE_DISPLAY_LIST, ConfirmDialogComponent, CustomFileEvent, FullScreenDirective, MAT_DROPDOWN_VALUE_ACCESSOR };
|
|
2464
3049
|
//# sourceMappingURL=c3-components.mjs.map
|