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.
Files changed (266) hide show
  1. package/components/breadcrumb/breadcrumb.component.d.ts +18 -20
  2. package/components/card/card.component.d.ts +0 -5
  3. package/components/cascade/cascade-list/cascade-list.component.d.ts +12 -9
  4. package/components/cascade/cascade-menu/cascade-menu.component.d.ts +0 -1
  5. package/components/chip-input/chip-input.component.d.ts +34 -0
  6. package/components/chip-input/index.d.ts +5 -0
  7. package/components/chip-input/public-api.d.ts +1 -0
  8. package/components/date-range/date-range.component.d.ts +3 -2
  9. package/components/json-editor/index.d.ts +5 -0
  10. package/components/json-editor/json-editor.component.d.ts +25 -0
  11. package/components/json-editor/public-api.d.ts +1 -0
  12. package/components/navigation/vertical/components/aside/aside.component.d.ts +2 -2
  13. package/components/navigation/vertical/components/basic/basic.component.d.ts +2 -2
  14. package/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +2 -2
  15. package/components/navigation/vertical/components/divider/divider.component.d.ts +2 -2
  16. package/components/navigation/vertical/components/group/group.component.d.ts +2 -2
  17. package/components/navigation/vertical/components/spacer/spacer.component.d.ts +2 -2
  18. package/components/navigation/vertical/vertical.component.d.ts +2 -2
  19. package/components/progress-bar/progress-bar.component.d.ts +3 -2
  20. package/components/rating/rating.component.d.ts +3 -2
  21. package/components/select-search/select-search.component.d.ts +1 -2
  22. package/components/select-tree/select-tree.component.d.ts +5 -12
  23. package/components/timeline/timeline-item/timeline-item.component.d.ts +1 -1
  24. package/components/transfer-picker/interface.d.ts +1 -1
  25. package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.d.ts +4 -4
  26. package/components/transfer-picker/transfer-picker.service.d.ts +2 -1
  27. package/directives/autofocus/autofocus.directive.d.ts +1 -3
  28. package/directives/debounce/debounce-keyup.directive.d.ts +1 -1
  29. package/directives/digit-only/digit-only.directive.d.ts +2 -0
  30. package/esm2022/animations/dropdown.mjs +26 -0
  31. package/esm2022/animations/public-api.mjs +2 -2
  32. package/esm2022/components/adapter/dayjs-date-adapter.mjs +3 -3
  33. package/esm2022/components/adapter/dayjs-datetime-adapter.mjs +3 -3
  34. package/esm2022/components/adapter/native-datetime-adapter.mjs +3 -3
  35. package/esm2022/components/breadcrumb/breadcrumb-item.directive.mjs +3 -3
  36. package/esm2022/components/breadcrumb/breadcrumb.component.mjs +16 -17
  37. package/esm2022/components/breadcrumb/breadcrumb.service.mjs +4 -4
  38. package/esm2022/components/card/card.component.mjs +5 -14
  39. package/esm2022/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.mjs +5 -6
  40. package/esm2022/components/cascade/cascade-list/cascade-list.component.mjs +65 -39
  41. package/esm2022/components/cascade/cascade-menu/cascade-menu.component.mjs +5 -9
  42. package/esm2022/components/chip-input/chip-input.component.mjs +144 -0
  43. package/esm2022/components/chip-input/cmat-components-chip-input.mjs +5 -0
  44. package/esm2022/components/chip-input/public-api.mjs +2 -0
  45. package/esm2022/components/date-range/date-range.component.mjs +13 -9
  46. package/esm2022/components/drawer/drawer.component.mjs +4 -4
  47. package/esm2022/components/drawer/drawer.service.mjs +3 -3
  48. package/esm2022/components/fullscreen/fullscreen.component.mjs +3 -3
  49. package/esm2022/components/highlight/highlight.component.mjs +3 -3
  50. package/esm2022/components/highlight/highlight.service.mjs +3 -3
  51. package/esm2022/components/json-editor/cmat-components-json-editor.mjs +5 -0
  52. package/esm2022/components/json-editor/json-editor.component.mjs +176 -0
  53. package/esm2022/components/json-editor/public-api.mjs +2 -0
  54. package/esm2022/components/masonry/masonry.component.mjs +3 -3
  55. package/esm2022/components/material-color-picker/material-color-picker.component.mjs +6 -6
  56. package/esm2022/components/material-datetimepicker/calendar-body.mjs +5 -6
  57. package/esm2022/components/material-datetimepicker/calendar.mjs +7 -8
  58. package/esm2022/components/material-datetimepicker/clock.mjs +6 -6
  59. package/esm2022/components/material-datetimepicker/datetimepicker-input.mjs +3 -3
  60. package/esm2022/components/material-datetimepicker/datetimepicker-intl.mjs +3 -3
  61. package/esm2022/components/material-datetimepicker/datetimepicker-toggle.mjs +8 -9
  62. package/esm2022/components/material-datetimepicker/datetimepicker.mjs +7 -7
  63. package/esm2022/components/material-datetimepicker/month-view.mjs +5 -6
  64. package/esm2022/components/material-datetimepicker/multi-year-view.mjs +3 -3
  65. package/esm2022/components/material-datetimepicker/time.mjs +8 -9
  66. package/esm2022/components/material-datetimepicker/year-view.mjs +3 -3
  67. package/esm2022/components/navigation/horizontal/components/basic/basic.component.mjs +6 -6
  68. package/esm2022/components/navigation/horizontal/components/branch/branch.component.mjs +7 -8
  69. package/esm2022/components/navigation/horizontal/components/divider/divider.component.mjs +3 -3
  70. package/esm2022/components/navigation/horizontal/components/spacer/spacer.component.mjs +3 -3
  71. package/esm2022/components/navigation/horizontal/horizontal.component.mjs +5 -6
  72. package/esm2022/components/navigation/navigation.service.mjs +3 -3
  73. package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +9 -9
  74. package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +8 -7
  75. package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +9 -11
  76. package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +6 -6
  77. package/esm2022/components/navigation/vertical/components/group/group.component.mjs +10 -11
  78. package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +7 -7
  79. package/esm2022/components/navigation/vertical/vertical.component.mjs +9 -11
  80. package/esm2022/components/pagination/pagination.component.mjs +6 -7
  81. package/esm2022/components/pagination/pagination.directive.mjs +3 -3
  82. package/esm2022/components/pagination/pagination.pipe.mjs +5 -5
  83. package/esm2022/components/pagination/pagination.service.mjs +3 -3
  84. package/esm2022/components/password-strength/mat-pass-toggle-visibility/mat-pass-toggle-visibility.component.mjs +3 -3
  85. package/esm2022/components/password-strength/mat-password-strength/mat-password-strength.component.mjs +6 -6
  86. package/esm2022/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.mjs +8 -9
  87. package/esm2022/components/popover/popover.component.mjs +5 -5
  88. package/esm2022/components/progress-bar/progress-bar.component.mjs +11 -8
  89. package/esm2022/components/rating/rating.component.mjs +14 -6
  90. package/esm2022/components/select-search/select-no-entries-found.directive.mjs +3 -3
  91. package/esm2022/components/select-search/select-search-clear.directive.mjs +3 -3
  92. package/esm2022/components/select-search/select-search.component.mjs +8 -11
  93. package/esm2022/components/select-tree/select-tree.component.mjs +13 -29
  94. package/esm2022/components/timeline/timeline-item/timeline-item.component.mjs +18 -16
  95. package/esm2022/components/timeline/timeline.component.mjs +3 -3
  96. package/esm2022/components/toast/toast-modal.component.mjs +7 -7
  97. package/esm2022/components/toast/toast.component.mjs +6 -6
  98. package/esm2022/components/toast/toast.service.mjs +3 -3
  99. package/esm2022/components/transfer-picker/filter/filter.component.mjs +17 -8
  100. package/esm2022/components/transfer-picker/interface.mjs +1 -1
  101. package/esm2022/components/transfer-picker/search/search.component.mjs +9 -5
  102. package/esm2022/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.mjs +44 -21
  103. package/esm2022/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.mjs +7 -6
  104. package/esm2022/components/transfer-picker/transfer-picker.component.mjs +9 -7
  105. package/esm2022/components/transfer-picker/transfer-picker.service.mjs +10 -7
  106. package/esm2022/directives/animate-on-scroll/animate-on-scroll.directive.mjs +3 -3
  107. package/esm2022/directives/animate-on-scroll/scroll.service.mjs +3 -3
  108. package/esm2022/directives/autofocus/autofocus.directive.mjs +7 -7
  109. package/esm2022/directives/debounce/abstract-debounce.directive.mjs +3 -3
  110. package/esm2022/directives/debounce/debounce-click.directive.mjs +3 -3
  111. package/esm2022/directives/debounce/debounce-keyup.directive.mjs +5 -5
  112. package/esm2022/directives/digit-only/digit-only.directive.mjs +20 -4
  113. package/esm2022/directives/digit-only/mask.directive.mjs +3 -3
  114. package/esm2022/directives/digit-only/public-api.mjs +1 -1
  115. package/esm2022/directives/equal-validator/equal-validator.directive.mjs +3 -3
  116. package/esm2022/lib/mock-api/mock-api.interceptor.mjs +3 -3
  117. package/esm2022/lib/mock-api/mock-api.service.mjs +3 -3
  118. package/esm2022/pipes/bytes/bytes.pipe.mjs +3 -3
  119. package/esm2022/pipes/date-format/date-format.pipe.mjs +3 -3
  120. package/esm2022/pipes/find-by-key/find-by-key.pipe.mjs +3 -3
  121. package/esm2022/pipes/group-by/group-by.pipe.mjs +3 -3
  122. package/esm2022/pipes/keys/keys.pipe.mjs +3 -3
  123. package/esm2022/pipes/secure/secure-pipe.mjs +5 -5
  124. package/esm2022/pipes/uppercase/uppercase.pipe.mjs +3 -3
  125. package/esm2022/services/alert/alert.service.mjs +16 -16
  126. package/esm2022/services/config/config.constants.mjs +1 -1
  127. package/esm2022/services/config/config.service.mjs +3 -3
  128. package/esm2022/services/config/urlStateConfig.service.mjs +5 -5
  129. package/esm2022/services/confirmation/confirmation.service.mjs +3 -3
  130. package/esm2022/services/confirmation/dialog/dialog.component.mjs +6 -6
  131. package/esm2022/services/data/data.service.mjs +4 -4
  132. package/esm2022/services/loading/loading.interceptor.mjs +3 -3
  133. package/esm2022/services/loading/loading.service.mjs +3 -3
  134. package/esm2022/services/local-storage/local-storage.service.mjs +3 -3
  135. package/esm2022/services/media-watcher/media-watcher.service.mjs +3 -3
  136. package/esm2022/services/platform/platform.service.mjs +3 -3
  137. package/esm2022/services/splash-screen/splash-screen.service.mjs +3 -3
  138. package/esm2022/services/title/title.service.mjs +3 -3
  139. package/esm2022/services/translation/translation.service.mjs +3 -3
  140. package/esm2022/services/utils/utils.service.mjs +3 -3
  141. package/fesm2022/cmat-animations.mjs.map +1 -1
  142. package/fesm2022/cmat-components-adapter.mjs +9 -9
  143. package/fesm2022/cmat-components-breadcrumb.mjs +21 -22
  144. package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
  145. package/fesm2022/cmat-components-card.mjs +4 -13
  146. package/fesm2022/cmat-components-card.mjs.map +1 -1
  147. package/fesm2022/cmat-components-cascade.mjs +72 -49
  148. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  149. package/fesm2022/cmat-components-chip-input.mjs +151 -0
  150. package/fesm2022/cmat-components-chip-input.mjs.map +1 -0
  151. package/fesm2022/cmat-components-date-range.mjs +12 -8
  152. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  153. package/fesm2022/cmat-components-drawer.mjs +7 -7
  154. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  155. package/fesm2022/cmat-components-fullscreen.mjs +3 -3
  156. package/fesm2022/cmat-components-highlight.mjs +6 -6
  157. package/fesm2022/cmat-components-json-editor.mjs +183 -0
  158. package/fesm2022/cmat-components-json-editor.mjs.map +1 -0
  159. package/fesm2022/cmat-components-masonry.mjs +3 -3
  160. package/fesm2022/cmat-components-material-color-picker.mjs +5 -5
  161. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  162. package/fesm2022/cmat-components-material-datetimepicker.mjs +51 -52
  163. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  164. package/fesm2022/cmat-components-navigation.mjs +70 -74
  165. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  166. package/fesm2022/cmat-components-pagination.mjs +15 -16
  167. package/fesm2022/cmat-components-pagination.mjs.map +1 -1
  168. package/fesm2022/cmat-components-password-strength.mjs +14 -15
  169. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  170. package/fesm2022/cmat-components-popover.mjs +4 -4
  171. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  172. package/fesm2022/cmat-components-progress-bar.mjs +10 -7
  173. package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
  174. package/fesm2022/cmat-components-rating.mjs +13 -5
  175. package/fesm2022/cmat-components-rating.mjs.map +1 -1
  176. package/fesm2022/cmat-components-select-search.mjs +13 -16
  177. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  178. package/fesm2022/cmat-components-select-tree.mjs +12 -28
  179. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  180. package/fesm2022/cmat-components-timeline.mjs +21 -19
  181. package/fesm2022/cmat-components-timeline.mjs.map +1 -1
  182. package/fesm2022/cmat-components-toast.mjs +13 -13
  183. package/fesm2022/cmat-components-toast.mjs.map +1 -1
  184. package/fesm2022/cmat-components-transfer-picker.mjs +81 -45
  185. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
  186. package/fesm2022/cmat-directives-animate-on-scroll.mjs +6 -6
  187. package/fesm2022/cmat-directives-autofocus.mjs +6 -6
  188. package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
  189. package/fesm2022/cmat-directives-debounce.mjs +10 -10
  190. package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
  191. package/fesm2022/cmat-directives-digit-only.mjs +22 -6
  192. package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
  193. package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
  194. package/fesm2022/cmat-lib-mock-api.mjs +6 -6
  195. package/fesm2022/cmat-pipes-bytes.mjs +3 -3
  196. package/fesm2022/cmat-pipes-date-format.mjs +3 -3
  197. package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
  198. package/fesm2022/cmat-pipes-group-by.mjs +3 -3
  199. package/fesm2022/cmat-pipes-keys.mjs +3 -3
  200. package/fesm2022/cmat-pipes-secure.mjs +4 -4
  201. package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
  202. package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
  203. package/fesm2022/cmat-services-alert.mjs +15 -15
  204. package/fesm2022/cmat-services-alert.mjs.map +1 -1
  205. package/fesm2022/cmat-services-config.mjs +7 -7
  206. package/fesm2022/cmat-services-config.mjs.map +1 -1
  207. package/fesm2022/cmat-services-confirmation.mjs +8 -8
  208. package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
  209. package/fesm2022/cmat-services-data.mjs +3 -3
  210. package/fesm2022/cmat-services-data.mjs.map +1 -1
  211. package/fesm2022/cmat-services-loading.mjs +6 -6
  212. package/fesm2022/cmat-services-local-storage.mjs +3 -3
  213. package/fesm2022/cmat-services-media-watcher.mjs +3 -3
  214. package/fesm2022/cmat-services-platform.mjs +3 -3
  215. package/fesm2022/cmat-services-splash-screen.mjs +3 -3
  216. package/fesm2022/cmat-services-title.mjs +3 -3
  217. package/fesm2022/cmat-services-translation.mjs +3 -3
  218. package/fesm2022/cmat-services-utils.mjs +3 -3
  219. package/package.json +46 -36
  220. package/pipes/secure/secure-pipe.d.ts +1 -1
  221. package/services/alert/alert.service.d.ts +4 -4
  222. package/services/config/config.constants.d.ts +1 -1
  223. package/services/config/urlStateConfig.service.d.ts +3 -2
  224. package/styles/components/bundle.scss +559 -0
  225. package/styles/overrides/angular-material.scss +16 -16
  226. package/styles/styles.scss +6 -1
  227. package/styles/tailwind.scss +4 -2
  228. package/components/breadcrumb/breadcrumb.component.scss +0 -18
  229. package/components/card/card.component.scss +0 -63
  230. package/components/cascade/cascade-bottom-sheet/cascade-bottom-sheet.component.scss +0 -43
  231. package/components/cascade/cascade-list/cascade-list.component.scss +0 -22
  232. package/components/cascade/cascade-menu/cascade-menu.component.scss +0 -48
  233. package/components/date-range/date-range.component.scss +0 -232
  234. package/components/drawer/drawer.component.scss +0 -133
  235. package/components/highlight/highlight.component.scss +0 -3
  236. package/components/material-color-picker/material-color-picker.component.scss +0 -5
  237. package/components/material-datetimepicker/calendar-body.scss +0 -58
  238. package/components/material-datetimepicker/calendar.scss +0 -194
  239. package/components/material-datetimepicker/clock.scss +0 -90
  240. package/components/material-datetimepicker/datetimepicker-content.scss +0 -151
  241. package/components/material-datetimepicker/datetimepicker.scss +0 -145
  242. package/components/material-datetimepicker/time.scss +0 -82
  243. package/components/navigation/horizontal/horizontal.component.scss +0 -167
  244. package/components/navigation/vertical/styles/appearances/compact.scss +0 -103
  245. package/components/navigation/vertical/styles/appearances/default.scss +0 -550
  246. package/components/navigation/vertical/styles/appearances/dense.scss +0 -171
  247. package/components/navigation/vertical/styles/appearances/thin.scss +0 -91
  248. package/components/navigation/vertical/vertical.component.scss +0 -4
  249. package/components/password-strength/mat-password-strength-info/mat-password-strength-info.component.scss +0 -19
  250. package/components/popover/popover.component.scss +0 -174
  251. package/components/progress-bar/progress-bar.component.scss +0 -7
  252. package/components/rating/rating.component.scss +0 -33
  253. package/components/select-search/select-search.component.scss +0 -126
  254. package/components/select-tree/select-tree.component.scss +0 -54
  255. package/components/timeline/timeline-item/timeline-item.component.scss +0 -329
  256. package/components/timeline/timeline.component.scss +0 -42
  257. package/components/toast/toast-modal.component.scss +0 -119
  258. package/components/toast/toast.component.scss +0 -62
  259. package/components/transfer-picker/filter/filter.component.scss +0 -40
  260. package/components/transfer-picker/search/search.component.scss +0 -7
  261. package/components/transfer-picker/transfer-picker-source/transfer-picker-source.component.scss +0 -25
  262. package/components/transfer-picker/transfer-picker-target/transfer-picker-target.component.scss +0 -27
  263. package/components/transfer-picker/transfer-picker.component.scss +0 -8
  264. package/esm2022/animations/drop.mjs +0 -26
  265. package/styles/main.scss +0 -9
  266. /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.1.0", 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.1.0", ngImport: i0, type: CNativeDatetimeAdapter }); }
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.1.0", ngImport: i0, type: CNativeDatetimeAdapter, decorators: [{
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.1.0", 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.1.0", ngImport: i0, type: DayjsDatetimeAdapter }); }
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.1.0", ngImport: i0, type: DayjsDatetimeAdapter, decorators: [{
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.1.0", 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.1.0", ngImport: i0, type: DayjsDateAdapter }); }
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.1.0", ngImport: i0, type: DayjsDateAdapter, decorators: [{
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 { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';
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.1.0", ngImport: i0, type: CmatBreadcrumbItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
17
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.0", type: CmatBreadcrumbItemDirective, isStandalone: true, selector: "[cmatBreadcrumbItem]", ngImport: i0 }); }
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.1.0", ngImport: i0, type: CmatBreadcrumbItemDirective, decorators: [{
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.1.0", 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.1.0", ngImport: i0, type: CmatBreadcrumbService, providedIn: 'root' }); }
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.1.0", ngImport: i0, type: CmatBreadcrumbService, decorators: [{
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
- * If true, breadcrumb is auto generated even without any mapping label
361
- * Default label is same as route segment
360
+ * 如果为true,即使没有任何映射标签,面包屑也会自动生成
361
+ * 默认标签与路由segment相同
362
362
  */
