@odx/angular 1.0.4 → 2.1.1

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 (263) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/breakpoints/README.md +3 -0
  3. package/breakpoints/index.d.ts +7 -0
  4. package/breakpoints/lib/breakpoints.config.d.ts +21 -0
  5. package/breakpoints/lib/breakpoints.module.d.ts +7 -0
  6. package/breakpoints/lib/breakpoints.service.d.ts +13 -0
  7. package/breakpoints/lib/breakpoints.typings.d.ts +8 -0
  8. package/breakpoints/lib/directives/index.d.ts +1 -0
  9. package/breakpoints/lib/directives/match-breakpoints.directive.d.ts +16 -0
  10. package/breakpoints/lib/helpers/configure-breakpoint.d.ts +4 -0
  11. package/breakpoints/lib/helpers/index.d.ts +1 -0
  12. package/breakpoints/lib/models/breakpoint.d.ts +5 -0
  13. package/breakpoints/lib/models/index.d.ts +1 -0
  14. package/cdk/autocomplete-control/README.md +3 -0
  15. package/cdk/autocomplete-control/index.d.ts +3 -0
  16. package/cdk/autocomplete-control/lib/abstract/base-search-field.directive.d.ts +13 -0
  17. package/cdk/autocomplete-control/lib/abstract/index.d.ts +1 -0
  18. package/cdk/autocomplete-control/lib/autocomplete-control.d.ts +39 -0
  19. package/cdk/autocomplete-control/lib/pipes/base-search-filter-pipe.d.ts +11 -0
  20. package/cdk/autocomplete-control/lib/pipes/index.d.ts +1 -0
  21. package/cdk/expandable/lib/directives/expandable-item.directive.d.ts +1 -1
  22. package/cdk/option-control/README.md +3 -0
  23. package/cdk/option-control/index.d.ts +1 -0
  24. package/cdk/option-control/lib/option-control.d.ts +17 -0
  25. package/components/autocomplete/README.md +3 -0
  26. package/components/autocomplete/index.d.ts +6 -0
  27. package/components/autocomplete/lib/autocomplete.component.d.ts +30 -0
  28. package/components/autocomplete/lib/autocomplete.module.d.ts +11 -0
  29. package/components/autocomplete/lib/autocomplete.tokens.d.ts +3 -0
  30. package/components/autocomplete/lib/components/index.d.ts +1 -0
  31. package/components/autocomplete/lib/components/option/autocomplete-option.component.d.ts +9 -0
  32. package/components/autocomplete/lib/directives/autocomplete-search-field.directive.d.ts +9 -0
  33. package/components/autocomplete/lib/directives/index.d.ts +1 -0
  34. package/components/autocomplete/lib/pipes/autocomplete-search-filter.pipe.d.ts +12 -0
  35. package/components/autocomplete/lib/pipes/index.d.ts +1 -0
  36. package/components/chip/index.d.ts +1 -1
  37. package/components/chip/lib/{chip.component.d.ts → components/chip/chip.component.d.ts} +1 -1
  38. package/components/chip/lib/components/chip-list/chip-list.component.d.ts +6 -0
  39. package/components/chip/lib/components/chip-list-row/chip-list-row.component.d.ts +6 -0
  40. package/components/chip/lib/components/index.d.ts +3 -0
  41. package/components/dropdown/lib/dropdown.directive.d.ts +2 -1
  42. package/components/form-field/lib/models/form-field-variant.d.ts +1 -0
  43. package/components/main-menu/lib/directives/index.d.ts +1 -0
  44. package/components/main-menu/lib/directives/main-menu-close.directive.d.ts +7 -0
  45. package/components/main-menu/lib/directives/main-menu-item.directive.d.ts +3 -4
  46. package/components/main-menu/lib/main-menu.module.d.ts +3 -2
  47. package/components/menu/lib/directives/menu-item.directive.d.ts +1 -1
  48. package/components/menu/lib/menu.module.d.ts +3 -2
  49. package/components/rail-navigation/index.d.ts +2 -1
  50. package/components/rail-navigation/lib/components/index.d.ts +1 -0
  51. package/components/rail-navigation/lib/models/index.d.ts +1 -0
  52. package/components/rail-navigation/lib/models/rail-navigation-variant.d.ts +5 -0
  53. package/components/rail-navigation/lib/rail-navigation.component.d.ts +4 -2
  54. package/components/rail-navigation/lib/rail-navigation.module.d.ts +2 -2
  55. package/components/select/index.d.ts +0 -1
  56. package/components/select/lib/components/index.d.ts +1 -1
  57. package/components/select/lib/components/select-option/select-option.component.d.ts +19 -0
  58. package/components/select/lib/directives/select-search-field.directive.d.ts +3 -7
  59. package/components/select/lib/pipes/select-search-filter.pipe.d.ts +8 -8
  60. package/components/select/lib/select.component.d.ts +15 -30
  61. package/components/select/lib/select.module.d.ts +2 -2
  62. package/components/select/lib/select.tokens.d.ts +2 -2
  63. package/components/table/README.md +3 -0
  64. package/components/table/index.d.ts +5 -0
  65. package/components/table/lib/components/check-cell/check-cell.component.d.ts +11 -0
  66. package/components/table/lib/components/header-title/header-title.component.d.ts +28 -0
  67. package/components/table/lib/components/index.d.ts +2 -0
  68. package/components/table/lib/directives/index.d.ts +2 -0
  69. package/components/table/lib/directives/table-cell.directive.d.ts +6 -0
  70. package/components/table/lib/directives/table-row.directive.d.ts +6 -0
  71. package/components/table/lib/interfaces/index.d.ts +3 -0
  72. package/components/table/lib/models/index.d.ts +2 -0
  73. package/components/table/lib/models/sort-variant.d.ts +6 -0
  74. package/components/table/lib/models/table-variant.d.ts +5 -0
  75. package/components/table/lib/table.component.d.ts +29 -0
  76. package/components/table/lib/table.config.d.ts +4 -0
  77. package/components/table/lib/table.module.d.ts +11 -0
  78. package/components/wizard/README.md +3 -0
  79. package/components/wizard/index.d.ts +3 -0
  80. package/components/wizard/lib/components/index.d.ts +1 -0
  81. package/components/wizard/lib/components/wizard-step/wizard-step.component.d.ts +17 -0
  82. package/components/wizard/lib/wizard.component.d.ts +31 -0
  83. package/components/wizard/lib/wizard.module.d.ts +9 -0
  84. package/esm2020/breakpoints/index.mjs +8 -0
  85. package/esm2020/breakpoints/lib/breakpoints.config.mjs +13 -0
  86. package/esm2020/breakpoints/lib/breakpoints.module.mjs +17 -0
  87. package/esm2020/breakpoints/lib/breakpoints.service.mjs +34 -0
  88. package/esm2020/breakpoints/lib/breakpoints.typings.mjs +2 -0
  89. package/esm2020/breakpoints/lib/directives/index.mjs +2 -0
  90. package/esm2020/breakpoints/lib/directives/match-breakpoints.directive.mjs +48 -0
  91. package/esm2020/breakpoints/lib/helpers/configure-breakpoint.mjs +8 -0
  92. package/esm2020/breakpoints/lib/helpers/index.mjs +2 -0
  93. package/esm2020/breakpoints/lib/models/breakpoint.mjs +2 -0
  94. package/esm2020/breakpoints/lib/models/index.mjs +2 -0
  95. package/esm2020/breakpoints/odx-angular-breakpoints.mjs +5 -0
  96. package/esm2020/cdk/autocomplete-control/index.mjs +4 -0
  97. package/esm2020/cdk/autocomplete-control/lib/abstract/base-search-field.directive.mjs +38 -0
  98. package/esm2020/cdk/autocomplete-control/lib/abstract/index.mjs +2 -0
  99. package/esm2020/cdk/autocomplete-control/lib/autocomplete-control.mjs +90 -0
  100. package/esm2020/cdk/autocomplete-control/lib/pipes/base-search-filter-pipe.mjs +32 -0
  101. package/esm2020/cdk/autocomplete-control/lib/pipes/index.mjs +2 -0
  102. package/esm2020/cdk/autocomplete-control/odx-angular-cdk-autocomplete-control.mjs +5 -0
  103. package/esm2020/cdk/expandable/lib/directives/expandable-item.directive.mjs +5 -5
  104. package/esm2020/cdk/option-control/index.mjs +2 -0
  105. package/esm2020/cdk/option-control/lib/option-control.mjs +47 -0
  106. package/esm2020/cdk/option-control/odx-angular-cdk-option-control.mjs +5 -0
  107. package/esm2020/components/autocomplete/index.mjs +7 -0
  108. package/esm2020/components/autocomplete/lib/autocomplete.component.mjs +162 -0
  109. package/esm2020/components/autocomplete/lib/autocomplete.module.mjs +21 -0
  110. package/esm2020/components/autocomplete/lib/autocomplete.tokens.mjs +3 -0
  111. package/esm2020/components/autocomplete/lib/components/index.mjs +2 -0
  112. package/esm2020/components/autocomplete/lib/components/option/autocomplete-option.component.mjs +33 -0
  113. package/esm2020/components/autocomplete/lib/directives/autocomplete-search-field.directive.mjs +26 -0
  114. package/esm2020/components/autocomplete/lib/directives/index.mjs +2 -0
  115. package/esm2020/components/autocomplete/lib/pipes/autocomplete-search-filter.pipe.mjs +30 -0
  116. package/esm2020/components/autocomplete/lib/pipes/index.mjs +2 -0
  117. package/esm2020/components/autocomplete/odx-angular-components-autocomplete.mjs +5 -0
  118. package/esm2020/components/card/lib/card.component.mjs +2 -2
  119. package/esm2020/components/checkbox/lib/checkbox.component.mjs +2 -2
  120. package/esm2020/components/chip/index.mjs +2 -2
  121. package/esm2020/components/chip/lib/{chip.component.mjs → components/chip/chip.component.mjs} +2 -2
  122. package/esm2020/components/chip/lib/components/chip-list/chip-list.component.mjs +21 -0
  123. package/esm2020/components/chip/lib/components/chip-list-row/chip-list-row.component.mjs +21 -0
  124. package/esm2020/components/chip/lib/components/index.mjs +4 -0
  125. package/esm2020/components/dropdown/lib/dropdown.component.mjs +3 -3
  126. package/esm2020/components/dropdown/lib/dropdown.directive.mjs +10 -2
  127. package/esm2020/components/form-field/lib/components/form-group/form-group.component.mjs +3 -3
  128. package/esm2020/components/form-field/lib/form-field.component.mjs +3 -3
  129. package/esm2020/components/form-field/lib/form-field.service.mjs +2 -2
  130. package/esm2020/components/form-field/lib/models/form-field-variant.mjs +2 -1
  131. package/esm2020/components/main-menu/lib/directives/index.mjs +2 -1
  132. package/esm2020/components/main-menu/lib/directives/main-menu-close.directive.mjs +24 -0
  133. package/esm2020/components/main-menu/lib/directives/main-menu-item.directive.mjs +6 -12
  134. package/esm2020/components/main-menu/lib/main-menu.module.mjs +4 -4
  135. package/esm2020/components/main-menu/lib/main-menu.service.mjs +2 -11
  136. package/esm2020/components/menu/lib/directives/menu-item.directive.mjs +3 -3
  137. package/esm2020/components/menu/lib/menu.module.mjs +5 -4
  138. package/esm2020/components/rail-navigation/index.mjs +3 -2
  139. package/esm2020/components/rail-navigation/lib/components/index.mjs +2 -0
  140. package/esm2020/components/rail-navigation/lib/components/{rail-navigation-item.component.mjs → rail-navigation-item/rail-navigation-item.component.mjs} +3 -3
  141. package/esm2020/components/rail-navigation/lib/models/index.mjs +2 -0
  142. package/esm2020/components/rail-navigation/lib/models/rail-navigation-variant.mjs +5 -0
  143. package/esm2020/components/rail-navigation/lib/rail-navigation.component.mjs +19 -11
  144. package/esm2020/components/rail-navigation/lib/rail-navigation.module.mjs +4 -4
  145. package/esm2020/components/select/index.mjs +1 -2
  146. package/esm2020/components/select/lib/components/index.mjs +2 -2
  147. package/esm2020/components/select/lib/components/select-option/select-option.component.mjs +75 -0
  148. package/esm2020/components/select/lib/directives/select-search-field.directive.mjs +9 -21
  149. package/esm2020/components/select/lib/pipes/select-search-filter.pipe.mjs +12 -33
  150. package/esm2020/components/select/lib/select.component.mjs +44 -86
  151. package/esm2020/components/select/lib/select.module.mjs +5 -5
  152. package/esm2020/components/select/lib/select.tokens.mjs +2 -2
  153. package/esm2020/components/table/index.mjs +6 -0
  154. package/esm2020/components/table/lib/components/check-cell/check-cell.component.mjs +29 -0
  155. package/esm2020/components/table/lib/components/header-title/header-title.component.mjs +86 -0
  156. package/esm2020/components/table/lib/components/index.mjs +3 -0
  157. package/esm2020/components/table/lib/directives/index.mjs +3 -0
  158. package/esm2020/components/table/lib/directives/table-cell.directive.mjs +27 -0
  159. package/esm2020/components/table/lib/directives/table-row.directive.mjs +28 -0
  160. package/esm2020/components/table/lib/interfaces/index.mjs +4 -0
  161. package/esm2020/components/table/lib/models/index.mjs +3 -0
  162. package/esm2020/components/table/lib/models/sort-variant.mjs +6 -0
  163. package/esm2020/components/table/lib/models/table-variant.mjs +5 -0
  164. package/esm2020/components/table/lib/table.component.mjs +86 -0
  165. package/esm2020/components/table/lib/table.config.mjs +3 -0
  166. package/esm2020/components/table/lib/table.module.mjs +21 -0
  167. package/esm2020/components/table/odx-angular-components-table.mjs +5 -0
  168. package/esm2020/components/wizard/index.mjs +4 -0
  169. package/esm2020/components/wizard/lib/components/index.mjs +2 -0
  170. package/esm2020/components/wizard/lib/components/wizard-step/wizard-step.component.mjs +73 -0
  171. package/esm2020/components/wizard/lib/wizard.component.mjs +155 -0
  172. package/esm2020/components/wizard/lib/wizard.module.mjs +19 -0
  173. package/esm2020/components/wizard/odx-angular-components-wizard.mjs +5 -0
  174. package/esm2020/internal/decorators/css-component.mjs +1 -1
  175. package/esm2020/internal/decorators/css-modifier.mjs +16 -21
  176. package/esm2020/internal/helpers/get-css-variables.mjs +12 -19
  177. package/esm2020/lib/services/window-ref.mjs +4 -1
  178. package/fesm2015/odx-angular-breakpoints.mjs +111 -0
  179. package/fesm2015/odx-angular-breakpoints.mjs.map +1 -0
  180. package/fesm2015/odx-angular-cdk-autocomplete-control.mjs +164 -0
  181. package/fesm2015/odx-angular-cdk-autocomplete-control.mjs.map +1 -0
  182. package/fesm2015/odx-angular-cdk-expandable.mjs +4 -4
  183. package/fesm2015/odx-angular-cdk-expandable.mjs.map +1 -1
  184. package/fesm2015/odx-angular-cdk-option-control.mjs +55 -0
  185. package/fesm2015/odx-angular-cdk-option-control.mjs.map +1 -0
  186. package/fesm2015/odx-angular-components-autocomplete.mjs +263 -0
  187. package/fesm2015/odx-angular-components-autocomplete.mjs.map +1 -0
  188. package/fesm2015/odx-angular-components-card.mjs +1 -1
  189. package/fesm2015/odx-angular-components-card.mjs.map +1 -1
  190. package/fesm2015/odx-angular-components-checkbox.mjs +1 -1
  191. package/fesm2015/odx-angular-components-checkbox.mjs.map +1 -1
  192. package/fesm2015/odx-angular-components-chip.mjs +35 -5
  193. package/fesm2015/odx-angular-components-chip.mjs.map +1 -1
  194. package/fesm2015/odx-angular-components-dropdown.mjs +11 -3
  195. package/fesm2015/odx-angular-components-dropdown.mjs.map +1 -1
  196. package/fesm2015/odx-angular-components-form-field.mjs +5 -4
  197. package/fesm2015/odx-angular-components-form-field.mjs.map +1 -1
  198. package/fesm2015/odx-angular-components-main-menu.mjs +30 -24
  199. package/fesm2015/odx-angular-components-main-menu.mjs.map +1 -1
  200. package/fesm2015/odx-angular-components-menu.mjs +6 -5
  201. package/fesm2015/odx-angular-components-menu.mjs.map +1 -1
  202. package/fesm2015/odx-angular-components-rail-navigation.mjs +23 -11
  203. package/fesm2015/odx-angular-components-rail-navigation.mjs.map +1 -1
  204. package/fesm2015/odx-angular-components-select.mjs +80 -175
  205. package/fesm2015/odx-angular-components-select.mjs.map +1 -1
  206. package/fesm2015/odx-angular-components-table.mjs +264 -0
  207. package/fesm2015/odx-angular-components-table.mjs.map +1 -0
  208. package/fesm2015/odx-angular-components-wizard.mjs +242 -0
  209. package/fesm2015/odx-angular-components-wizard.mjs.map +1 -0
  210. package/fesm2015/odx-angular-internal.mjs +27 -40
  211. package/fesm2015/odx-angular-internal.mjs.map +1 -1
  212. package/fesm2015/odx-angular.mjs +3 -0
  213. package/fesm2015/odx-angular.mjs.map +1 -1
  214. package/fesm2020/odx-angular-breakpoints.mjs +117 -0
  215. package/fesm2020/odx-angular-breakpoints.mjs.map +1 -0
  216. package/fesm2020/odx-angular-cdk-autocomplete-control.mjs +160 -0
  217. package/fesm2020/odx-angular-cdk-autocomplete-control.mjs.map +1 -0
  218. package/fesm2020/odx-angular-cdk-expandable.mjs +4 -4
  219. package/fesm2020/odx-angular-cdk-expandable.mjs.map +1 -1
  220. package/fesm2020/odx-angular-cdk-option-control.mjs +54 -0
  221. package/fesm2020/odx-angular-cdk-option-control.mjs.map +1 -0
  222. package/fesm2020/odx-angular-components-autocomplete.mjs +254 -0
  223. package/fesm2020/odx-angular-components-autocomplete.mjs.map +1 -0
  224. package/fesm2020/odx-angular-components-card.mjs +1 -1
  225. package/fesm2020/odx-angular-components-card.mjs.map +1 -1
  226. package/fesm2020/odx-angular-components-checkbox.mjs +1 -1
  227. package/fesm2020/odx-angular-components-checkbox.mjs.map +1 -1
  228. package/fesm2020/odx-angular-components-chip.mjs +35 -5
  229. package/fesm2020/odx-angular-components-chip.mjs.map +1 -1
  230. package/fesm2020/odx-angular-components-dropdown.mjs +11 -3
  231. package/fesm2020/odx-angular-components-dropdown.mjs.map +1 -1
  232. package/fesm2020/odx-angular-components-form-field.mjs +5 -4
  233. package/fesm2020/odx-angular-components-form-field.mjs.map +1 -1
  234. package/fesm2020/odx-angular-components-main-menu.mjs +30 -24
  235. package/fesm2020/odx-angular-components-main-menu.mjs.map +1 -1
  236. package/fesm2020/odx-angular-components-menu.mjs +6 -5
  237. package/fesm2020/odx-angular-components-menu.mjs.map +1 -1
  238. package/fesm2020/odx-angular-components-rail-navigation.mjs +23 -11
  239. package/fesm2020/odx-angular-components-rail-navigation.mjs.map +1 -1
  240. package/fesm2020/odx-angular-components-select.mjs +77 -170
  241. package/fesm2020/odx-angular-components-select.mjs.map +1 -1
  242. package/fesm2020/odx-angular-components-table.mjs +259 -0
  243. package/fesm2020/odx-angular-components-table.mjs.map +1 -0
  244. package/fesm2020/odx-angular-components-wizard.mjs +239 -0
  245. package/fesm2020/odx-angular-components-wizard.mjs.map +1 -0
  246. package/fesm2020/odx-angular-internal.mjs +26 -38
  247. package/fesm2020/odx-angular-internal.mjs.map +1 -1
  248. package/fesm2020/odx-angular.mjs +3 -0
  249. package/fesm2020/odx-angular.mjs.map +1 -1
  250. package/internal/decorators/css-component.d.ts +1 -1
  251. package/internal/decorators/css-modifier.d.ts +2 -2
  252. package/internal/helpers/get-css-variables.d.ts +2 -3
  253. package/lib/services/window-ref.d.ts +1 -0
  254. package/package.json +52 -4
  255. package/components/select/lib/abstract/index.d.ts +0 -2
  256. package/components/select/lib/abstract/select-control-option.d.ts +0 -9
  257. package/components/select/lib/abstract/select-control.d.ts +0 -12
  258. package/components/select/lib/components/option/option.component.d.ts +0 -26
  259. package/esm2020/components/select/lib/abstract/index.mjs +0 -3
  260. package/esm2020/components/select/lib/abstract/select-control-option.mjs +0 -2
  261. package/esm2020/components/select/lib/abstract/select-control.mjs +0 -2
  262. package/esm2020/components/select/lib/components/option/option.component.mjs +0 -95
  263. /package/components/rail-navigation/lib/components/{rail-navigation-item.component.d.ts → rail-navigation-item/rail-navigation-item.component.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular.mjs","sources":["../../../../libs/angular/src/lib/controllers/controller.ts","../../../../libs/angular/src/lib/controllers/disabled.controller.ts","../../../../libs/angular/src/lib/controllers/readonly.controller.ts","../../../../libs/angular/src/lib/directives/click-outside.directive.ts","../../../../libs/angular/src/lib/directives/delegate-focus.directive.ts","../../../../libs/angular/src/lib/directives/with-disabled-state.directive.ts","../../../../libs/angular/src/lib/directives/with-tabindex.directive.ts","../../../../libs/angular/src/lib/core.module.ts","../../../../libs/angular/src/lib/services/window-ref.ts","../../../../libs/angular/src/lib/tokens/identity-matcher.ts","../../../../libs/angular/src/lib/tokens/string-search-handler.ts","../../../../libs/angular/src/lib/tokens/stringify.ts","../../../../libs/angular/src/odx-angular.ts"],"sourcesContent":["import { ChangeDetectorRef, Directive, inject, OnChanges, OnDestroy } from '@angular/core';\nimport { isPresent, pluckFromArray } from '@odx/angular/utils';\nimport { EMPTY, merge, Observable, shareReplay, Subject, tap } from 'rxjs';\n\nfunction controllerChanges(controllers: Array<Controller | undefined | null>): Observable<void> {\n const changes$ = pluckFromArray(controllers.filter(isPresent), 'change$');\n\n return changes$.length > 0 ? merge(...changes$) : EMPTY;\n}\n\nexport function detectControllerChanges(...controllers: Array<Controller | undefined | null>): Observable<void> {\n const changeDetector = inject(ChangeDetectorRef);\n\n return controllerChanges(controllers).pipe(tap(() => changeDetector.markForCheck()));\n}\n\n@Directive()\nexport abstract class Controller implements OnChanges, OnDestroy {\n private readonly change$$ = new Subject<void>();\n\n public readonly change$ = this.change$$.pipe(shareReplay({ refCount: true }));\n\n public static setup(controller: Controller | null, changeDetector: ChangeDetectorRef): Controller | null {\n controllerChanges([controller])\n .pipe(tap(() => changeDetector.markForCheck()))\n .subscribe();\n\n return controller;\n }\n\n public ngOnChanges(): void {\n this.triggerControllerChange();\n }\n\n public ngOnDestroy(): void {\n this.change$$.complete();\n }\n\n protected triggerControllerChange() {\n this.change$$.next();\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, forwardRef, Host, inject, InjectionToken, Input, Optional, Provider } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { Controller } from './controller';\n\nexport const DISABLED_CONTROLLER = new InjectionToken<DisabledController>('@odx/angular::DisabledWatchedController');\nexport const DISABLED_INTERNAL_CONTROLLER = new InjectionToken<DisabledController | null>('@odx/angular::DisabledController');\n\n@Directive({\n standalone: true,\n selector: '[disabled]',\n providers: [\n {\n provide: DISABLED_INTERNAL_CONTROLLER,\n useExisting: forwardRef(() => DisabledController),\n },\n ],\n})\nexport class DisabledController extends Controller {\n public static ngAcceptInputType_disabled: BooleanInput;\n\n private readonly parentController = inject(DISABLED_CONTROLLER, { optional: true, skipSelf: true });\n private isDisabled = false;\n\n public readonly isDisabled$ = this.change$.pipe(\n map(() => this.disabled),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n\n @Input()\n public set disabled(value: unknown) {\n this.isDisabled = coerceBooleanProperty(value);\n }\n\n public get disabled(): boolean {\n return this.isDisabled || !!this.parentController?.disabled;\n }\n\n public static inject(): DisabledController | null {\n return inject(DISABLED_CONTROLLER, { optional: true });\n }\n\n public static connect(): Provider[] {\n return [\n {\n provide: DISABLED_INTERNAL_CONTROLLER,\n useFactory: (hostController: DisabledController | null) => hostController ?? new DisabledController(),\n deps: [[new Optional(), new Host(), DisabledController]],\n },\n {\n provide: DISABLED_CONTROLLER,\n useFactory: Controller.setup,\n deps: [[new Optional(), new Host(), DISABLED_INTERNAL_CONTROLLER], ChangeDetectorRef],\n },\n ];\n }\n\n public setDisabledState(state: boolean): void {\n if (this.disabled !== state) {\n this.disabled = state;\n this.ngOnChanges();\n }\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, ElementRef, forwardRef, Host, inject, InjectionToken, Input, Optional, Provider } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { Controller } from './controller';\n\nconst ELEMENTS_WITH_READONLY_ATTRIBUTE = {\n input: true,\n textarea: true,\n select: true,\n} as Record<string, boolean>;\n\nexport const READONLY_CONTROLLER = new InjectionToken<ReadonlyController>('@odx/angular::ReadonlyWatchedController');\nexport const READONLY_INTERNAL_CONTROLLER = new InjectionToken<ReadonlyController | null>('@odx/angular::ReadonlyController');\n\n@Directive({\n standalone: true,\n selector: '[readonly]',\n providers: [\n {\n provide: READONLY_INTERNAL_CONTROLLER,\n useExisting: forwardRef(() => ReadonlyController),\n },\n ],\n host: {\n '[attr.readonly]': 'hasReadonlyAttribute || null',\n },\n})\nexport class ReadonlyController extends Controller {\n public static ngAcceptInputType_readonly: BooleanInput;\n\n private readonly parentController = inject(READONLY_CONTROLLER, { optional: true, skipSelf: true });\n private readonly nodeName: string;\n private isReadonly = false;\n\n protected hasReadonlyAttribute = false;\n\n public readonly isReadonly$ = this.change$.pipe(\n map(() => this.isReadonly),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n\n @Input()\n public set readonly(value: unknown) {\n const coercedValue = coerceBooleanProperty(value);\n if (this.isReadonly !== coercedValue) {\n this.isReadonly = coercedValue;\n this.hasReadonlyAttribute = this.isReadonly && ELEMENTS_WITH_READONLY_ATTRIBUTE[this.nodeName];\n }\n }\n public get readonly(): boolean {\n return this.isReadonly || !!this.parentController?.readonly;\n }\n\n constructor(element: ElementRef<HTMLElement> | null) {\n super();\n this.nodeName = element?.nativeElement.nodeName.toLowerCase() ?? '';\n }\n\n public static inject(): ReadonlyController | null {\n return inject(READONLY_CONTROLLER, { optional: true });\n }\n\n public static connect(): Provider {\n return [\n {\n provide: READONLY_INTERNAL_CONTROLLER,\n useFactory: (hostController: ReadonlyController | null, elementRef: ElementRef | null) => hostController ?? new ReadonlyController(elementRef),\n deps: [\n [new Optional(), new Host(), ReadonlyController],\n [new Optional(), ElementRef],\n ],\n },\n {\n provide: READONLY_CONTROLLER,\n useFactory: Controller.setup,\n deps: [[new Optional(), new Host(), READONLY_INTERNAL_CONTROLLER], ChangeDetectorRef],\n },\n ];\n }\n}\n","import { Directive, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\nimport { deferFn, injectElement, NgChanges } from '@odx/angular/utils';\nimport { debounceTime, NEVER, Observable, Subscription, switchMap, tap } from 'rxjs';\n\n@Directive({\n standalone: true,\n selector: '[odxClickOutside]',\n})\nexport class ClickOutsideDirective implements OnChanges, OnInit, OnDestroy {\n private listener?: Subscription;\n private readonly element = injectElement();\n private readonly renderer = inject(Renderer2);\n private readonly onOutsideClick$ = this.registerEventHandler('mousedown').pipe(\n switchMap((event) => {\n if (!this.odxClickOutsideActive) return NEVER;\n const hostElement = this.element.nativeElement;\n const targetElement = event.target as Element;\n const clickedOutside = hostElement.isConnected && targetElement.isConnected && !hostElement.contains(targetElement);\n return this.registerEventHandler('mouseup').pipe(\n debounceTime(0),\n tap(() => clickedOutside && this.odxClickOutside.emit(event))\n );\n })\n );\n\n @Input()\n public odxClickOutsideActive = true;\n\n @Output()\n public readonly odxClickOutside = new EventEmitter<Event>();\n\n public ngOnInit(): void {\n if (this.odxClickOutsideActive) {\n this.registerHandler();\n }\n }\n\n public ngOnChanges({ odxClickOutsideActive: clickOutsideActive }: NgChanges<ClickOutsideDirective>): void {\n if (!clickOutsideActive?.firstChange && clickOutsideActive?.previousValue !== clickOutsideActive?.currentValue) {\n if (clickOutsideActive?.currentValue) {\n this.registerHandler();\n } else {\n this.destroy();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private destroy() {\n if (this.listener) {\n this.listener.unsubscribe();\n this.listener = undefined;\n }\n }\n\n private registerHandler() {\n deferFn(() => {\n this.listener = this.onOutsideClick$.subscribe();\n });\n }\n\n private registerEventHandler<T extends Event>(eventName: string): Observable<T> {\n return new Observable<T>((subscriber) => {\n const listener = this.renderer.listen('document', eventName, (event: T) => {\n subscriber.next(event);\n });\n subscriber.add(listener);\n });\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({\n standalone: true,\n host: {\n '[attr.tabindex]': 'tabindex',\n },\n})\nexport class DelegateFocusDirective {\n protected tabindex = 0;\n\n @Output()\n public focused = new EventEmitter<void>();\n\n @HostListener('focus')\n protected handleFocus(): void {\n this.focused.next();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.tabindex = -1;\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.tabindex = 0;\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\nimport { booleanToOptionalAttributeString } from '@odx/angular/utils';\nimport { DisabledController } from '../controllers';\n\nconst ELEMENTS_WITH_DISABLED_ATTRIBUTE = {\n button: true,\n fieldset: true,\n input: true,\n optgroup: true,\n option: true,\n select: true,\n textarea: true,\n} as Record<string, boolean>;\n\n@Directive({\n standalone: true,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'isDisabled',\n '[attr.aria-disabled]': 'ariaDisabled',\n '[attr.disabled]': 'hasDisabledAttribute && isDisabled || null',\n },\n})\nexport class WithDisabledState {\n protected readonly hasAriaRole: boolean;\n protected readonly hasDisabledAttribute: boolean;\n protected readonly disabledController = DisabledController.inject();\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n public get ariaDisabled(): string | null {\n return booleanToOptionalAttributeString(this.hasAriaRole && this.isDisabled);\n }\n\n constructor(element: ElementRef<HTMLElement>) {\n this.hasDisabledAttribute = !!ELEMENTS_WITH_DISABLED_ATTRIBUTE[element.nativeElement.nodeName.toLowerCase() ?? ''];\n this.hasAriaRole = element.nativeElement.hasAttribute('role');\n }\n}\n","import { Directive } from '@angular/core';\nimport { DisabledController } from '../controllers';\n\n@Directive({\n standalone: true,\n host: {\n '[attr.tabindex]': 'isDisabled ? -1 : 0',\n },\n})\nexport class WithTabIndex {\n private readonly disabledController = DisabledController.inject();\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LetModule } from '@ngrx/component';\nimport { DisabledController, ReadonlyController } from './controllers';\nimport { ClickOutsideDirective } from './directives';\n\nconst controllers = [DisabledController, ReadonlyController];\nconst modules = [ClickOutsideDirective];\n\n@NgModule({\n imports: [...controllers, ...modules],\n exports: [CommonModule, LetModule, ...controllers, ...modules],\n})\nexport class CoreModule {}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, reflectComponentType, Type } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { debounceTime, distinctUntilChanged, EMPTY, filter, map, shareReplay, startWith } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WindowRef {\n private readonly title = inject(Title);\n public readonly nativeWindow = inject(DOCUMENT).defaultView ?? window;\n public readonly isOnline$ = fromEvents(this.nativeWindow, 'offline', 'online').pipe(\n startWith(null),\n map(() => this.isOnline()),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n public readonly pageTitle$ = (inject(Router, { optional: true })?.events ?? EMPTY).pipe(\n filter((event) => event instanceof NavigationEnd),\n startWith(null),\n debounceTime(0),\n map(() => this.title.getTitle()),\n shareReplay({ refCount: true })\n );\n\n public get location(): Location {\n return this.nativeWindow.location;\n }\n\n public isOnline(): boolean {\n return this.nativeWindow.navigator.onLine;\n }\n\n public getLanguage(): string {\n return this.nativeWindow.navigator.language;\n }\n\n public getOrigin(): string {\n return this.location.origin;\n }\n\n public reloadPage(): void {\n return this.location.reload();\n }\n\n public queryByComponent<T>(type: Type<T>): HTMLElement | null {\n const componentType = reflectComponentType(type);\n\n return componentType ? this.nativeWindow.document.querySelector(componentType.selector) : null;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type IdentityMatcher<T> = (item1: T, item2: T) => boolean;\n\nconst ODX_DEFAULT_IDENTITY_MATCHER: IdentityMatcher<unknown> = (item1, item2) => item1 === item2;\n\nexport const ODX_IDENTITY_MATCHER = new InjectionToken<IdentityMatcher<unknown>>('@odx/angular::StringHandler', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_IDENTITY_MATCHER,\n});\n","import { InjectionToken } from '@angular/core';\n\nexport type StringSearchHandler = (item: string, query: string) => boolean;\n\nconst ODX_DEFAULT_STRING_SEARCH_HANDLER: StringSearchHandler = (item, query) => {\n return item.toLocaleLowerCase().includes(query.toLocaleLowerCase());\n};\n\nexport const ODX_STRING_SEARCH_HANDLER = new InjectionToken<StringSearchHandler>('@odx/angular::StringHandler', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_STRING_SEARCH_HANDLER,\n});\n","import { InjectionToken } from '@angular/core';\nimport { isPresent } from '@odx/angular/utils';\n\nexport type StringifyFn<T> = (item: T) => string;\n\nconst ODX_DEFAULT_STRINGIFY: StringifyFn<unknown> = (item) => (isPresent(item) ? String(item) : '');\n\nexport const ODX_STRINGIFY = new InjectionToken<StringifyFn<unknown>>('@odx/angular::Stringify', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_STRINGIFY,\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular.mjs","sources":["../../../../libs/angular/src/lib/controllers/controller.ts","../../../../libs/angular/src/lib/controllers/disabled.controller.ts","../../../../libs/angular/src/lib/controllers/readonly.controller.ts","../../../../libs/angular/src/lib/directives/click-outside.directive.ts","../../../../libs/angular/src/lib/directives/delegate-focus.directive.ts","../../../../libs/angular/src/lib/directives/with-disabled-state.directive.ts","../../../../libs/angular/src/lib/directives/with-tabindex.directive.ts","../../../../libs/angular/src/lib/core.module.ts","../../../../libs/angular/src/lib/services/window-ref.ts","../../../../libs/angular/src/lib/tokens/identity-matcher.ts","../../../../libs/angular/src/lib/tokens/string-search-handler.ts","../../../../libs/angular/src/lib/tokens/stringify.ts","../../../../libs/angular/src/odx-angular.ts"],"sourcesContent":["import { ChangeDetectorRef, Directive, inject, OnChanges, OnDestroy } from '@angular/core';\nimport { isPresent, pluckFromArray } from '@odx/angular/utils';\nimport { EMPTY, merge, Observable, shareReplay, Subject, tap } from 'rxjs';\n\nfunction controllerChanges(controllers: Array<Controller | undefined | null>): Observable<void> {\n const changes$ = pluckFromArray(controllers.filter(isPresent), 'change$');\n\n return changes$.length > 0 ? merge(...changes$) : EMPTY;\n}\n\nexport function detectControllerChanges(...controllers: Array<Controller | undefined | null>): Observable<void> {\n const changeDetector = inject(ChangeDetectorRef);\n\n return controllerChanges(controllers).pipe(tap(() => changeDetector.markForCheck()));\n}\n\n@Directive()\nexport abstract class Controller implements OnChanges, OnDestroy {\n private readonly change$$ = new Subject<void>();\n\n public readonly change$ = this.change$$.pipe(shareReplay({ refCount: true }));\n\n public static setup(controller: Controller | null, changeDetector: ChangeDetectorRef): Controller | null {\n controllerChanges([controller])\n .pipe(tap(() => changeDetector.markForCheck()))\n .subscribe();\n\n return controller;\n }\n\n public ngOnChanges(): void {\n this.triggerControllerChange();\n }\n\n public ngOnDestroy(): void {\n this.change$$.complete();\n }\n\n protected triggerControllerChange() {\n this.change$$.next();\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, forwardRef, Host, inject, InjectionToken, Input, Optional, Provider } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { Controller } from './controller';\n\nexport const DISABLED_CONTROLLER = new InjectionToken<DisabledController>('@odx/angular::DisabledWatchedController');\nexport const DISABLED_INTERNAL_CONTROLLER = new InjectionToken<DisabledController | null>('@odx/angular::DisabledController');\n\n@Directive({\n standalone: true,\n selector: '[disabled]',\n providers: [\n {\n provide: DISABLED_INTERNAL_CONTROLLER,\n useExisting: forwardRef(() => DisabledController),\n },\n ],\n})\nexport class DisabledController extends Controller {\n public static ngAcceptInputType_disabled: BooleanInput;\n\n private readonly parentController = inject(DISABLED_CONTROLLER, { optional: true, skipSelf: true });\n private isDisabled = false;\n\n public readonly isDisabled$ = this.change$.pipe(\n map(() => this.disabled),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n\n @Input()\n public set disabled(value: unknown) {\n this.isDisabled = coerceBooleanProperty(value);\n }\n\n public get disabled(): boolean {\n return this.isDisabled || !!this.parentController?.disabled;\n }\n\n public static inject(): DisabledController | null {\n return inject(DISABLED_CONTROLLER, { optional: true });\n }\n\n public static connect(): Provider[] {\n return [\n {\n provide: DISABLED_INTERNAL_CONTROLLER,\n useFactory: (hostController: DisabledController | null) => hostController ?? new DisabledController(),\n deps: [[new Optional(), new Host(), DisabledController]],\n },\n {\n provide: DISABLED_CONTROLLER,\n useFactory: Controller.setup,\n deps: [[new Optional(), new Host(), DISABLED_INTERNAL_CONTROLLER], ChangeDetectorRef],\n },\n ];\n }\n\n public setDisabledState(state: boolean): void {\n if (this.disabled !== state) {\n this.disabled = state;\n this.ngOnChanges();\n }\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, ElementRef, forwardRef, Host, inject, InjectionToken, Input, Optional, Provider } from '@angular/core';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { Controller } from './controller';\n\nconst ELEMENTS_WITH_READONLY_ATTRIBUTE = {\n input: true,\n textarea: true,\n select: true,\n} as Record<string, boolean>;\n\nexport const READONLY_CONTROLLER = new InjectionToken<ReadonlyController>('@odx/angular::ReadonlyWatchedController');\nexport const READONLY_INTERNAL_CONTROLLER = new InjectionToken<ReadonlyController | null>('@odx/angular::ReadonlyController');\n\n@Directive({\n standalone: true,\n selector: '[readonly]',\n providers: [\n {\n provide: READONLY_INTERNAL_CONTROLLER,\n useExisting: forwardRef(() => ReadonlyController),\n },\n ],\n host: {\n '[attr.readonly]': 'hasReadonlyAttribute || null',\n },\n})\nexport class ReadonlyController extends Controller {\n public static ngAcceptInputType_readonly: BooleanInput;\n\n private readonly parentController = inject(READONLY_CONTROLLER, { optional: true, skipSelf: true });\n private readonly nodeName: string;\n private isReadonly = false;\n\n protected hasReadonlyAttribute = false;\n\n public readonly isReadonly$ = this.change$.pipe(\n map(() => this.isReadonly),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n\n @Input()\n public set readonly(value: unknown) {\n const coercedValue = coerceBooleanProperty(value);\n if (this.isReadonly !== coercedValue) {\n this.isReadonly = coercedValue;\n this.hasReadonlyAttribute = this.isReadonly && ELEMENTS_WITH_READONLY_ATTRIBUTE[this.nodeName];\n }\n }\n public get readonly(): boolean {\n return this.isReadonly || !!this.parentController?.readonly;\n }\n\n constructor(element: ElementRef<HTMLElement> | null) {\n super();\n this.nodeName = element?.nativeElement.nodeName.toLowerCase() ?? '';\n }\n\n public static inject(): ReadonlyController | null {\n return inject(READONLY_CONTROLLER, { optional: true });\n }\n\n public static connect(): Provider {\n return [\n {\n provide: READONLY_INTERNAL_CONTROLLER,\n useFactory: (hostController: ReadonlyController | null, elementRef: ElementRef | null) => hostController ?? new ReadonlyController(elementRef),\n deps: [\n [new Optional(), new Host(), ReadonlyController],\n [new Optional(), ElementRef],\n ],\n },\n {\n provide: READONLY_CONTROLLER,\n useFactory: Controller.setup,\n deps: [[new Optional(), new Host(), READONLY_INTERNAL_CONTROLLER], ChangeDetectorRef],\n },\n ];\n }\n}\n","import { Directive, EventEmitter, inject, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';\nimport { deferFn, injectElement, NgChanges } from '@odx/angular/utils';\nimport { debounceTime, NEVER, Observable, Subscription, switchMap, tap } from 'rxjs';\n\n@Directive({\n standalone: true,\n selector: '[odxClickOutside]',\n})\nexport class ClickOutsideDirective implements OnChanges, OnInit, OnDestroy {\n private listener?: Subscription;\n private readonly element = injectElement();\n private readonly renderer = inject(Renderer2);\n private readonly onOutsideClick$ = this.registerEventHandler('mousedown').pipe(\n switchMap((event) => {\n if (!this.odxClickOutsideActive) return NEVER;\n const hostElement = this.element.nativeElement;\n const targetElement = event.target as Element;\n const clickedOutside = hostElement.isConnected && targetElement.isConnected && !hostElement.contains(targetElement);\n return this.registerEventHandler('mouseup').pipe(\n debounceTime(0),\n tap(() => clickedOutside && this.odxClickOutside.emit(event))\n );\n })\n );\n\n @Input()\n public odxClickOutsideActive = true;\n\n @Output()\n public readonly odxClickOutside = new EventEmitter<Event>();\n\n public ngOnInit(): void {\n if (this.odxClickOutsideActive) {\n this.registerHandler();\n }\n }\n\n public ngOnChanges({ odxClickOutsideActive: clickOutsideActive }: NgChanges<ClickOutsideDirective>): void {\n if (!clickOutsideActive?.firstChange && clickOutsideActive?.previousValue !== clickOutsideActive?.currentValue) {\n if (clickOutsideActive?.currentValue) {\n this.registerHandler();\n } else {\n this.destroy();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n private destroy() {\n if (this.listener) {\n this.listener.unsubscribe();\n this.listener = undefined;\n }\n }\n\n private registerHandler() {\n deferFn(() => {\n this.listener = this.onOutsideClick$.subscribe();\n });\n }\n\n private registerEventHandler<T extends Event>(eventName: string): Observable<T> {\n return new Observable<T>((subscriber) => {\n const listener = this.renderer.listen('document', eventName, (event: T) => {\n subscriber.next(event);\n });\n subscriber.add(listener);\n });\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({\n standalone: true,\n host: {\n '[attr.tabindex]': 'tabindex',\n },\n})\nexport class DelegateFocusDirective {\n protected tabindex = 0;\n\n @Output()\n public focused = new EventEmitter<void>();\n\n @HostListener('focus')\n protected handleFocus(): void {\n this.focused.next();\n }\n\n @HostListener('focusin')\n protected handleFocusIn(): void {\n this.tabindex = -1;\n }\n\n @HostListener('focusout')\n protected handleFocusOut(): void {\n this.tabindex = 0;\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\nimport { booleanToOptionalAttributeString } from '@odx/angular/utils';\nimport { DisabledController } from '../controllers';\n\nconst ELEMENTS_WITH_DISABLED_ATTRIBUTE = {\n button: true,\n fieldset: true,\n input: true,\n optgroup: true,\n option: true,\n select: true,\n textarea: true,\n} as Record<string, boolean>;\n\n@Directive({\n standalone: true,\n providers: [DisabledController.connect()],\n host: {\n '[class.is-disabled]': 'isDisabled',\n '[attr.aria-disabled]': 'ariaDisabled',\n '[attr.disabled]': 'hasDisabledAttribute && isDisabled || null',\n },\n})\nexport class WithDisabledState {\n protected readonly hasAriaRole: boolean;\n protected readonly hasDisabledAttribute: boolean;\n protected readonly disabledController = DisabledController.inject();\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n\n public get ariaDisabled(): string | null {\n return booleanToOptionalAttributeString(this.hasAriaRole && this.isDisabled);\n }\n\n constructor(element: ElementRef<HTMLElement>) {\n this.hasDisabledAttribute = !!ELEMENTS_WITH_DISABLED_ATTRIBUTE[element.nativeElement.nodeName.toLowerCase() ?? ''];\n this.hasAriaRole = element.nativeElement.hasAttribute('role');\n }\n}\n","import { Directive } from '@angular/core';\nimport { DisabledController } from '../controllers';\n\n@Directive({\n standalone: true,\n host: {\n '[attr.tabindex]': 'isDisabled ? -1 : 0',\n },\n})\nexport class WithTabIndex {\n private readonly disabledController = DisabledController.inject();\n\n protected get isDisabled(): boolean {\n return !!this.disabledController?.disabled;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LetModule } from '@ngrx/component';\nimport { DisabledController, ReadonlyController } from './controllers';\nimport { ClickOutsideDirective } from './directives';\n\nconst controllers = [DisabledController, ReadonlyController];\nconst modules = [ClickOutsideDirective];\n\n@NgModule({\n imports: [...controllers, ...modules],\n exports: [CommonModule, LetModule, ...controllers, ...modules],\n})\nexport class CoreModule {}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, reflectComponentType, Type } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { fromEvents } from '@odx/angular/rxjs';\nimport { debounceTime, distinctUntilChanged, EMPTY, filter, map, shareReplay, startWith } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WindowRef {\n private readonly title = inject(Title);\n public readonly nativeWindow = inject(DOCUMENT).defaultView ?? window;\n public readonly isOnline$ = fromEvents(this.nativeWindow, 'offline', 'online').pipe(\n startWith(null),\n map(() => this.isOnline()),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n public readonly pageTitle$ = (inject(Router, { optional: true })?.events ?? EMPTY).pipe(\n filter((event) => event instanceof NavigationEnd),\n startWith(null),\n debounceTime(0),\n map(() => this.title.getTitle()),\n shareReplay({ refCount: true })\n );\n\n public get location(): Location {\n return this.nativeWindow.location;\n }\n\n public isOnline(): boolean {\n return this.nativeWindow.navigator.onLine;\n }\n\n public getLanguage(): string {\n return this.nativeWindow.navigator.language;\n }\n\n public getLanguageCode(): string {\n return this.getLanguage().split(/-|_/)[0].toLowerCase();\n }\n\n public getOrigin(): string {\n return this.location.origin;\n }\n\n public reloadPage(): void {\n return this.location.reload();\n }\n\n public queryByComponent<T>(type: Type<T>): HTMLElement | null {\n const componentType = reflectComponentType(type);\n\n return componentType ? this.nativeWindow.document.querySelector(componentType.selector) : null;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type IdentityMatcher<T> = (item1: T, item2: T) => boolean;\n\nconst ODX_DEFAULT_IDENTITY_MATCHER: IdentityMatcher<unknown> = (item1, item2) => item1 === item2;\n\nexport const ODX_IDENTITY_MATCHER = new InjectionToken<IdentityMatcher<unknown>>('@odx/angular::StringHandler', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_IDENTITY_MATCHER,\n});\n","import { InjectionToken } from '@angular/core';\n\nexport type StringSearchHandler = (item: string, query: string) => boolean;\n\nconst ODX_DEFAULT_STRING_SEARCH_HANDLER: StringSearchHandler = (item, query) => {\n return item.toLocaleLowerCase().includes(query.toLocaleLowerCase());\n};\n\nexport const ODX_STRING_SEARCH_HANDLER = new InjectionToken<StringSearchHandler>('@odx/angular::StringHandler', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_STRING_SEARCH_HANDLER,\n});\n","import { InjectionToken } from '@angular/core';\nimport { isPresent } from '@odx/angular/utils';\n\nexport type StringifyFn<T> = (item: T) => string;\n\nconst ODX_DEFAULT_STRINGIFY: StringifyFn<unknown> = (item) => (isPresent(item) ? String(item) : '');\n\nexport const ODX_STRINGIFY = new InjectionToken<StringifyFn<unknown>>('@odx/angular::Stringify', {\n providedIn: 'root',\n factory: () => ODX_DEFAULT_STRINGIFY,\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { createConfigTokens, untilDestroyed } from '@odx/angular/utils';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, Injectable, TemplateRef, ViewContainerRef, Directive, Input, NgModule } from '@angular/core';
4
+ import { coerceArray } from '@angular/cdk/coercion';
5
+ import { of, map, distinctUntilChanged, shareReplay, BehaviorSubject, switchMap, tap } from 'rxjs';
6
+ import { BreakpointObserver } from '@angular/cdk/layout';
7
+
8
+ function configureBreakpoint(name, min, max) {
9
+ return {
10
+ [`<${name}`]: `(max-width: ${min - 1}px)`,
11
+ [`=${name}`]: `(min-width: ${min}px) and (max-width: ${max - 1}px)`,
12
+ [`>${name}`]: `(min-width: ${min}px)`,
13
+ };
14
+ }
15
+
16
+ const DEFAULT_BREAKPOINTS = {
17
+ ...configureBreakpoint('phone-s', 360, 480),
18
+ ...configureBreakpoint('phone', 480, 768),
19
+ ...configureBreakpoint('tablet', 768, 960),
20
+ ...configureBreakpoint('desktop-s', 960, 1200),
21
+ ...configureBreakpoint('desktop', 1200, 9999),
22
+ };
23
+ const { BreakpointsConfig, BreakpointsDefaultConfig, injectBreakpointsConfig, provideBreakpointsConfig } = createConfigTokens('Breakpoints', '@odx/angular/breakpoints', {
24
+ breakpoints: DEFAULT_BREAKPOINTS,
25
+ });
26
+
27
+ class BreakpointsService {
28
+ constructor() {
29
+ this.breakpointObserver = inject(BreakpointObserver);
30
+ this.config = injectBreakpointsConfig();
31
+ }
32
+ observe(breakpoints) {
33
+ const mediaQueries = this.getMediaQueries(breakpoints);
34
+ return this.createBreakpointObserver(mediaQueries);
35
+ }
36
+ matches(breakpoints) {
37
+ const mediaQueries = this.getMediaQueries(breakpoints);
38
+ return this.breakpointObserver.isMatched(mediaQueries);
39
+ }
40
+ getMediaQueries(breakpointNames) {
41
+ return breakpointNames.map((name) => this.config.breakpoints[name]).filter(Boolean);
42
+ }
43
+ createBreakpointObserver(mediaQueries) {
44
+ if (mediaQueries.length < 1)
45
+ return of(false);
46
+ return this.breakpointObserver.observe(mediaQueries).pipe(map(({ matches }) => matches), distinctUntilChanged(), shareReplay({ refCount: true }));
47
+ }
48
+ }
49
+ BreakpointsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BreakpointsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
50
+ BreakpointsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BreakpointsService, providedIn: 'root' });
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BreakpointsService, decorators: [{
52
+ type: Injectable,
53
+ args: [{ providedIn: 'root' }]
54
+ }] });
55
+
56
+ class MatchBreakpointsDirective {
57
+ constructor() {
58
+ this.breakpoints$$ = new BehaviorSubject([]);
59
+ this.breakpointsService = inject(BreakpointsService);
60
+ this.takeUntilDestroyed = untilDestroyed();
61
+ this.template = inject(TemplateRef);
62
+ this.viewContainer = inject(ViewContainerRef);
63
+ // eslint-disable-next-line @angular-eslint/no-input-rename
64
+ this.elseTemplate = null;
65
+ }
66
+ set breakpoints(value) {
67
+ this.breakpoints$$.next(coerceArray(value ?? []));
68
+ }
69
+ ngOnInit() {
70
+ this.breakpoints$$
71
+ .pipe(switchMap((breakpoints) => this.breakpointsService.observe(breakpoints)), tap((matchesBreakpoints) => this.render(matchesBreakpoints)), this.takeUntilDestroyed())
72
+ .subscribe();
73
+ }
74
+ render(matchesBreakpoints) {
75
+ this.viewContainer.clear();
76
+ const template = matchesBreakpoints ? this.template : this.elseTemplate;
77
+ if (template) {
78
+ this.viewContainer.createEmbeddedView(template);
79
+ }
80
+ }
81
+ }
82
+ MatchBreakpointsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MatchBreakpointsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
83
+ MatchBreakpointsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: MatchBreakpointsDirective, isStandalone: true, selector: "ng-template[odxMatchBreakpoints]", inputs: { breakpoints: ["odxMatchBreakpoints", "breakpoints"], elseTemplate: ["odxMatchBreakpointsElse", "elseTemplate"] }, ngImport: i0 });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MatchBreakpointsDirective, decorators: [{
85
+ type: Directive,
86
+ args: [{
87
+ standalone: true,
88
+ selector: 'ng-template[odxMatchBreakpoints]',
89
+ }]
90
+ }], propDecorators: { breakpoints: [{
91
+ type: Input,
92
+ args: ['odxMatchBreakpoints']
93
+ }], elseTemplate: [{
94
+ type: Input,
95
+ args: ['odxMatchBreakpointsElse']
96
+ }] } });
97
+
98
+ const modules = [MatchBreakpointsDirective];
99
+ class BreakpointsModule {
100
+ }
101
+ BreakpointsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BreakpointsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
102
+ BreakpointsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: BreakpointsModule, imports: [MatchBreakpointsDirective], exports: [MatchBreakpointsDirective] });
103
+ BreakpointsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BreakpointsModule });
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BreakpointsModule, decorators: [{
105
+ type: NgModule,
106
+ args: [{
107
+ imports: modules,
108
+ exports: modules,
109
+ }]
110
+ }] });
111
+
112
+ /**
113
+ * Generated bundle index. Do not edit.
114
+ */
115
+
116
+ export { BreakpointsConfig, BreakpointsDefaultConfig, BreakpointsModule, BreakpointsService, DEFAULT_BREAKPOINTS, MatchBreakpointsDirective, configureBreakpoint, injectBreakpointsConfig, provideBreakpointsConfig };
117
+ //# sourceMappingURL=odx-angular-breakpoints.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odx-angular-breakpoints.mjs","sources":["../../../../libs/angular/breakpoints/src/lib/helpers/configure-breakpoint.ts","../../../../libs/angular/breakpoints/src/lib/breakpoints.config.ts","../../../../libs/angular/breakpoints/src/lib/breakpoints.service.ts","../../../../libs/angular/breakpoints/src/lib/directives/match-breakpoints.directive.ts","../../../../libs/angular/breakpoints/src/lib/breakpoints.module.ts","../../../../libs/angular/breakpoints/src/odx-angular-breakpoints.ts"],"sourcesContent":["type BreakpointOperators = '<' | '=' | '>';\ntype BreakpointConfig<T extends string> = Record<`${BreakpointOperators}${T}`, string>;\n\nexport function configureBreakpoint<T extends string>(name: T, min: number, max: number): BreakpointConfig<T> {\n return {\n [`<${name}` as const]: `(max-width: ${min - 1}px)`,\n [`=${name}` as const]: `(min-width: ${min}px) and (max-width: ${max - 1}px)`,\n [`>${name}` as const]: `(min-width: ${min}px)`,\n } as BreakpointConfig<T>;\n}\n","import { createConfigTokens } from '@odx/angular/utils';\nimport { configureBreakpoint } from './helpers/configure-breakpoint';\n\nexport const DEFAULT_BREAKPOINTS = {\n ...configureBreakpoint('phone-s', 360, 480),\n ...configureBreakpoint('phone', 480, 768),\n ...configureBreakpoint('tablet', 768, 960),\n ...configureBreakpoint('desktop-s', 960, 1200),\n ...configureBreakpoint('desktop', 1200, 9999),\n} as const;\n\nexport interface BreakpointsConfig {\n breakpoints: Partial<OdxAngular.Breakpoints>;\n}\n\nexport const { BreakpointsConfig, BreakpointsDefaultConfig, injectBreakpointsConfig, provideBreakpointsConfig } = createConfigTokens(\n 'Breakpoints',\n '@odx/angular/breakpoints',\n {\n breakpoints: DEFAULT_BREAKPOINTS,\n } as BreakpointsConfig\n);\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { inject, Injectable } from '@angular/core';\nimport { distinctUntilChanged, map, Observable, of, shareReplay } from 'rxjs';\nimport { injectBreakpointsConfig } from './breakpoints.config';\nimport { BreakpointName } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class BreakpointsService {\n private readonly breakpointObserver = inject(BreakpointObserver);\n private readonly config = injectBreakpointsConfig();\n\n public observe(breakpoints: BreakpointName[]): Observable<boolean> {\n const mediaQueries = this.getMediaQueries(breakpoints);\n\n return this.createBreakpointObserver(mediaQueries);\n }\n\n public matches(breakpoints: BreakpointName[]): boolean {\n const mediaQueries = this.getMediaQueries(breakpoints);\n\n return this.breakpointObserver.isMatched(mediaQueries);\n }\n\n private getMediaQueries(breakpointNames: BreakpointName[]): string[] {\n return breakpointNames.map((name) => this.config.breakpoints[name] as string).filter(Boolean);\n }\n\n private createBreakpointObserver(mediaQueries: string[]): Observable<boolean> {\n if (mediaQueries.length < 1) return of(false);\n\n return this.breakpointObserver.observe(mediaQueries).pipe(\n map(({ matches }) => matches),\n distinctUntilChanged(),\n shareReplay({ refCount: true })\n );\n }\n}\n","import { coerceArray } from '@angular/cdk/coercion';\nimport { Directive, inject, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { BehaviorSubject, switchMap, tap } from 'rxjs';\nimport { BreakpointsService } from '../breakpoints.service';\nimport { BreakpointName } from '../models';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxMatchBreakpoints]',\n})\nexport class MatchBreakpointsDirective implements OnInit {\n private readonly breakpoints$$ = new BehaviorSubject<BreakpointName[]>([]);\n private readonly breakpointsService = inject(BreakpointsService);\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly template = inject(TemplateRef);\n private readonly viewContainer = inject(ViewContainerRef);\n\n @Input('odxMatchBreakpoints')\n public set breakpoints(value: BreakpointName | BreakpointName[] | null | undefined) {\n this.breakpoints$$.next(coerceArray(value ?? []));\n }\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('odxMatchBreakpointsElse')\n public elseTemplate?: TemplateRef<unknown> | null = null;\n\n public ngOnInit(): void {\n this.breakpoints$$\n .pipe(\n switchMap((breakpoints) => this.breakpointsService.observe(breakpoints)),\n tap((matchesBreakpoints) => this.render(matchesBreakpoints)),\n this.takeUntilDestroyed()\n )\n .subscribe();\n }\n\n private render(matchesBreakpoints: boolean): void {\n this.viewContainer.clear();\n const template = matchesBreakpoints ? this.template : this.elseTemplate;\n if (template) {\n this.viewContainer.createEmbeddedView(template);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { MatchBreakpointsDirective } from './directives';\n\nconst modules = [MatchBreakpointsDirective];\n\n@NgModule({\n imports: modules,\n exports: modules,\n})\nexport class BreakpointsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, inject, ChangeDetectorRef, EventEmitter, ViewChild, Input, Output, HostListener } from '@angular/core';
3
+ import { untilDestroyed, injectElement, isFunction, Transform, Pure } from '@odx/angular/utils';
4
+ import { fromEvent, distinctUntilChanged, map } from 'rxjs';
5
+ import { __decorate, __metadata } from 'tslib';
6
+ import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
7
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
8
+ import { detectControllerChanges, ODX_STRING_SEARCH_HANDLER, ODX_STRINGIFY } from '@odx/angular';
9
+ import { CustomFormControl } from '@odx/angular/cdk/custom-form-control';
10
+ import { DropdownDirective } from '@odx/angular/components/dropdown';
11
+
12
+ class BaseSearchFieldDirective {
13
+ constructor() {
14
+ this.takeUntilDestroyed = untilDestroyed();
15
+ this.element = injectElement();
16
+ this.valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(distinctUntilChanged(), map(() => this.nativeElementValue), this.takeUntilDestroyed());
17
+ }
18
+ get nativeElementValue() {
19
+ return this.element.nativeElement.value;
20
+ }
21
+ set nativeElementValue(value) {
22
+ this.element.nativeElement.value = value;
23
+ }
24
+ focus() {
25
+ this.element.nativeElement.focus();
26
+ }
27
+ blur() {
28
+ this.element.nativeElement.blur();
29
+ }
30
+ reset() {
31
+ this.element.nativeElement.value = '';
32
+ }
33
+ }
34
+ BaseSearchFieldDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseSearchFieldDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
35
+ BaseSearchFieldDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: BaseSearchFieldDirective, isStandalone: true, host: { properties: { "class.odx-form-field-control": "true" } }, ngImport: i0 });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseSearchFieldDirective, decorators: [{
37
+ type: Directive,
38
+ args: [{
39
+ standalone: true,
40
+ host: {
41
+ '[class.odx-form-field-control]': 'true',
42
+ },
43
+ }]
44
+ }] });
45
+
46
+ class AutocompleteControl extends CustomFormControl {
47
+ get hasOptions() {
48
+ return !!this.options?.length;
49
+ }
50
+ get isOpen() {
51
+ return !!this.dropdown?.isOpen;
52
+ }
53
+ constructor() {
54
+ super(null);
55
+ this.smoothScrollEnabled = false;
56
+ this.takeUntilDestroyed = untilDestroyed();
57
+ this.changeDetector = inject(ChangeDetectorRef);
58
+ this.element = injectElement();
59
+ this.isLoading = false;
60
+ this.optionSelected = new EventEmitter();
61
+ detectControllerChanges(this).subscribe();
62
+ }
63
+ ngAfterViewInit() {
64
+ if (!this.options)
65
+ return;
66
+ this.initKeyManager(this.options);
67
+ this.handleQueryListOption(this.options);
68
+ this.handleSearchFieldChanges();
69
+ }
70
+ scrollOptionIntoView({ element }) {
71
+ const behavior = this.smoothScrollEnabled ? 'smooth' : undefined;
72
+ if (isFunction(element.nativeElement.scrollIntoView)) {
73
+ element.nativeElement.scrollIntoView({ block: 'center', behavior });
74
+ }
75
+ }
76
+ initKeyManager(options) {
77
+ this.keyManager = new ActiveDescendantKeyManager(options).withHomeAndEnd();
78
+ }
79
+ disableSmoothScroll() {
80
+ this.smoothScrollEnabled = false;
81
+ }
82
+ enableSmoothScroll() {
83
+ this.smoothScrollEnabled = true;
84
+ }
85
+ openDropdown() {
86
+ this.dropdown?.open();
87
+ }
88
+ closeDropdown() {
89
+ this.dropdown?.close();
90
+ }
91
+ handleFocusOut(event) {
92
+ if (this.isOpen) {
93
+ event.stopImmediatePropagation();
94
+ }
95
+ this.onTouched();
96
+ }
97
+ }
98
+ AutocompleteControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutocompleteControl, deps: [], target: i0.ɵɵFactoryTarget.Directive });
99
+ AutocompleteControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AutocompleteControl, isStandalone: true, inputs: { isLoading: "isLoading", stringify: "stringify" }, outputs: { optionSelected: "optionSelected" }, host: { listeners: { "focusout": "handleFocusOut($event)" }, properties: { "class.is-open": "isOpen", "attr.aria-disabled": "isDisabled || null" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: DropdownDirective, descendants: true }], usesInheritance: true, ngImport: i0 });
100
+ __decorate([
101
+ Transform(coerceBooleanProperty),
102
+ __metadata("design:type", Object)
103
+ ], AutocompleteControl.prototype, "isLoading", void 0);
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutocompleteControl, decorators: [{
105
+ type: Directive,
106
+ args: [{
107
+ standalone: true,
108
+ host: {
109
+ '[class.is-open]': 'isOpen',
110
+ '[attr.aria-disabled]': 'isDisabled || null',
111
+ },
112
+ }]
113
+ }], ctorParameters: function () { return []; }, propDecorators: { dropdown: [{
114
+ type: ViewChild,
115
+ args: [DropdownDirective]
116
+ }], isLoading: [{
117
+ type: Input
118
+ }], stringify: [{
119
+ type: Input
120
+ }], optionSelected: [{
121
+ type: Output
122
+ }], handleFocusOut: [{
123
+ type: HostListener,
124
+ args: ['focusout', ['$event']]
125
+ }] } });
126
+
127
+ class BaseSearchFilterPipe {
128
+ constructor() {
129
+ this.stringSearchHandler = inject(ODX_STRING_SEARCH_HANDLER);
130
+ this.stringify = inject(ODX_STRINGIFY);
131
+ }
132
+ transform(items, searchHandler) {
133
+ if (this.searchField) {
134
+ return this.filter(items, this.searchField.nativeElementValue, searchHandler);
135
+ }
136
+ return items;
137
+ }
138
+ filter(items, query, searchHandler) {
139
+ if (!items)
140
+ return null;
141
+ query = this.queryHandler(query);
142
+ if (query === '')
143
+ return items;
144
+ const search = searchHandler ?? this.stringSearchHandler;
145
+ return items.filter((item) => search(this.searchBy(item), query));
146
+ }
147
+ }
148
+ __decorate([
149
+ Pure,
150
+ __metadata("design:type", Function),
151
+ __metadata("design:paramtypes", [Object, String, Function]),
152
+ __metadata("design:returntype", Object)
153
+ ], BaseSearchFilterPipe.prototype, "filter", null);
154
+
155
+ /**
156
+ * Generated bundle index. Do not edit.
157
+ */
158
+
159
+ export { AutocompleteControl, BaseSearchFieldDirective, BaseSearchFilterPipe };
160
+ //# sourceMappingURL=odx-angular-cdk-autocomplete-control.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odx-angular-cdk-autocomplete-control.mjs","sources":["../../../../libs/angular/cdk/autocomplete-control/src/lib/abstract/base-search-field.directive.ts","../../../../libs/angular/cdk/autocomplete-control/src/lib/autocomplete-control.ts","../../../../libs/angular/cdk/autocomplete-control/src/lib/pipes/base-search-filter-pipe.ts","../../../../libs/angular/cdk/autocomplete-control/src/odx-angular-cdk-autocomplete-control.ts"],"sourcesContent":["import { Directive } from '@angular/core';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { distinctUntilChanged, fromEvent, map } from 'rxjs';\n\n@Directive({\n standalone: true,\n host: {\n '[class.odx-form-field-control]': 'true',\n },\n})\nexport abstract class BaseSearchFieldDirective {\n protected readonly takeUntilDestroyed = untilDestroyed();\n\n public readonly element = injectElement<HTMLInputElement>();\n\n public valueChange$ = fromEvent(this.element.nativeElement, 'input').pipe(\n distinctUntilChanged(),\n map(() => this.nativeElementValue),\n this.takeUntilDestroyed()\n );\n\n public get nativeElementValue(): string {\n return this.element.nativeElement.value;\n }\n\n public set nativeElementValue(value: string) {\n this.element.nativeElement.value = value;\n }\n\n public focus(): void {\n this.element.nativeElement.focus();\n }\n\n public blur(): void {\n this.element.nativeElement.blur();\n }\n\n public reset(): void {\n this.element.nativeElement.value = '';\n }\n}\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { AfterViewInit, ChangeDetectorRef, Directive, EventEmitter, HostListener, inject, Input, Output, QueryList, ViewChild } from '@angular/core';\nimport { detectControllerChanges, StringifyFn } from '@odx/angular';\nimport { CustomFormControl } from '@odx/angular/cdk/custom-form-control';\nimport { OptionControl } from '@odx/angular/cdk/option-control';\nimport { DropdownDirective } from '@odx/angular/components/dropdown';\nimport { injectElement, isFunction, Transform, untilDestroyed } from '@odx/angular/utils';\nimport { BaseSearchFieldDirective } from './abstract';\n\n@Directive({\n standalone: true,\n host: {\n '[class.is-open]': 'isOpen',\n '[attr.aria-disabled]': 'isDisabled || null',\n },\n})\nexport abstract class AutocompleteControl<T> extends CustomFormControl<T | null> implements AfterViewInit {\n public static ngAcceptInputType_isLoading: BooleanInput;\n\n protected keyManager?: ActiveDescendantKeyManager<OptionControl<T>>;\n\n protected smoothScrollEnabled = false;\n\n @ViewChild(DropdownDirective)\n protected readonly dropdown?: DropdownDirective;\n\n protected abstract readonly options?: QueryList<OptionControl<T>>;\n\n protected readonly takeUntilDestroyed = untilDestroyed();\n\n protected readonly changeDetector = inject(ChangeDetectorRef);\n\n public abstract searchField?: BaseSearchFieldDirective;\n\n public readonly element = injectElement();\n\n public get hasOptions(): boolean {\n return !!this.options?.length;\n }\n\n public get isOpen(): boolean {\n return !!this.dropdown?.isOpen;\n }\n\n @Transform(coerceBooleanProperty)\n @Input()\n public isLoading = false;\n\n @Input()\n public stringify?: StringifyFn<unknown>;\n\n @Output()\n public optionSelected = new EventEmitter<T>();\n\n constructor() {\n super(null);\n detectControllerChanges(this).subscribe();\n }\n\n public ngAfterViewInit(): void {\n if (!this.options) return;\n\n this.initKeyManager(this.options);\n this.handleQueryListOption(this.options);\n this.handleSearchFieldChanges();\n }\n\n public scrollOptionIntoView({ element }: OptionControl<T>): void {\n const behavior = this.smoothScrollEnabled ? 'smooth' : undefined;\n if (isFunction(element.nativeElement.scrollIntoView)) {\n element.nativeElement.scrollIntoView({ block: 'center', behavior });\n }\n }\n\n protected abstract handleQueryListOption(options: QueryList<OptionControl<T>>): void;\n\n protected abstract handleSearchFieldChanges(): void;\n\n protected abstract activateSelectedOption(): void;\n\n protected initKeyManager(options: QueryList<OptionControl<T>>): void {\n this.keyManager = new ActiveDescendantKeyManager(options).withHomeAndEnd();\n }\n\n protected disableSmoothScroll(): void {\n this.smoothScrollEnabled = false;\n }\n\n protected enableSmoothScroll(): void {\n this.smoothScrollEnabled = true;\n }\n\n protected openDropdown(): void {\n this.dropdown?.open();\n }\n\n protected closeDropdown(): void {\n this.dropdown?.close();\n }\n\n @HostListener('focusout', ['$event'])\n protected handleFocusOut(event: FocusEvent): void {\n if (this.isOpen) {\n event.stopImmediatePropagation();\n }\n this.onTouched();\n }\n}\n","import { inject } from '@angular/core';\nimport { ODX_STRINGIFY, ODX_STRING_SEARCH_HANDLER, StringifyFn, StringSearchHandler } from '@odx/angular';\nimport { Pure } from '@odx/angular/utils';\nimport { BaseSearchFieldDirective } from '../abstract';\n\nexport abstract class BaseSearchFilterPipe {\n private readonly stringSearchHandler = inject(ODX_STRING_SEARCH_HANDLER);\n protected readonly stringify = inject(ODX_STRINGIFY);\n\n public transform<T>(items: T[] | null, searchHandler?: StringSearchHandler): T[] | null {\n if (this.searchField) {\n return this.filter(items, this.searchField.nativeElementValue, searchHandler);\n }\n return items;\n }\n\n protected abstract get searchField(): BaseSearchFieldDirective | undefined;\n protected abstract get searchBy(): StringifyFn<unknown>;\n protected abstract queryHandler(query: string): string;\n\n @Pure\n private filter<T>(items: T[] | null, query: string, searchHandler?: StringSearchHandler): T[] | null {\n if (!items) return null;\n\n query = this.queryHandler(query);\n\n if (query === '') return items;\n\n const search = searchHandler ?? this.stringSearchHandler;\n\n return items.filter((item: T) => search(this.searchBy(item), query));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -26,14 +26,14 @@ class ExpandableItemDirective {
26
26
  get expanded() {
27
27
  return this._expanded;
28
28
  }
