@iamproperty/components 3.4.5 → 3.4.7

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 (203) hide show
  1. package/assets/css/components/accordion.css +1 -0
  2. package/assets/css/components/accordion.css.map +1 -0
  3. package/assets/css/components/alert.css +1 -0
  4. package/assets/css/components/alert.css.map +1 -0
  5. package/assets/css/components/applied-filters.css +1 -0
  6. package/assets/css/components/applied-filters.css.map +1 -0
  7. package/assets/css/components/buttons.css +1 -0
  8. package/assets/css/components/buttons.css.map +1 -0
  9. package/assets/css/components/card.css +1 -0
  10. package/assets/css/components/card.css.map +1 -0
  11. package/assets/css/components/carousel.css +1 -0
  12. package/assets/css/components/carousel.css.map +1 -0
  13. package/assets/css/components/charts.css +1 -0
  14. package/assets/css/components/charts.css.map +1 -0
  15. package/assets/css/components/container.css +1 -0
  16. package/assets/css/components/container.css.map +1 -0
  17. package/assets/css/components/dialog.css +1 -0
  18. package/assets/css/components/dialog.css.map +1 -0
  19. package/assets/css/components/forms.css +1 -0
  20. package/assets/css/components/forms.css.map +1 -0
  21. package/assets/css/components/header.css +1 -0
  22. package/assets/css/components/header.css.map +1 -0
  23. package/assets/css/components/lists.css +1 -0
  24. package/assets/css/components/lists.css.map +1 -0
  25. package/assets/css/components/nav.css +1 -0
  26. package/assets/css/components/nav.css.map +1 -0
  27. package/assets/css/components/pagination.css +1 -0
  28. package/assets/css/components/pagination.css.map +1 -0
  29. package/assets/css/components/panel.css +1 -0
  30. package/assets/css/components/panel.css.map +1 -0
  31. package/assets/css/components/property-searchbar.css +1 -0
  32. package/assets/css/components/property-searchbar.css.map +1 -0
  33. package/assets/css/components/snapshot.css +1 -0
  34. package/assets/css/components/snapshot.css.map +1 -0
  35. package/assets/css/components/stepper.css +1 -0
  36. package/assets/css/components/stepper.css.map +1 -0
  37. package/assets/css/components/table.css +1 -0
  38. package/assets/css/components/table.css.map +1 -0
  39. package/assets/css/components/tabs.css +1 -0
  40. package/assets/css/components/tabs.css.map +1 -0
  41. package/assets/css/components/testimonial.css +1 -0
  42. package/assets/css/components/testimonial.css.map +1 -0
  43. package/assets/css/components/timeline.css +1 -0
  44. package/assets/css/components/timeline.css.map +1 -0
  45. package/assets/css/components/tooltips.css +1 -0
  46. package/assets/css/components/tooltips.css.map +1 -0
  47. package/assets/css/core.min.css +1 -1
  48. package/assets/css/core.min.css.map +1 -1
  49. package/assets/css/style.min.css +1 -1
  50. package/assets/css/style.min.css.map +1 -1
  51. package/assets/fonts/qanelas-bold-webfont.woff +0 -0
  52. package/assets/fonts/qanelas-bold-webfont.woff2 +0 -0
  53. package/assets/js/bundle.js +68 -0
  54. package/assets/js/components/accordion/accordion.component.js +33 -0
  55. package/assets/js/components/accordion/accordion.component.min.js +14 -0
  56. package/assets/js/components/accordion/accordion.component.min.js.map +1 -0
  57. package/assets/js/components/applied-filters/applied-filters.component.js +26 -0
  58. package/assets/js/components/card/card.component.js +91 -0
  59. package/assets/js/components/card/card.component.min.js +21 -0
  60. package/assets/js/components/card/card.component.min.js.map +1 -0
  61. package/assets/js/components/filterlist/filterlist.component.js +49 -0
  62. package/assets/js/components/filterlist/filterlist.component.min.js +23 -0
  63. package/assets/js/components/filterlist/filterlist.component.min.js.map +1 -0
  64. package/assets/js/components/header/header.component.js +51 -0
  65. package/assets/js/components/header/header.component.min.js +30 -0
  66. package/assets/js/components/header/header.component.min.js.map +1 -0
  67. package/assets/js/components/pagination/pagination.component.js +34 -0
  68. package/assets/js/components/table/table.component.js +104 -0
  69. package/assets/js/components/table/table.component.min.js +24 -0
  70. package/assets/js/components/table/table.component.min.js.map +1 -0
  71. package/assets/js/components/tabs/tabs.component.js +34 -0
  72. package/assets/js/components/tabs/tabs.component.min.js +17 -0
  73. package/assets/js/components/tabs/tabs.component.min.js.map +1 -0
  74. package/assets/js/dynamic.js +74 -0
  75. package/assets/js/dynamic.min.js +5 -0
  76. package/assets/js/dynamic.min.js.map +1 -0
  77. package/assets/js/flat-components.js +79 -0
  78. package/assets/js/modules/accordion.js +11 -14
  79. package/assets/js/modules/applied-filters.js +100 -0
  80. package/assets/js/modules/data-layer.js +45 -0
  81. package/assets/js/modules/filterlist.js +32 -0
  82. package/assets/js/modules/helpers.js +80 -47
  83. package/assets/js/modules/pagination.js +33 -0
  84. package/assets/js/modules/table.js +507 -420
  85. package/assets/js/modules/tabs.js +97 -0
  86. package/assets/js/modules/youtubevideo.js +53 -61
  87. package/assets/js/scripts.bundle.js +111 -984
  88. package/assets/js/scripts.bundle.js.map +1 -1
  89. package/assets/js/scripts.bundle.min.js +3 -4
  90. package/assets/js/scripts.bundle.min.js.map +1 -1
  91. package/assets/js/tests/filterlist.spec.js +22 -0
  92. package/assets/js/tests/pagination.spec.js +15 -0
  93. package/assets/js/tests/table.spec.js +147 -0
  94. package/assets/sass/_components.scss +1 -2
  95. package/assets/sass/_corefiles.scss +5 -4
  96. package/assets/sass/_fonts.scss +4 -4
  97. package/assets/sass/_func.scss +1 -0
  98. package/assets/sass/_functions/functions.scss +6 -0
  99. package/assets/sass/_functions/mixins.scss +9 -9
  100. package/assets/sass/_functions/utilities.scss +16 -0
  101. package/assets/sass/_functions/variables.scss +128 -86
  102. package/assets/sass/_tests/colours.spec.scss +1 -1
  103. package/assets/sass/_tests/mixins.spec.scss +1 -1
  104. package/assets/sass/_tests/typography.spec.scss +2 -2
  105. package/assets/sass/components/accordion.scss +9 -6
  106. package/assets/sass/components/applied-filters.scss +65 -0
  107. package/assets/sass/components/card.scss +178 -227
  108. package/assets/sass/components/charts.scss +4 -0
  109. package/assets/sass/components/container.scss +13 -8
  110. package/assets/sass/components/dialog.scss +202 -0
  111. package/assets/sass/components/forms.scss +39 -5
  112. package/assets/sass/components/header.scss +34 -11
  113. package/assets/sass/components/lists.scss +15 -0
  114. package/assets/sass/components/nav.scss +5 -1
  115. package/assets/sass/components/pagination.scss +140 -0
  116. package/assets/sass/components/panel.scss +3 -4
  117. package/assets/sass/components/snapshot.scss +1 -1
  118. package/assets/sass/components/table.scss +419 -0
  119. package/assets/sass/components/tabs.scss +52 -36
  120. package/assets/sass/components/timeline.scss +2 -2
  121. package/assets/sass/foundations/icons.scss +1 -1
  122. package/assets/sass/{components → foundations}/links.scss +29 -2
  123. package/assets/sass/foundations/reboot.scss +21 -15
  124. package/assets/sass/foundations/root.scss +12 -5
  125. package/assets/sass/foundations/type.scss +90 -66
  126. package/assets/svg/illustrations/table.svg +165 -0
  127. package/assets/ts/README.md +12 -0
  128. package/assets/ts/bundle.ts +87 -0
  129. package/assets/ts/components/accordion/README.md +17 -0
  130. package/assets/ts/components/accordion/accordion.component.ts +43 -0
  131. package/assets/ts/components/applied-filters/README.md +5 -0
  132. package/assets/ts/components/applied-filters/applied-filters.component.ts +33 -0
  133. package/assets/ts/components/card/README.md +22 -0
  134. package/assets/ts/components/card/card.component.ts +117 -0
  135. package/assets/ts/components/filterlist/README.md +17 -0
  136. package/assets/ts/components/filterlist/filterlist.component.ts +60 -0
  137. package/assets/ts/components/header/README.md +26 -0
  138. package/assets/ts/components/header/header.component.ts +61 -0
  139. package/assets/ts/components/pagination/README.md +11 -0
  140. package/assets/ts/components/pagination/pagination.component.ts +45 -0
  141. package/assets/ts/components/table/README.md +23 -0
  142. package/assets/ts/components/table/table.component.ts +128 -0
  143. package/assets/ts/components/tabs/README.md +18 -0
  144. package/assets/ts/components/tabs/tabs.component.ts +41 -0
  145. package/assets/ts/dynamic.ts +98 -0
  146. package/assets/ts/flat-components.ts +100 -0
  147. package/assets/ts/html.d.ts +4 -0
  148. package/assets/ts/modules/accordion.ts +15 -21
  149. package/assets/ts/modules/applied-filters.ts +146 -0
  150. package/assets/ts/modules/data-layer.ts +58 -0
  151. package/assets/ts/modules/filterlist.ts +46 -0
  152. package/assets/ts/modules/helpers.ts +93 -55
  153. package/assets/ts/modules/pagination.ts +44 -0
  154. package/assets/ts/modules/table.ts +598 -433
  155. package/assets/ts/modules/tabs.ts +136 -0
  156. package/assets/ts/modules/youtubevideo.ts +58 -63
  157. package/assets/ts/tests/filterlist.spec.ts +29 -0
  158. package/assets/ts/tests/pagination.spec.ts +21 -0
  159. package/assets/ts/tests/table.spec.ts +191 -0
  160. package/dist/components.es.js +1359 -1356
  161. package/dist/components.umd.js +103 -54
  162. package/dist/style.css +1 -1
  163. package/package.json +20 -12
  164. package/src/components/Accordion/Accordion.spec.js +1 -1
  165. package/src/components/Accordion/Accordion.vue +7 -5
  166. package/src/components/Accordion/AccordionItem.vue +3 -6
  167. package/src/components/Accordion/README.md +0 -2
  168. package/src/components/AppliedFilters/AppliedFilters.vue +20 -0
  169. package/src/components/AppliedFilters/README.md +5 -0
  170. package/src/components/Card/Card.vue +11 -112
  171. package/src/components/Card/README.md +16 -18
  172. package/src/components/Carousel/Carousel.vue +49 -10
  173. package/src/components/Chart/Chart.vue +46 -4
  174. package/src/components/Filterlist/Filterlist.vue +20 -0
  175. package/src/components/Filterlist/README.md +17 -0
  176. package/src/components/Header/Header.spec.js +5 -4
  177. package/src/components/Header/Header.vue +14 -20
  178. package/src/components/Pagination/Pagination.vue +30 -0
  179. package/src/components/Pagination/README.md +11 -0
  180. package/src/components/Snapshot/Snapshot.vue +1 -1
  181. package/src/components/Table/README.md +29 -44
  182. package/src/components/Table/Table.spec.js +5 -37
  183. package/src/components/Table/Table.vue +16 -91
  184. package/src/components/Tabs/README.md +0 -2
  185. package/src/components/Tabs/Tab.vue +3 -2
  186. package/src/components/Tabs/Tabs.vue +8 -64
  187. package/src/foundations/YoutubeVideo/YoutubeVideo.vue +1 -1
  188. package/src/index.js +3 -2
  189. package/assets/fonts/qanelassoft-extrabold-webfont.woff +0 -0
  190. package/assets/fonts/qanelassoft-extrabold-webfont.woff2 +0 -0
  191. package/assets/js/main.js +0 -57
  192. package/assets/js/modules/modal.js +0 -69
  193. package/assets/sass/components/cardDeck.scss +0 -108
  194. package/assets/sass/components/modal.scss +0 -136
  195. package/assets/sass/components/tables.scss +0 -291
  196. package/assets/ts/main.ts +0 -68
  197. package/assets/ts/modules/modal.ts +0 -91
  198. package/src/components/CardDeck/CardDeck.spec.js +0 -99
  199. package/src/components/CardDeck/CardDeck.vue +0 -77
  200. package/src/components/CardDeck/README.md +0 -25
  201. package/src/components/Modal/Modal.spec.js +0 -22
  202. package/src/components/Modal/Modal.vue +0 -43
  203. package/src/components/Modal/README.md +0 -20
