@luftborn/custom-elements 1.4.0 → 2.0.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 (196) 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 -147
  15. package/dist/elements/Address/AddressElement.d.ts +28 -28
  16. package/dist/elements/Address/AddressElement.js +206 -206
  17. package/dist/elements/BankField/BankFieldElement.d.ts +22 -22
  18. package/dist/elements/BankField/BankFieldElement.js +127 -127
  19. package/dist/elements/CPRElement/CPRElement.d.ts +14 -14
  20. package/dist/elements/CPRElement/CPRElement.js +82 -82
  21. package/dist/elements/CVRElement/CVRElement.d.ts +14 -14
  22. package/dist/elements/CVRElement/CVRElement.js +82 -82
  23. package/dist/elements/CheckBoxElement/CheckBoxElement.d.ts +14 -14
  24. package/dist/elements/CheckBoxElement/CheckBoxElement.js +96 -96
  25. package/dist/elements/CustomRegularExpression/CustomRegularExpressionElement.d.ts +12 -12
  26. package/dist/elements/CustomRegularExpression/CustomRegularExpressionElement.js +82 -82
  27. package/dist/elements/DateField/DateFieldElement.d.ts +12 -12
  28. package/dist/elements/DateField/DateFieldElement.js +85 -85
  29. package/dist/elements/DropDownList/DropDownListElement.d.ts +14 -14
  30. package/dist/elements/DropDownList/DropDownListElement.js +93 -93
  31. package/dist/elements/Elements.d.ts +18 -18
  32. package/dist/elements/Elements.js +37 -37
  33. package/dist/elements/EmailField/EmailFieldElement.d.ts +13 -13
  34. package/dist/elements/EmailField/EmailFieldElement.js +83 -83
  35. package/dist/elements/FileField/FileFieldElement.d.ts +15 -15
  36. package/dist/elements/FileField/FileFieldElement.js +103 -103
  37. package/dist/elements/IdentificationElement/IdentificationElement.d.ts +18 -18
  38. package/dist/elements/IdentificationElement/IdentificationElement.js +94 -94
  39. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.d.ts +16 -16
  40. package/dist/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.js +114 -114
  41. package/dist/elements/NumericField/NumericFieldElement.d.ts +12 -12
  42. package/dist/elements/NumericField/NumericFieldElement.js +91 -91
  43. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.d.ts +14 -14
  44. package/dist/elements/RadioButtonGroup/RadioButtonGroupElement.js +99 -99
  45. package/dist/elements/TextAreaElement/TextAreaElement.d.ts +12 -12
  46. package/dist/elements/TextAreaElement/TextAreaElement.js +79 -79
  47. package/dist/elements/TextField/TextFieldElement.d.ts +12 -12
  48. package/dist/elements/TextField/TextFieldElement.js +79 -79
  49. package/dist/elements/TypeAhead/TypeAheadElement.d.ts +24 -24
  50. package/dist/elements/TypeAhead/TypeAheadElement.js +209 -209
  51. package/dist/framework/CustomEvents.d.ts +21 -21
  52. package/dist/framework/CustomEvents.js +47 -47
  53. package/dist/framework/CustomInputElement.d.ts +50 -50
  54. package/dist/framework/CustomInputElement.js +258 -258
  55. package/dist/framework/Language/Languages/Base/BaseDictionary.d.ts +4 -4
  56. package/dist/framework/Language/Languages/Base/BaseDictionary.js +20 -20
  57. package/dist/framework/Language/Languages/CzechDictionary.d.ts +4 -4
  58. package/dist/framework/Language/Languages/CzechDictionary.js +39 -39
  59. package/dist/framework/Language/Languages/DanishDictionary.d.ts +4 -4
  60. package/dist/framework/Language/Languages/DanishDictionary.js +39 -39
  61. package/dist/framework/Language/Languages/DutchDictionary.d.ts +4 -4
  62. package/dist/framework/Language/Languages/DutchDictionary.js +39 -39
  63. package/dist/framework/Language/Languages/EnglishDictionary.d.ts +4 -4
  64. package/dist/framework/Language/Languages/EnglishDictionary.js +39 -39
  65. package/dist/framework/Language/Languages/EstonianDictionary.d.ts +4 -4
  66. package/dist/framework/Language/Languages/EstonianDictionary.js +39 -39
  67. package/dist/framework/Language/Languages/FinnishDictionary.d.ts +4 -4
  68. package/dist/framework/Language/Languages/FinnishDictionary.js +39 -39
  69. package/dist/framework/Language/Languages/FrenchDictionary.d.ts +4 -4
  70. package/dist/framework/Language/Languages/FrenchDictionary.js +39 -39
  71. package/dist/framework/Language/Languages/GermanDictionary.d.ts +4 -4
  72. package/dist/framework/Language/Languages/GermanDictionary.js +39 -39
  73. package/dist/framework/Language/Languages/GreekDictionary.d.ts +4 -4
  74. package/dist/framework/Language/Languages/GreekDictionary.js +39 -39
  75. package/dist/framework/Language/Languages/HungarianDictionary.d.ts +4 -4
  76. package/dist/framework/Language/Languages/HungarianDictionary.js +39 -39
  77. package/dist/framework/Language/Languages/IcelandicDictionary.d.ts +4 -4
  78. package/dist/framework/Language/Languages/IcelandicDictionary.js +39 -39
  79. package/dist/framework/Language/Languages/ItalianDictionary.d.ts +4 -4
  80. package/dist/framework/Language/Languages/ItalianDictionary.js +39 -39
  81. package/dist/framework/Language/Languages/LatvianDictionary.d.ts +4 -4
  82. package/dist/framework/Language/Languages/LatvianDictionary.js +39 -39
  83. package/dist/framework/Language/Languages/LituanianDictionary.d.ts +4 -4
  84. package/dist/framework/Language/Languages/LituanianDictionary.js +39 -39
  85. package/dist/framework/Language/Languages/NorwegianDictionary.d.ts +4 -4
  86. package/dist/framework/Language/Languages/NorwegianDictionary.js +39 -39
  87. package/dist/framework/Language/Languages/PolishDictionary.d.ts +4 -4
  88. package/dist/framework/Language/Languages/PolishDictionary.js +39 -39
  89. package/dist/framework/Language/Languages/PortugueseDictionary.d.ts +4 -4
  90. package/dist/framework/Language/Languages/PortugueseDictionary.js +39 -39
  91. package/dist/framework/Language/Languages/SpanishDictionary.d.ts +4 -4
  92. package/dist/framework/Language/Languages/SpanishDictionary.js +39 -39
  93. package/dist/framework/Language/Languages/SwedishDictionary.d.ts +4 -4
  94. package/dist/framework/Language/Languages/SwedishDictionary.js +39 -39
  95. package/dist/framework/Language/Translator.d.ts +23 -23
  96. package/dist/framework/Language/Translator.js +115 -115
  97. package/dist/framework/Models/OptionWithDescription.d.ts +6 -6
  98. package/dist/framework/Models/OptionWithDescription.js +9 -9
  99. package/dist/framework/Polyfills/getAttributeNamesPolyfill.d.ts +1 -1
  100. package/dist/framework/Polyfills/getAttributeNamesPolyfill.js +17 -17
  101. package/dist/framework/Translations/CaseConverter.d.ts +5 -5
  102. package/dist/framework/Translations/CaseConverter.js +50 -50
  103. package/dist/framework/Utilities/ArrayUtil.d.ts +6 -6
  104. package/dist/framework/Utilities/ArrayUtil.js +36 -36
  105. package/dist/framework/Utilities/DomUtil.d.ts +21 -21
  106. package/dist/framework/Utilities/DomUtil.js +101 -101
  107. package/dist/framework/Utilities/DomUtility.d.ts +3 -3
  108. package/dist/framework/Utilities/DomUtility.js +12 -12
  109. package/dist/framework/Utilities/MakeRequest.d.ts +8 -8
  110. package/dist/framework/Utilities/MakeRequest.js +48 -48
  111. package/dist/framework/Utilities/StringUtil.d.ts +4 -4
  112. package/dist/framework/Utilities/StringUtil.js +16 -16
  113. package/dist/framework/Utilities/ViewportUtil.d.ts +8 -8
  114. package/dist/framework/Utilities/ViewportUtil.js +42 -42
  115. package/dist/framework/Utilities/debouncer.d.ts +8 -8
  116. package/dist/framework/Utilities/debouncer.js +51 -51
  117. package/dist/framework/Validation/IValidator.interface.d.ts +3 -3
  118. package/dist/framework/Validation/IValidator.interface.js +2 -2
  119. package/dist/framework/Validation/Validators/BankAccount.d.ts +4 -4
  120. package/dist/framework/Validation/Validators/BankAccount.js +12 -12
  121. package/dist/framework/Validation/Validators/BankAccountRegistrationNumber.d.ts +4 -4
  122. package/dist/framework/Validation/Validators/BankAccountRegistrationNumber.js +12 -12
  123. package/dist/framework/Validation/Validators/BankIdNorway.d.ts +5 -5
  124. package/dist/framework/Validation/Validators/BankIdNorway.js +21 -21
  125. package/dist/framework/Validation/Validators/BankIdSweden.d.ts +5 -5
  126. package/dist/framework/Validation/Validators/BankIdSweden.js +21 -21
  127. package/dist/framework/Validation/Validators/CPR.d.ts +9 -9
  128. package/dist/framework/Validation/Validators/CPR.js +75 -75
  129. package/dist/framework/Validation/Validators/CVR.d.ts +5 -5
  130. package/dist/framework/Validation/Validators/CVR.js +30 -30
  131. package/dist/framework/custom-element.decorator.d.ts +9 -9
  132. package/dist/framework/custom-element.decorator.js +51 -51
  133. package/dist/index.d.ts +7 -7
  134. package/dist/index.js +14 -14
  135. package/package.json +38 -38
  136. package/src/custom-form.ts +140 -140
  137. package/src/elements/Address/AddressElement.ts +216 -216
  138. package/src/elements/BankField/BankFieldElement.ts +127 -127
  139. package/src/elements/CPRElement/CPRElement.ts +74 -74
  140. package/src/elements/CVRElement/CVRElement.ts +75 -75
  141. package/src/elements/CheckBoxElement/CheckBoxElement.ts +99 -99
  142. package/src/elements/CustomRegularExpression/CustomRegularExpressionElement.ts +75 -75
  143. package/src/elements/DateField/DateFieldElement.ts +78 -78
  144. package/src/elements/DropDownList/DropDownListElement.ts +100 -100
  145. package/src/elements/Elements.ts +37 -37
  146. package/src/elements/EmailField/EmailFieldElement.ts +78 -78
  147. package/src/elements/FileField/FileFieldElement.ts +96 -96
  148. package/src/elements/IdentificationElement/IdentificationElement.ts +104 -104
  149. package/src/elements/InternationaPhoneNumber/InternationaPhoneNumberElement.ts +116 -116
  150. package/src/elements/NumericField/NumericFieldElement.ts +84 -84
  151. package/src/elements/RadioButtonGroup/RadioButtonGroupElement.ts +103 -103
  152. package/src/elements/TextAreaElement/TextAreaElement.ts +72 -72
  153. package/src/elements/TextField/TextFieldElement.ts +72 -72
  154. package/src/elements/TypeAhead/TypeAheadElement.ts +248 -248
  155. package/src/framework/CustomEvents.ts +47 -47
  156. package/src/framework/CustomInputElement.ts +277 -277
  157. package/src/framework/Language/Languages/Base/BaseDictionary.ts +15 -15
  158. package/src/framework/Language/Languages/CzechDictionary.ts +18 -18
  159. package/src/framework/Language/Languages/DanishDictionary.ts +17 -17
  160. package/src/framework/Language/Languages/DutchDictionary.ts +17 -17
  161. package/src/framework/Language/Languages/EnglishDictionary.ts +18 -18
  162. package/src/framework/Language/Languages/EstonianDictionary.ts +17 -17
  163. package/src/framework/Language/Languages/FinnishDictionary.ts +17 -17
  164. package/src/framework/Language/Languages/FrenchDictionary.ts +17 -17
  165. package/src/framework/Language/Languages/GermanDictionary.ts +17 -17
  166. package/src/framework/Language/Languages/GreekDictionary.ts +17 -17
  167. package/src/framework/Language/Languages/HungarianDictionary.ts +17 -17
  168. package/src/framework/Language/Languages/IcelandicDictionary.ts +17 -17
  169. package/src/framework/Language/Languages/ItalianDictionary.ts +17 -17
  170. package/src/framework/Language/Languages/LatvianDictionary.ts +17 -17
  171. package/src/framework/Language/Languages/LituanianDictionary.ts +17 -17
  172. package/src/framework/Language/Languages/NorwegianDictionary.ts +17 -17
  173. package/src/framework/Language/Languages/PolishDictionary.ts +17 -17
  174. package/src/framework/Language/Languages/PortugueseDictionary.ts +17 -17
  175. package/src/framework/Language/Languages/SpanishDictionary.ts +17 -17
  176. package/src/framework/Language/Languages/SwedishDictionary.ts +17 -17
  177. package/src/framework/Language/Translator.ts +110 -110
  178. package/src/framework/Models/OptionWithDescription.ts +8 -8
  179. package/src/framework/Polyfills/getAttributeNamesPolyfill.ts +13 -13
  180. package/src/framework/Translations/CaseConverter.ts +43 -43
  181. package/src/framework/Utilities/ArrayUtil.ts +31 -31
  182. package/src/framework/Utilities/DomUtil.ts +117 -117
  183. package/src/framework/Utilities/DomUtility.ts +6 -6
  184. package/src/framework/Utilities/MakeRequest.ts +47 -47
  185. package/src/framework/Utilities/StringUtil.ts +8 -8
  186. package/src/framework/Utilities/ViewportUtil.ts +46 -46
  187. package/src/framework/Utilities/debouncer.ts +66 -66
  188. package/src/framework/Validation/IValidator.interface.ts +3 -3
  189. package/src/framework/Validation/Validators/BankAccount.ts +7 -7
  190. package/src/framework/Validation/Validators/BankAccountRegistrationNumber.ts +8 -8
  191. package/src/framework/Validation/Validators/BankIdNorway.ts +21 -21
  192. package/src/framework/Validation/Validators/BankIdSweden.ts +21 -21
  193. package/src/framework/Validation/Validators/CPR.ts +82 -82
  194. package/src/framework/Validation/Validators/CVR.ts +27 -27
  195. package/src/framework/custom-element.decorator.ts +57 -57
  196. package/src/index.ts +12 -12
