@cute-widgets/base 20.0.4 → 21.0.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/CHANGELOG.md +18 -6
- package/fesm2022/cute-widgets-base-abstract.mjs +19 -29
- package/fesm2022/cute-widgets-base-abstract.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-alert.mjs +10 -10
- package/fesm2022/cute-widgets-base-alert.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-autocomplete.mjs +14 -14
- package/fesm2022/cute-widgets-base-autocomplete.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-badge.mjs +46 -14
- package/fesm2022/cute-widgets-base-badge.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-bottom-sheet.mjs +11 -11
- package/fesm2022/cute-widgets-base-bottom-sheet.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-button-toggle.mjs +61 -37
- package/fesm2022/cute-widgets-base-button-toggle.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-button.mjs +176 -112
- package/fesm2022/cute-widgets-base-button.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-card.mjs +40 -40
- package/fesm2022/cute-widgets-base-card.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-checkbox.mjs +28 -28
- package/fesm2022/cute-widgets-base-checkbox.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-chips.mjs +49 -61
- package/fesm2022/cute-widgets-base-chips.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-collapse.mjs +120 -132
- package/fesm2022/cute-widgets-base-collapse.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-datetime.mjs +11 -11
- package/fesm2022/cute-widgets-base-core-datetime.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-directives.mjs +21 -21
- package/fesm2022/cute-widgets-base-core-directives.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-error.mjs +6 -6
- package/fesm2022/cute-widgets-base-core-error.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-layout.mjs +13 -1
- package/fesm2022/cute-widgets-base-core-layout.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-line.mjs +7 -7
- package/fesm2022/cute-widgets-base-core-line.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-nav.mjs +30 -28
- package/fesm2022/cute-widgets-base-core-nav.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-observers.mjs +16 -16
- package/fesm2022/cute-widgets-base-core-observers.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-option.mjs +10 -10
- package/fesm2022/cute-widgets-base-core-option.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-pipes.mjs +6 -6
- package/fesm2022/cute-widgets-base-core-pipes.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-ripple.mjs +3 -3
- package/fesm2022/cute-widgets-base-core-ripple.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-theming.mjs +7 -7
- package/fesm2022/cute-widgets-base-core-theming.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core-utils.mjs +3 -3
- package/fesm2022/cute-widgets-base-core-utils.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-core.mjs +50 -38
- package/fesm2022/cute-widgets-base-core.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-datepicker.mjs +100 -99
- package/fesm2022/cute-widgets-base-datepicker.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-dialog.mjs +170 -135
- package/fesm2022/cute-widgets-base-dialog.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-divider.mjs +7 -7
- package/fesm2022/cute-widgets-base-divider.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-expansion.mjs +27 -27
- package/fesm2022/cute-widgets-base-expansion.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-form-field.mjs +28 -28
- package/fesm2022/cute-widgets-base-form-field.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-grid-list.mjs +22 -22
- package/fesm2022/cute-widgets-base-grid-list.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-icon.mjs +10 -10
- package/fesm2022/cute-widgets-base-icon.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-input.mjs +7 -7
- package/fesm2022/cute-widgets-base-input.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-layout-container.mjs +10 -10
- package/fesm2022/cute-widgets-base-layout-container.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-layout-stack.mjs +13 -13
- package/fesm2022/cute-widgets-base-layout-stack.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-layout.mjs +23 -23
- package/fesm2022/cute-widgets-base-layout.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-list.mjs +56 -56
- package/fesm2022/cute-widgets-base-list.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-menu.mjs +581 -388
- package/fesm2022/cute-widgets-base-menu.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-navbar.mjs +101 -61
- package/fesm2022/cute-widgets-base-navbar.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-paginator.mjs +13 -13
- package/fesm2022/cute-widgets-base-paginator.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-progress.mjs +10 -10
- package/fesm2022/cute-widgets-base-progress.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-radio.mjs +11 -11
- package/fesm2022/cute-widgets-base-radio.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-select.mjs +11 -11
- package/fesm2022/cute-widgets-base-select.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-sidenav.mjs +26 -26
- package/fesm2022/cute-widgets-base-sidenav.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-slider.mjs +10 -10
- package/fesm2022/cute-widgets-base-slider.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-snack-bar.mjs +28 -28
- package/fesm2022/cute-widgets-base-snack-bar.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-sort.mjs +13 -13
- package/fesm2022/cute-widgets-base-sort.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-spinner.mjs +8 -8
- package/fesm2022/cute-widgets-base-spinner.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-stepper.mjs +40 -40
- package/fesm2022/cute-widgets-base-stepper.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-table.mjs +58 -66
- package/fesm2022/cute-widgets-base-table.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-tabs.mjs +100 -75
- package/fesm2022/cute-widgets-base-tabs.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-timepicker.mjs +34 -63
- package/fesm2022/cute-widgets-base-timepicker.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-toolbar.mjs +13 -13
- package/fesm2022/cute-widgets-base-toolbar.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-tooltip.mjs +10 -10
- package/fesm2022/cute-widgets-base-tooltip.mjs.map +1 -1
- package/fesm2022/cute-widgets-base-tree.mjs +25 -25
- package/fesm2022/cute-widgets-base-tree.mjs.map +1 -1
- package/fesm2022/cute-widgets-base.mjs +4 -4
- package/package.json +121 -121
- package/{abstract/index.d.ts → types/cute-widgets-base-abstract.d.ts} +9 -3
- package/{autocomplete/index.d.ts → types/cute-widgets-base-autocomplete.d.ts} +2 -2
- package/{badge/index.d.ts → types/cute-widgets-base-badge.d.ts} +6 -5
- package/{bottom-sheet/index.d.ts → types/cute-widgets-base-bottom-sheet.d.ts} +1 -1
- package/{button-toggle/index.d.ts → types/cute-widgets-base-button-toggle.d.ts} +15 -5
- package/{button/index.d.ts → types/cute-widgets-base-button.d.ts} +44 -22
- package/{checkbox/index.d.ts → types/cute-widgets-base-checkbox.d.ts} +1 -1
- package/{chips/index.d.ts → types/cute-widgets-base-chips.d.ts} +1 -1
- package/types/cute-widgets-base-collapse.d.ts +98 -0
- package/{core/layout/index.d.ts → types/cute-widgets-base-core-layout.d.ts} +7 -1
- package/{core/nav/index.d.ts → types/cute-widgets-base-core-nav.d.ts} +2 -1
- package/{core/observers/index.d.ts → types/cute-widgets-base-core-observers.d.ts} +1 -1
- package/{core/option/index.d.ts → types/cute-widgets-base-core-option.d.ts} +1 -1
- package/{core/index.d.ts → types/cute-widgets-base-core.d.ts} +7 -1
- package/{datepicker/index.d.ts → types/cute-widgets-base-datepicker.d.ts} +2 -2
- package/{dialog/index.d.ts → types/cute-widgets-base-dialog.d.ts} +81 -57
- package/{expansion/index.d.ts → types/cute-widgets-base-expansion.d.ts} +4 -14
- package/{form-field/index.d.ts → types/cute-widgets-base-form-field.d.ts} +1 -1
- package/{icon/index.d.ts → types/cute-widgets-base-icon.d.ts} +1 -1
- package/{input/index.d.ts → types/cute-widgets-base-input.d.ts} +1 -1
- package/{menu/index.d.ts → types/cute-widgets-base-menu.d.ts} +202 -121
- package/{navbar/index.d.ts → types/cute-widgets-base-navbar.d.ts} +24 -9
- package/{paginator/index.d.ts → types/cute-widgets-base-paginator.d.ts} +2 -2
- package/{progress/index.d.ts → types/cute-widgets-base-progress.d.ts} +1 -1
- package/{radio/index.d.ts → types/cute-widgets-base-radio.d.ts} +2 -2
- package/{sidenav/index.d.ts → types/cute-widgets-base-sidenav.d.ts} +1 -1
- package/{snack-bar/index.d.ts → types/cute-widgets-base-snack-bar.d.ts} +1 -1
- package/{sort/index.d.ts → types/cute-widgets-base-sort.d.ts} +1 -1
- package/{table/index.d.ts → types/cute-widgets-base-table.d.ts} +1 -1
- package/{tabs/index.d.ts → types/cute-widgets-base-tabs.d.ts} +35 -14
- package/{tree/index.d.ts → types/cute-widgets-base-tree.d.ts} +2 -2
- package/collapse/index.d.ts +0 -97
- /package/{alert/index.d.ts → types/cute-widgets-base-alert.d.ts} +0 -0
- /package/{card/index.d.ts → types/cute-widgets-base-card.d.ts} +0 -0
- /package/{core/animation/index.d.ts → types/cute-widgets-base-core-animation.d.ts} +0 -0
- /package/{core/datetime/index.d.ts → types/cute-widgets-base-core-datetime.d.ts} +0 -0
- /package/{core/directives/index.d.ts → types/cute-widgets-base-core-directives.d.ts} +0 -0
- /package/{core/error/index.d.ts → types/cute-widgets-base-core-error.d.ts} +0 -0
- /package/{core/interfaces/index.d.ts → types/cute-widgets-base-core-interfaces.d.ts} +0 -0
- /package/{core/line/index.d.ts → types/cute-widgets-base-core-line.d.ts} +0 -0
- /package/{core/pipes/index.d.ts → types/cute-widgets-base-core-pipes.d.ts} +0 -0
- /package/{core/ripple/index.d.ts → types/cute-widgets-base-core-ripple.d.ts} +0 -0
- /package/{core/testing/index.d.ts → types/cute-widgets-base-core-testing.d.ts} +0 -0
- /package/{core/theming/index.d.ts → types/cute-widgets-base-core-theming.d.ts} +0 -0
- /package/{core/types/index.d.ts → types/cute-widgets-base-core-types.d.ts} +0 -0
- /package/{core/utils/index.d.ts → types/cute-widgets-base-core-utils.d.ts} +0 -0
- /package/{divider/index.d.ts → types/cute-widgets-base-divider.d.ts} +0 -0
- /package/{grid-list/index.d.ts → types/cute-widgets-base-grid-list.d.ts} +0 -0
- /package/{layout/container/index.d.ts → types/cute-widgets-base-layout-container.d.ts} +0 -0
- /package/{layout/stack/index.d.ts → types/cute-widgets-base-layout-stack.d.ts} +0 -0
- /package/{layout/index.d.ts → types/cute-widgets-base-layout.d.ts} +0 -0
- /package/{list/index.d.ts → types/cute-widgets-base-list.d.ts} +0 -0
- /package/{select/index.d.ts → types/cute-widgets-base-select.d.ts} +0 -0
- /package/{slider/index.d.ts → types/cute-widgets-base-slider.d.ts} +0 -0
- /package/{spinner/index.d.ts → types/cute-widgets-base-spinner.d.ts} +0 -0
- /package/{stepper/index.d.ts → types/cute-widgets-base-stepper.d.ts} +0 -0
- /package/{timepicker/index.d.ts → types/cute-widgets-base-timepicker.d.ts} +0 -0
- /package/{toolbar/index.d.ts → types/cute-widgets-base-toolbar.d.ts} +0 -0
- /package/{tooltip/index.d.ts → types/cute-widgets-base-tooltip.d.ts} +0 -0
- /package/{index.d.ts → types/cute-widgets-base.d.ts} +0 -0
|
@@ -37,10 +37,10 @@ class IntersectionObserverFactory {
|
|
|
37
37
|
};
|
|
38
38
|
return typeof IntersectionObserver === 'undefined' ? null : new IntersectionObserver(callback, observerOptions);
|
|
39
39
|
}
|
|
40
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
41
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
40
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IntersectionObserverFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
41
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IntersectionObserverFactory, providedIn: 'root' }); }
|
|
42
42
|
}
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: IntersectionObserverFactory, decorators: [{
|
|
44
44
|
type: Injectable,
|
|
45
45
|
args: [{ providedIn: 'root' }]
|
|
46
46
|
}], ctorParameters: () => [] });
|
|
@@ -111,10 +111,10 @@ class CuteVisibilityObserver {
|
|
|
111
111
|
this._observedElements.delete(element);
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
115
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
114
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteVisibilityObserver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
115
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteVisibilityObserver, providedIn: 'root' }); }
|
|
116
116
|
}
|
|
117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteVisibilityObserver, decorators: [{
|
|
118
118
|
type: Injectable,
|
|
119
119
|
args: [{ providedIn: 'root' }]
|
|
120
120
|
}], ctorParameters: () => [] });
|
|
@@ -202,10 +202,10 @@ class CuteObserveVisibility {
|
|
|
202
202
|
ngOnDestroy() {
|
|
203
203
|
this._unsubscribe();
|
|
204
204
|
}
|
|
205
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
206
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "
|
|
205
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteObserveVisibility, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
206
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "21.2.0", type: CuteObserveVisibility, isStandalone: true, selector: "[cuteObserveVisibility], [cute-observe-visibility]", inputs: { disabled: ["cuteObserveVisibilityDisabled", "disabled", booleanAttribute], debounce: ["cuteObserveVisibilityDebounce", "debounce", numberAttribute], threshold: ["cuteObserveVisibility", "threshold"], rootMargin: ["cuteObserveVisibilityRootMargin", "rootMargin"], root: ["cuteObserveVisibilityRoot", "root"] }, outputs: { intersectionChange: "cuteObserveVisibility" }, exportAs: ["cuteObserveVisibility"], ngImport: i0 }); }
|
|
207
207
|
}
|
|
208
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
208
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteObserveVisibility, decorators: [{
|
|
209
209
|
type: Directive,
|
|
210
210
|
args: [{
|
|
211
211
|
selector: '[cuteObserveVisibility], [cute-observe-visibility]',
|
|
@@ -245,10 +245,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
245
245
|
* its associated element has changed.
|
|
246
246
|
*/
|
|
247
247
|
class CuteObserveContent {
|
|
248
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
249
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
248
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteObserveContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
249
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: CuteObserveContent, isStandalone: true, selector: "[cuteObserveContent]", exportAs: ["cuteObserveContent"], hostDirectives: [{ directive: i1.CdkObserveContent, inputs: ["cdkObserveContentDisabled", "cuteObserveContentDisabled", "debounce", "cuteObserveContentDebounce"], outputs: ["cdkObserveContent", "cuteObserveContent"] }], ngImport: i0 }); }
|
|
250
250
|
}
|
|
251
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteObserveContent, decorators: [{
|
|
252
252
|
type: Directive,
|
|
253
253
|
args: [{
|
|
254
254
|
selector: '[cuteObserveContent]',
|
|
@@ -277,14 +277,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
277
277
|
* that can be found at http://www.apache.org/licenses/LICENSE-2.0
|
|
278
278
|
*/
|
|
279
279
|
class CuteObserversModule {
|
|
280
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
281
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
282
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
280
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteObserversModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
281
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: CuteObserversModule, imports: [CommonModule, CuteObserveVisibility, CuteObserveContent], exports: [CuteObserveVisibility, CuteObserveContent] }); }
|
|
282
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteObserversModule, providers: [
|
|
283
283
|
IntersectionObserverFactory,
|
|
284
284
|
CuteVisibilityObserver,
|
|
285
285
|
], imports: [CommonModule] }); }
|
|
286
286
|
}
|
|
287
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteObserversModule, decorators: [{
|
|
288
288
|
type: NgModule,
|
|
289
289
|
args: [{
|
|
290
290
|
imports: [CommonModule, CuteObserveVisibility, CuteObserveContent],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cute-widgets-base-core-observers.mjs","sources":["../../../../projects/cute-widgets/base/core/observers/src/observe-visibility.ts","../../../../projects/cute-widgets/base/core/observers/src/observe-content.ts","../../../../projects/cute-widgets/base/core/observers/src/observers.module.ts","../../../../projects/cute-widgets/base/core/observers/cute-widgets-base-core-observers.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport {coerceNumberProperty, coerceElement} from '@angular/cdk/coercion';\r\nimport {\r\n AfterContentInit,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n booleanAttribute, InjectionToken, numberAttribute, inject,\r\n} from '@angular/core';\r\nimport {Observable, Subject, Subscription, Observer, EMPTY} from 'rxjs';\r\nimport {debounceTime} from 'rxjs/operators';\r\n\r\nexport const CUTE_VISIBILITY_OBSERVER_OPTIONS = new InjectionToken<IntersectionObserverInit>(\"CUTE_VISIBILITY_OBSERVER_OPTIONS\");\r\n\r\n/**\r\n * Factory service that creates a new IntersectionObserver and allows us to stub it out in unit tests.\r\n */\r\n@Injectable({providedIn: 'root'})\r\nexport class IntersectionObserverFactory {\r\n private _injectedOptions: IntersectionObserverInit|null = inject(CUTE_VISIBILITY_OBSERVER_OPTIONS, {optional: true});\r\n private readonly _defaultOptions: IntersectionObserverInit|null;\r\n\r\n constructor(...args: unknown[]);\r\n constructor () {\r\n\r\n this._defaultOptions = this._injectedOptions ? {...this._injectedOptions} : null;\r\n\r\n const root = this._defaultOptions?.root;\r\n if (root && root instanceof Element && getComputedStyle(root).overflowY === \"visible\") {\r\n this._defaultOptions!.root = null;\r\n }\r\n }\r\n\r\n /** `IntersectionObserver` factory method. Returns _null_ if the API is not supported. */\r\n createInstance(callback: IntersectionObserverCallback, options?: IntersectionObserverInit): IntersectionObserver | null {\r\n const observerOptions: IntersectionObserverInit = {\r\n root: options?.root ?? this._defaultOptions?.root,\r\n rootMargin: options?.rootMargin ?? this._defaultOptions?.rootMargin,\r\n threshold: options?.threshold ?? this._defaultOptions?.threshold,\r\n };\r\n return typeof IntersectionObserver === 'undefined' ? null : new IntersectionObserver(callback, observerOptions);\r\n }\r\n}\r\n\r\n/**\r\n * An injectable service that allows watching elements for visibility changes.\r\n */\r\n@Injectable({providedIn: 'root'})\r\nexport class CuteVisibilityObserver implements OnDestroy {\r\n private _intersectionObserverFactory = inject(IntersectionObserverFactory, {optional: true});\r\n\r\n /** Keeps track of the existing IntersectionObservers, so they can be reused. */\r\n private _observedElements = new Map<\r\n Element,\r\n {\r\n observer: IntersectionObserver | null;\r\n readonly stream: Subject<IntersectionObserverEntry[]>;\r\n count: number;\r\n }\r\n >();\r\n\r\n constructor() {}\r\n\r\n ngOnDestroy() {\r\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\r\n }\r\n\r\n /**\r\n * Observe visibility changes on an element.\r\n * @param element The element to observe for visibility changes.\r\n * @param options Options to customize the observer\r\n * @returns Observable object\r\n */\r\n observe(element: Element, options?: IntersectionObserverInit): Observable<IntersectionObserverEntry[]>;\r\n /**\r\n * Observe visibility changes on an element.\r\n * @param element The element to observe for visibility changes.\r\n * @param options Options to customize the observer\r\n * @returns Observable object\r\n */\r\n observe(element: ElementRef<Element>, options?: IntersectionObserverInit): Observable<IntersectionObserverEntry[]>;\r\n observe(elementOrRef: Element | ElementRef<Element>, options?: IntersectionObserverInit): Observable<IntersectionObserverEntry[]> {\r\n const element = coerceElement(elementOrRef);\r\n\r\n return new Observable((observer: Observer<IntersectionObserverEntry[]>) => {\r\n const stream = this._observeElement(element, options);\r\n const subscription = stream.subscribe(observer);\r\n\r\n return () => {\r\n subscription.unsubscribe();\r\n this._unobserveElement(element);\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Observes the given element by using the existing IntersectionObserver if available, or creating a\r\n * new one if not.\r\n */\r\n private _observeElement(element: Element, options?: IntersectionObserverInit): Observable<IntersectionObserverEntry[]> {\r\n if (this._intersectionObserverFactory) {\r\n if (!this._observedElements.has(element)) {\r\n const stream = new Subject<IntersectionObserverEntry[]>();\r\n const observer = this._intersectionObserverFactory.createInstance(entries => stream.next(entries), options);\r\n if (observer) {\r\n observer.observe(element);\r\n }\r\n this._observedElements.set(element, {observer, stream, count: 1});\r\n } else {\r\n this._observedElements.get(element)!.count++;\r\n }\r\n return this._observedElements.get(element)!.stream;\r\n }\r\n return EMPTY;\r\n }\r\n\r\n /**\r\n * Un-observes the given element and cleans up the underlying IntersectionObserver if nobody else is\r\n * observing this element.\r\n */\r\n private _unobserveElement(element: Element) {\r\n if (this._observedElements.has(element)) {\r\n this._observedElements.get(element)!.count--;\r\n if (!this._observedElements.get(element)!.count) {\r\n this._cleanupObserver(element);\r\n }\r\n }\r\n }\r\n\r\n /** Clean up the underlying IntersectionObserver for the specified element. */\r\n private _cleanupObserver(element: Element) {\r\n if (this._observedElements.has(element)) {\r\n const {observer, stream} = this._observedElements.get(element)!;\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n stream.complete();\r\n this._observedElements.delete(element);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Directive that triggers intersection event whenever the visibility of its associated element has changed\r\n * relative to the specified root element. The root element must be the ancestor of the directive's element.\r\n * Keep in mind that each directive's element will have its own instance of the `IntersectionObserver` class.\r\n */\r\n@Directive({\r\n selector: '[cuteObserveVisibility], [cute-observe-visibility]',\r\n exportAs: 'cuteObserveVisibility',\r\n standalone: true,\r\n})\r\nexport class CuteObserveVisibility implements AfterContentInit, OnDestroy {\r\n private _visibilityObserver = inject(CuteVisibilityObserver);\r\n private _elementRef: ElementRef<Element> = inject(ElementRef);\r\n\r\n private _currentSubscription: Subscription | null = null;\r\n\r\n /** Event emitted for each intersection change between directive's and root elements. */\r\n @Output('cuteObserveVisibility') readonly intersectionChange = new EventEmitter<IntersectionObserverEntry[]>();\r\n\r\n /**\r\n * Whether observing visibility is disabled. This option can be used\r\n * to disconnect the underlying IntersectionObserver until it is needed.\r\n */\r\n @Input({alias: 'cuteObserveVisibilityDisabled', transform: booleanAttribute})\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value: boolean) {\r\n if (value !== this._disabled) {\r\n this._disabled = value;\r\n this._disabled ? this._unsubscribe() : this._subscribe();\r\n }\r\n }\r\n private _disabled = false;\r\n\r\n /**\r\n * Debounce interval in milliseconds for emitting the visibility changes.\r\n * Default is without delay (0).\r\n */\r\n @Input({alias: \"cuteObserveVisibilityDebounce\", transform: numberAttribute})\r\n get debounce(): number { return this._debounce; }\r\n set debounce(value: number) {\r\n if (value !== this._debounce) {\r\n this._debounce = coerceNumberProperty(value);\r\n this._subscribe();\r\n }\r\n }\r\n private _debounce: number = 0;\r\n\r\n /**\r\n * A single number or an array of numbers which indicate at what percentage of the target's visibility\r\n * the observer's callback should be executed. Number(s) must be in range 0..1.\r\n * The default is 0 (meaning as soon as even one pixel is visible, the callback will be run).\r\n */\r\n @Input(\"cuteObserveVisibility\")\r\n get threshold(): number|number[]|undefined {return this._threshold;}\r\n set threshold(value: number|number[]|undefined) {\r\n if (value !== this._threshold) {\r\n this._threshold = value;\r\n this._subscribe();\r\n }\r\n }\r\n private _threshold: number|number[]|undefined;\r\n\r\n /** Margin around the root. A string of one to four values similar to the CSS margin property, e.g., \"10px 20px 30px 40px\" (top, right, bottom, left). */\r\n @Input(\"cuteObserveVisibilityRootMargin\")\r\n get rootMargin(): number|string|undefined { return this._rootMargin; }\r\n set rootMargin(value: number|string|undefined) {\r\n if (value !== this._rootMargin) {\r\n if (typeof value === \"number\") {\r\n value = isNaN(value) ? undefined : Math.round(value)+\"px\";\r\n }\r\n this._rootMargin = value;\r\n this._subscribe();\r\n }\r\n }\r\n private _rootMargin: number|string|undefined;\r\n\r\n @Input(\"cuteObserveVisibilityRoot\")\r\n get root(): Element|undefined { return this._root; }\r\n set root(value: Element|ElementRef|Document|undefined) {\r\n if (value !== this._root) {\r\n this._root = coerceElement(value);\r\n this._subscribe();\r\n }\r\n }\r\n private _root: Element|undefined;\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {}\r\n\r\n private _subscribe() {\r\n this._unsubscribe();\r\n const options = {root: this.root, rootMargin: this.rootMargin, threshold: this.threshold} as IntersectionObserverInit;\r\n const stream = this._visibilityObserver.observe(this._elementRef, Object.getOwnPropertyNames(options).length > 0 ? options : undefined);\r\n\r\n this._currentSubscription = (\r\n this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream\r\n ).subscribe(this.intersectionChange);\r\n }\r\n\r\n private _unsubscribe() {\r\n this._currentSubscription?.unsubscribe();\r\n }\r\n\r\n ngAfterContentInit() {\r\n if (!this._currentSubscription && !this.disabled) {\r\n this._subscribe();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unsubscribe();\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport {Directive} from \"@angular/core\";\r\nimport {CdkObserveContent} from \"@angular/cdk/observers\";\r\n\r\n/**\r\n * Directive that triggers a callback whenever the content of\r\n * its associated element has changed.\r\n */\r\n@Directive({\r\n selector: '[cuteObserveContent]',\r\n exportAs: 'cuteObserveContent',\r\n hostDirectives: [\r\n {directive: CdkObserveContent,\r\n inputs: [\r\n \"cdkObserveContentDisabled: cuteObserveContentDisabled\",\r\n \"debounce: cuteObserveContentDebounce\"\r\n ],\r\n outputs: [\r\n \"cdkObserveContent: cuteObserveContent\"\r\n ]\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class CuteObserveContent {}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport {NgModule} from \"@angular/core\";\r\nimport {CuteObserveVisibility, CuteVisibilityObserver, IntersectionObserverFactory} from \"./observe-visibility\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {CuteObserveContent} from \"./observe-content\";\r\n\r\n@NgModule({\r\n imports: [CommonModule, CuteObserveVisibility, CuteObserveContent],\r\n exports: [CuteObserveVisibility, CuteObserveContent],\r\n providers: [\r\n IntersectionObserverFactory,\r\n CuteVisibilityObserver,\r\n ],\r\n})\r\nexport class CuteObserversModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cute-widgets-base-core-observers.mjs","sources":["../../../../projects/cute-widgets/base/core/observers/src/observe-visibility.ts","../../../../projects/cute-widgets/base/core/observers/src/observe-content.ts","../../../../projects/cute-widgets/base/core/observers/src/observers.module.ts","../../../../projects/cute-widgets/base/core/observers/cute-widgets-base-core-observers.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport {coerceNumberProperty, coerceElement} from '@angular/cdk/coercion';\r\nimport {\r\n AfterContentInit,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Injectable,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n booleanAttribute, InjectionToken, numberAttribute, inject,\r\n} from '@angular/core';\r\nimport {Observable, Subject, Subscription, Observer, EMPTY} from 'rxjs';\r\nimport {debounceTime} from 'rxjs/operators';\r\n\r\nexport const CUTE_VISIBILITY_OBSERVER_OPTIONS = new InjectionToken<IntersectionObserverInit>(\"CUTE_VISIBILITY_OBSERVER_OPTIONS\");\r\n\r\n/**\r\n * Factory service that creates a new IntersectionObserver and allows us to stub it out in unit tests.\r\n */\r\n@Injectable({providedIn: 'root'})\r\nexport class IntersectionObserverFactory {\r\n private _injectedOptions: IntersectionObserverInit|null = inject(CUTE_VISIBILITY_OBSERVER_OPTIONS, {optional: true});\r\n private readonly _defaultOptions: IntersectionObserverInit|null;\r\n\r\n constructor(...args: unknown[]);\r\n constructor () {\r\n\r\n this._defaultOptions = this._injectedOptions ? {...this._injectedOptions} : null;\r\n\r\n const root = this._defaultOptions?.root;\r\n if (root && root instanceof Element && getComputedStyle(root).overflowY === \"visible\") {\r\n this._defaultOptions!.root = null;\r\n }\r\n }\r\n\r\n /** `IntersectionObserver` factory method. Returns _null_ if the API is not supported. */\r\n createInstance(callback: IntersectionObserverCallback, options?: IntersectionObserverInit): IntersectionObserver | null {\r\n const observerOptions: IntersectionObserverInit = {\r\n root: options?.root ?? this._defaultOptions?.root,\r\n rootMargin: options?.rootMargin ?? this._defaultOptions?.rootMargin,\r\n threshold: options?.threshold ?? this._defaultOptions?.threshold,\r\n };\r\n return typeof IntersectionObserver === 'undefined' ? null : new IntersectionObserver(callback, observerOptions);\r\n }\r\n}\r\n\r\n/**\r\n * An injectable service that allows watching elements for visibility changes.\r\n */\r\n@Injectable({providedIn: 'root'})\r\nexport class CuteVisibilityObserver implements OnDestroy {\r\n private _intersectionObserverFactory = inject(IntersectionObserverFactory, {optional: true});\r\n\r\n /** Keeps track of the existing IntersectionObservers, so they can be reused. */\r\n private _observedElements = new Map<\r\n Element,\r\n {\r\n observer: IntersectionObserver | null;\r\n readonly stream: Subject<IntersectionObserverEntry[]>;\r\n count: number;\r\n }\r\n >();\r\n\r\n constructor() {}\r\n\r\n ngOnDestroy() {\r\n this._observedElements.forEach((_, element) => this._cleanupObserver(element));\r\n }\r\n\r\n /**\r\n * Observe visibility changes on an element.\r\n * @param element The element to observe for visibility changes.\r\n * @param options Options to customize the observer\r\n * @returns Observable object\r\n */\r\n observe(element: Element, options?: IntersectionObserverInit): Observable<IntersectionObserverEntry[]>;\r\n /**\r\n * Observe visibility changes on an element.\r\n * @param element The element to observe for visibility changes.\r\n * @param options Options to customize the observer\r\n * @returns Observable object\r\n */\r\n observe(element: ElementRef<Element>, options?: IntersectionObserverInit): Observable<IntersectionObserverEntry[]>;\r\n observe(elementOrRef: Element | ElementRef<Element>, options?: IntersectionObserverInit): Observable<IntersectionObserverEntry[]> {\r\n const element = coerceElement(elementOrRef);\r\n\r\n return new Observable((observer: Observer<IntersectionObserverEntry[]>) => {\r\n const stream = this._observeElement(element, options);\r\n const subscription = stream.subscribe(observer);\r\n\r\n return () => {\r\n subscription.unsubscribe();\r\n this._unobserveElement(element);\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Observes the given element by using the existing IntersectionObserver if available, or creating a\r\n * new one if not.\r\n */\r\n private _observeElement(element: Element, options?: IntersectionObserverInit): Observable<IntersectionObserverEntry[]> {\r\n if (this._intersectionObserverFactory) {\r\n if (!this._observedElements.has(element)) {\r\n const stream = new Subject<IntersectionObserverEntry[]>();\r\n const observer = this._intersectionObserverFactory.createInstance(entries => stream.next(entries), options);\r\n if (observer) {\r\n observer.observe(element);\r\n }\r\n this._observedElements.set(element, {observer, stream, count: 1});\r\n } else {\r\n this._observedElements.get(element)!.count++;\r\n }\r\n return this._observedElements.get(element)!.stream;\r\n }\r\n return EMPTY;\r\n }\r\n\r\n /**\r\n * Un-observes the given element and cleans up the underlying IntersectionObserver if nobody else is\r\n * observing this element.\r\n */\r\n private _unobserveElement(element: Element) {\r\n if (this._observedElements.has(element)) {\r\n this._observedElements.get(element)!.count--;\r\n if (!this._observedElements.get(element)!.count) {\r\n this._cleanupObserver(element);\r\n }\r\n }\r\n }\r\n\r\n /** Clean up the underlying IntersectionObserver for the specified element. */\r\n private _cleanupObserver(element: Element) {\r\n if (this._observedElements.has(element)) {\r\n const {observer, stream} = this._observedElements.get(element)!;\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n stream.complete();\r\n this._observedElements.delete(element);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Directive that triggers intersection event whenever the visibility of its associated element has changed\r\n * relative to the specified root element. The root element must be the ancestor of the directive's element.\r\n * Keep in mind that each directive's element will have its own instance of the `IntersectionObserver` class.\r\n */\r\n@Directive({\r\n selector: '[cuteObserveVisibility], [cute-observe-visibility]',\r\n exportAs: 'cuteObserveVisibility',\r\n standalone: true,\r\n})\r\nexport class CuteObserveVisibility implements AfterContentInit, OnDestroy {\r\n private _visibilityObserver = inject(CuteVisibilityObserver);\r\n private _elementRef: ElementRef<Element> = inject(ElementRef);\r\n\r\n private _currentSubscription: Subscription | null = null;\r\n\r\n /** Event emitted for each intersection change between directive's and root elements. */\r\n @Output('cuteObserveVisibility') readonly intersectionChange = new EventEmitter<IntersectionObserverEntry[]>();\r\n\r\n /**\r\n * Whether observing visibility is disabled. This option can be used\r\n * to disconnect the underlying IntersectionObserver until it is needed.\r\n */\r\n @Input({alias: 'cuteObserveVisibilityDisabled', transform: booleanAttribute})\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value: boolean) {\r\n if (value !== this._disabled) {\r\n this._disabled = value;\r\n this._disabled ? this._unsubscribe() : this._subscribe();\r\n }\r\n }\r\n private _disabled = false;\r\n\r\n /**\r\n * Debounce interval in milliseconds for emitting the visibility changes.\r\n * Default is without delay (0).\r\n */\r\n @Input({alias: \"cuteObserveVisibilityDebounce\", transform: numberAttribute})\r\n get debounce(): number { return this._debounce; }\r\n set debounce(value: number) {\r\n if (value !== this._debounce) {\r\n this._debounce = coerceNumberProperty(value);\r\n this._subscribe();\r\n }\r\n }\r\n private _debounce: number = 0;\r\n\r\n /**\r\n * A single number or an array of numbers which indicate at what percentage of the target's visibility\r\n * the observer's callback should be executed. Number(s) must be in range 0..1.\r\n * The default is 0 (meaning as soon as even one pixel is visible, the callback will be run).\r\n */\r\n @Input(\"cuteObserveVisibility\")\r\n get threshold(): number|number[]|undefined {return this._threshold;}\r\n set threshold(value: number|number[]|undefined) {\r\n if (value !== this._threshold) {\r\n this._threshold = value;\r\n this._subscribe();\r\n }\r\n }\r\n private _threshold: number|number[]|undefined;\r\n\r\n /** Margin around the root. A string of one to four values similar to the CSS margin property, e.g., \"10px 20px 30px 40px\" (top, right, bottom, left). */\r\n @Input(\"cuteObserveVisibilityRootMargin\")\r\n get rootMargin(): number|string|undefined { return this._rootMargin; }\r\n set rootMargin(value: number|string|undefined) {\r\n if (value !== this._rootMargin) {\r\n if (typeof value === \"number\") {\r\n value = isNaN(value) ? undefined : Math.round(value)+\"px\";\r\n }\r\n this._rootMargin = value;\r\n this._subscribe();\r\n }\r\n }\r\n private _rootMargin: number|string|undefined;\r\n\r\n @Input(\"cuteObserveVisibilityRoot\")\r\n get root(): Element|undefined { return this._root; }\r\n set root(value: Element|ElementRef|Document|undefined) {\r\n if (value !== this._root) {\r\n this._root = coerceElement(value);\r\n this._subscribe();\r\n }\r\n }\r\n private _root: Element|undefined;\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {}\r\n\r\n private _subscribe() {\r\n this._unsubscribe();\r\n const options = {root: this.root, rootMargin: this.rootMargin, threshold: this.threshold} as IntersectionObserverInit;\r\n const stream = this._visibilityObserver.observe(this._elementRef, Object.getOwnPropertyNames(options).length > 0 ? options : undefined);\r\n\r\n this._currentSubscription = (\r\n this.debounce ? stream.pipe(debounceTime(this.debounce)) : stream\r\n ).subscribe(this.intersectionChange);\r\n }\r\n\r\n private _unsubscribe() {\r\n this._currentSubscription?.unsubscribe();\r\n }\r\n\r\n ngAfterContentInit() {\r\n if (!this._currentSubscription && !this.disabled) {\r\n this._subscribe();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unsubscribe();\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport {Directive} from \"@angular/core\";\r\nimport {CdkObserveContent} from \"@angular/cdk/observers\";\r\n\r\n/**\r\n * Directive that triggers a callback whenever the content of\r\n * its associated element has changed.\r\n */\r\n@Directive({\r\n selector: '[cuteObserveContent]',\r\n exportAs: 'cuteObserveContent',\r\n hostDirectives: [\r\n {directive: CdkObserveContent,\r\n inputs: [\r\n \"cdkObserveContentDisabled: cuteObserveContentDisabled\",\r\n \"debounce: cuteObserveContentDebounce\"\r\n ],\r\n outputs: [\r\n \"cdkObserveContent: cuteObserveContent\"\r\n ]\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class CuteObserveContent {}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport {NgModule} from \"@angular/core\";\r\nimport {CuteObserveVisibility, CuteVisibilityObserver, IntersectionObserverFactory} from \"./observe-visibility\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {CuteObserveContent} from \"./observe-content\";\r\n\r\n@NgModule({\r\n imports: [CommonModule, CuteObserveVisibility, CuteObserveContent],\r\n exports: [CuteObserveVisibility, CuteObserveContent],\r\n providers: [\r\n IntersectionObserverFactory,\r\n CuteVisibilityObserver,\r\n ],\r\n})\r\nexport class CuteObserversModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -72,10 +72,10 @@ class CuteOptgroup {
|
|
|
72
72
|
const parent = inject(CUTE_OPTION_PARENT_COMPONENT, { optional: true });
|
|
73
73
|
this._inert = parent?.inertGroups ?? false;
|
|
74
74
|
}
|
|
75
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
76
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "
|
|
75
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteOptgroup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
76
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "21.2.0", type: CuteOptgroup, isStandalone: true, selector: "cute-optgroup", inputs: { label: "label", disabled: ["disabled", "disabled", booleanAttribute] }, host: { properties: { "attr.role": "_inert ? null : \"group\"", "attr.aria-disabled": "_inert ? null : disabled", "attr.aria-labelledby": "_inert ? null : _labelId" }, classAttribute: "cute-optgroup" }, providers: [{ provide: CUTE_OPTGROUP, useExisting: CuteOptgroup }], exportAs: ["cuteOptgroup"], ngImport: i0, template: "<span\r\n class=\"cute-optgroup-label\"\r\n role=\"presentation\"\r\n [class.disabled]=\"disabled\"\r\n [id]=\"_labelId\">\r\n <span class=\"cute-list-item__primary-text\">{{ label }} <ng-content></ng-content></span>\r\n</span>\r\n\r\n<ng-content select=\"cute-option, ng-container\"></ng-content>\r\n", styles: [".cute-optgroup .cute-optgroup-label{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;outline:none}.cute-optgroup .cute-optgroup-label.disabled{opacity:.38}.cute-optgroup .cute-optgroup-label .cute-list-item__primary-text{font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;font-family:inherit;text-decoration:inherit;text-transform:inherit;white-space:normal;color:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
77
77
|
}
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
78
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteOptgroup, decorators: [{
|
|
79
79
|
type: Component,
|
|
80
80
|
args: [{ selector: 'cute-optgroup', exportAs: 'cuteOptgroup', host: {
|
|
81
81
|
'class': 'cute-optgroup',
|
|
@@ -268,10 +268,10 @@ class CuteOption extends CuteFocusableControl {
|
|
|
268
268
|
_emitSelectionChangeEvent(isUserInput = false) {
|
|
269
269
|
this.onSelectionChange.emit(new CuteOptionSelectionChange(this, isUserInput));
|
|
270
270
|
}
|
|
271
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
272
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
271
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteOption, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
272
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: CuteOption, isStandalone: true, selector: "cute-option", inputs: { value: "value" }, outputs: { onSelectionChange: "onSelectionChange" }, host: { attributes: { "role": "option" }, listeners: { "click": "_selectViaInteraction()", "keydown": "_handleKeydown($event)" }, properties: { "class": "selected ? toTextBgCssClass(color??\"primary\") : undefined", "class.selected": "selected", "class.multiple": "multiple", "class.active": "active", "class.disabled": "disabled", "id": "id", "tabindex": "disabled ? -1 : 0", "attr.aria-selected": "selected", "attr.aria-disabled": "disabled" }, classAttribute: "cute-option " }, viewQueries: [{ propertyName: "_text", first: true, predicate: ["text"], descendants: true, static: true }], exportAs: ["cuteOption"], usesInheritance: true, ngImport: i0, template: "\r\n<ng-content select=\"cute-icon, i, img, [role=img]\"></ng-content>\r\n\r\n<span class=\"cute-list-item__primary-text\" #text><ng-content></ng-content></span>\r\n", styles: [".cute-option{display:flex;gap:.25em;position:relative;align-items:center;justify-content:flex-start;-webkit-user-select:none;user-select:none;padding:var(--cute-option-padding-y, .25rem) 1rem;cursor:pointer;background-color:transparent}.cute-option .cute-list-item__primary-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cute-option:hover,.cute-option:active,.cute-option.active{outline:none;background-color:var(--bs-secondary-bg)}.cute-option.disabled{opacity:.5;cursor:auto}.cute-option.disabled:hover,.cute-option.disabled:focus{outline:none;background-color:#0000000f}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
273
273
|
}
|
|
274
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
274
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteOption, decorators: [{
|
|
275
275
|
type: Component,
|
|
276
276
|
args: [{ selector: 'cute-option', exportAs: 'cuteOption', host: {
|
|
277
277
|
'role': 'option',
|
|
@@ -350,13 +350,13 @@ const TYPES = [
|
|
|
350
350
|
CuteOptgroup,
|
|
351
351
|
];
|
|
352
352
|
class CuteOptionModule {
|
|
353
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
354
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
353
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteOptionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
354
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: CuteOptionModule, imports: [CommonModule, CuteOption,
|
|
355
355
|
CuteOptgroup], exports: [CuteOption,
|
|
356
356
|
CuteOptgroup] }); }
|
|
357
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
357
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteOptionModule, imports: [CommonModule] }); }
|
|
358
358
|
}
|
|
359
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
359
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteOptionModule, decorators: [{
|
|
360
360
|
type: NgModule,
|
|
361
361
|
args: [{
|
|
362
362
|
imports: [CommonModule, ...TYPES],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cute-widgets-base-core-option.mjs","sources":["../../../../projects/cute-widgets/base/core/option/src/option-parent.interface.ts","../../../../projects/cute-widgets/base/core/option/src/optgroup.component.ts","../../../../projects/cute-widgets/base/core/option/src/optgroup.component.html","../../../../projects/cute-widgets/base/core/option/src/option.component.ts","../../../../projects/cute-widgets/base/core/option/src/option.component.html","../../../../projects/cute-widgets/base/core/option/src/option.module.ts","../../../../projects/cute-widgets/base/core/option/cute-widgets-base-core-option.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {InjectionToken, Signal} from '@angular/core';\r\n\r\n/**\r\n * Describes a parent component that manages a list of options.\r\n * Contains properties that the options can inherit.\r\n */\r\nexport interface CuteOptionParentComponent {\r\n disableRipple?: boolean| Signal<boolean>;\r\n multiple?: boolean;\r\n inertGroups?: boolean;\r\n hideSingleSelectionIndicator?: boolean;\r\n}\r\n\r\n/**\r\n * Injection token used to provide the parent component to options.\r\n */\r\nexport const CUTE_OPTION_PARENT_COMPONENT = new InjectionToken<CuteOptionParentComponent>(\r\n 'CUTE_OPTION_PARENT_COMPONENT',\r\n);\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n Input,\r\n InjectionToken,\r\n booleanAttribute, inject,\r\n} from '@angular/core';\r\nimport {CuteOptionParentComponent, CUTE_OPTION_PARENT_COMPONENT} from './option-parent.interface';\r\n\r\n// Notes on the accessibility pattern used for `cute-optgroup`.\r\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\r\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\r\n// pointing to the label. This works for `cute-select`, but it seems to hit a bug for autocomplete\r\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\r\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\r\n// VoiceOver on Safari won't read it out.\r\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\r\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\r\n// inside an invisible element in the option. This is suboptimal, because the screen reader will\r\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\r\n// the user enters a new group. The following alternate approaches were considered:\r\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\r\n// when the text will be read out, so sometimes it comes in too late or never if the user\r\n// navigates quickly.\r\n// 2. `<cute-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\r\n// won't read out the description at all.\r\n// 3. `<cute-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\r\n// doesn't read out the text at all. Furthermore, on\r\n\r\n// Counter for unique group ids.\r\nlet _uniqueOptgroupIdCounter = 0;\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `CuteOptgroup`. It serves as\r\n * an alternative token to the actual `CuteOptgroup` class which could cause unnecessary\r\n * retention of the class and its component metadata.\r\n */\r\nexport const CUTE_OPTGROUP = new InjectionToken<CuteOptgroup>('CuteOptgroup');\r\n\r\n/**\r\n * Component that is used to group instances of `mat-option`.\r\n */\r\n@Component({\r\n selector: 'cute-optgroup',\r\n exportAs: 'cuteOptgroup',\r\n templateUrl: './optgroup.component.html',\r\n styleUrls: ['./optgroup.component.scss'],\r\n host: {\r\n 'class': 'cute-optgroup',\r\n '[attr.role]': '_inert ? null : \"group\"',\r\n '[attr.aria-disabled]': '_inert ? null : disabled',\r\n '[attr.aria-labelledby]': '_inert ? null : _labelId',\r\n },\r\n providers: [{provide: CUTE_OPTGROUP, useExisting: CuteOptgroup}],\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CuteOptgroup {\r\n /** Label for the option group. */\r\n @Input() label: string | undefined;\r\n\r\n /** whether the option group is disabled. */\r\n @Input({transform: booleanAttribute}) disabled: boolean = false;\r\n\r\n /** Unique id for the underlying label. */\r\n _labelId: string = `cute-optgroup-label-${_uniqueOptgroupIdCounter++}`;\r\n\r\n /** Whether the group is in inert a11y mode. */\r\n _inert: boolean;\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n const parent = inject<CuteOptionParentComponent>(CUTE_OPTION_PARENT_COMPONENT, {optional: true});\r\n this._inert = parent?.inertGroups ?? false;\r\n }\r\n}\r\n","<span\r\n class=\"cute-optgroup-label\"\r\n role=\"presentation\"\r\n [class.disabled]=\"disabled\"\r\n [id]=\"_labelId\">\r\n <span class=\"cute-list-item__primary-text\">{{ label }} <ng-content></ng-content></span>\r\n</span>\r\n\r\n<ng-content select=\"cute-option, ng-container\"></ng-content>\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {ENTER, hasModifierKey, SPACE} from '@angular/cdk/keycodes';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n AfterViewChecked,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n QueryList,\r\n ViewChild,\r\n inject,\r\n} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {CUTE_OPTGROUP, CuteOptgroup} from './optgroup.component';\r\nimport {CuteOptionParentComponent, CUTE_OPTION_PARENT_COMPONENT} from './option-parent.interface';\r\nimport {CuteFocusableControl} from \"@cute-widgets/base/abstract\";\r\nimport {Highlightable} from \"@angular/cdk/a11y\";\r\nimport {toTextBgCssClass} from \"@cute-widgets/base/core/theming\";\r\n\r\n\r\n/**\r\n * Option IDs need to be unique across components, so this counter exists outside\r\n * the component definition.\r\n */\r\nlet _uniqueIdCounter = 0;\r\n\r\n/** Event object emitted by CuteOption when selected or deselected. */\r\nexport class CuteOptionSelectionChange<T = any> {\r\n constructor(\r\n /** Reference to the option that emitted the event. */\r\n public source: CuteOption<T>,\r\n /** Whether the change in the option's value was a result of a user action. */\r\n public isUserInput = false,\r\n ) {}\r\n}\r\n\r\n/**\r\n * Single option inside a `<cute-select>` element.\r\n */\r\n@Component({\r\n selector: 'cute-option',\r\n templateUrl: './option.component.html',\r\n styleUrls: ['./option.component.scss'],\r\n exportAs: 'cuteOption',\r\n host: {\r\n 'role': 'option',\r\n 'class': 'cute-option ',\r\n //'[class]': 'selected ? \"text-bg-\"+(color ? color : \"primary\") : \"\" ',\r\n '[class]': 'selected ? toTextBgCssClass(color??\"primary\") : undefined',\r\n '[class.selected]': 'selected',\r\n '[class.multiple]': 'multiple',\r\n '[class.active]': 'active',\r\n '[class.disabled]': 'disabled',\r\n '[id]': 'id',\r\n '[tabindex]': 'disabled ? -1 : 0',\r\n // Set aria-selected to false for non-selected items and true for selected items. Conform to\r\n // [WAI ARIA Listbox authoring practices guide](\r\n // https://www.w3.org/WAI/ARIA/apg/patterns/listbox/), \"If any options are selected, each\r\n // selected option has either aria-selected or aria-checked set to true. All options that are\r\n // selectable but not selected have either aria-selected or aria-checked set to false.\" Align\r\n // aria-selected implementation of Chips and List components.\r\n //\r\n // Set `aria-selected=\"false\"` on not-selected listbox options to fix VoiceOver announcing\r\n // every option as \"selected\" (#21491).\r\n '[attr.aria-selected]': 'selected',\r\n '[attr.aria-disabled]': 'disabled',\r\n '(click)': '_selectViaInteraction()',\r\n '(keydown)': '_handleKeydown($event)',\r\n },\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CuteOption<T = any> extends CuteFocusableControl implements Highlightable, AfterViewChecked {\r\n private _parent = inject<CuteOptionParentComponent>(CUTE_OPTION_PARENT_COMPONENT, {optional: true});\r\n public readonly group = inject<CuteOptgroup>(CUTE_OPTGROUP, {optional: true});\r\n\r\n private _selected = false;\r\n private _active = false;\r\n private _mostRecentViewValue = '';\r\n\r\n /** Whether the wrapping component is in multiple selection mode. */\r\n get multiple() {\r\n return this._parent && this._parent.multiple;\r\n }\r\n\r\n /** Whether the option is currently selected. */\r\n get selected(): boolean {\r\n return this._selected;\r\n }\r\n\r\n /** Whether ripples for the option are disabled. */\r\n get disableRipple(): boolean {\r\n return !!(this._parent && this._parent.disableRipple);\r\n }\r\n\r\n /** Whether to display checkmark for single-selection. */\r\n get hideSingleSelectionIndicator(): boolean {\r\n return !!(this._parent && this._parent.hideSingleSelectionIndicator);\r\n }\r\n\r\n protected override getDisabledState(): boolean {\r\n return (this.group && this.group.disabled) || super.getDisabledState();\r\n }\r\n\r\n protected override generateId(): string {\r\n return `cute-option-${_uniqueIdCounter++}`;;\r\n }\r\n\r\n /** The form value of the option. */\r\n @Input() value: T | undefined;\r\n\r\n /** Event emitted when the option is selected or deselected. */\r\n @Output() readonly onSelectionChange = new EventEmitter<CuteOptionSelectionChange<T>>();\r\n\r\n /** Element containing the option's text. */\r\n @ViewChild('text', {static: true}) _text: ElementRef<HTMLElement> | undefined;\r\n\r\n /** Emits when the state of the option changes and any parents have to be notified. */\r\n readonly _stateChanges = new Subject<void>();\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n super();\r\n }\r\n\r\n /**\r\n * Whether the option is currently active and ready to be selected.\r\n * An active option displays styles, as if it is focused, but the\r\n * focus is actually retained somewhere else. This comes in handy\r\n * for components like autocomplete where focus must remain on the input.\r\n */\r\n get active(): boolean {\r\n return this._active;\r\n }\r\n\r\n /**\r\n * The displayed value of the option. It is necessary to show the selected option in the\r\n * select's trigger.\r\n */\r\n get viewValue(): string {\r\n // TODO(kara): Add input property alternative for node envs.\r\n return (this._text?.nativeElement.textContent || '').trim();\r\n }\r\n\r\n /** Selects the option. */\r\n select(emitEvent = true): void {\r\n if (!this._selected) {\r\n this._selected = true;\r\n this.markForCheck();\r\n\r\n if (emitEvent) {\r\n this._emitSelectionChangeEvent();\r\n }\r\n }\r\n }\r\n\r\n /** Deselects the option. */\r\n deselect(emitEvent = true): void {\r\n if (this._selected) {\r\n this._selected = false;\r\n this.markForCheck();\r\n\r\n if (emitEvent) {\r\n this._emitSelectionChangeEvent();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * This method sets display styles on the option to make it appear\r\n * active. This is used by the ActiveDescendantKeyManager so key\r\n * events will display the proper options as active on arrow key events.\r\n */\r\n setActiveStyles(): void {\r\n if (!this._active) {\r\n this._active = true;\r\n this.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * This method removes display styles on the option that made it appear\r\n * active. This is used by the ActiveDescendantKeyManager so key\r\n * events will display the proper options as active on arrow key events.\r\n */\r\n setInactiveStyles(): void {\r\n if (this._active) {\r\n this._active = false;\r\n this.markForCheck();\r\n }\r\n }\r\n\r\n /** Gets the label to be used when determining whether the option should be focused. */\r\n override getLabel(): string {\r\n return this.viewValue;\r\n }\r\n\r\n /** Ensures the option is selected when activated from the keyboard. */\r\n protected _handleKeydown(event: KeyboardEvent): void {\r\n if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\r\n this._selectViaInteraction();\r\n\r\n // Prevent the page from scrolling down and form submits.\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /**\r\n * Selects the option while indicating the selection came from the user. Used to\r\n * determine if the select's view -> model callback should be invoked.\r\n * Used by `CuteSelect` component.\r\n */\r\n public _selectViaInteraction(): void {\r\n if (!this.disabled) {\r\n this._selected = this.multiple ? !this._selected : true;\r\n this.markForCheck();\r\n this._emitSelectionChangeEvent(true);\r\n }\r\n }\r\n\r\n /** Gets the host DOM element. */\r\n _getHostElement(): HTMLElement {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n ngAfterViewChecked() {\r\n // Since parent components could be using the option's label to display the selected values\r\n // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed,\r\n // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\r\n // relatively cheap, however; we still limit them only to selected options in order to avoid\r\n // hitting the DOM too often.\r\n if (this._selected) {\r\n const viewValue = this.viewValue;\r\n\r\n if (viewValue !== this._mostRecentViewValue) {\r\n if (this._mostRecentViewValue) {\r\n this._stateChanges.next();\r\n }\r\n this._mostRecentViewValue = viewValue;\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._stateChanges.complete();\r\n }\r\n\r\n /** Emits the selection change event. */\r\n private _emitSelectionChangeEvent(isUserInput = false): void {\r\n this.onSelectionChange.emit(new CuteOptionSelectionChange<T>(this, isUserInput));\r\n }\r\n\r\n protected readonly toTextBgCssClass = toTextBgCssClass;\r\n}\r\n\r\n/**\r\n * Counts the number of option group labels that precede the specified option.\r\n * @param optionIndex Index of the option at which to start counting.\r\n * @param options Flat list of all the options.\r\n * @param optionGroups Flat list of all the option groups.\r\n * @docs-private\r\n */\r\nexport function _countGroupLabelsBeforeOption(\r\n optionIndex: number,\r\n options: QueryList<CuteOption>,\r\n optionGroups: QueryList<CuteOptgroup>,\r\n): number {\r\n if (optionGroups.length) {\r\n let optionsArray = options.toArray();\r\n let groups = optionGroups.toArray();\r\n let groupCounter = 0;\r\n\r\n for (let i = 0; i < optionIndex + 1; i++) {\r\n if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\r\n groupCounter++;\r\n }\r\n }\r\n\r\n return groupCounter;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Determines the position to which to scroll a panel in order for an option to be into view.\r\n * @param optionOffset Offset of the option from the top of the panel.\r\n * @param optionHeight Height of the options.\r\n * @param currentScrollPosition Current scroll position of the panel.\r\n * @param panelHeight Height of the panel.\r\n * @docs-private\r\n */\r\nexport function _getOptionScrollPosition(\r\n optionOffset: number,\r\n optionHeight: number,\r\n currentScrollPosition: number,\r\n panelHeight: number,\r\n): number {\r\n if (optionOffset < currentScrollPosition) {\r\n return optionOffset;\r\n }\r\n\r\n if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\r\n return Math.max(0, optionOffset - panelHeight + optionHeight);\r\n }\r\n\r\n return currentScrollPosition;\r\n}\r\n","\r\n<ng-content select=\"cute-icon, i, img, [role=img]\"></ng-content>\r\n\r\n<span class=\"cute-list-item__primary-text\" #text><ng-content></ng-content></span>\r\n","import {NgModule, Type} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {CuteOption} from './option.component';\r\nimport {CuteOptgroup} from './optgroup.component';\r\n\r\nconst TYPES: (any | Type<any>)[] = [\r\n CuteOption,\r\n CuteOptgroup,\r\n];\r\n\r\n@NgModule({\r\n imports: [CommonModule, ...TYPES],\r\n exports: TYPES,\r\n declarations: [],\r\n})\r\nexport class CuteOptionModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAAA;;;;;;;;;;AAUG;AAcH;;AAEG;MACU,4BAA4B,GAAG,IAAI,cAAc,CAC5D,8BAA8B;;AC5BhC;;;;;;;;;;AAUG;AAWH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA,IAAI,wBAAwB,GAAG,CAAC;AAEhC;;;;AAIG;MACU,aAAa,GAAG,IAAI,cAAc,CAAe,cAAc;AAE5E;;AAEG;MAiBU,YAAY,CAAA;AAcvB,IAAA,WAAA,GAAA;;QATsC,IAAA,CAAA,QAAQ,GAAY,KAAK;;AAG/D,QAAA,IAAA,CAAA,QAAQ,GAAW,CAAA,oBAAA,EAAuB,wBAAwB,EAAE,EAAE;AAOpE,QAAA,MAAM,MAAM,GAAG,MAAM,CAA4B,4BAA4B,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;QAChG,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,WAAW,IAAI,KAAK;IAC5C;+GAjBW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAKJ,gBAAgB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAVxB,CAAC,EAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAC,CAAC,sDCjElE,oTASA,EAAA,MAAA,EAAA,CAAA,kcAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FD6Da,YAAY,EAAA,UAAA,EAAA,CAAA;kBAhBxB,SAAS;+BACE,eAAe,EAAA,QAAA,EACf,cAAc,EAAA,IAAA,EAGlB;AACJ,wBAAA,OAAO,EAAE,eAAe;AACxB,wBAAA,aAAa,EAAE,yBAAyB;AACxC,wBAAA,sBAAsB,EAAE,0BAA0B;AAClD,wBAAA,wBAAwB,EAAE,0BAA0B;AACrD,qBAAA,EAAA,SAAA,EACU,CAAC,EAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAA,YAAc,EAAC,CAAC,EAAA,UAAA,EACpD,IAAI,iBACD,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,oTAAA,EAAA,MAAA,EAAA,CAAA,kcAAA,CAAA,EAAA;;sBAI9C;;sBAGA,KAAK;uBAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC;;;AE3EtC;;;;;;;;;;AAUG;AAuBH;;;AAGG;AACH,IAAI,gBAAgB,GAAG,CAAC;AAExB;MACa,yBAAyB,CAAA;AACpC,IAAA,WAAA;;IAES,MAAqB;;AAErB,IAAA,WAAA,GAAc,KAAK,EAAA;QAFnB,IAAA,CAAA,MAAM,GAAN,MAAM;QAEN,IAAA,CAAA,WAAW,GAAX,WAAW;IACjB;AACJ;AAED;;AAEG;AAmCG,MAAO,UAAoB,SAAQ,oBAAoB,CAAA;;AAS3D,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ;IAC9C;;AAGA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;;AAGA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IACvD;;AAGA,IAAA,IAAI,4BAA4B,GAAA;AAC9B,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC;IACtE;IAEmB,gBAAgB,GAAA;AACjC,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,gBAAgB,EAAE;IACxE;IAEmB,UAAU,GAAA;AAC3B,QAAA,OAAO,CAAA,YAAA,EAAe,gBAAgB,EAAE,CAAA,CAAE;QAAC;IAC7C;AAeA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAjDD,IAAA,CAAA,OAAO,GAAG,MAAM,CAA4B,4BAA4B,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;QACnF,IAAA,CAAA,KAAK,GAAG,MAAM,CAAe,aAAa,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;QAErE,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,oBAAoB,GAAG,EAAE;;AAkCd,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAgC;;AAM9E,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;QAuIzB,IAAA,CAAA,gBAAgB,GAAG,gBAAgB;IAlItD;AAEA;;;;;AAKG;AACH,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA;;;AAGG;AACH,IAAA,IAAI,SAAS,GAAA;;AAEX,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE;IAC7D;;IAGA,MAAM,CAAC,SAAS,GAAG,IAAI,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,YAAY,EAAE;YAEnB,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,yBAAyB,EAAE;YAClC;QACF;IACF;;IAGA,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,YAAY,EAAE;YAEnB,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,yBAAyB,EAAE;YAClC;QACF;IACF;AAEA;;;;AAIG;IACH,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;AAEA;;;;AAIG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;;IAGS,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACvB;;AAGU,IAAA,cAAc,CAAC,KAAoB,EAAA;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YAClF,IAAI,CAAC,qBAAqB,EAAE;;YAG5B,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;AAEA;;;;AAIG;IACI,qBAAqB,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI;YACvD,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;QACtC;IACF;;IAGA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa;IACvC;IAEA,kBAAkB,GAAA;;;;;;AAMhB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAEhC,YAAA,IAAI,SAAS,KAAK,IAAI,CAAC,oBAAoB,EAAE;AAC3C,gBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;gBAC3B;AACA,gBAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS;YACvC;QACF;IACF;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IAC/B;;IAGQ,yBAAyB,CAAC,WAAW,GAAG,KAAK,EAAA;AACnD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAI,IAAI,EAAE,WAAW,CAAC,CAAC;IAClF;+GAnLW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,UAAU,uxBCtFvB,uKAIA,EAAA,MAAA,EAAA,CAAA,klBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FDkFa,UAAU,EAAA,UAAA,EAAA,CAAA;kBAlCtB,SAAS;+BACE,aAAa,EAAA,QAAA,EAGb,YAAY,EAAA,IAAA,EAChB;AACJ,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,OAAO,EAAE,cAAc;;AAEvB,wBAAA,SAAS,EAAE,2DAA2D;AACtE,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,gBAAgB,EAAE,QAAQ;AAC1B,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,YAAY,EAAE,mBAAmB;;;;;;;;;;AAUjC,wBAAA,sBAAsB,EAAE,UAAU;AAClC,wBAAA,sBAAsB,EAAE,UAAU;AAClC,wBAAA,SAAS,EAAE,yBAAyB;AACpC,wBAAA,WAAW,EAAE,wBAAwB;qBACtC,EAAA,UAAA,EACW,IAAI,iBACD,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uKAAA,EAAA,MAAA,EAAA,CAAA,klBAAA,CAAA,EAAA;;sBAuC9C;;sBAGA;;sBAGA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC;;AA6InC;;;;;;AAMG;SACa,6BAA6B,CAC3C,WAAmB,EACnB,OAA8B,EAC9B,YAAqC,EAAA;AAErC,IAAA,IAAI,YAAY,CAAC,MAAM,EAAE;AACvB,QAAA,IAAI,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE;AACpC,QAAA,IAAI,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE;QACnC,IAAI,YAAY,GAAG,CAAC;AAEpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,YAAY,CAAC,EAAE;AAC3E,gBAAA,YAAY,EAAE;YAChB;QACF;AAEA,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,OAAO,CAAC;AACV;AAEA;;;;;;;AAOG;AACG,SAAU,wBAAwB,CACtC,YAAoB,EACpB,YAAoB,EACpB,qBAA6B,EAC7B,WAAmB,EAAA;AAEnB,IAAA,IAAI,YAAY,GAAG,qBAAqB,EAAE;AACxC,QAAA,OAAO,YAAY;IACrB;IAEA,IAAI,YAAY,GAAG,YAAY,GAAG,qBAAqB,GAAG,WAAW,EAAE;AACrE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;IAC/D;AAEA,IAAA,OAAO,qBAAqB;AAC9B;;AE7TA,MAAM,KAAK,GAAwB;IACjC,UAAU;IACV,YAAY;CACb;MAOY,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAhB,gBAAgB,EAAA,OAAA,EAAA,CAJjB,YAAY,EALtB,UAAU;AACV,YAAA,YAAY,aADZ,UAAU;YACV,YAAY,CAAA,EAAA,CAAA,CAAA;AAQD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAJjB,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAIX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC;AACjC,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,YAAY,EAAE,EAAE;AACjB,iBAAA;;;ACdD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"cute-widgets-base-core-option.mjs","sources":["../../../../projects/cute-widgets/base/core/option/src/option-parent.interface.ts","../../../../projects/cute-widgets/base/core/option/src/optgroup.component.ts","../../../../projects/cute-widgets/base/core/option/src/optgroup.component.html","../../../../projects/cute-widgets/base/core/option/src/option.component.ts","../../../../projects/cute-widgets/base/core/option/src/option.component.html","../../../../projects/cute-widgets/base/core/option/src/option.module.ts","../../../../projects/cute-widgets/base/core/option/cute-widgets-base-core-option.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {InjectionToken, Signal} from '@angular/core';\r\n\r\n/**\r\n * Describes a parent component that manages a list of options.\r\n * Contains properties that the options can inherit.\r\n */\r\nexport interface CuteOptionParentComponent {\r\n disableRipple?: boolean| Signal<boolean>;\r\n multiple?: boolean;\r\n inertGroups?: boolean;\r\n hideSingleSelectionIndicator?: boolean;\r\n}\r\n\r\n/**\r\n * Injection token used to provide the parent component to options.\r\n */\r\nexport const CUTE_OPTION_PARENT_COMPONENT = new InjectionToken<CuteOptionParentComponent>(\r\n 'CUTE_OPTION_PARENT_COMPONENT',\r\n);\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n Input,\r\n InjectionToken,\r\n booleanAttribute, inject,\r\n} from '@angular/core';\r\nimport {CuteOptionParentComponent, CUTE_OPTION_PARENT_COMPONENT} from './option-parent.interface';\r\n\r\n// Notes on the accessibility pattern used for `cute-optgroup`.\r\n// The option group has two different \"modes\": regular and inert. The regular mode uses the\r\n// recommended a11y pattern which has `role=\"group\"` on the group element with `aria-labelledby`\r\n// pointing to the label. This works for `cute-select`, but it seems to hit a bug for autocomplete\r\n// under VoiceOver where the group doesn't get read out at all. The bug appears to be that if\r\n// there's __any__ a11y-related attribute on the group (e.g. `role` or `aria-labelledby`),\r\n// VoiceOver on Safari won't read it out.\r\n// We've introduced the `inert` mode as a workaround. Under this mode, all a11y attributes are\r\n// removed from the group, and we get the screen reader to read out the group label by mirroring it\r\n// inside an invisible element in the option. This is suboptimal, because the screen reader will\r\n// repeat the group label on each navigation, whereas the default pattern only reads the group when\r\n// the user enters a new group. The following alternate approaches were considered:\r\n// 1. Reading out the group label using the `LiveAnnouncer` solves the problem, but we can't control\r\n// when the text will be read out, so sometimes it comes in too late or never if the user\r\n// navigates quickly.\r\n// 2. `<cute-option aria-describedby=\"groupLabel\"` - This works on Safari, but VoiceOver in Chrome\r\n// won't read out the description at all.\r\n// 3. `<cute-option aria-labelledby=\"optionLabel groupLabel\"` - This works on Chrome, but Safari\r\n// doesn't read out the text at all. Furthermore, on\r\n\r\n// Counter for unique group ids.\r\nlet _uniqueOptgroupIdCounter = 0;\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `CuteOptgroup`. It serves as\r\n * an alternative token to the actual `CuteOptgroup` class which could cause unnecessary\r\n * retention of the class and its component metadata.\r\n */\r\nexport const CUTE_OPTGROUP = new InjectionToken<CuteOptgroup>('CuteOptgroup');\r\n\r\n/**\r\n * Component that is used to group instances of `mat-option`.\r\n */\r\n@Component({\r\n selector: 'cute-optgroup',\r\n exportAs: 'cuteOptgroup',\r\n templateUrl: './optgroup.component.html',\r\n styleUrls: ['./optgroup.component.scss'],\r\n host: {\r\n 'class': 'cute-optgroup',\r\n '[attr.role]': '_inert ? null : \"group\"',\r\n '[attr.aria-disabled]': '_inert ? null : disabled',\r\n '[attr.aria-labelledby]': '_inert ? null : _labelId',\r\n },\r\n providers: [{provide: CUTE_OPTGROUP, useExisting: CuteOptgroup}],\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CuteOptgroup {\r\n /** Label for the option group. */\r\n @Input() label: string | undefined;\r\n\r\n /** whether the option group is disabled. */\r\n @Input({transform: booleanAttribute}) disabled: boolean = false;\r\n\r\n /** Unique id for the underlying label. */\r\n _labelId: string = `cute-optgroup-label-${_uniqueOptgroupIdCounter++}`;\r\n\r\n /** Whether the group is in inert a11y mode. */\r\n _inert: boolean;\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n const parent = inject<CuteOptionParentComponent>(CUTE_OPTION_PARENT_COMPONENT, {optional: true});\r\n this._inert = parent?.inertGroups ?? false;\r\n }\r\n}\r\n","<span\r\n class=\"cute-optgroup-label\"\r\n role=\"presentation\"\r\n [class.disabled]=\"disabled\"\r\n [id]=\"_labelId\">\r\n <span class=\"cute-list-item__primary-text\">{{ label }} <ng-content></ng-content></span>\r\n</span>\r\n\r\n<ng-content select=\"cute-option, ng-container\"></ng-content>\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * This code is a modification of the `@angular/material` original\r\n * code licensed under MIT-style License (https://angular.dev/license).\r\n */\r\nimport {ENTER, hasModifierKey, SPACE} from '@angular/cdk/keycodes';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n AfterViewChecked,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n QueryList,\r\n ViewChild,\r\n inject,\r\n} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {CUTE_OPTGROUP, CuteOptgroup} from './optgroup.component';\r\nimport {CuteOptionParentComponent, CUTE_OPTION_PARENT_COMPONENT} from './option-parent.interface';\r\nimport {CuteFocusableControl} from \"@cute-widgets/base/abstract\";\r\nimport {Highlightable} from \"@angular/cdk/a11y\";\r\nimport {toTextBgCssClass} from \"@cute-widgets/base/core/theming\";\r\n\r\n\r\n/**\r\n * Option IDs need to be unique across components, so this counter exists outside\r\n * the component definition.\r\n */\r\nlet _uniqueIdCounter = 0;\r\n\r\n/** Event object emitted by CuteOption when selected or deselected. */\r\nexport class CuteOptionSelectionChange<T = any> {\r\n constructor(\r\n /** Reference to the option that emitted the event. */\r\n public source: CuteOption<T>,\r\n /** Whether the change in the option's value was a result of a user action. */\r\n public isUserInput = false,\r\n ) {}\r\n}\r\n\r\n/**\r\n * Single option inside a `<cute-select>` element.\r\n */\r\n@Component({\r\n selector: 'cute-option',\r\n templateUrl: './option.component.html',\r\n styleUrls: ['./option.component.scss'],\r\n exportAs: 'cuteOption',\r\n host: {\r\n 'role': 'option',\r\n 'class': 'cute-option ',\r\n //'[class]': 'selected ? \"text-bg-\"+(color ? color : \"primary\") : \"\" ',\r\n '[class]': 'selected ? toTextBgCssClass(color??\"primary\") : undefined',\r\n '[class.selected]': 'selected',\r\n '[class.multiple]': 'multiple',\r\n '[class.active]': 'active',\r\n '[class.disabled]': 'disabled',\r\n '[id]': 'id',\r\n '[tabindex]': 'disabled ? -1 : 0',\r\n // Set aria-selected to false for non-selected items and true for selected items. Conform to\r\n // [WAI ARIA Listbox authoring practices guide](\r\n // https://www.w3.org/WAI/ARIA/apg/patterns/listbox/), \"If any options are selected, each\r\n // selected option has either aria-selected or aria-checked set to true. All options that are\r\n // selectable but not selected have either aria-selected or aria-checked set to false.\" Align\r\n // aria-selected implementation of Chips and List components.\r\n //\r\n // Set `aria-selected=\"false\"` on not-selected listbox options to fix VoiceOver announcing\r\n // every option as \"selected\" (#21491).\r\n '[attr.aria-selected]': 'selected',\r\n '[attr.aria-disabled]': 'disabled',\r\n '(click)': '_selectViaInteraction()',\r\n '(keydown)': '_handleKeydown($event)',\r\n },\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CuteOption<T = any> extends CuteFocusableControl implements Highlightable, AfterViewChecked {\r\n private _parent = inject<CuteOptionParentComponent>(CUTE_OPTION_PARENT_COMPONENT, {optional: true});\r\n public readonly group = inject<CuteOptgroup>(CUTE_OPTGROUP, {optional: true});\r\n\r\n private _selected = false;\r\n private _active = false;\r\n private _mostRecentViewValue = '';\r\n\r\n /** Whether the wrapping component is in multiple selection mode. */\r\n get multiple() {\r\n return this._parent && this._parent.multiple;\r\n }\r\n\r\n /** Whether the option is currently selected. */\r\n get selected(): boolean {\r\n return this._selected;\r\n }\r\n\r\n /** Whether ripples for the option are disabled. */\r\n get disableRipple(): boolean {\r\n return !!(this._parent && this._parent.disableRipple);\r\n }\r\n\r\n /** Whether to display checkmark for single-selection. */\r\n get hideSingleSelectionIndicator(): boolean {\r\n return !!(this._parent && this._parent.hideSingleSelectionIndicator);\r\n }\r\n\r\n protected override getDisabledState(): boolean {\r\n return (this.group && this.group.disabled) || super.getDisabledState();\r\n }\r\n\r\n protected override generateId(): string {\r\n return `cute-option-${_uniqueIdCounter++}`;;\r\n }\r\n\r\n /** The form value of the option. */\r\n @Input() value: T | undefined;\r\n\r\n /** Event emitted when the option is selected or deselected. */\r\n @Output() readonly onSelectionChange = new EventEmitter<CuteOptionSelectionChange<T>>();\r\n\r\n /** Element containing the option's text. */\r\n @ViewChild('text', {static: true}) _text: ElementRef<HTMLElement> | undefined;\r\n\r\n /** Emits when the state of the option changes and any parents have to be notified. */\r\n readonly _stateChanges = new Subject<void>();\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n super();\r\n }\r\n\r\n /**\r\n * Whether the option is currently active and ready to be selected.\r\n * An active option displays styles, as if it is focused, but the\r\n * focus is actually retained somewhere else. This comes in handy\r\n * for components like autocomplete where focus must remain on the input.\r\n */\r\n get active(): boolean {\r\n return this._active;\r\n }\r\n\r\n /**\r\n * The displayed value of the option. It is necessary to show the selected option in the\r\n * select's trigger.\r\n */\r\n get viewValue(): string {\r\n // TODO(kara): Add input property alternative for node envs.\r\n return (this._text?.nativeElement.textContent || '').trim();\r\n }\r\n\r\n /** Selects the option. */\r\n select(emitEvent = true): void {\r\n if (!this._selected) {\r\n this._selected = true;\r\n this.markForCheck();\r\n\r\n if (emitEvent) {\r\n this._emitSelectionChangeEvent();\r\n }\r\n }\r\n }\r\n\r\n /** Deselects the option. */\r\n deselect(emitEvent = true): void {\r\n if (this._selected) {\r\n this._selected = false;\r\n this.markForCheck();\r\n\r\n if (emitEvent) {\r\n this._emitSelectionChangeEvent();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * This method sets display styles on the option to make it appear\r\n * active. This is used by the ActiveDescendantKeyManager so key\r\n * events will display the proper options as active on arrow key events.\r\n */\r\n setActiveStyles(): void {\r\n if (!this._active) {\r\n this._active = true;\r\n this.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * This method removes display styles on the option that made it appear\r\n * active. This is used by the ActiveDescendantKeyManager so key\r\n * events will display the proper options as active on arrow key events.\r\n */\r\n setInactiveStyles(): void {\r\n if (this._active) {\r\n this._active = false;\r\n this.markForCheck();\r\n }\r\n }\r\n\r\n /** Gets the label to be used when determining whether the option should be focused. */\r\n override getLabel(): string {\r\n return this.viewValue;\r\n }\r\n\r\n /** Ensures the option is selected when activated from the keyboard. */\r\n protected _handleKeydown(event: KeyboardEvent): void {\r\n if ((event.keyCode === ENTER || event.keyCode === SPACE) && !hasModifierKey(event)) {\r\n this._selectViaInteraction();\r\n\r\n // Prevent the page from scrolling down and form submits.\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /**\r\n * Selects the option while indicating the selection came from the user. Used to\r\n * determine if the select's view -> model callback should be invoked.\r\n * Used by `CuteSelect` component.\r\n */\r\n public _selectViaInteraction(): void {\r\n if (!this.disabled) {\r\n this._selected = this.multiple ? !this._selected : true;\r\n this.markForCheck();\r\n this._emitSelectionChangeEvent(true);\r\n }\r\n }\r\n\r\n /** Gets the host DOM element. */\r\n _getHostElement(): HTMLElement {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n ngAfterViewChecked() {\r\n // Since parent components could be using the option's label to display the selected values\r\n // (e.g. `mat-select`) and they don't have a way of knowing if the option's label has changed,\r\n // we have to check for changes in the DOM ourselves and dispatch an event. These checks are\r\n // relatively cheap, however; we still limit them only to selected options in order to avoid\r\n // hitting the DOM too often.\r\n if (this._selected) {\r\n const viewValue = this.viewValue;\r\n\r\n if (viewValue !== this._mostRecentViewValue) {\r\n if (this._mostRecentViewValue) {\r\n this._stateChanges.next();\r\n }\r\n this._mostRecentViewValue = viewValue;\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._stateChanges.complete();\r\n }\r\n\r\n /** Emits the selection change event. */\r\n private _emitSelectionChangeEvent(isUserInput = false): void {\r\n this.onSelectionChange.emit(new CuteOptionSelectionChange<T>(this, isUserInput));\r\n }\r\n\r\n protected readonly toTextBgCssClass = toTextBgCssClass;\r\n}\r\n\r\n/**\r\n * Counts the number of option group labels that precede the specified option.\r\n * @param optionIndex Index of the option at which to start counting.\r\n * @param options Flat list of all the options.\r\n * @param optionGroups Flat list of all the option groups.\r\n * @docs-private\r\n */\r\nexport function _countGroupLabelsBeforeOption(\r\n optionIndex: number,\r\n options: QueryList<CuteOption>,\r\n optionGroups: QueryList<CuteOptgroup>,\r\n): number {\r\n if (optionGroups.length) {\r\n let optionsArray = options.toArray();\r\n let groups = optionGroups.toArray();\r\n let groupCounter = 0;\r\n\r\n for (let i = 0; i < optionIndex + 1; i++) {\r\n if (optionsArray[i].group && optionsArray[i].group === groups[groupCounter]) {\r\n groupCounter++;\r\n }\r\n }\r\n\r\n return groupCounter;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Determines the position to which to scroll a panel in order for an option to be into view.\r\n * @param optionOffset Offset of the option from the top of the panel.\r\n * @param optionHeight Height of the options.\r\n * @param currentScrollPosition Current scroll position of the panel.\r\n * @param panelHeight Height of the panel.\r\n * @docs-private\r\n */\r\nexport function _getOptionScrollPosition(\r\n optionOffset: number,\r\n optionHeight: number,\r\n currentScrollPosition: number,\r\n panelHeight: number,\r\n): number {\r\n if (optionOffset < currentScrollPosition) {\r\n return optionOffset;\r\n }\r\n\r\n if (optionOffset + optionHeight > currentScrollPosition + panelHeight) {\r\n return Math.max(0, optionOffset - panelHeight + optionHeight);\r\n }\r\n\r\n return currentScrollPosition;\r\n}\r\n","\r\n<ng-content select=\"cute-icon, i, img, [role=img]\"></ng-content>\r\n\r\n<span class=\"cute-list-item__primary-text\" #text><ng-content></ng-content></span>\r\n","import {NgModule, Type} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {CuteOption} from './option.component';\r\nimport {CuteOptgroup} from './optgroup.component';\r\n\r\nconst TYPES: (any | Type<any>)[] = [\r\n CuteOption,\r\n CuteOptgroup,\r\n];\r\n\r\n@NgModule({\r\n imports: [CommonModule, ...TYPES],\r\n exports: TYPES,\r\n declarations: [],\r\n})\r\nexport class CuteOptionModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -35,10 +35,10 @@ class CuteSafePipe {
|
|
|
35
35
|
}
|
|
36
36
|
return "";
|
|
37
37
|
}
|
|
38
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
39
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteSafePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
39
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: CuteSafePipe, isStandalone: true, name: "safe" }); }
|
|
40
40
|
}
|
|
41
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteSafePipe, decorators: [{
|
|
42
42
|
type: Pipe,
|
|
43
43
|
args: [{
|
|
44
44
|
name: 'safe'
|
|
@@ -79,10 +79,10 @@ class CuteSanitizePipe {
|
|
|
79
79
|
}
|
|
80
80
|
return "";
|
|
81
81
|
}
|
|
82
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
83
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
82
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteSanitizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
83
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: CuteSanitizePipe, isStandalone: true, name: "sanitize" }); }
|
|
84
84
|
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteSanitizePipe, decorators: [{
|
|
86
86
|
type: Pipe,
|
|
87
87
|
args: [{
|
|
88
88
|
name: 'sanitize'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cute-widgets-base-core-pipes.mjs","sources":["../../../../projects/cute-widgets/base/core/pipes/src/safe.pipe.ts","../../../../projects/cute-widgets/base/core/pipes/src/sanitize.pipe.ts","../../../../projects/cute-widgets/base/core/pipes/cute-widgets-base-core-pipes.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport { DomSanitizer, SafeValue } from \"@angular/platform-browser\";\r\n\r\n/**\r\n * Bypass security and trust the given value to be a safe resource.\r\n * > WARNING: calling this method with untrusted user data exposes your application to XSS security risks!\r\n * @example\r\n * ```html\r\n * <img [src]=\"item.source | safe:'url'\" alt=\"Item image\"/>\r\n * ```\r\n */\r\n@Pipe({\r\n name: 'safe'\r\n})\r\nexport class CuteSafePipe implements PipeTransform {\r\n protected sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n transform(value: any, type: 'html'|'style'|'script'|'url'|'resourceUrl' = \"html\"): SafeValue {\r\n if (typeof value===\"string\") {\r\n switch (type.toLowerCase()) {\r\n case 'html': return this.sanitizer.bypassSecurityTrustHtml(value);\r\n case 'style': return this.sanitizer.bypassSecurityTrustStyle(value);\r\n case 'script': return this.sanitizer.bypassSecurityTrustScript(value);\r\n case 'url': return this.sanitizer.bypassSecurityTrustUrl(value);\r\n case 'resourceUrl': return this.sanitizer.bypassSecurityTrustResourceUrl(value);\r\n default: throw new Error(`Invalid safe type specified: ${type}`);\r\n }\r\n }\r\n return \"\";\r\n }\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {inject, Pipe, PipeTransform, SecurityContext} from '@angular/core';\r\nimport {DomSanitizer, SafeValue} from \"@angular/platform-browser\";\r\n\r\n/**\r\n * Gets a safe value from either a known safe value or a value with unknown safety.\r\n *\r\n * @example\r\n * ```html\r\n * <div [innerHTML]=\"item.htmlContent | sanitize:'html'\"></div>\r\n * ```\r\n */\r\n@Pipe({\r\n name: 'sanitize'\r\n})\r\nexport class CuteSanitizePipe implements PipeTransform {\r\n protected sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n transform(value: any, context: 'html'|'style'|'script'|'url'|'resourceUrl'|'none' = 'html'): SafeValue|null {\r\n if (typeof value===\"string\") {\r\n switch (context.toLowerCase()) {\r\n case 'html': return this.sanitizer.sanitize(SecurityContext.HTML, value);\r\n case 'style': return this.sanitizer.sanitize(SecurityContext.STYLE, value);\r\n case 'script': return this.sanitizer.sanitize(SecurityContext.SCRIPT, value);\r\n case 'url': return this.sanitizer.sanitize(SecurityContext.URL, value);\r\n case 'resourceUrl': return this.sanitizer.sanitize(SecurityContext.RESOURCE_URL, value);\r\n case 'none': return this.sanitizer.sanitize(SecurityContext.NONE, value);\r\n default: throw new Error(`Invalid security context specified: ${context}`);\r\n }\r\n }\r\n return \"\";\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;;;;AAOG;AAIH;;;;;;;AAOG;MAIU,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;AAIY,QAAA,IAAA,CAAA,SAAS,GAAiB,MAAM,CAAC,YAAY,CAAC;AAezD,IAAA;AAbC,IAAA,SAAS,CAAC,KAAU,EAAE,IAAA,GAAoD,MAAM,EAAA;AAC9E,QAAA,IAAI,OAAO,KAAK,KAAG,QAAQ,EAAE;AAC3B,YAAA,QAAQ,IAAI,CAAC,WAAW,EAAE;AACxB,gBAAA,KAAK,MAAM,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC;AACjE,gBAAA,KAAK,OAAO,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACnE,gBAAA,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACrE,gBAAA,KAAK,KAAK,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAC/D,gBAAA,KAAK,aAAa,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,KAAK,CAAC;gBAC/E,SAAS,MAAM,IAAI,KAAK,CAAC,CAAA,6BAAA,EAAgC,IAAI,CAAA,CAAE,CAAC;;QAEpE;AACA,QAAA,OAAO,EAAE;IACX
|
|
1
|
+
{"version":3,"file":"cute-widgets-base-core-pipes.mjs","sources":["../../../../projects/cute-widgets/base/core/pipes/src/safe.pipe.ts","../../../../projects/cute-widgets/base/core/pipes/src/sanitize.pipe.ts","../../../../projects/cute-widgets/base/core/pipes/cute-widgets-base-core-pipes.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport { DomSanitizer, SafeValue } from \"@angular/platform-browser\";\r\n\r\n/**\r\n * Bypass security and trust the given value to be a safe resource.\r\n * > WARNING: calling this method with untrusted user data exposes your application to XSS security risks!\r\n * @example\r\n * ```html\r\n * <img [src]=\"item.source | safe:'url'\" alt=\"Item image\"/>\r\n * ```\r\n */\r\n@Pipe({\r\n name: 'safe'\r\n})\r\nexport class CuteSafePipe implements PipeTransform {\r\n protected sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n transform(value: any, type: 'html'|'style'|'script'|'url'|'resourceUrl' = \"html\"): SafeValue {\r\n if (typeof value===\"string\") {\r\n switch (type.toLowerCase()) {\r\n case 'html': return this.sanitizer.bypassSecurityTrustHtml(value);\r\n case 'style': return this.sanitizer.bypassSecurityTrustStyle(value);\r\n case 'script': return this.sanitizer.bypassSecurityTrustScript(value);\r\n case 'url': return this.sanitizer.bypassSecurityTrustUrl(value);\r\n case 'resourceUrl': return this.sanitizer.bypassSecurityTrustResourceUrl(value);\r\n default: throw new Error(`Invalid safe type specified: ${type}`);\r\n }\r\n }\r\n return \"\";\r\n }\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {inject, Pipe, PipeTransform, SecurityContext} from '@angular/core';\r\nimport {DomSanitizer, SafeValue} from \"@angular/platform-browser\";\r\n\r\n/**\r\n * Gets a safe value from either a known safe value or a value with unknown safety.\r\n *\r\n * @example\r\n * ```html\r\n * <div [innerHTML]=\"item.htmlContent | sanitize:'html'\"></div>\r\n * ```\r\n */\r\n@Pipe({\r\n name: 'sanitize'\r\n})\r\nexport class CuteSanitizePipe implements PipeTransform {\r\n protected sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n transform(value: any, context: 'html'|'style'|'script'|'url'|'resourceUrl'|'none' = 'html'): SafeValue|null {\r\n if (typeof value===\"string\") {\r\n switch (context.toLowerCase()) {\r\n case 'html': return this.sanitizer.sanitize(SecurityContext.HTML, value);\r\n case 'style': return this.sanitizer.sanitize(SecurityContext.STYLE, value);\r\n case 'script': return this.sanitizer.sanitize(SecurityContext.SCRIPT, value);\r\n case 'url': return this.sanitizer.sanitize(SecurityContext.URL, value);\r\n case 'resourceUrl': return this.sanitizer.sanitize(SecurityContext.RESOURCE_URL, value);\r\n case 'none': return this.sanitizer.sanitize(SecurityContext.NONE, value);\r\n default: throw new Error(`Invalid security context specified: ${context}`);\r\n }\r\n }\r\n return \"\";\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -145,10 +145,10 @@ class CuteRipple /* extends ... */ {
|
|
|
145
145
|
ngOnDestroy() {
|
|
146
146
|
RippleManager.removeRipple(this._elemRef.nativeElement);
|
|
147
147
|
}
|
|
148
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
149
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
148
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteRipple /* extends ... */, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
149
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: CuteRipple /* extends ... */, isStandalone: true, selector: "[cuteRipple]", inputs: { rippleOptions: ["cuteRipple", "rippleOptions"] }, host: { listeners: { "mousedown": "onMouseDown($event)" } }, exportAs: ["cuteRipple"], ngImport: i0 }); }
|
|
150
150
|
}
|
|
151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteRipple /* extends ... */, decorators: [{
|
|
152
152
|
type: Directive,
|
|
153
153
|
args: [{
|
|
154
154
|
selector: '[cuteRipple]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cute-widgets-base-core-ripple.mjs","sources":["../../../../projects/cute-widgets/base/core/ripple/src/Ripple.ts","../../../../projects/cute-widgets/base/core/ripple/src/RippleManager.ts","../../../../projects/cute-widgets/base/core/ripple/src/ripple.directive.ts","../../../../projects/cute-widgets/base/core/ripple/cute-widgets-base-core-ripple.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport {computed, signal} from \"@angular/core\";\r\nimport {firstValueFrom, fromEvent} from \"rxjs\";\r\nimport {take} from \"rxjs/operators\";\r\n\r\nconst RIPPLE_CLASS_NAME = \"cute-ripple-element\";\r\n\r\nexport type RippleOptions = {centered?: boolean, color?: string|null, duration?: string|number};\r\n\r\nexport abstract class Ripple {\r\n private _active = signal<boolean>(false);\r\n private _disabled: boolean = false;\r\n private readonly _target: HTMLElement | undefined;\r\n\r\n protected constructor(target: HTMLElement) {\r\n this._target = target;\r\n }\r\n\r\n get disabled(): boolean {return this._disabled}\r\n set disabled(v: boolean) {this._disabled = v;}\r\n\r\n isActive = computed(() => this._active());\r\n\r\n stop(): void {\r\n if (this._target) {\r\n const existingRipple = this._target.getElementsByClassName(RIPPLE_CLASS_NAME)[0];\r\n if (existingRipple) {\r\n existingRipple.parentElement?.remove();\r\n }\r\n }\r\n this._active.set(false);\r\n }\r\n\r\n launch(event: MouseEvent, options?: RippleOptions): void {\r\n\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (this.isActive()) {\r\n this.stop();\r\n }\r\n\r\n if (this._target && event) {\r\n const rect = this._target.getBoundingClientRect();\r\n\r\n const parent = document.createElement(\"div\");\r\n parent.style.position = \"absolute\";\r\n parent.style.top = \"0\";\r\n parent.style.right = \"0\";\r\n parent.style.bottom = \"0\";\r\n parent.style.left = \"0\";\r\n parent.style.overflow = \"hidden\";\r\n parent.style.borderRadius = \"inherit\";\r\n parent.style.transform = \"perspective(0)\";\r\n parent.ariaHidden = \"true\";\r\n parent.classList.add(\"cute-ripple\")\r\n\r\n const circle = document.createElement(\"span\");\r\n const diameter = Math.max(rect.width, rect.height);\r\n const radius = diameter/2;\r\n\r\n circle.style.width = circle.style.height = `${diameter}px`;\r\n if (options?.centered) {\r\n circle.style.left = `${rect.width / 2 - radius}px`;\r\n circle.style.top = `${rect.height / 2 - radius}px`;\r\n } else {\r\n circle.style.left = `${event.clientX - rect.left - radius}px`;\r\n circle.style.top = `${event.clientY - rect.top - radius}px`;\r\n }\r\n if (options?.color) {\r\n circle.style.setProperty(\"--cute-ripple-bg-color\", options.color);\r\n }\r\n if (options?.duration) {\r\n circle.style.setProperty(\"--cute-ripple-duration\", String(options.duration));\r\n }\r\n circle.classList.add(RIPPLE_CLASS_NAME);\r\n\r\n parent.appendChild(circle);\r\n this._target.appendChild(parent);\r\n\r\n this._active.set(true);\r\n\r\n Promise.any([\r\n firstValueFrom(fromEvent(circle, \"animationend\").pipe(take(1))),\r\n firstValueFrom(fromEvent(circle, \"animationcancel\").pipe(take(1))),\r\n //firstValueFrom(fromEvent(document, \"mouseup\").pipe(take(1))),\r\n ]).then(() => {\r\n circle.parentElement?.remove();\r\n this._active.set(false);\r\n })\r\n\r\n }\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {Ripple} from \"./Ripple\";\r\n\r\nexport class RippleManager {\r\n private static readonly _ripples = new WeakMap<HTMLElement, Ripple>();\r\n\r\n\r\n static getInstance(target: HTMLElement): Ripple {\r\n return RippleManager.createRipple(target);\r\n }\r\n\r\n static createRipple(target: HTMLElement): Ripple {\r\n\r\n if (!target) {\r\n throw new Error(\"'target' is required when instantiating a Ripple object\")\r\n }\r\n let ripple = this._ripples.get(target);\r\n if (!ripple) {\r\n ripple = new RippleImpl(target);\r\n this._ripples.set(target, ripple);\r\n }\r\n return ripple;\r\n }\r\n\r\n static removeRipple(target: HTMLElement) {\r\n if (target) {\r\n let ripple = this._ripples.get(target);\r\n if (ripple) {\r\n ripple.stop();\r\n }\r\n this._ripples.delete(target);\r\n }\r\n }\r\n}\r\n\r\nclass RippleImpl extends Ripple {\r\n constructor(target: HTMLElement) {\r\n super(target);\r\n }\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {Directive, ElementRef, HostListener, Input, OnDestroy} from \"@angular/core\";\r\nimport {Ripple, RippleOptions} from \"./Ripple\";\r\nimport {RippleManager} from \"./RippleManager\";\r\n\r\n@Directive({\r\n selector: '[cuteRipple]',\r\n exportAs: 'cuteRipple',\r\n host: {},\r\n standalone: true,\r\n})\r\nexport class CuteRipple /* extends ... */ implements OnDestroy {\r\n private readonly _ripple: Ripple | undefined;\r\n\r\n @Input(\"cuteRipple\")\r\n rippleOptions: RippleOptions | undefined;\r\n\r\n @HostListener(\"mousedown\", ['$event'])\r\n protected onMouseDown(event: MouseEvent) {\r\n if (this._ripple) {\r\n this._ripple.launch(event, this.rippleOptions);\r\n }\r\n }\r\n\r\n constructor(private _elemRef: ElementRef<HTMLElement>) {\r\n this._ripple = RippleManager.createRipple(_elemRef.nativeElement);\r\n }\r\n\r\n ngOnDestroy() {\r\n RippleManager.removeRipple(this._elemRef.nativeElement);\r\n }\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cute-widgets-base-core-ripple.mjs","sources":["../../../../projects/cute-widgets/base/core/ripple/src/Ripple.ts","../../../../projects/cute-widgets/base/core/ripple/src/RippleManager.ts","../../../../projects/cute-widgets/base/core/ripple/src/ripple.directive.ts","../../../../projects/cute-widgets/base/core/ripple/cute-widgets-base-core-ripple.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport {computed, signal} from \"@angular/core\";\r\nimport {firstValueFrom, fromEvent} from \"rxjs\";\r\nimport {take} from \"rxjs/operators\";\r\n\r\nconst RIPPLE_CLASS_NAME = \"cute-ripple-element\";\r\n\r\nexport type RippleOptions = {centered?: boolean, color?: string|null, duration?: string|number};\r\n\r\nexport abstract class Ripple {\r\n private _active = signal<boolean>(false);\r\n private _disabled: boolean = false;\r\n private readonly _target: HTMLElement | undefined;\r\n\r\n protected constructor(target: HTMLElement) {\r\n this._target = target;\r\n }\r\n\r\n get disabled(): boolean {return this._disabled}\r\n set disabled(v: boolean) {this._disabled = v;}\r\n\r\n isActive = computed(() => this._active());\r\n\r\n stop(): void {\r\n if (this._target) {\r\n const existingRipple = this._target.getElementsByClassName(RIPPLE_CLASS_NAME)[0];\r\n if (existingRipple) {\r\n existingRipple.parentElement?.remove();\r\n }\r\n }\r\n this._active.set(false);\r\n }\r\n\r\n launch(event: MouseEvent, options?: RippleOptions): void {\r\n\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (this.isActive()) {\r\n this.stop();\r\n }\r\n\r\n if (this._target && event) {\r\n const rect = this._target.getBoundingClientRect();\r\n\r\n const parent = document.createElement(\"div\");\r\n parent.style.position = \"absolute\";\r\n parent.style.top = \"0\";\r\n parent.style.right = \"0\";\r\n parent.style.bottom = \"0\";\r\n parent.style.left = \"0\";\r\n parent.style.overflow = \"hidden\";\r\n parent.style.borderRadius = \"inherit\";\r\n parent.style.transform = \"perspective(0)\";\r\n parent.ariaHidden = \"true\";\r\n parent.classList.add(\"cute-ripple\")\r\n\r\n const circle = document.createElement(\"span\");\r\n const diameter = Math.max(rect.width, rect.height);\r\n const radius = diameter/2;\r\n\r\n circle.style.width = circle.style.height = `${diameter}px`;\r\n if (options?.centered) {\r\n circle.style.left = `${rect.width / 2 - radius}px`;\r\n circle.style.top = `${rect.height / 2 - radius}px`;\r\n } else {\r\n circle.style.left = `${event.clientX - rect.left - radius}px`;\r\n circle.style.top = `${event.clientY - rect.top - radius}px`;\r\n }\r\n if (options?.color) {\r\n circle.style.setProperty(\"--cute-ripple-bg-color\", options.color);\r\n }\r\n if (options?.duration) {\r\n circle.style.setProperty(\"--cute-ripple-duration\", String(options.duration));\r\n }\r\n circle.classList.add(RIPPLE_CLASS_NAME);\r\n\r\n parent.appendChild(circle);\r\n this._target.appendChild(parent);\r\n\r\n this._active.set(true);\r\n\r\n Promise.any([\r\n firstValueFrom(fromEvent(circle, \"animationend\").pipe(take(1))),\r\n firstValueFrom(fromEvent(circle, \"animationcancel\").pipe(take(1))),\r\n //firstValueFrom(fromEvent(document, \"mouseup\").pipe(take(1))),\r\n ]).then(() => {\r\n circle.parentElement?.remove();\r\n this._active.set(false);\r\n })\r\n\r\n }\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {Ripple} from \"./Ripple\";\r\n\r\nexport class RippleManager {\r\n private static readonly _ripples = new WeakMap<HTMLElement, Ripple>();\r\n\r\n\r\n static getInstance(target: HTMLElement): Ripple {\r\n return RippleManager.createRipple(target);\r\n }\r\n\r\n static createRipple(target: HTMLElement): Ripple {\r\n\r\n if (!target) {\r\n throw new Error(\"'target' is required when instantiating a Ripple object\")\r\n }\r\n let ripple = this._ripples.get(target);\r\n if (!ripple) {\r\n ripple = new RippleImpl(target);\r\n this._ripples.set(target, ripple);\r\n }\r\n return ripple;\r\n }\r\n\r\n static removeRipple(target: HTMLElement) {\r\n if (target) {\r\n let ripple = this._ripples.get(target);\r\n if (ripple) {\r\n ripple.stop();\r\n }\r\n this._ripples.delete(target);\r\n }\r\n }\r\n}\r\n\r\nclass RippleImpl extends Ripple {\r\n constructor(target: HTMLElement) {\r\n super(target);\r\n }\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {Directive, ElementRef, HostListener, Input, OnDestroy} from \"@angular/core\";\r\nimport {Ripple, RippleOptions} from \"./Ripple\";\r\nimport {RippleManager} from \"./RippleManager\";\r\n\r\n@Directive({\r\n selector: '[cuteRipple]',\r\n exportAs: 'cuteRipple',\r\n host: {},\r\n standalone: true,\r\n})\r\nexport class CuteRipple /* extends ... */ implements OnDestroy {\r\n private readonly _ripple: Ripple | undefined;\r\n\r\n @Input(\"cuteRipple\")\r\n rippleOptions: RippleOptions | undefined;\r\n\r\n @HostListener(\"mousedown\", ['$event'])\r\n protected onMouseDown(event: MouseEvent) {\r\n if (this._ripple) {\r\n this._ripple.launch(event, this.rippleOptions);\r\n }\r\n }\r\n\r\n constructor(private _elemRef: ElementRef<HTMLElement>) {\r\n this._ripple = RippleManager.createRipple(_elemRef.nativeElement);\r\n }\r\n\r\n ngOnDestroy() {\r\n RippleManager.removeRipple(this._elemRef.nativeElement);\r\n }\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAAA;;;;;;;AAOG;AAMH,MAAM,iBAAiB,GAAG,qBAAqB;MAIzB,MAAM,CAAA;AAKxB,IAAA,WAAA,CAAsB,MAAmB,EAAA;AAJjC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAU,KAAK,mDAAC;QAChC,IAAA,CAAA,SAAS,GAAY,KAAK;QAUlC,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AANrC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;IACzB;IAEA,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,CAAA,CAAA;IAC9C,IAAI,QAAQ,CAAC,CAAU,EAAA,EAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAI7C,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAChF,IAAI,cAAc,EAAE;AAClB,gBAAA,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE;YACxC;QACJ;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;IAEA,MAAM,CAAC,KAAiB,EAAE,OAAuB,EAAA;AAE/C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,CAAC,IAAI,EAAE;QACb;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE;YAEjD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC5C,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AAClC,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;AACtB,YAAA,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG;AACxB,YAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;AACzB,YAAA,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;AACvB,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AAChC,YAAA,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS;AACrC,YAAA,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,gBAAgB;AACzC,YAAA,MAAM,CAAC,UAAU,GAAG,MAAM;AAC1B,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;YAEnC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAClD,YAAA,MAAM,MAAM,GAAG,QAAQ,GAAC,CAAC;AAEzB,YAAA,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,QAAQ,IAAI;AAC1D,YAAA,IAAI,OAAO,EAAE,QAAQ,EAAE;AACrB,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,IAAI;AAClD,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,IAAI;YACpD;iBAAO;AACL,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI;AAC7D,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI;YAC7D;AACA,YAAA,IAAI,OAAO,EAAE,KAAK,EAAE;gBAClB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,EAAE,OAAO,CAAC,KAAK,CAAC;YACnE;AACA,YAAA,IAAI,OAAO,EAAE,QAAQ,EAAE;AACrB,gBAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC9E;AACA,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAEvC,YAAA,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;AAEhC,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAEtB,OAAO,CAAC,GAAG,CAAC;AACV,gBAAA,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,gBAAA,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEnE,aAAA,CAAC,CAAC,IAAI,CAAC,MAAK;AACX,gBAAA,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,CAAC,CAAC;QAEJ;IACF;AAEH;;ACvGD;;;;;;;AAOG;MAGU,aAAa,CAAA;AACE,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAuB,CAAC;IAGtE,OAAO,WAAW,CAAC,MAAmB,EAAA;AAClC,QAAA,OAAO,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC;IAC7C;IAEA,OAAO,YAAY,CAAC,MAAmB,EAAA;QAEnC,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;QAC9E;QACA,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;QACrC;AACA,QAAA,OAAO,MAAM;IACjB;IAEA,OAAO,YAAY,CAAC,MAAmB,EAAA;QACnC,IAAI,MAAM,EAAE;YACR,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YACtC,IAAI,MAAM,EAAE;gBACR,MAAM,CAAC,IAAI,EAAE;YACjB;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC;IACJ;;AAGJ,MAAM,UAAW,SAAQ,MAAM,CAAA;AAC7B,IAAA,WAAA,CAAY,MAAmB,EAAA;QAC7B,KAAK,CAAC,MAAM,CAAC;IACf;AACD;;AC9CD;;;;;;;AAOG;AAWG,MAAO,UAAU,mBAAkB;AAO7B,IAAA,WAAW,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC;QAChD;IACF;AAEA,IAAA,WAAA,CAAoB,QAAiC,EAAA;QAAjC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAC1B,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;IACnE;IAEA,WAAW,GAAA;QACT,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;IACzD;AAnBW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,oBAAkB,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,oBAAkB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,YAAA,EAAA,eAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;AAA5B,EAAA,CAAA,wBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,oBAAkB,UAAA,EAAA,CAAA;kBANxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAIE,KAAK;uBAAC,YAAY;;sBAGlB,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;ACxBvC;;AAEG;;;;"}
|
|
@@ -117,7 +117,7 @@ function toBgCssClass(color) {
|
|
|
117
117
|
if (isExtendedColor(richThemeColor)) {
|
|
118
118
|
themeColor = getBaseColor(richThemeColor);
|
|
119
119
|
if (richThemeColor.endsWith("-emphasis")) {
|
|
120
|
-
return `bg-${themeColor}-subtle`;
|
|
120
|
+
return `bg-${themeColor}-subtle text-${themeColor}-emphasis`;
|
|
121
121
|
}
|
|
122
122
|
// contrast
|
|
123
123
|
return `text-bg-${themeColor}`;
|
|
@@ -191,10 +191,10 @@ class CuteThemeColor /* extends ... */ {
|
|
|
191
191
|
textBgClass() {
|
|
192
192
|
return toTextBgCssClass(this.color);
|
|
193
193
|
}
|
|
194
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
195
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
194
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteThemeColor /* extends ... */, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
195
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.0", type: CuteThemeColor /* extends ... */, isStandalone: true, selector: "[cuteThemeColor]", inputs: { color: ["cuteThemeColor", "color"] }, providers: [{ provide: CUTE_THEME_COLOR, useExisting: CuteThemeColor }], exportAs: ["cuteThemeColor"], ngImport: i0 }); }
|
|
196
196
|
}
|
|
197
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
197
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteThemeColor /* extends ... */, decorators: [{
|
|
198
198
|
type: Directive,
|
|
199
199
|
args: [{
|
|
200
200
|
selector: '[cuteThemeColor]',
|
|
@@ -296,10 +296,10 @@ class CuteThemeService {
|
|
|
296
296
|
ngOnDestroy() {
|
|
297
297
|
this._mediaChange.complete();
|
|
298
298
|
}
|
|
299
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
300
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
299
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
300
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteThemeService, providedIn: "root" }); }
|
|
301
301
|
}
|
|
302
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
302
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CuteThemeService, decorators: [{
|
|
303
303
|
type: Injectable,
|
|
304
304
|
args: [{
|
|
305
305
|
providedIn: "root"
|