@luftborn/custom-elements 1.1.44 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/README.md +2 -2
  2. package/assets/style.css +277 -277
  3. package/azure-pipeline.yml +54 -0
  4. package/demo/index.html +585 -585
  5. package/demo/index.js +6109 -0
  6. package/demo/index.min.js +6110 -0
  7. package/demo/index.min.js.map +1 -0
  8. package/demo/index.ts +11 -11
  9. package/demo/old/index.html +586 -586
  10. package/demo/old/index.js +10849 -10849
  11. package/demo/old/index.min.js +10850 -10850
  12. package/demo/old/index.ts +10 -10
  13. package/dist/custom-form.d.ts +20 -20
  14. package/dist/custom-form.js +147 -146
  15. package/dist/custom-form.js.map +1 -1
  16. package/dist/elements/Address/AddressElement.d.ts +28 -28
  17. package/dist/elements/Address/AddressElement.js +206 -206
  18. package/dist/elements/BankField/BankFieldElement.d.ts +22 -22
  19. package/dist/elements/BankField/BankFieldElement.js +127 -127
  20. package/dist/elements/CPRElement/CPRElement.d.ts +14 -14
  21. package/dist/elements/CPRElement/CPRElement.js +82 -82
  22. package/dist/elements/CVRElement/CVRElement.d.ts +14 -14
  23. package/dist/elements/CVRElement/CVRElement.js +82 -82
  24. package/dist/elements/CheckBoxElement/CheckBoxElement.d.ts +14 -14
  25. package/dist/elements/CheckBoxElement/CheckBoxElement.js +96 -96
  26. package/dist/elements/CheckBoxElement/CheckBoxElement.js.map +1 -1
  27. package/dist/elements/CustomRegularExpression/CustomRegularExpressionElement.d.ts +12 -12
  28. package/dist/elements/CustomRegularExpression/CustomRegularExpressionElement.js +82 -82
  29. package/dist/elements/DateField/DateFieldElement.d.ts +12 -12
  30. package/dist/elements/DateField/DateFieldElement.js +85 -85
  31. package/dist/elements/DropDownList/DropDownListElement.d.ts +14 -14
  32. package/dist/elements/DropDownList/DropDownListElement.js +93 -93
  33. package/dist/elements/DropDownList/DropDownListElement.js.map +1 -1
  34. package/dist/elements/Elements.d.ts +18 -18
  35. package/dist/elements/Elements.js +37 -37
  36. package/dist/elements/EmailField/EmailFieldElement.d.ts +13 -13
  37. package/dist/elements/EmailField/EmailFieldElement.js +83 -83
  38. package/dist/elements/FileField/FileFieldElement.d.ts +15 -12
  39. package/dist/elements/FileField/FileFieldElement.js +103 -83
  40. package/dist/elements/FileField/FileFieldElement.js.map +1 -1
  41. package/dist/elements/IdentificationElement/IdentificationElement.d.ts +18 -18
  42. package/dist/elements/IdentificationElement/IdentificationElement.js +94 -94
  43. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.d.ts +16 -16
  44. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.js +114 -108
  45. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.js.map +1 -1
  46. package/dist/elements/NumericField/NumericFieldElement.d.ts +12 -12
  47. package/dist/elements/NumericField/NumericFieldElement.js +91 -91
  48. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.d.ts +14 -14
  49. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.js +99 -99
  50. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.js.map +1 -1
  51. package/dist/elements/TextAreaElement/TextAreaElement.d.ts +12 -12
  52. package/dist/elements/TextAreaElement/TextAreaElement.js +79 -79
  53. package/dist/elements/TextField/TextFieldElement.d.ts +12 -12
  54. package/dist/elements/TextField/TextFieldElement.js +79 -79
  55. package/dist/elements/TypeAhead/TypeAheadElement.d.ts +24 -24
  56. package/dist/elements/TypeAhead/TypeAheadElement.js +209 -209
  57. package/dist/framework/CustomEvents.d.ts +21 -21
  58. package/dist/framework/CustomEvents.js +47 -47
  59. package/dist/framework/CustomInputElement.d.ts +50 -50
  60. package/dist/framework/CustomInputElement.js +258 -257
  61. package/dist/framework/CustomInputElement.js.map +1 -1
  62. package/dist/framework/Language/Languages/Base/BaseDictionary.d.ts +4 -4
  63. package/dist/framework/Language/Languages/Base/BaseDictionary.js +20 -20
  64. package/dist/framework/Language/Languages/CzechDictionary.d.ts +4 -0
  65. package/dist/framework/Language/Languages/CzechDictionary.js +40 -0
  66. package/dist/framework/Language/Languages/CzechDictionary.js.map +1 -0
  67. package/dist/framework/Language/Languages/DanishDictionary.d.ts +4 -4
  68. package/dist/framework/Language/Languages/DanishDictionary.js +39 -39
  69. package/dist/framework/Language/Languages/DutchDictionary.d.ts +4 -0
  70. package/dist/framework/Language/Languages/DutchDictionary.js +40 -0
  71. package/dist/framework/Language/Languages/DutchDictionary.js.map +1 -0
  72. package/dist/framework/Language/Languages/EnglishDictionary.d.ts +4 -4
  73. package/dist/framework/Language/Languages/EnglishDictionary.js +39 -39
  74. package/dist/framework/Language/Languages/EstonianDictionary.d.ts +4 -0
  75. package/dist/framework/Language/Languages/EstonianDictionary.js +40 -0
  76. package/dist/framework/Language/Languages/EstonianDictionary.js.map +1 -0
  77. package/dist/framework/Language/Languages/FinnishDictionary.d.ts +4 -0
  78. package/dist/framework/Language/Languages/FinnishDictionary.js +40 -0
  79. package/dist/framework/Language/Languages/FinnishDictionary.js.map +1 -0
  80. package/dist/framework/Language/Languages/FrenchDictionary.d.ts +4 -0
  81. package/dist/framework/Language/Languages/FrenchDictionary.js +40 -0
  82. package/dist/framework/Language/Languages/FrenchDictionary.js.map +1 -0
  83. package/dist/framework/Language/Languages/GermanDictionary.d.ts +4 -0
  84. package/dist/framework/Language/Languages/GermanDictionary.js +40 -0
  85. package/dist/framework/Language/Languages/GermanDictionary.js.map +1 -0
  86. package/dist/framework/Language/Languages/GreekDictionary.d.ts +4 -0
  87. package/dist/framework/Language/Languages/GreekDictionary.js +40 -0
  88. package/dist/framework/Language/Languages/GreekDictionary.js.map +1 -0
  89. package/dist/framework/Language/Languages/HungarianDictionary.d.ts +4 -0
  90. package/dist/framework/Language/Languages/HungarianDictionary.js +40 -0
  91. package/dist/framework/Language/Languages/HungarianDictionary.js.map +1 -0
  92. package/dist/framework/Language/Languages/IcelandicDictionary.d.ts +4 -0
  93. package/dist/framework/Language/Languages/IcelandicDictionary.js +40 -0
  94. package/dist/framework/Language/Languages/IcelandicDictionary.js.map +1 -0
  95. package/dist/framework/Language/Languages/ItalianDictionary.d.ts +4 -0
  96. package/dist/framework/Language/Languages/ItalianDictionary.js +40 -0
  97. package/dist/framework/Language/Languages/ItalianDictionary.js.map +1 -0
  98. package/dist/framework/Language/Languages/LatvianDictionary.d.ts +4 -0
  99. package/dist/framework/Language/Languages/LatvianDictionary.js +40 -0
  100. package/dist/framework/Language/Languages/LatvianDictionary.js.map +1 -0
  101. package/dist/framework/Language/Languages/LituanianDictionary.d.ts +4 -0
  102. package/dist/framework/Language/Languages/LituanianDictionary.js +40 -0
  103. package/dist/framework/Language/Languages/LituanianDictionary.js.map +1 -0
  104. package/dist/framework/Language/Languages/NorwegianDictionary.d.ts +4 -0
  105. package/dist/framework/Language/Languages/NorwegianDictionary.js +40 -0
  106. package/dist/framework/Language/Languages/NorwegianDictionary.js.map +1 -0
  107. package/dist/framework/Language/Languages/PolishDictionary.d.ts +4 -0
  108. package/dist/framework/Language/Languages/PolishDictionary.js +40 -0
  109. package/dist/framework/Language/Languages/PolishDictionary.js.map +1 -0
  110. package/dist/framework/Language/Languages/PortugueseDictionary.d.ts +4 -0
  111. package/dist/framework/Language/Languages/PortugueseDictionary.js +40 -0
  112. package/dist/framework/Language/Languages/PortugueseDictionary.js.map +1 -0
  113. package/dist/framework/Language/Languages/SpanishDictionary.d.ts +4 -0
  114. package/dist/framework/Language/Languages/SpanishDictionary.js +40 -0
  115. package/dist/framework/Language/Languages/SpanishDictionary.js.map +1 -0
  116. package/dist/framework/Language/Languages/SwedishDictionary.d.ts +4 -0
  117. package/dist/framework/Language/Languages/SwedishDictionary.js +40 -0
  118. package/dist/framework/Language/Languages/SwedishDictionary.js.map +1 -0
  119. package/dist/framework/Language/Translator.d.ts +23 -6
  120. package/dist/framework/Language/Translator.js +115 -32
  121. package/dist/framework/Language/Translator.js.map +1 -1
  122. package/dist/framework/Models/OptionWithDescription.d.ts +6 -6
  123. package/dist/framework/Models/OptionWithDescription.js +9 -9
  124. package/dist/framework/Polyfills/getAttributeNamesPolyfill.d.ts +1 -1
  125. package/dist/framework/Polyfills/getAttributeNamesPolyfill.js +17 -17
  126. package/dist/framework/Translations/CaseConverter.d.ts +5 -5
  127. package/dist/framework/Translations/CaseConverter.js +50 -50
  128. package/dist/framework/Utilities/ArrayUtil.d.ts +6 -0
  129. package/dist/framework/Utilities/ArrayUtil.js +37 -0
  130. package/dist/framework/Utilities/ArrayUtil.js.map +1 -0
  131. package/dist/framework/Utilities/DomUtil.d.ts +21 -0
  132. package/dist/framework/Utilities/DomUtil.js +102 -0
  133. package/dist/framework/Utilities/DomUtil.js.map +1 -0
  134. package/dist/framework/Utilities/DomUtility.d.ts +3 -3
  135. package/dist/framework/Utilities/DomUtility.js +12 -12
  136. package/dist/framework/Utilities/MakeRequest.d.ts +8 -0
  137. package/dist/framework/Utilities/MakeRequest.js +49 -0
  138. package/dist/framework/Utilities/MakeRequest.js.map +1 -0
  139. package/dist/framework/Utilities/StringUtil.d.ts +4 -0
  140. package/dist/framework/Utilities/StringUtil.js +17 -0
  141. package/dist/framework/Utilities/StringUtil.js.map +1 -0
  142. package/dist/framework/Utilities/ViewportUtil.d.ts +8 -0
  143. package/dist/framework/Utilities/ViewportUtil.js +43 -0
  144. package/dist/framework/Utilities/ViewportUtil.js.map +1 -0
  145. package/dist/framework/Utilities/debouncer.d.ts +8 -8
  146. package/dist/framework/Utilities/debouncer.js +51 -51
  147. package/dist/framework/Validation/IValidator.interface.d.ts +3 -3
  148. package/dist/framework/Validation/IValidator.interface.js +2 -2
  149. package/dist/framework/Validation/Validators/BankAccount.d.ts +4 -4
  150. package/dist/framework/Validation/Validators/BankAccount.js +12 -12
  151. package/dist/framework/Validation/Validators/BankAccountRegistrationNumber.d.ts +4 -4
  152. package/dist/framework/Validation/Validators/BankAccountRegistrationNumber.js +12 -12
  153. package/dist/framework/Validation/Validators/BankIdNorway.d.ts +5 -5
  154. package/dist/framework/Validation/Validators/BankIdNorway.js +21 -21
  155. package/dist/framework/Validation/Validators/BankIdSweden.d.ts +5 -5
  156. package/dist/framework/Validation/Validators/BankIdSweden.js +21 -21
  157. package/dist/framework/Validation/Validators/CPR.d.ts +9 -9
  158. package/dist/framework/Validation/Validators/CPR.js +75 -75
  159. package/dist/framework/Validation/Validators/CVR.d.ts +5 -5
  160. package/dist/framework/Validation/Validators/CVR.js +30 -30
  161. package/dist/framework/custom-element.decorator.d.ts +9 -9
  162. package/dist/framework/custom-element.decorator.js +51 -51
  163. package/dist/index.d.ts +7 -7
  164. package/dist/index.js +14 -14
  165. package/node_modules/@webcomponents/webcomponentsjs/CHANGELOG.md +15 -0
  166. package/node_modules/@webcomponents/webcomponentsjs/README.md +13 -0
  167. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-ce.js +31 -31
  168. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-ce.js.map +1 -1
  169. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_dom.js +15 -13
  170. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_dom.js.map +1 -1
  171. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-pf_js.js.map +1 -1
  172. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +237 -223
  173. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +1 -1
  174. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js +188 -176
  175. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +1 -1
  176. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd.js +155 -144
  177. package/node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd.js.map +1 -1
  178. package/node_modules/@webcomponents/webcomponentsjs/package.json +31 -64
  179. package/node_modules/@webcomponents/webcomponentsjs/src/entrypoints/webcomponents-pf_dom-index.js +2 -0
  180. package/node_modules/@webcomponents/webcomponentsjs/src/platform/event-listener-options.js +122 -0
  181. package/node_modules/@webcomponents/webcomponentsjs/src/platform/toggle-attribute.js +39 -0
  182. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.d.ts +1 -0
  183. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js +239 -225
  184. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js.map +1 -1
  185. package/node_modules/@webcomponents/webcomponentsjs/webcomponents-loader.js +35 -3
  186. package/package.json +38 -39
  187. package/src/custom-form.ts +140 -139
  188. package/src/elements/Address/AddressElement.ts +216 -216
  189. package/src/elements/BankField/BankFieldElement.ts +127 -127
  190. package/src/elements/CPRElement/CPRElement.ts +74 -74
  191. package/src/elements/CVRElement/CVRElement.ts +75 -75
  192. package/src/elements/CheckBoxElement/CheckBoxElement.ts +99 -99
  193. package/src/elements/CustomRegularExpression/CustomRegularExpressionElement.ts +75 -75
  194. package/src/elements/DateField/DateFieldElement.ts +78 -78
  195. package/src/elements/DropDownList/DropDownListElement.ts +100 -100
  196. package/src/elements/Elements.ts +37 -37
  197. package/src/elements/EmailField/EmailFieldElement.ts +78 -78
  198. package/src/elements/FileField/FileFieldElement.ts +96 -76
  199. package/src/elements/IdentificationElement/IdentificationElement.ts +104 -104
  200. package/src/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.ts +116 -111
  201. package/src/elements/NumericField/NumericFieldElement.ts +84 -84
  202. package/src/elements/RadioButtonGroup/RadioButtonGroupElement.ts +103 -103
  203. package/src/elements/TextAreaElement/TextAreaElement.ts +72 -72
  204. package/src/elements/TextField/TextFieldElement.ts +72 -72
  205. package/src/elements/TypeAhead/TypeAheadElement.ts +248 -248
  206. package/src/framework/CustomEvents.ts +47 -47
  207. package/src/framework/CustomInputElement.ts +277 -276
  208. package/src/framework/Language/Languages/Base/BaseDictionary.ts +15 -15
  209. package/src/framework/Language/Languages/CzechDictionary.ts +18 -0
  210. package/src/framework/Language/Languages/DanishDictionary.ts +17 -17
  211. package/src/framework/Language/Languages/DutchDictionary.ts +18 -0
  212. package/src/framework/Language/Languages/EnglishDictionary.ts +18 -18
  213. package/src/framework/Language/Languages/EstonianDictionary.ts +18 -0
  214. package/src/framework/Language/Languages/FinnishDictionary.ts +18 -0
  215. package/src/framework/Language/Languages/FrenchDictionary.ts +18 -0
  216. package/src/framework/Language/Languages/GermanDictionary.ts +18 -0
  217. package/src/framework/Language/Languages/GreekDictionary.ts +18 -0
  218. package/src/framework/Language/Languages/HungarianDictionary.ts +18 -0
  219. package/src/framework/Language/Languages/IcelandicDictionary.ts +18 -0
  220. package/src/framework/Language/Languages/ItalianDictionary.ts +18 -0
  221. package/src/framework/Language/Languages/LatvianDictionary.ts +18 -0
  222. package/src/framework/Language/Languages/LituanianDictionary.ts +18 -0
  223. package/src/framework/Language/Languages/NorwegianDictionary.ts +18 -0
  224. package/src/framework/Language/Languages/PolishDictionary.ts +18 -0
  225. package/src/framework/Language/Languages/PortugueseDictionary.ts +18 -0
  226. package/src/framework/Language/Languages/SpanishDictionary.ts +18 -0
  227. package/src/framework/Language/Languages/SwedishDictionary.ts +18 -0
  228. package/src/framework/Language/Translator.ts +110 -26
  229. package/src/framework/Models/OptionWithDescription.ts +8 -8
  230. package/src/framework/Polyfills/getAttributeNamesPolyfill.ts +13 -13
  231. package/src/framework/Translations/CaseConverter.ts +43 -43
  232. package/src/framework/Utilities/ArrayUtil.ts +31 -0
  233. package/src/framework/Utilities/DomUtil.ts +117 -0
  234. package/src/framework/Utilities/DomUtility.ts +6 -6
  235. package/src/framework/Utilities/MakeRequest.ts +47 -0
  236. package/src/framework/Utilities/StringUtil.ts +9 -0
  237. package/src/framework/Utilities/ViewportUtil.ts +46 -0
  238. package/src/framework/Utilities/debouncer.ts +66 -66
  239. package/src/framework/Validation/IValidator.interface.ts +3 -3
  240. package/src/framework/Validation/Validators/BankAccount.ts +7 -7
  241. package/src/framework/Validation/Validators/BankAccountRegistrationNumber.ts +8 -8
  242. package/src/framework/Validation/Validators/BankIdNorway.ts +21 -21
  243. package/src/framework/Validation/Validators/BankIdSweden.ts +21 -21
  244. package/src/framework/Validation/Validators/CPR.ts +82 -82
  245. package/src/framework/Validation/Validators/CVR.ts +27 -27
  246. package/src/framework/custom-element.decorator.ts +57 -57
  247. package/src/index.ts +12 -12