29
- toggle() {
30
- this.expanded = !this.expanded;
29
+ toggle(forceState) {
30
+ this.expanded = forceState ?? !this.expanded;
31
31
  }
32
32
  open() {
33
- this.expanded = true;
33
+ this.toggle(true);
34
34
  }
35
35
  close() {
36
- this.expanded = false;
36
+ this.toggle(false);
37
37
  }
38
38
  }
39
39
  ExpandableItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ExpandableItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
@@ -1 +1 @@
1
- {"version":3,"file":"odx-angular-cdk-expandable.mjs","sources":["../../../../libs/angular/cdk/expandable/src/lib/expandable.tokens.ts","../../../../libs/angular/cdk/expandable/src/lib/directives/expandable-item.directive.ts","../../../../libs/angular/cdk/expandable/src/lib/directives/extandable-container.directive.ts","../../../../libs/angular/cdk/expandable/src/lib/expandable.module.ts","../../../../libs/angular/cdk/expandable/src/odx-angular-cdk-expandable.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ExpandableContainer } from './facade';\n\nexport const EXPANDABLE_CONTAINER = new InjectionToken<ExpandableContainer>('@odx/angular/cdk/expandable::ExpandableContainer');\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, Input, inject } from '@angular/core';\nimport { getUniqueId } from '@odx/angular/utils';\nimport { EXPANDABLE_CONTAINER } from '../expandable.tokens';\nimport { ExpandableItem } from '../facade';\n\n@Directive({\n standalone: true,\n selector: '[odxExpandableItem]',\n})\nexport class ExpandableItemDirective implements ExpandableItem {\n public static ngAcceptInputType_expanded: BooleanInput;\n\n private readonly container = inject(EXPANDABLE_CONTAINER, { optional: true, skipSelf: true });\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private _expanded = false;\n\n public readonly id = getUniqueId('odx-expandable-item');\n\n @Input()\n public set expanded(value: boolean) {\n this._expanded = coerceBooleanProperty(value);\n if (this._expanded) {\n this.container?.open(this);\n } else {\n this.container?.close(this);\n }\n this.changeDetectorRef.markForCheck();\n }\n public get expanded(): boolean {\n return this._expanded;\n }\n\n public toggle(): void {\n this.expanded = !this.expanded;\n }\n\n public open(): void {\n this.expanded = true;\n }\n\n public close(): void {\n this.expanded = false;\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directive, Input } from '@angular/core';\nimport { Transform } from '@odx/angular/utils';\nimport { ExpandableContainer, ExpandableItem } from '../facade';\n\n@Directive({\n standalone: true,\n selector: '[odxExpandableContainer]',\n})\nexport class ExpandableContainerDirective implements ExpandableContainer {\n public static ngAcceptInputType_multiple: BooleanInput;\n\n private openItems: Record<string, ExpandableItem> = {};\n\n @Transform(coerceBooleanProperty)\n @Input()\n public multiple = false;\n\n public close(item: ExpandableItem): void {\n delete this.openItems[item.id];\n }\n\n public closeAll(): void {\n for (const item of Object.values(this.openItems)) {\n item.close();\n }\n }\n\n public open(item: ExpandableItem): void {\n if (!this.multiple) {\n this.closeAll();\n }\n this.openItems[item.id] = item;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ExpandableContainerDirective, ExpandableItemDirective } from './directives';\n\nconst modules = [ExpandableContainerDirective, ExpandableItemDirective];\n\n@NgModule({\n imports: modules,\n exports: modules,\n})\nexport class ExpandableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-angular-cdk-expandable.mjs","sources":["../../../../libs/angular/cdk/expandable/src/lib/expandable.tokens.ts","../../../../libs/angular/cdk/expandable/src/lib/directives/expandable-item.directive.ts","../../../../libs/angular/cdk/expandable/src/lib/directives/extandable-container.directive.ts","../../../../libs/angular/cdk/expandable/src/lib/expandable.module.ts","../../../../libs/angular/cdk/expandable/src/odx-angular-cdk-expandable.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { ExpandableContainer } from './facade';\n\nexport const EXPANDABLE_CONTAINER = new InjectionToken<ExpandableContainer>('@odx/angular/cdk/expandable::ExpandableContainer');\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectorRef, Directive, Input, inject } from '@angular/core';\nimport { getUniqueId } from '@odx/angular/utils';\nimport { EXPANDABLE_CONTAINER } from '../expandable.tokens';\nimport { ExpandableItem } from '../facade';\n\n@Directive({\n standalone: true,\n selector: '[odxExpandableItem]',\n})\nexport class ExpandableItemDirective implements ExpandableItem {\n public static ngAcceptInputType_expanded: BooleanInput;\n\n private readonly container = inject(EXPANDABLE_CONTAINER, { optional: true, skipSelf: true });\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private _expanded = false;\n\n public readonly id = getUniqueId('odx-expandable-item');\n\n @Input()\n public set expanded(value: boolean) {\n this._expanded = coerceBooleanProperty(value);\n if (this._expanded) {\n this.container?.open(this);\n } else {\n this.container?.close(this);\n }\n this.changeDetectorRef.markForCheck();\n }\n public get expanded(): boolean {\n return this._expanded;\n }\n\n public toggle(forceState?: boolean): void {\n this.expanded = forceState ?? !this.expanded;\n }\n\n public open(): void {\n this.toggle(true);\n }\n\n public close(): void {\n this.toggle(false);\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directive, Input } from '@angular/core';\nimport { Transform } from '@odx/angular/utils';\nimport { ExpandableContainer, ExpandableItem } from '../facade';\n\n@Directive({\n standalone: true,\n selector: '[odxExpandableContainer]',\n})\nexport class ExpandableContainerDirective implements ExpandableContainer {\n public static ngAcceptInputType_multiple: BooleanInput;\n\n private openItems: Record<string, ExpandableItem> = {};\n\n @Transform(coerceBooleanProperty)\n @Input()\n public multiple = false;\n\n public close(item: ExpandableItem): void {\n delete this.openItems[item.id];\n }\n\n public closeAll(): void {\n for (const item of Object.values(this.openItems)) {\n item.close();\n }\n }\n\n public open(item: ExpandableItem): void {\n if (!this.multiple) {\n this.closeAll();\n }\n this.openItems[item.id] = item;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ExpandableContainerDirective, ExpandableItemDirective } from './directives';\n\nconst modules = [ExpandableContainerDirective, ExpandableItemDirective];\n\n@NgModule({\n imports: modules,\n exports: modules,\n})\nexport class ExpandableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ChangeDetectorRef, Directive, Input, HostListener } from '@angular/core';
3
+ import { untilDestroyed, injectElement } from '@odx/angular/utils';
4
+
5
+ class OptionControl {
6
+ constructor() {
7
+ this.takeUntilDestroyed = untilDestroyed();
8
+ this.cdr = inject(ChangeDetectorRef);
9
+ this.isActive = false;
10
+ this.value = null;
11
+ this.element = injectElement();
12
+ }
13
+ setActiveStyles() {
14
+ this.isActive = true;
15
+ }
16
+ setInactiveStyles() {
17
+ this.isActive = false;
18
+ }
19
+ getLabel() {
20
+ return this.element.nativeElement.textContent?.trim() ?? '';
21
+ }
22
+ select(event) {
23
+ event.stopPropagation();
24
+ event.preventDefault();
25
+ this.selectOption();
26
+ }
27
+ }
28
+ OptionControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OptionControl, deps: [], target: i0.ɵɵFactoryTarget.Directive });
29
+ OptionControl.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: OptionControl, isStandalone: true, inputs: { value: "value" }, host: { attributes: { "role": "option" }, listeners: { "click": "select($event)" }, properties: { "class.odx-option": "true", "class.is-active": "isActive", "attr.aria-selected": "isSelected", "class.is-selected": "isSelected" } }, ngImport: i0 });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OptionControl, decorators: [{
31
+ type: Directive,
32
+ args: [{
33
+ standalone: true,
34
+ host: {
35
+ role: 'option',
36
+ '[class.odx-option]': 'true',
37
+ '[class.is-active]': 'isActive',
38
+ '[attr.aria-selected]': 'isSelected',
39
+ '[class.is-selected]': 'isSelected',
40
+ },
41
+ }]
42
+ }], propDecorators: { value: [{
43
+ type: Input
44
+ }], select: [{
45
+ type: HostListener,
46
+ args: ['click', ['$event']]
47
+ }] } });
48
+
49
+ /**
50
+ * Generated bundle index. Do not edit.
51
+ */
52
+
53
+ export { OptionControl };
54
+ //# sourceMappingURL=odx-angular-cdk-option-control.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odx-angular-cdk-option-control.mjs","sources":["../../../../libs/angular/cdk/option-control/src/lib/option-control.ts","../../../../libs/angular/cdk/option-control/src/odx-angular-cdk-option-control.ts"],"sourcesContent":["import { Highlightable } from '@angular/cdk/a11y';\nimport { ChangeDetectorRef, Directive, ElementRef, HostListener, inject, Input } from '@angular/core';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\n\n@Directive({\n standalone: true,\n host: {\n role: 'option',\n '[class.odx-option]': 'true',\n '[class.is-active]': 'isActive',\n '[attr.aria-selected]': 'isSelected',\n '[class.is-selected]': 'isSelected',\n },\n})\nexport abstract class OptionControl<T> implements Highlightable {\n protected readonly takeUntilDestroyed = untilDestroyed();\n protected readonly cdr = inject(ChangeDetectorRef);\n\n protected isActive = false;\n\n @Input()\n public value: T | null = null;\n\n public readonly element: ElementRef<HTMLElement> = injectElement();\n\n public setActiveStyles(): void {\n this.isActive = true;\n }\n\n public setInactiveStyles(): void {\n this.isActive = false;\n }\n\n public getLabel(): string {\n return this.element.nativeElement.textContent?.trim() ?? '';\n }\n\n protected abstract selectOption(): void;\n\n @HostListener('click', ['$event'])\n protected select(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n\n this.selectOption();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAcsB,aAAa,CAAA;AAVnC,IAAA,WAAA,GAAA;QAWqB,IAAkB,CAAA,kBAAA,GAAG,cAAc,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEzC,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAGpB,IAAK,CAAA,KAAA,GAAa,IAAI,CAAC;QAEd,IAAO,CAAA,OAAA,GAA4B,aAAa,EAAE,CAAC;AAuBpE,KAAA;IArBQ,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAEM,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;IAEM,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;KAC7D;AAKS,IAAA,MAAM,CAAC,KAAY,EAAA;QAC3B,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;;0GA/BmB,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;8FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,oBAAoB,EAAE,MAAM;AAC5B,wBAAA,mBAAmB,EAAE,UAAU;AAC/B,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,qBAAqB,EAAE,YAAY;AACpC,qBAAA;AACF,iBAAA,CAAA;8BAQQ,KAAK,EAAA,CAAA;sBADX,KAAK;gBAoBI,MAAM,EAAA,CAAA;sBADf,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ACvCnC;;AAEG;;;;"}