@iamproperty/components 5.5.1-beta-4 → 5.6.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 (83) hide show
  1. package/assets/css/components/actionbar.css +1 -1
  2. package/assets/css/components/actionbar.css.map +1 -1
  3. package/assets/css/components/actionbar.global.css +1 -1
  4. package/assets/css/components/actionbar.global.css.map +1 -1
  5. package/assets/css/components/card.css +1 -1
  6. package/assets/css/components/card.css.map +1 -1
  7. package/assets/css/components/card.global.css +1 -1
  8. package/assets/css/components/card.global.css.map +1 -1
  9. package/assets/css/components/pagination.css +1 -1
  10. package/assets/css/components/pagination.css.map +1 -1
  11. package/assets/css/core.min.css +1 -1
  12. package/assets/css/core.min.css.map +1 -1
  13. package/assets/css/style.min.css +1 -1
  14. package/assets/css/style.min.css.map +1 -1
  15. package/assets/js/components/accordion/accordion.component.min.js +1 -1
  16. package/assets/js/components/actionbar/actionbar.component.js +2 -0
  17. package/assets/js/components/actionbar/actionbar.component.min.js +7 -5
  18. package/assets/js/components/actionbar/actionbar.component.min.js.map +1 -1
  19. package/assets/js/components/address-lookup/address-lookup.component.min.js +1 -1
  20. package/assets/js/components/applied-filters/applied-filters.component.min.js +2 -2
  21. package/assets/js/components/applied-filters/applied-filters.component.min.js.map +1 -1
  22. package/assets/js/components/card/card.component.js +8 -5
  23. package/assets/js/components/card/card.component.min.js +8 -6
  24. package/assets/js/components/card/card.component.min.js.map +1 -1
  25. package/assets/js/components/carousel/carousel.component.min.js +28 -0
  26. package/assets/js/components/carousel/carousel.component.min.js.map +1 -0
  27. package/assets/js/components/collapsible-side/collapsible-side.component.min.js +1 -1
  28. package/assets/js/components/fileupload/fileupload.component.js +4 -3
  29. package/assets/js/components/fileupload/fileupload.component.min.js +5 -5
  30. package/assets/js/components/fileupload/fileupload.component.min.js.map +1 -1
  31. package/assets/js/components/filterlist/filterlist.component.min.js +1 -1
  32. package/assets/js/components/header/header.component.min.js +1 -1
  33. package/assets/js/components/inline-edit/inline-edit.component.js +2 -4
  34. package/assets/js/components/inline-edit/inline-edit.component.min.js +2 -2
  35. package/assets/js/components/inline-edit/inline-edit.component.min.js.map +1 -1
  36. package/assets/js/components/marketing/marketing.component.min.js +17 -0
  37. package/assets/js/components/marketing/marketing.component.min.js.map +1 -0
  38. package/assets/js/components/multiselect/multiselect.component.min.js +1 -1
  39. package/assets/js/components/nav/nav.component.min.js +1 -1
  40. package/assets/js/components/notification/notification.component.min.js +1 -1
  41. package/assets/js/components/pagination/pagination.component.min.js +2 -2
  42. package/assets/js/components/search/search.component.min.js +1 -1
  43. package/assets/js/components/slider/slider.component.min.js +19 -0
  44. package/assets/js/components/slider/slider.component.min.js.map +1 -0
  45. package/assets/js/components/table/table.component.js +26 -14
  46. package/assets/js/components/table/table.component.min.js +4 -4
  47. package/assets/js/components/table/table.component.min.js.map +1 -1
  48. package/assets/js/components/tabs/tabs.component.min.js +1 -1
  49. package/assets/js/dynamic.min.js +1 -1
  50. package/assets/js/modules/applied-filters.js +5 -1
  51. package/assets/js/modules/fileupload.js +9 -0
  52. package/assets/js/modules/table.js +42 -18
  53. package/assets/js/scripts.bundle.js +11 -9
  54. package/assets/js/scripts.bundle.js.map +1 -1
  55. package/assets/js/scripts.bundle.min.js +2 -2
  56. package/assets/js/scripts.bundle.min.js.map +1 -1
  57. package/assets/sass/components/actionbar.global.scss +10 -0
  58. package/assets/sass/components/actionbar.scss +21 -3
  59. package/assets/sass/components/card.global.scss +30 -1
  60. package/assets/sass/components/card.scss +80 -33
  61. package/assets/sass/components/pagination.scss +1 -1
  62. package/assets/sass/elements/badge-tag.scss +11 -4
  63. package/assets/sass/elements/forms.scss +5 -2
  64. package/assets/ts/components/actionbar/actionbar.component.ts +2 -0
  65. package/assets/ts/components/card/card.component.ts +8 -5
  66. package/assets/ts/components/fileupload/fileupload.component.ts +4 -3
  67. package/assets/ts/components/inline-edit/inline-edit.component.ts +2 -8
  68. package/assets/ts/components/table/table.component.ts +28 -21
  69. package/assets/ts/modules/applied-filters.ts +4 -1
  70. package/assets/ts/modules/fileupload.ts +15 -0
  71. package/assets/ts/modules/table.ts +50 -19
  72. package/dist/components.es.js +497 -591
  73. package/dist/components.umd.js +66 -119
  74. package/package.json +1 -1
  75. package/src/components/AddressLookup/AddressLookup.vue +1 -1
  76. package/src/components/AppliedFilters/AppliedFilters.vue +13 -7
  77. package/src/components/Card/Card.vue +2 -2
  78. package/src/components/Carousel/Carousel.vue +1 -1
  79. package/src/components/Marketing/Marketing.vue +1 -1
  80. package/src/components/Slider/Slider.vue +1 -1
  81. package/src/components/Table/Table.vue +2 -1
  82. package/src/components/Tabs/Tabs.vue +2 -2
  83. package/dist/README.md +0 -21
