cmat 0.0.3 → 0.0.5
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/components/breadcrumb/breadcrumb.component.d.ts +18 -20
- package/components/card/card.component.d.ts +0 -5
- package/components/cascade/cascade-list/cascade-list.component.d.ts +12 -9
- package/components/cascade/cascade-menu/cascade-menu.component.d.ts +0 -1
- package/components/chip-input/chip-input.component.d.ts +34 -0
- package/components/chip-input/index.d.ts +5 -0
- package/components/chip-input/public-api.d.ts +1 -0
- package/components/date-range/date-range.component.d.ts +3 -2
- package/components/json-editor/index.d.ts +5 -0
- package/components/json-editor/json-editor.component.d.ts +25 -0
- package/components/json-editor/public-api.d.ts +1 -0
- package/components/navigation/vertical/components/aside/aside.component.d.ts +2 -2
- package/components/navigation/vertical/components/basic/basic.component.d.ts +2 -2
- package/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +2 -2
- package/components/navigation/vertical/components/divider/divider.component.d.ts +2 -2
- package/components/navigation/vertical/components/group/group.component.d.ts +2 -2
- package/components/navigation/vertical/components/spacer/spacer.component.d.ts +2 -2
- package/components/navigation/vertical/vertical.component.d.ts +2 -2
- package/components/progress-bar/progress-bar.component.d.ts +3 -2
- package/components/rating/rating.component.d.ts +3 -2
- package/components/select-search/select-search.component.d.ts +1 -2
- package/components/select-tree/select-tree.component.d.ts +5 -12
- package/components/timeline/timeline-item/timeline-item.component.d.ts +1 -1
- package/components/transfer-picker/interface.d.ts +1 -1
- package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +4 -4
- package/components/transfer-picker/transfer-picker.service.d.ts +2 -1
- package/directives/autofocus/autofocus.directive.d.ts +1 -3
- package/directives/debounce/debounce-keyup.directive.d.ts +1 -1
- package/directives/digit-only/digit-only.directive.d.ts +2 -0
- package/esm2022/animations/dropdown.mjs +26 -0
- package/esm2022/animations/public-api.mjs +2 -2
- package/esm2022/components/adapter/dayjs-date-adapter.mjs +3 -3
- package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +3 -3
- package/esm2022/components/adapter/native-datetime-adapter.mjs +3 -3
- package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +3 -3
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +16 -17
- package/esm2022/components/breadcrumb/breadcrumb.service.mjs +4 -4
- package/esm2022/components/card/card.component.mjs +5 -14
- package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +5 -6
- package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +65 -39
- package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +5 -9
- package/esm2022/components/chip-input/chip-input.component.mjs +144 -0
- package/esm2022/components/chip-input/cmat-components-chip-input.mjs +5 -0
- package/esm2022/components/chip-input/public-api.mjs +2 -0
- package/esm2022/components/date-range/date-range.component.mjs +13 -9
- package/esm2022/components/drawer/drawer.component.mjs +4 -4
- package/esm2022/components/drawer/drawer.service.mjs +3 -3
- package/esm2022/components/fullscreen/fullscreen.component.mjs +3 -3
- package/esm2022/components/highlight/highlight.component.mjs +3 -3
- package/esm2022/components/highlight/highlight.service.mjs +3 -3
- package/esm2022/components/json-editor/cmat-components-json-editor.mjs +5 -0
- package/esm2022/components/json-editor/json-editor.component.mjs +176 -0
- package/esm2022/components/json-editor/public-api.mjs +2 -0
- package/esm2022/components/masonry/masonry.component.mjs +3 -3
- package/esm2022/components/material-color-picker/material-color-picker.component.mjs +6 -6
- package/esm2022/components/material-datetimepicker/calendar-body.mjs +5 -6
- package/esm2022/components/material-datetimepicker/calendar.mjs +7 -8
- package/esm2022/components/material-datetimepicker/clock.mjs +6 -6
- package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +3 -3
- package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +3 -3
- package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +8 -9
- package/esm2022/components/material-datetimepicker/datetimepicker.mjs +7 -7
- package/esm2022/components/material-datetimepicker/month-view.mjs +5 -6
- package/esm2022/components/material-datetimepicker/multi-year-view.mjs +3 -3
- package/esm2022/components/material-datetimepicker/time.mjs +8 -9
- package/esm2022/components/material-datetimepicker/year-view.mjs +3 -3
- package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +6 -6
- package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +7 -8
- package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +3 -3
- package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +3 -3
- package/esm2022/components/navigation/horizontal/horizontal.component.mjs +5 -6
- package/esm2022/components/navigation/navigation.service.mjs +3 -3
- package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +9 -9
- package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +8 -7
- package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +9 -11
- package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +6 -6
- package/esm2022/components/navigation/vertical/components/group/group.component.mjs +10 -11
- package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +7 -7
- package/esm2022/components/navigation/vertical/vertical.component.mjs +9 -11
- package/esm2022/components/pagination/pagination.component.mjs +6 -7
- package/esm2022/components/pagination/pagination.directive.mjs +3 -3
- package/esm2022/components/pagination/pagination.pipe.mjs +5 -5
- package/esm2022/components/pagination/pagination.service.mjs +3 -3
- package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +3 -3
- package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +6 -6
- package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +8 -9
- package/esm2022/components/popover/popover.component.mjs +5 -5
- package/esm2022/components/progress-bar/progress-bar.component.mjs +11 -8
- package/esm2022/components/rating/rating.component.mjs +14 -6
- package/esm2022/components/select-search/select-no-entries-found.directive.mjs +3 -3
- package/esm2022/components/select-search/select-search-clear.directive.mjs +3 -3
- package/esm2022/components/select-search/select-search.component.mjs +8 -11
- package/esm2022/components/select-tree/select-tree.component.mjs +13 -29
- package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +18 -16
- package/esm2022/components/timeline/timeline.component.mjs +3 -3
- package/esm2022/components/toast/toast-modal.component.mjs +7 -7
- package/esm2022/components/toast/toast.component.mjs +6 -6
- package/esm2022/components/toast/toast.service.mjs +3 -3
- package/esm2022/components/transfer-picker/filter/filter.component.mjs +17 -8
- package/esm2022/components/transfer-picker/interface.mjs +1 -1
- package/esm2022/components/transfer-picker/search/search.component.mjs +9 -5
- package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +44 -21
- package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +7 -6
- package/esm2022/components/transfer-picker/transfer-picker.component.mjs +9 -7
- package/esm2022/components/transfer-picker/transfer-picker.service.mjs +10 -7
- package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +3 -3
- package/esm2022/directives/animate-on-scroll/scroll.service.mjs +3 -3
- package/esm2022/directives/autofocus/autofocus.directive.mjs +7 -7
- package/esm2022/directives/debounce/abstract-debounce.directive.mjs +3 -3
- package/esm2022/directives/debounce/debounce-click.directive.mjs +3 -3
- package/esm2022/directives/debounce/debounce-keyup.directive.mjs +5 -5
- package/esm2022/directives/digit-only/digit-only.directive.mjs +20 -4
- package/esm2022/directives/digit-only/mask.directive.mjs +3 -3
- package/esm2022/directives/digit-only/public-api.mjs +1 -1
- package/esm2022/directives/equal-validator/equal-validator.directive.mjs +3 -3
- package/esm2022/lib/mock-api/mock-api.interceptor.mjs +3 -3
- package/esm2022/lib/mock-api/mock-api.service.mjs +3 -3
- package/esm2022/pipes/bytes/bytes.pipe.mjs +3 -3
- package/esm2022/pipes/date-format/date-format.pipe.mjs +3 -3
- package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +3 -3
- package/esm2022/pipes/group-by/group-by.pipe.mjs +3 -3
- package/esm2022/pipes/keys/keys.pipe.mjs +3 -3
- package/esm2022/pipes/secure/secure-pipe.mjs +5 -5
- package/esm2022/pipes/uppercase/uppercase.pipe.mjs +3 -3
- package/esm2022/services/alert/alert.service.mjs +16 -16
- package/esm2022/services/config/config.constants.mjs +1 -1
- package/esm2022/services/config/config.service.mjs +3 -3
- package/esm2022/services/config/urlStateConfig.service.mjs +5 -5
- package/esm2022/services/confirmation/confirmation.service.mjs +3 -3
- package/esm2022/services/confirmation/dialog/dialog.component.mjs +6 -6
- package/esm2022/services/data/data.service.mjs +4 -4
- package/esm2022/services/loading/loading.interceptor.mjs +3 -3
- package/esm2022/services/loading/loading.service.mjs +3 -3
- package/esm2022/services/local-storage/local-storage.service.mjs +3 -3
- package/esm2022/services/media-watcher/media-watcher.service.mjs +3 -3
- package/esm2022/services/platform/platform.service.mjs +3 -3
- package/esm2022/services/splash-screen/splash-screen.service.mjs +3 -3
- package/esm2022/services/title/title.service.mjs +3 -3
- package/esm2022/services/translation/translation.service.mjs +3 -3
- package/esm2022/services/utils/utils.service.mjs +3 -3
- package/fesm2022/cmat-animations.mjs.map +1 -1
- package/fesm2022/cmat-components-adapter.mjs +9 -9
- package/fesm2022/cmat-components-breadcrumb.mjs +21 -22
- package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/cmat-components-card.mjs +4 -13
- package/fesm2022/cmat-components-card.mjs.map +1 -1
- package/fesm2022/cmat-components-cascade.mjs +72 -49
- package/fesm2022/cmat-components-cascade.mjs.map +1 -1
- package/fesm2022/cmat-components-chip-input.mjs +151 -0
- package/fesm2022/cmat-components-chip-input.mjs.map +1 -0
- package/fesm2022/cmat-components-date-range.mjs +12 -8
- package/fesm2022/cmat-components-date-range.mjs.map +1 -1
- package/fesm2022/cmat-components-drawer.mjs +7 -7
- package/fesm2022/cmat-components-drawer.mjs.map +1 -1
- package/fesm2022/cmat-components-fullscreen.mjs +3 -3
- package/fesm2022/cmat-components-highlight.mjs +6 -6
- package/fesm2022/cmat-components-json-editor.mjs +183 -0
- package/fesm2022/cmat-components-json-editor.mjs.map +1 -0
- package/fesm2022/cmat-components-masonry.mjs +3 -3
- package/fesm2022/cmat-components-material-color-picker.mjs +5 -5
- package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
- package/fesm2022/cmat-components-material-datetimepicker.mjs +51 -52
- package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
- package/fesm2022/cmat-components-navigation.mjs +70 -74
- package/fesm2022/cmat-components-navigation.mjs.map +1 -1
- package/fesm2022/cmat-components-pagination.mjs +15 -16
- package/fesm2022/cmat-components-pagination.mjs.map +1 -1
- package/fesm2022/cmat-components-password-strength.mjs +14 -15
- package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
- package/fesm2022/cmat-components-popover.mjs +4 -4
- package/fesm2022/cmat-components-popover.mjs.map +1 -1
- package/fesm2022/cmat-components-progress-bar.mjs +10 -7
- package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
- package/fesm2022/cmat-components-rating.mjs +13 -5
- package/fesm2022/cmat-components-rating.mjs.map +1 -1
- package/fesm2022/cmat-components-select-search.mjs +13 -16
- package/fesm2022/cmat-components-select-search.mjs.map +1 -1
- package/fesm2022/cmat-components-select-tree.mjs +12 -28
- package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
- package/fesm2022/cmat-components-timeline.mjs +21 -19
- package/fesm2022/cmat-components-timeline.mjs.map +1 -1
- package/fesm2022/cmat-components-toast.mjs +13 -13
- package/fesm2022/cmat-components-toast.mjs.map +1 -1
- package/fesm2022/cmat-components-transfer-picker.mjs +81 -45
- package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
- package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
- package/fesm2022/cmat-directives-autofocus.mjs +6 -6
- package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
- package/fesm2022/cmat-directives-debounce.mjs +10 -10
- package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
- package/fesm2022/cmat-directives-digit-only.mjs +22 -6
- package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
- package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
- package/fesm2022/cmat-lib-mock-api.mjs +6 -6
- package/fesm2022/cmat-pipes-bytes.mjs +3 -3
- package/fesm2022/cmat-pipes-date-format.mjs +3 -3
- package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
- package/fesm2022/cmat-pipes-group-by.mjs +3 -3
- package/fesm2022/cmat-pipes-keys.mjs +3 -3
- package/fesm2022/cmat-pipes-secure.mjs +4 -4
- package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
- package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
- package/fesm2022/cmat-services-alert.mjs +15 -15
- package/fesm2022/cmat-services-alert.mjs.map +1 -1
- package/fesm2022/cmat-services-config.mjs +7 -7
- package/fesm2022/cmat-services-config.mjs.map +1 -1
- package/fesm2022/cmat-services-confirmation.mjs +8 -8
- package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
- package/fesm2022/cmat-services-data.mjs +3 -3
- package/fesm2022/cmat-services-data.mjs.map +1 -1
- package/fesm2022/cmat-services-loading.mjs +6 -6
- package/fesm2022/cmat-services-local-storage.mjs +3 -3
- package/fesm2022/cmat-services-media-watcher.mjs +3 -3
- package/fesm2022/cmat-services-platform.mjs +3 -3
- package/fesm2022/cmat-services-splash-screen.mjs +3 -3
- package/fesm2022/cmat-services-title.mjs +3 -3
- package/fesm2022/cmat-services-translation.mjs +3 -3
- package/fesm2022/cmat-services-utils.mjs +3 -3
- package/package.json +46 -36
- package/pipes/secure/secure-pipe.d.ts +1 -1
- package/services/alert/alert.service.d.ts +4 -4
- package/services/config/config.constants.d.ts +1 -1
- package/services/config/urlStateConfig.service.d.ts +3 -2
- package/styles/components/bundle.scss +559 -0
- package/styles/overrides/angular-material.scss +16 -16
- package/styles/styles.scss +6 -1
- package/styles/tailwind.scss +4 -2
- package/components/breadcrumb/breadcrumb.component.scss +0 -18
- package/components/card/card.component.scss +0 -63
- package/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.scss +0 -43
- package/components/cascade/cascade-list/cascade-list.component.scss +0 -22
- package/components/cascade/cascade-menu/cascade-menu.component.scss +0 -48
- package/components/date-range/date-range.component.scss +0 -232
- package/components/drawer/drawer.component.scss +0 -133
- package/components/highlight/highlight.component.scss +0 -3
- package/components/material-color-picker/material-color-picker.component.scss +0 -5
- package/components/material-datetimepicker/calendar-body.scss +0 -58
- package/components/material-datetimepicker/calendar.scss +0 -194
- package/components/material-datetimepicker/clock.scss +0 -90
- package/components/material-datetimepicker/datetimepicker-content.scss +0 -151
- package/components/material-datetimepicker/datetimepicker.scss +0 -145
- package/components/material-datetimepicker/time.scss +0 -82
- package/components/navigation/horizontal/horizontal.component.scss +0 -167
- package/components/navigation/vertical/styles/appearances/compact.scss +0 -103
- package/components/navigation/vertical/styles/appearances/default.scss +0 -550
- package/components/navigation/vertical/styles/appearances/dense.scss +0 -171
- package/components/navigation/vertical/styles/appearances/thin.scss +0 -91
- package/components/navigation/vertical/vertical.component.scss +0 -4
- package/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.scss +0 -19
- package/components/popover/popover.component.scss +0 -174
- package/components/progress-bar/progress-bar.component.scss +0 -7
- package/components/rating/rating.component.scss +0 -33
- package/components/select-search/select-search.component.scss +0 -126
- package/components/select-tree/select-tree.component.scss +0 -54
- package/components/timeline/timeline-item/timeline-item.component.scss +0 -329
- package/components/timeline/timeline.component.scss +0 -42
- package/components/toast/toast-modal.component.scss +0 -119
- package/components/toast/toast.component.scss +0 -62
- package/components/transfer-picker/filter/filter.component.scss +0 -40
- package/components/transfer-picker/search/search.component.scss +0 -7
- package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.scss +0 -25
- package/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.scss +0 -27
- package/components/transfer-picker/transfer-picker.component.scss +0 -8
- package/esm2022/animations/drop.mjs +0 -26
- package/styles/main.scss +0 -9
- /package/animations/{drop.d.ts → dropdown.d.ts} +0 -0
|
@@ -249,10 +249,10 @@ class CNativeDatetimeAdapter extends DatetimeAdapter {
|
|
|
249
249
|
}
|
|
250
250
|
return result;
|
|
251
251
|
}
|
|
252
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
253
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
252
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CNativeDatetimeAdapter, deps: [{ token: MAT_DATE_LOCALE, optional: true }, { token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
253
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CNativeDatetimeAdapter }); }
|
|
254
254
|
}
|
|
255
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
255
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CNativeDatetimeAdapter, decorators: [{
|
|
256
256
|
type: Injectable
|
|
257
257
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
258
258
|
type: Optional
|
|
@@ -357,10 +357,10 @@ class DayjsDatetimeAdapter extends DatetimeAdapter {
|
|
|
357
357
|
_getDateInNextMonth(date) {
|
|
358
358
|
return super.clone(date).date(1).add(1, 'month');
|
|
359
359
|
}
|
|
360
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
361
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
360
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DayjsDatetimeAdapter, deps: [{ token: MAT_DATE_LOCALE, optional: true }, { token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
361
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DayjsDatetimeAdapter }); }
|
|
362
362
|
}
|
|
363
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
363
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DayjsDatetimeAdapter, decorators: [{
|
|
364
364
|
type: Injectable
|
|
365
365
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
366
366
|
type: Optional
|
|
@@ -563,10 +563,10 @@ class DayjsDateAdapter extends DateAdapter {
|
|
|
563
563
|
dayjs.extend(localeData);
|
|
564
564
|
this.setLocale(dateLocale);
|
|
565
565
|
}
|
|
566
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
567
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
566
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DayjsDateAdapter, deps: [{ token: MAT_DATE_LOCALE, optional: true }, { token: CMAT_DAYJS_DATE_ADAPTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
567
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DayjsDateAdapter }); }
|
|
568
568
|
}
|
|
569
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
569
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: DayjsDateAdapter, decorators: [{
|
|
570
570
|
type: Injectable
|
|
571
571
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
572
572
|
type: Optional
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Directive, Injectable, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChild, Input } from '@angular/core';
|
|
3
3
|
import { takeUntil, filter, map } from 'rxjs/operators';
|
|
4
|
-
import {
|
|
4
|
+
import { NgClass, AsyncPipe, NgTemplateOutlet } from '@angular/common';
|
|
5
5
|
import * as i1 from '@angular/router';
|
|
6
6
|
import { GuardsCheckEnd, RouterLink } from '@angular/router';
|
|
7
7
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
@@ -13,10 +13,10 @@ import { isNull } from 'lodash-es';
|
|
|
13
13
|
* Usage: refer to the demo - app.component.html
|
|
14
14
|
*/
|
|
15
15
|
class CmatBreadcrumbItemDirective {
|
|
16
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
17
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatBreadcrumbItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
17
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: CmatBreadcrumbItemDirective, isStandalone: true, selector: "[cmatBreadcrumbItem]", ngImport: i0 }); }
|
|
18
18
|
}
|
|
19
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatBreadcrumbItemDirective, decorators: [{
|
|
20
20
|
type: Directive,
|
|
21
21
|
args: [{
|
|
22
22
|
selector: '[cmatBreadcrumbItem]',
|
|
@@ -343,10 +343,10 @@ class CmatBreadcrumbService {
|
|
|
343
343
|
}
|
|
344
344
|
return config || {};
|
|
345
345
|
}
|
|
346
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
347
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.
|
|
346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatBreadcrumbService, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
347
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatBreadcrumbService, providedIn: 'root' }); }
|
|
348
348
|
}
|
|
349
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatBreadcrumbService, decorators: [{
|
|
350
350
|
type: Injectable,
|
|
351
351
|
args: [{
|
|
352
352
|
providedIn: 'root',
|
|
@@ -357,21 +357,20 @@ class CmatBreadcrumbComponent {
|
|
|
357
357
|
constructor(_breadcrumbService) {
|
|
358
358
|
this._breadcrumbService = _breadcrumbService;
|
|
359
359
|
/**
|
|
360
|
-
*
|
|
361
|
-
*
|
|
360
|
+
* 如果为true,即使没有任何映射标签,面包屑也会自动生成
|
|
361
|
+
* 默认标签与路由segment相同
|
|
362
362
|
*/
|
|
363
363
|
this.autoGenerate = true;
|
|
364
364
|
/**
|
|
365
|
-
*
|
|
365
|
+
* 默认情况下,查询参数将与breadcrumbs一起保留
|
|
366
366
|
*/
|
|
367
367
|
this.preserveQueryParams = true;
|
|
368
368
|
/**
|
|
369
|
-
*
|
|
369
|
+
* 默认情况下,fragments参数将与breadcrumbs一起保留
|
|
370
370
|
*/
|
|
371
371
|
this.preserveFragment = true;
|
|
372
372
|
/**
|
|
373
|
-
*
|
|
374
|
-
* This will benefit to override styles that are conflicting
|
|
373
|
+
* 可提供覆盖样式,增加特异性
|
|
375
374
|
*/
|
|
376
375
|
this.class = '';
|
|
377
376
|
this._separator = '/';
|
|
@@ -380,12 +379,12 @@ class CmatBreadcrumbComponent {
|
|
|
380
379
|
return this._separator;
|
|
381
380
|
}
|
|
382
381
|
/**
|
|
383
|
-
*
|
|
384
|
-
*
|
|
382
|
+
* 面包屑分隔符, 默认'/'.
|
|
383
|
+
* 用户可以通过传递字符串或模板来自定义分隔符
|
|
385
384
|
*
|
|
386
|
-
*
|
|
385
|
+
* 字符串 --> Ex: <cmat-breadcrumb separator="-"></cmat-breadcrumb>
|
|
387
386
|
*
|
|
388
|
-
*
|
|
387
|
+
* 模板 --> Ex: <cmat-breadcrumb [separator]="separatorTemplate"></cmat-breadcrumb>
|
|
389
388
|
* <ng-template #separatorTemplate><mat-icon>arrow_right</mat-icon></ng-template>
|
|
390
389
|
*/
|
|
391
390
|
set separator(value) {
|
|
@@ -394,7 +393,7 @@ class CmatBreadcrumbComponent {
|
|
|
394
393
|
this._separator = undefined;
|
|
395
394
|
}
|
|
396
395
|
else {
|
|
397
|
-
this.separatorTemplate =
|
|
396
|
+
this.separatorTemplate = null;
|
|
398
397
|
this._separator = value || '/';
|
|
399
398
|
}
|
|
400
399
|
}
|
|
@@ -418,12 +417,12 @@ class CmatBreadcrumbComponent {
|
|
|
418
417
|
};
|
|
419
418
|
})));
|
|
420
419
|
}
|
|
421
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
422
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
420
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatBreadcrumbComponent, deps: [{ token: CmatBreadcrumbService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
421
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: CmatBreadcrumbComponent, isStandalone: true, selector: "cmat-breadcrumb", inputs: { autoGenerate: "autoGenerate", preserveQueryParams: "preserveQueryParams", preserveFragment: "preserveFragment", class: "class", anchorTarget: "anchorTarget", separator: "separator" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: CmatBreadcrumbItemDirective, descendants: true, read: TemplateRef }], exportAs: ["cmatBreadcrumb"], ngImport: i0, template: "<nav aria-label=\"breadcrumb\" class=\"m-0\" [ngClass]=\"class\">\n <ol class=\"flex items-center flex-wrap m-0 p-0\">\n @for (\n breadcrumb of breadcrumbs$ | async; track\n breadcrumb; let isLast = $last; let isFirst = $first; let index = $index; let count = $count) {\n <li class=\"list-none\">\n @if (!isLast) {\n <a class=\"cmat-breadcrumb-link\"\n [ngClass]=\"{ 'pointer-events-none cursor-not-allowed': breadcrumb.disable }\"\n [attr.aria-disabled]=\"breadcrumb.disable\" [attr.tabIndex]=\"breadcrumb.disable ? -1 : 0\"\n rel=\"noopener noreferrer\" [routerLink]=\"\r\n breadcrumb.routeInterceptor\r\n ? breadcrumb.routeInterceptor( breadcrumb,breadcrumb.routeLink)\r\n : breadcrumb.routeLink\" [queryParams]=\"preserveQueryParams ? breadcrumb.queryParams : undefined\"\r\n [fragment]=\"preserveFragment ? breadcrumb.fragment : undefined\"\n [target]=\"anchorTarget ? anchorTarget : '_self'\">\n <ng-container *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: {\r\n $implicit: breadcrumb.label,\r\n info: breadcrumb.info,\r\n last: isLast,\r\n first: isFirst,\r\n index: index,\r\n count: count\r\n }\r\n \"></ng-container>\r\n @if (!itemTemplate) {\n {{\n breadcrumb.label\n }}\n }\n </a>\n }\n @if (isLast) {\n <span class=\"flex items-center\">\n <ng-container *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: {\r\n $implicit: breadcrumb.label,\r\n info: breadcrumb.info,\r\n last: isLast,\r\n first: isFirst,\r\n index: index,\r\n count: count\r\n }\r\n \"></ng-container>\r\n @if (!itemTemplate) {\n {{\n breadcrumb.label\n }}\n }\n </span>\n }\n </li>\n @if (!isLast) {\n <li class=\"flex select-none mx-4\" aria-hidden=\"true\" role=\"separator\">\n <ng-container *ngTemplateOutlet=\"separatorTemplate\"></ng-container>\n @if (separatorTemplate===null) {\n {{ separator }}\n }\n </li>\n }\n}\n</ol>\n</nav>", styles: ["cmat-breadcrumb .cmat-breadcrumb-link{display:flex;align-items:center;white-space:nowrap;color:inherit;text-decoration:none;transition:text-decoration .3s;cursor:pointer}cmat-breadcrumb .cmat-breadcrumb-link:hover{text-decoration-line:underline}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
423
422
|
}
|
|
424
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatBreadcrumbComponent, decorators: [{
|
|
425
424
|
type: Component,
|
|
426
|
-
args: [{ selector: 'cmat-breadcrumb', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatBreadcrumb', standalone: true, imports: [
|
|
425
|
+
args: [{ selector: 'cmat-breadcrumb', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatBreadcrumb', standalone: true, imports: [NgClass, AsyncPipe, RouterLink, NgTemplateOutlet], template: "<nav aria-label=\"breadcrumb\" class=\"m-0\" [ngClass]=\"class\">\n <ol class=\"flex items-center flex-wrap m-0 p-0\">\n @for (\n breadcrumb of breadcrumbs$ | async; track\n breadcrumb; let isLast = $last; let isFirst = $first; let index = $index; let count = $count) {\n <li class=\"list-none\">\n @if (!isLast) {\n <a class=\"cmat-breadcrumb-link\"\n [ngClass]=\"{ 'pointer-events-none cursor-not-allowed': breadcrumb.disable }\"\n [attr.aria-disabled]=\"breadcrumb.disable\" [attr.tabIndex]=\"breadcrumb.disable ? -1 : 0\"\n rel=\"noopener noreferrer\" [routerLink]=\"\r\n breadcrumb.routeInterceptor\r\n ? breadcrumb.routeInterceptor( breadcrumb,breadcrumb.routeLink)\r\n : breadcrumb.routeLink\" [queryParams]=\"preserveQueryParams ? breadcrumb.queryParams : undefined\"\r\n [fragment]=\"preserveFragment ? breadcrumb.fragment : undefined\"\n [target]=\"anchorTarget ? anchorTarget : '_self'\">\n <ng-container *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: {\r\n $implicit: breadcrumb.label,\r\n info: breadcrumb.info,\r\n last: isLast,\r\n first: isFirst,\r\n index: index,\r\n count: count\r\n }\r\n \"></ng-container>\r\n @if (!itemTemplate) {\n {{\n breadcrumb.label\n }}\n }\n </a>\n }\n @if (isLast) {\n <span class=\"flex items-center\">\n <ng-container *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: {\r\n $implicit: breadcrumb.label,\r\n info: breadcrumb.info,\r\n last: isLast,\r\n first: isFirst,\r\n index: index,\r\n count: count\r\n }\r\n \"></ng-container>\r\n @if (!itemTemplate) {\n {{\n breadcrumb.label\n }}\n }\n </span>\n }\n </li>\n @if (!isLast) {\n <li class=\"flex select-none mx-4\" aria-hidden=\"true\" role=\"separator\">\n <ng-container *ngTemplateOutlet=\"separatorTemplate\"></ng-container>\n @if (separatorTemplate===null) {\n {{ separator }}\n }\n </li>\n }\n}\n</ol>\n</nav>", styles: ["cmat-breadcrumb .cmat-breadcrumb-link{display:flex;align-items:center;white-space:nowrap;color:inherit;text-decoration:none;transition:text-decoration .3s;cursor:pointer}cmat-breadcrumb .cmat-breadcrumb-link:hover{text-decoration-line:underline}\n"] }]
|
|
427
426
|
}], ctorParameters: () => [{ type: CmatBreadcrumbService }], propDecorators: { itemTemplate: [{
|
|
428
427
|
type: ContentChild,
|
|
429
428
|
args: [CmatBreadcrumbItemDirective, { static: false, read: TemplateRef }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmat-components-breadcrumb.mjs","sources":["../../../projects/cmat/components/breadcrumb/breadcrumb-item.directive.ts","../../../projects/cmat/components/breadcrumb/breadcrumb.service.ts","../../../projects/cmat/components/breadcrumb/breadcrumb.component.ts","../../../projects/cmat/components/breadcrumb/breadcrumb.component.html","../../../projects/cmat/components/breadcrumb/cmat-components-breadcrumb.ts"],"sourcesContent":["import { Directive } from '@angular/core';\r\n\r\n/**\r\n * This directive is used to customize the breadcrumb label behavior\r\n * *cmatBreadcrumbItem directive can be used in the child element of cmat-breadcrumb\r\n * Usage: refer to the demo - app.component.html\r\n */\r\n@Directive({\r\n selector: '[cmatBreadcrumbItem]',\r\n standalone: true\r\n})\r\nexport class CmatBreadcrumbItemDirective {\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, GuardsCheckEnd, Route, Router } from '@angular/router';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\nimport { CmatBreadcrumb } from './types/breadcrumb';\r\nimport { CmatBreadcrumbFunction, CmatBreadcrumbObject, } from './types/breadcrumb.config';\r\nimport { isNull } from 'lodash-es';\r\n\r\ntype CmatBreadcrumbConfig = CmatBreadcrumbObject | CmatBreadcrumbFunction | string;\r\ntype StoreMatcherKey = 'routeLink' | 'routeRegex' | 'alias';\r\nexport type CmatBreadcrumbDefinition = CmatBreadcrumb & CmatBreadcrumbObject;\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nconst PATH_PARAM = { \r\n PREFIX: ':',\r\n REGEX_IDENTIFIER: '/:[^/]+',\r\n REGEX_REPLACER: '/[^/]+',\r\n};\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nconst ALIAS_PREFIX = '@';\r\nconst isNonEmpty = (obj: any): boolean => obj && Object.keys(obj).length > 0;\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CmatBreadcrumbService implements OnDestroy {\r\n private _baseHref = '/';\r\n\r\n private _unsubscribeAll: Subject<void> = new Subject<void>();\r\n /**\r\n * dynamicBreadcrumbStore holds information about dynamically updated breadcrumbs.\r\n * Breadcrumbs can be set from anywhere (component, service) in the app.\r\n * On every breadcrumb update check this store and use the info if available.\r\n */\r\n private _dynamicBreadcrumbStore: CmatBreadcrumbDefinition[] = [];\r\n\r\n /**\r\n * breadcrumbList for the current route\r\n * When breadcrumb info is changed dynamically, check if the currentBreadcrumbs is effected\r\n * If effected, update the change and emit a new stream\r\n */\r\n private _currentBreadcrumbs: CmatBreadcrumbDefinition[] = [];\r\n private _previousBreadcrumbs: CmatBreadcrumbDefinition[] = [];\r\n\r\n /**\r\n * Breadcrumbs observable to be subscribed by BreadcrumbComponent\r\n * Emits on every route change OR dynamic update of breadcrumb\r\n */\r\n private _breadcrumbs = new BehaviorSubject<CmatBreadcrumbDefinition[]>([]);\r\n\r\n constructor(private _activatedRoute: ActivatedRoute, private _router: Router) {\r\n this._detectRouteChanges();\r\n }\r\n\r\n get breadcrumbs$(): Observable<CmatBreadcrumbDefinition[]> {\r\n return this._breadcrumbs.asObservable();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n /**\r\n * Update breadcrumb dynamically\r\n *\r\n * key can be a path | alias\r\n *\r\n * 1) Using complete route path. route can be passed the same way you define angular routes\r\n * - path can be passed as 'exact path(routeLink)' or 'path with params(routeRegex)'\r\n * - update label Ex: set('/mentor', 'Mentor'), set('/mentor/:id', 'Mentor Details')\r\n * - change visibility Ex: set('/mentor/:id/edit', { skip: true })\r\n * ------------------------------------------ OR ------------------------------------------\r\n * 2) Using route alias (prefixed with '@'). alias should be unique for a route\r\n * - update label Ex: set('@mentor', 'Enabler')\r\n * - change visibility Ex: set('@mentorEdit', { skip: true })\r\n *\r\n *\r\n * value can be string | BreadcrumbObject | BreadcrumbFunction\r\n */\r\n set(key: string, breadcrumb: string | CmatBreadcrumbObject): void {\r\n const breadcrumbObject = this._extractObject(breadcrumb);\r\n let updateArgs: [StoreMatcherKey, CmatBreadcrumbDefinition];\r\n\r\n if (key.startsWith(ALIAS_PREFIX)) {\r\n updateArgs = ['alias', { ...breadcrumbObject, alias: key.slice(1) }];\r\n } else if (key.includes(PATH_PARAM.PREFIX)) {\r\n updateArgs = [\r\n 'routeRegex',\r\n { ...breadcrumbObject, routeRegex: this._buildRegex(key) },\r\n ];\r\n } else {\r\n updateArgs = [\r\n 'routeLink',\r\n { ...breadcrumbObject, routeLink: this._ensureLeadingSlash(key) },\r\n ];\r\n }\r\n\r\n // For this route if previously a breadcrumb is not defined that sets isAutoGeneratedLabel: true\r\n // change it to false since this is user supplied value\r\n updateArgs[1].isAutoGeneratedLabel = false;\r\n\r\n this._updateStore(...updateArgs);\r\n this._updateCurrentBreadcrumbs(...updateArgs);\r\n }\r\n\r\n\r\n\r\n /**\r\n * Whenever route changes build breadcrumb list again\r\n */\r\n private _detectRouteChanges(): void {\r\n // Special case where breadcrumb service & component instantiates after a route is navigated.\r\n // Ex: put breadcrumbs within *ngIf and this.router.events would be empty\r\n // This check is also required where { initialNavigation: 'enabledBlocking' } is applied to routes\r\n this._setupBreadcrumbs(this._activatedRoute.snapshot);\r\n\r\n this._router.events\r\n .pipe(\r\n takeUntil(this._unsubscribeAll),\r\n filter((event): event is GuardsCheckEnd => event instanceof GuardsCheckEnd))\r\n .subscribe((event) => {\r\n // activatedRoute doesn't carry data when shouldReuseRoute returns false\r\n // use the event data with GuardsCheckEnd as workaround\r\n // Check for shouldActivate in case where the authGuard returns false the breadcrumbs shouldn't be changed\r\n if (event.shouldActivate) {\r\n this._setupBreadcrumbs(event.state.root);\r\n }\r\n });\r\n }\r\n\r\n private _setupBreadcrumbs(activatedRouteSnapshot: ActivatedRouteSnapshot): void {\r\n this._previousBreadcrumbs = this._currentBreadcrumbs;\r\n // breadcrumb label for base OR root path. Usually, this can be set as 'Home'\r\n const rootBreadcrumb = this._getRootBreadcrumb();\r\n this._currentBreadcrumbs = rootBreadcrumb ? [rootBreadcrumb] : [];\r\n this._prepareBreadcrumbList(activatedRouteSnapshot, this._baseHref);\r\n }\r\n\r\n private _getRootBreadcrumb(): CmatBreadcrumb | void {\r\n const rootConfig = this._router.config.find(config => config.path === '');\r\n const rootBreadcrumb = this._extractObject(rootConfig?.data?.['breadcrumb']);\r\n const storeItem = this._getFromStore('/', rootBreadcrumb.alias);\r\n\r\n if (isNonEmpty(rootBreadcrumb) || isNonEmpty(storeItem)) {\r\n return {\r\n ...storeItem,\r\n ...rootBreadcrumb,\r\n routeLink: this._baseHref,\r\n ...this._getQueryParamsFromPreviousList('/'),\r\n };\r\n }\r\n }\r\n\r\n private _prepareBreadcrumbItem(\r\n activatedRouteSnapshot: ActivatedRouteSnapshot,\r\n routeLinkPrefix: string\r\n ): CmatBreadcrumbDefinition {\r\n const { path, breadcrumb } = this._parseRouteData(\r\n activatedRouteSnapshot.routeConfig\r\n );\r\n const resolvedSegment = this._resolvePathSegment(path, activatedRouteSnapshot);\r\n const routeLink = `${routeLinkPrefix}${resolvedSegment}`;\r\n const storeItem = this._getFromStore(routeLink, breadcrumb.alias);\r\n\r\n const label = this._extractLabel(\r\n storeItem?.label || breadcrumb?.label,\r\n resolvedSegment\r\n );\r\n let isAutoGeneratedLabel = false;\r\n let autoGeneratedLabel = '';\r\n if (!label) {\r\n isAutoGeneratedLabel = true;\r\n autoGeneratedLabel = resolvedSegment;\r\n }\r\n\r\n return {\r\n ...storeItem,\r\n ...breadcrumb,\r\n label: isAutoGeneratedLabel ? autoGeneratedLabel : label,\r\n routeLink,\r\n isAutoGeneratedLabel,\r\n ...this._getQueryParamsFromPreviousList(routeLink),\r\n };\r\n }\r\n\r\n private _prepareBreadcrumbList(\r\n activatedRouteSnapshot: ActivatedRouteSnapshot,\r\n routeLinkPrefix: string\r\n ): CmatBreadcrumb[] | void {\r\n if (activatedRouteSnapshot.routeConfig && activatedRouteSnapshot.routeConfig.path) {\r\n const breadcrumbItem = this._prepareBreadcrumbItem(\r\n activatedRouteSnapshot,\r\n routeLinkPrefix\r\n );\r\n this._currentBreadcrumbs.push(breadcrumbItem);\r\n\r\n if (activatedRouteSnapshot.firstChild) {\r\n return this._prepareBreadcrumbList(\r\n activatedRouteSnapshot.firstChild,\r\n breadcrumbItem.routeLink + '/'\r\n );\r\n }\r\n } else if (activatedRouteSnapshot.firstChild) {\r\n return this._prepareBreadcrumbList(\r\n activatedRouteSnapshot.firstChild,\r\n routeLinkPrefix\r\n );\r\n }\r\n const lastCrumb = this._currentBreadcrumbs[\r\n this._currentBreadcrumbs.length - 1\r\n ];\r\n this._setQueryParamsForActiveBreadcrumb(lastCrumb, activatedRouteSnapshot);\r\n\r\n // remove breadcrumb items that needs to be hidden\r\n const breadcrumbsToShow = this._currentBreadcrumbs.filter(\r\n item => !item.skip\r\n );\r\n\r\n this._breadcrumbs.next(breadcrumbsToShow);\r\n\r\n return void 0;\r\n }\r\n\r\n private _getFromStore(routeLink: string, alias?: string): CmatBreadcrumbDefinition | void {\r\n return this._dynamicBreadcrumbStore.find(item => (\r\n (alias && alias === item.alias) ||\r\n (routeLink && routeLink === item.routeLink) ||\r\n this._matchRegex(routeLink, item.routeRegex)\r\n ));\r\n }\r\n\r\n /**\r\n * use exact match instead of regexp.test\r\n * for /mentor/[^/]+ we should match '/mentor/12' but not '/mentor/12/abc'\r\n */\r\n private _matchRegex(routeLink?: string, routeRegex?: string): boolean | null {\r\n if (routeRegex && routeLink) {\r\n const match = routeLink.match(new RegExp(routeRegex));\r\n return match && match[0] === routeLink;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * if the path segment has route params, read the param value from url\r\n * for each segment of route this gets called\r\n *\r\n * for mentor/:id/view - it gets called with mentor, :id, view 3 times\r\n */\r\n private _resolvePathSegment(segment: string, activatedRouteSnapshot: ActivatedRouteSnapshot): string {\r\n //quirk -segment can be defined as view/:id in route config in which case you need to make it view/<resolved-param>\r\n if (segment.includes(PATH_PARAM.PREFIX)) {\r\n Object.entries(activatedRouteSnapshot.params).forEach(([key, value]) => {\r\n segment = segment.replace(`:${key}`, `${value}`);\r\n });\r\n }\r\n return segment;\r\n }\r\n\r\n /**\r\n * queryParams & fragments for previous breadcrumb path are copied over to new list\r\n */\r\n private _getQueryParamsFromPreviousList(routeLink: string): CmatBreadcrumb {\r\n const { queryParams, fragment } =\r\n this._previousBreadcrumbs.find(item => item.routeLink === routeLink) ||\r\n {};\r\n return { queryParams, fragment };\r\n }\r\n\r\n /**\r\n * set current activated route query params to the last breadcrumb item\r\n */\r\n private _setQueryParamsForActiveBreadcrumb(\r\n lastItem: CmatBreadcrumb,\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): void {\r\n if (lastItem) {\r\n const { queryParams, fragment } = activatedRouteSnapshot;\r\n lastItem.queryParams = queryParams ? { ...queryParams } : undefined;\r\n lastItem.fragment = fragment === null ? void 0 : fragment;\r\n }\r\n }\r\n\r\n /**\r\n * For a specific route, breadcrumb can be defined either on parent OR it's child(which has empty path)\r\n * When both are defined, child takes precedence\r\n *\r\n * Ex: Below we are setting breadcrumb on both parent and child.\r\n * So, child takes precedence and \"Defined On Child\" is displayed for the route 'home'\r\n * { path: 'home', loadChildren: './home/home.module#HomeModule' , data: {breadcrumb: \"Defined On Module\"}}\r\n * AND\r\n * children: [\r\n * { path: '', component: ShowUserComponent, data: {breadcrumb: \"Defined On Child\" }\r\n * ]\r\n */\r\n private _parseRouteData(routeConfig: Route | null): any {\r\n if (isNull(routeConfig))\r\n return void 0;\r\n\r\n const { path, data } = routeConfig;\r\n const breadcrumb = this._mergeWithBaseChildData(\r\n routeConfig,\r\n data?.['breadcrumb']\r\n );\r\n\r\n return { path, breadcrumb };\r\n }\r\n\r\n /**\r\n * get empty children of a module or Component. Empty child is the one with path: ''\r\n * When parent and it's children (that has empty route path) define data merge them both with child taking precedence\r\n */\r\n private _mergeWithBaseChildData(\r\n routeConfig: any,\r\n config: CmatBreadcrumbConfig\r\n ): CmatBreadcrumbObject {\r\n if (!routeConfig) {\r\n return this._extractObject(config);\r\n }\r\n\r\n let baseChild: Route | void = void 0;\r\n if (routeConfig.loadChildren) {\r\n // To handle a module with empty child route\r\n baseChild = routeConfig._loadedRoutes.find((route: { path: string; }) => route.path === '');\r\n } else if (routeConfig.children) {\r\n // To handle a component with empty child route\r\n baseChild = routeConfig.children.find((route: { path: string; }) => route.path === '');\r\n }\r\n\r\n const childConfig = baseChild?.data?.['breadcrumb'];\r\n return childConfig\r\n ? this._mergeWithBaseChildData(baseChild, {\r\n ...this._extractObject(config),\r\n ...this._extractObject(childConfig),\r\n })\r\n : this._extractObject(config);\r\n }\r\n\r\n /**\r\n * Update the store to reuse for dynamic declarations\r\n * If the store already has this route definition update it, else add\r\n */\r\n private _updateStore(key: string, breadcrumb: CmatBreadcrumbDefinition): void {\r\n const storeItemIndex = this._dynamicBreadcrumbStore.findIndex(item => (breadcrumb as any)[key] === (item as any)[key]);\r\n if (storeItemIndex > -1) {\r\n this._dynamicBreadcrumbStore[storeItemIndex] = {\r\n ...this._dynamicBreadcrumbStore[storeItemIndex],\r\n ...breadcrumb,\r\n };\r\n } else {\r\n this._dynamicBreadcrumbStore.push({ ...breadcrumb });\r\n }\r\n }\r\n\r\n /**\r\n * If breadcrumb is present in current breadcrumbs update it and emit new stream\r\n */\r\n private _updateCurrentBreadcrumbs(\r\n key: string,\r\n breadcrumb: CmatBreadcrumbDefinition\r\n ): void {\r\n const itemIndex = this._currentBreadcrumbs.findIndex(item => key === 'routeRegex'\r\n ? this._matchRegex(item.routeLink, breadcrumb[key])\r\n : (breadcrumb as any)[key] === (item as any)[key]);\r\n if (itemIndex > -1) {\r\n this._currentBreadcrumbs[itemIndex] = {\r\n ...this._currentBreadcrumbs[itemIndex],\r\n ...breadcrumb,\r\n };\r\n const breadcrumbsToShow = this._currentBreadcrumbs.filter(\r\n item => !item.skip\r\n );\r\n this._breadcrumbs.next([...breadcrumbsToShow]);\r\n }\r\n }\r\n\r\n /**\r\n * For a route with path param, we create regex dynamically from angular route syntax\r\n * '/mentor/:id' becomes '/mentor/[^/]',\r\n * breadcrumbService.set('/mentor/:id', 'Uday') should update 'Uday' as label for '/mentor/2' OR 'mentor/ada'\r\n */\r\n private _buildRegex(path: string): string {\r\n return this._ensureLeadingSlash(path).replace(\r\n new RegExp(PATH_PARAM.REGEX_IDENTIFIER, 'g'),\r\n PATH_PARAM.REGEX_REPLACER\r\n );\r\n }\r\n\r\n private _ensureLeadingSlash(path: string): string {\r\n return path.startsWith('/') ? path : `/${path}`;\r\n }\r\n\r\n /**\r\n * In App's RouteConfig, breadcrumb can be defined as a string OR a function OR an object\r\n *\r\n * string: simple static breadcrumb label for a path\r\n * function: callback that gets invoked with resolved path param\r\n * object: additional data defined along with breadcrumb label that gets passed to *cmatBreadcrumbItem directive\r\n */\r\n private _extractLabel(config: CmatBreadcrumbConfig, resolvedParam?: string): string | void {\r\n const label = typeof config === 'object' ? config.label : config;\r\n if (typeof label === 'function') {\r\n return label(resolvedParam);\r\n }\r\n return label;\r\n }\r\n\r\n private _extractObject(config: CmatBreadcrumbConfig): CmatBreadcrumbObject {\r\n // don't include {label} if config is undefined. This is important since we merge the configs\r\n if (\r\n config &&\r\n (typeof config === 'string' || typeof config === 'function')\r\n ) {\r\n return { label: config };\r\n }\r\n return (config as CmatBreadcrumbObject) || {};\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, OnInit, TemplateRef, ViewEncapsulation, } from '@angular/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { CmatBreadcrumbItemDirective } from './breadcrumb-item.directive';\r\nimport { CmatBreadcrumbDefinition, CmatBreadcrumbService } from './breadcrumb.service';\r\nimport { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cmat-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'cmatBreadcrumb',\r\n standalone: true,\r\n imports: [NgIf, NgFor, NgClass, AsyncPipe, RouterLink]\r\n})\r\nexport class CmatBreadcrumbComponent implements OnInit {\r\n /**\r\n * Breadcrumb item can be customized with this template\r\n * Template context is provided label, additional info, first and last indexes\r\n * Use cases:\r\n * 1) Add an icon along with label\r\n * 2) i18n. {{breadcrumb | translate}} or {{breadcrumb | transloco}}\r\n * 3) Change text case {{breadcrumb | titlecase}}\r\n */\r\n @ContentChild(CmatBreadcrumbItemDirective, { static: false, read: TemplateRef })\r\n itemTemplate: any;\r\n\r\n /**\r\n * If true, breadcrumb is auto generated even without any mapping label\r\n * Default label is same as route segment\r\n */\r\n @Input() autoGenerate = true;\r\n\r\n /**\r\n * By default query params will be preserved with breadcrumbs\r\n */\r\n @Input() preserveQueryParams = true;\r\n\r\n /**\r\n * By default query fragments will be preserved with breadcrumbs\r\n */\r\n @Input() preserveFragment = true;\r\n\r\n /**\r\n * custom class provided by consumer to increase specificity\r\n * This will benefit to override styles that are conflicting\r\n */\r\n @Input() class = '';\r\n\r\n /**\r\n * anchorTarget = \"_blank\" makes the breadcrumb link open in a new tab\r\n */\r\n @Input() anchorTarget: '_blank' | void;\r\n\r\n subscription: Subscription;\r\n breadcrumbs$: Observable<CmatBreadcrumbDefinition[]>;\r\n separatorTemplate: TemplateRef<void> | void;\r\n\r\n private _separator: string | void = '/';\r\n\r\n constructor(\r\n private _breadcrumbService: CmatBreadcrumbService) { }\r\n\r\n get separator(): string | void {\r\n return this._separator;\r\n }\r\n /**\r\n * separator between breadcrumbs, defaults to '/'.\r\n * User can customize separator either by passing a String or Template\r\n *\r\n * String --> Ex: <cmat-breadcrumb separator=\"-\"> </cmat-breadcrumb>\r\n *\r\n * Template --> Ex: <cmat-breadcrumb [separator]=\"separatorTemplate\"> </cmat-breadcrumb>\r\n * <ng-template #separatorTemplate><mat-icon>arrow_right</mat-icon></ng-template>\r\n */\r\n @Input()\r\n set separator(value: string | TemplateRef<void>) {\r\n if (value instanceof TemplateRef) {\r\n this.separatorTemplate = value;\r\n this._separator = undefined;\r\n } else {\r\n this.separatorTemplate = undefined;\r\n this._separator = value || '/';\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.breadcrumbs$ = this._breadcrumbService.breadcrumbs$.pipe(\r\n map((breadcrumbs: CmatBreadcrumbDefinition[]) => breadcrumbs\r\n .filter((breadcrumb: CmatBreadcrumbDefinition) => {\r\n // Usually, breadcrumb list can contain a combination of auto generated and user specified labels\r\n // this filters autogenerated labels in case of \"[autoGenerate]: false\"\r\n if (this.autoGenerate) {\r\n return true;\r\n }\r\n return !breadcrumb.isAutoGeneratedLabel;\r\n })\r\n .map((breadcrumb: CmatBreadcrumbDefinition) => {\r\n // Do not mutate breadcrumb as its source of truth.\r\n // There can be scenarios where we can have multiple cmat-breadcrumb instances in page\r\n const { routeInterceptor, routeLink } = breadcrumb;\r\n return {\r\n ...breadcrumb,\r\n routeLink: routeInterceptor?.(breadcrumb,routeLink) || routeLink,\r\n };\r\n }))\r\n );\r\n }\r\n}\r\n","<nav aria-label=\"breadcrumb\" class=\"cmat-breadcrumb-root m-0\" [ngClass]=\"class\">\r\n <ol class=\"flex items-center flex-wrap m-0 p-0\">\r\n <ng-container *ngFor=\"\r\n let breadcrumb of breadcrumbs$ | async;\r\n last as isLast;\r\n first as isFirst;\r\n index as index;\r\n count as count\r\n \">\r\n <li class=\"list-none\">\r\n <a *ngIf=\"!isLast\" class=\"cmat-breadcrumb-link\"\r\n [ngClass]=\"{ 'pointer-events-none cursor-not-allowed': breadcrumb.disable }\"\r\n [attr.aria-disabled]=\"breadcrumb.disable\" [attr.tabIndex]=\"breadcrumb.disable ? -1 : 0\"\r\n rel=\"noopener noreferrer\" [routerLink]=\"\r\n breadcrumb.routeInterceptor\r\n ? breadcrumb.routeInterceptor( breadcrumb,breadcrumb.routeLink)\r\n : breadcrumb.routeLink\" [queryParams]=\"preserveQueryParams ? breadcrumb.queryParams : undefined\"\r\n [fragment]=\"preserveFragment ? breadcrumb.fragment : undefined\"\r\n [target]=\"anchorTarget ? anchorTarget : '_self'\">\r\n <ng-container *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: {\r\n $implicit: breadcrumb.label,\r\n info: breadcrumb.info,\r\n last: isLast,\r\n first: isFirst,\r\n index: index,\r\n count: count\r\n }\r\n \"></ng-container>\r\n <ng-container *ngIf=\"!itemTemplate\">{{\r\n breadcrumb.label\r\n }}</ng-container>\r\n </a>\r\n\r\n <span *ngIf=\"isLast\" class=\"cmat-breadcrumb-trail flex items-center\">\r\n <ng-container *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: {\r\n $implicit: breadcrumb.label,\r\n info: breadcrumb.info,\r\n last: isLast,\r\n first: isFirst,\r\n index: index,\r\n count: count\r\n }\r\n \"></ng-container>\r\n <ng-container *ngIf=\"!itemTemplate\">{{\r\n breadcrumb.label\r\n }}</ng-container>\r\n </span>\r\n </li>\r\n\r\n <li *ngIf=\"!isLast\" class=\"flex select-none mx-4\" aria-hidden=\"true\" role=\"separator\">\r\n <ng-container *ngTemplateOutlet=\"separatorTemplate\"></ng-container>\r\n <ng-container *ngIf=\"!separatorTemplate\">{{ separator }}</ng-container>\r\n </li>\r\n </ng-container>\r\n </ol>\r\n</nav>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CmatBreadcrumbService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cmat-components-breadcrumb.mjs","sources":["../../../projects/cmat/components/breadcrumb/breadcrumb-item.directive.ts","../../../projects/cmat/components/breadcrumb/breadcrumb.service.ts","../../../projects/cmat/components/breadcrumb/breadcrumb.component.ts","../../../projects/cmat/components/breadcrumb/breadcrumb.component.html","../../../projects/cmat/components/breadcrumb/cmat-components-breadcrumb.ts"],"sourcesContent":["import { Directive } from '@angular/core';\r\n\r\n/**\r\n * This directive is used to customize the breadcrumb label behavior\r\n * *cmatBreadcrumbItem directive can be used in the child element of cmat-breadcrumb\r\n * Usage: refer to the demo - app.component.html\r\n */\r\n@Directive({\r\n selector: '[cmatBreadcrumbItem]',\r\n standalone: true\r\n})\r\nexport class CmatBreadcrumbItemDirective {\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { Injectable, OnDestroy } from '@angular/core';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, GuardsCheckEnd, Route, Router } from '@angular/router';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\nimport { CmatBreadcrumb } from './types/breadcrumb';\r\nimport { CmatBreadcrumbFunction, CmatBreadcrumbObject, } from './types/breadcrumb.config';\r\nimport { isNull } from 'lodash-es';\r\n\r\ntype CmatBreadcrumbConfig = CmatBreadcrumbObject | CmatBreadcrumbFunction | string;\r\ntype StoreMatcherKey = 'routeLink' | 'routeRegex' | 'alias';\r\nexport type CmatBreadcrumbDefinition = CmatBreadcrumb & CmatBreadcrumbObject;\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nconst PATH_PARAM = { \r\n PREFIX: ':',\r\n REGEX_IDENTIFIER: '/:[^/]+',\r\n REGEX_REPLACER: '/[^/]+',\r\n};\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nconst ALIAS_PREFIX = '@';\r\nconst isNonEmpty = (obj: any): boolean => obj && Object.keys(obj).length > 0;\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CmatBreadcrumbService implements OnDestroy {\r\n private _baseHref = '/';\r\n\r\n private _unsubscribeAll: Subject<void> = new Subject<void>();\r\n /**\r\n * dynamicBreadcrumbStore holds information about dynamically updated breadcrumbs.\r\n * Breadcrumbs can be set from anywhere (component, service) in the app.\r\n * On every breadcrumb update check this store and use the info if available.\r\n */\r\n private _dynamicBreadcrumbStore: CmatBreadcrumbDefinition[] = [];\r\n\r\n /**\r\n * breadcrumbList for the current route\r\n * When breadcrumb info is changed dynamically, check if the currentBreadcrumbs is effected\r\n * If effected, update the change and emit a new stream\r\n */\r\n private _currentBreadcrumbs: CmatBreadcrumbDefinition[] = [];\r\n private _previousBreadcrumbs: CmatBreadcrumbDefinition[] = [];\r\n\r\n /**\r\n * Breadcrumbs observable to be subscribed by BreadcrumbComponent\r\n * Emits on every route change OR dynamic update of breadcrumb\r\n */\r\n private _breadcrumbs = new BehaviorSubject<CmatBreadcrumbDefinition[]>([]);\r\n\r\n constructor(private _activatedRoute: ActivatedRoute, private _router: Router) {\r\n this._detectRouteChanges();\r\n }\r\n\r\n get breadcrumbs$(): Observable<CmatBreadcrumbDefinition[]> {\r\n return this._breadcrumbs.asObservable();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unsubscribeAll.next(void 0);\r\n this._unsubscribeAll.complete();\r\n }\r\n\r\n /**\r\n * Update breadcrumb dynamically\r\n *\r\n * key can be a path | alias\r\n *\r\n * 1) Using complete route path. route can be passed the same way you define angular routes\r\n * - path can be passed as 'exact path(routeLink)' or 'path with params(routeRegex)'\r\n * - update label Ex: set('/mentor', 'Mentor'), set('/mentor/:id', 'Mentor Details')\r\n * - change visibility Ex: set('/mentor/:id/edit', { skip: true })\r\n * ------------------------------------------ OR ------------------------------------------\r\n * 2) Using route alias (prefixed with '@'). alias should be unique for a route\r\n * - update label Ex: set('@mentor', 'Enabler')\r\n * - change visibility Ex: set('@mentorEdit', { skip: true })\r\n *\r\n *\r\n * value can be string | BreadcrumbObject | BreadcrumbFunction\r\n */\r\n set(key: string, breadcrumb: string | CmatBreadcrumbObject): void {\r\n const breadcrumbObject = this._extractObject(breadcrumb);\r\n let updateArgs: [StoreMatcherKey, CmatBreadcrumbDefinition];\r\n\r\n if (key.startsWith(ALIAS_PREFIX)) {\r\n updateArgs = ['alias', { ...breadcrumbObject, alias: key.slice(1) }];\r\n } else if (key.includes(PATH_PARAM.PREFIX)) {\r\n updateArgs = [\r\n 'routeRegex',\r\n { ...breadcrumbObject, routeRegex: this._buildRegex(key) },\r\n ];\r\n } else {\r\n updateArgs = [\r\n 'routeLink',\r\n { ...breadcrumbObject, routeLink: this._ensureLeadingSlash(key) },\r\n ];\r\n }\r\n\r\n // For this route if previously a breadcrumb is not defined that sets isAutoGeneratedLabel: true\r\n // change it to false since this is user supplied value\r\n updateArgs[1].isAutoGeneratedLabel = false;\r\n\r\n this._updateStore(...updateArgs);\r\n this._updateCurrentBreadcrumbs(...updateArgs);\r\n }\r\n\r\n\r\n\r\n /**\r\n * Whenever route changes build breadcrumb list again\r\n */\r\n private _detectRouteChanges(): void {\r\n // Special case where breadcrumb service & component instantiates after a route is navigated.\r\n // Ex: put breadcrumbs within *ngIf and this.router.events would be empty\r\n // This check is also required where { initialNavigation: 'enabledBlocking' } is applied to routes\r\n this._setupBreadcrumbs(this._activatedRoute.snapshot);\r\n\r\n this._router.events\r\n .pipe(\r\n takeUntil(this._unsubscribeAll),\r\n filter((event): event is GuardsCheckEnd => event instanceof GuardsCheckEnd))\r\n .subscribe((event) => {\r\n // activatedRoute doesn't carry data when shouldReuseRoute returns false\r\n // use the event data with GuardsCheckEnd as workaround\r\n // Check for shouldActivate in case where the authGuard returns false the breadcrumbs shouldn't be changed\r\n if (event.shouldActivate) {\r\n this._setupBreadcrumbs(event.state.root);\r\n }\r\n });\r\n }\r\n\r\n private _setupBreadcrumbs(activatedRouteSnapshot: ActivatedRouteSnapshot): void {\r\n this._previousBreadcrumbs = this._currentBreadcrumbs;\r\n // breadcrumb label for base OR root path. Usually, this can be set as 'Home'\r\n const rootBreadcrumb = this._getRootBreadcrumb();\r\n this._currentBreadcrumbs = rootBreadcrumb ? [rootBreadcrumb] : [];\r\n this._prepareBreadcrumbList(activatedRouteSnapshot, this._baseHref);\r\n }\r\n\r\n private _getRootBreadcrumb(): CmatBreadcrumb | void {\r\n const rootConfig = this._router.config.find(config => config.path === '');\r\n const rootBreadcrumb = this._extractObject(rootConfig?.data?.['breadcrumb']);\r\n const storeItem = this._getFromStore('/', rootBreadcrumb.alias);\r\n\r\n if (isNonEmpty(rootBreadcrumb) || isNonEmpty(storeItem)) {\r\n return {\r\n ...storeItem,\r\n ...rootBreadcrumb,\r\n routeLink: this._baseHref,\r\n ...this._getQueryParamsFromPreviousList('/'),\r\n };\r\n }\r\n }\r\n\r\n private _prepareBreadcrumbItem(\r\n activatedRouteSnapshot: ActivatedRouteSnapshot,\r\n routeLinkPrefix: string\r\n ): CmatBreadcrumbDefinition {\r\n const { path, breadcrumb } = this._parseRouteData(\r\n activatedRouteSnapshot.routeConfig\r\n );\r\n\r\n const resolvedSegment = this._resolvePathSegment(path, activatedRouteSnapshot);\r\n const routeLink = `${routeLinkPrefix}${resolvedSegment}`;\r\n const storeItem = this._getFromStore(routeLink, breadcrumb.alias);\r\n\r\n const label = this._extractLabel(\r\n storeItem?.label || breadcrumb?.label,\r\n resolvedSegment\r\n );\r\n let isAutoGeneratedLabel = false;\r\n let autoGeneratedLabel = '';\r\n if (!label) {\r\n isAutoGeneratedLabel = true;\r\n autoGeneratedLabel = resolvedSegment;\r\n }\r\n\r\n return {\r\n ...storeItem,\r\n ...breadcrumb,\r\n label: isAutoGeneratedLabel ? autoGeneratedLabel : label,\r\n routeLink,\r\n isAutoGeneratedLabel,\r\n ...this._getQueryParamsFromPreviousList(routeLink),\r\n };\r\n }\r\n\r\n private _prepareBreadcrumbList(\r\n activatedRouteSnapshot: ActivatedRouteSnapshot,\r\n routeLinkPrefix: string\r\n ): CmatBreadcrumb[] | void {\r\n if (activatedRouteSnapshot.routeConfig && activatedRouteSnapshot.routeConfig.path) {\r\n const breadcrumbItem = this._prepareBreadcrumbItem(\r\n activatedRouteSnapshot,\r\n routeLinkPrefix\r\n );\r\n this._currentBreadcrumbs.push(breadcrumbItem);\r\n\r\n if (activatedRouteSnapshot.firstChild) {\r\n return this._prepareBreadcrumbList(\r\n activatedRouteSnapshot.firstChild,\r\n breadcrumbItem.routeLink + '/'\r\n );\r\n }\r\n } else if (activatedRouteSnapshot.firstChild) {\r\n return this._prepareBreadcrumbList(\r\n activatedRouteSnapshot.firstChild,\r\n routeLinkPrefix\r\n );\r\n }\r\n const lastCrumb = this._currentBreadcrumbs[\r\n this._currentBreadcrumbs.length - 1\r\n ];\r\n this._setQueryParamsForActiveBreadcrumb(lastCrumb, activatedRouteSnapshot);\r\n\r\n // remove breadcrumb items that needs to be hidden\r\n const breadcrumbsToShow = this._currentBreadcrumbs.filter(\r\n item => !item.skip\r\n );\r\n this._breadcrumbs.next(breadcrumbsToShow);\r\n\r\n return void 0;\r\n }\r\n\r\n private _getFromStore(routeLink: string, alias?: string): CmatBreadcrumbDefinition | void {\r\n return this._dynamicBreadcrumbStore.find(item => (\r\n (alias && alias === item.alias) ||\r\n (routeLink && routeLink === item.routeLink) ||\r\n this._matchRegex(routeLink, item.routeRegex)\r\n ));\r\n }\r\n\r\n /**\r\n * use exact match instead of regexp.test\r\n * for /mentor/[^/]+ we should match '/mentor/12' but not '/mentor/12/abc'\r\n */\r\n private _matchRegex(routeLink?: string, routeRegex?: string): boolean | null {\r\n if (routeRegex && routeLink) {\r\n const match = routeLink.match(new RegExp(routeRegex));\r\n return match && match[0] === routeLink;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * if the path segment has route params, read the param value from url\r\n * for each segment of route this gets called\r\n *\r\n * for mentor/:id/view - it gets called with mentor, :id, view 3 times\r\n */\r\n private _resolvePathSegment(segment: string, activatedRouteSnapshot: ActivatedRouteSnapshot): string {\r\n //quirk -segment can be defined as view/:id in route config in which case you need to make it view/<resolved-param>\r\n if (segment.includes(PATH_PARAM.PREFIX)) {\r\n Object.entries(activatedRouteSnapshot.params).forEach(([key, value]) => {\r\n segment = segment.replace(`:${key}`, `${value}`);\r\n });\r\n }\r\n return segment;\r\n }\r\n\r\n /**\r\n * queryParams & fragments for previous breadcrumb path are copied over to new list\r\n */\r\n private _getQueryParamsFromPreviousList(routeLink: string): CmatBreadcrumb {\r\n const { queryParams, fragment } =\r\n this._previousBreadcrumbs.find(item => item.routeLink === routeLink) ||\r\n {};\r\n return { queryParams, fragment };\r\n }\r\n\r\n /**\r\n * set current activated route query params to the last breadcrumb item\r\n */\r\n private _setQueryParamsForActiveBreadcrumb(\r\n lastItem: CmatBreadcrumb,\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): void {\r\n if (lastItem) {\r\n const { queryParams, fragment } = activatedRouteSnapshot;\r\n lastItem.queryParams = queryParams ? { ...queryParams } : undefined;\r\n lastItem.fragment = fragment === null ? void 0 : fragment;\r\n }\r\n }\r\n\r\n /**\r\n * For a specific route, breadcrumb can be defined either on parent OR it's child(which has empty path)\r\n * When both are defined, child takes precedence\r\n *\r\n * Ex: Below we are setting breadcrumb on both parent and child.\r\n * So, child takes precedence and \"Defined On Child\" is displayed for the route 'home'\r\n * { path: 'home', loadChildren: './home/home.module#HomeModule' , data: {breadcrumb: \"Defined On Module\"}}\r\n * AND\r\n * children: [\r\n * { path: '', component: ShowUserComponent, data: {breadcrumb: \"Defined On Child\" }\r\n * ]\r\n */\r\n private _parseRouteData(routeConfig: Route | null): any {\r\n if (isNull(routeConfig))\r\n return void 0;\r\n\r\n const { path, data } = routeConfig;\r\n const breadcrumb = this._mergeWithBaseChildData(\r\n routeConfig,\r\n data?.['breadcrumb']\r\n );\r\n\r\n return { path, breadcrumb };\r\n }\r\n\r\n /**\r\n * get empty children of a module or Component. Empty child is the one with path: ''\r\n * When parent and it's children (that has empty route path) define data merge them both with child taking precedence\r\n */\r\n private _mergeWithBaseChildData(\r\n routeConfig: any,\r\n config: CmatBreadcrumbConfig\r\n ): CmatBreadcrumbObject {\r\n if (!routeConfig) {\r\n return this._extractObject(config);\r\n }\r\n\r\n let baseChild: Route | void = void 0;\r\n if (routeConfig.loadChildren) {\r\n // To handle a module with empty child route\r\n baseChild = routeConfig._loadedRoutes.find((route: { path: string; }) => route.path === '');\r\n } else if (routeConfig.children) {\r\n // To handle a component with empty child route\r\n baseChild = routeConfig.children.find((route: { path: string; }) => route.path === '');\r\n }\r\n\r\n const childConfig = baseChild?.data?.['breadcrumb'];\r\n return childConfig\r\n ? this._mergeWithBaseChildData(baseChild, {\r\n ...this._extractObject(config),\r\n ...this._extractObject(childConfig),\r\n })\r\n : this._extractObject(config);\r\n }\r\n\r\n /**\r\n * Update the store to reuse for dynamic declarations\r\n * If the store already has this route definition update it, else add\r\n */\r\n private _updateStore(key: string, breadcrumb: CmatBreadcrumbDefinition): void {\r\n const storeItemIndex = this._dynamicBreadcrumbStore.findIndex(item => (breadcrumb as any)[key] === (item as any)[key]);\r\n if (storeItemIndex > -1) {\r\n this._dynamicBreadcrumbStore[storeItemIndex] = {\r\n ...this._dynamicBreadcrumbStore[storeItemIndex],\r\n ...breadcrumb,\r\n };\r\n } else {\r\n this._dynamicBreadcrumbStore.push({ ...breadcrumb });\r\n }\r\n }\r\n\r\n /**\r\n * If breadcrumb is present in current breadcrumbs update it and emit new stream\r\n */\r\n private _updateCurrentBreadcrumbs(\r\n key: string,\r\n breadcrumb: CmatBreadcrumbDefinition\r\n ): void {\r\n const itemIndex = this._currentBreadcrumbs.findIndex(item => key === 'routeRegex'\r\n ? this._matchRegex(item.routeLink, breadcrumb[key])\r\n : (breadcrumb as any)[key] === (item as any)[key]);\r\n if (itemIndex > -1) {\r\n this._currentBreadcrumbs[itemIndex] = {\r\n ...this._currentBreadcrumbs[itemIndex],\r\n ...breadcrumb,\r\n };\r\n const breadcrumbsToShow = this._currentBreadcrumbs.filter(\r\n item => !item.skip\r\n );\r\n this._breadcrumbs.next([...breadcrumbsToShow]);\r\n }\r\n }\r\n\r\n /**\r\n * For a route with path param, we create regex dynamically from angular route syntax\r\n * '/mentor/:id' becomes '/mentor/[^/]',\r\n * breadcrumbService.set('/mentor/:id', 'Uday') should update 'Uday' as label for '/mentor/2' OR 'mentor/ada'\r\n */\r\n private _buildRegex(path: string): string {\r\n return this._ensureLeadingSlash(path).replace(\r\n new RegExp(PATH_PARAM.REGEX_IDENTIFIER, 'g'),\r\n PATH_PARAM.REGEX_REPLACER\r\n );\r\n }\r\n\r\n private _ensureLeadingSlash(path: string): string {\r\n return path.startsWith('/') ? path : `/${path}`;\r\n }\r\n\r\n /**\r\n * In App's RouteConfig, breadcrumb can be defined as a string OR a function OR an object\r\n *\r\n * string: simple static breadcrumb label for a path\r\n * function: callback that gets invoked with resolved path param\r\n * object: additional data defined along with breadcrumb label that gets passed to *cmatBreadcrumbItem directive\r\n */\r\n private _extractLabel(config: CmatBreadcrumbConfig, resolvedParam?: string): string | void {\r\n const label = typeof config === 'object' ? config.label : config;\r\n if (typeof label === 'function') {\r\n return label(resolvedParam);\r\n }\r\n return label;\r\n }\r\n\r\n private _extractObject(config: CmatBreadcrumbConfig): CmatBreadcrumbObject {\r\n // don't include {label} if config is undefined. This is important since we merge the configs\r\n if (\r\n config &&\r\n (typeof config === 'string' || typeof config === 'function')\r\n ) {\r\n return { label: config };\r\n }\r\n return (config as CmatBreadcrumbObject) || {};\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ContentChild, Input, OnInit, TemplateRef, ViewEncapsulation, } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { CmatBreadcrumbItemDirective } from './breadcrumb-item.directive';\r\nimport { CmatBreadcrumbDefinition, CmatBreadcrumbService } from './breadcrumb.service';\r\nimport { AsyncPipe, NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'cmat-breadcrumb',\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'cmatBreadcrumb',\r\n standalone: true,\r\n imports: [NgClass, AsyncPipe, RouterLink, NgTemplateOutlet]\r\n})\r\nexport class CmatBreadcrumbComponent implements OnInit {\r\n /**\r\n * 面包屑项目可以使用此模板进行自定义\r\n * 模板上下文提供标签、附加信息、第一个和最后一个索引\r\n * 用例:\r\n * 1) 添加图标和标签\r\n * 2) i18n. {{breadcrumb | translate}}\r\n * 3) 更改文本大小写 {{breadcrumb | titlecase}}\r\n */\r\n @ContentChild(CmatBreadcrumbItemDirective, { static: false, read: TemplateRef })\r\n itemTemplate: any;\r\n\r\n /**\r\n * 如果为true,即使没有任何映射标签,面包屑也会自动生成\r\n * 默认标签与路由segment相同\r\n */\r\n @Input() autoGenerate = true;\r\n\r\n /**\r\n * 默认情况下,查询参数将与breadcrumbs一起保留\r\n */\r\n @Input() preserveQueryParams = true;\r\n\r\n /**\r\n * 默认情况下,fragments参数将与breadcrumbs一起保留\r\n */\r\n @Input() preserveFragment = true;\r\n\r\n /**\r\n * 可提供覆盖样式,增加特异性\r\n */\r\n @Input() class = '';\r\n\r\n /**\r\n * anchorTarget = \"_blank\" 使breadcrumb链接在新选项卡中打开\r\n */\r\n @Input() anchorTarget: '_blank' | void;\r\n\r\n breadcrumbs$: Observable<CmatBreadcrumbDefinition[]>;\r\n separatorTemplate: TemplateRef<any> | null;\r\n\r\n private _separator: string | void = '/';\r\n\r\n constructor(\r\n private _breadcrumbService: CmatBreadcrumbService) { }\r\n\r\n get separator(): string | void {\r\n return this._separator;\r\n }\r\n /**\r\n * 面包屑分隔符, 默认'/'.\r\n * 用户可以通过传递字符串或模板来自定义分隔符\r\n *\r\n * 字符串 --> Ex: <cmat-breadcrumb separator=\"-\"></cmat-breadcrumb>\r\n *\r\n * 模板 --> Ex: <cmat-breadcrumb [separator]=\"separatorTemplate\"></cmat-breadcrumb>\r\n * <ng-template #separatorTemplate><mat-icon>arrow_right</mat-icon></ng-template>\r\n */\r\n @Input()\r\n set separator(value: string | TemplateRef<void>) {\r\n if (value instanceof TemplateRef) {\r\n this.separatorTemplate = value;\r\n this._separator = undefined;\r\n } else {\r\n this.separatorTemplate = null;\r\n this._separator = value || '/';\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.breadcrumbs$ = this._breadcrumbService.breadcrumbs$.pipe(\r\n map((breadcrumbs: CmatBreadcrumbDefinition[]) => breadcrumbs\r\n .filter((breadcrumb: CmatBreadcrumbDefinition) => {\r\n // Usually, breadcrumb list can contain a combination of auto generated and user specified labels\r\n // this filters autogenerated labels in case of \"[autoGenerate]: false\"\r\n if (this.autoGenerate) {\r\n return true;\r\n }\r\n return !breadcrumb.isAutoGeneratedLabel;\r\n })\r\n .map((breadcrumb: CmatBreadcrumbDefinition) => {\r\n // Do not mutate breadcrumb as its source of truth.\r\n // There can be scenarios where we can have multiple cmat-breadcrumb instances in page\r\n const { routeInterceptor, routeLink } = breadcrumb;\r\n return {\r\n ...breadcrumb,\r\n routeLink: routeInterceptor?.(breadcrumb, routeLink) || routeLink,\r\n };\r\n }))\r\n );\r\n }\r\n}\r\n","<nav aria-label=\"breadcrumb\" class=\"m-0\" [ngClass]=\"class\">\n <ol class=\"flex items-center flex-wrap m-0 p-0\">\n @for (\n breadcrumb of breadcrumbs$ | async; track\n breadcrumb; let isLast = $last; let isFirst = $first; let index = $index; let count = $count) {\n <li class=\"list-none\">\n @if (!isLast) {\n <a class=\"cmat-breadcrumb-link\"\n [ngClass]=\"{ 'pointer-events-none cursor-not-allowed': breadcrumb.disable }\"\n [attr.aria-disabled]=\"breadcrumb.disable\" [attr.tabIndex]=\"breadcrumb.disable ? -1 : 0\"\n rel=\"noopener noreferrer\" [routerLink]=\"\r\n breadcrumb.routeInterceptor\r\n ? breadcrumb.routeInterceptor( breadcrumb,breadcrumb.routeLink)\r\n : breadcrumb.routeLink\" [queryParams]=\"preserveQueryParams ? breadcrumb.queryParams : undefined\"\r\n [fragment]=\"preserveFragment ? breadcrumb.fragment : undefined\"\n [target]=\"anchorTarget ? anchorTarget : '_self'\">\n <ng-container *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: {\r\n $implicit: breadcrumb.label,\r\n info: breadcrumb.info,\r\n last: isLast,\r\n first: isFirst,\r\n index: index,\r\n count: count\r\n }\r\n \"></ng-container>\r\n @if (!itemTemplate) {\n {{\n breadcrumb.label\n }}\n }\n </a>\n }\n @if (isLast) {\n <span class=\"flex items-center\">\n <ng-container *ngTemplateOutlet=\"\r\n itemTemplate;\r\n context: {\r\n $implicit: breadcrumb.label,\r\n info: breadcrumb.info,\r\n last: isLast,\r\n first: isFirst,\r\n index: index,\r\n count: count\r\n }\r\n \"></ng-container>\r\n @if (!itemTemplate) {\n {{\n breadcrumb.label\n }}\n }\n </span>\n }\n </li>\n @if (!isLast) {\n <li class=\"flex select-none mx-4\" aria-hidden=\"true\" role=\"separator\">\n <ng-container *ngTemplateOutlet=\"separatorTemplate\"></ng-container>\n @if (separatorTemplate===null) {\n {{ separator }}\n }\n </li>\n }\n}\n</ol>\n</nav>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CmatBreadcrumbService"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, HostBinding } from '@angular/core';
|
|
3
3
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
4
|
-
import { NgIf } from '@angular/common';
|
|
5
4
|
import { cmatAnimations } from 'cmat/animations';
|
|
6
5
|
|
|
7
6
|
class CmatCardComponent {
|
|
@@ -20,14 +19,6 @@ class CmatCardComponent {
|
|
|
20
19
|
};
|
|
21
20
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
22
21
|
}
|
|
23
|
-
// -----------------------------------------------------------------------------------------------------
|
|
24
|
-
// @ Lifecycle hooks
|
|
25
|
-
// -----------------------------------------------------------------------------------------------------
|
|
26
|
-
/**
|
|
27
|
-
* On changes
|
|
28
|
-
*
|
|
29
|
-
* @param changes
|
|
30
|
-
*/
|
|
31
22
|
ngOnChanges(changes) {
|
|
32
23
|
// Expanded
|
|
33
24
|
if ('expanded' in changes) {
|
|
@@ -40,12 +31,12 @@ class CmatCardComponent {
|
|
|
40
31
|
this.flippable = coerceBooleanProperty(changes['flippable'].currentValue);
|
|
41
32
|
}
|
|
42
33
|
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
44
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: CmatCardComponent, isStandalone: true, selector: "cmat-card", inputs: { expanded: "expanded", face: "face", flippable: "flippable" }, host: { properties: { "class": "this.classList" } }, exportAs: ["cmatCard"], usesOnChanges: true, ngImport: i0, template: "<!-- Flippable card -->\n@if (flippable) {\n <!-- Front -->\n <div class=\"cmat-card-front\">\n <ng-content select=\"[cmatCardFront]\"></ng-content>\n </div>\n <!-- Back -->\n <div class=\"cmat-card-back overflow-y-auto lg:overflow-y-hidden lg:hover:overflow-y-auto scrollbar-custom\">\n <ng-content select=\"[cmatCardBack]\"></ng-content>\n </div>\n}\n\n<!-- Normal card -->\n@if (!flippable) {\n <!-- Content -->\n <ng-content></ng-content>\n <!-- Expansion -->\n @if (expanded) {\n <div class=\"cmat-card-expansion\" [@expandCollapse]>\n <ng-content select=\"[cmatCardExpansion]\"></ng-content>\n </div>\n }\n}", styles: ["cmat-card{position:relative;display:flex;overflow:hidden;border-radius:1rem}cmat-card.cmat-card-flippable{border-width:0!important;border-radius:1rem;overflow:visible;transform-style:preserve-3d;transition:transform 1s;perspective:600px;background:transparent}cmat-card.cmat-card-flippable.cmat-card-face-back .cmat-card-front{visibility:hidden;opacity:0;transform:rotateY(180deg)}cmat-card.cmat-card-flippable.cmat-card-face-back .cmat-card-back{visibility:visible;opacity:1;transform:rotateY(360deg)}cmat-card.cmat-card-flippable .cmat-card-front,cmat-card.cmat-card-flippable .cmat-card-back{display:flex;flex-direction:column;flex:1 1 auto;z-index:10;transition:transform .5s ease-out 0s,visibility 0s ease-in .2s,opacity 0s ease-in .2s;backface-visibility:hidden;border-radius:1rem}cmat-card.cmat-card-flippable .cmat-card-front{position:relative;opacity:1;visibility:visible;transform:rotateY(0);overflow:hidden}cmat-card.cmat-card-flippable .cmat-card-back{position:absolute;inset:0;opacity:0;visibility:hidden;transform:rotateY(180deg)}\n"], animations: cmatAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
45
36
|
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatCardComponent, decorators: [{
|
|
47
38
|
type: Component,
|
|
48
|
-
args: [{ selector: 'cmat-card', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: cmatAnimations, exportAs: 'cmatCard', standalone: true, imports: [
|
|
39
|
+
args: [{ selector: 'cmat-card', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: cmatAnimations, exportAs: 'cmatCard', standalone: true, imports: [], template: "<!-- Flippable card -->\n@if (flippable) {\n <!-- Front -->\n <div class=\"cmat-card-front\">\n <ng-content select=\"[cmatCardFront]\"></ng-content>\n </div>\n <!-- Back -->\n <div class=\"cmat-card-back overflow-y-auto lg:overflow-y-hidden lg:hover:overflow-y-auto scrollbar-custom\">\n <ng-content select=\"[cmatCardBack]\"></ng-content>\n </div>\n}\n\n<!-- Normal card -->\n@if (!flippable) {\n <!-- Content -->\n <ng-content></ng-content>\n <!-- Expansion -->\n @if (expanded) {\n <div class=\"cmat-card-expansion\" [@expandCollapse]>\n <ng-content select=\"[cmatCardExpansion]\"></ng-content>\n </div>\n }\n}", styles: ["cmat-card{position:relative;display:flex;overflow:hidden;border-radius:1rem}cmat-card.cmat-card-flippable{border-width:0!important;border-radius:1rem;overflow:visible;transform-style:preserve-3d;transition:transform 1s;perspective:600px;background:transparent}cmat-card.cmat-card-flippable.cmat-card-face-back .cmat-card-front{visibility:hidden;opacity:0;transform:rotateY(180deg)}cmat-card.cmat-card-flippable.cmat-card-face-back .cmat-card-back{visibility:visible;opacity:1;transform:rotateY(360deg)}cmat-card.cmat-card-flippable .cmat-card-front,cmat-card.cmat-card-flippable .cmat-card-back{display:flex;flex-direction:column;flex:1 1 auto;z-index:10;transition:transform .5s ease-out 0s,visibility 0s ease-in .2s,opacity 0s ease-in .2s;backface-visibility:hidden;border-radius:1rem}cmat-card.cmat-card-flippable .cmat-card-front{position:relative;opacity:1;visibility:visible;transform:rotateY(0);overflow:hidden}cmat-card.cmat-card-flippable .cmat-card-back{position:absolute;inset:0;opacity:0;visibility:hidden;transform:rotateY(180deg)}\n"] }]
|
|
49
40
|
}], propDecorators: { expanded: [{
|
|
50
41
|
type: Input
|
|
51
42
|
}], face: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmat-components-card.mjs","sources":["../../../projects/cmat/components/card/card.component.ts","../../../projects/cmat/components/card/card.component.html","../../../projects/cmat/components/card/cmat-components-card.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport {CmatCardFace} from './card.types';\r\
|
|
1
|
+
{"version":3,"file":"cmat-components-card.mjs","sources":["../../../projects/cmat/components/card/card.component.ts","../../../projects/cmat/components/card/card.component.html","../../../projects/cmat/components/card/cmat-components-card.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { CmatCardFace } from './card.types';\r\n\r\nimport { cmatAnimations } from 'cmat/animations';\r\n\r\n@Component({\r\n selector: 'cmat-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: cmatAnimations,\r\n exportAs: 'cmatCard',\r\n standalone: true,\r\n imports: []\r\n})\r\nexport class CmatCardComponent implements OnChanges {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n static ngAcceptInputType_expanded: BooleanInput;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n static ngAcceptInputType_flippable: BooleanInput;\r\n\r\n @Input() expanded: boolean = false;\r\n @Input() face: CmatCardFace = 'front';\r\n @Input() flippable: boolean = false;\r\n\r\n @HostBinding('class') get classList(): any {\r\n /* eslint-disable @typescript-eslint/naming-convention */\r\n return {\r\n 'cmat-card-expanded': this.expanded,\r\n 'cmat-card-face-back': this.flippable && this.face === 'back',\r\n 'cmat-card-face-front': this.flippable && this.face === 'front',\r\n 'cmat-card-flippable': this.flippable\r\n };\r\n /* eslint-enable @typescript-eslint/naming-convention */\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Expanded\r\n if ('expanded' in changes) {\r\n // Coerce the value to a boolean\r\n this.expanded = coerceBooleanProperty(changes['expanded'].currentValue);\r\n }\r\n\r\n // Flippable\r\n if ('flippable' in changes) {\r\n // Coerce the value to a boolean\r\n this.flippable = coerceBooleanProperty(changes['flippable'].currentValue);\r\n }\r\n }\r\n}\r\n","<!-- Flippable card -->\n@if (flippable) {\n <!-- Front -->\n <div class=\"cmat-card-front\">\n <ng-content select=\"[cmatCardFront]\"></ng-content>\n </div>\n <!-- Back -->\n <div class=\"cmat-card-back overflow-y-auto lg:overflow-y-hidden lg:hover:overflow-y-auto scrollbar-custom\">\n <ng-content select=\"[cmatCardBack]\"></ng-content>\n </div>\n}\n\n<!-- Normal card -->\n@if (!flippable) {\n <!-- Content -->\n <ng-content></ng-content>\n <!-- Expansion -->\n @if (expanded) {\n <div class=\"cmat-card-expansion\" [@expandCollapse]>\n <ng-content select=\"[cmatCardExpansion]\"></ng-content>\n </div>\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAiBa,iBAAiB,CAAA;AAX9B,IAAA,WAAA,GAAA;QAiBa,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAC1B,IAAI,CAAA,IAAA,GAAiB,OAAO,CAAC;QAC7B,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AA0BvC,KAAA;AAxBG,IAAA,IAA0B,SAAS,GAAA;;QAE/B,OAAO;YACH,oBAAoB,EAAE,IAAI,CAAC,QAAQ;YACnC,qBAAqB,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAC7D,sBAAsB,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAC/D,qBAAqB,EAAE,IAAI,CAAC,SAAS;SACxC,CAAC;;KAEL;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;;QAE9B,IAAI,UAAU,IAAI,OAAO,EAAE;;AAEvB,YAAA,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;AAC3E,SAAA;;QAGD,IAAI,WAAW,IAAI,OAAO,EAAE;;AAExB,YAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC;AAC7E,SAAA;KACJ;8GAjCQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjB9B,moBAsBC,EAAA,MAAA,EAAA,CAAA,whCAAA,CAAA,EAAA,UAAA,EDVe,cAAc,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAKjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAX7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAGN,aAAA,EAAA,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,cAAc,EAChB,QAAA,EAAA,UAAU,EACR,UAAA,EAAA,IAAI,WACP,EAAE,EAAA,QAAA,EAAA,moBAAA,EAAA,MAAA,EAAA,CAAA,whCAAA,CAAA,EAAA,CAAA;8BAQF,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEoB,SAAS,EAAA,CAAA;sBAAlC,WAAW;uBAAC,OAAO,CAAA;;;AE3BxB;;AAEG;;;;"}
|