@iamproperty/components 7.6.4--beta1 → 7.6.4--beta2

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 (113) hide show
  1. package/assets/css/components/actionbar.component.css +1 -1
  2. package/assets/css/components/actionbar.component.css.map +1 -1
  3. package/assets/css/components/address-lookup.component.css +1 -1
  4. package/assets/css/components/address-lookup.component.css.map +1 -1
  5. package/assets/css/components/calendar.component.css +1 -1
  6. package/assets/css/components/calendar.component.css.map +1 -1
  7. package/assets/css/components/fileupload.css +1 -1
  8. package/assets/css/components/fileupload.css.map +1 -1
  9. package/assets/css/components/multiselect.css +1 -1
  10. package/assets/css/components/multiselect.css.map +1 -1
  11. package/assets/css/components/nav.component.css +1 -1
  12. package/assets/css/components/nav.component.css.map +1 -1
  13. package/assets/css/components/pagination.css +1 -1
  14. package/assets/css/components/pagination.css.map +1 -1
  15. package/assets/css/components/slider.css +1 -1
  16. package/assets/css/components/slider.css.map +1 -1
  17. package/assets/css/components/tag.component.css +1 -1
  18. package/assets/css/components/tag.component.css.map +1 -1
  19. package/assets/css/core.min.css +1 -1
  20. package/assets/css/core.min.css.map +1 -1
  21. package/assets/css/style.min.css +1 -1
  22. package/assets/css/style.min.css.map +1 -1
  23. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  24. package/assets/js/components/actionbar/actionbar.component.min.js +2 -2
  25. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  26. package/assets/js/components/address-lookup/address-lookup.component.min.js +2 -2
  27. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -1
  28. package/assets/js/components/advanced-select/advanced-select.component.min.js +1 -1
  29. package/assets/js/components/advanced-select/advanced-select.component.min.js.map +1 -1
  30. package/assets/js/components/applied-filters/applied-filters.component.min.js +1 -1
  31. package/assets/js/components/barchart/barchart.component.min.js +1 -1
  32. package/assets/js/components/barchart/barchart.component.min.js.map +1 -1
  33. package/assets/js/components/bento-grid/bento-grid.component.min.js +1 -1
  34. package/assets/js/components/calendar/calendar.component.min.js +2 -2
  35. package/assets/js/components/calendar/calendar.component.min.js.map +1 -1
  36. package/assets/js/components/card/card.component.min.js +1 -1
  37. package/assets/js/components/carousel/carousel.component.min.js +1 -1
  38. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  39. package/assets/js/components/content/content.component.min.js +1 -1
  40. package/assets/js/components/darkmode/darkmode.component.min.js +1 -1
  41. package/assets/js/components/doughnutchart/doughnutchart.component.min.js +1 -1
  42. package/assets/js/components/doughnutchart/doughnutchart.component.min.js.map +1 -1
  43. package/assets/js/components/fileupload/fileupload.component.min.js +4 -4
  44. package/assets/js/components/filter-card/filter-card.component.min.js +1 -1
  45. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  46. package/assets/js/components/form/form.component.js +68 -0
  47. package/assets/js/components/form/form.component.min.js +9 -0
  48. package/assets/js/components/form/form.component.min.js.map +1 -0
  49. package/assets/js/components/header/header.component.min.js +1 -1
  50. package/assets/js/components/inline-edit/inline-edit.component.min.js +1 -1
  51. package/assets/js/components/input/input.component.js +7 -5
  52. package/assets/js/components/input/input.component.min.js +2 -2
  53. package/assets/js/components/input/input.component.min.js.map +1 -1
  54. package/assets/js/components/input-range/input-range.component.min.js +1 -1
  55. package/assets/js/components/marketing/marketing.component.min.js +1 -1
  56. package/assets/js/components/menu/menu.component.min.js +1 -1
  57. package/assets/js/components/milestone/milestone.component.min.js +1 -1
  58. package/assets/js/components/milestone-group/milestone-group.component.min.js +1 -1
  59. package/assets/js/components/modal/modal.component.min.js +1 -1
  60. package/assets/js/components/multi-step/multi-step.component.min.js +1 -1
  61. package/assets/js/components/multi-step-modal/multi-step-modal.component.min.js +1 -1
  62. package/assets/js/components/multiselect/multiselect.component.min.js +2 -2
  63. package/assets/js/components/nav/nav.component.min.js +2 -2
  64. package/assets/js/components/notification/notification.component.min.js +1 -1
  65. package/assets/js/components/pagination/pagination.component.min.js +3 -3
  66. package/assets/js/components/password/password.component.min.js +1 -1
  67. package/assets/js/components/popover/popover.component.min.js +1 -1
  68. package/assets/js/components/rank/rank.component.min.js +1 -1
  69. package/assets/js/components/rankings/rankings.component.min.js +1 -1
  70. package/assets/js/components/rating/rating.component.min.js +1 -1
  71. package/assets/js/components/record-card/record-card.component.min.js +1 -1
  72. package/assets/js/components/search/search.component.min.js +1 -1
  73. package/assets/js/components/search/search.component.min.js.map +1 -1
  74. package/assets/js/components/slider/slider.component.min.js +2 -2
  75. package/assets/js/components/split-button/split-button.component.min.js +1 -1
  76. package/assets/js/components/std-address-lookup/std-address-lookup.component.js +20 -0
  77. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js +5 -5
  78. package/assets/js/components/std-address-lookup/std-address-lookup.component.min.js.map +1 -1
  79. package/assets/js/components/table/table.component.min.js +1 -1
  80. package/assets/js/components/table/table.component.min.js.map +1 -1
  81. package/assets/js/components/table-ajax/table-ajax.component.min.js +1 -1
  82. package/assets/js/components/table-ajax/table-ajax.component.min.js.map +1 -1
  83. package/assets/js/components/table-basic/table-basic.component.min.js +1 -1
  84. package/assets/js/components/table-basic/table-basic.component.min.js.map +1 -1
  85. package/assets/js/components/table-no-submit/table-no-submit.component.min.js +1 -1
  86. package/assets/js/components/table-no-submit/table-no-submit.component.min.js.map +1 -1
  87. package/assets/js/components/table-submit/table-submit.component.min.js +1 -1
  88. package/assets/js/components/table-submit/table-submit.component.min.js.map +1 -1
  89. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  90. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  91. package/assets/js/components/tag/tag.component.min.js +3 -3
  92. package/assets/js/components/tooltip/tooltip.component.min.js +1 -1
  93. package/assets/js/components/video-card/video-card.component.min.js +1 -1
  94. package/assets/js/components/video-modal/video-modal.component.min.js +1 -1
  95. package/assets/js/components/word-count/word-count.component.min.js +1 -1
  96. package/assets/js/modules/helpers.js +26 -22
  97. package/assets/js/scripts.bundle.js +2 -2
  98. package/assets/js/scripts.bundle.js.map +1 -1
  99. package/assets/js/scripts.bundle.min.js +2 -2
  100. package/assets/js/scripts.bundle.min.js.map +1 -1
  101. package/assets/sass/elements/forms.scss +8 -14
  102. package/assets/sass/elements/icons.css +4 -4
  103. package/assets/sass/elements/input.scss +0 -14
  104. package/assets/sass/elements/textarea.scss +97 -0
  105. package/assets/sass/templates/form.scss +14 -5
  106. package/assets/ts/components/form/form.component.ts +102 -0
  107. package/assets/ts/components/input/input.component.ts +8 -6
  108. package/assets/ts/components/std-address-lookup/std-address-lookup.component.ts +32 -0
  109. package/assets/ts/modules/helpers.ts +32 -27
  110. package/dist/components.es.js +28 -28
  111. package/dist/components.umd.js +186 -179
  112. package/package.json +1 -1
  113. package/src/components/Form/Form.vue +22 -0
