@osovitny/anatoly 2.15.12 → 2.16.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 (256) hide show
  1. package/esm2022/lib/anatoly.module.mjs +55 -0
  2. package/{esm2020 → esm2022}/lib/core/browser.mjs +23 -23
  3. package/{esm2020 → esm2022}/lib/core/consts/settings.mjs +16 -16
  4. package/{esm2020 → esm2022}/lib/core/consts/urls.mjs +18 -18
  5. package/{esm2020 → esm2022}/lib/core/converts/convert.mjs +104 -104
  6. package/{esm2020 → esm2022}/lib/core/converts/xmlFormatter.mjs +33 -33
  7. package/esm2022/lib/core/core.module.mjs +89 -0
  8. package/{esm2020 → esm2022}/lib/core/dom.mjs +152 -152
  9. package/esm2022/lib/core/go/base-go.service.mjs +50 -0
  10. package/{esm2020 → esm2022}/lib/core/guards/once-import.guard.mjs +20 -20
  11. package/{esm2020 → esm2022}/lib/core/guid.mjs +21 -21
  12. package/{esm2020 → esm2022}/lib/core/index.mjs +50 -50
  13. package/esm2022/lib/core/interceptors/httpInterceptor.mjs +107 -0
  14. package/esm2022/lib/core/localization/localization.module.mjs +44 -0
  15. package/esm2022/lib/core/localization/localization.service.mjs +184 -0
  16. package/esm2022/lib/core/localization/localizationSettings.module.mjs +90 -0
  17. package/esm2022/lib/core/localization/localize.pipe.mjs +76 -0
  18. package/{esm2020 → esm2022}/lib/core/localization/utils.mjs +41 -41
  19. package/esm2022/lib/core/logging/globalErrorHandler.mjs +42 -0
  20. package/esm2022/lib/core/logging/logging.service.mjs +36 -0
  21. package/{esm2020 → esm2022}/lib/core/notifications/alerts.mjs +105 -105
  22. package/{esm2020 → esm2022}/lib/core/notifications/interfaces/notification.mjs +16 -16
  23. package/esm2022/lib/core/notifications/services/notification-service.mjs +226 -0
  24. package/esm2022/lib/core/performance/stopwatch.mjs +55 -0
  25. package/esm2022/lib/core/services/appcontext.service.mjs +152 -0
  26. package/esm2022/lib/core/services/dm.service.mjs +72 -0
  27. package/esm2022/lib/core/services/google-analytics.service.mjs +55 -0
  28. package/esm2022/lib/core/services/idle.service.mjs +82 -0
  29. package/esm2022/lib/core/services/loading.service.mjs +68 -0
  30. package/esm2022/lib/core/services/web-storage.service.mjs +67 -0
  31. package/esm2022/lib/core/subs.mjs +30 -0
  32. package/{esm2020 → esm2022}/lib/core/utils.mjs +93 -93
  33. package/esm2022/lib/data/base/base-api.service.mjs +99 -0
  34. package/esm2022/lib/data/base/grid/base-grid-edit.service.mjs +83 -0
  35. package/esm2022/lib/data/base/grid/base-grid-read.service.mjs +65 -0
  36. package/{esm2020 → esm2022}/lib/data/consts.mjs +23 -23
  37. package/esm2022/lib/data/data.module.mjs +42 -0
  38. package/{esm2020 → esm2022}/lib/data/index.mjs +21 -21
  39. package/esm2022/lib/data/services/core-api.service.mjs +60 -0
  40. package/esm2022/lib/data/services/emails-api.service.mjs +48 -0
  41. package/esm2022/lib/data/services/notifications/notifications-api-service.mjs +41 -0
  42. package/esm2022/lib/ui/components/base/base-edit.component.mjs +135 -0
  43. package/esm2022/lib/ui/components/base/base.component.mjs +61 -0
  44. package/esm2022/lib/ui/components/base/base.dialog.mjs +67 -0
  45. package/esm2022/lib/ui/components/base/base.list.mjs +69 -0
  46. package/esm2022/lib/ui/components/base/base.page.mjs +31 -0
  47. package/esm2022/lib/ui/components/base/base.paged.page.mjs +66 -0
  48. package/esm2022/lib/ui/components/billing/buyaccess-button.component.mjs +64 -0
  49. package/esm2022/lib/ui/components/billing/subscribe-plan-button.component.mjs +68 -0
  50. package/esm2022/lib/ui/components/card/card-body.component.mjs +30 -0
  51. package/esm2022/lib/ui/components/card/card-footer.component.mjs +30 -0
  52. package/esm2022/lib/ui/components/card/card-header.component.mjs +34 -0
  53. package/esm2022/lib/ui/components/card/card.component.mjs +30 -0
  54. package/esm2022/lib/ui/components/check-icon/check-icon.component.mjs +33 -0
  55. package/esm2022/lib/ui/components/copy-2-clipboard/copy-2-clipboard.component.mjs +44 -0
  56. package/esm2022/lib/ui/components/datapager/datapager.component.mjs +85 -0
  57. package/esm2022/lib/ui/components/html-editor/base-html-editor.component.mjs +96 -0
  58. package/esm2022/lib/ui/components/html-editor/forms-html-editor.component.mjs +45 -0
  59. package/esm2022/lib/ui/components/html-editor/html-editor.component.mjs +49 -0
  60. package/{esm2020 → esm2022}/lib/ui/components/html-editor/html-editor.defaultoptions.mjs +85 -85
  61. package/esm2022/lib/ui/components/identity/signin-button.component.mjs +31 -0
  62. package/esm2022/lib/ui/components/identity/signout-button.component.mjs +31 -0
  63. package/esm2022/lib/ui/components/identity/signup-button.component.mjs +30 -0
  64. package/{esm2020 → esm2022}/lib/ui/components/index.mjs +43 -43
  65. package/esm2022/lib/ui/components/nodata/nodata.component.mjs +46 -0
  66. package/esm2022/lib/ui/components/spinners/loading/loading.component.mjs +49 -0
  67. package/esm2022/lib/ui/components/spinners/pagespinner/pagespinner.component.mjs +62 -0
  68. package/{esm2020 → esm2022}/lib/ui/components/spinners/pagespinner/spinkits.mjs +11 -11
  69. package/esm2022/lib/ui/dialogs/contact-us/contact-us.dialog.mjs +49 -0
  70. package/{esm2020 → esm2022}/lib/ui/dialogs/index.mjs +16 -16
  71. package/esm2022/lib/ui/directives/hover.directive.mjs +45 -0
  72. package/{esm2020 → esm2022}/lib/ui/directives/index.mjs +17 -17
  73. package/esm2022/lib/ui/directives/native-element.directive.mjs +40 -0
  74. package/esm2022/lib/ui/external/fa.module.mjs +45 -0
  75. package/esm2022/lib/ui/external/kendo.module.mjs +90 -0
  76. package/esm2022/lib/ui/forms/components/address/address.component.mjs +141 -0
  77. package/esm2022/lib/ui/forms/components/company/company.component.mjs +94 -0
  78. package/esm2022/lib/ui/forms/components/dropdownlists/timezone/timezone.dropdownlist.mjs +74 -0
  79. package/esm2022/lib/ui/forms/components/urlslug/urlslug.component.mjs +98 -0
  80. package/esm2022/lib/ui/forms/contact-us/contact-us.mjs +124 -0
  81. package/{esm2020 → esm2022}/lib/ui/forms/index.mjs +23 -23
  82. package/esm2022/lib/ui/pipes/filesize.pipe.mjs +40 -0
  83. package/{esm2020 → esm2022}/lib/ui/pipes/index.mjs +18 -18
  84. package/esm2022/lib/ui/pipes/replace-text.pipe.mjs +37 -0
  85. package/esm2022/lib/ui/pipes/safeHtml.pipe.mjs +35 -0
  86. package/esm2022/lib/ui/ui.module.mjs +192 -0
  87. package/esm2022/lib/ui/validation/form-validation-summary.component.mjs +64 -0
  88. package/{esm2020 → esm2022}/lib/ui/validation/index.mjs +18 -18
  89. package/esm2022/lib/ui/validation/item-validation-summary.component.mjs +39 -0
  90. package/{esm2020 → esm2022}/lib/ui/validation/validation-summary.component.mjs +125 -125
  91. package/{esm2020 → esm2022}/osovitny-anatoly.mjs +4 -4
  92. package/{esm2020 → esm2022}/public-api.mjs +24 -24
  93. package/{fesm2015 → fesm2022}/osovitny-anatoly.mjs +5119 -5974
  94. package/fesm2022/osovitny-anatoly.mjs.map +1 -0
  95. package/index.d.ts +5 -5
  96. package/lib/anatoly.module.d.ts +10 -10
  97. package/lib/core/browser.d.ts +4 -4
  98. package/lib/core/consts/settings.d.ts +1 -1
  99. package/lib/core/consts/urls.d.ts +3 -3
  100. package/lib/core/converts/convert.d.ts +16 -16
  101. package/lib/core/converts/xmlFormatter.d.ts +4 -4
  102. package/lib/core/core.module.d.ts +14 -14
  103. package/lib/core/dom.d.ts +17 -17
  104. package/lib/core/go/base-go.service.d.ts +12 -12
  105. package/lib/core/guards/once-import.guard.d.ts +1 -1
  106. package/lib/core/guid.d.ts +3 -3
  107. package/lib/core/index.d.ts +28 -28
  108. package/lib/core/interceptors/httpInterceptor.d.ts +18 -18
  109. package/lib/core/localization/localization.module.d.ts +8 -8
  110. package/lib/core/localization/localization.service.d.ts +25 -25
  111. package/lib/core/localization/localizationSettings.module.d.ts +18 -18
  112. package/lib/core/localization/localize.pipe.d.ts +10 -10
  113. package/lib/core/localization/utils.d.ts +5 -5
  114. package/lib/core/logging/globalErrorHandler.d.ts +9 -9
  115. package/lib/core/logging/logging.service.d.ts +8 -8
  116. package/lib/core/notifications/alerts.d.ts +9 -9
  117. package/lib/core/notifications/interfaces/notification.d.ts +10 -10
  118. package/lib/core/notifications/services/notification-service.d.ts +25 -25
  119. package/lib/core/performance/stopwatch.d.ts +14 -14
  120. package/lib/core/services/appcontext.service.d.ts +31 -31
  121. package/lib/core/services/dm.service.d.ts +16 -16
  122. package/lib/core/services/google-analytics.service.d.ts +11 -11
  123. package/lib/core/services/idle.service.d.ts +19 -19
  124. package/lib/core/services/loading.service.d.ts +13 -13
  125. package/lib/core/services/web-storage.service.d.ts +22 -22
  126. package/lib/core/subs.d.ts +8 -8
  127. package/lib/core/utils.d.ts +11 -11
  128. package/lib/data/base/base-api.service.d.ts +18 -18
  129. package/lib/data/base/grid/base-grid-edit.service.d.ts +16 -16
  130. package/lib/data/base/grid/base-grid-read.service.d.ts +14 -14
  131. package/lib/data/consts.d.ts +5 -5
  132. package/lib/data/data.module.d.ts +7 -7
  133. package/lib/data/index.d.ts +6 -6
  134. package/lib/data/services/core-api.service.d.ts +12 -12
  135. package/lib/data/services/emails-api.service.d.ts +10 -10
  136. package/lib/data/services/notifications/notifications-api-service.d.ts +12 -12
  137. package/lib/ui/components/base/base-edit.component.d.ts +57 -57
  138. package/lib/ui/components/base/base.component.d.ts +17 -17
  139. package/lib/ui/components/base/base.dialog.d.ts +17 -17
  140. package/lib/ui/components/base/base.list.d.ts +19 -19
  141. package/lib/ui/components/base/base.page.d.ts +6 -6
  142. package/lib/ui/components/base/base.paged.page.d.ts +18 -18
  143. package/lib/ui/components/billing/buyaccess-button.component.d.ts +19 -19
  144. package/lib/ui/components/billing/subscribe-plan-button.component.d.ts +21 -21
  145. package/lib/ui/components/card/card-body.component.d.ts +6 -6
  146. package/lib/ui/components/card/card-footer.component.d.ts +6 -6
  147. package/lib/ui/components/card/card-header.component.d.ts +7 -7
  148. package/lib/ui/components/card/card.component.d.ts +6 -6
  149. package/lib/ui/components/check-icon/check-icon.component.d.ts +6 -6
  150. package/lib/ui/components/copy-2-clipboard/copy-2-clipboard.component.d.ts +8 -8
  151. package/lib/ui/components/datapager/datapager.component.d.ts +21 -21
  152. package/lib/ui/components/html-editor/base-html-editor.component.d.ts +21 -21
  153. package/lib/ui/components/html-editor/forms-html-editor.component.d.ts +9 -9
  154. package/lib/ui/components/html-editor/html-editor.component.d.ts +9 -9
  155. package/lib/ui/components/html-editor/html-editor.defaultoptions.d.ts +1 -1
  156. package/lib/ui/components/identity/signin-button.component.d.ts +7 -7
  157. package/lib/ui/components/identity/signout-button.component.d.ts +7 -7
  158. package/lib/ui/components/identity/signup-button.component.d.ts +6 -6
  159. package/lib/ui/components/index.d.ts +25 -25
  160. package/lib/ui/components/nodata/nodata.component.d.ts +11 -11
  161. package/lib/ui/components/spinners/loading/loading.component.d.ts +13 -13
  162. package/lib/ui/components/spinners/pagespinner/pagespinner.component.d.ts +25 -25
  163. package/lib/ui/components/spinners/pagespinner/spinkits.d.ts +11 -11
  164. package/lib/ui/dialogs/contact-us/contact-us.dialog.d.ts +12 -12
  165. package/lib/ui/dialogs/index.d.ts +1 -1
  166. package/lib/ui/directives/hover.directive.d.ts +8 -8
  167. package/lib/ui/directives/index.d.ts +2 -2
  168. package/lib/ui/directives/native-element.directive.d.ts +11 -11
  169. package/lib/ui/external/fa.module.d.ts +10 -10
  170. package/lib/ui/external/kendo.module.d.ts +15 -15
  171. package/lib/ui/forms/components/address/address.component.d.ts +35 -35
  172. package/lib/ui/forms/components/company/company.component.d.ts +20 -20
  173. package/lib/ui/forms/components/dropdownlists/timezone/timezone.dropdownlist.d.ts +26 -26
  174. package/lib/ui/forms/components/urlslug/urlslug.component.d.ts +23 -23
  175. package/lib/ui/forms/contact-us/contact-us.d.ts +33 -33
  176. package/lib/ui/forms/index.d.ts +5 -5
  177. package/lib/ui/pipes/filesize.pipe.d.ts +8 -8
  178. package/lib/ui/pipes/index.d.ts +3 -3
  179. package/lib/ui/pipes/replace-text.pipe.d.ts +7 -7
  180. package/lib/ui/pipes/safeHtml.pipe.d.ts +10 -10
  181. package/lib/ui/ui.module.d.ts +43 -46
  182. package/lib/ui/validation/form-validation-summary.component.d.ts +11 -11
  183. package/lib/ui/validation/index.d.ts +3 -3
  184. package/lib/ui/validation/item-validation-summary.component.d.ts +9 -9
  185. package/lib/ui/validation/validation-summary.component.d.ts +24 -24
  186. package/package.json +10 -16
  187. package/public-api.d.ts +12 -12
  188. package/esm2020/lib/anatoly.module.mjs +0 -56
  189. package/esm2020/lib/core/core.module.mjs +0 -89
  190. package/esm2020/lib/core/go/base-go.service.mjs +0 -48
  191. package/esm2020/lib/core/interceptors/httpInterceptor.mjs +0 -105
  192. package/esm2020/lib/core/localization/localization.module.mjs +0 -45
  193. package/esm2020/lib/core/localization/localization.service.mjs +0 -182
  194. package/esm2020/lib/core/localization/localizationSettings.module.mjs +0 -90
  195. package/esm2020/lib/core/localization/localize.pipe.mjs +0 -75
  196. package/esm2020/lib/core/logging/globalErrorHandler.mjs +0 -41
  197. package/esm2020/lib/core/logging/logging.service.mjs +0 -36
  198. package/esm2020/lib/core/notifications/services/notification-service.mjs +0 -225
  199. package/esm2020/lib/core/performance/stopwatch.mjs +0 -50
  200. package/esm2020/lib/core/services/appcontext.service.mjs +0 -149
  201. package/esm2020/lib/core/services/dm.service.mjs +0 -69
  202. package/esm2020/lib/core/services/google-analytics.service.mjs +0 -53
  203. package/esm2020/lib/core/services/idle.service.mjs +0 -77
  204. package/esm2020/lib/core/services/loading.service.mjs +0 -68
  205. package/esm2020/lib/core/services/web-storage.service.mjs +0 -66
  206. package/esm2020/lib/core/subs.mjs +0 -31
  207. package/esm2020/lib/data/base/base-api.service.mjs +0 -97
  208. package/esm2020/lib/data/base/grid/base-grid-edit.service.mjs +0 -81
  209. package/esm2020/lib/data/base/grid/base-grid-read.service.mjs +0 -62
  210. package/esm2020/lib/data/data.module.mjs +0 -43
  211. package/esm2020/lib/data/services/core-api.service.mjs +0 -59
  212. package/esm2020/lib/data/services/emails-api.service.mjs +0 -47
  213. package/esm2020/lib/data/services/notifications/notifications-api-service.mjs +0 -40
  214. package/esm2020/lib/ui/components/base/base-edit.component.mjs +0 -134
  215. package/esm2020/lib/ui/components/base/base.component.mjs +0 -63
  216. package/esm2020/lib/ui/components/base/base.dialog.mjs +0 -67
  217. package/esm2020/lib/ui/components/base/base.list.mjs +0 -70
  218. package/esm2020/lib/ui/components/base/base.page.mjs +0 -31
  219. package/esm2020/lib/ui/components/base/base.paged.page.mjs +0 -67
  220. package/esm2020/lib/ui/components/billing/buyaccess-button.component.mjs +0 -106
  221. package/esm2020/lib/ui/components/billing/subscribe-plan-button.component.mjs +0 -118
  222. package/esm2020/lib/ui/components/card/card-body.component.mjs +0 -37
  223. package/esm2020/lib/ui/components/card/card-footer.component.mjs +0 -37
  224. package/esm2020/lib/ui/components/card/card-header.component.mjs +0 -52
  225. package/esm2020/lib/ui/components/card/card.component.mjs +0 -41
  226. package/esm2020/lib/ui/components/check-icon/check-icon.component.mjs +0 -42
  227. package/esm2020/lib/ui/components/copy-2-clipboard/copy-2-clipboard.component.mjs +0 -51
  228. package/esm2020/lib/ui/components/datapager/datapager.component.mjs +0 -89
  229. package/esm2020/lib/ui/components/html-editor/base-html-editor.component.mjs +0 -108
  230. package/esm2020/lib/ui/components/html-editor/forms-html-editor.component.mjs +0 -63
  231. package/esm2020/lib/ui/components/html-editor/html-editor.component.mjs +0 -61
  232. package/esm2020/lib/ui/components/identity/signin-button.component.mjs +0 -36
  233. package/esm2020/lib/ui/components/identity/signout-button.component.mjs +0 -36
  234. package/esm2020/lib/ui/components/identity/signup-button.component.mjs +0 -35
  235. package/esm2020/lib/ui/components/nodata/nodata.component.mjs +0 -67
  236. package/esm2020/lib/ui/components/spinners/loading/loading.component.mjs +0 -57
  237. package/esm2020/lib/ui/components/spinners/pagespinner/pagespinner.component.mjs +0 -84
  238. package/esm2020/lib/ui/dialogs/contact-us/contact-us.dialog.mjs +0 -78
  239. package/esm2020/lib/ui/directives/hover.directive.mjs +0 -51
  240. package/esm2020/lib/ui/directives/native-element.directive.mjs +0 -38
  241. package/esm2020/lib/ui/external/fa.module.mjs +0 -46
  242. package/esm2020/lib/ui/external/kendo.module.mjs +0 -91
  243. package/esm2020/lib/ui/forms/components/address/address.component.mjs +0 -242
  244. package/esm2020/lib/ui/forms/components/company/company.component.mjs +0 -142
  245. package/esm2020/lib/ui/forms/components/dropdownlists/timezone/timezone.dropdownlist.mjs +0 -99
  246. package/esm2020/lib/ui/forms/components/urlslug/urlslug.component.mjs +0 -136
  247. package/esm2020/lib/ui/forms/contact-us/contact-us.mjs +0 -212
  248. package/esm2020/lib/ui/pipes/filesize.pipe.mjs +0 -42
  249. package/esm2020/lib/ui/pipes/replace-text.pipe.mjs +0 -37
  250. package/esm2020/lib/ui/pipes/safeHtml.pipe.mjs +0 -34
  251. package/esm2020/lib/ui/ui.module.mjs +0 -197
  252. package/esm2020/lib/ui/validation/form-validation-summary.component.mjs +0 -89
  253. package/esm2020/lib/ui/validation/item-validation-summary.component.mjs +0 -59
  254. package/fesm2015/osovitny-anatoly.mjs.map +0 -1
  255. package/fesm2020/osovitny-anatoly.mjs +0 -5760
  256. package/fesm2020/osovitny-anatoly.mjs.map +0 -1