@@ -170,3 +170,13 @@ button[slot="selected-overflow"] {
170
170
  }
171
171
  }
172
172
  // #endregion
173
+
174
+ // Select all done with vue
175
+
176
+
177
+ iam-actionbar:has(.selectall input:checked) {
178
+ --selectall-opacity: 1;
179
+ --selectall-pe: all;
180
+ --selectall-actionbar-opactiy: 0;
181
+ --selectall-action-pe: none;
182
+ }
@@ -13,10 +13,13 @@
13
13
 
14
14
  // #region View states (Default, search, selected)
15
15
  .views,
16
- .selectall {
16
+ .selectall,
17
+ slot[name="selectall"] {
18
+ display: block;
17
19
  position: absolute!important;
18
20
  top: 50%;
19
21
  left: rem(24);
22
+ margin-left: 0;
20
23
 
21
24
  @include media-breakpoint-up(sm) {
22
25
  left: rem(32);
@@ -30,7 +33,8 @@
30
33
  }
31
34
  }
32
35
 
33
- .selectall {
36
+ .selectall,
37
+ slot[name="selectall"] {
34
38
 
35
39
  width: rem(40);
36
40
  overflow: hidden;
@@ -113,12 +117,25 @@
113
117
  }
114
118
 
115
119
  // Show selected bar
120
+ .actionbar {
121
+
122
+ opacity: var(--selectall-actionbar-opacity,1);
123
+ pointer-events: var(--selectall-actionbar-pe,all);
124
+ }
125
+
126
+ .actionbar--selected {
127
+
128
+ opacity: var(--selectall-opacity,0);
129
+ pointer-events: var(--selectall-pe,none);
130
+ }
131
+
116
132
  .selectall:has(input:checked) ~ .actionbar,
117
133
  .selectall:has(input:indeterminate) ~ .actionbar {
118
134
 
119
135
  opacity: 0;
120
136
  pointer-events: none;
121
137
  }
138
+
122
139
  .selectall:has(input:checked) ~ .actionbar--selected,
123
140
  .selectall:has(input:indeterminate) ~ .actionbar--selected {
124
141
 
@@ -140,7 +157,7 @@
140
157
  // #endregion
141
158
 
142
159
  // #region Slotted elements
143
- ::slotted(*:not([slot="overflow"])){
160
+ ::slotted(.btn){
144
161
  margin-top: 0!important;
145
162
  margin-bottom: 0!important;
146
163
  margin-left: rem(16)!important;
@@ -167,6 +184,7 @@
167
184
  color: #9D9D9D!important;
168
185
  width: 1px;
169
186
  display: none;
187
+ margin-left: 1rem !important;
170
188
 
171
189
  @include container-up(md) {
172
190
 
@@ -11,6 +11,7 @@ iam-card {
11
11
  display: block;
12
12
  }
13
13
 
14
+
14
15
  > div:has([type="checkbox"]) {
15
16
  display: contents;
16
17
 
@@ -27,6 +28,30 @@ iam-card {
27
28
  }
28
29
  }
29
30
 
31
+ &:has([type="checkbox"]:checked) {
32
+ --hover-outline-colour: var(--colour-info);
33
+ --outline-colour: var(--colour-info);
34
+ }
35
+
36
+ &:has([type="checkbox"] + label:hover) {
37
+ //pointer-events: none;
38
+
39
+ --hover-outline-colour: transparent;
40
+ --hover-icon-bg: var(--colour-warning);
41
+ --hover-icon-colour: var(--colour-primary-theme);
42
+ --card-icon-right-overide:1rem;
43
+ }
44
+
45
+ &:has([type="checkbox"]:active) {
46
+ //pointer-events: none;
47
+
48
+ --hover-outline-colour: transparent;
49
+ --hover-icon-bg: var(--colour-warning);
50
+ --hover-icon-colour: var(--colour-primary-theme);
51
+ --card-icon-right-overide:1rem;
52
+ }
53
+
54
+
30
55
  &.card--has-icon:not(.card--filter):not(.card--secondary) i {
31
56
  position: absolute;
32
57
  top: calc(50% - 0.5rem - 2px);
@@ -34,7 +59,11 @@ iam-card {
34
59
  }
35
60
 
36
61
  .badge {
37
- margin-bottom: 0.25rem!important;
62
+
63
+ i {
64
+ position: static!important;
65
+ margin-right: 0.25rem;
66
+ }
38
67
  }
39
68
  }
40
69
 
@@ -18,7 +18,7 @@
18
18
  overflow: hidden;
19
19
  z-index: 0;
20
20
  background: var(--colour-canvas-2);
21
- outline: 2px solid var(--colour-canvas-2);
21
+ outline: 2px solid var(--outline-colour,--colour-canvas-2);
22
22
  outline-offset: -2px;
23
23
 
24
24
  > *:not(.btn-compact) {
@@ -81,32 +81,25 @@
81
81
  }
82
82
 
83
83
  &:is(:hover,:focus,.hover) {
84
- --card-icon-right: 0.5rem;
85
- outline: 2px solid var(--colour, var(--colour-primary));
84
+ --hover-outline-colour-default: var(--colour, var(--colour-primary));
85
+ outline: 2px solid var(--hover-outline-colour, var(--hover-outline-colour-default));
86
86
  outline-offset: -2px;
87
87
  }
88
88
 
89
89
  // Update arrow cololur
90
- &:not([class*="colour-"]):is(:hover,:focus,.hover) {
90
+ &:not([class*="colour-"]):is(:hover,:focus,.hover,:active, .active) {
91
91
 
92
92
  &:before {
93
- background: var(--colour-primary-theme);
93
+ background: var(--hover-icon-bg, var(--colour-primary-theme));
94
94
  }
95
95
  &:after {
96
- background: #ffffff;
96
+ background: var(--hover-icon-colour, #ffffff);
97
97
  }
98
98
  }
99
99
 
100
100
  &:is(:active, .active){
101
- --card-icon-right: 0.5rem;
101
+ --card-icon-right: var(--card-icon-right-overide,0.5rem);
102
102
  outline: none;
103
-
104
- &:before {
105
- background: var(--colour-warning);
106
- }
107
- &:after {
108
- background: var(--colour-primary);
109
- }
110
103
  }
111
104
 
112
105
  &:is(:active){
@@ -115,7 +108,7 @@
115
108
 
116
109
 
117
110
 
118
- span {
111
+ span{
119
112
  display: block;
120
113
  font-weight: bold;
121
114
  padding-top: rem(24);
@@ -190,29 +183,42 @@
190
183
  font-weight: normal!important;
191
184
  font-size: rem(16)!important;
192
185
  }
186
+ ::slotted(small){
187
+ padding-top: rem(16)!important;
188
+ display: block!important;
189
+ font-weight: normal!important;
190
+ padding-bottom: 0!important;
191
+ color: var(--colour-body);
192
+ }
193
193
  ::slotted(span:not(.badge):not([class*="pt-"])){
194
194
  padding-top: rem(24)!important;
195
195
  }
196
196
  // #endregion
197
197
 
198
198
  // #region card bages
199
- .card__badges {
199
+ .card__head .card__badges {
200
+
200
201
  position: absolute;
201
- top: 0;
202
- right: 0.25rem;
203
- padding: 0 0 0.25rem 0;
202
+ top: 1rem;
203
+ text-align: left;
204
+ left: 1rem;
204
205
  z-index: 9;
205
- text-align: right;
206
- width: 1;
207
206
  }
208
- .card__head .card__badges {
207
+
208
+ .card__body .card__badges.card__badges--inline {
209
+
210
+ margin-top: -1rem;
211
+ min-height: 1rem;
212
+ }
213
+ .card__body .card__badges:not(.card__badges--inline) {
209
214
 
210
- top: auto;
211
- bottom: 0;
215
+ position: absolute;
216
+ top: 0.5rem;
212
217
  text-align: left;
213
- left: 0.25rem;
214
- right: auto;
218
+ right: 0.75rem;
219
+ z-index: 9;
215
220
  }
221
+
216
222
  // #endregion
217
223
 
218
224
  // #region border left
@@ -258,6 +264,9 @@
258
264
  .card__body {
259
265
  background: none;
260
266
  }
267
+ .card__footer {
268
+ background: none;
269
+ }
261
270
  }
262
271
 
263
272
  &.card--has-icon {
@@ -304,7 +313,7 @@
304
313
  .card:has(.card__head) {
305
314
  .card__head {
306
315
  padding-bottom: 0;
307
- padding-top: 27%;
316
+ padding-top: var(--img-height, 27%);
308
317
  position: relative;
309
318
  overflow: hidden;
310
319
  background: rgba(0,0,0,0.1);
@@ -379,15 +388,20 @@
379
388
  z-index: 99;
380
389
  }
381
390
 
382
- .card--secondary:has(.btn-compact:is(:hover, :focus, :active)) {
391
+ // For docs
392
+ .card--secondary.secondary-hover {
383
393
 
384
- pointer-events: none;
385
- outline: none;
394
+ outline: 2px solid var(--colour, var(--colour-primary));
395
+ outline-offset: -2px;
386
396
 
387
- .card__body {
388
- background: none;
389
- border-color: transparent!important;
397
+ .btn-compact {
398
+ background-color: var(--colour);
399
+ color: var(--colour-primary-theme);
400
+ border-color: rgba(0, 0, 0, 0) !important;
390
401
  }
402
+ }
403
+
404
+ .card--secondary:has(.btn-compact:is(:hover, :focus, :active)) {
391
405
 
392
406
  .btn-compact {
393
407
  pointer-events: all;
@@ -401,3 +415,36 @@
401
415
  line-height: rem(40);
402
416
  }
403
417
  // #endregion
418
+
419
+ //#region Record card
420
+
421
+ .card--record{
422
+ --img-height: 40%;
423
+
424
+ &:before,
425
+ &:after {
426
+ display: none;
427
+ }
428
+ }
429
+
430
+ slot[name="btns"] {
431
+ display: flex;
432
+ flex-direction: row;
433
+ flex-wrap: nowrap;
434
+ justify-content: flex-end;
435
+ margin-right: calc(var(--card-right-padding) * -1);
436
+
437
+ margin-bottom: calc(var(--card-bottom-padding) * -1);
438
+ padding-right: 1rem;
439
+ padding-bottom: 1rem;
440
+
441
+ pointer-events: none;
442
+ }
443
+
444
+ ::slotted([slot="btns"]){
445
+
446
+ pointer-events: all;
447
+ margin: 0!important;
448
+ }
449
+
450
+ //#endregion
@@ -35,10 +35,10 @@
35
35
  padding-inline: 1rem;
36
36
 
37
37
  .select--minimal {
38
+ --select-padding-left: rem(16);
38
39
  height: rem(52);
39
40
  line-height: rem(52);
40
41
  margin-left: rem(-16);
41
- padding-left: rem(16);
42
42
  font-weight: bold;
43
43
  }
44
44
 
@@ -5,10 +5,8 @@
5
5
  font-size: rem(16);
6
6
  line-height: rem(26);
7
7
  border: none!important;
8
- outline: 1px solid var(--colour-canvas);
9
- outline-offset: -1px;
10
- padding: 0 rem(16);
11
- border-radius: rem(16);
8
+ //outline: 1px solid var(--colour-canvas);
9
+ //outline-offset: -1px;
12
10
  margin: 0;
13
11
  display: inline-block;
14
12
  text-align: center;
@@ -28,8 +26,17 @@
28
26
  }
29
27
  }
30
28
 
29
+ .badge {
30
+
31
+ border-radius: rem(6);
32
+ padding: 0 rem(8);
33
+ }
34
+
31
35
  .tag {
32
36
 
37
+ border-radius: rem(16);
38
+ padding: 0 rem(16);
39
+
33
40
  &:after {
34
41
  content: '\2715';
35
42
  margin-left: 0.6em;
@@ -615,7 +615,7 @@ label:not(.tag):has(input[type="checkbox"]:not([disabled]):checked) {
615
615
  }
616
616
  }
617
617
 
618
- input[type="checkbox"]:checked + label,
618
+ input[type="checkbox"]:checked + label:not(:has(> iam-card)),
619
619
  label:not(.tag):has(input[type="checkbox"]:checked) {
620
620
 
621
621
  &:after {
@@ -674,6 +674,7 @@ label:not(.tag):has(input:is([type="radio"],[type="checkbox"]):checked:is(:focus
674
674
  }
675
675
 
676
676
  input:is([type="radio"],[type="checkbox"]):is(:focus,:hover,.focus) + label,
677
+ input:is([type="radio"],[type="checkbox"]) + label.hover,
677
678
  label:not(.tag):has(input:is([type="radio"],[type="checkbox"]):is(:focus,:hover,.focus)) {
678
679
 
679
680
  --tick-colour: var(--colour-muted);
@@ -684,6 +685,7 @@ label:not(.tag):has(input:is([type="radio"],[type="checkbox"]):is(:focus,:hover,
684
685
  }
685
686
  }
686
687
  input:is([type="radio"],[type="checkbox"]):is(:active,.active) + label,
688
+ input:is([type="radio"],[type="checkbox"]) + label.active,
687
689
  label:not(.tag):has(input:is([type="radio"],[type="checkbox"]):is(:active,.active)) {
688
690
 
689
691
  --tick-colour: var(--colour-light);
@@ -827,7 +829,8 @@ div:has(> select){
827
829
  border: none;
828
830
  display: inline-block;
829
831
  margin: 0;
830
- padding: 0 calc(1.25em + 0.8ch) 0 0.25em!important;
832
+ padding: 0 calc(1.25em + 0.8ch) 0 var(--select-padding-left, 0.25em)!important;
833
+
831
834
  height: auto;
832
835
  cursor: pointer;
833
836
 
@@ -56,7 +56,9 @@ class iamActionbar extends HTMLElement {
56
56
  </style>
57
57
  <link rel="stylesheet" href="https://kit.fontawesome.com/26fdbf0179.css" crossorigin="anonymous">
58
58
  <div class="actionbar__wrapper">
59
+
59
60
  <div class="actionbar">
61
+ <slot name="selectall"></slot>
60
62
  <div class="safe-area">
61
63
  <slot></slot>
62
64
  <div class="body">
@@ -14,7 +14,7 @@ class iamCard extends HTMLElement {
14
14
  super();
15
15
  this.attachShadow({ mode: 'open'});
16
16
 
17
- if(this.querySelector('[class*="fa-"]'))
17
+ if(this.querySelector('*:not(.badge):not(small):not(.btn) > [class*="fa-"]:not(.btn)'))
18
18
  this.classList.add('card--has-icon');
19
19
 
20
20
  let classList = this.classList.toString();
@@ -35,7 +35,8 @@ class iamCard extends HTMLElement {
35
35
  <div class="card ${classList}" tabindex="0" part="card">
36
36
  ${this.hasAttribute('data-image') ? `<div class="card__head"><img src="${this.getAttribute('data-image')}" alt="" loading="lazy" /><div class="card__badges"><slot name="badges"></slot></div></div>` : ''}
37
37
  <div class="card__body">
38
- ${!this.hasAttribute('data-image') ? `<div class="card__badges"><slot name="badges"></slot></div>` : ''}
38
+ ${!this.hasAttribute('data-image') && this.querySelector('[slot="badges"]') && this.querySelector('[slot="checkbox"]') ? `<div class="card__badges card__badges--inline"><slot name="badges"></slot></div>` : ''}
39
+ ${!this.hasAttribute('data-image') && this.querySelector('[slot="badges"]') ? `<div class="card__badges"><slot name="badges"></slot></div>` : ''}
39
40
  ${this.hasAttribute('data-illustration') ? `<div class="card__illustration"><img src="${this.getAttribute('data-illustration')}" alt="" loading="lazy" /></div>` : ''}
40
41
  <slot></slot>
41
42
  ${this.hasAttribute('data-total') ? `<div class="card__total">${this.getAttribute('data-total')}</div>` : ''}
@@ -44,6 +45,7 @@ class iamCard extends HTMLElement {
44
45
  <slot name="checkbox"></slot>
45
46
  <div class="card__footer">
46
47
  <slot name="footer"></slot>
48
+ <slot name="btns"></slot>
47
49
  ${this.hasAttribute('data-cta') ? `<span class="link d-inline-block pt-0 mb-0">${this.getAttribute('data-cta')}</span>` : ''}
48
50
  </div>
49
51
  </div>
@@ -60,11 +62,12 @@ class iamCard extends HTMLElement {
60
62
  this.classList.add('loaded');
61
63
 
62
64
  // Mimic clicking the parent node so the focus and target events can be on the card
63
- const parentNode = this.parentNode.closest('a, button, label')
65
+ const parentNode = this.parentNode.closest('a, button, label, router-link')
64
66
  const card = this.shadowRoot.querySelector('.card')
65
67
  const btnCompact = this.shadowRoot.querySelector('.btn-compact');
66
68
 
67
- parentNode.setAttribute('tabindex','-1');
69
+ if(parentNode)
70
+ parentNode.setAttribute('tabindex','-1');
68
71
 
69
72
 
70
73
  if(parentNode.matches('label[for]')){
@@ -190,7 +193,7 @@ class iamCard extends HTMLElement {
190
193
  case "class": {
191
194
  let classList = this.classList.toString();
192
195
 
193
- if(this.querySelector('[class*="fa-"]'))
196
+ if(this.querySelector('*:not(.badge):not(small):not(.btn) > [class*="fa-"]:not(.btn)'))
194
197
  classList += ' card--has-icon';
195
198
 
196
199
  this.shadowRoot.querySelector('.card').setAttribute('class',`card ${classList}`);
@@ -27,8 +27,8 @@ class iamFileupload extends HTMLElement {
27
27
  </style>
28
28
  <div class="file-upload">
29
29
  <span class="file-upload__title">Upload file</span>
30
- <p class="helper-text"></p>
31
- <button class="btn btn-primary"><slot name="btn"></slot> Upload document</button>
30
+ <p class="helper-text"><slot name="helper"></slot></p>
31
+ <button class="btn btn-primary"><slot name="btn"></slot> Upload ${this.hasAttribute('data-filetype') ? this.getAttribute('data-filetype') : 'file'}</button>
32
32
  <div class="drop-area"></div>
33
33
  <hr/>
34
34
  <slot></slot>
@@ -46,7 +46,8 @@ class iamFileupload extends HTMLElement {
46
46
  const input = this.querySelector('input');
47
47
  const helperText = this.shadowRoot.querySelector('.helper-text');
48
48
 
49
- helperText.innerHTML = `${this.hasAttribute('data-maxsize') ? `Max file size is ${this.getAttribute('data-maxsize')}kb. ` : '' }${ input.hasAttribute('accept') ? `Supported file types are ${input.getAttribute('accept')}` : '' }`;
49
+ if(!this.querySelector('[slot="helper"]'))
50
+ helperText.innerHTML = `${this.hasAttribute('data-maxsize') ? `Max file size is ${this.getAttribute('data-maxsize')}kb. ` : '' }${ input.hasAttribute('accept') ? `Supported file types are ${input.getAttribute('accept')}` : '' }`;
50
51
 
51
52
  fileupload(this,wrapper);
52
53
  }
@@ -58,12 +58,8 @@ class iamInlineEdit extends HTMLElement {
58
58
  // cancel
59
59
  cancelButton.addEventListener('click', (event) => {
60
60
 
61
-
62
- console.log(originalValue)
63
-
64
61
  input.value = originalValue;
65
62
 
66
-
67
63
  input.blur();
68
64
  inlineEdit.blur();
69
65
 
@@ -101,7 +97,7 @@ class iamInlineEdit extends HTMLElement {
101
97
  });
102
98
 
103
99
  // Save
104
- if(input.tagName === 'input'){
100
+ if(input.tagName === 'INPUT'){
105
101
  input.addEventListener('keydown', (event) => {
106
102
 
107
103
  switch (event.key) { // change to event.key to key to use the above variable
@@ -166,12 +162,10 @@ class iamInlineEdit extends HTMLElement {
166
162
  }
167
163
 
168
164
  //blur it should autosave
169
- inlineEdit.addEventListener('blur',(event) => {
165
+ input.addEventListener('blur',(event) => {
170
166
 
171
167
  if(input.value != originalValue){
172
168
 
173
- let feedbackText = '(Unsaved)';
174
-
175
169
  if(inlineEdit.hasAttribute('data-autosave')) {
176
170
 
177
171
  originalValue = input.value;
@@ -39,8 +39,9 @@ class iamTable extends HTMLElement {
39
39
  this.shadowRoot.appendChild(template.content.cloneNode(true));
40
40
 
41
41
  // insert extra CSS
42
- if(!document.getElementById('tableExtras'))
42
+ if(!document.getElementById('tableExtras')){
43
43
  document.head.insertAdjacentHTML('beforeend',`<style id="tableExtras">${loadExtraCSS}</style>`);
44
+ }
44
45
  }
45
46
 
46
47
  connectedCallback() {
@@ -48,17 +49,22 @@ class iamTable extends HTMLElement {
48
49
  const params = new URLSearchParams(window.location.search)
49
50
 
50
51
  // Set default attributes
51
- if(!this.hasAttribute('data-total'))
52
+ if(!this.hasAttribute('data-total')){
52
53
  this.setAttribute('data-total', this.querySelectorAll('table tbody tr').length);
54
+ }
53
55
 
54
- if(!this.hasAttribute('data-page'))
56
+ if(!this.hasAttribute('data-page')){
55
57
  this.setAttribute('data-page', (params.has('page') ? params.get('page') : 1));
58
+ }
56
59
 
57
- if(!this.hasAttribute('data-show'))
60
+ if(!this.hasAttribute('data-show')){
58
61
  this.setAttribute('data-show', (params.has('show') ? params.get('show') : 15));
59
-
60
- if(!this.hasAttribute('data-increment'))
62
+ }
63
+
64
+ if(!this.hasAttribute('data-increment')){
61
65
  this.setAttribute('data-increment', this.getAttribute('data-show'));
66
+ }
67
+
62
68
 
63
69
  // Update table__wrapper class
64
70
  let classList = this.classList.toString();
@@ -69,8 +75,9 @@ class iamTable extends HTMLElement {
69
75
  this.shadowRoot.querySelector('.table__wrapper').className += ` ${classList}`;
70
76
 
71
77
  // set actionbar class if needed
72
- if(this.querySelector('.actionbar__sticky'))
78
+ if(this.querySelector('.actionbar__sticky')){
73
79
  this.shadowRoot.querySelector('.table__wrapper').classList.add('has-actionbar');
80
+ }
74
81
 
75
82
  this.table = this.querySelector('table');
76
83
  this.savedTableBody = this.table.querySelector('tbody').cloneNode(true);
@@ -81,21 +88,21 @@ class iamTable extends HTMLElement {
81
88
  this.pagination.setAttribute('data-show', this.getAttribute('data-show'));
82
89
  this.pagination.setAttribute('data-increment', this.getAttribute('data-show'));
83
90
 
84
- if(this.hasAttribute('data-page-jump'))
91
+ if(this.hasAttribute('data-page-jump')){
85
92
  this.pagination.setAttribute('data-page-jump', 'true');
86
-
87
- if(this.hasAttribute('data-per-page'))
93
+ }
94
+ if(this.hasAttribute('data-per-page')){
88
95
  this.pagination.setAttribute('data-per-page', 'true');
89
-
90
- if(this.hasAttribute('data-item-count'))
96
+ }
97
+ if(this.hasAttribute('data-item-count')){
91
98
  this.pagination.setAttribute('data-item-count', 'true');
92
-
93
- if(this.hasAttribute('data-loading'))
99
+ }
100
+ if(this.hasAttribute('data-loading')){
94
101
  this.pagination.setAttribute('data-loading', 'true');
95
-
96
- if(this.classList.contains('table--fullwidth'))
102
+ }
103
+ if(this.classList.contains('table--fullwidth')){
97
104
  this.pagination.setAttribute('data-minimal', 'true');
98
-
105
+ }
99
106
 
100
107
  // Remove table CTA
101
108
  const isCTA = this.classList.contains('table--cta');
@@ -115,9 +122,9 @@ class iamTable extends HTMLElement {
115
122
  }
116
123
 
117
124
  // Set ajax class
118
- if(this.form.hasAttribute('data-ajax'))
125
+ if(this.form.hasAttribute('data-ajax')){
119
126
  this.table.classList.add('table--ajax');
120
-
127
+ }
121
128
  // Create a data list if a search input is present
122
129
  tableModule.createSearchDataList(this.table, this.form);
123
130
 
@@ -150,9 +157,9 @@ class iamTable extends HTMLElement {
150
157
 
151
158
  // Add in the checkboxes
152
159
 
153
- if(this.querySelector('iam-actionbar[data-selectall]')){
160
+ if(this.querySelector('iam-actionbar[data-selectall]') || document.querySelector(`iam-actionbar[data-for='${this.getAttribute('id')}']`)){
154
161
 
155
- const actionbar = this.querySelector('iam-actionbar[data-selectall]');
162
+ const actionbar = this.querySelector('iam-actionbar[data-selectall]') ? this.querySelector('iam-actionbar[data-selectall]') : document.querySelector(`iam-actionbar[data-for='${this.getAttribute('id')}']`);
156
163
 
157
164
  Array.from(this.table.querySelectorAll('thead tr')).forEach((row,index) => {
158
165
 
@@ -6,9 +6,12 @@ function createAppliedFilters(container,filters) {
6
6
 
7
7
  let shouldRemoveFilter = false;
8
8
  let inputName = input.getAttribute('name');
9
+
10
+ if(!inputName){ return false; }
9
11
 
10
- if(inputName.includes('[]'))
12
+ if(inputName.includes('[]')){
11
13
  inputName = inputName.replace('[]',`[${input.value}]`);
14
+ }
12
15
 
13
16
  let filter = filters.querySelector(`[data-name="${inputName}"]`);
14
17
 
@@ -120,6 +120,21 @@ function fileupload(fileupload: Element, wrapper: Element) {
120
120
  if(filename)
121
121
  filesWrapper.innerHTML += `<span class="file">${filename} <button data-file="${filename}">Remove</button></span>`;
122
122
  }
123
+
124
+
125
+ // Change the filename
126
+ wrapper.addEventListener('click', (event) => {
127
+
128
+ if (event && event.target instanceof HTMLElement && event.target.closest('.btn-primary')){
129
+
130
+ const button = event.target.closest('.btn-primary');
131
+
132
+ // If the input allows multiples then use the buffer clone input
133
+ const inputTrigger = input.hasAttribute('multiple') ? cloneInput : input;
134
+
135
+ inputTrigger.click();
136
+ }
137
+ });
123
138
  }
124
139
 
125
140
  export default fileupload;