@@ -50,21 +50,30 @@
50
50
  outline: var(--contrast-outline-width, 0px) solid var(--colour-primary);
51
51
  width: 100%;
52
52
 
53
- @media screen and (min-width: 36em) {
53
+ > *:last-child {
54
+ margin-bottom: 0 !important;
55
+ }
56
+ }
57
+
58
+ @media screen and (min-width: 36em) {
59
+ .form-panel {
54
60
  max-width: calc(100% - 5rem); // Guess
55
61
  margin-inline: auto;
56
62
  }
63
+ }
57
64
 
58
- @media screen and (min-width: 62em) {
65
+ @media screen and (min-width: 62em) {
66
+ .form-panel {
59
67
  max-width: rem(924); // Guess
60
68
  border-radius: 0.5rem;
61
69
  padding-inline: rem(94);
62
70
  padding-block: 2.5rem;
63
71
  margin-bottom: 2rem;
64
72
  }
65
-
66
- > *:last-child {
67
- margin-bottom: 0 !important;
73
+
74
+ .form-panel--sm {
75
+ max-width: 40rem; /* 640px */
76
+ padding-inline: 2rem;
68
77
  }
69
78
  }
70
79
 
@@ -0,0 +1,102 @@
1
+ import { trackComponent, trackComponentRegistered } from '../_global';
2
+ import { searchAjax, filterList, setTag } from '../../modules/dropdown';
3
+
4
+ trackComponentRegistered('iam-tag');
5
+
6
+ class iamTag extends HTMLElement {
7
+ constructor() {
8
+ super();
9
+ this.attachShadow({ mode: 'open' });
10
+
11
+ const template = document.createElement('template');
12
+ template.innerHTML = `
13
+ <div class="wrapper">
14
+ <slot></slot>
15
+ </div>
16
+ `;
17
+
18
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
19
+ }
20
+
21
+ isFormValid(form):boolean {
22
+
23
+ if (form.querySelector(':invalid'))
24
+ return false;
25
+
26
+ if (form.querySelector('.pwd-checker[data-strength="1"]') || form.querySelector('.pwd-checker[data-strength="2"]'))
27
+ return false;
28
+
29
+ if (form.querySelector('iam-multiselect[data-is-required][data-error]'))
30
+ return false;
31
+
32
+ return true;
33
+ };
34
+
35
+ connectedCallback(): void {
36
+
37
+ const form = this.querySelector('form');
38
+
39
+ if(!form)
40
+ return false;
41
+
42
+ form.setAttribute('novalidate','true');
43
+
44
+ // Form validation
45
+ form.addEventListener('submit', (e) => {
46
+
47
+ form.classList.add('was-validated');
48
+
49
+ if (!this.isFormValid(form)) {
50
+
51
+ console.log('hey2');
52
+
53
+ e.preventDefault();
54
+ form?.querySelector('input:invalid')?.scrollIntoView();
55
+ }
56
+ });
57
+
58
+
59
+ // conditional reveal required fields
60
+ Array.from(form.querySelectorAll('.conditional [required]')).forEach((input) => {
61
+
62
+ input.setAttribute('data-conditional-required','true');
63
+ input.removeAttribute('required');
64
+ });
65
+
66
+ // conditional reveal required fields (for fields inside of components like the address lookup)
67
+ Array.from(form.querySelectorAll('.conditional [data-required]')).forEach((input) => {
68
+
69
+ input.setAttribute('data-conditional-data-required','true');
70
+ input.removeAttribute('data-required');
71
+ });
72
+
73
+ form.addEventListener('change', () => {
74
+
75
+
76
+ Array.from(form.querySelectorAll('.conditional [data-conditional-required], .conditional [data-conditional-data-required]')).forEach((input) => {
77
+
78
+ input.removeAttribute('required');
79
+ input.removeAttribute('data-required');
80
+ });
81
+
82
+
83
+ Array.from(form.querySelectorAll('.conditional [data-conditional-required]')).forEach((input) => {
84
+
85
+ const conditionalStyles = window.getComputedStyle(input.closest('.conditional'));
86
+
87
+ if(conditionalStyles.getPropertyValue("display") == 'block')
88
+ input.setAttribute('required', 'required');
89
+ });
90
+
91
+ Array.from(form.querySelectorAll('.conditional [data-conditional-data-required]')).forEach((input) => {
92
+
93
+ const conditionalStyles = window.getComputedStyle(input.closest('.conditional'));
94
+
95
+ if(conditionalStyles.getPropertyValue("display") == 'block')
96
+ input.setAttribute('data-required', 'true');
97
+ });
98
+ });
99
+ }
100
+ }
101
+
102
+ export default iamTag;
@@ -66,16 +66,18 @@ class iamInput extends HTMLElement {
66
66
 
67
67
 
68
68
  const setCurrencyRules = (): void => {
69
-
69
+ let originalValue = input.value.replace(',','');
70
+
71
+ input?.setAttribute('data-value',originalValue);
70
72
  input.setAttribute('type','text');
71
- input?.setAttribute('data-value',input.value);
72
- input.value = new Intl.NumberFormat("en-GB", {
73
+ originalValue = new Intl.NumberFormat("en-GB", {
73
74
  style: "currency",
74
75
  currency: "GBP",
75
- minimumFractionDigits: Number.isInteger(input.value) ? 0 : 2,
76
- maximumFractionDigits: Number.isInteger(input.value) ? 0 : 2,
76
+ minimumFractionDigits: Number.isInteger(originalValue) ? 0 : 2,
77
+ maximumFractionDigits: Number.isInteger(originalValue) ? 0 : 2,
77
78
  trailingZeroDisplay: 'stripIfInteger' // Strip zeros if it's an integer
78
- }).format(input.value).replace("£", "");
79
+ }).format(originalValue).replace("£", "");
80
+ input.value = originalValue;
79
81
  }
80
82
 
81
83
 
@@ -1786,6 +1786,38 @@ class iamSTDAddressLookup extends HTMLElement {
1786
1786
  }
1787
1787
  });
1788
1788
  }