@@ -0,0 +1,87 @@
1
+ // @ts-nocheck
2
+ // Modules
3
+ import * as helpers from '../js/modules/helpers'
4
+ import createDataLayer from '../js/modules/data-layer'
5
+ import nav from '../js/modules/nav'
6
+ //import accordion from './modules/accordion'
7
+ import testimonial from '../js/modules/testimonial'
8
+ import carousel from '../js/modules/carousel'
9
+ import form from '../js/modules/form'
10
+ import youtubeVideo from '../js/modules/youtubevideo'
11
+ import iamHeader from './components/header/header.component'
12
+ import iamAccordion from './components/accordion/accordion.component'
13
+ import iamTabs from './components/tabs/tabs.component'
14
+ import iamTable from './components/table/table.component'
15
+ import iamCard from './components/card/card.component'
16
+ import iamAppliedFilters from './components/applied-filters/applied-filters.component'
17
+ import iamPagination from './components/pagination/pagination.component'
18
+ import iamFilterlist from './components/filterlist/filterlist.component'
19
+
20
+ // Attach classes to dom elements
21
+ document.addEventListener("DOMContentLoaded", function() {
22
+
23
+ createDataLayer();
24
+ // Global stuff
25
+ helpers.addBodyClasses(document.body);
26
+ helpers.addGlobalEvents(document.body);
27
+ //helpers.checkElements(document.body);
28
+
29
+ if (!window.customElements.get(`iam-header`))
30
+ window.customElements.define(`iam-header`, iamHeader);
31
+
32
+ if (!window.customElements.get(`iam-accordion`))
33
+ window.customElements.define(`iam-accordion`, iamAccordion);
34
+
35
+ if (!window.customElements.get(`iam-tabs`))
36
+ window.customElements.define(`iam-tabs`, iamTabs);
37
+
38
+ if (!window.customElements.get(`iam-table`))
39
+ window.customElements.define(`iam-table`, iamTable);
40
+
41
+ if (!window.customElements.get(`iam-card`))
42
+ window.customElements.define(`iam-card`, iamCard);
43
+
44
+ if (!window.customElements.get(`iam-filterlist`))
45
+ window.customElements.define(`iam-filterlist`, iamFilterlist);
46
+
47
+ if (!window.customElements.get(`iam-pagination`))
48
+ window.customElements.define(`iam-pagination`, iamPagination);
49
+
50
+ if (!window.customElements.get(`iam-applied-filters`))
51
+ window.customElements.define(`iam-applied-filters`, iamAppliedFilters);
52
+
53
+ // ANav
54
+ Array.from(document.querySelectorAll('.nav')).forEach((arrayElement) => {
55
+ nav(arrayElement);
56
+ });
57
+
58
+
59
+
60
+ // Testimonial
61
+ Array.from(document.querySelectorAll('.testimonial')).forEach((arrayElement) => {
62
+ testimonial(arrayElement);
63
+ });
64
+ // Carousel
65
+ Array.from(document.querySelectorAll('.carousel')).forEach((arrayElement) => {
66
+ carousel(arrayElement);
67
+ });
68
+ // Form
69
+ Array.from(document.querySelectorAll('form')).forEach((arrayElement) => {
70
+ form(arrayElement);
71
+ });
72
+ // YouTube videos
73
+ Array.from(document.querySelectorAll('.youtube-embed')).forEach((arrayElement) => {
74
+ new youtubeVideo(arrayElement);
75
+ });
76
+
77
+
78
+ window.addEventListener('hashchange', function() {
79
+
80
+ const hash = location.hash.replace('#','');
81
+ const label = document.querySelector(`label[for="${hash}"]`);
82
+
83
+ if (label instanceof HTMLElement)
84
+ label.click();
85
+
86
+ }, false);
87
+ });
@@ -0,0 +1,17 @@
1
+ ```
2
+ <iam-accordion class="container">
3
+ <details id="question1" class="accordion-item">
4
+ <summary class="accordion-header accordion-button h4">Question 1</summary>
5
+ <p>Answer </p>
6
+ </details>
7
+ <details class="accordion-item">
8
+ <summary class="accordion-header accordion-button h4">Question 2</summary>
9
+ <p>Answer </p>
10
+ </details>
11
+ </iam-accordion>
12
+ ```
13
+
14
+ ### Class modifiers
15
+
16
+ - Adding a class of **.accordion--keep-open** to the accordion will stop the items from closing when another one is opened.
17
+ - Adding a class of **.accordion--straight** to the accordion will remove the slight indentation of the accordion.
@@ -0,0 +1,43 @@
1
+ // @ts-nocheck
2
+ import accordion from "../../modules/accordion";
3
+
4
+ // Data layer Web component created
5
+ window.dataLayer = window.dataLayer || [];
6
+ window.dataLayer.push({
7
+ "event": "customElementRegistered",
8
+ "element": "accordion"
9
+ });
10
+
11
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets'
12
+
13
+ class iamAccordion extends HTMLElement {
14
+
15
+ constructor(){
16
+ super();
17
+ this.attachShadow({ mode: 'open'});
18
+
19
+
20
+ const template = document.createElement('template');
21
+ template.innerHTML = `
22
+ <style>
23
+ @import "${assetLocation}/css/core.min.css";
24
+ @import "${assetLocation}/css/components/accordion.css";
25
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
26
+ </style>
27
+ <div class="accordion">
28
+ <slot></slot>
29
+ </div>
30
+ `;
31
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
32
+ }
33
+
34
+ connectedCallback() {
35
+
36
+ accordion(this);
37
+
38
+ // Load in the component CSS into the root so we can style the content of the component
39
+ this.insertAdjacentHTML("beforebegin", `<link rel="stylesheet" href="${assetLocation}/css/components/accordion.css">`)
40
+ }
41
+ }
42
+
43
+ export default iamAccordion;
@@ -0,0 +1,5 @@
1
+ ```
2
+ <iam-applied-filters></iam-applied-filters>
3
+ ```
4
+
5
+ To add an input to the applied filters an attribute of **data-filter-text** needs to be supplied so that the JavaScript knows to listen for the value to change. This attribute can also be used on a wrapper for mulitple input filters also and dynamic values can also be given. **$value** passes the inputs value as the filter text and **$1,$2,$3...** will pass the corresponding child input value to the text.
@@ -0,0 +1,33 @@
1
+ // @ts-nocheck
2
+ import createAppliedFilters from "../../modules/applied-filters";
3
+
4
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets'
5
+ const loadCSS = `@import "${assetLocation}/css/components/applied-filters.css";`;
6
+
7
+ class iamAppliedFilters extends HTMLElement {
8
+
9
+ constructor(){
10
+ super();
11
+ this.attachShadow({ mode: 'open'});
12
+
13
+ let classList = this.classList.toString();
14
+ const template = document.createElement('template');
15
+ template.innerHTML = `
16
+ <style>
17
+ @import "${assetLocation}/css/core.min.css";
18
+ ${loadCSS}
19
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
20
+ </style>
21
+ <div class="applied-filters ${classList}"></div>
22
+ <slot></slot>
23
+ `;
24
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
25
+ }
26
+
27
+ connectedCallback() {
28
+
29
+ createAppliedFilters(this,this.shadowRoot.querySelector('.applied-filters'));
30
+ }
31
+ }
32
+
33
+ export default iamAppliedFilters;
@@ -0,0 +1,22 @@
1
+ ```
2
+ <a href="/link-url">
3
+ <iam-card>Link content</iam-card>
4
+ </a>
5
+ ```
6
+
7
+ **Note**
8
+
9
+ The card component needs to be wrapped with a link or a button, this is required to give the card any functionality.
10
+
11
+ **Properties**
12
+
13
+ | Option | Type | Default Value | Description |
14
+ | ------ | ---- | ------------- | ----------- |
15
+ | data-total | Int | - | Optional total number , usually use on the filter card type |
16
+ | data-image | image url | - | Optional image url to create a card header with an image as its background |
17
+
18
+ **Class modifiers**
19
+
20
+ - Adding a class of **.card--filter** will implement the filter card design.
21
+ - Adding a class of **.border-o** will remove the box-shadow of the card and make some minor sizing adjustments.
22
+ - Adding a class like **.colour-warning** will update the colour of the left berder for the filter card. The theme colours will be avialable to use.
@@ -0,0 +1,117 @@
1
+ // @ts-nocheck
2
+ class iamCard extends HTMLElement {
3
+
4
+ constructor(){
5
+ super();
6
+ this.attachShadow({ mode: 'open'});
7
+
8
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
9
+ const loadCSS = `@import "${assetLocation}/css/components/card.css";`;
10
+
11
+ if(this.querySelector('.icon'))
12
+ this.classList.add('card--has-icon');
13
+
14
+ let classList = this.classList.toString();
15
+
16
+ const template = document.createElement('template');
17
+ template.innerHTML = `
18
+ <style>
19
+ @import "${assetLocation}/css/core.min.css";
20
+ ${loadCSS}
21
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
22
+ </style>
23
+ <div class="card ${classList}" tabindex="0" role="button">
24
+ ${this.hasAttribute('data-image') ? `<div class="card__head"><img src="${this.getAttribute('data-image')}" alt="" loading="lazy" /></div>` : ''}
25
+ <div class="card__body">
26
+ ${this.classList.contains('card--filter') && this.hasAttribute('data-total') ? `<div class="card__total">${this.getAttribute('data-total')}</div>` : ''}
27
+ ${this.hasAttribute('data-illustration') ? `<div class="card__illustration"><img src="${this.getAttribute('data-illustration')}" alt="" loading="lazy" /></div>` : ''}
28
+ <slot></slot>
29
+ </div>
30
+ ${this.hasAttribute('data-cta') ? `<div class="card__footer"><span class="link">${this.getAttribute('data-cta')}</span></div>` : ''}
31
+ </div>
32
+ `;
33
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
34
+ }
35
+
36
+ connectedCallback() {
37
+
38
+ // Mimic clicking the parent node so the focus and target events can be on the card
39
+ const parentNode = this.parentNode.closest('a, button, label')
40
+ const card = this.shadowRoot.querySelector('.card')
41
+
42
+ parentNode.setAttribute('tabindex','-1');
43
+
44
+ if(parentNode.matches('label[for]')){
45
+
46
+ let isChecked = document.getElementById(parentNode.getAttribute('for')).checked
47
+
48
+ if(isChecked)
49
+ card.classList.add('active');
50
+ }
51
+
52
+ card.addEventListener('click', (event) => {
53
+
54
+ if(parentNode.matches('label[for]')){
55
+
56
+ let isChecked = document.getElementById(parentNode.getAttribute('for')).checked
57
+
58
+ if(!isChecked)
59
+ card.classList.add('active');
60
+ else
61
+ card.classList.remove('active');
62
+ }
63
+ else {
64
+ parentNode.click();
65
+ }
66
+ });
67
+
68
+ card.addEventListener('keydown', (event) => {
69
+
70
+ switch(event.keyCode)
71
+ {
72
+ case 32:
73
+ case 13:
74
+ if(parentNode.matches('label[for]')){
75
+
76
+ let isChecked = document.getElementById(parentNode.getAttribute('for')).checked
77
+
78
+ if(!isChecked)
79
+ card.classList.add('active');
80
+ else
81
+ card.classList.remove('active');
82
+ }
83
+ else {
84
+ parentNode.click();
85
+ }
86
+ break;
87
+ default:
88
+ break;
89
+ }
90
+ });
91
+ }
92
+
93
+ static get observedAttributes() {
94
+ return ["data-total","class"];
95
+ }
96
+
97
+ attributeChangedCallback(attrName, oldVal, newVal) {
98
+ switch (attrName) {
99
+ case "data-total": {
100
+ this.shadowRoot.querySelector('.card__total').innerHTML = newVal;
101
+ break;
102
+ }
103
+ case "class": {
104
+ let classList = this.classList.toString();
105
+
106
+ if(this.querySelector('.icon'))
107
+ classList += ' card--has-icon';
108
+
109
+ this.shadowRoot.querySelector('.card').setAttribute('class',`card ${classList}`);
110
+ break;
111
+ }
112
+ }
113
+
114
+ }
115
+ }
116
+
117
+ export default iamCard;
@@ -0,0 +1,17 @@
1
+ ```
2
+ <iam-filterlist>
3
+ <ul>
4
+ <li>Olivia Anderson</li>
5
+ <li>Ethan Ramirez</li>
6
+ <li>Sophia Patel</li>
7
+ <li>Noah Jenkins</li>
8
+ <li>Ava Thompson</li>
9
+ </ul>
10
+ </iam-filterlist>
11
+ ```
12
+
13
+ **Properties**
14
+
15
+ | Option | Type | Default Value | Description |
16
+ | ------ | ---- | ------------- | ----------- |
17
+ | data-max-height | string | '' | Optional choice from small, medium or large control of the height of the list. Giving it a scrollable area. |
@@ -0,0 +1,60 @@
1
+ // @ts-nocheck
2
+ import filterlist from "../../modules/filterlist";
3
+
4
+ // Data layer Web component created
5
+ window.dataLayer = window.dataLayer || [];
6
+ window.dataLayer.push({
7
+ "event": "customElementRegistered",
8
+ "element": "filterlist"
9
+ });
10
+
11
+ class iamFilterlist extends HTMLElement {
12
+
13
+ constructor(){
14
+ super();
15
+ this.attachShadow({ mode: 'open'});
16
+
17
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
18
+ const template = document.createElement('template');
19
+ template.innerHTML = `
20
+ <style>
21
+ @import "${assetLocation}/css/core.min.css";
22
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
23
+
24
+ :host {
25
+ margin-bottom: 3rem;
26
+ display:block;
27
+ }
28
+ </style>
29
+ <div class="form-control__wrapper">
30
+ <label for="search" class="visually-hidden">Search</label>
31
+ <span class="suffix" role="presentation"><slot name="icon"></slot></span>
32
+ <input name="search" id="search" type="text" class="form-control" autocomplete="off">
33
+ </div>
34
+ <div class="list__wrapper">
35
+ <slot></slot>
36
+ </div>
37
+ `;
38
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
39
+ }
40
+
41
+ connectedCallback() {
42
+
43
+ const maxHeights = {
44
+ "small": "12.5rem",
45
+ "medium": "25rem",
46
+ "large": "37.5rem"
47
+ }
48
+
49
+ let maxHeightClass = (this.hasAttribute('data-max-height') && maxHeights[this.getAttribute('data-max-height')] ? 'list__wrapper--'+this.getAttribute('data-max-height') : '');
50
+
51
+ this.shadowRoot.querySelector('.list__wrapper').classList.add(maxHeightClass);
52
+
53
+ if(!this.querySelector('i.fa-search'))
54
+ this.innerHTML += '<i class="fa fa-light fa-search" aria-hidden="true" slot="icon"></i>';
55
+
56
+ filterlist(this.querySelector('ul'),this.shadowRoot.querySelector('#search'));
57
+ }
58
+ }
59
+
60
+ export default iamFilterlist;
@@ -0,0 +1,26 @@
1
+ ### Usage
2
+
3
+ ```
4
+ <iam-header class="bg-secondary" image="/shutterstock_1229155495.webp">
5
+ <ul class="breadcrumb" slot="breadcrumb">
6
+ <li><a href="/">Home</a></li>
7
+ <li><a href="/top">Top level</a></li>
8
+ </ul>
9
+ <h1>Page title</h1>
10
+ <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
11
+ </iam-header>
12
+ ```
13
+
14
+ ### Properties
15
+
16
+ | Option | Type | Default Value | Description |
17
+ | ------ | ---- | ------------- | ----------- |
18
+ | image | String | - | Optional image url to display in the background |
19
+
20
+
21
+ ### Slots
22
+
23
+ | Option | Default Value | Description |
24
+ | ------ | ------------- | ----------- |
25
+ | default | - | Will display underneath the heading inside of the white box |
26
+ | breadcrumb | - | An optional space to add a breadcrumb trail list. |
@@ -0,0 +1,61 @@
1
+ // @ts-nocheck
2
+
3
+ // Data layer Web component created
4
+ window.dataLayer = window.dataLayer || [];
5
+ window.dataLayer.push({
6
+ "event": "customElementRegistered",
7
+ "element": "header"
8
+ });
9
+
10
+ class iamHeader extends HTMLElement {
11
+
12
+ constructor(){
13
+ super();
14
+ this.attachShadow({ mode: 'open'});
15
+
16
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
17
+ const loadCSS = `@import "${assetLocation}/css/components/header.css";`;
18
+
19
+ const template = document.createElement('template');
20
+ template.innerHTML = `
21
+ <style>
22
+ @import "${assetLocation}/css/core.min.css";
23
+ ${loadCSS}
24
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
25
+ :host {
26
+ max-width:100%!important;
27
+ padding:0!important;
28
+ }
29
+ </style>
30
+ <div class="header-banner">
31
+ <div class="container" part="container">
32
+ <slot name="breadcrumb"></slot>
33
+ <div class="header-banner__inner">
34
+ <slot></slot>
35
+ </div>
36
+ </div>
37
+ <picture>
38
+ <!-- Actual image only loaded on desktops -->
39
+ <source srcset="" media="(min-width: 62em)">
40
+ <!-- Placeholder image -->
41
+ <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="" lazy="" />
42
+ </picture>
43
+ </div>
44
+ `;
45
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
46
+ }
47
+
48
+ connectedCallback() {
49
+
50
+ const picture = this.shadowRoot.querySelector('picture');
51
+ const source = this.shadowRoot.querySelector('picture source');
52
+
53
+ if(this.hasAttribute('image'))
54
+ source.setAttribute('srcset', this.getAttribute('image'));
55
+ else
56
+ picture.remove();
57
+
58
+ }
59
+ }
60
+
61
+ export default iamHeader;
@@ -0,0 +1,11 @@
1
+ ```
2
+ <iam-pagination data-total="12"></iam-pagination>
3
+ ```
4
+
5
+ **Properties**
6
+
7
+ | Option | Type | Default Value | Description |
8
+ | ------ | ---- | ------------- | ----------- |
9
+ | data-total | int | 0 | The total amount is needed to work out how many pagination buttons are needed |
10
+ | data-page | int | 1 | Override the current page value |
11
+ | data-show | int | 15 | Update how many items can be shown per page |
@@ -0,0 +1,45 @@
1
+ // @ts-nocheck
2
+ import createPaginationButttons from "../../modules/pagination";
3
+
4
+ class iamPagination extends HTMLElement {
5
+
6
+ constructor(){
7
+ super();
8
+ this.attachShadow({ mode: 'open'});
9
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
10
+
11
+ const template = document.createElement('template');
12
+ template.innerHTML = `
13
+ <style>
14
+ @import "${assetLocation}/css/core.min.css";
15
+ </style>
16
+ <div class="pagination__wrapper d-none">
17
+ </div>
18
+ `;
19
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
20
+
21
+ // Set default attributes
22
+ const params = new URLSearchParams(window.location.search);
23
+
24
+ if(!this.hasAttribute('data-total'))
25
+ this.setAttribute('data-total', this.querySelectorAll('table tbody tr').length);
26
+
27
+ if(!this.hasAttribute('data-page'))
28
+ this.setAttribute('data-page', (params.has('page') ? params.get('page') : 1));
29
+
30
+ if(!this.hasAttribute('data-show'))
31
+ this.setAttribute('data-show', (params.has('show') ? params.get('show') : 15));
32
+
33
+ if(!this.hasAttribute('data-increment'))
34
+ this.setAttribute('data-increment', 15);
35
+
36
+ this.setAttribute('data-pages', Math.ceil(this.getAttribute('data-total') / this.getAttribute('data-show')));
37
+ createPaginationButttons(this,this.shadowRoot.querySelector('.pagination__wrapper'));
38
+ }
39
+
40
+ connectedCallback() {
41
+ this.shadowRoot.querySelector('.pagination__wrapper').classList.remove('d-none');
42
+ }
43
+ }
44
+
45
+ export default iamPagination;
@@ -0,0 +1,23 @@
1
+ ```
2
+ <iam-table class="container">
3
+ <table>
4
+ <thead>....</thead>
5
+ <tbody>...</tbody>
6
+ </table>
7
+ </iam-tabs>
8
+ ```
9
+
10
+ **Properties**
11
+
12
+ | Option | Type | Default Value | Description |
13
+ | ------ | ---- | ------------- | ----------- |
14
+ | data-show | int | 15 | Update how many rows can be shown per page |
15
+ | data-filterby | string (form ID) | | Give an optional form ID to connect a form to the table and make it act like a filtering system |
16
+
17
+
18
+ **Class modifiers**
19
+
20
+ - Adding a class of **.table--cta** to the table component will fix the last column of the table in place (While on tablet or desktop).
21
+ - Adding a class of **.table--export** to the table component will create a button at the bottom of the table to export its contents out as a CSV file.
22
+ - Adding a class of **.table--fullwidth** to the table component will prevent it from becoming a stacked view on mobile.
23
+ - Adding a class of **.table--mh-small**,**.table--mh-medium** or **.table--mh-large** to the table component will give the table container a max height and the ability to scroll.