@bravobit/bb-foundation 0.21.6 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/auth/lib/auth.interceptor.d.ts +1 -1
  2. package/auth/lib/auth.module.d.ts +4 -5
  3. package/auth/lib/auth.service.d.ts +4 -7
  4. package/auth/lib/directives/abstract.directive.d.ts +12 -0
  5. package/auth/lib/directives/authenticated.directive.d.ts +7 -4
  6. package/auth/lib/directives/permission.directive.d.ts +11 -11
  7. package/auth/lib/guards/anonymous.guard.d.ts +8 -5
  8. package/auth/lib/guards/authenticated.guard.d.ts +8 -5
  9. package/auth/lib/guards/permission.guard.d.ts +15 -0
  10. package/auth/lib/interfaces/config.interface.d.ts +14 -8
  11. package/auth/lib/interfaces/permission.interface.d.ts +6 -0
  12. package/auth/lib/interfaces/provider.interface.d.ts +10 -3
  13. package/auth/lib/permissions/permissions.handler.d.ts +9 -0
  14. package/auth/lib/permissions/permissions.service.d.ts +16 -0
  15. package/auth/lib/providers/email.provider.d.ts +2 -8
  16. package/auth/lib/providers/verify.provider.d.ts +2 -6
  17. package/auth/public_api.d.ts +4 -4
  18. package/controls/lib/checkbox/checkbox/checkbox.component.d.ts +5 -1
  19. package/controls/lib/control-error/control-error/control-error.animation.d.ts +1 -0
  20. package/controls/lib/control-error/control-error/control-error.component.d.ts +17 -0
  21. package/controls/lib/control-error/control-error-submit.directive.d.ts +15 -0
  22. package/controls/lib/control-error/control-error.defaults.d.ts +2 -0
  23. package/controls/lib/control-error/control-error.interface.d.ts +12 -0
  24. package/controls/lib/control-error/control-error.module.d.ts +9 -0
  25. package/controls/lib/controls.interfaces.d.ts +4 -0
  26. package/controls/lib/controls.module.d.ts +7 -2
  27. package/controls/lib/form-control/form-control/form-control.component.d.ts +31 -0
  28. package/controls/lib/form-control/form-control-addon/form-control-addon.component.d.ts +6 -0
  29. package/controls/lib/form-control/form-control-input.directive.d.ts +35 -0
  30. package/controls/lib/form-control/form-control.module.d.ts +11 -0
  31. package/controls/public_api.d.ts +9 -0
  32. package/dashboard/lib/dashboard/dashboard.component.d.ts +2 -1
  33. package/dialog/lib/dialog-confirm/dialog-confirm.component.d.ts +10 -5
  34. package/dialog/lib/dialog-container/dialog-container.animations.d.ts +1 -0
  35. package/dialog/lib/dialog-container/dialog-container.component.d.ts +5 -7
  36. package/dialog/lib/dialog-header/dialog-header.component.d.ts +1 -3
  37. package/dialog/lib/dialog-modal/dialog-modal.component.d.ts +7 -3
  38. package/dialog/lib/dialog-overlay/dialog-overlay.animations.d.ts +1 -0
  39. package/dialog/lib/dialog-overlay/dialog-overlay.component.d.ts +5 -7
  40. package/dialog/lib/dialog.service.d.ts +4 -3
  41. package/elements/lib/directives/focus-trap.directive.d.ts +1 -1
  42. package/elements/lib/directives/focus.directive.d.ts +1 -3
  43. package/elements/lib/pipes/file-image.pipe.d.ts +2 -1
  44. package/esm2020/auth/lib/auth.interceptor.mjs +9 -12
  45. package/esm2020/auth/lib/auth.module.mjs +7 -17
  46. package/esm2020/auth/lib/auth.service.mjs +29 -55
  47. package/esm2020/auth/lib/directives/abstract.directive.mjs +40 -0
  48. package/esm2020/auth/lib/directives/authenticated.directive.mjs +25 -14
  49. package/esm2020/auth/lib/directives/permission.directive.mjs +24 -46
  50. package/esm2020/auth/lib/guards/anonymous.guard.mjs +28 -19
  51. package/esm2020/auth/lib/guards/authenticated.guard.mjs +31 -20
  52. package/esm2020/auth/lib/guards/permission.guard.mjs +53 -0
  53. package/esm2020/auth/lib/helpers/jwt.helper.mjs +7 -7
  54. package/esm2020/auth/lib/interfaces/config.interface.mjs +1 -1
  55. package/esm2020/auth/lib/interfaces/permission.interface.mjs +2 -0
  56. package/esm2020/auth/lib/interfaces/provider.interface.mjs +1 -1
  57. package/esm2020/auth/lib/permissions/permissions.handler.mjs +33 -0
  58. package/esm2020/auth/lib/permissions/permissions.service.mjs +64 -0
  59. package/esm2020/auth/lib/providers/email.provider.mjs +8 -9
  60. package/esm2020/auth/lib/providers/verify.provider.mjs +8 -5
  61. package/esm2020/auth/public_api.mjs +5 -5
  62. package/esm2020/collections/lib/collections.module.mjs +4 -4
  63. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +3 -3
  64. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +3 -3
  65. package/esm2020/collections/lib/components/collections.directive.mjs +12 -12
  66. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +19 -6
  67. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +4 -4
  68. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +4 -4
  69. package/esm2020/controls/lib/control-error/control-error/control-error.animation.mjs +14 -0
  70. package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +63 -0
  71. package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +47 -0
  72. package/esm2020/controls/lib/control-error/control-error.defaults.mjs +26 -0
  73. package/esm2020/controls/lib/control-error/control-error.interface.mjs +3 -0
  74. package/esm2020/controls/lib/control-error/control-error.module.mjs +19 -0
  75. package/esm2020/controls/lib/controls.interfaces.mjs +2 -0
  76. package/esm2020/controls/lib/controls.module.mjs +45 -8
  77. package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +94 -0
  78. package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +22 -0
  79. package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +124 -0
  80. package/esm2020/controls/lib/form-control/form-control.module.mjs +33 -0
  81. package/esm2020/controls/public_api.mjs +10 -1
  82. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +7 -6
  83. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +3 -3
  84. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +3 -3
  85. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +3 -3
  86. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +3 -3
  87. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +3 -3
  88. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +3 -3
  89. package/esm2020/dashboard/lib/dashboard.module.mjs +4 -4
  90. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
  91. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +17 -11
  92. package/esm2020/dialog/lib/dialog-container/dialog-container.animations.mjs +29 -0
  93. package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +28 -104
  94. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +7 -14
  95. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +4 -4
  96. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +29 -8
  97. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.animations.mjs +26 -0
  98. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +29 -84
  99. package/esm2020/dialog/lib/dialog.insertion.mjs +3 -3
  100. package/esm2020/dialog/lib/dialog.module.mjs +4 -4
  101. package/esm2020/dialog/lib/dialog.service.mjs +8 -7
  102. package/esm2020/elements/lib/avatar/avatar.component.mjs +8 -6
  103. package/esm2020/elements/lib/button/button.component.mjs +6 -6
  104. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +3 -3
  105. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +3 -3
  106. package/esm2020/elements/lib/directives/addon.directive.mjs +6 -6
  107. package/esm2020/elements/lib/directives/autosize.directive.mjs +3 -3
  108. package/esm2020/elements/lib/directives/focus-trap.directive.mjs +5 -5
  109. package/esm2020/elements/lib/directives/focus.directive.mjs +7 -9
  110. package/esm2020/elements/lib/directives/form-submit.directive.mjs +3 -3
  111. package/esm2020/elements/lib/directives/form-submitter.directive.mjs +3 -3
  112. package/esm2020/elements/lib/directives/input.directive.mjs +6 -6
  113. package/esm2020/elements/lib/directives/template.directive.mjs +3 -3
  114. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +6 -6
  115. package/esm2020/elements/lib/elements.module.mjs +4 -4
  116. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +3 -3
  117. package/esm2020/elements/lib/form-control/form-control.component.mjs +3 -3
  118. package/esm2020/elements/lib/form-error/form-error.component.mjs +3 -3
  119. package/esm2020/elements/lib/form-group/form-group.component.mjs +3 -3
  120. package/esm2020/elements/lib/icon/icon.component.mjs +3 -3
  121. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +3 -3
  122. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +8 -7
  123. package/esm2020/elements/lib/pipes/file-size.pipe.mjs +3 -3
  124. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +3 -3
  125. package/esm2020/elements/lib/spinner/spinner.component.mjs +3 -3
  126. package/esm2020/elements/lib/tag/tag.component.mjs +3 -3
  127. package/esm2020/http/lib/http.module.mjs +4 -4
  128. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +3 -3
  129. package/esm2020/http/lib/interceptors/error.interceptor.mjs +3 -3
  130. package/esm2020/lib/core/services/clipboard.service.mjs +5 -5
  131. package/esm2020/lib/core/services/exif.service.mjs +5 -5
  132. package/esm2020/lib/core/services/file-loader.service.mjs +3 -3
  133. package/esm2020/lib/core/services/image-converter.service.mjs +5 -5
  134. package/esm2020/lib/core/services/languages.service.mjs +3 -3
  135. package/esm2020/lib/core/services/network.service.mjs +7 -7
  136. package/esm2020/lib/core/services/patch.service.mjs +7 -7
  137. package/esm2020/localize/lib/localize.module.mjs +4 -4
  138. package/esm2020/localize/lib/localize.pipe.mjs +3 -3
  139. package/esm2020/localize/lib/localize.service.mjs +5 -5
  140. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +3 -3
  141. package/esm2020/localize/lib/views/localize-template-or-string.directive.mjs +3 -3
  142. package/esm2020/localize/lib/views/localize-template.directive.mjs +3 -3
  143. package/esm2020/masking/lib/directives/currency-mask.directive.mjs +3 -3
  144. package/esm2020/masking/lib/directives/date-mask.directive.mjs +3 -3
  145. package/esm2020/masking/lib/directives/input-mask.directive.mjs +3 -3
  146. package/esm2020/masking/lib/masking.module.mjs +4 -4
  147. package/esm2020/masking/lib/masking.service.mjs +3 -3
  148. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +5 -5
  149. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +7 -7
  150. package/esm2020/notifications/lib/notifications.module.mjs +4 -4
  151. package/esm2020/notifications/lib/notifications.service.mjs +5 -5
  152. package/esm2020/public_api.mjs +1 -2
  153. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +3 -3
  154. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +10 -10
  155. package/esm2020/recaptcha/lib/recaptcha.module.mjs +4 -4
  156. package/esm2020/storage/lib/storage.service.mjs +5 -5
  157. package/esm2020/table/lib/components/table/table.component.mjs +9 -9
  158. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +3 -3
  159. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +3 -3
  160. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +3 -3
  161. package/esm2020/table/lib/table.module.mjs +4 -4
  162. package/esm2020/theming/lib/themes/checkbox-group.theme.mjs +17 -2
  163. package/esm2020/theming/lib/themes/checkbox.theme.mjs +35 -2
  164. package/esm2020/theming/lib/themes/control-error.theme.mjs +11 -0
  165. package/esm2020/theming/lib/themes/form-control-addon.theme.mjs +6 -0
  166. package/esm2020/theming/lib/themes/form-control.theme.mjs +45 -0
  167. package/esm2020/theming/lib/theming.data.mjs +82 -0
  168. package/esm2020/theming/lib/theming.directive.mjs +38 -0
  169. package/esm2020/theming/lib/theming.interface.mjs +2 -3
  170. package/esm2020/theming/lib/theming.module.mjs +12 -34
  171. package/esm2020/theming/lib/utils/theming.variable.mjs +41 -0
  172. package/esm2020/theming/public_api.mjs +6 -3
  173. package/fesm2015/bravobit-bb-foundation-auth.mjs +326 -284
  174. package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -1
  175. package/fesm2015/bravobit-bb-foundation-collections.mjs +22 -22
  176. package/fesm2015/bravobit-bb-foundation-controls.mjs +493 -24
  177. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -1
  178. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +29 -28
  179. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  180. package/fesm2015/bravobit-bb-foundation-dialog.mjs +185 -233
  181. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -1
  182. package/fesm2015/bravobit-bb-foundation-elements.mjs +99 -97
  183. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -1
  184. package/fesm2015/bravobit-bb-foundation-http.mjs +10 -10
  185. package/fesm2015/bravobit-bb-foundation-localize.mjs +20 -20
  186. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -1
  187. package/fesm2015/bravobit-bb-foundation-masking.mjs +16 -16
  188. package/fesm2015/bravobit-bb-foundation-notifications.mjs +18 -17
  189. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -1
  190. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +16 -16
  191. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  192. package/fesm2015/bravobit-bb-foundation-storage.mjs +4 -4
  193. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -1
  194. package/fesm2015/bravobit-bb-foundation-table.mjs +22 -22
  195. package/fesm2015/bravobit-bb-foundation-theming.mjs +251 -128
  196. package/fesm2015/bravobit-bb-foundation-theming.mjs.map +1 -1
  197. package/fesm2015/bravobit-bb-foundation.mjs +33 -73
  198. package/fesm2015/bravobit-bb-foundation.mjs.map +1 -1
  199. package/fesm2020/bravobit-bb-foundation-auth.mjs +306 -277
  200. package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -1
  201. package/fesm2020/bravobit-bb-foundation-collections.mjs +22 -22
  202. package/fesm2020/bravobit-bb-foundation-controls.mjs +477 -24
  203. package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -1
  204. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +29 -28
  205. package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  206. package/fesm2020/bravobit-bb-foundation-dialog.mjs +175 -233
  207. package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -1
  208. package/fesm2020/bravobit-bb-foundation-elements.mjs +99 -97
  209. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -1
  210. package/fesm2020/bravobit-bb-foundation-http.mjs +10 -10
  211. package/fesm2020/bravobit-bb-foundation-localize.mjs +20 -20
  212. package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -1
  213. package/fesm2020/bravobit-bb-foundation-masking.mjs +16 -16
  214. package/fesm2020/bravobit-bb-foundation-notifications.mjs +17 -17
  215. package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -1
  216. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +16 -16
  217. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  218. package/fesm2020/bravobit-bb-foundation-storage.mjs +4 -4
  219. package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -1
  220. package/fesm2020/bravobit-bb-foundation-table.mjs +22 -22
  221. package/fesm2020/bravobit-bb-foundation-theming.mjs +252 -120
  222. package/fesm2020/bravobit-bb-foundation-theming.mjs.map +1 -1
  223. package/fesm2020/bravobit-bb-foundation.mjs +32 -70
  224. package/fesm2020/bravobit-bb-foundation.mjs.map +1 -1
  225. package/lib/core/services/clipboard.service.d.ts +2 -2
  226. package/lib/core/services/exif.service.d.ts +1 -1
  227. package/lib/core/services/image-converter.service.d.ts +1 -1
  228. package/lib/core/services/network.service.d.ts +4 -4
  229. package/lib/core/services/patch.service.d.ts +4 -4
  230. package/localize/lib/localize.service.d.ts +1 -1
  231. package/notifications/lib/notifications-item/notifications-item.component.d.ts +1 -1
  232. package/notifications/lib/notifications.service.d.ts +1 -1
  233. package/package.json +4 -4
  234. package/public_api.d.ts +0 -1
  235. package/recaptcha/lib/recaptcha-loader.service.d.ts +3 -3
  236. package/storage/lib/storage.service.d.ts +1 -1
  237. package/theming/lib/themes/checkbox-group.theme.d.ts +14 -3
  238. package/theming/lib/themes/checkbox.theme.d.ts +30 -17
  239. package/theming/lib/themes/control-error.theme.d.ts +9 -0
  240. package/theming/lib/themes/form-control-addon.theme.d.ts +5 -0
  241. package/theming/lib/themes/form-control.theme.d.ts +32 -0
  242. package/theming/lib/theming.data.d.ts +17 -0
  243. package/theming/lib/theming.directive.d.ts +13 -0
  244. package/theming/lib/theming.interface.d.ts +19 -8
  245. package/theming/lib/theming.module.d.ts +3 -9
  246. package/theming/lib/utils/theming.variable.d.ts +16 -0
  247. package/theming/public_api.d.ts +5 -2
  248. package/auth/lib/directives/role.directive.d.ts +0 -16
  249. package/auth/lib/helpers/mapper.helper.d.ts +0 -23
  250. package/auth/lib/interfaces/mapper.interface.d.ts +0 -19
  251. package/auth/lib/permissions.service.d.ts +0 -14
  252. package/esm2020/auth/lib/directives/role.directive.mjs +0 -37
  253. package/esm2020/auth/lib/helpers/mapper.helper.mjs +0 -35
  254. package/esm2020/auth/lib/interfaces/mapper.interface.mjs +0 -2
  255. package/esm2020/auth/lib/permissions.service.mjs +0 -56
  256. package/esm2020/lib/core/services/platform.service.mjs +0 -42
  257. package/esm2020/theming/lib/themes/theme.mjs +0 -34
  258. package/esm2020/theming/lib/theming.service.mjs +0 -77
  259. package/lib/core/services/platform.service.d.ts +0 -18
  260. package/theming/lib/themes/theme.d.ts +0 -12
  261. package/theming/lib/theming.service.d.ts +0 -22