1789
+
1790
+
1791
+ // If inside conditional
1792
+
1793
+
1794
+ if(this.closest('.conditional')){
1795
+
1796
+
1797
+ Array.from(this.querySelectorAll('[required]')).forEach((input) => {
1798
+
1799
+ input.setAttribute('data-conditional-required','true');
1800
+ input.removeAttribute('required');
1801
+ });
1802
+
1803
+ Array.from(this.querySelectorAll('[data-required]')).forEach((input) => {
1804
+
1805
+ input.setAttribute('data-conditional-data-required','true');
1806
+ input.removeAttribute('data-required');
1807
+ });
1808
+
1809
+ const conditionalStyles = window.getComputedStyle(this.closest('.conditional'));
1810
+
1811
+ if(conditionalStyles.getPropertyValue("display") == 'block'){
1812
+ Array.from(this.querySelectorAll('[data-conditional-data-required]')).forEach((input) => {
1813
+ input.setAttribute('data-required', 'true');
1814
+ });
1815
+ Array.from(this.querySelectorAll('[data-conditional-required]')).forEach((input) => {
1816
+ input.setAttribute('required', 'true');
1817
+ });
1818
+ }
1819
+ }
1820
+
1789
1821
  }
1790
1822
  }
1791
1823
 
@@ -55,15 +55,18 @@ export const addGlobalEvents = (body): void => {
55
55
  });
