@iamproperty/components 4.1.0-beta-2 → 4.1.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 (131) hide show
  1. package/assets/css/components/accordion.css.map +1 -1
  2. package/assets/css/components/actionbar-global.css +1 -1
  3. package/assets/css/components/actionbar-global.css.map +1 -1
  4. package/assets/css/components/address-lookup.css +1 -0
  5. package/assets/css/components/address-lookup.css.map +1 -0
  6. package/assets/css/components/admin-panel.css +1 -1
  7. package/assets/css/components/admin-panel.css.map +1 -1
  8. package/assets/css/components/dialog.css +1 -1
  9. package/assets/css/components/dialog.css.map +1 -1
  10. package/assets/css/components/fileupload.css +1 -1
  11. package/assets/css/components/fileupload.css.map +1 -1
  12. package/assets/css/components/forms.css +1 -1
  13. package/assets/css/components/forms.css.map +1 -1
  14. package/assets/css/components/header.css +1 -1
  15. package/assets/css/components/header.css.map +1 -1
  16. package/assets/css/components/lists.css +1 -1
  17. package/assets/css/components/lists.css.map +1 -1
  18. package/assets/css/components/nav-global.css +1 -1
  19. package/assets/css/components/nav-global.css.map +1 -1
  20. package/assets/css/components/nav.css +1 -1
  21. package/assets/css/components/nav.css.map +1 -1
  22. package/assets/css/components/nav.old.css +1 -1
  23. package/assets/css/components/nav.old.css.map +1 -1
  24. package/assets/css/components/notification.css +1 -1
  25. package/assets/css/components/notification.css.map +1 -1
  26. package/assets/css/components/pagination.css +1 -1
  27. package/assets/css/components/pagination.css.map +1 -1
  28. package/assets/css/components/property-searchbar.css +1 -1
  29. package/assets/css/components/property-searchbar.css.map +1 -1
  30. package/assets/css/components/table.css +1 -1
  31. package/assets/css/components/table.css.map +1 -1
  32. package/assets/css/components/table.extras.css +1 -0
  33. package/assets/css/components/table.extras.css.map +1 -0
  34. package/assets/css/components/table.global.css +1 -0
  35. package/assets/css/components/table.global.css.map +1 -0
  36. package/assets/css/components/tabs.css +1 -1
  37. package/assets/css/components/tabs.css.map +1 -1
  38. package/assets/css/core.min.css +1 -1
  39. package/assets/css/core.min.css.map +1 -1
  40. package/assets/css/style.min.css +1 -1
  41. package/assets/css/style.min.css.map +1 -1
  42. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  43. package/assets/js/components/actionbar/actionbar.component.min.js +3 -3
  44. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  45. package/assets/js/components/address-lookup/address-lookup.component.js +172 -0
  46. package/assets/js/components/address-lookup/address-lookup.component.min.js +36 -0
  47. package/assets/js/components/address-lookup/address-lookup.component.min.js.map +1 -0
  48. package/assets/js/components/applied-filters/applied-filters.component.min.js +2 -2
  49. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  50. package/assets/js/components/card/card.component.min.js +1 -1
  51. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  52. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  53. package/assets/js/components/header/header.component.min.js +2 -2
  54. package/assets/js/components/nav/nav.component.min.js +2 -2
  55. package/assets/js/components/notification/notification.component.min.js +4 -4
  56. package/assets/js/components/notification/notification.component.min.js.map +1 -1
  57. package/assets/js/components/pagination/pagination.component.js +152 -7
  58. package/assets/js/components/pagination/pagination.component.min.js +38 -12
  59. package/assets/js/components/pagination/pagination.component.min.js.map +1 -1
  60. package/assets/js/components/table/table.component.js +95 -69
  61. package/assets/js/components/table/table.component.min.js +9 -13
  62. package/assets/js/components/table/table.component.min.js.map +1 -1
  63. package/assets/js/components/tabs/tabs.component.js +3 -1
  64. package/assets/js/components/tabs/tabs.component.min.js +7 -5
  65. package/assets/js/components/tabs/tabs.component.min.js.map +1 -1
  66. package/assets/js/dynamic.min.js +5 -5
  67. package/assets/js/dynamic.min.js.map +1 -1
  68. package/assets/js/modules/applied-filters.js +3 -4
  69. package/assets/js/modules/dialogs.js +15 -3
  70. package/assets/js/modules/dynamicEvents.js +116 -0
  71. package/assets/js/modules/helpers.js +9 -0
  72. package/assets/js/modules/pagination.js +7 -10
  73. package/assets/js/modules/table.js +51 -52
  74. package/assets/js/modules/tabs.js +10 -1
  75. package/assets/js/scripts.bundle.js +53 -25
  76. package/assets/js/scripts.bundle.js.map +1 -1
  77. package/assets/js/scripts.bundle.min.js +2 -2
  78. package/assets/js/scripts.bundle.min.js.map +1 -1
  79. package/assets/js/tests/table.spec.js +0 -57
  80. package/assets/sass/_components.scss +2 -0
  81. package/assets/sass/_corefiles.scss +6 -2
  82. package/assets/sass/_functions/variables.scss +5 -1
  83. package/assets/sass/components/actionbar-global.scss +11 -2
  84. package/assets/sass/components/address-lookup.scss +22 -0
  85. package/assets/sass/components/admin-panel.scss +4 -0
  86. package/assets/sass/components/dialog.scss +22 -13
  87. package/assets/sass/components/fileupload.scss +2 -0
  88. package/assets/sass/components/forms.scss +231 -71
  89. package/assets/sass/components/lists.scss +119 -1
  90. package/assets/sass/components/nav-global.scss +1 -0
  91. package/assets/sass/components/notification.scss +6 -1
  92. package/assets/sass/components/pagination.scss +192 -100
  93. package/assets/sass/components/table.extras.scss +650 -0
  94. package/assets/sass/components/table.global.scss +103 -0
  95. package/assets/sass/components/table.scss +41 -565
  96. package/assets/sass/components/tabs.scss +95 -32
  97. package/assets/sass/foundations/brand.scss +4 -0
  98. package/assets/sass/foundations/buttons.scss +14 -12
  99. package/assets/sass/foundations/links.scss +2 -1
  100. package/assets/sass/helpers/dynamic.scss +3 -0
  101. package/assets/sass/templates/form.scss +84 -0
  102. package/assets/svg/logo.svg +7 -0
  103. package/assets/ts/components/address-lookup/address-lookup.component.ts +215 -0
  104. package/assets/ts/components/pagination/README.md +11 -0
  105. package/assets/ts/components/pagination/pagination.component.ts +182 -8
  106. package/assets/ts/components/table/README.md +4 -2
  107. package/assets/ts/components/table/table.component.ts +134 -83
  108. package/assets/ts/components/tabs/README.md +6 -5
  109. package/assets/ts/components/tabs/tabs.component.ts +3 -1
  110. package/assets/ts/modules/applied-filters.ts +5 -8
  111. package/assets/ts/modules/dialogs.ts +19 -4
  112. package/assets/ts/modules/dynamicEvents.ts +145 -0
  113. package/assets/ts/modules/helpers.ts +16 -1
  114. package/assets/ts/modules/pagination.ts +7 -10
  115. package/assets/ts/modules/table.ts +70 -57
  116. package/assets/ts/modules/tabs.ts +21 -10
  117. package/assets/ts/tests/table.spec.ts +1 -61
  118. package/dist/components.es.js +1123 -1008
  119. package/dist/components.umd.js +165 -80
  120. package/dist/style.css +1 -1
  121. package/package.json +3 -2
  122. package/src/components/AddressLookup/AddressLookup.vue +27 -0
  123. package/src/components/Pagination/README.md +11 -0
  124. package/src/components/Table/README.md +4 -3
  125. package/src/components/Table/Table.vue +4 -0
  126. package/src/components/Tabs/README.md +10 -7
  127. package/src/components/Tabs/Tab.vue +7 -8
  128. package/src/components/Tabs/Tabs.vue +0 -1
  129. package/src/index.js +1 -0
  130. package/assets/js/tests/pagination.spec.js +0 -15
  131. package/assets/ts/tests/pagination.spec.ts +0 -21