@@ -1,154 +1,286 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Optional, Inject, APP_INITIALIZER, NgModule, SkipSelf } from '@angular/core';
3
- import { DOCUMENT } from '@angular/common';
2
+ import { RendererStyleFlags2, Directive, Input, NgModule } from '@angular/core';
4
3
 
5
- class ThemingOptions {
6
- }
7
-
8
- class Theming {
9
- constructor(_options, _rendererFactory, _document) {
10
- this._options = _options;
11
- this._rendererFactory = _rendererFactory;
12
- this._document = _document;
13
- // Readonly data.
14
- this._attribute = 'data-theme';
15
- this._renderer = this._rendererFactory.createRenderer(null, null);
16
- // State.
17
- this._currentTheme = null;
18
- this.setCssVariables();
19
- this.setFirstTheme();
20
- }
21
- get all() {
22
- return this._options?.themes ?? [];
4
+ class BbiTheming {
5
+ constructor(_renderer, _elementRef) {
6
+ this._renderer = _renderer;
7
+ this._elementRef = _elementRef;
8
+ // Cache.
9
+ this._theme = null;
23
10
  }
24
- get current() {
25
- return this._currentTheme ?? null;
11
+ // Inputs.
12
+ set theme(theme) {
13
+ this._theme = theme;
14
+ this.setTheme();
26
15
  }
27
- set(name) {
28
- const theme = this.all?.find(theme => theme?.name === name);
29
- if (!theme) {
30
- throw new Error('Invalid theme.');
31
- }
32
- const document = this._document.documentElement;
33
- if (!document) {
34
- return;
35
- }
36
- this._renderer.setAttribute(document, this._attribute, name);
37
- this._currentTheme = theme;
38
- }
39
- setCssVariables() {
40
- const style = this._renderer.createElement('style');
41
- this._renderer.setAttribute(style, 'id', 'theming-style');
42
- const variables = this.getCssVariables();
43
- this._renderer.setProperty(style, 'innerHTML', variables);
44
- const head = this._document?.head ?? null;
45
- if (!head) {
16
+ setTheme() {
17
+ if (!this._theme) {
46
18
  return;
47
19
  }
48
- this._renderer.appendChild(this._document?.head, style);
49
- }
50
- getCssVariables() {
51
- return this.all
52
- .map(theme => `:root[${this._attribute}="${theme?.name}"] {${this.getThemeContents(theme)}}`)
53
- .join('\n');
54
- }
55
- getThemeContents(theme) {
56
- const themeData = theme?.data ?? {};
57
- return Object.keys(themeData)
58
- .map(key => `${key}: ${themeData?.[key]};`)
59
- .join(' ');
60
- }
61
- setFirstTheme() {
62
- const theme = this.all?.[0] ?? null;
63
- if (!theme) {
64
- throw new Error('No theme found.');
20
+ const variables = this._theme.variables();
21
+ const element = this._elementRef.nativeElement;
22
+ for (const key in variables) {
23
+ const value = variables?.[key];
24
+ this._renderer.setStyle(element, key, value, RendererStyleFlags2.DashCase);
65
25
  }
66
- const themeName = theme?.name ?? null;
67
- return this.set(themeName);
68
26
  }
69
27
  }
70
- Theming.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: Theming, deps: [{ token: ThemingOptions }, { token: i0.RendererFactory2 }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
71
- Themingprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: Theming });
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: Theming, decorators: [{
73
- type: Injectable
74
- }], ctorParameters: function () { return [{ type: ThemingOptions }, { type: i0.RendererFactory2 }, { type: Document, decorators: [{
75
- type: Optional
76
- }, {
77
- type: Inject,
78
- args: [DOCUMENT]
79
- }] }]; } });
28
+ BbiTheming.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiTheming, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
29
+ BbiThemingdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: BbiTheming, selector: "[bbiTheming]", inputs: { theme: ["bbiTheming", "theme"] }, ngImport: i0 });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbiTheming, decorators: [{
31
+ type: Directive,
32
+ args: [{
33
+ selector: '[bbiTheming]'
34
+ }]
35
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { theme: [{
36
+ type: Input,
37
+ args: ['bbiTheming']
38
+ }] } });
80
39
 
81
- class ThemingModule {
82
- constructor(_parent) {
83
- this._parent = _parent;
84
- if (this._parent) {
85
- throw new Error('ThemingModule is already loaded; Import it in the core module only.');
40
+ function formControlAddonThemeFactory() {
41
+ return {
42
+ spacing: '10px'
43
+ };
44
+ }
45
+
46
+ function checkboxGroupThemeFactory() {
47
+ return {
48
+ grouping: '20px',
49
+ label: {
50
+ color: '#525252',
51
+ offset: '4px',
52
+ fontSize: '14px',
53
+ fontWeight: '400',
54
+ lineHeight: '1.33'
55
+ },
56
+ spacing: {
57
+ horizontal: '10px',
58
+ vertical: '4px'
86
59
  }
60
+ };
61
+ }
62
+
63
+ class ThemeVariableFunction {
64
+ constructor(_key) {
65
+ this._key = _key;
87
66
  }
88
- static forRoot(options) {
89
- return {
90
- ngModule: ThemingModule,
91
- providers: [
92
- Theming,
93
- { provide: APP_INITIALIZER, deps: [Theming], useFactory: initializeTheme, multi: true },
94
- { provide: ThemingOptions, useValue: options }
95
- ]
96
- };
67
+ toString(variables) {
68
+ const value = variables?.[this._key] ?? null;
69
+ if (!value) {
70
+ throw new Error(`Invalid variable key "${this._key}"`);
71
+ }
72
+ return !!value ? this.format(value) : null;
97
73
  }
98
74
  }
99
- ThemingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ThemingModule, deps: [{ token: ThemingModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
100
- ThemingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.5", ngImport: i0, type: ThemingModule });
101
- ThemingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ThemingModule });
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ThemingModule, decorators: [{
103
- type: NgModule,
104
- args: [{}]
105
- }], ctorParameters: function () { return [{ type: ThemingModule, decorators: [{
106
- type: Optional
107
- }, {
108
- type: SkipSelf
109
- }] }]; } });
110
- function initializeTheme(_) {
111
- // Note: We just need to initialize the theme.
112
- return () => ({});
75
+ class ThemeColorVariable extends ThemeVariableFunction {
76
+ constructor(key) {
77
+ super(key);
78
+ // State.
79
+ this._opacity = 1;
80
+ }
81
+ format(value) {
82
+ const rgb = this.hexToRgb(value);
83
+ return this.toRgba(rgb);
84
+ }
85
+ opacity(value) {
86
+ this._opacity = value;
87
+ return this;
88
+ }
89
+ toRgba(data) {
90
+ return `rgba(${data?.red},${data?.green},${data?.blue},${this._opacity})`;
91
+ }
92
+ hexToRgb(value) {
93
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(value);
94
+ if (!result) {
95
+ throw new Error(`Invalid color format for "${value}". Only hex is currently supported.`);
96
+ }
97
+ const red = parseInt(result?.[1], 16);
98
+ const green = parseInt(result?.[2], 16);
99
+ const blue = parseInt(result?.[3], 16);
100
+ return { red, green, blue };
101
+ }
102
+ }
103
+
104
+ function controlErrorThemeFactory() {
105
+ return {
106
+ color: new ThemeColorVariable('errorColor'),
107
+ fontSize: '13px',
108
+ lineHeight: '1.5',
109
+ fontWeight: '400',
110
+ spacing: '4px'
111
+ };
112
+ }
113
+
114
+ function formControlThemeFactory() {
115
+ const errorColorKey = 'errorColor';
116
+ const inputColor = '#111111';
117
+ const backgroundColor = '#ffffff';
118
+ return {
119
+ grouping: '20px',
120
+ color: inputColor,
121
+ background: backgroundColor,
122
+ error: {
123
+ color: new ThemeColorVariable(errorColorKey),
124
+ background: new ThemeColorVariable(errorColorKey).opacity(0.1),
125
+ placeholderColor: new ThemeColorVariable(errorColorKey).opacity(0.4)
126
+ },
127
+ border: {
128
+ radius: '6px',
129
+ width: '1px',
130
+ style: 'solid',
131
+ color: 'rgba(67, 90, 111, 0.3)'
132
+ },
133
+ focused: {
134
+ color: inputColor,
135
+ background: backgroundColor,
136
+ border: {
137
+ radius: '6px',
138
+ width: '1px',
139
+ style: 'solid',
140
+ color: '#212121'
141
+ },
142
+ shadow: '0 0 0 3px rgba(0, 123, 255, 0.2)'
143
+ },
144
+ disabled: {
145
+ color: inputColor,
146
+ background: backgroundColor,
147
+ border: {
148
+ radius: '6px',
149
+ width: '1px',
150
+ style: 'solid',
151
+ color: '#212121'
152
+ },
153
+ opacity: '0.25'
154
+ }
155
+ };
156
+ }
157
+
158
+ function checkboxThemeFactory() {
159
+ const accentColor = new ThemeColorVariable('accentColor');
160
+ return {
161
+ size: '20px',
162
+ grouping: '20px',
163
+ colors: {
164
+ accent: accentColor,
165
+ disabled: '#c6c6c6'
166
+ },
167
+ border: {
168
+ color: '#111111',
169
+ thickness: '1px',
170
+ radius: '4px'
171
+ },
172
+ outline: {
173
+ color: accentColor,
174
+ offset: '1px',
175
+ thickness: '2px'
176
+ },
177
+ check: {
178
+ size: '12px',
179
+ color: 'white',
180
+ thickness: '2px'
181
+ },
182
+ label: {
183
+ color: '#111111',
184
+ offset: '6px',
185
+ fontSize: '16px',
186
+ fontWeight: '400',
187
+ lineHeight: '1.28'
188
+ }
189
+ };
113
190
  }
114
191
 
115
192
  class Theme {
116
- constructor(_name, _data) {
117
- this._name = _name;
118
- this._data = _data;
119
- this._parsed = this.parseData(_data ?? {});
120
- }
121
- get name() {
122
- return this._name;
193
+ constructor(theme) {
194
+ this.isObject = (item) => {
195
+ return (item && typeof item === 'object' && !Array.isArray(item));
196
+ };
197
+ const defaultFactories = this.defaultFactories();
198
+ this.data = this.mergeThemeData(defaultFactories, theme);
199
+ this.globals = this.getGlobals();
123
200
  }
124
- get data() {
125
- return this._parsed;
201
+ variables() {
202
+ return this.getContents(this.data);
126
203
  }
127
- update(data) {
128
- this._parsed = { ...this._parsed, ...this.parseData(data) };
129
- return this;
204
+ defaultFactories() {
205
+ return {
206
+ accentColor: '#1565c0',
207
+ errorColor: '#bd322a',
208
+ formControl: formControlThemeFactory(),
209
+ formControlAddon: formControlAddonThemeFactory(),
210
+ checkbox: checkboxThemeFactory(),
211
+ checkboxGroup: checkboxGroupThemeFactory(),
212
+ controlError: controlErrorThemeFactory()
213
+ };
130
214
  }
131
- parseData(data, scope = null) {
215
+ getContents(data, scope = null) {
132
216
  return Object.keys(data).reduce((previous, current) => {
133
217
  const value = data?.[current];
134
- const token = this.getFormattedToken(current, scope);
135
- if (typeof value === 'object' && value !== null) {
136
- const formatted = this.parseData(value, token);
218
+ const token = this.getToken(current, scope);
219
+ if (typeof value === 'object' && value !== null && !(value instanceof ThemeVariableFunction)) {
220
+ const formatted = this.getContents(value, token);
137
221
  return { ...previous, ...formatted };
138
222
  }
139
- return { ...previous, [`--${token}`]: value };
223
+ const formattedValue = (value instanceof ThemeVariableFunction)
224
+ ? value.toString(this.globals)
225
+ : value;
226
+ if (!formattedValue) {
227
+ return previous;
228
+ }
229
+ return { ...previous, [`--${token}`]: formattedValue };
140
230
  }, {});
141
231
  }
142
- getFormattedToken(key, scope = null) {
143
- const result = key.replace(/([A-Z])/g, ' $1');
144
- const current = result.split(' ').join('-').toLowerCase();
145
- return [scope, current].filter(item => !!item).join('-');
232
+ getToken(key, scope) {
233
+ const token = this.tokenize(key);
234
+ return [scope, token].filter(item => !!item).join('-');
146
235
  }
236
+ tokenize(value) {
237
+ const result = value.replace(/([A-Z])/g, ' $1');
238
+ return result.split(' ').join('-').toLowerCase();
239
+ }
240
+ mergeThemeData(target, ...sources) {
241
+ if (!sources?.length) {
242
+ return target;
243
+ }
244
+ const source = sources.shift();
245
+ if (this.isObject(target) && this.isObject(source)) {
246
+ for (const key in source) {
247
+ if (this.isObject(source[key])) {
248
+ if (!target[key]) {
249
+ Object.assign(target, { [key]: {} });
250
+ }
251
+ this.mergeThemeData(target[key], source[key]);
252
+ }
253
+ else {
254
+ Object.assign(target, { [key]: source[key] });
255
+ }
256
+ }
257
+ }
258
+ return this.mergeThemeData(target, ...sources);
259
+ }
260
+ getGlobals() {
261
+ return {
262
+ accentColor: this.data.accentColor,
263
+ errorColor: this.data.errorColor
264
+ };
265
+ }
266
+ }
267
+
268
+ class ThemingModule {
147
269
  }
270
+ ThemingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ThemingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
271
+ ThemingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.1", ngImport: i0, type: ThemingModule, declarations: [BbiTheming], exports: [BbiTheming] });
272
+ ThemingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ThemingModule });
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: ThemingModule, decorators: [{
274
+ type: NgModule,
275
+ args: [{
276
+ declarations: [BbiTheming],
277
+ exports: [BbiTheming]
278
+ }]
279
+ }] });
148
280
 
149
281
  /**
150
282
  * Generated bundle index. Do not edit.
151
283
  */
152
284
 
153
- export { Theme, Theming, ThemingModule, ThemingOptions, initializeTheme };
285
+ export { BbiTheming, Theme, ThemeColorVariable, ThemeVariableFunction, ThemingModule, checkboxGroupThemeFactory, checkboxThemeFactory, formControlAddonThemeFactory, formControlThemeFactory };
154
286
  //# sourceMappingURL=bravobit-bb-foundation-theming.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bravobit-bb-foundation-theming.mjs","sources":["../../../projects/bb-foundation/theming/src/lib/theming.interface.ts","../../../projects/bb-foundation/theming/src/lib/theming.service.ts","../../../projects/bb-foundation/theming/src/lib/theming.module.ts","../../../projects/bb-foundation/theming/src/lib/themes/theme.ts","../../../projects/bb-foundation/theming/src/bravobit-bb-foundation-theming.ts"],"sourcesContent":["import {CheckboxGroupTheme} from './themes/checkbox-group.theme';\nimport {CheckboxTheme} from './themes/checkbox.theme';\nimport {Theme} from './themes/theme';\n\nexport class ThemingOptions {\n themes: Theme[];\n}\n\nexport type ThemeDataRecord = Record<string, string> | string;\n\nexport interface ThemeData {\n accentColor?: string;\n checkbox?: Partial<CheckboxTheme>;\n checkboxGroup?: Partial<CheckboxGroupTheme>\n\n custom?: { [key: string]: ThemeDataRecord };\n}\n","import {Inject, Injectable, Optional, Renderer2, RendererFactory2} from '@angular/core';\nimport {ThemingOptions} from './theming.interface';\nimport {DOCUMENT} from '@angular/common';\nimport {Theme} from './themes/theme';\n\n@Injectable()\nexport class Theming {\n\n // Readonly data.\n private readonly _attribute: string = 'data-theme';\n private readonly _renderer: Renderer2 = this._rendererFactory.createRenderer(null, null);\n\n // State.\n private _currentTheme: Theme | null = null;\n\n constructor(private _options: ThemingOptions,\n private _rendererFactory: RendererFactory2,\n @Optional() @Inject(DOCUMENT) private _document: Document) {\n this.setCssVariables();\n this.setFirstTheme();\n }\n\n get all() {\n return this._options?.themes ?? [];\n }\n\n get current() {\n return this._currentTheme ?? null;\n }\n\n set(name: string) {\n const theme = this.all?.find(theme => theme?.name === name);\n if (!theme) {\n throw new Error('Invalid theme.');\n }\n\n const document = this._document.documentElement;\n if (!document) {\n return;\n }\n\n this._renderer.setAttribute(document, this._attribute, name);\n this._currentTheme = theme;\n }\n\n private setCssVariables() {\n const style = this._renderer.createElement('style');\n this._renderer.setAttribute(style, 'id', 'theming-style');\n\n const variables = this.getCssVariables();\n this._renderer.setProperty(style, 'innerHTML', variables);\n\n const head = this._document?.head ?? null;\n if (!head) {\n return;\n }\n\n this._renderer.appendChild(this._document?.head, style);\n }\n\n private getCssVariables() {\n return this.all\n .map(theme => `:root[${this._attribute}=\"${theme?.name}\"] {${this.getThemeContents(theme)}}`)\n .join('\\n');\n }\n\n private getThemeContents(theme: Theme) {\n const themeData = theme?.data ?? {};\n return Object.keys(themeData)\n .map(key => `${key}: ${themeData?.[key]};`)\n .join(' ');\n }\n\n private setFirstTheme() {\n const theme = this.all?.[0] ?? null;\n if (!theme) {\n throw new Error('No theme found.');\n }\n\n const themeName = theme?.name ?? null;\n return this.set(themeName);\n }\n\n}\n","import {APP_INITIALIZER, ModuleWithProviders, NgModule, Optional, SkipSelf} from '@angular/core';\nimport {ThemingOptions} from './theming.interface';\nimport {Theming} from './theming.service';\n\n@NgModule({})\nexport class ThemingModule {\n\n constructor(@Optional() @SkipSelf() private _parent?: ThemingModule) {\n if (this._parent) {\n throw new Error('ThemingModule is already loaded; Import it in the core module only.');\n }\n }\n\n static forRoot(options: ThemingOptions): ModuleWithProviders<ThemingModule> {\n return {\n ngModule: ThemingModule,\n providers: [\n Theming,\n {provide: APP_INITIALIZER, deps: [Theming], useFactory: initializeTheme, multi: true},\n {provide: ThemingOptions, useValue: options}\n ]\n };\n }\n\n}\n\nexport function initializeTheme(_: Theming) {\n // Note: We just need to initialize the theme.\n return () => ({});\n}\n","import {ThemeData} from '../theming.interface';\n\nexport class Theme {\n\n // Readonly data.\n private _parsed: Record<string, string>;\n\n constructor(private _name: string,\n private _data?: ThemeData) {\n this._parsed = this.parseData(_data ?? {});\n }\n\n get name() {\n return this._name;\n }\n\n get data() {\n return this._parsed;\n }\n\n update(data: ThemeData) {\n this._parsed = {...this._parsed, ...this.parseData(data)};\n return this;\n }\n\n protected parseData(data: object, scope: string | null = null) {\n return Object.keys(data).reduce((previous, current) => {\n const value = data?.[current];\n const token = this.getFormattedToken(current, scope);\n if (typeof value === 'object' && value !== null) {\n const formatted = this.parseData(value, token);\n return {...previous, ...formatted};\n }\n return {...previous, [`--${token}`]: value};\n }, {});\n }\n\n protected getFormattedToken(key: string, scope: string | null = null) {\n const result = key.replace(/([A-Z])/g, ' $1');\n const current = result.split(' ').join('-').toLowerCase();\n return [scope, current].filter(item => !!item).join('-');\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bravobit-bb-foundation-theming.mjs","sources":["../../../projects/bb-foundation/theming/src/lib/theming.directive.ts","../../../projects/bb-foundation/theming/src/lib/themes/form-control-addon.theme.ts","../../../projects/bb-foundation/theming/src/lib/themes/checkbox-group.theme.ts","../../../projects/bb-foundation/theming/src/lib/utils/theming.variable.ts","../../../projects/bb-foundation/theming/src/lib/themes/control-error.theme.ts","../../../projects/bb-foundation/theming/src/lib/themes/form-control.theme.ts","../../../projects/bb-foundation/theming/src/lib/themes/checkbox.theme.ts","../../../projects/bb-foundation/theming/src/lib/theming.data.ts","../../../projects/bb-foundation/theming/src/lib/theming.module.ts","../../../projects/bb-foundation/theming/src/bravobit-bb-foundation-theming.ts"],"sourcesContent":["import {Directive, ElementRef, Input, Renderer2, RendererStyleFlags2} from '@angular/core';\nimport {Theme} from './theming.data';\n\n@Directive({\n selector: '[bbiTheming]'\n})\nexport class BbiTheming {\n\n // Inputs.\n @Input('bbiTheming') set theme(theme: Theme | null) {\n this._theme = theme;\n this.setTheme();\n }\n\n // Cache.\n private _theme: Theme | null = null;\n\n constructor(private _renderer: Renderer2,\n private _elementRef: ElementRef) {\n }\n\n private setTheme() {\n if (!this._theme) {\n return;\n }\n const variables = this._theme.variables();\n const element = this._elementRef.nativeElement;\n\n for (const key in variables) {\n const value = variables?.[key];\n this._renderer.setStyle(element, key, value, RendererStyleFlags2.DashCase);\n }\n }\n\n}\n","import {ThemeVariable} from '../utils/theming.variable';\n\nexport interface FormControlAddonTheme {\n spacing: ThemeVariable;\n}\n\nexport function formControlAddonThemeFactory(): FormControlAddonTheme {\n return {\n spacing: '10px'\n };\n}\n","import {ThemeVariable} from '../utils/theming.variable';\n\nexport interface CheckboxGroupTheme {\n grouping: ThemeVariable;\n\n label: {\n color: ThemeVariable;\n fontSize: ThemeVariable;\n fontWeight: ThemeVariable;\n lineHeight: ThemeVariable;\n offset: ThemeVariable;\n };\n\n spacing: {\n horizontal: ThemeVariable;\n vertical: ThemeVariable;\n };\n}\n\nexport function checkboxGroupThemeFactory(): CheckboxGroupTheme {\n return {\n grouping: '20px',\n label: {\n color: '#525252',\n offset: '4px',\n fontSize: '14px',\n fontWeight: '400',\n lineHeight: '1.33'\n },\n spacing: {\n horizontal: '10px',\n vertical: '4px'\n }\n };\n}\n","import {GlobalVariables, GlobalVariablesKey} from '../theming.interface';\n\nexport type ThemeVariable = ThemeVariableFunction | string;\n\nexport abstract class ThemeVariableFunction {\n\n protected constructor(private _key: GlobalVariablesKey) {\n }\n\n abstract format(value: string): string;\n\n toString(variables: GlobalVariables) {\n const value = variables?.[this._key] ?? null;\n if (!value) {\n throw new Error(`Invalid variable key \"${this._key}\"`);\n }\n return !!value ? this.format(value) : null;\n }\n\n}\n\nexport class ThemeColorVariable extends ThemeVariableFunction {\n\n // State.\n private _opacity: number = 1;\n\n constructor(key: GlobalVariablesKey) {\n super(key);\n }\n\n format(value: string) {\n const rgb = this.hexToRgb(value);\n return this.toRgba(rgb);\n }\n\n opacity(value: number) {\n this._opacity = value;\n return this;\n }\n\n private toRgba(data: { red: number, green: number, blue: number }) {\n return `rgba(${data?.red},${data?.green},${data?.blue},${this._opacity})`;\n }\n\n private hexToRgb(value: string) {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(value);\n if (!result) {\n throw new Error(`Invalid color format for \"${value}\". Only hex is currently supported.`);\n }\n\n const red = parseInt(result?.[1], 16);\n const green = parseInt(result?.[2], 16);\n const blue = parseInt(result?.[3], 16);\n return {red, green, blue};\n }\n\n}\n","import {ThemeColorVariable, ThemeVariable} from '../utils/theming.variable';\n\nexport interface ControlErrorTheme {\n color: ThemeVariable;\n fontSize: ThemeVariable;\n lineHeight: ThemeVariable;\n fontWeight: ThemeVariable;\n spacing: ThemeVariable;\n}\n\nexport function controlErrorThemeFactory(): ControlErrorTheme {\n return {\n color: new ThemeColorVariable('errorColor'),\n fontSize: '13px',\n lineHeight: '1.5',\n fontWeight: '400',\n spacing: '4px'\n };\n}\n","import {ThemeColorVariable, ThemeVariable} from '../utils/theming.variable';\n\ninterface BorderTheme {\n radius: ThemeVariable;\n width: ThemeVariable;\n style: ThemeVariable;\n color: ThemeVariable;\n}\n\nexport interface FormControlTheme {\n grouping: ThemeVariable;\n color: ThemeVariable;\n background: ThemeVariable;\n error: {\n color: ThemeVariable;\n background: ThemeVariable;\n placeholderColor: ThemeVariable;\n };\n border: BorderTheme;\n focused: {\n color: ThemeVariable;\n background: ThemeVariable;\n shadow: ThemeVariable;\n border: BorderTheme;\n };\n disabled: {\n color: ThemeVariable;\n background: ThemeVariable;\n opacity: ThemeVariable;\n border: BorderTheme;\n };\n}\n\nexport function formControlThemeFactory(): FormControlTheme {\n const errorColorKey = 'errorColor';\n const inputColor = '#111111';\n const backgroundColor = '#ffffff';\n return {\n grouping: '20px',\n color: inputColor,\n background: backgroundColor,\n error: {\n color: new ThemeColorVariable(errorColorKey),\n background: new ThemeColorVariable(errorColorKey).opacity(0.1),\n placeholderColor: new ThemeColorVariable(errorColorKey).opacity(0.4)\n },\n border: {\n radius: '6px',\n width: '1px',\n style: 'solid',\n color: 'rgba(67, 90, 111, 0.3)'\n },\n focused: {\n color: inputColor,\n background: backgroundColor,\n border: {\n radius: '6px',\n width: '1px',\n style: 'solid',\n color: '#212121'\n },\n shadow: '0 0 0 3px rgba(0, 123, 255, 0.2)'\n },\n disabled: {\n color: inputColor,\n background: backgroundColor,\n border: {\n radius: '6px',\n width: '1px',\n style: 'solid',\n color: '#212121'\n },\n opacity: '0.25'\n }\n };\n}\n","import {ThemeColorVariable, ThemeVariable} from '../utils/theming.variable';\n\nexport interface CheckboxTheme {\n size: ThemeVariable;\n grouping: ThemeVariable;\n\n colors: {\n accent: ThemeVariable;\n disabled: ThemeVariable;\n };\n\n border: {\n color: ThemeVariable;\n thickness: ThemeVariable;\n radius: ThemeVariable;\n };\n\n outline: {\n color: ThemeVariable;\n offset: ThemeVariable;\n thickness: ThemeVariable;\n };\n\n check: {\n size: ThemeVariable;\n color: ThemeVariable;\n thickness: ThemeVariable;\n };\n\n label: {\n color: ThemeVariable;\n fontSize: ThemeVariable;\n fontWeight: ThemeVariable;\n lineHeight: ThemeVariable;\n offset: ThemeVariable;\n };\n}\n\nexport function checkboxThemeFactory(): CheckboxTheme {\n const accentColor = new ThemeColorVariable('accentColor');\n return {\n size: '20px',\n grouping: '20px',\n colors: {\n accent: accentColor,\n disabled: '#c6c6c6'\n },\n border: {\n color: '#111111',\n thickness: '1px',\n radius: '4px'\n },\n outline: {\n color: accentColor,\n offset: '1px',\n thickness: '2px'\n },\n check: {\n size: '12px',\n color: 'white',\n thickness: '2px'\n },\n label: {\n color: '#111111',\n offset: '6px',\n fontSize: '16px',\n fontWeight: '400',\n lineHeight: '1.28'\n }\n };\n}\n","import {GlobalTheme, GlobalVariables, PartialGlobalTheme} from './theming.interface';\nimport {formControlAddonThemeFactory} from './themes/form-control-addon.theme';\nimport {checkboxGroupThemeFactory} from './themes/checkbox-group.theme';\nimport {controlErrorThemeFactory} from './themes/control-error.theme';\nimport {formControlThemeFactory} from './themes/form-control.theme';\nimport {ThemeVariableFunction} from './utils/theming.variable';\nimport {checkboxThemeFactory} from './themes/checkbox.theme';\n\nexport class Theme {\n\n protected readonly data: GlobalTheme;\n protected readonly globals: GlobalVariables;\n\n constructor(theme?: PartialGlobalTheme) {\n const defaultFactories = this.defaultFactories();\n this.data = this.mergeThemeData(defaultFactories, theme);\n this.globals = this.getGlobals();\n }\n\n variables() {\n return this.getContents(this.data);\n }\n\n protected defaultFactories(): GlobalTheme {\n return {\n accentColor: '#1565c0',\n errorColor: '#bd322a',\n formControl: formControlThemeFactory(),\n formControlAddon: formControlAddonThemeFactory(),\n checkbox: checkboxThemeFactory(),\n checkboxGroup: checkboxGroupThemeFactory(),\n controlError: controlErrorThemeFactory()\n };\n }\n\n protected getContents(data: object, scope: string | null = null) {\n return Object.keys(data).reduce((previous, current) => {\n const value = data?.[current];\n const token = this.getToken(current, scope);\n\n if (typeof value === 'object' && value !== null && !(value instanceof ThemeVariableFunction)) {\n const formatted = this.getContents(value, token);\n return {...previous, ...formatted};\n }\n\n const formattedValue = (value instanceof ThemeVariableFunction)\n ? value.toString(this.globals)\n : value;\n\n if (!formattedValue) {\n return previous;\n }\n\n return {...previous, [`--${token}`]: formattedValue};\n }, {}) as { [key: string]: string };\n }\n\n protected getToken(key: string, scope: string) {\n const token = this.tokenize(key);\n return [scope, token].filter(item => !!item).join('-');\n }\n\n protected tokenize(value: string) {\n const result = value.replace(/([A-Z])/g, ' $1');\n return result.split(' ').join('-').toLowerCase();\n }\n\n protected mergeThemeData(target: GlobalTheme, ...sources: PartialGlobalTheme[]) {\n if (!sources?.length) {\n return target;\n }\n\n const source = sources.shift();\n if (this.isObject(target) && this.isObject(source)) {\n for (const key in source) {\n if (this.isObject(source[key])) {\n if (!target[key]) {\n Object.assign(target, {[key]: {}});\n }\n this.mergeThemeData(target[key], source[key]);\n } else {\n Object.assign(target, {[key]: source[key]});\n }\n }\n }\n\n return this.mergeThemeData(target, ...sources);\n }\n\n protected getGlobals() {\n return {\n accentColor: this.data.accentColor,\n errorColor: this.data.errorColor\n };\n }\n\n private isObject = (item: unknown) => {\n return (item && typeof item === 'object' && !Array.isArray(item));\n };\n\n}\n","import {BbiTheming} from './theming.directive';\nimport {NgModule} from '@angular/core';\n\n@NgModule({\n declarations: [BbiTheming],\n exports: [BbiTheming]\n})\nexport class ThemingModule {\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}