363
363
  this.autoGenerate = true;
364
364
  /**
365
- * By default query params will be preserved with breadcrumbs
365
+ * 默认情况下,查询参数将与breadcrumbs一起保留
366
366
  */
367
367
  this.preserveQueryParams = true;
368
368
  /**
369
- * By default query fragments will be preserved with breadcrumbs
369
+ * 默认情况下,fragments参数将与breadcrumbs一起保留
370
370
  */
371
371
  this.preserveFragment = true;
372
372
  /**
373
- * custom class provided by consumer to increase specificity
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
- * separator between breadcrumbs, defaults to '/'.
384
- * User can customize separator either by passing a String or Template
382
+ * 面包屑分隔符, 默认'/'.
383
+ * 用户可以通过传递字符串或模板来自定义分隔符
385
384
  *
386
- * String --> Ex: <cmat-breadcrumb separator="-"> </cmat-breadcrumb>
385
+ * 字符串 --> Ex: <cmat-breadcrumb separator="-"></cmat-breadcrumb>
387
386
  *
388
- * Template --> Ex: <cmat-breadcrumb [separator]="separatorTemplate"> </cmat-breadcrumb>
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 = undefined;
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.1.0", ngImport: i0, type: CmatBreadcrumbComponent, deps: [{ token: CmatBreadcrumbService }], target: i0.ɵɵFactoryTarget.Component }); }
422
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0", 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=\"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>", styles: ["cmat-breadcrumb .cmat-breadcrumb-root{color:#0009}cmat-breadcrumb .cmat-breadcrumb-trail{color:#000000e6}cmat-breadcrumb .cmat-breadcrumb-link{@apply flex items-center text-primary whitespace-nowrap no-underline cursor-pointer;transition:text-decoration .3s}cmat-breadcrumb .cmat-breadcrumb-link:hover{@apply underline;}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
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.1.0", ngImport: i0, type: CmatBreadcrumbComponent, decorators: [{
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: [NgIf, NgFor, NgClass, AsyncPipe, RouterLink], template: "<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>", styles: ["cmat-breadcrumb .cmat-breadcrumb-root{color:#0009}cmat-breadcrumb .cmat-breadcrumb-trail{color:#000000e6}cmat-breadcrumb .cmat-breadcrumb-link{@apply flex items-center text-primary whitespace-nowrap no-underline cursor-pointer;transition:text-decoration .3s}cmat-breadcrumb .cmat-breadcrumb-link:hover{@apply underline;}\n"] }]
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.1.0", ngImport: i0, type: CmatCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
44
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0", 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 -->\r\n<ng-container *ngIf=\"flippable\">\r\n\r\n <!-- Front -->\r\n <div class=\"cmat-card-front\">\r\n <ng-content select=\"[cmatCardFront]\"></ng-content>\r\n </div>\r\n\r\n <!-- Back -->\r\n <div class=\"cmat-card-back\">\r\n <ng-content select=\"[cmatCardBack]\"></ng-content>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n<!-- Normal card -->\r\n<ng-container *ngIf=\"!flippable\">\r\n\r\n <!-- Content -->\r\n <ng-content></ng-content>\r\n\r\n <!-- Expansion -->\r\n <div class=\"cmat-card-expansion\" *ngIf=\"expanded\" [@expandCollapse]>\r\n <ng-content select=\"[cmatCardExpansion]\"></ng-content>\r\n </div>\r\n\r\n</ng-container>", styles: ["cmat-card{position:relative;display:flex;overflow:hidden;@apply rounded-2xl shadow bg-card;}cmat-card.cmat-card-flippable{border-radius:0;overflow:visible;transform-style:preserve-3d;transition:transform 1s;perspective:600px;background:transparent;@apply shadow-none;}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;@apply rounded-2xl shadow bg-card;}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);overflow:hidden auto}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: cmatAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
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.1.0", ngImport: i0, type: CmatCardComponent, decorators: [{
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: [NgIf], template: "<!-- Flippable card -->\r\n<ng-container *ngIf=\"flippable\">\r\n\r\n <!-- Front -->\r\n <div class=\"cmat-card-front\">\r\n <ng-content select=\"[cmatCardFront]\"></ng-content>\r\n </div>\r\n\r\n <!-- Back -->\r\n <div class=\"cmat-card-back\">\r\n <ng-content select=\"[cmatCardBack]\"></ng-content>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n<!-- Normal card -->\r\n<ng-container *ngIf=\"!flippable\">\r\n\r\n <!-- Content -->\r\n <ng-content></ng-content>\r\n\r\n <!-- Expansion -->\r\n <div class=\"cmat-card-expansion\" *ngIf=\"expanded\" [@expandCollapse]>\r\n <ng-content select=\"[cmatCardExpansion]\"></ng-content>\r\n </div>\r\n\r\n</ng-container>", styles: ["cmat-card{position:relative;display:flex;overflow:hidden;@apply rounded-2xl shadow bg-card;}cmat-card.cmat-card-flippable{border-radius:0;overflow:visible;transform-style:preserve-3d;transition:transform 1s;perspective:600px;background:transparent;@apply shadow-none;}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;@apply rounded-2xl shadow bg-card;}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);overflow:hidden auto}\n"] }]
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\nimport { NgIf } from '@angular/common';\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: [NgIf]\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 // -----------------------------------------------------------------------------------------------------\r\n // @ Lifecycle hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n /**\r\n * On changes\r\n *\r\n * @param changes\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 -->\r\n<ng-container *ngIf=\"flippable\">\r\n\r\n <!-- Front -->\r\n <div class=\"cmat-card-front\">\r\n <ng-content select=\"[cmatCardFront]\"></ng-content>\r\n </div>\r\n\r\n <!-- Back -->\r\n <div class=\"cmat-card-back\">\r\n <ng-content select=\"[cmatCardBack]\"></ng-content>\r\n </div>\r\n\r\n</ng-container>\r\n\r\n<!-- Normal card -->\r\n<ng-container *ngIf=\"!flippable\">\r\n\r\n <!-- Content -->\r\n <ng-content></ng-content>\r\n\r\n <!-- Expansion -->\r\n <div class=\"cmat-card-expansion\" *ngIf=\"expanded\" [@expandCollapse]>\r\n <ng-content select=\"[cmatCardExpansion]\"></ng-content>\r\n </div>\r\n\r\n</ng-container>","/**\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;AAmCvC,KAAA;AAjCG,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;;;;AAMD;;;;AAIG;AACH,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;8GA1CQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ECjB9B,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,EAAA,wsBA0Be,EDXD,MAAA,EAAA,CAAA,qkCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAI,+EAHF,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,iBAGN,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EACnC,UAAA,EAAA,cAAc,YAChB,UAAU,EAAA,UAAA,EACR,IAAI,EACP,OAAA,EAAA,CAAC,IAAI,CAAC,EAAA,QAAA,EAAA,wsBAAA,EAAA,MAAA,EAAA,CAAA,qkCAAA,CAAA,EAAA,CAAA;8BAQN,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;;;;"}
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;;;;"}