56
56
 
57
57
  Array.from(document.querySelectorAll('form')).forEach((form) => {
58
- form.addEventListener('submit', (event) => {
59
- if (
60
- form.querySelector(':invalid')
61
- ) {
62
- form.classList.add('was-validated');
63
- form?.querySelector('input:invalid')?.scrollIntoView();
64
- event.preventDefault();
65
- }
66
- });
58
+
59
+ if(!form?.closest('iam-form')){
60
+ form.addEventListener('submit', (event) => {
61
+ if (
62
+ form.querySelector(':invalid')
63
+ ) {
64
+ form.classList.add('was-validated');
65
+ form?.querySelector('input:invalid')?.scrollIntoView();
66
+ event.preventDefault();
67
+ }
68
+ });
69
+ }
67
70
  });
68
71
 
69
72
  document.addEventListener('click', (event) => {
@@ -71,24 +74,26 @@ export const addGlobalEvents = (body): void => {
71
74
  if (event && event.target instanceof HTMLElement && event.target.matches('form button:not([type=button])')) {
72
75
  const form = event.target.closest('form');
73
76
 
74
- // Reset password types
75
- Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {
76
- input.setAttribute('type', 'password');
77
- });
78
-
79
- if (
80
- form.querySelector(':invalid') ||
81
- form.querySelector('.pwd-checker[data-strength="1"]') ||
82
- form.querySelector('.pwd-checker[data-strength="2"]')
83
- ) {
84
- form.classList.add('was-validated');
85
- form?.querySelector('input:invalid')?.scrollIntoView();
86
- event.preventDefault();
87
- }
88
-
89
- if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {
90
- form.classList.add('was-validated');
91
- event.preventDefault();
77
+ if(!form?.closest('iam-form')){
78
+ // Reset password types
79
+ Array.from(form.querySelectorAll('[data-password-type]')).forEach((input) => {
80
+ input.setAttribute('type', 'password');
81
+ });
82
+
83
+ if (
84
+ form.querySelector(':invalid') ||
85
+ form.querySelector('.pwd-checker[data-strength="1"]') ||
86
+ form.querySelector('.pwd-checker[data-strength="2"]')
87
+ ) {
88
+ form.classList.add('was-validated');
89
+ form?.querySelector('input:invalid')?.scrollIntoView();
90
+ event.preventDefault();
91
+ }
92
+
93
+ if (form.querySelector('iam-multiselect[data-is-required][data-error]')) {
94
+ form.classList.add('was-validated');
95
+ event.preventDefault();
96
+ }
92
97
  }
93
98
  }
94
99
  });