@@ -1,276 +1,277 @@
1
- import { CustomElementEvent, CustomElementEventArgs } from "./CustomEvents";
2
- import { DomUtil, ArrayUtil } from "@luftborn/utilities";
3
- import OptionWithDescription from "./Models/OptionWithDescription";
4
-
5
- class IDictionary<TValue> {
6
- [index: string]: TValue;
7
- }
8
- export abstract class CustomInputElement extends HTMLElement {
9
- private dependentOnList = new IDictionary<boolean>();
10
- private visibilityState = true;
11
-
12
- protected touched = false;
13
- protected domUtil: DomUtil;
14
-
15
- protected hasValueDependency: any;
16
- protected noValueDependency: any;
17
- protected dependencies: any[];
18
-
19
- public onChange = new CustomElementEvent<CustomElementEventArgs>();
20
- public onValidate = new CustomElementEvent<CustomElementEventArgs>();
21
- public onVisibilityChanged = new CustomElementEvent<CustomElementEventArgs>();
22
-
23
- public name: string;
24
- public options: any[];
25
- public optionsWithDescriptions: OptionWithDescription[];
26
- public required: boolean;
27
- public customValue: string;
28
- public allDependenciesMustBeMet: boolean = false;
29
- public multi: boolean = false;
30
- public max: any;
31
- public min: any;
32
- public step: any;
33
-
34
- constructor() {
35
- super();
36
- }
37
-
38
- abstract get value(): any;
39
- abstract set value(value);
40
- abstract get valid(): boolean;
41
-
42
- abstract initChildInputs(): void;
43
- abstract validate(): void;
44
- abstract change($event): void;
45
-
46
- compareVlaues = [];
47
-
48
- isValueConditionMatched(val: any) {
49
- if (val && Array.isArray(val) && val.length) {
50
- let result = false;
51
- val.forEach(element => {
52
- const elementMatched = this.compareVlaues.findIndex(x => x == element) !== -1;
53
- if (elementMatched) {
54
- result = true;
55
- return;
56
- }
57
- });
58
- return result;
59
- }
60
- return this.compareVlaues.findIndex(x => x == val) !== -1;
61
- }
62
-
63
- connectedCallback(): void {
64
- this.init();
65
- this.setAttributes();
66
- }
67
-
68
- init(): void {
69
- this.style.width = "100%";
70
- this.domUtil = new DomUtil(this);
71
- this.parseData();
72
- this.initChildInputs();
73
- this.bindEvents();
74
- this.setAttributes();
75
-
76
- window.addEventListener("load", () => {
77
- this.bindDependencies();
78
- });
79
- }
80
-
81
- private parseData(): void {
82
- try {
83
- if (!(this.children[0] instanceof HTMLScriptElement)) {
84
- return;
85
- }
86
- let data = JSON.parse(this.children[0].innerHTML);
87
- this.options = data.options;
88
- this.optionsWithDescriptions = data.optionsWithDescriptions;
89
- this.hasValueDependency = data.hasValueDependency;
90
- this.noValueDependency = data.noValueDependency;
91
- this.dependencies = data.dependencies;
92
- this.required = data.required;
93
- this.name = data.name;
94
- this.allDependenciesMustBeMet = data.allDependenciesMustBeMet;
95
- this.multi = data.multi;
96
- this.max = data.max;
97
- this.min = data.min;
98
- this.step = data.step;
99
- this.customValue = data.value;
100
- } catch (ex) {
101
- console.error(ex);
102
- }
103
- }
104
-
105
- private bindEvents(): void {
106
- this.onValidate.on(e => {
107
- if (this.valid) {
108
- if (this.closest('.custom-validation-target')) {
109
- this.closest('.custom-validation-target').classList.remove("invalid");
110
- this.closest('.custom-validation-target').classList.add("valid");
111
- }
112
- } else {
113
- if (this.closest('.custom-validation-target')) {
114
- this.closest('.custom-validation-target').classList.add("invalid");
115
- this.closest('.custom-validation-target').classList.remove("valid");
116
- }
117
- this.domUtil.focus();
118
- }
119
- });
120
- this.onChange.on(e => {
121
- if (this.touched) {
122
- this.validate();
123
- }
124
- });
125
- }
126
-
127
- private setAttributes(): void {
128
- this.setAttribute("custom-input", "");
129
- this.setAttribute("name", this.name);
130
- }
131
-
132
- private bindDependencies(): void {
133
- if (this.hasValueDependency && this.hasValueDependency.items.length) {
134
- for (const fieldName of this.hasValueDependency.items) {
135
- this.bindDependency(fieldName, "has");
136
- }
137
- }
138
-
139
- if (this.noValueDependency && this.noValueDependency.items.length) {
140
- for (const fieldName of this.noValueDependency.items) {
141
- this.bindDependency(fieldName, "no");
142
- }
143
- }
144
-
145
- if (this.dependencies && this.dependencies.length) {
146
- for (const index in this.dependencies) {
147
- if (this.dependencies.hasOwnProperty(index)) {
148
- const dependency = this.dependencies[index];
149
- for (const fieldName of dependency.items) {
150
- this.bindDependency(
151
- fieldName,
152
- "custom",
153
- dependency.value,
154
- dependency.criteria,
155
- );
156
- }
157
- }
158
- }
159
- }
160
- }
161
-
162
- private bindDependency(elementName: string, type: string, value?: string, criteria?: string,): void {
163
- let element = document.querySelector(`[name="${elementName}"]`) as CustomInputElement;
164
- if (element instanceof CustomInputElement) {
165
- element.compareVlaues.push(value);
166
- if (this.dependentOnList.hasOwnProperty(element.name)) {
167
- return;
168
- }
169
- let isVisibleByDefault = type === "no";
170
- element.RegisterDependentOn(this.name, isVisibleByDefault);
171
- this.onChange.on(e => {
172
- let IsConditionMatched = false;
173
- if (type === "has") {
174
- IsConditionMatched = !!e.value;
175
- }
176
- if (type === "no") {
177
- IsConditionMatched = !e.value;
178
- }
179
- if (type === "custom") {
180
- if (criteria === "Exact") {
181
- IsConditionMatched = element.isValueConditionMatched(e.value);
182
- } else if (criteria === "LessThan") {
183
- IsConditionMatched = e.value < value;
184
- } else if (criteria === "MoreThan") {
185
- IsConditionMatched = e.value > value;
186
- }
187
- }
188
- element.DependentOnStateChanged(this.name, IsConditionMatched);
189
- });
190
- this.onVisibilityChanged.on(e => {
191
- if (this.visibilityState) {
192
- this.onChange.emit(
193
- new CustomElementEventArgs(this.value, "change"),
194
- );
195
- } else {
196
- element.DependentOnStateChanged(this.name, false);
197
- }
198
- });
199
- }
200
- }
201
-
202
- private setVisibility() {
203
- if (this.allDependenciesMustBeMet) {
204
- this.visibilityState = Object.values(this.dependentOnList).every(state => state);
205
- } else {
206
- this.visibilityState = Object.values(this.dependentOnList).some(state => state);
207
- }
208
-
209
- if (this.visibilityState) {
210
- this.show();
211
- } else {
212
- this.hide();
213
- }
214
- this.onVisibilityChanged.emit(new CustomElementEventArgs(this.value, "VisibilityChanged"));
215
- }
216
-
217
- private hide() {
218
- this.setAttribute("hidden", "");
219
- if (this.closest('.custom-validation-target')) {
220
- this.closest('.custom-validation-target').setAttribute("hidden", "");
221
- }
222
- }
223
-
224
- private show() {
225
- this.removeAttribute("hidden");
226
- if (this.closest('.custom-validation-target')) {
227
- this.closest('.custom-validation-target').removeAttribute("hidden");
228
- }
229
- }
230
-
231
- protected getChildInput(selector: string): HTMLInputElement {
232
- let element: any = this;
233
- if (this.shadowRoot) {
234
- element = this.shadowRoot;
235
- }
236
- return element.querySelector(selector) as HTMLInputElement;
237
- }
238
-
239
- protected getChildInputs(selector: string): HTMLInputElement[] {
240
- let element: any = this;
241
- if (this.shadowRoot) {
242
- element = this.shadowRoot;
243
- }
244
- return ArrayUtil.FromNodeList(
245
- element.querySelectorAll(selector),
246
- ) as HTMLInputElement[];
247
- }
248
-
249
- protected getChildElement(selector: string): HTMLElement {
250
- let element: any = this;
251
- if (this.shadowRoot) {
252
- element = this.shadowRoot;
253
- }
254
- return element.querySelector(selector) as HTMLElement;
255
- }
256
-
257
- protected getChildElements(selector: string): HTMLElement[] {
258
- let element: any = this;
259
- if (this.shadowRoot) {
260
- element = this.shadowRoot;
261
- }
262
- return element.querySelectorAll(selector) as HTMLElement[];
263
- }
264
-
265
- public RegisterDependentOn(name: string, initialValue: boolean = false) {
266
- this.dependentOnList[name] = initialValue;
267
- this.setVisibility();
268
- }
269
-
270
- public DependentOnStateChanged(name: string, state: boolean) {
271
- if (this.dependentOnList.hasOwnProperty(name)) {
272
- this.dependentOnList[name] = state;
273
- }
274
- this.setVisibility();
275
- }
276
- }
1
+ import { CustomElementEvent, CustomElementEventArgs } from "./CustomEvents";
2
+ import OptionWithDescription from "./Models/OptionWithDescription";
3
+ import ArrayUtil from "./Utilities/ArrayUtil";
4
+ import DomUtil from "./Utilities/DomUtil";
5
+
6
+ class IDictionary<TValue> {
7
+ [index: string]: TValue;
8
+ }
9
+ export abstract class CustomInputElement extends HTMLElement {
10
+ private dependentOnList = new IDictionary<boolean>();
11
+ private visibilityState = true;
12
+
13
+ protected touched = false;
14
+ protected domUtil: DomUtil;
15
+
16
+ protected hasValueDependency: any;
17
+ protected noValueDependency: any;
18
+ protected dependencies: any[];
19
+
20
+ public onChange = new CustomElementEvent<CustomElementEventArgs>();
21
+ public onValidate = new CustomElementEvent<CustomElementEventArgs>();
22
+ public onVisibilityChanged = new CustomElementEvent<CustomElementEventArgs>();
23
+
24
+ public name: string;
25
+ public options: any[];
26
+ public optionsWithDescriptions: OptionWithDescription[];
27
+ public required: boolean;
28
+ public customValue: string;
29
+ public allDependenciesMustBeMet: boolean = false;
30
+ public multi: boolean = false;
31
+ public max: any;
32
+ public min: any;
33
+ public step: any;
34
+
35
+ constructor() {
36
+ super();
37
+ }
38
+
39
+ abstract get value(): any;
40
+ abstract set value(value);
41
+ abstract get valid(): boolean;
42
+
43
+ abstract initChildInputs(): void;
44
+ abstract validate(): void;
45
+ abstract change($event): void;
46
+
47
+ compareVlaues = [];
48
+
49
+ isValueConditionMatched(val: any) {
50
+ if (val && Array.isArray(val) && val.length) {
51
+ let result = false;
52
+ val.forEach(element => {
53
+ const elementMatched = this.compareVlaues.findIndex(x => x == element) !== -1;
54
+ if (elementMatched) {
55
+ result = true;
56
+ return;
57
+ }
58
+ });
59
+ return result;
60
+ }
61
+ return this.compareVlaues.findIndex(x => x == val) !== -1;
62
+ }
63
+
64
+ connectedCallback(): void {
65
+ this.init();
66
+ this.setAttributes();
67
+ }
68
+
69
+ init(): void {
70
+ this.style.width = "100%";
71
+ this.domUtil = new DomUtil(this);
72
+ this.parseData();
73
+ this.initChildInputs();
74
+ this.bindEvents();
75
+ this.setAttributes();
76
+
77
+ window.addEventListener("load", () => {
78
+ this.bindDependencies();
79
+ });
80
+ }
81
+
82
+ private parseData(): void {
83
+ try {
84
+ if (!(this.children[0] instanceof HTMLScriptElement)) {
85
+ return;
86
+ }
87
+ let data = JSON.parse(this.children[0].innerHTML);
88
+ this.options = data.options;
89
+ this.optionsWithDescriptions = data.optionsWithDescriptions;
90
+ this.hasValueDependency = data.hasValueDependency;
91
+ this.noValueDependency = data.noValueDependency;
92
+ this.dependencies = data.dependencies;
93
+ this.required = data.required;
94
+ this.name = data.name;
95
+ this.allDependenciesMustBeMet = data.allDependenciesMustBeMet;
96
+ this.multi = data.multi;
97
+ this.max = data.max;
98
+ this.min = data.min;
99
+ this.step = data.step;
100
+ this.customValue = data.value;
101
+ } catch (ex) {
102
+ console.error(ex);
103
+ }
104
+ }
105
+
106
+ private bindEvents(): void {
107
+ this.onValidate.on(e => {
108
+ if (this.valid) {
109
+ if (this.closest('.custom-validation-target')) {
110
+ this.closest('.custom-validation-target').classList.remove("invalid");
111
+ this.closest('.custom-validation-target').classList.add("valid");
112
+ }
113
+ } else {
114
+ if (this.closest('.custom-validation-target')) {
115
+ this.closest('.custom-validation-target').classList.add("invalid");
116
+ this.closest('.custom-validation-target').classList.remove("valid");
117
+ }
118
+ this.domUtil.focus();
119
+ }
120
+ });
121
+ this.onChange.on(e => {
122
+ if (this.touched) {
123
+ this.validate();
124
+ }
125
+ });
126
+ }
127
+
128
+ private setAttributes(): void {
129
+ this.setAttribute("custom-input", "");
130
+ this.setAttribute("name", this.name);
131
+ }
132
+
133
+ private bindDependencies(): void {
134
+ if (this.hasValueDependency && this.hasValueDependency.items.length) {
135
+ for (const fieldName of this.hasValueDependency.items) {
136
+ this.bindDependency(fieldName, "has");
137
+ }
138
+ }
139
+
140
+ if (this.noValueDependency && this.noValueDependency.items.length) {
141
+ for (const fieldName of this.noValueDependency.items) {
142
+ this.bindDependency(fieldName, "no");
143
+ }
144
+ }
145
+
146
+ if (this.dependencies && this.dependencies.length) {
147
+ for (const index in this.dependencies) {
148
+ if (this.dependencies.hasOwnProperty(index)) {
149
+ const dependency = this.dependencies[index];
150
+ for (const fieldName of dependency.items) {
151
+ this.bindDependency(
152
+ fieldName,
153
+ "custom",
154
+ dependency.value,
155
+ dependency.criteria,
156
+ );
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+
163
+ private bindDependency(elementName: string, type: string, value?: string, criteria?: string,): void {
164
+ let element = document.querySelector(`[name="${elementName}"]`) as CustomInputElement;
165
+ if (element instanceof CustomInputElement) {
166
+ element.compareVlaues.push(value);
167
+ if (this.dependentOnList.hasOwnProperty(element.name)) {
168
+ return;
169
+ }
170
+ let isVisibleByDefault = type === "no";
171
+ element.RegisterDependentOn(this.name, isVisibleByDefault);
172
+ this.onChange.on(e => {
173
+ let IsConditionMatched = false;
174
+ if (type === "has") {
175
+ IsConditionMatched = !!e.value;
176
+ }
177
+ if (type === "no") {
178
+ IsConditionMatched = !e.value;
179
+ }
180
+ if (type === "custom") {
181
+ if (criteria === "Exact") {
182
+ IsConditionMatched = element.isValueConditionMatched(e.value);
183
+ } else if (criteria === "LessThan") {
184
+ IsConditionMatched = e.value < value;
185
+ } else if (criteria === "MoreThan") {
186
+ IsConditionMatched = e.value > value;
187
+ }
188
+ }
189
+ element.DependentOnStateChanged(this.name, IsConditionMatched);
190
+ });
191
+ this.onVisibilityChanged.on(e => {
192
+ if (this.visibilityState) {
193
+ this.onChange.emit(
194
+ new CustomElementEventArgs(this.value, "change"),
195
+ );
196
+ } else {
197
+ element.DependentOnStateChanged(this.name, false);
198
+ }
199
+ });
200
+ }
201
+ }
202
+
203
+ private setVisibility() {
204
+ if (this.allDependenciesMustBeMet) {
205
+ this.visibilityState = Object.values(this.dependentOnList).every(state => state);
206
+ } else {
207
+ this.visibilityState = Object.values(this.dependentOnList).some(state => state);
208
+ }
209
+
210
+ if (this.visibilityState) {
211
+ this.show();
212
+ } else {
213
+ this.hide();
214
+ }
215
+ this.onVisibilityChanged.emit(new CustomElementEventArgs(this.value, "VisibilityChanged"));
216
+ }
217
+
218
+ private hide() {
219
+ this.setAttribute("hidden", "");
220
+ if (this.closest('.custom-validation-target')) {
221
+ this.closest('.custom-validation-target').setAttribute("hidden", "");
222
+ }
223
+ }
224
+
225
+ private show() {
226
+ this.removeAttribute("hidden");
227
+ if (this.closest('.custom-validation-target')) {
228
+ this.closest('.custom-validation-target').removeAttribute("hidden");
229
+ }
230
+ }
231
+
232
+ protected getChildInput(selector: string): HTMLInputElement {
233
+ let element: any = this;
234
+ if (this.shadowRoot) {
235
+ element = this.shadowRoot;
236
+ }
237
+ return element.querySelector(selector) as HTMLInputElement;
238
+ }
239
+
240
+ protected getChildInputs(selector: string): HTMLInputElement[] {
241
+ let element: any = this;
242
+ if (this.shadowRoot) {
243
+ element = this.shadowRoot;
244
+ }
245
+ return ArrayUtil.FromNodeList(
246
+ element.querySelectorAll(selector),
247
+ ) as HTMLInputElement[];
248
+ }
249
+
250
+ protected getChildElement(selector: string): HTMLElement {
251
+ let element: any = this;
252
+ if (this.shadowRoot) {
253
+ element = this.shadowRoot;
254
+ }
255
+ return element.querySelector(selector) as HTMLElement;
256
+ }
257
+
258
+ protected getChildElements(selector: string): HTMLElement[] {
259
+ let element: any = this;
260
+ if (this.shadowRoot) {
261
+ element = this.shadowRoot;
262
+ }
263
+ return element.querySelectorAll(selector) as HTMLElement[];
264
+ }
265
+
266
+ public RegisterDependentOn(name: string, initialValue: boolean = false) {
267
+ this.dependentOnList[name] = initialValue;
268
+ this.setVisibility();
269
+ }
270
+
271
+ public DependentOnStateChanged(name: string, state: boolean) {
272
+ if (this.dependentOnList.hasOwnProperty(name)) {
273
+ this.dependentOnList[name] = state;
274
+ }
275
+ this.setVisibility();
276
+ }
277
+ }
@@ -1,16 +1,16 @@
1
- export default abstract class BaseDictionary {
2
- abstract dictionary: any;
3
-
4
- get(key: string): string {
5
- const keyParts = key.split('.');
6
- var result: string | any = this.dictionary;
7
- keyParts.forEach(keyPart => {
8
- result = result[keyPart];
9
- if (!result) {
10
- result = key;
11
- return;
12
- }
13
- });
14
- return result;
15
- }
1
+ export default abstract class BaseDictionary {
2
+ abstract dictionary: any;
3
+
4
+ get(key: string): string {
5
+ const keyParts = key.split('.');
6
+ var result: string | any = this.dictionary;
7
+ keyParts.forEach(keyPart => {
8
+ result = result[keyPart];
9
+ if (!result) {
10
+ result = key;
11
+ return;
12
+ }
13
+ });
14
+ return result;
15
+ }
16
16
  }
@@ -0,0 +1,18 @@
1
+ import BaseDictionary from "./Base/BaseDictionary";
2
+
3
+ export default class CzechDictionary extends BaseDictionary {
4
+
5
+ dictionary: any = {
6
+ AddressElement: {
7
+ Address: "adresa",
8
+ City: "město",
9
+ Country: "země",
10
+ Zip: "poštovní směrovací číslo"
11
+ },
12
+ BankElement: {
13
+ Account: "Účet",
14
+ RegistrationNumber: "Registrační číslo"
15
+ }
16
+ };
17
+
18
+ }
@@ -1,18 +1,18 @@
1
- import BaseDictionary from "./Base/BaseDictionary";
2
-
3
- export default class DanishDictionary extends BaseDictionary {
4
-
5
- dictionary: any = {
6
- AddressElement: {
7
- Address: "adresse",
8
- City: "by",
9
- Country: "land",
10
- Zip: "postnummer"
11
- },
12
- BankElement: {
13
- Account: "Kontonummer",
14
- RegistrationNumber: "Registreringsnummer"
15
- }
16
- };
17
-
1
+ import BaseDictionary from "./Base/BaseDictionary";
2
+
3
+ export default class DanishDictionary extends BaseDictionary {
4
+
5
+ dictionary: any = {
6
+ AddressElement: {
7
+ Address: "adresse",
8
+ City: "by",
9
+ Country: "land",
10
+ Zip: "postnummer"
11
+ },
12
+ BankElement: {
13
+ Account: "Kontonummer",
14
+ RegistrationNumber: "Registreringsnummer"
15
+ }
16
+ };
17
+
18
18
  }