@@ -1,27 +1,70 @@
1
1
  @use "../_func" as *;
2
2
 
3
3
  .tabs:not(.admin-panel) {
4
-
5
4
  position: relative;
5
+
6
+ .tabs__links__wrapper {
7
+ position: relative;
8
+ margin: 0 auto 2rem;
9
+
10
+ &:before {
11
+ content: '';
12
+ display: block;
13
+ position: absolute;
14
+ left: auto;
15
+ right: -2.5rem;
16
+ top: 0;
17
+ bottom: 1px;
18
+ width: 2.5rem;
19
+ background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,1));
20
+ z-index: 1000;
21
+ pointer-events: none;
22
+ }
23
+
24
+ &:after {
25
+ content: "";
26
+ left: 50%;
27
+ position: relative;
28
+ height: 1px;
29
+ width: 100vw;
30
+ background-color: var(--colour-border);
31
+ transform: translate(-50%,0);
32
+ display: block;
33
+ clear: both;
34
+ }
35
+
36
+ @media screen and (prefers-color-scheme: dark) {
37
+ &:before {
38
+ background: linear-gradient(90deg, rgba(38,38,38,0), rgba(38,38,38,1));
39
+ }
40
+ }
41
+ }
42
+ }
43
+
44
+ .tabs.admin-panel {
45
+ .tabs__links__wrapper {
46
+ &:after {
47
+ display: none;
48
+ }
49
+ }
6
50
  }
7
51
 