@@ -0,0 +1,141 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 02 Aug 2022
12
+
13
+ Copyright (c) 2017-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ //Node
17
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
18
+ import { Validators } from '@angular/forms';
19
+ import { Convert } from '../../../../core';
20
+ import { BaseEditComponent } from '../../../components';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "@angular/forms";
23
+ import * as i2 from "../../../../data";
24
+ import * as i3 from "@angular/common";
25
+ import * as i4 from "../../../components/card/card.component";
26
+ import * as i5 from "../../../components/card/card-header.component";
27
+ import * as i6 from "../../../components/card/card-body.component";
28
+ import * as i7 from "../../../directives/native-element.directive";
29
+ import * as i8 from "../../../validation/item-validation-summary.component";
30
+ export class AddressComponent extends BaseEditComponent {
31
+ fb;
32
+ api;
33
+ //Private
34
+ _address;
35
+ formGroupGenerated = false;
36
+ countryData = [];
37
+ usStateData = [];
38
+ currentCountry = 'US';
39
+ currentUSState = 'NY';
40
+ //Inputs
41
+ title = 'Address';
42
+ isTitleVisible = true;
43
+ isRequired;
44
+ get address() {
45
+ return this._address;
46
+ }
47
+ set address(value) {
48
+ this._address = value;
49
+ if (value) {
50
+ this.init();
51
+ }
52
+ }
53
+ //Outputs
54
+ change = new EventEmitter();
55
+ constructor(fb, api) {
56
+ super();
57
+ this.fb = fb;
58
+ this.api = api;
59
+ }
60
+ ngOnInit() {
61
+ this.api.getCountriesJsonFile(data => {
62
+ this.countryData = data;
63
+ });
64
+ this.api.getUSStatesJsonFile(data => {
65
+ this.usStateData = data;
66
+ });
67
+ this.createFormGroup();
68
+ this.init();
69
+ }
70
+ createFormGroup() {
71
+ let isRequired = Convert.stringToBoolean(this.isRequired);
72
+ if (isRequired) {
73
+ this.formGroup.addControl('address_street', this.fb.control('', [Validators.required]));
74
+ this.formGroup.addControl('address_street2', this.fb.control('', []));
75
+ this.formGroup.addControl('address_city', this.fb.control('', [Validators.required]));
76
+ this.formGroup.addControl('address_stateOrRegion', this.fb.control(this.currentUSState, [Validators.required]));
77
+ this.formGroup.addControl('address_country', this.fb.control(this.currentCountry, [Validators.required]));
78
+ this.formGroup.addControl('address_zipcode', this.fb.control('', [Validators.required]));
79
+ }
80
+ else {
81
+ this.formGroup.addControl('address_street', this.fb.control('', []));
82
+ this.formGroup.addControl('address_street2', this.fb.control('', []));
83
+ this.formGroup.addControl('address_city', this.fb.control('', []));
84
+ this.formGroup.addControl('address_stateOrRegion', this.fb.control(this.currentUSState, []));
85
+ this.formGroup.addControl('address_country', this.fb.control(this.currentCountry, []));
86
+ this.formGroup.addControl('address_zipcode', this.fb.control('', []));
87
+ }
88
+ this.formGroupGenerated = true;
89
+ }
90
+ init() {
91
+ if (!this.formGroupGenerated) {
92
+ return;
93
+ }
94
+ if (this._address !== undefined) {
95
+ let address = JSON.parse(this._address);
96
+ this.setFormValue('address_street', address.street);
97
+ this.setFormValue('address_street2', address.street2);
98
+ this.setFormValue('address_city', address.city);
99
+ this.setFormValue('address_stateOrRegion', address.stateOrRegion);
100
+ this.setFormValue('address_zipcode', address.zipcode);
101
+ this.setFormValue('address_country', address.country);
102
+ }
103
+ }
104
+ getAddress() {
105
+ const data = {
106
+ street: this.getFormValue('address_street') || null,
107
+ street2: this.getFormValue('address_street2') || null,
108
+ city: this.getFormValue('address_city') || null,
109
+ stateOrRegion: this.getFormValue('address_stateOrRegion') || null,
110
+ zipcode: this.getFormValue('address_zipcode') || null,
111
+ country: this.getFormValue('address_country') || null
112
+ };
113
+ return JSON.stringify(data);
114
+ }
115
+ //Events
116
+ onCountryChange(event) {
117
+ let country = event.target.value;
118
+ this.change.emit(country);
119
+ }
120
+ onUSStateChange(event) {
121
+ let usState = event.target.value;
122
+ this.change.emit(usState);
123
+ }
124
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AddressComponent, deps: [{ token: i1.FormBuilder }, { token: i2.CoreApiService }], target: i0.ɵɵFactoryTarget.Component });
125
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: AddressComponent, selector: "anatoly-forms-address", inputs: { title: "title", isTitleVisible: "isTitleVisible", isRequired: "isRequired", address: "address" }, outputs: { change: "change" }, usesInheritance: true, ngImport: i0, template: "<anatoly-card classes='card-primary card-outline'>\r\n <anatoly-card-header *ngIf='isTitleVisible' [title]='title'></anatoly-card-header>\r\n <anatoly-card-body>\r\n <div class='row' [formGroup]='formGroup'>\r\n <div class='form-group col-12' [ngClass]=\"{'has-error': isControlInvalid('address_street')}\" >\r\n <label class='col-form-label required'>Street Address</label>\r\n <input type='text' class='form-control' formControlName='address_street' placeholder='Street Address'>\r\n <anatoly-item-validation-summary controlName='address_street'\r\n controlTitle='Street'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-12' [ngClass]=\"{'has-error': isControlInvalid('address_street2')}\" >\r\n <input type='text' class='form-control' formControlName='address_street2' placeholder='Apartment, suite, unit, building, floor, etc.'>\r\n <anatoly-item-validation-summary controlName='address_street2'\r\n controlTitle='Street2'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_city')}\">\r\n <label class='col-form-label required'>City</label>\r\n <input type='text' class='form-control' formControlName='address_city' placeholder='City'>\r\n <anatoly-item-validation-summary controlName='address_city'\r\n controlTitle='City'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' *ngIf=\"formGroup.value.address_country == 'US'\" [ngClass]=\"{'has-error': isControlInvalid('address_stateOrRegion')}\">\r\n <label class='col-form-label required'>State</label>\r\n <select class='form-control' (change)='onUSStateChange($event)' formControlName='address_stateOrRegion'>\r\n <option *ngFor='let state of usStateData' [value]='state.code'>{{state.name}}</option>\r\n </select>\r\n <anatoly-item-validation-summary controlName='address_stateOrRegion'\r\n controlTitle='State'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_zipcode')}\" >\r\n <label class='col-form-label required'>zipcode</label>\r\n <input type='text' class='form-control' formControlName='address_zipcode' placeholder='zipcode'>\r\n <anatoly-item-validation-summary controlName='address_zipcode'\r\n controlTitle='zipcode'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_country')}\">\r\n <label class='col-form-label required'>Country</label>\r\n <select class='form-control' (change)='onCountryChange($event)' formControlName='address_country' data-placeholder='Select a Country'>\r\n <option *ngFor='let country of countryData' [value]='country.code'>{{country.name}}</option>\r\n </select>\r\n <anatoly-item-validation-summary controlName='address_country'\r\n controlTitle='Country'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n </div>\r\n </anatoly-card-body>\r\n</anatoly-card>\r\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.CardComponent, selector: "anatoly-card", inputs: ["classes"] }, { kind: "component", type: i5.CardHeaderComponent, selector: "anatoly-card-header", inputs: ["classes", "title"] }, { kind: "component", type: i6.CardBodyComponent, selector: "anatoly-card-body", inputs: ["classes"] }, { kind: "directive", type: i7.NativeElementDirective, selector: "[formControl], [formControlName]" }, { kind: "component", type: i8.ItemValidationSummaryComponent, selector: "anatoly-item-validation-summary", inputs: ["controlName", "controlTitle"] }] });
126
+ }
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: AddressComponent, decorators: [{
128
+ type: Component,
129
+ args: [{ selector: 'anatoly-forms-address', template: "<anatoly-card classes='card-primary card-outline'>\r\n <anatoly-card-header *ngIf='isTitleVisible' [title]='title'></anatoly-card-header>\r\n <anatoly-card-body>\r\n <div class='row' [formGroup]='formGroup'>\r\n <div class='form-group col-12' [ngClass]=\"{'has-error': isControlInvalid('address_street')}\" >\r\n <label class='col-form-label required'>Street Address</label>\r\n <input type='text' class='form-control' formControlName='address_street' placeholder='Street Address'>\r\n <anatoly-item-validation-summary controlName='address_street'\r\n controlTitle='Street'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-12' [ngClass]=\"{'has-error': isControlInvalid('address_street2')}\" >\r\n <input type='text' class='form-control' formControlName='address_street2' placeholder='Apartment, suite, unit, building, floor, etc.'>\r\n <anatoly-item-validation-summary controlName='address_street2'\r\n controlTitle='Street2'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_city')}\">\r\n <label class='col-form-label required'>City</label>\r\n <input type='text' class='form-control' formControlName='address_city' placeholder='City'>\r\n <anatoly-item-validation-summary controlName='address_city'\r\n controlTitle='City'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' *ngIf=\"formGroup.value.address_country == 'US'\" [ngClass]=\"{'has-error': isControlInvalid('address_stateOrRegion')}\">\r\n <label class='col-form-label required'>State</label>\r\n <select class='form-control' (change)='onUSStateChange($event)' formControlName='address_stateOrRegion'>\r\n <option *ngFor='let state of usStateData' [value]='state.code'>{{state.name}}</option>\r\n </select>\r\n <anatoly-item-validation-summary controlName='address_stateOrRegion'\r\n controlTitle='State'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_zipcode')}\" >\r\n <label class='col-form-label required'>zipcode</label>\r\n <input type='text' class='form-control' formControlName='address_zipcode' placeholder='zipcode'>\r\n <anatoly-item-validation-summary controlName='address_zipcode'\r\n controlTitle='zipcode'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n <div class='form-group col-3' [ngClass]=\"{'has-error': isControlInvalid('address_country')}\">\r\n <label class='col-form-label required'>Country</label>\r\n <select class='form-control' (change)='onCountryChange($event)' formControlName='address_country' data-placeholder='Select a Country'>\r\n <option *ngFor='let country of countryData' [value]='country.code'>{{country.name}}</option>\r\n </select>\r\n <anatoly-item-validation-summary controlName='address_country'\r\n controlTitle='Country'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n </div>\r\n </anatoly-card-body>\r\n</anatoly-card>\r\n" }]
130
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.CoreApiService }]; }, propDecorators: { title: [{
131
+ type: Input
132
+ }], isTitleVisible: [{
133
+ type: Input
134
+ }], isRequired: [{
135
+ type: Input
136
+ }], address: [{
137
+ type: Input
138
+ }], change: [{
139
+ type: Output
140
+ }] } });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29tcG9uZW50cy9hZGRyZXNzL2FkZHJlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2Zvcm1zL2NvbXBvbmVudHMvYWRkcmVzcy9hZGRyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7OztBQVd4RCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsaUJBQWlCO0lBK0JqQztJQUF5QjtJQTlCN0MsU0FBUztJQUNELFFBQVEsQ0FBQztJQUVqQixrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFFM0IsV0FBVyxHQUFvQixFQUFFLENBQUM7SUFDbEMsV0FBVyxHQUFvQixFQUFFLENBQUM7SUFDbEMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBRXRCLFFBQVE7SUFDQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQ2xCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdEIsVUFBVSxDQUFDO0lBRXBCLElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENB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QkFEVixLQUFLO2dCQWFJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAwMiBBdWcgMjAyMlxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQ29yZUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYXRhJztcclxuaW1wb3J0IHsgQ29udmVydCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXNlRWRpdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMnO1xyXG5cclxuaW50ZXJmYWNlIENvZGVOYW1lIHtcclxuICBjb2RlOiBzdHJpbmcsXHJcbiAgbmFtZTogc3RyaW5nXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5hdG9seS1mb3Jtcy1hZGRyZXNzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkcmVzcy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZHJlc3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9Qcml2YXRlXHJcbiAgcHJpdmF0ZSBfYWRkcmVzcztcclxuXHJcbiAgZm9ybUdyb3VwR2VuZXJhdGVkID0gZmFsc2U7XHJcblxyXG4gIGNvdW50cnlEYXRhOiBBcnJheTxDb2RlTmFtZT4gPSBbXTtcclxuICB1c1N0YXRlRGF0YTogQXJyYXk8Q29kZU5hbWU+ID0gW107XHJcbiAgY3VycmVudENvdW50cnkgPSAnVVMnO1xyXG4gIGN1cnJlbnRVU1N0YXRlID0gJ05ZJztcclxuXHJcbiAgLy9JbnB1dHNcclxuICBASW5wdXQoKSB0aXRsZSA9ICdBZGRyZXNzJztcclxuICBASW5wdXQoKSBpc1RpdGxlVmlzaWJsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgaXNSZXF1aXJlZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgYWRkcmVzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9hZGRyZXNzO1xyXG4gIH1cclxuICBzZXQgYWRkcmVzcyh2YWx1ZSkge1xyXG4gICAgdGhpcy5fYWRkcmVzcyA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vT3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgYXBpOiBDb3JlQXBpU2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hcGkuZ2V0Q291bnRyaWVzSnNvbkZpbGUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuY291bnRyeURhdGEgPSBkYXRhO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcGkuZ2V0VVNTdGF0ZXNKc29uRmlsZShkYXRhID0+IHtcclxuICAgICAgdGhpcy51c1N0YXRlRGF0YSA9IGRhdGE7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG4gICAgdGhpcy5pbml0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cCgpIHtcclxuICAgIGxldCBpc1JlcXVpcmVkID0gQ29udmVydC5zdHJpbmdUb0Jvb2xlYW4odGhpcy5pc1JlcXVpcmVkKTtcclxuXHJcbiAgICBpZiAoaXNSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdhZGRyZXNzX3N0cmVldCcsIHRoaXMuZmIuY29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSk7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woJ2FkZHJlc3Nfc3RyZWV0MicsIHRoaXMuZmIuY29udHJvbCgnJywgW10pKTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbCgnYWRkcmVzc19jaXR5JywgdGhpcy5mYi5jb250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pKTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbCgnYWRkcmVzc19zdGF0ZU9yUmVnaW9uJywgdGhpcy5mYi5jb250cm9sKHRoaXMuY3VycmVudFVTU3RhdGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdhZGRyZXNzX2NvdW50cnknLCB0aGlzLmZiLmNvbnRyb2wodGhpcy5jdXJyZW50Q291bnRyeSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSk7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woJ2FkZHJlc3NfemlwY29kZScsIHRoaXMuZmIuY29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbCgnYWRkcmVzc19zdHJlZXQnLCB0aGlzLmZiLmNvbnRyb2woJycsIFtdKSk7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woJ2FkZHJlc3Nfc3RyZWV0MicsIHRoaXMuZmIuY29udHJvbCgnJywgW10pKTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbCgnYWRkcmVzc19jaXR5JywgdGhpcy5mYi5jb250cm9sKCcnLCBbXSkpO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdhZGRyZXNzX3N0YXRlT3JSZWdpb24nLCB0aGlzLmZiLmNvbnRyb2wodGhpcy5jdXJyZW50VVNTdGF0ZSwgW10pKTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbCgnYWRkcmVzc19jb3VudHJ5JywgdGhpcy5mYi5jb250cm9sKHRoaXMuY3VycmVudENvdW50cnksIFtdKSk7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woJ2FkZHJlc3NfemlwY29kZScsIHRoaXMuZmIuY29udHJvbCgnJywgW10pKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1Hcm91cEdlbmVyYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwR2VuZXJhdGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fYWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBhZGRyZXNzID0gSlNPTi5wYXJzZSh0aGlzLl9hZGRyZXNzKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlKCdhZGRyZXNzX3N0cmVldCcsIGFkZHJlc3Muc3RyZWV0KTtcclxuICAgICAgdGhpcy5zZXRGb3JtVmFsdWUoJ2FkZHJlc3Nfc3RyZWV0MicsIGFkZHJlc3Muc3RyZWV0Mik7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlKCdhZGRyZXNzX2NpdHknLCBhZGRyZXNzLmNpdHkpO1xyXG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZSgnYWRkcmVzc19zdGF0ZU9yUmVnaW9uJywgYWRkcmVzcy5zdGF0ZU9yUmVnaW9uKTtcclxuICAgICAgdGhpcy5zZXRGb3JtVmFsdWUoJ2FkZHJlc3NfemlwY29kZScsIGFkZHJlc3MuemlwY29kZSk7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlKCdhZGRyZXNzX2NvdW50cnknLCBhZGRyZXNzLmNvdW50cnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWRkcmVzcygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHN0cmVldDogdGhpcy5nZXRGb3JtVmFsdWUoJ2FkZHJlc3Nfc3RyZWV0JykgfHwgbnVsbCxcclxuICAgICAgc3RyZWV0MjogdGhpcy5nZXRGb3JtVmFsdWUoJ2FkZHJlc3Nfc3RyZWV0MicpIHx8IG51bGwsXHJcbiAgICAgIGNpdHk6IHRoaXMuZ2V0Rm9ybVZhbHVlKCdhZGRyZXNzX2NpdHknKSB8fCBudWxsLFxyXG4gICAgICBzdGF0ZU9yUmVnaW9uOiB0aGlzLmdldEZvcm1WYWx1ZSgnYWRkcmVzc19zdGF0ZU9yUmVnaW9uJykgfHwgbnVsbCxcclxuICAgICAgemlwY29kZTogdGhpcy5nZXRGb3JtVmFsdWUoJ2FkZHJlc3NfemlwY29kZScpIHx8IG51bGwsXHJcbiAgICAgIGNvdW50cnk6IHRoaXMuZ2V0Rm9ybVZhbHVlKCdhZGRyZXNzX2NvdW50cnknKSB8fCBudWxsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICB9XHJcblxyXG4gIC8vRXZlbnRzXHJcbiAgb25Db3VudHJ5Q2hhbmdlKGV2ZW50KSB7XHJcbiAgICBsZXQgY291bnRyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQoY291bnRyeSk7XHJcbiAgfVxyXG5cclxuICBvblVTU3RhdGVDaGFuZ2UoZXZlbnQpIHtcclxuICAgIGxldCB1c1N0YXRlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh1c1N0YXRlKTtcclxuICB9XHJcbn1cclxuIiwiPGFuYXRvbHktY2FyZCBjbGFzc2VzPSdjYXJkLXByaW1hcnkgY2FyZC1vdXRsaW5lJz5cclxuICA8YW5hdG9seS1jYXJkLWhlYWRlciAqbmdJZj0naXNUaXRsZVZpc2libGUnIFt0aXRsZV09J3RpdGxlJz48L2FuYXRvbHktY2FyZC1oZWFkZXI+XHJcbiAgPGFuYXRvbHktY2FyZC1ib2R5PlxyXG4gICAgPGRpdiBjbGFzcz0ncm93JyBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJz5cclxuICAgICAgPGRpdiBjbGFzcz0nZm9ybS1ncm91cCBjb2wtMTInIFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZCgnYWRkcmVzc19zdHJlZXQnKX1cIiA+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPSdjb2wtZm9ybS1sYWJlbCByZXF1aXJlZCc+U3RyZWV0IEFkZHJlc3M8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZm9ybS1jb250cm9sJyBmb3JtQ29udHJvbE5hbWU9J2FkZHJlc3Nfc3RyZWV0JyBwbGFjZWhvbGRlcj0nU3RyZWV0IEFkZHJlc3MnPlxyXG4gICAgICAgIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IGNvbnRyb2xOYW1lPSdhZGRyZXNzX3N0cmVldCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J1N0cmVldCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCc+XHJcbiAgICAgICAgPC9hbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAgY29sLTEyJyBbbmdDbGFzc109XCJ7J2hhcy1lcnJvcic6IGlzQ29udHJvbEludmFsaWQoJ2FkZHJlc3Nfc3RyZWV0MicpfVwiID5cclxuICAgICAgICA8aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2Zvcm0tY29udHJvbCcgZm9ybUNvbnRyb2xOYW1lPSdhZGRyZXNzX3N0cmVldDInIHBsYWNlaG9sZGVyPSdBcGFydG1lbnQsIHN1aXRlLCB1bml0LCBidWlsZGluZywgZmxvb3IsIGV0Yy4nPlxyXG4gICAgICAgIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IGNvbnRyb2xOYW1lPSdhZGRyZXNzX3N0cmVldDInXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFRpdGxlPSdTdHJlZXQyJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1TdWJtaXR0ZWRdPSdmb3JtU3VibWl0dGVkJz5cclxuICAgICAgICA8L2FuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnk+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz0nZm9ybS1ncm91cCBjb2wtMycgW25nQ2xhc3NdPVwieydoYXMtZXJyb3InOiBpc0NvbnRyb2xJbnZhbGlkKCdhZGRyZXNzX2NpdHknKX1cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9J2NvbC1mb3JtLWxhYmVsIHJlcXVpcmVkJz5DaXR5PC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT0ndGV4dCcgY2xhc3M9J2Zvcm0tY29udHJvbCcgZm9ybUNvbnRyb2xOYW1lPSdhZGRyZXNzX2NpdHknIHBsYWNlaG9sZGVyPSdDaXR5Jz5cclxuICAgICAgICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBjb250cm9sTmFtZT0nYWRkcmVzc19jaXR5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUaXRsZT0nQ2l0eSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCc+XHJcbiAgICAgICAgPC9hbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAgY29sLTMnICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLmFkZHJlc3NfY291bnRyeSA9PSAnVVMnXCIgW25nQ2xhc3NdPVwieydoYXMtZXJyb3InOiBpc0NvbnRyb2xJbnZhbGlkKCdhZGRyZXNzX3N0YXRlT3JSZWdpb24nKX1cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9J2NvbC1mb3JtLWxhYmVsIHJlcXVpcmVkJz5TdGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgPHNlbGVjdCBjbGFzcz0nZm9ybS1jb250cm9sJyAoY2hhbmdlKT0nb25VU1N0YXRlQ2hhbmdlKCRldmVudCknIGZvcm1Db250cm9sTmFtZT0nYWRkcmVzc19zdGF0ZU9yUmVnaW9uJz5cclxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPSdsZXQgc3RhdGUgb2YgdXNTdGF0ZURhdGEnIFt2YWx1ZV09J3N0YXRlLmNvZGUnPnt7c3RhdGUubmFtZX19PC9vcHRpb24+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgPGFuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkgY29udHJvbE5hbWU9J2FkZHJlc3Nfc3RhdGVPclJlZ2lvbidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J1N0YXRlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1TdWJtaXR0ZWRdPSdmb3JtU3VibWl0dGVkJz5cclxuICAgICAgICA8L2FuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnk+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz0nZm9ybS1ncm91cCBjb2wtMycgW25nQ2xhc3NdPVwieydoYXMtZXJyb3InOiBpc0NvbnRyb2xJbnZhbGlkKCdhZGRyZXNzX3ppcGNvZGUnKX1cIiA+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPSdjb2wtZm9ybS1sYWJlbCByZXF1aXJlZCc+emlwY29kZTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmb3JtLWNvbnRyb2wnIGZvcm1Db250cm9sTmFtZT0nYWRkcmVzc196aXBjb2RlJyBwbGFjZWhvbGRlcj0nemlwY29kZSc+XHJcbiAgICAgICAgPGFuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkgY29udHJvbE5hbWU9J2FkZHJlc3NfemlwY29kZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J3ppcGNvZGUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09J2Zvcm1Hcm91cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybVN1Ym1pdHRlZF09J2Zvcm1TdWJtaXR0ZWQnPlxyXG4gICAgICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPSdmb3JtLWdyb3VwIGNvbC0zJyBbbmdDbGFzc109XCJ7J2hhcy1lcnJvcic6IGlzQ29udHJvbEludmFsaWQoJ2FkZHJlc3NfY291bnRyeScpfVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz0nY29sLWZvcm0tbGFiZWwgcmVxdWlyZWQnPkNvdW50cnk8L2xhYmVsPlxyXG4gICAgICAgIDxzZWxlY3QgY2xhc3M9J2Zvcm0tY29udHJvbCcgKGNoYW5nZSk9J29uQ291bnRyeUNoYW5nZSgkZXZlbnQpJyBmb3JtQ29udHJvbE5hbWU9J2FkZHJlc3NfY291bnRyeScgZGF0YS1wbGFjZWhvbGRlcj0nU2VsZWN0IGEgQ291bnRyeSc+XHJcbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj0nbGV0IGNvdW50cnkgb2YgY291bnRyeURhdGEnIFt2YWx1ZV09J2NvdW50cnkuY29kZSc+e3tjb3VudHJ5Lm5hbWV9fTwvb3B0aW9uPlxyXG4gICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IGNvbnRyb2xOYW1lPSdhZGRyZXNzX2NvdW50cnknXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFRpdGxlPSdDb3VudHJ5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1TdWJtaXR0ZWRdPSdmb3JtU3VibWl0dGVkJz5cclxuICAgICAgICA8L2FuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnk+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9hbmF0b2x5LWNhcmQtYm9keT5cclxuPC9hbmF0b2x5LWNhcmQ+XHJcbiJdfQ==
@@ -0,0 +1,94 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 02 Aug 2022
12
+
13
+ Copyright (c) 2017-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ //Node
17
+ import { Component, Input } from '@angular/core';
18
+ //App
19
+ import { BaseEditComponent } from '../../../components';
20
+ import * as i0 from "@angular/core";
21
+ import * as i1 from "@angular/forms";
22
+ import * as i2 from "@angular/common";
23
+ import * as i3 from "../../../components/card/card.component";
24
+ import * as i4 from "../../../components/card/card-header.component";
25
+ import * as i5 from "../../../components/card/card-body.component";
26
+ import * as i6 from "../../../directives/native-element.directive";
27
+ import * as i7 from "../../../validation/item-validation-summary.component";
28
+ export class CompanyComponent extends BaseEditComponent {
29
+ fb;
30
+ //Private
31
+ _company;
32
+ formGroupGenerated = false;
33
+ //Inputs
34
+ title = 'Company / Organization';
35
+ isTitleVisible = true;
36
+ get company() {
37
+ return this._company;
38
+ }
39
+ set company(value) {
40
+ this._company = value;
41
+ if (value) {
42
+ this.init();
43
+ }
44
+ }
45
+ constructor(fb) {
46
+ super();
47
+ this.fb = fb;
48
+ }
49
+ ngOnInit() {
50
+ this.createFormGroup();
51
+ this.init();
52
+ }
53
+ createFormGroup() {
54
+ this.formGroup.addControl('company_name', this.fb.control('', []));
55
+ this.formGroup.addControl('company_phone', this.fb.control('', []));
56
+ this.formGroup.addControl('company_email', this.fb.control('', []));
57
+ this.formGroup.addControl('company_websiteUrl', this.fb.control('', []));
58
+ this.formGroupGenerated = true;
59
+ }
60
+ init() {
61
+ if (!this.formGroupGenerated) {
62
+ return;
63
+ }
64
+ if (this._company !== undefined) {
65
+ let company = JSON.parse(this._company);
66
+ this.setFormValue('company_name', company.name);
67
+ this.setFormValue('company_phone', company.phone);
68
+ this.setFormValue('company_email', company.email);
69
+ this.setFormValue('company_websiteUrl', company.websiteUrl);
70
+ }
71
+ }
72
+ getCompany() {
73
+ const data = {
74
+ name: this.getFormValue('company_name') || null,
75
+ phone: this.getFormValue('company_phone') || null,
76
+ email: this.getFormValue('company_email') || null,
77
+ websiteUrl: this.getFormValue('company_websiteUrl') || null
78
+ };
79
+ return JSON.stringify(data);
80
+ }
81
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: CompanyComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
82
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: CompanyComponent, selector: "anatoly-forms-company", inputs: { title: "title", isTitleVisible: "isTitleVisible", company: "company" }, usesInheritance: true, ngImport: i0, template: "<anatoly-card classes='card-primary card-outline'>\r\n <anatoly-card-header *ngIf='isTitleVisible' [title]='title'></anatoly-card-header>\r\n <anatoly-card-body>\r\n <div [formGroup]='formGroup' class='row'>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_name') }\">\r\n <label class='col-form-label'>Name</label>\r\n <input type='text' class='form-control' formControlName='company_name' placeholder='Company Name'>\r\n <anatoly-item-validation-summary controlName='company_name'\r\n controlTitle='Company Name'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_phone') }\">\r\n <label class='col-form-label'>Phone</label>\r\n <input type='tel' class='form-control' formControlName='company_phone' placeholder='Company Phone'>\r\n <anatoly-item-validation-summary controlName='company_phone'\r\n controlTitle='Company Phone'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_email') }\">\r\n <label class='col-form-label'>Email</label>\r\n <input type='email' class='form-control' formControlName='company_email' placeholder='Company Email'>\r\n <anatoly-item-validation-summary controlName='company_email'\r\n controlTitle='Company Email'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_websiteUrl') }\">\r\n <label class='col-form-label'>Website Url</label>\r\n <input type='url' placeholder='https://example.com' pattern='https://.*' size='30'\r\n class='form-control' formControlName='company_websiteUrl'>\r\n <anatoly-item-validation-summary controlName='company_websiteUrl'\r\n controlTitle='Company website url'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n </div>\r\n </anatoly-card-body>\r\n</anatoly-card>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.CardComponent, selector: "anatoly-card", inputs: ["classes"] }, { kind: "component", type: i4.CardHeaderComponent, selector: "anatoly-card-header", inputs: ["classes", "title"] }, { kind: "component", type: i5.CardBodyComponent, selector: "anatoly-card-body", inputs: ["classes"] }, { kind: "directive", type: i6.NativeElementDirective, selector: "[formControl], [formControlName]" }, { kind: "component", type: i7.ItemValidationSummaryComponent, selector: "anatoly-item-validation-summary", inputs: ["controlName", "controlTitle"] }] });
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: CompanyComponent, decorators: [{
85
+ type: Component,
86
+ args: [{ selector: 'anatoly-forms-company', template: "<anatoly-card classes='card-primary card-outline'>\r\n <anatoly-card-header *ngIf='isTitleVisible' [title]='title'></anatoly-card-header>\r\n <anatoly-card-body>\r\n <div [formGroup]='formGroup' class='row'>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_name') }\">\r\n <label class='col-form-label'>Name</label>\r\n <input type='text' class='form-control' formControlName='company_name' placeholder='Company Name'>\r\n <anatoly-item-validation-summary controlName='company_name'\r\n controlTitle='Company Name'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_phone') }\">\r\n <label class='col-form-label'>Phone</label>\r\n <input type='tel' class='form-control' formControlName='company_phone' placeholder='Company Phone'>\r\n <anatoly-item-validation-summary controlName='company_phone'\r\n controlTitle='Company Phone'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_email') }\">\r\n <label class='col-form-label'>Email</label>\r\n <input type='email' class='form-control' formControlName='company_email' placeholder='Company Email'>\r\n <anatoly-item-validation-summary controlName='company_email'\r\n controlTitle='Company Email'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n <div class='form-group col-6' [ngClass]=\"{'has-error': isControlInvalid('company_websiteUrl') }\">\r\n <label class='col-form-label'>Website Url</label>\r\n <input type='url' placeholder='https://example.com' pattern='https://.*' size='30'\r\n class='form-control' formControlName='company_websiteUrl'>\r\n <anatoly-item-validation-summary controlName='company_websiteUrl'\r\n controlTitle='Company website url'\r\n [formGroup]='formGroup'\r\n [formSubmitted]='formSubmitted'>\r\n </anatoly-item-validation-summary>\r\n </div>\r\n\r\n </div>\r\n </anatoly-card-body>\r\n</anatoly-card>\r\n" }]
87
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { title: [{
88
+ type: Input
89
+ }], isTitleVisible: [{
90
+ type: Input
91
+ }], company: [{
92
+ type: Input
93
+ }] } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFueS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29tcG9uZW50cy9jb21wYW55L2NvbXBhbnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2Zvcm1zL2NvbXBvbmVudHMvY29tcGFueS9jb21wYW55LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR3pELEtBQUs7QUFDTCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0FBTXhELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFzQmpDO0lBckJwQixTQUFTO0lBQ0QsUUFBUSxDQUFDO0lBRWpCLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUUzQixRQUFRO0lBQ0MsS0FBSyxHQUFHLHdCQUF3QixDQUFDO0lBQ2pDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFFL0IsSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxZQUFvQixFQUFlO1FBQ2pDLEtBQUssRUFBRSxDQUFDO1FBRFUsT0FBRSxHQUFGLEVBQUUsQ0FBYTtJQUVuQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXhDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLElBQUksR0FBRztZQUNYLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUk7WUFDL0MsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSTtZQUNqRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJO1lBQ2pELFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSTtTQUM1RCxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7dUdBaEVVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLHNLQzNCN0Isa3lGQTZDQTs7MkZEbEJhLGdCQUFnQjtrQkFKNUIsU0FBUzsrQkFDRSx1QkFBdUI7a0dBVXhCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdGLE9BQU87c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAwMiBBdWcgMjAyMlxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBCYXNlRWRpdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhbmF0b2x5LWZvcm1zLWNvbXBhbnknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wYW55LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tcGFueUNvbXBvbmVudCBleHRlbmRzIEJhc2VFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1ByaXZhdGVcclxuICBwcml2YXRlIF9jb21wYW55O1xyXG5cclxuICBmb3JtR3JvdXBHZW5lcmF0ZWQgPSBmYWxzZTtcclxuXHJcbiAgLy9JbnB1dHNcclxuICBASW5wdXQoKSB0aXRsZSA9ICdDb21wYW55IC8gT3JnYW5pemF0aW9uJztcclxuICBASW5wdXQoKSBpc1RpdGxlVmlzaWJsZSA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNvbXBhbnkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcGFueTtcclxuICB9XHJcbiAgc2V0IGNvbXBhbnkodmFsdWUpIHtcclxuICAgIHRoaXMuX2NvbXBhbnkgPSB2YWx1ZTtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoKSB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdjb21wYW55X25hbWUnLCB0aGlzLmZiLmNvbnRyb2woJycsIFtdKSk7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdjb21wYW55X3Bob25lJywgdGhpcy5mYi5jb250cm9sKCcnLCBbXSkpO1xyXG4gICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbCgnY29tcGFueV9lbWFpbCcsIHRoaXMuZmIuY29udHJvbCgnJywgW10pKTtcclxuICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woJ2NvbXBhbnlfd2Vic2l0ZVVybCcsIHRoaXMuZmIuY29udHJvbCgnJywgW10pKTtcclxuXHJcbiAgICB0aGlzLmZvcm1Hcm91cEdlbmVyYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwR2VuZXJhdGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY29tcGFueSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBjb21wYW55ID0gSlNPTi5wYXJzZSh0aGlzLl9jb21wYW55KTtcclxuXHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlKCdjb21wYW55X25hbWUnLCBjb21wYW55Lm5hbWUpO1xyXG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZSgnY29tcGFueV9waG9uZScsIGNvbXBhbnkucGhvbmUpO1xyXG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZSgnY29tcGFueV9lbWFpbCcsIGNvbXBhbnkuZW1haWwpO1xyXG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZSgnY29tcGFueV93ZWJzaXRlVXJsJywgY29tcGFueS53ZWJzaXRlVXJsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbXBhbnkoKSB7XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBuYW1lOiB0aGlzLmdldEZvcm1WYWx1ZSgnY29tcGFueV9uYW1lJykgfHwgbnVsbCxcclxuICAgICAgcGhvbmU6IHRoaXMuZ2V0Rm9ybVZhbHVlKCdjb21wYW55X3Bob25lJykgfHwgbnVsbCxcclxuICAgICAgZW1haWw6IHRoaXMuZ2V0Rm9ybVZhbHVlKCdjb21wYW55X2VtYWlsJykgfHwgbnVsbCxcclxuICAgICAgd2Vic2l0ZVVybDogdGhpcy5nZXRGb3JtVmFsdWUoJ2NvbXBhbnlfd2Vic2l0ZVVybCcpIHx8IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gIH1cclxufVxyXG4iLCI8YW5hdG9seS1jYXJkIGNsYXNzZXM9J2NhcmQtcHJpbWFyeSBjYXJkLW91dGxpbmUnPlxyXG4gIDxhbmF0b2x5LWNhcmQtaGVhZGVyICpuZ0lmPSdpc1RpdGxlVmlzaWJsZScgW3RpdGxlXT0ndGl0bGUnPjwvYW5hdG9seS1jYXJkLWhlYWRlcj5cclxuICA8YW5hdG9seS1jYXJkLWJvZHk+XHJcbiAgICA8ZGl2ICBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJyAgY2xhc3M9J3Jvdyc+XHJcbiAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAgY29sLTYnIFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZCgnY29tcGFueV9uYW1lJykgfVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz0nY29sLWZvcm0tbGFiZWwnPk5hbWU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZm9ybS1jb250cm9sJyBmb3JtQ29udHJvbE5hbWU9J2NvbXBhbnlfbmFtZScgcGxhY2Vob2xkZXI9J0NvbXBhbnkgTmFtZSc+XHJcbiAgICAgICAgPGFuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkgY29udHJvbE5hbWU9J2NvbXBhbnlfbmFtZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J0NvbXBhbnkgTmFtZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCc+XHJcbiAgICAgICAgPC9hbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz0nZm9ybS1ncm91cCBjb2wtNicgW25nQ2xhc3NdPVwieydoYXMtZXJyb3InOiBpc0NvbnRyb2xJbnZhbGlkKCdjb21wYW55X3Bob25lJykgfVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz0nY29sLWZvcm0tbGFiZWwnPlBob25lPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT0ndGVsJyBjbGFzcz0nZm9ybS1jb250cm9sJyBmb3JtQ29udHJvbE5hbWU9J2NvbXBhbnlfcGhvbmUnIHBsYWNlaG9sZGVyPSdDb21wYW55IFBob25lJz5cclxuICAgICAgICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBjb250cm9sTmFtZT0nY29tcGFueV9waG9uZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J0NvbXBhbnkgUGhvbmUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09J2Zvcm1Hcm91cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybVN1Ym1pdHRlZF09J2Zvcm1TdWJtaXR0ZWQnPlxyXG4gICAgICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAgY29sLTYnIFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZCgnY29tcGFueV9lbWFpbCcpIH1cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9J2NvbC1mb3JtLWxhYmVsJz5FbWFpbDwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9J2VtYWlsJyBjbGFzcz0nZm9ybS1jb250cm9sJyBmb3JtQ29udHJvbE5hbWU9J2NvbXBhbnlfZW1haWwnIHBsYWNlaG9sZGVyPSdDb21wYW55IEVtYWlsJz5cclxuICAgICAgICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBjb250cm9sTmFtZT0nY29tcGFueV9lbWFpbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J0NvbXBhbnkgRW1haWwnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09J2Zvcm1Hcm91cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybVN1Ym1pdHRlZF09J2Zvcm1TdWJtaXR0ZWQnPlxyXG4gICAgICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAgY29sLTYnIFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZCgnY29tcGFueV93ZWJzaXRlVXJsJykgfVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz0nY29sLWZvcm0tbGFiZWwnPldlYnNpdGUgVXJsPC9sYWJlbD5cclxuICAgICAgICA8aW5wdXQgdHlwZT0ndXJsJyBwbGFjZWhvbGRlcj0naHR0cHM6Ly9leGFtcGxlLmNvbScgcGF0dGVybj0naHR0cHM6Ly8uKicgc2l6ZT0nMzAnXHJcbiAgICAgICAgICAgICAgIGNsYXNzPSdmb3JtLWNvbnRyb2wnIGZvcm1Db250cm9sTmFtZT0nY29tcGFueV93ZWJzaXRlVXJsJz5cclxuICAgICAgICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBjb250cm9sTmFtZT0nY29tcGFueV93ZWJzaXRlVXJsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUaXRsZT0nQ29tcGFueSB3ZWJzaXRlIHVybCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCc+XHJcbiAgICAgICAgPC9hbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2FuYXRvbHktY2FyZC1ib2R5PlxyXG48L2FuYXRvbHktY2FyZD5cclxuIl19
@@ -0,0 +1,74 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 02 Aug 2022
12
+
13
+ Copyright (c) 2017-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ //Node
17
+ import { Component, Input } from '@angular/core';
18
+ //App
19
+ import { BaseEditComponent } from '../../../../components/base/base-edit.component';
20
+ import * as i0 from "@angular/core";
21
+ import * as i1 from "../../../../../data/services/core-api.service";
22
+ import * as i2 from "../../../../../core/services/appcontext.service";
23
+ import * as i3 from "@angular/common";
24
+ import * as i4 from "@angular/forms";
25
+ import * as i5 from "../../../../directives/native-element.directive";
26
+ export class TimezoneDropdownlist extends BaseEditComponent {
27
+ api;
28
+ appContext;
29
+ timezoneListItems;
30
+ //Inputs
31
+ title = 'Timezone';
32
+ isTitleVisible = true;
33
+ controlName = 'timezone';
34
+ controlTitle;
35
+ constructor(api, appContext) {
36
+ super();
37
+ this.api = api;
38
+ this.appContext = appContext;
39
+ }
40
+ ngOnInit() {
41
+ this.setValues();
42
+ }
43
+ setValues() {
44
+ this.api.getTimezonesJsonFile(data => {
45
+ this.timezoneListItems = data.reverse();
46
+ });
47
+ try {
48
+ let timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
49
+ this.setFormValue(this.controlName, timeZone);
50
+ }
51
+ catch {
52
+ }
53
+ let context = this.appContext.current;
54
+ let timeZone = context?.account?.timezone;
55
+ if (timeZone) {
56
+ this.setFormValue(this.controlName, timeZone);
57
+ }
58
+ }
59
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: TimezoneDropdownlist, deps: [{ token: i1.CoreApiService }, { token: i2.AppContextService }], target: i0.ɵɵFactoryTarget.Component });
60
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: TimezoneDropdownlist, selector: "anatoly-forms-timezone-dropdownlist", inputs: { title: "title", isTitleVisible: "isTitleVisible", controlName: "controlName", controlTitle: "controlTitle" }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]='formGroup' class='form-group'>\r\n <label *ngIf='isTitleVisible' class='col-form-label'>Timezone</label>\r\n <select [formControlName]='controlName' class='form-control'>\r\n <option *ngFor='let timezone of timezoneListItems'\r\n [value]='timezone.code'>\r\n ({{timezone.offset}}) {{timezone.name}}\r\n </option>\r\n </select>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.NativeElementDirective, selector: "[formControl], [formControlName]" }] });
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: TimezoneDropdownlist, decorators: [{
63
+ type: Component,
64
+ args: [{ selector: 'anatoly-forms-timezone-dropdownlist', template: "<div [formGroup]='formGroup' class='form-group'>\r\n <label *ngIf='isTitleVisible' class='col-form-label'>Timezone</label>\r\n <select [formControlName]='controlName' class='form-control'>\r\n <option *ngFor='let timezone of timezoneListItems'\r\n [value]='timezone.code'>\r\n ({{timezone.offset}}) {{timezone.name}}\r\n </option>\r\n </select>\r\n</div>\r\n" }]
65
+ }], ctorParameters: function () { return [{ type: i1.CoreApiService }, { type: i2.AppContextService }]; }, propDecorators: { title: [{
66
+ type: Input
67
+ }], isTitleVisible: [{
68
+ type: Input
69
+ }], controlName: [{
70
+ type: Input
71
+ }], controlTitle: [{
72
+ type: Input
73
+ }] } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXpvbmUuZHJvcGRvd25saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2Zvcm1zL2NvbXBvbmVudHMvZHJvcGRvd25saXN0cy90aW1lem9uZS90aW1lem9uZS5kcm9wZG93bmxpc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29tcG9uZW50cy9kcm9wZG93bmxpc3RzL3RpbWV6b25lL3RpbWV6b25lLmRyb3Bkb3dubGlzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELEtBQUs7QUFDTCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7OztBQWVwRixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsaUJBQWlCO0lBVS9DO0lBQ0E7SUFWVixpQkFBaUIsQ0FBYTtJQUU5QixRQUFRO0lBQ0MsS0FBSyxHQUFHLFVBQVUsQ0FBQztJQUNuQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDekIsWUFBWSxDQUFTO0lBRTlCLFlBQ1UsR0FBbUIsRUFDbkIsVUFBNkI7UUFDckMsS0FBSyxFQUFFLENBQUM7UUFGQSxRQUFHLEdBQUgsR0FBRyxDQUFnQjtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFtQjtJQUV2QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUk7WUFDRixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMvQztRQUNELE1BQU07U0FDTDtRQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3RDLElBQUksUUFBUSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBRTFDLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQzt1R0FyQ1Usb0JBQW9COzJGQUFwQixvQkFBb0IsME5DbkNqQyxrWUFTQTs7MkZEMEJhLG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDRSxxQ0FBcUM7cUlBT3RDLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAwMiBBdWcgMjAyMlxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IEJhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9iYXNlL2Jhc2UtZWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBcHBDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYXBwY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kYXRhL3NlcnZpY2VzL2NvcmUtYXBpLnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIFRpbWV6b25lIHtcclxuICBjb2RlOiBzdHJpbmcsXHJcbiAgbmFtZTogc3RyaW5nLFxyXG4gIG9mZnNldDogc3RyaW5nLFxyXG4gIG9mZnNldF9zZWNvbmRzOiBudW1iZXJcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhbmF0b2x5LWZvcm1zLXRpbWV6b25lLWRyb3Bkb3dubGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWV6b25lLmRyb3Bkb3dubGlzdC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGltZXpvbmVEcm9wZG93bmxpc3QgZXh0ZW5kcyBCYXNlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgdGltZXpvbmVMaXN0SXRlbXM6IFRpbWV6b25lW107XHJcblxyXG4gIC8vSW5wdXRzXHJcbiAgQElucHV0KCkgdGl0bGUgPSAnVGltZXpvbmUnO1xyXG4gIEBJbnB1dCgpIGlzVGl0bGVWaXNpYmxlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjb250cm9sTmFtZSA9ICd0aW1lem9uZSc7XHJcbiAgQElucHV0KCkgY29udHJvbFRpdGxlOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcGk6IENvcmVBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBDb250ZXh0OiBBcHBDb250ZXh0U2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlcygpIHtcclxuICAgIHRoaXMuYXBpLmdldFRpbWV6b25lc0pzb25GaWxlKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLnRpbWV6b25lTGlzdEl0ZW1zID0gZGF0YS5yZXZlcnNlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgdGltZVpvbmUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlKHRoaXMuY29udHJvbE5hbWUsIHRpbWVab25lKTtcclxuICAgIH1cclxuICAgIGNhdGNoIHtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29udGV4dCA9IHRoaXMuYXBwQ29udGV4dC5jdXJyZW50O1xyXG4gICAgbGV0IHRpbWVab25lID0gY29udGV4dD8uYWNjb3VudD8udGltZXpvbmU7XHJcblxyXG4gICAgaWYgKHRpbWVab25lKSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlKHRoaXMuY29udHJvbE5hbWUsIHRpbWVab25lKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJyBjbGFzcz0nZm9ybS1ncm91cCc+XHJcbiAgPGxhYmVsICpuZ0lmPSdpc1RpdGxlVmlzaWJsZScgY2xhc3M9J2NvbC1mb3JtLWxhYmVsJz5UaW1lem9uZTwvbGFiZWw+XHJcbiAgPHNlbGVjdCBbZm9ybUNvbnRyb2xOYW1lXT0nY29udHJvbE5hbWUnIGNsYXNzPSdmb3JtLWNvbnRyb2wnPlxyXG4gICAgPG9wdGlvbiAqbmdGb3I9J2xldCB0aW1lem9uZSBvZiB0aW1lem9uZUxpc3RJdGVtcydcclxuICAgICAgICAgICAgW3ZhbHVlXT0ndGltZXpvbmUuY29kZSc+XHJcbiAgICAgICh7e3RpbWV6b25lLm9mZnNldH19KSAge3t0aW1lem9uZS5uYW1lfX1cclxuICAgIDwvb3B0aW9uPlxyXG4gIDwvc2VsZWN0PlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,98 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 02 Aug 2022
12
+
13
+ Copyright (c) 2017-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ //Node
17
+ import { Component, Input, EventEmitter, Output } from '@angular/core';
18
+ //App
19
+ import { BaseEditComponent } from '../../../components/base/base-edit.component';
20
+ import { Utils } from '../../../../core/utils';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "@angular/common";
23
+ import * as i2 from "@angular/forms";
24
+ import * as i3 from "../../../directives/native-element.directive";
25
+ import * as i4 from "../../../validation/item-validation-summary.component";
26
+ export class UrlSlugComponent extends BaseEditComponent {
27
+ firstValue = true;
28
+ hrefGo;
29
+ //Inputs
30
+ title = 'Permalink:';
31
+ isTitleVisible = true;
32
+ controlName;
33
+ controlTitle;
34
+ class;
35
+ watchedControlName;
36
+ urlPrefix;
37
+ isGoButtonVisible = true;
38
+ //Outputs
39
+ generating = new EventEmitter();
40
+ constructor() {
41
+ super();
42
+ }
43
+ ngOnInit() {
44
+ this.startWatching();
45
+ }
46
+ generateUrlSlug(text) {
47
+ let slugedText = Utils.slugify(text);
48
+ let event = { urlSlug: slugedText };
49
+ this.generating.emit(event);
50
+ this.setFormValue(this.controlName, event.urlSlug);
51
+ }
52
+ startWatching() {
53
+ this.subs.sink = this.formGroup.get(this.watchedControlName).valueChanges.subscribe({
54
+ next: (value) => {
55
+ if (this.firstValue) {
56
+ this.firstValue = false;
57
+ return;
58
+ }
59
+ this.generateUrlSlug(value);
60
+ }
61
+ });
62
+ this.subs.sink = this.formGroup.get(this.controlName).valueChanges.subscribe({
63
+ next: (value) => {
64
+ this.hrefGo = value;
65
+ }
66
+ });
67
+ }
68
+ //Events
69
+ onUrlSlugChange() {
70
+ let text = this.getFormValue(this.controlName);
71
+ this.generateUrlSlug(text);
72
+ }
73
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: UrlSlugComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
74
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: UrlSlugComponent, selector: "anatoly-forms-urlslug", inputs: { title: "title", isTitleVisible: "isTitleVisible", controlName: "controlName", controlTitle: "controlTitle", class: "class", watchedControlName: "watchedControlName", urlPrefix: "urlPrefix", isGoButtonVisible: "isGoButtonVisible" }, outputs: { generating: "generating" }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]='formGroup' [ngClass]=\"{'has-error': isControlInvalid(controlName)}\"\r\n class=\"permalink form-group {{class}}\">\r\n <div class=\"d-flex align-items-end\">\r\n <anatoly-item-validation-summary [formGroup]='formGroup' [formSubmitted]='formSubmitted' [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n <div class=\"form-group\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'>\r\n {{ title }}\r\n <span class=\"urlPrefix\">{{ urlPrefix }}</span>\r\n </label>\r\n <input type='text' class='form-control' [formControlName]='controlName' placeholder='Type url slug here'\r\n (focusout)='onUrlSlugChange()' />\r\n </div>\r\n\r\n <div class=\"form-group flex-shrink-1\" *ngIf=\"isGoButtonVisible\">\r\n <a href=\"{{urlPrefix}}{{hrefGo}}\" target=\"_blank\" class=\"btn btn-primary\">Go</a>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.NativeElementDirective, selector: "[formControl], [formControlName]" }, { kind: "component", type: i4.ItemValidationSummaryComponent, selector: "anatoly-item-validation-summary", inputs: ["controlName", "controlTitle"] }] });
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: UrlSlugComponent, decorators: [{
77
+ type: Component,
78
+ args: [{ selector: 'anatoly-forms-urlslug', template: "<div [formGroup]='formGroup' [ngClass]=\"{'has-error': isControlInvalid(controlName)}\"\r\n class=\"permalink form-group {{class}}\">\r\n <div class=\"d-flex align-items-end\">\r\n <anatoly-item-validation-summary [formGroup]='formGroup' [formSubmitted]='formSubmitted' [controlName]='controlName'\r\n [controlTitle]='controlTitle'>\r\n </anatoly-item-validation-summary>\r\n <div class=\"form-group\">\r\n <label *ngIf='isTitleVisible' class='col-form-label'>\r\n {{ title }}\r\n <span class=\"urlPrefix\">{{ urlPrefix }}</span>\r\n </label>\r\n <input type='text' class='form-control' [formControlName]='controlName' placeholder='Type url slug here'\r\n (focusout)='onUrlSlugChange()' />\r\n </div>\r\n\r\n <div class=\"form-group flex-shrink-1\" *ngIf=\"isGoButtonVisible\">\r\n <a href=\"{{urlPrefix}}{{hrefGo}}\" target=\"_blank\" class=\"btn btn-primary\">Go</a>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
79
+ }], ctorParameters: function () { return []; }, propDecorators: { title: [{
80
+ type: Input
81
+ }], isTitleVisible: [{
82
+ type: Input
83
+ }], controlName: [{
84
+ type: Input
85
+ }], controlTitle: [{
86
+ type: Input
87
+ }], class: [{
88
+ type: Input
89
+ }], watchedControlName: [{
90
+ type: Input
91
+ }], urlPrefix: [{
92
+ type: Input
93
+ }], isGoButtonVisible: [{
94
+ type: Input
95
+ }], generating: [{
96
+ type: Output
97
+ }] } });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc2x1Zy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29tcG9uZW50cy91cmxzbHVnL3VybHNsdWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2Zvcm1zL2NvbXBvbmVudHMvdXJsc2x1Zy91cmxzbHVnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTFGLEtBQUs7QUFDTCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQU0vQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsaUJBQWlCO0lBQ3JELFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDM0IsTUFBTSxDQUFTO0lBRWYsUUFBUTtJQUNDLEtBQUssR0FBVyxZQUFZLENBQUM7SUFDN0IsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QixXQUFXLENBQVM7SUFDcEIsWUFBWSxDQUFTO0lBQ3JCLEtBQUssQ0FBUztJQUNkLGtCQUFrQixDQUFTO0lBQzNCLFNBQVMsQ0FBUztJQUNsQixpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFFbEMsU0FBUztJQUNDLFVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUU3RDtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxJQUFJO1FBQzFCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFFcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ2xGLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQ3hCLE9BQU87aUJBQ1I7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDM0UsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDdEIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO0lBQ1IsZUFBZTtRQUNiLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQzt1R0F6RFUsZ0JBQWdCOzJGQUFoQixnQkFBZ0IsNldDM0I3Qiw2OEJBb0JBOzsyRkRPYSxnQkFBZ0I7a0JBSjVCLFNBQVM7K0JBQ0UsdUJBQXVCOzBFQVF4QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDAyIEF1ZyAyMDIyXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNy0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQmFzZUVkaXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2Jhc2UvYmFzZS1lZGl0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FuYXRvbHktZm9ybXMtdXJsc2x1ZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VybHNsdWcuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcmxTbHVnQ29tcG9uZW50IGV4dGVuZHMgQmFzZUVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGZpcnN0VmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGhyZWZHbzogc3RyaW5nO1xyXG5cclxuICAvL0lucHV0c1xyXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnUGVybWFsaW5rOic7XHJcbiAgQElucHV0KCkgaXNUaXRsZVZpc2libGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udHJvbFRpdGxlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSB3YXRjaGVkQ29udHJvbE5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSB1cmxQcmVmaXg6IHN0cmluZztcclxuICBASW5wdXQoKSBpc0dvQnV0dG9uVmlzaWJsZSA9IHRydWU7XHJcbiAgXHJcbiAgLy9PdXRwdXRzXHJcbiAgQE91dHB1dCgpIGdlbmVyYXRpbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3RhcnRXYXRjaGluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVVybFNsdWcodGV4dCkge1xyXG4gICAgbGV0IHNsdWdlZFRleHQgPSBVdGlscy5zbHVnaWZ5KHRleHQpO1xyXG4gICAgbGV0IGV2ZW50ID0geyB1cmxTbHVnOiBzbHVnZWRUZXh0IH07XHJcblxyXG4gICAgdGhpcy5nZW5lcmF0aW5nLmVtaXQoZXZlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0Rm9ybVZhbHVlKHRoaXMuY29udHJvbE5hbWUsICBldmVudC51cmxTbHVnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRXYXRjaGluZygpIHtcclxuICAgIHRoaXMuc3Vicy5zaW5rID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMud2F0Y2hlZENvbnRyb2xOYW1lKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5maXJzdFZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVVcmxTbHVnKHZhbHVlKTsgXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3Vicy5zaW5rID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuY29udHJvbE5hbWUpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAodmFsdWUpID0+IHtcclxuICAgICAgICB0aGlzLmhyZWZHbyA9IHZhbHVlOyBcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL0V2ZW50c1xyXG4gIG9uVXJsU2x1Z0NoYW5nZSgpe1xyXG4gICAgbGV0IHRleHQgPSB0aGlzLmdldEZvcm1WYWx1ZSh0aGlzLmNvbnRyb2xOYW1lKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVVcmxTbHVnKHRleHQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnIFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZChjb250cm9sTmFtZSl9XCJcclxuICBjbGFzcz1cInBlcm1hbGluayBmb3JtLWdyb3VwIHt7Y2xhc3N9fVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kXCI+XHJcbiAgICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJyBbZm9ybVN1Ym1pdHRlZF09J2Zvcm1TdWJtaXR0ZWQnIFtjb250cm9sTmFtZV09J2NvbnRyb2xOYW1lJ1xyXG4gICAgICBbY29udHJvbFRpdGxlXT0nY29udHJvbFRpdGxlJz5cclxuICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgIDxsYWJlbCAqbmdJZj0naXNUaXRsZVZpc2libGUnIGNsYXNzPSdjb2wtZm9ybS1sYWJlbCc+XHJcbiAgICAgICAge3sgdGl0bGUgfX1cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInVybFByZWZpeFwiPnt7IHVybFByZWZpeCB9fTwvc3Bhbj5cclxuICAgICAgPC9sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9J3RleHQnIGNsYXNzPSdmb3JtLWNvbnRyb2wnIFtmb3JtQ29udHJvbE5hbWVdPSdjb250cm9sTmFtZScgcGxhY2Vob2xkZXI9J1R5cGUgdXJsIHNsdWcgaGVyZSdcclxuICAgICAgICAoZm9jdXNvdXQpPSdvblVybFNsdWdDaGFuZ2UoKScgLz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtc2hyaW5rLTFcIiAqbmdJZj1cImlzR29CdXR0b25WaXNpYmxlXCI+XHJcbiAgICAgIDxhIGhyZWY9XCJ7e3VybFByZWZpeH19e3tocmVmR299fVwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+R288L2E+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==