@@ -1,104 +1,104 @@
1
- import CustomElement from '../../framework/custom-element.decorator';
2
- import { CustomInputElement } from '../../framework/CustomInputElement';
3
- import { CustomElementEventArgs } from '../../framework/CustomEvents';
4
- import CprValidator from '../../framework/Validation/Validators/CPR';
5
- import IValidator from '../../framework/Validation/IValidator.interface';
6
- import CvrValidator from '../../framework/Validation/Validators/CVR';
7
- import BankIdSwedenValidator from '../../framework/Validation/Validators/BankIdSweden';
8
- import BankIdNorwayValidator from '../../framework/Validation/Validators/BankIdNorway';
9
-
10
- @CustomElement({
11
- selector: 'id-element',
12
- template: `
13
- <div class="wrapper">
14
- <select id='id-type'>
15
- <option value='cvr'>Danish CVR</option>
16
- <option value='cpr'>Danish CPR</option>
17
- <option value='swe'>Sweden Bank Id</option>
18
- <option value='nor'>Norway Bank Id</option>
19
- </select>
20
- <input type="text" id='id-field' placeholder=''/>
21
- </div>`,
22
- style: `
23
- :host{
24
- width:100%;
25
- }
26
- .wrapper{
27
- display:flex;
28
- }
29
- input, select{
30
- box-sizing: border-box;
31
- border: none;
32
- background-color: #f1f4ff;
33
- margin: 2px;
34
- resize: none;
35
- }
36
- input{
37
- width: 75% !important;
38
- }
39
- select{
40
- width: 25% !important;
41
- }
42
- `,
43
- useShadow: true,
44
- })
45
- export class IdentificationElement extends CustomInputElement {
46
- typeSelector: HTMLInputElement;
47
- text: HTMLInputElement;
48
-
49
- type: string;
50
- validators: { [index: string]: IValidator } = {
51
- cpr: new CprValidator(),
52
- cvr: new CvrValidator(),
53
- swe: new BankIdSwedenValidator(),
54
- nor: new BankIdNorwayValidator(),
55
- };
56
-
57
- constructor() {
58
- super();
59
- }
60
-
61
- get value(): string {
62
- return `${this.text.value}`;
63
- }
64
-
65
- set value(value: string) {
66
- this.text.value = value;
67
- }
68
-
69
- get valid(): boolean {
70
- return this.validators[this.type].isSatisfiedBy(
71
- this.value,
72
- !this.required,
73
- );
74
- }
75
-
76
- connectedCallback(): void {
77
- super.connectedCallback();
78
- }
79
-
80
- initChildInputs() {
81
- this.text = super.getChildInput('#id-field');
82
- this.typeSelector = super.getChildInput('#id-type');
83
- this.text.addEventListener('change', this.change.bind(this));
84
- this.typeSelector.addEventListener('change', this.change.bind(this));
85
- if (this.required) {
86
- this.text.setAttribute('required', '');
87
- }
88
- this.type = this.typeSelector.value;
89
- }
90
-
91
- // events
92
- public change($event): void {
93
- this.touched = true;
94
- this.type = this.typeSelector.value;
95
- this.onChange.emit(new CustomElementEventArgs(this.value, 'change'));
96
- }
97
-
98
- public validate(): void {
99
- this.valid;
100
- this.onValidate.emit(
101
- new CustomElementEventArgs(this.value, 'validate'),
102
- );
103
- }
104
- }
1
+ import CustomElement from '../../framework/custom-element.decorator';
2
+ import { CustomInputElement } from '../../framework/CustomInputElement';
3
+ import { CustomElementEventArgs } from '../../framework/CustomEvents';
4
+ import CprValidator from '../../framework/Validation/Validators/CPR';
5
+ import IValidator from '../../framework/Validation/IValidator.interface';
6
+ import CvrValidator from '../../framework/Validation/Validators/CVR';
7
+ import BankIdSwedenValidator from '../../framework/Validation/Validators/BankIdSweden';
8
+ import BankIdNorwayValidator from '../../framework/Validation/Validators/BankIdNorway';
9
+
10
+ @CustomElement({
11
+ selector: 'id-element',
12
+ template: `
13
+ <div class="wrapper">
14
+ <select id='id-type'>
15
+ <option value='cvr'>Danish CVR</option>
16
+ <option value='cpr'>Danish CPR</option>
17
+ <option value='swe'>Sweden Bank Id</option>
18
+ <option value='nor'>Norway Bank Id</option>
19
+ </select>
20
+ <input type="text" id='id-field' placeholder=''/>
21
+ </div>`,
22
+ style: `
23
+ :host{
24
+ width:100%;
25
+ }
26
+ .wrapper{
27
+ display:flex;
28
+ }
29
+ input, select{
30
+ box-sizing: border-box;
31
+ border: none;
32
+ background-color: #f1f4ff;
33
+ margin: 2px;
34
+ resize: none;
35
+ }
36
+ input{
37
+ width: 75% !important;
38
+ }
39
+ select{
40
+ width: 25% !important;
41
+ }
42
+ `,
43
+ useShadow: true,
44
+ })
45
+ export class IdentificationElement extends CustomInputElement {
46
+ typeSelector: HTMLInputElement;
47
+ text: HTMLInputElement;
48
+
49
+ type: string;
50
+ validators: { [index: string]: IValidator } = {
51
+ cpr: new CprValidator(),
52
+ cvr: new CvrValidator(),
53
+ swe: new BankIdSwedenValidator(),
54
+ nor: new BankIdNorwayValidator(),
55
+ };
56
+
57
+ constructor() {
58
+ super();
59
+ }
60
+
61
+ get value(): string {
62
+ return `${this.text.value}`;
63
+ }
64
+
65
+ set value(value: string) {
66
+ this.text.value = value;
67
+ }
68
+
69
+ get valid(): boolean {
70
+ return this.validators[this.type].isSatisfiedBy(
71
+ this.value,
72
+ !this.required,
73
+ );
74
+ }
75
+
76
+ connectedCallback(): void {
77
+ super.connectedCallback();
78
+ }
79
+
80
+ initChildInputs() {
81
+ this.text = super.getChildInput('#id-field');
82
+ this.typeSelector = super.getChildInput('#id-type');
83
+ this.text.addEventListener('change', this.change.bind(this));
84
+ this.typeSelector.addEventListener('change', this.change.bind(this));
85
+ if (this.required) {
86
+ this.text.setAttribute('required', '');
87
+ }
88
+ this.type = this.typeSelector.value;
89
+ }
90
+
91
+ // events
92
+ public change($event): void {
93
+ this.touched = true;
94
+ this.type = this.typeSelector.value;
95
+ this.onChange.emit(new CustomElementEventArgs(this.value, 'change'));
96
+ }
97
+
98
+ public validate(): void {
99
+ this.valid;
100
+ this.onValidate.emit(
101
+ new CustomElementEventArgs(this.value, 'validate'),
102
+ );
103
+ }
104
+ }
@@ -1,116 +1,116 @@
1
- import CustomElement from '../../framework/custom-element.decorator';
2
- import { CustomInputElement } from '../../framework/CustomInputElement';
3
- import { CustomElementEventArgs } from '../../framework/CustomEvents';
4
- import * as intlTelInput from 'intl-tel-input';
5
- import { Plugin } from 'intl-tel-input';
6
- import MakeRequest from '../../framework/Utilities/MakeRequest';
7
-
8
- @CustomElement({
9
- selector: 'int-phone-element',
10
- template: `
11
- <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/16.0.0/css/intlTelInput.css" >
12
- <div class="wrapper">
13
- <input type="tel" id="phone-field" />
14
- </div>`,
15
- style: `
16
- :host{
17
- width:100%;
18
- }
19
- .wrapper{
20
- display:flex;
21
- }
22
- .iti {
23
- width: 100% !important;
24
- }
25
- input{
26
- box-sizing: border-box;
27
- width: 100% !important;
28
- border: none;
29
- background-color: #f1f4ff;
30
- margin: 2px;
31
- resize: none;
32
- }
33
- `,
34
- useShadow: true,
35
- })
36
- export class IntPhoneFieldElement extends CustomInputElement {
37
- phone: HTMLInputElement;
38
- fullPhone: HTMLInputElement;
39
- intlTelInput: Plugin;
40
- constructor() {
41
- super();
42
- }
43
-
44
- get value(): string {
45
- return this.intlTelInput.getNumber();
46
- }
47
-
48
- set value(value: string) {
49
- this.phone.value = value;
50
- }
51
-
52
- get valid(): boolean {
53
- const patternValid =
54
- !this.intlTelInput.getNumber() || this.intlTelInput.isValidNumber();
55
- return patternValid && this.phone.validity.valid;
56
- }
57
-
58
- connectedCallback(): void {
59
- this.setIntlTelInput();
60
- super.connectedCallback();
61
- }
62
-
63
- initChildInputs() {
64
- this.phone.addEventListener('change', this.change.bind(this));
65
- if (this.required) {
66
- this.phone.setAttribute('required', '');
67
- }
68
- }
69
- setIntlTelInput() {
70
- this.phone = super.getChildInput('#phone-field');
71
- const geoIpLookup = (success, failure) => {
72
- return new MakeRequest(
73
- 'https://ipinfo.io/json?token=8226138217a68a',
74
- 'get',
75
- { 'content-type': 'application/json' },
76
- )
77
- .send()
78
- .then((request: any) => {
79
- const res = JSON.parse(request);
80
- return success(res.country);
81
- })
82
- .catch(err => {
83
- return success('DK');
84
- });
85
- };
86
- const isIplookUpDisabled = this.getAttribute('data-disable-iplookup')?.toLowerCase() === "true";
87
- const defaultCountry = isIplookUpDisabled ? 'dk' : 'auto';
88
- const country = this.getAttribute('data-country')?.toLowerCase();
89
- this.intlTelInput = intlTelInput(this.phone, {
90
- geoIpLookup: isIplookUpDisabled ? null : geoIpLookup,
91
- hiddenInput: 'fullphone',
92
- initialCountry: country ?? defaultCountry,
93
- preferredCountries: ["dk", "se", "gb"],
94
- nationalMode: true,
95
- utilsScript:
96
- 'https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/15.0.1/js/utils.js',
97
- } as any);
98
- this.intlTelInput.promise.then(e => {
99
- setTimeout(() => {
100
- this.fullPhone = super.getChildInput('[name="fullphone"]');
101
- }, 1000);
102
- });
103
- }
104
- // events
105
- public change($event): void {
106
- this.touched = true;
107
- this.onChange.emit(new CustomElementEventArgs(this.value, 'change'));
108
- }
109
-
110
- public validate(): void {
111
- this.valid;
112
- this.onValidate.emit(
113
- new CustomElementEventArgs(this.value, 'validate'),
114
- );
115
- }
116
- }
1
+ import CustomElement from '../../framework/custom-element.decorator';
2
+ import { CustomInputElement } from '../../framework/CustomInputElement';
3
+ import { CustomElementEventArgs } from '../../framework/CustomEvents';
4
+ import * as intlTelInput from 'intl-tel-input';
5
+ import { Plugin } from 'intl-tel-input';
6
+ import MakeRequest from '../../framework/Utilities/MakeRequest';
7
+
8
+ @CustomElement({
9
+ selector: 'int-phone-element',
10
+ template: `
11
+ <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/16.0.0/css/intlTelInput.css" >
12
+ <div class="wrapper">
13
+ <input type="tel" id="phone-field" />
14
+ </div>`,
15
+ style: `
16
+ :host{
17
+ width:100%;
18
+ }
19
+ .wrapper{
20
+ display:flex;
21
+ }
22
+ .iti {
23
+ width: 100% !important;
24
+ }
25
+ input{
26
+ box-sizing: border-box;
27
+ width: 100% !important;
28
+ border: none;
29
+ background-color: #f1f4ff;
30
+ margin: 2px;
31
+ resize: none;
32
+ }
33
+ `,
34
+ useShadow: true,
35
+ })
36
+ export class IntPhoneFieldElement extends CustomInputElement {
37
+ phone: HTMLInputElement;
38
+ fullPhone: HTMLInputElement;
39
+ intlTelInput: Plugin;
40
+ constructor() {
41
+ super();
42
+ }
43
+
44
+ get value(): string {
45
+ return this.intlTelInput.getNumber();
46
+ }
47
+
48
+ set value(value: string) {
49
+ this.phone.value = value;
50
+ }
51
+
52
+ get valid(): boolean {
53
+ const patternValid =
54
+ !this.intlTelInput.getNumber() || this.intlTelInput.isValidNumber();
55
+ return patternValid && this.phone.validity.valid;
56
+ }
57
+
58
+ connectedCallback(): void {
59
+ this.setIntlTelInput();
60
+ super.connectedCallback();
61
+ }
62
+
63
+ initChildInputs() {
64
+ this.phone.addEventListener('change', this.change.bind(this));
65
+ if (this.required) {
66
+ this.phone.setAttribute('required', '');
67
+ }
68
+ }
69
+ setIntlTelInput() {
70
+ this.phone = super.getChildInput('#phone-field');
71
+ const geoIpLookup = (success, failure) => {
72
+ return new MakeRequest(
73
+ 'https://ipinfo.io/json?token=8226138217a68a',
74
+ 'get',
75
+ { 'content-type': 'application/json' },
76
+ )
77
+ .send()
78
+ .then((request: any) => {
79
+ const res = JSON.parse(request);
80
+ return success(res.country);
81
+ })
82
+ .catch(err => {
83
+ return success('DK');
84
+ });
85
+ };
86
+ const isIplookUpDisabled = this.getAttribute('data-disable-iplookup')?.toLowerCase() === "true";
87
+ const defaultCountry = isIplookUpDisabled ? 'dk' : 'auto';
88
+ const country = this.getAttribute('data-country')?.toLowerCase();
89
+ this.intlTelInput = intlTelInput(this.phone, {
90
+ geoIpLookup: isIplookUpDisabled ? null : geoIpLookup,
91
+ hiddenInput: 'fullphone',
92
+ initialCountry: country ?? defaultCountry,
93
+ preferredCountries: ["dk", "se", "gb"],
94
+ nationalMode: true,
95
+ utilsScript:
96
+ 'https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/15.0.1/js/utils.js',
97
+ } as any);
98
+ this.intlTelInput.promise.then(e => {
99
+ setTimeout(() => {
100
+ this.fullPhone = super.getChildInput('[name="fullphone"]');
101
+ }, 1000);
102
+ });
103
+ }
104
+ // events
105
+ public change($event): void {
106
+ this.touched = true;
107
+ this.onChange.emit(new CustomElementEventArgs(this.value, 'change'));
108
+ }
109
+
110
+ public validate(): void {
111
+ this.valid;
112
+ this.onValidate.emit(
113
+ new CustomElementEventArgs(this.value, 'validate'),
114
+ );
115
+ }
116
+ }
@@ -1,84 +1,84 @@
1
- import CustomElement from '../../framework/custom-element.decorator';
2
- import { CustomInputElement } from '../../framework/CustomInputElement';
3
- import { CustomElementEventArgs } from '../../framework/CustomEvents';
4
-
5
- @CustomElement({
6
- selector: 'numeric-element',
7
- template: `
8
- <div class="wrapper">
9
- <input type="number" id='numeric-field'/>
10
- </div>`,
11
- style: `
12
- :host{
13
- width:100%;
14
- }
15
- .wrapper{
16
- display:flex;
17
- }
18
- input{
19
- box-sizing: border-box;
20
- width: 100% !important;
21
- border: none;
22
- background-color: #f1f4ff;
23
- margin: 2px;
24
- resize: none;
25
- }
26
- `,
27
- useShadow: true,
28
- })
29
- export class NumericFieldElement extends CustomInputElement {
30
- number: HTMLInputElement;
31
-
32
- constructor() {
33
- super();
34
- }
35
-
36
- get value(): any {
37
- if (isNaN(this.number.valueAsNumber)) {
38
- return '';
39
- }
40
- return this.number.valueAsNumber;
41
- }
42
-
43
- set value(value: any) {
44
- this.number.valueAsNumber = value;
45
- }
46
-
47
- get valid(): boolean {
48
- return this.number.validity.valid;
49
- }
50
-
51
- connectedCallback(): void {
52
- super.connectedCallback();
53
- }
54
-
55
- initChildInputs() {
56
- this.number = super.getChildInput('#numeric-field');
57
- this.number.addEventListener('change', this.change.bind(this));
58
- if (this.required) {
59
- this.number.setAttribute('required', '');
60
- }
61
- if (this.max) {
62
- this.number.setAttribute('max', this.max);
63
- }
64
- if (this.min) {
65
- this.number.setAttribute('min', this.min);
66
- }
67
- if (this.step) {
68
- this.number.setAttribute('step', this.step);
69
- }
70
- }
71
-
72
- // events
73
- public change($event): void {
74
- this.touched = true;
75
- this.onChange.emit(new CustomElementEventArgs(this.value, 'change'));
76
- }
77
-
78
- public validate(): void {
79
- this.valid;
80
- this.onValidate.emit(
81
- new CustomElementEventArgs(this.value, 'validate'),
82
- );
83
- }
84
- }
1
+ import CustomElement from '../../framework/custom-element.decorator';
2
+ import { CustomInputElement } from '../../framework/CustomInputElement';
3
+ import { CustomElementEventArgs } from '../../framework/CustomEvents';
4
+
5
+ @CustomElement({
6
+ selector: 'numeric-element',
7
+ template: `
8
+ <div class="wrapper">
9
+ <input type="number" id='numeric-field'/>
10
+ </div>`,
11
+ style: `
12
+ :host{
13
+ width:100%;
14
+ }
15
+ .wrapper{
16
+ display:flex;
17
+ }
18
+ input{
19
+ box-sizing: border-box;
20
+ width: 100% !important;
21
+ border: none;
22
+ background-color: #f1f4ff;
23
+ margin: 2px;
24
+ resize: none;
25
+ }
26
+ `,
27
+ useShadow: true,
28
+ })
29
+ export class NumericFieldElement extends CustomInputElement {
30
+ number: HTMLInputElement;
31
+
32
+ constructor() {
33
+ super();
34
+ }
35
+
36
+ get value(): any {
37
+ if (isNaN(this.number.valueAsNumber)) {
38
+ return '';
39
+ }
40
+ return this.number.valueAsNumber;
41
+ }
42
+
43
+ set value(value: any) {
44
+ this.number.valueAsNumber = value;
45
+ }
46
+
47
+ get valid(): boolean {
48
+ return this.number.validity.valid;
49
+ }
50
+
51
+ connectedCallback(): void {
52
+ super.connectedCallback();
53
+ }
54
+
55
+ initChildInputs() {
56
+ this.number = super.getChildInput('#numeric-field');
57
+ this.number.addEventListener('change', this.change.bind(this));
58
+ if (this.required) {
59
+ this.number.setAttribute('required', '');
60
+ }
61
+ if (this.max) {
62
+ this.number.setAttribute('max', this.max);
63
+ }
64
+ if (this.min) {
65
+ this.number.setAttribute('min', this.min);
66
+ }
67
+ if (this.step) {
68
+ this.number.setAttribute('step', this.step);
69
+ }
70
+ }
71
+
72
+ // events
73
+ public change($event): void {
74
+ this.touched = true;
75
+ this.onChange.emit(new CustomElementEventArgs(this.value, 'change'));
76
+ }
77
+
78
+ public validate(): void {
79
+ this.valid;
80
+ this.onValidate.emit(
81
+ new CustomElementEventArgs(this.value, 'validate'),
82
+ );
83
+ }
84
+ }