8
52
  .tabs__links {
9
- margin-bottom: 1.5rem;
10
- overflow: visible;
11
- padding-bottom: 2px;
53
+ padding-bottom: 3px;
12
54
  position: relative;
13
- display: block;
55
+ display: flex;
56
+ flex-wrap: nowrap;
57
+ width: auto;
58
+ margin: 0 -1.5rem;
59
+ overflow-y: hidden;
60
+ overflow-x: auto;
61
+
62
+ &::-webkit-scrollbar {
63
+ display: none;
64
+ }
14
65
 
15
- &:after {
16
- content: "";
17
- left: 50%;
18
- position: relative;
19
- height: 3px;
20
- width: 100vw;
21
- border-bottom: 1px solid var(--colour-border);
22
- transform: translate(-50%,0);
23
- display: block;
24
- clear: both;
66
+ .link {
67
+ white-space: nowrap;
25
68
  }
26
69
 
27
70
  .link:not(.text-decoration-none):not(.btn) {
@@ -30,10 +73,15 @@
30
73
  font-family: var(--font-heading);
31
74
  font-size: rem(18);
32
75
  cursor: pointer;
33
- margin: 0.5rem 1.5rem 0 0;
34
- padding: 0;
76
+ margin: 0;
77
+ padding: 1.5rem 1.5rem 0.5rem 1.5rem;
35
78
  display: inline-block;
36
79
 
80
+ &.disabled {
81
+ cursor: not-allowed;
82
+ opacity: 0.4;
83
+ }
84
+
37
85
  &:last-child {
38
86
  margin-inline-end: 0;
39
87
  }
@@ -41,26 +89,29 @@
41
89
  &:after {
42
90
  position: absolute;
43
91
  content: "";
44
- top: 100%;
45
- left: 50%;
46
- height: 2px;
47
- transform: translate(-50%,0);
92
+ bottom: 0;
93
+ left: 50%; // half way across
94
+ height: 3px;
95
+ width: 100%;
96
+ transform: translate(-50%, 0) scale(0, 0); // translate pulls this left so it's centered
48
97
  background: var(--colour-info);
49
- transition: width 0.5s;
50
- width: 0%;
98
+ transition: transform 0.4s;
51
99
  }
52
100
 
53
- &:hover:after,
54
- &:focus:after,
55
- &.focus:after {
56
-
57
- width: 60%;
101
+ &:not(.disabled) {
102
+ &:hover:after,
103
+ &:focus:after,
104
+ &.focus:after {
105
+ transform: translate(-50%, 0) scale(0.6, 1);
106
+ }
58
107
  }
59
108
 
60
- &[aria-pressed="true"]:after,
61
- &:active:after,
62
- &.active:after {
63
- width: 100%;
109
+ &:not(.disabled) {
110
+ &[aria-pressed="true"]:after,
111
+ &:active:after,
112
+ &.active:after {
113
+ transform: translate(-50%, 0) scale(1, 1);
114
+ }
64
115
  }
65
116
 
66
117
  &[aria-pressed="true"],
@@ -70,3 +121,15 @@
70
121
  }
71
122
  }
72
123
  }
124
+
125
+ @media (min-width: 576px) {
126
+ .tabs__links {
127
+ .link:not(.text-decoration-none):not(.btn) {
128
+ padding: 2rem 2rem 0.5rem 2rem;
129
+ }
130
+ }
131
+
132
+ .tabs__links__wrapper {
133
+ margin: 0 auto 2.5rem;
134
+ }
135
+ }
@@ -25,6 +25,10 @@
25
25
  --svg-width: #{em(475,89)};
26
26
  }
27
27
 
28
+ &--crm {
29
+ --svg-width: #{em(250,89)};
30
+ }
31
+
28
32
  display: inline-flex;
29
33
  flex-direction: row;
30
34
  flex-wrap: nowrap;
@@ -314,22 +314,24 @@ a:is(:hover, :focus, .hover, :active, .active):not([disabled]) .btn-secondary,
314
314
  }
315
315
 
316
316
  select {
317
+ all: unset!important;
317
318
 
318
- padding: calc(rem(12) - 2px) calc(rem(40) - 2px);
319
- margin: calc(rem(-12)) calc(rem(-40));
319
+ padding: calc(rem(12) - 2px) calc(rem(40) - 2px)!important;
320
+ margin: calc(rem(-12)) calc(rem(-40))!important;
320
321
 
321
- padding-right: rem(56);
322
- margin-right: rem(-56);
323
- border-radius: rem(24);
324
- appearance: none;
325
- background: none;
322
+ padding-right: rem(56)!important;
323
+ margin-right: rem(-56)!important;
324
+ border-radius: rem(24)!important;
325
+ appearance: none!important;
326
+ background: none!important;
326
327
  border: none!important;
327
- color: inherit;
328
+ color: currentColor!important;
328
329
  display: block;
329
- min-width: calc(100% + rem(40) + rem(56));
330
+ max-width: 100%!important;
330
331
  outline: none;
331
332
  font-weight: bold;
332
-
333
+ font-size: 1.125rem!important;
334
+ line-height: 1.5rem!important;
333
335
  option {
334
336
  padding: 0;
335
337
  text-align: left;
@@ -340,8 +342,8 @@ a:is(:hover, :focus, .hover, :active, .active):not([disabled]) .btn-secondary,
340
342
 
341
343
  &:after {
342
344
  position: absolute;
343
- top: rem(8);
344
- right: rem(40);
345
+ top: rem(10);
346
+ right: rem(32);
345
347
 
346
348
  content: "";
347
349
  height: rem(24);
@@ -106,6 +106,7 @@ a:where(:not(.btn):not(.brand):not(:has(.card)):not(:has(iam-card))),
106
106
  padding:0;
107
107
  display: flex;
108
108
 
109
+
109
110
  &:not([class*="col"]){
110
111
  margin: 0 0 rem(24) 0;
111
112
  }
@@ -123,7 +124,7 @@ a:where(:not(.btn):not(.brand):not(:has(.card)):not(:has(iam-card))),
123
124
  }
124
125
  }
125
126
 
126
- .col > :is(a,button):has(.card, iam-card):first-child:last-child{
127
+ :is(.col,[class*="col-"]) > :is(a,button):has(.card, iam-card):first-child:last-child{
127
128
  min-height: calc(100% - rem(24));
128
129
  }
129
130
  // #endregion
@@ -0,0 +1,3 @@
1
+ .js-hide {
2
+ display: none!important;
3
+ }
@@ -0,0 +1,84 @@
1
+ @use "../_func" as *;
2
+
3
+ body:has(.template--form) {
4
+
5
+ @include light-mode(){
6
+
7
+ background-color: #e9f9fd;
8
+ }
9
+ }
10
+
11
+ .template--form {
12
+
13
+ --input-max-width: #{rem(450)};
14
+ --select-max-width: #{rem(500)};
15
+
16
+ @supports selector(:has(*)){
17
+
18
+ label:has(> :is(.suffix,.prefix)) {
19
+
20
+ --input-max-width: #{rem(500)};
21
+ max-width: var(--input-max-width);
22
+ }
23
+ div:has(> :is(.suffix,.prefix)) {
24
+
25
+ --input-max-width: #{rem(500)};
26
+ max-width: var(--input-max-width);
27
+ }
28
+ }
29
+
30
+
31
+
32
+ // Make H2's look like H3's
33
+ :is(h2, .h2) {
34
+ font-size: rem(map-get($heading-sizes,"h3_fs"));
35
+ line-height: rem(map-get($heading-sizes,"h3_lh"));
36
+ padding-bottom: rem(map-get($heading-sizes,"h3_pb"));
37
+ max-width: var(--content-max-width);
38
+
39
+ @include media-breakpoint-up(sm) {
40
+
41
+ font-size: rem(map-get($heading-sizes,"h3_fs_sm"));
42
+ line-height: rem(map-get($heading-sizes,"h3_lh_sm"));
43
+ padding-bottom: rem(map-get($heading-sizes,"h3_pb_sm"));
44
+ }
45
+ }
46
+
47
+ @include light-mode(){
48
+
49
+ background-color: #e9f9fd;
50
+ }
51
+
52
+ .form-panel {
53
+
54
+ display: block;
55
+ padding: 2rem;
56
+ box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.11);
57
+ background-color: var(--colour-canvas-2);
58
+ margin-bottom: 1.5rem;
59
+ outline: var(--contrast-outline-width, 0px) solid var(--colour-primary);
60
+
61
+ @include media-breakpoint-up(sm) {
62
+
63
+ max-width: calc(100% - 5rem); // Guess
64
+ margin-inline: auto;
65
+ }
66
+
67
+ @include media-breakpoint-up(md) {
68
+
69
+ max-width: rem(924); // Guess
70
+ border-radius: 0.5rem;
71
+ padding-inline: rem(94);
72
+ padding-block: rem(40);
73
+ margin-bottom: rem(32);
74
+ }
75
+
76
+ > *:last-child {
77
+ margin-bottom: 0!important;
78
+ }
79
+ }
80
+
81
+ [data-loading] {
82
+ opacity: 0.5;
83
+ }
84
+ }
@@ -46,4 +46,11 @@
46
46
  <use xlink:href="#logo-divider"/>
47
47
  <path d="M662.042411,79.21875 L655.513393,79.21875 C654.787946,79.21875 654.352679,78.7834821 654.0625,78.0580357 L646.082589,53.2477679 C645.792411,52.2321429 646.227679,51.6517857 647.243304,51.6517857 L652.611607,51.6517857 C653.337054,51.6517857 653.917411,52.0870536 654.0625,52.8125 L658.995536,70.5133929 L663.783482,52.8125 C664.073661,52.0870536 664.508929,51.6517857 665.234375,51.6517857 L671.183036,51.6517857 C671.908482,51.6517857 672.488839,52.0870536 672.633929,52.8125 L677.421875,70.5133929 L682.354911,52.8125 C682.645089,52.0870536 683.080357,51.6517857 683.805804,51.6517857 L688.59375,51.6517857 C689.464286,51.6517857 690.044643,52.3772321 689.754464,53.2477679 L681.774554,78.0580357 C681.484375,78.9285714 680.904018,79.21875 680.178571,79.21875 L673.939732,79.21875 C673.069196,79.21875 672.488839,78.7834821 672.34375,78.0580357 L667.991071,61.5178571 L663.638393,78.0580357 C663.348214,78.7834821 662.767857,79.21875 662.042411,79.21875 M644.051339,64.7098214 L644.051339,66.015625 C644.051339,66.8861607 643.616071,67.3214286 642.745536,67.3214286 L623.013393,67.3214286 C623.448661,71.2388393 626.495536,73.8504464 630.267857,73.8504464 C632.879464,73.8504464 635.055804,72.8348214 636.796875,70.9486607 C637.377232,70.3683036 637.8125,70.2232143 638.247768,70.6584821 L641.875,73.125 C642.455357,73.5602679 642.600446,74.140625 642.165179,74.7209821 C639.408482,78.3482143 635.345982,80.0892857 630.122768,80.0892857 C621.5625,80.0892857 615.46875,73.8504464 615.46875,65.5803571 C615.46875,57.3102679 621.5625,50.78125 630.122768,50.78125 C638.392857,50.9263393 644.051339,57.0200893 644.051339,64.7098214 M629.977679,56.875 C626.640625,56.875 623.883929,58.4709821 623.158482,60.9375 L636.796875,60.9375 C636.071429,58.3258929 633.314732,56.875 629.977679,56.875 M602.265625,43.2366071 C602.265625,40.7700893 604.296875,38.59375 606.908482,38.59375 C609.375,38.59375 611.551339,40.7700893 611.551339,43.2366071 C611.551339,45.703125 609.520089,47.8794643 606.908482,47.8794643 C604.296875,47.8794643 602.265625,45.8482143 602.265625,43.2366071 M604.441964,79.21875 C603.716518,79.21875 603.28125,78.6383929 603.28125,78.0580357 L603.28125,52.6674107 C603.28125,51.9419643 603.861607,51.5066964 604.441964,51.5066964 L609.375,51.5066964 C610.100446,51.5066964 610.535714,52.0870536 610.535714,52.6674107 L610.535714,77.9129464 C610.535714,78.4933036 609.955357,79.0736607 609.375,79.0736607 L604.441964,79.21875 L604.441964,79.21875 Z M581.662946,79.3638393 C580.9375,79.3638393 580.357143,78.9285714 580.066964,78.203125 L571.361607,53.3928571 C570.926339,52.5223214 571.506696,51.6517857 572.522321,51.6517857 L578.035714,51.6517857 C578.761161,51.6517857 579.196429,52.0870536 579.486607,52.8125 L585.725446,71.8191964 L591.529018,52.8125 C591.674107,52.0870536 592.254464,51.6517857 592.979911,51.6517857 L598.203125,51.6517857 C599.073661,51.6517857 599.654018,52.5223214 599.363839,53.3928571 L590.513393,78.0580357 C590.223214,78.9285714 589.787946,79.21875 589.0625,79.21875 L581.662946,79.3638393 L581.662946,79.3638393 L581.662946,79.3638393 Z M560.189732,64.7098214 C560.189732,60.2120536 557.723214,57.6004464 553.515625,57.6004464 C549.308036,57.6004464 546.551339,60.5022321 546.551339,64.7098214 L546.551339,78.0580357 C546.551339,78.6383929 545.970982,79.21875 545.390625,79.21875 L540.3125,79.21875 C539.732143,79.21875 539.151786,78.6383929 539.151786,78.0580357 L539.151786,52.6674107 C539.151786,51.9419643 539.732143,51.5066964 540.3125,51.5066964 L545.390625,51.5066964 C545.970982,51.5066964 546.551339,52.0870536 546.551339,52.6674107 L546.551339,54.84375 C548.4375,52.0870536 551.484375,50.78125 555.691964,50.78125 C562.946429,50.78125 567.589286,55.7142857 567.589286,62.8236607 L567.589286,78.203125 C567.589286,78.7834821 567.008929,79.3638393 566.428571,79.3638393 L561.495536,79.3638393 C560.915179,79.3638393 560.334821,78.9285714 560.334821,78.203125 L560.334821,64.7098214 L560.189732,64.7098214 L560.189732,64.7098214 Z M535.089286,64.7098214 L535.089286,66.015625 C535.089286,66.8861607 534.654018,67.3214286 533.783482,67.3214286 L514.051339,67.3214286 C514.486607,71.2388393 517.533482,73.8504464 521.305804,73.8504464 C523.917411,73.8504464 526.09375,72.8348214 527.834821,70.9486607 C528.415179,70.3683036 528.850446,70.2232143 529.285714,70.6584821 L532.912946,73.125 C533.493304,73.5602679 533.638393,74.140625 533.203125,74.7209821 C530.446429,78.3482143 526.383929,80.0892857 521.160714,80.0892857 C512.600446,80.0892857 506.506696,73.8504464 506.506696,65.5803571 C506.506696,57.3102679 512.600446,50.78125 521.160714,50.78125 C529.285714,50.9263393 535.089286,57.0200893 535.089286,64.7098214 M521.015625,56.875 C517.678571,56.875 514.921875,59.0513393 514.196429,62.6785714 L527.834821,62.6785714 C527.109375,58.90625 524.352679,56.875 521.015625,56.875 M489.241071,50.78125 C496.785714,50.78125 502.879464,56.7299107 502.879464,65.4352679 C502.879464,74.140625 496.785714,80.0892857 489.095982,80.0892857 C485.613839,80.0892857 482.131696,78.6383929 480.535714,76.171875 L480.535714,90.5357143 C480.535714,91.1160714 479.955357,91.6964286 479.375,91.6964286 L474.296875,91.6964286 C473.716518,91.6964286 473.136161,91.1160714 473.136161,90.5357143 L473.136161,52.8125 C473.136161,52.0870536 473.716518,51.6517857 474.296875,51.6517857 L479.229911,51.6517857 C479.810268,51.6517857 480.390625,52.2321429 480.390625,52.8125 L480.390625,54.9888393 C482.131696,52.3772321 485.323661,50.78125 489.241071,50.78125 M493.303571,70.9486607 C496.205357,67.9017857 496.205357,62.96875 493.303571,59.921875 C490.401786,56.875 485.613839,56.875 482.712054,59.921875 C479.810268,62.96875 479.810268,67.9017857 482.712054,70.9486607 C485.613839,73.9955357 490.401786,73.9955357 493.303571,70.9486607 M453.694196,50.78125 C461.964286,50.78125 468.638393,57.1651786 468.638393,65.4352679 C468.638393,73.7053571 462.109375,80.0892857 453.694196,80.0892857 C445.279018,80.0892857 438.75,73.7053571 438.75,65.4352679 C438.75,57.1651786 445.279018,50.78125 453.694196,50.78125 M458.917411,70.9486607 C461.819196,67.9017857 461.819196,62.96875 458.917411,59.921875 C456.015625,56.875 451.227679,56.875 448.325893,59.921875 C445.424107,62.96875 445.424107,67.9017857 448.325893,70.9486607 C451.227679,73.8504464 456.015625,73.8504464 458.917411,70.9486607"/>
48
48
  </symbol>
49
+
50
+ <symbol id="logo-crm" viewBox="0 0 508 130" preserveAspectRatio="xMinYMid meet">
51
+ <use xlink:href="#logo-property"/>
52
+ <path d="m423.85,80.14c-8.36-.15-15.01-7.04-14.86-15.4.15-8.36,7.04-15.01,15.4-14.86,4.97.09,9.59,2.62,12.34,6.76.53.77.36,1.48-.53,2.14l-2.91,2.26c-.61.61-1.61.61-2.22,0-.11-.11-.2-.23-.27-.36-2.08-2.55-3.86-3.68-6.82-3.68-4.22,0-7.65,3.41-7.66,7.63,0,.13,0,.25,0,.38-.2,4.22,3.06,7.8,7.27,8,.13,0,.25,0,.38,0,2.97,0,4.75-1.13,6.82-3.68.42-.76,1.37-1.04,2.13-.62.13.07.25.16.36.27l2.91,2.26c.89.65,1.07,1.37.53,2.14-2.82,4.35-7.7,6.91-12.87,6.77Z"/>
53
+ <path d="m455.95,50.35c.89,0,1.37.48,1.37,1.48v5.1c.04.78-.57,1.45-1.35,1.48-.02,0-.05,0-.07,0h-1.43c-4.04,0-5.99,2.26-5.99,6.88v12.87c-.04.65-.59,1.16-1.25,1.13h-5.22c-.66,0-1.19-.53-1.19-1.19v-26.17c-.02-.66.5-1.22,1.16-1.25,0,0,.02,0,.03,0h4.92c.63.02,1.14.5,1.19,1.13v2.73c1.3-2.66,4.04-4.31,7-4.22h.83Z"/>
54
+ <path d="m468.47,78.18c-.04.65-.59,1.16-1.25,1.13h-5.22c-.66,0-1.19-.53-1.19-1.19v-26.17c-.02-.66.5-1.22,1.16-1.25,0,0,.02,0,.03,0h5.22c.64.01,1.17.49,1.25,1.13v2.26c2.13-2.74,5.43-4.31,8.9-4.22,3.75-.18,7.29,1.77,9.14,5.04,2.32-3.28,6.13-5.18,10.15-5.04,7.95,0,12.22,5.34,12.22,12.1v16.21c-.04.65-.59,1.16-1.25,1.13h-5.16c-.65.03-1.21-.47-1.25-1.13v-14.36c0-4.04-2.14-6.88-6.11-6.88s-6.4,2.85-6.4,6.88v14.36c-.04.65-.59,1.16-1.25,1.13h-5.16c-.65.03-1.21-.47-1.25-1.13v-14.36c0-4.04-2.14-6.88-6.11-6.88s-6.47,2.91-6.47,6.88v14.36h0Z"/>
55
+ </symbol>
49
56
  </svg>
@@ -0,0 +1,215 @@
1
+ // @ts-nocheck
2
+ import Cookies from 'js-cookie';
3
+
4
+ // Data layer Web component created
5
+ window.dataLayer = window.dataLayer || [];
6
+ window.dataLayer.push({
7
+ "event": "customElementRegistered",
8
+ "element": "Address Lookup"
9
+ });
10
+
11
+
12
+ class iamAddressLookup extends HTMLElement {
13
+
14
+ constructor(){
15
+ super();
16
+ this.attachShadow({ mode: 'open'});
17
+
18
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets'
19
+ const coreCSS = document.body.hasAttribute('data-core-css') ? document.body.getAttribute('data-core-css') : `${assetLocation}/css/core.min.css`;
20
+ const loadCSS = `@import "${assetLocation}/css/components/address-lookup.css";`;
21
+
22
+ const template = document.createElement('template');
23
+ template.innerHTML = `
24
+ <style>
25
+ @import "${coreCSS}";
26
+ ${loadCSS}
27
+
28
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
29
+ </style>
30
+ <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous" />
31
+ <div class="wrapper">
32
+
33
+ <div class="postcode-lookup">
34
+ <div>
35
+ <label class="mb-2">Search property address <span class="optional">(Optional)</span>
36
+ <span>
37
+ <input type="text" name="postcode" list="address-lookup__addressess" autoComplete="new-password" aria-autocomplete="none" placeholder="Postcode" />
38
+ <span class="suffix fa-regular fa-search"></span>
39
+ </span>
40
+ <span class="invalid-feedback">Required Adddress fields missing</span>
41
+ </label>
42
+
43
+ </div>
44
+ <button class="btn btn-tertiary switch-to-manual-btn">Or enter address manually</button>
45
+ </div>
46
+ <datalist id="address-lookup__addressess"></datalist>
47
+
48
+ <div class="manual-address pb-2 js-hide">
49
+ <slot></slot>
50
+ <button class="btn btn-tertiary switch-to-lookup-btn">Use postcode lookup</button>
51
+ </div>
52
+ </div>
53
+ `;
54
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
55
+ }
56
+
57
+ async connectedCallback() {
58
+
59
+ const wrapper = this.shadowRoot.querySelector('.wrapper');
60
+ const lookup = this.shadowRoot.querySelector('label');
61
+ const lookupWrapper = this.shadowRoot.querySelector('.postcode-lookup');
62
+ const manualWrapper = this.shadowRoot.querySelector('.manual-address');
63
+ const list = this.shadowRoot.querySelector('datalist');
64
+ const switchManualBtn = this.shadowRoot.querySelector('.switch-to-manual-btn');
65
+ const switchLookupBtn = this.shadowRoot.querySelector('.switch-to-lookup-btn');
66
+
67
+ if(this.hasAttribute('data-use')){
68
+
69
+ let useLabel = this.hasAttribute('data-use-label') ? this.getAttribute('data-use-label') : 'Use saved address';
70
+ let useCheckbox =`<div><input type="checkbox" name="use" id="use" value="yes"><label for="use">${useLabel}</label></div>`;
71
+
72
+ lookupWrapper.insertAdjacentHTML('afterbegin',useCheckbox);
73
+
74
+ this.shadowRoot.addEventListener('change', (event) => {
75
+
76
+ if (event && event.target instanceof HTMLElement && event.target.closest('[name="use"]')){
77
+
78
+ let checkbox = event.target.closest('[name="use"]');
79
+
80
+ if(checkbox.checked){
81
+
82
+ lookupWrapper.classList.add('js-hide');
83
+ manualWrapper.classList.remove('js-hide');
84
+
85
+ let values = JSON.parse(this.getAttribute('data-use'));
86
+
87
+ Object.keys(values).forEach((key, index) => {
88
+
89
+ let value = values[key];
90
+ if(this.querySelector(`[data-name="${key}"]`))
91
+ this.querySelector(`[data-name="${key}"]`).value = value;
92
+ else if(this.querySelector(`[name="${key}"]`))
93
+ this.querySelector(`[name="${key}"]`).value = value;
94
+ });
95
+ }
96
+ }
97
+ });
98
+ }
99
+
100
+
101
+ switchManualBtn.addEventListener('click', (event) => {
102
+
103
+ lookupWrapper.classList.add('js-hide');
104
+ manualWrapper.classList.remove('js-hide');
105
+
106
+ Array.from(this.querySelectorAll('[data-required]')).forEach((input, index) => {
107
+ input.setAttribute('required','true');
108
+ });
109
+ });
110
+ switchLookupBtn.addEventListener('click', (event) => {
111
+
112
+ lookupWrapper.classList.remove('js-hide');
113
+ manualWrapper.classList.add('js-hide');
114
+ });
115
+
116
+
117
+ lookup.addEventListener('keyup', (event) => {
118
+
119
+ if(lookup.value.length >= 3)
120
+ search(lookup.value);
121
+ });
122
+
123
+ lookup.addEventListener('change', (event) => {
124
+
125
+ if(lookup.value.length >= 3){
126
+
127
+ search(lookup.value);
128
+
129
+ if(list.querySelector(`[value="${lookup.value}"]`)){
130
+
131
+
132
+ lookupWrapper.classList.add('js-hide');
133
+ manualWrapper.classList.remove('js-hide');
134
+
135
+ let values = JSON.parse(list.querySelector(`[value="${lookup.value}"]`).getAttribute('data-values'));
136
+
137
+ Object.keys(values).forEach((key, index) => {
138
+
139
+ let value = values[key];
140
+ if(this.querySelector(`[data-name="${key}"]`))
141
+ this.querySelector(`[data-name="${key}"]`).value = value;
142
+ else if(this.querySelector(`[name="${key}"]`))
143
+ this.querySelector(`[name="${key}"]`).value = value;
144
+ });
145
+
146
+ // Focus on first input
147
+ this.querySelector('[data-name="address_1"]').focus();
148
+
149
+ Array.from(this.querySelectorAll('[data-required]')).forEach((input, index) => {
150
+ input.setAttribute('required','true');
151
+ });
152
+ lookup.removeAttribute('required');
153
+
154
+ if(this.shadowRoot.querySelector('[name="use"]'))
155
+ this.shadowRoot.querySelector('[name="use"]').checked = false;
156
+ }
157
+ }
158
+
159
+ });
160
+
161
+
162
+
163
+ const search = async (postcode) => {
164
+
165
+ let ajaxURL = this.getAttribute('data-url');
166
+ ajaxURL += `${encodeURI(postcode)}`;
167
+
168
+ // Setup controller vars if not already set
169
+ if(!window.controller)
170
+ window.controller = [];
171
+
172
+ // Abort if controller already present for this url
173
+ if(window.controller[ajaxURL])
174
+ window.controller[ajaxURL].abort();
175
+
176
+ // Create a new controller so it can be aborted if new fetch made
177
+ window.controller[ajaxURL] = new AbortController();
178
+ const { signal } = controller[ajaxURL];
179
+
180
+ try {
181
+ await fetch(ajaxURL, {
182
+ signal: signal,
183
+ method: 'get',
184
+ credentials: 'same-origin',
185
+ headers: new Headers({
186
+ 'Content-Type': 'application/json',
187
+ Accept: 'application/json',
188
+ 'X-Requested-With': 'XMLHttpRequest',
189
+ 'X-XSRF-TOKEN': Cookies.get('XSRF-TOKEN')
190
+ })
191
+ })
192
+ .then((response) => response.json()).then((response) => {
193
+
194
+ // populate datalist
195
+ let listString = '';
196
+ response.forEach((address, index) => {
197
+
198
+
199
+ let values = JSON.stringify(address.value);
200
+ listString += `<option value="${address['label']}, ${postcode}" data-values='${values}'></option>`;
201
+ });
202
+ list.innerHTML = listString;
203
+
204
+ return response;
205
+ });
206
+ } catch (error) {
207
+ console.log(error);
208
+ }
209
+
210
+ }
211
+
212
+ }
213
+ }
214
+
215
+ export default iamAddressLookup;
@@ -24,3 +24,14 @@ import('../node_modules/@iamproperty/components/assets/js/components/pagination/
24
24
  | data-total | int | 0 | The total amount is needed to work out how many pagination buttons are needed |
25
25
  | data-page | int | 1 | Override the current page value |
26
26
  | data-show | int | 15 | Update how many items can be shown per page |
27
+ | data-page-minimal | flag | - | Will display the minimal variant even on mobile |
28
+ | data-page-jump | flag | - | Adds the page jump dropdown on all viewports |
29
+ | data-per-page | flag | - | Adds the per page dropdown on tablet and desktop viewports (is hidden on tablet if not enough room availble) |
30
+ | data-item-count | flag | - | Will add the total count on tablet and desktop viewports |
31
+
32
+ **Dispatched events**
33
+
34
+ | Event | Dispatched when | Details passed|
35
+ | ------ | ------------- | ----------- |
36
+ | update-show | When a user clicks mobile 'Load more' button | { show: $showAmont } |
37
+ | update-page | When a user changes the page jump select or clicks on the 'Prev' and 'Next' buttons | { page: $pageNumber } |