@iamproperty/components 3.4.5 → 3.4.6

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 (121) 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/buttons.css +1 -0
  6. package/assets/css/components/buttons.css.map +1 -0
  7. package/assets/css/components/card.css +1 -0
  8. package/assets/css/components/card.css.map +1 -0
  9. package/assets/css/components/cardDeck.css +1 -0
  10. package/assets/css/components/cardDeck.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/forms.css +1 -0
  18. package/assets/css/components/forms.css.map +1 -0
  19. package/assets/css/components/header.css +1 -0
  20. package/assets/css/components/header.css.map +1 -0
  21. package/assets/css/components/links.css +1 -0
  22. package/assets/css/components/links.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/modal.css +1 -0
  26. package/assets/css/components/modal.css.map +1 -0
  27. package/assets/css/components/nav.css +1 -0
  28. package/assets/css/components/nav.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/tables.css +1 -0
  38. package/assets/css/components/tables.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 +61 -0
  54. package/assets/js/components/accordion/accordion.component.js +27 -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/header/header.component.js +45 -0
  58. package/assets/js/components/header/header.component.min.js +30 -0
  59. package/assets/js/components/header/header.component.min.js.map +1 -0
  60. package/assets/js/components/tabs/tabs.component.js +28 -0
  61. package/assets/js/dynamic.js +85 -0
  62. package/assets/js/dynamic.min.js +56 -0
  63. package/assets/js/dynamic.min.js.map +1 -0
  64. package/assets/js/{main.js → flat-components.js} +15 -11
  65. package/assets/js/modules/accordion.js +11 -14
  66. package/assets/js/modules/helpers.js +9 -4
  67. package/assets/js/modules/tabs.js +91 -0
  68. package/assets/js/scripts.bundle.js +92 -980
  69. package/assets/js/scripts.bundle.js.map +1 -1
  70. package/assets/js/scripts.bundle.min.js +3 -4
  71. package/assets/js/scripts.bundle.min.js.map +1 -1
  72. package/assets/sass/_fonts.scss +4 -4
  73. package/assets/sass/_func.scss +1 -0
  74. package/assets/sass/_functions/functions.scss +6 -0
  75. package/assets/sass/_functions/mixins.scss +9 -9
  76. package/assets/sass/_functions/variables.scss +96 -68
  77. package/assets/sass/_tests/mixins.spec.scss +1 -1
  78. package/assets/sass/_tests/typography.spec.scss +2 -2
  79. package/assets/sass/components/accordion.scss +9 -6
  80. package/assets/sass/components/card.scss +7 -0
  81. package/assets/sass/components/container.scss +6 -6
  82. package/assets/sass/components/forms.scss +2 -0
  83. package/assets/sass/components/header.scss +34 -11
  84. package/assets/sass/components/links.scss +3 -2
  85. package/assets/sass/components/panel.scss +3 -4
  86. package/assets/sass/components/snapshot.scss +1 -1
  87. package/assets/sass/components/tabs.scss +52 -36
  88. package/assets/sass/components/timeline.scss +2 -2
  89. package/assets/sass/foundations/reboot.scss +2 -2
  90. package/assets/sass/foundations/root.scss +12 -5
  91. package/assets/sass/foundations/type.scss +90 -66
  92. package/assets/ts/README.md +12 -0
  93. package/assets/ts/bundle.ts +76 -0
  94. package/assets/ts/components/accordion/README.md +17 -0
  95. package/assets/ts/components/accordion/accordion.component.ts +36 -0
  96. package/assets/ts/components/header/README.md +26 -0
  97. package/assets/ts/components/header/header.component.ts +53 -0
  98. package/assets/ts/components/tabs/README.md +18 -0
  99. package/assets/ts/components/tabs/tabs.component.ts +34 -0
  100. package/assets/ts/dynamic.ts +105 -0
  101. package/assets/ts/{main.ts → flat-components.ts} +15 -11
  102. package/assets/ts/html.d.ts +4 -0
  103. package/assets/ts/modules/accordion.ts +15 -21
  104. package/assets/ts/modules/helpers.ts +12 -4
  105. package/assets/ts/modules/tabs.ts +129 -0
  106. package/dist/components.es.js +879 -844
  107. package/dist/components.umd.js +65 -21
  108. package/dist/style.css +1 -1
  109. package/package.json +14 -8
  110. package/src/components/Accordion/Accordion.spec.js +1 -1
  111. package/src/components/Accordion/Accordion.vue +7 -5
  112. package/src/components/Accordion/AccordionItem.vue +3 -6
  113. package/src/components/Accordion/README.md +0 -2
  114. package/src/components/Header/Header.spec.js +5 -4
  115. package/src/components/Header/Header.vue +14 -20
  116. package/src/components/Snapshot/Snapshot.vue +1 -1
  117. package/src/components/Tabs/README.md +0 -2
  118. package/src/components/Tabs/Tab.vue +3 -2
  119. package/src/components/Tabs/Tabs.vue +8 -64
  120. package/assets/fonts/qanelassoft-extrabold-webfont.woff +0 -0
  121. package/assets/fonts/qanelassoft-extrabold-webfont.woff2 +0 -0
@@ -22,7 +22,7 @@ html {
22
22
  }
23
23
 
24
24
  @if $mobileOnly != "true" {
25
- @media (min-width: #{em(1440)}) {
25
+ @media (min-width: #{em(1280)}) {
26
26
  font-size: 100%;
27
27
  }
28
28
 
@@ -48,7 +48,7 @@ body {
48
48
  font-family: 'qanelasmedium', arial, sans-serif;
49
49
  @include var(color,--colour-body);
50
50
  width: 100%;
51
- line-height: 1.5;
51
+ line-height: 1.2;
52
52
  height: 100%;
53
53
  //overflow-y: scroll;
54
54
  //overflow-x: hidden;
@@ -10,6 +10,13 @@
10
10
  }
11
11
 
12
12
  // Add in media query based updates to the global vars like updating the heading 1 font size
13
+ @include media-breakpoint-up(sm) {
14
+
15
+ @each $var, $value in $varsSM {
16
+ #{$var}: #{$value};
17
+ }
18
+ }
19
+
13
20
  @include media-breakpoint-up(md) {
14
21
 
15
22
  @each $var, $value in $varsMD {
@@ -43,7 +50,7 @@
43
50
  }
44
51
 
45
52
  body .text-primary {
46
- color: white!important;
53
+ color: #{$colour-inverted}!important;
47
54
  }
48
55
 
49
56
  body .bg-white {
@@ -93,7 +100,7 @@
93
100
 
94
101
  @include invert-colours();
95
102
  }
96
- color: white;
103
+ color: #{$colour-inverted};
97
104
  }
98
105
 
99
106
  // Only update the the colour of the underline on dark backgrounds except the primary as the secondary colour looks good on it
@@ -102,7 +109,7 @@
102
109
  .bg-black:not(.prevent-invert),
103
110
  .invert-colours {
104
111
 
105
- --colour-underline: white;
112
+ --colour-underline: #{$colour-inverted};
106
113
  }
107
114
  }
108
115
 
@@ -116,8 +123,8 @@
116
123
 
117
124
  @include invert-colours();
118
125
  }
119
- color: white;
120
- --colour-underline: white;
126
+ color: #{$colour-inverted};
127
+ --colour-underline: #{$colour-inverted};
121
128
  }
122
129
 
123
130
  [class*="bg-"].bg-md-transparent {
@@ -1,3 +1,4 @@
1
+ @use "sass:map";
1
2
  @use "../_func.scss" as *;
2
3
 
3
4
  /* Duplicated from bootstrap reboot so that the type file will compile */
@@ -10,105 +11,123 @@ small {
10
11
  @include font-size($small-font-size);
11
12
  }
12
13
 
13
-
14
14
  @import "../../../node_modules/bootstrap/scss/_type.scss";
15
15
 
16
16
  // #region headings
17
17
  %heading {
18
- clear: both;
19
- @include var(font-weight,--heading-weight);
20
- @include var(font-family, --font-heading);
21
- @include var(color,--colour-heading);
22
- color: var(--colour-heading,var(--colour-primary));
23
- display: block;
24
- text-indent: -0.04em;
25
- letter-spacing: -0.01em;
26
-
18
+ // From bootstrap reboot
27
19
  margin-top: 0; // 1
28
20
  margin-bottom: $headings-margin-bottom;
21
+ font-family: $headings-font-family;
29
22
  font-style: $headings-font-style;
23
+ font-weight: $headings-font-weight;
30
24
  line-height: $headings-line-height;
25
+ color: $headings-color;
26
+ // END:Bootstap reboot
27
+ clear: both;
28
+ display: block;
29
+ padding-bottom: 2rem;
31
30
  }
32
31
 
33
- .h1 {
34
- @include font-size($h1-font-size);
32
+ @include is('h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6,.display-1,.display-2, .display-3, .display-4'){
33
+
34
+ @extend %heading;
35
35
  }
36
36
 
37
- .h2 {
38
- @include font-size($h2-font-size);
39
- }
37
+ :is(.h1, h1) {
38
+ font-size: rem(map-get($heading-sizes,"h1_fs"));
39
+ line-height: rem(map-get($heading-sizes,"h1_lh"));
40
+ padding-bottom: rem(map-get($heading-sizes,"h1_pb"));
40
41
 
41
- .h3 {
42
- @include font-size($h3-font-size);
43
- }
42
+ @include media-breakpoint-up(sm) {
44
43
 
45
- .h4 {
46
- @include font-size($h4-font-size);
44
+ font-size: rem(map-get($heading-sizes,"h1_fs_sm"));
45
+ line-height: rem(map-get($heading-sizes,"h1_lh_sm"));
46
+ padding-bottom: rem(map-get($heading-sizes,"h1_pb_sm"));
47
+ }
47
48
  }
48
49
 
49
- .h5 {
50
- @include font-size($h5-font-size);
51
- }
50
+ :is(h2, .h2) {
51
+ font-size: rem(map-get($heading-sizes,"h2_fs"));
52
+ line-height: rem(map-get($heading-sizes,"h2_lh"));
53
+ padding-bottom: rem(map-get($heading-sizes,"h1_pb"));
52
54
 
53
- .h6 {
54
- @include font-size($h6-font-size);
55
- }
55
+ @include media-breakpoint-up(sm) {
56
56
 
57
- @include is('h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6,.display-1,.display-2, .display-3, .display-4'){
58
-
59
- @extend %heading;
57
+ font-size: rem(map-get($heading-sizes,"h2_fs_sm"));
58
+ line-height: rem(map-get($heading-sizes,"h2_lh_sm"));
59
+ padding-bottom: rem(map-get($heading-sizes,"h2_pb_sm"));
60
+ }
60
61
  }
61
62
 
62
- @include is('.display-1,.display-2, .display-3, .display-4') {
63
+ :is(h3, .h3) {
64
+ font-size: rem(map-get($heading-sizes,"h3_fs"));
65
+ line-height: rem(map-get($heading-sizes,"h3_lh"));
66
+ padding-bottom: rem(map-get($heading-sizes,"h3_pb"));
67
+ max-width: var(--content-max-width);
68
+
69
+ @include media-breakpoint-up(sm) {
63
70
 
64
- font-size: var(--fs-display);
71
+ font-size: rem(map-get($heading-sizes,"h3_fs_sm"));
72
+ line-height: rem(map-get($heading-sizes,"h3_lh_sm"));
73
+ padding-bottom: rem(map-get($heading-sizes,"h3_pb_sm"));
74
+ }
65
75
  }
66
76
 
77
+ :is(.h4, h4, .h5, h5, .h6, h6) {
78
+ font-size: rem(map-get($heading-sizes,"h4_fs"));
79
+ line-height: rem(map-get($heading-sizes,"h4_lh"));
80
+ padding-bottom: rem(map-get($heading-sizes,"h4_pb"));
81
+ max-width: var(--content-max-width);
82
+
83
+ /* The values for mobile and tablet are exactly the same, but if that changes this block needs to be re-instated
84
+ @include media-breakpoint-up(sm) {
85
+
86
+ font-size: rem(map-get($heading-sizes,"h4_fs_sm"));
87
+ line-height: rem(map-get($heading-sizes,"h4_lh_sm"));
88
+ padding-bottom: rem(map-get($heading-sizes,"h4_pb_sm"));
89
+ }
90
+ */
91
+ }
67
92
  // #endregion
68
93
 
69
94
  p {
95
+ font-size: rem(map-get($heading-sizes,"body_fs"));
96
+ line-height: rem(map-get($heading-sizes,"body_lh"));
97
+ padding-bottom: rem(map-get($heading-sizes,"body_end_pb"));
70
98
  max-width: var(--content-max-width);
99
+ margin-bottom: 0;
71
100
  }
72
101
 
73
- p + p {
74
- margin-top: rem(-16);
102
+ p:has(+ p) {
103
+ padding-bottom: rem(map-get($heading-sizes,"body_pb"));
75
104
  }
76
105
 
77
- .strapline {
78
- @include var(font-size,--fs-strapline);
79
- @include var(font-family, --font-heading);
80
- @include var(color,--colour-secondary);
81
- line-height: 1.2;
106
+ @include is('.lead, .strapline'){
107
+ font-size: rem(map-get($heading-sizes,"lead_fs"));
108
+ line-height: rem(map-get($heading-sizes,"lead_lh"));
109
+ padding-bottom: rem(map-get($heading-sizes,"lead_pb"));
110
+ max-width: var(--content-max-width);
82
111
  font-weight: 700;
83
- margin-bottom: clamp(1rem,0.5em,0.5em);
84
- //text-shadow: ;
85
-
86
- h1 + &,
87
- .h1 + & {
88
- margin-top: -0.5rem;
89
- margin-bottom: 2rem;
90
- }
91
112
  }
92
113
 
93
- .lead {
94
- @include var(font-size,--fs-strapline);
95
- @include var(font-family, --font-heading);
96
- font-weight: 700;
97
- line-height: 1.2;
98
- margin-bottom: 3rem;
99
- @include var(color,--colour-heading);
114
+ .small {
115
+ font-size: rem(map-get($heading-sizes,"small_fs"));
116
+ line-height: rem(map-get($heading-sizes,"small_lh"));
117
+ padding-bottom: rem(map-get($heading-sizes,"small_pb"));
118
+ max-width: var(--content-max-width);
100
119
  }
101
120
 
102
121
  blockquote {
103
122
 
104
123
  quotes: "“" "”" "‘" "’";
105
- margin-bottom: 1rem;
124
+ padding-bottom: rem(48);
125
+ overflow: hidden;
106
126
 
107
127
  p {
108
- @include var(font-size,--fs-4);
109
- @include var(color,--colour-heading);
110
- margin-top: 0;
111
- margin-bottom: 1rem;
128
+ font-size: rem(24);
129
+ line-height: rem(32);
130
+ padding-bottom: 0;
112
131
  }
113
132
 
114
133
  & p:first-child:before {
@@ -119,19 +138,24 @@ blockquote {
119
138
  }
120
139
 
121
140
  cite {
122
- @include var(font-size,--fs-5);
123
- @include var(color,--colour-heading);
124
- font-style: normal;
141
+ font-size: rem(18);
142
+ line-height: rem(32);
143
+ padding-bottom: 0;
125
144
  font-weight: bold;
145
+ font-style: normal;
126
146
  }
127
147
  }
128
148
 
129
149
  .stat {
130
- font-size: rem(48);
131
- @extend %heading;
150
+ font-size: rem(64);
151
+ line-height: rem(72);
152
+ font-weight: bold;
153
+ color: $headings-color;
154
+ display: block;
155
+
132
156
  text-decoration: underline;
133
- text-underline-offset: 1rem;
157
+ text-underline-offset: 0.75rem;
134
158
  text-decoration-color: var(--colour-secondary);
135
- text-decoration-thickness: 0.4rem;
136
- margin-bottom: 2rem;
159
+ text-decoration-thickness: rem(4);
160
+ margin-bottom: rem(64);
137
161
  }
@@ -0,0 +1,12 @@
1
+ # Typescript files
2
+
3
+ ## Compilation
4
+
5
+ - **assets/ts/modules/{module}.ts** compiles to **assets/js/modules/{module}.js**
6
+ - **assets/ts/components/{component}.ts** compiles to **assets/js/components/{component}.component.js**
7
+ - **assets/ts/{filename}.ts** compiles to **assets/js/{filename}.js**
8
+
9
+ ## Rollup
10
+
11
+ - **assets/js/components/{component}.component.js** adds the @imports from the assets/js/modules folder and creates a combined file of **assets/js/components/{component}.component.min.js**
12
+ - **assets/js/bundle.js** adds the @imports from the assets/js/modules and assets/js/components folders to create a combined file of **assets/js/components/scripts.bundle.min.js**
@@ -0,0 +1,76 @@
1
+ // @ts-nocheck
2
+ // Modules
3
+ import * as helpers from '../js/modules/helpers'
4
+ import nav from '../js/modules/nav'
5
+ import table from '../js/modules/table'
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 modal from '../js/modules/modal'
12
+ import iamHeader from './components/header/header.component'
13
+ import iamAccordion from './components/accordion/accordion.component'
14
+ import iamTabs from './components/tabs/tabs.component'
15
+
16
+ // Attach classes to dom elements
17
+ document.addEventListener("DOMContentLoaded", function() {
18
+
19
+ // Global stuff
20
+ helpers.addBodyClasses(document.body);
21
+ helpers.addGlobalEvents(document.body);
22
+ helpers.checkElements(document.body);
23
+
24
+ if (!window.customElements.get(`iam-header`))
25
+ window.customElements.define(`iam-header`, iamHeader);
26
+
27
+ if (!window.customElements.get(`iam-accordion`))
28
+ window.customElements.define(`iam-accordion`, iamAccordion);
29
+
30
+ if (!window.customElements.get(`iam-tabs`))
31
+ window.customElements.define(`iam-tabs`, iamTabs);
32
+
33
+ // ANav
34
+ Array.from(document.querySelectorAll('.nav')).forEach((arrayElement) => {
35
+ nav(arrayElement);
36
+ });
37
+
38
+ // Advanced tables
39
+ Array.from(document.querySelectorAll('.table__wrapper')).forEach((arrayElement) => {
40
+ table(arrayElement);
41
+ });
42
+
43
+
44
+
45
+ // Testimonial
46
+ Array.from(document.querySelectorAll('.testimonial')).forEach((arrayElement) => {
47
+ testimonial(arrayElement);
48
+ });
49
+ // Carousel
50
+ Array.from(document.querySelectorAll('.carousel')).forEach((arrayElement) => {
51
+ carousel(arrayElement);
52
+ });
53
+ // Form
54
+ Array.from(document.querySelectorAll('form')).forEach((arrayElement) => {
55
+ form(arrayElement);
56
+ });
57
+ // Modal
58
+ Array.from(document.querySelectorAll('.modal')).forEach((arrayElement) => {
59
+ modal(arrayElement);
60
+ });
61
+ // YouTube videos
62
+ Array.from(document.querySelectorAll('.youtube-embed')).forEach((arrayElement) => {
63
+ new youtubeVideo(arrayElement);
64
+ });
65
+
66
+
67
+ window.addEventListener('hashchange', function() {
68
+
69
+ const hash = location.hash.replace('#','');
70
+ const label = document.querySelector(`label[for="${hash}"]`);
71
+
72
+ if (label instanceof HTMLElement)
73
+ label.click();
74
+
75
+ }, false);
76
+ });
@@ -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,36 @@
1
+ // @ts-nocheck
2
+ import accordion from "../../modules/accordion";
3
+
4
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets'
5
+
6
+ class iamAccordion extends HTMLElement {
7
+
8
+ constructor(){
9
+ super();
10
+ this.attachShadow({ mode: 'open'});
11
+
12
+
13
+ const template = document.createElement('template');
14
+ template.innerHTML = `
15
+ <style>
16
+ @import "${assetLocation}/css/core.min.css";
17
+ @import "${assetLocation}/css/components/accordion.css";
18
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
19
+ </style>
20
+ <div class="accordion">
21
+ <slot></slot>
22
+ </div>
23
+ `;
24
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
25
+ }
26
+
27
+ connectedCallback() {
28
+
29
+ accordion(this);
30
+
31
+ // Load in the component CSS into the root so we can style the content of the component
32
+ this.insertAdjacentHTML("beforebegin", `<link rel="stylesheet" href="${assetLocation}/css/components/accordion.css">`)
33
+ }
34
+ }
35
+
36
+ export default iamAccordion;
@@ -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,53 @@
1
+ // @ts-nocheck
2
+ class iamHeader 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/header.css";`;
10
+
11
+ const template = document.createElement('template');
12
+ template.innerHTML = `
13
+ <style>
14
+ @import "${assetLocation}/css/core.min.css";
15
+ ${loadCSS}
16
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
17
+ :host {
18
+ max-width:100%!important;
19
+ padding:0!important;
20
+ }
21
+ </style>
22
+ <div class="header-banner">
23
+ <div class="container" part="container">
24
+ <slot name="breadcrumb"></slot>
25
+ <div class="header-banner__inner">
26
+ <slot></slot>
27
+ </div>
28
+ </div>
29
+ <picture>
30
+ <!-- Actual image only loaded on desktops -->
31
+ <source srcset="" media="(min-width: 62em)">
32
+ <!-- Placeholder image -->
33
+ <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="" lazy="" />
34
+ </picture>
35
+ </div>
36
+ `;
37
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
38
+ }
39
+
40
+ connectedCallback() {
41
+
42
+ const picture = this.shadowRoot.querySelector('picture');
43
+ const source = this.shadowRoot.querySelector('picture source');
44
+
45
+ if(this.hasAttribute('image'))
46
+ source.setAttribute('srcset', this.getAttribute('image'));
47
+ else
48
+ picture.remove();
49
+
50
+ }
51
+ }
52
+
53
+ export default iamHeader;
@@ -0,0 +1,18 @@
1
+ ```
2
+ <iam-tabs class="container">
3
+ <details>
4
+ <summary>Question 1</summary>
5
+ <p>Answer </p>
6
+ </details>
7
+ <details>
8
+ <summary>Question 2</summary>
9
+ <p>Answer</p>
10
+ </details>
11
+ </iam-tabs>
12
+ ```
13
+
14
+ ### Tab Properties
15
+
16
+ | Option | Type | Default Value | Description |
17
+ | ------ | ---- | ------------- | ----------- |
18
+ | title | String | - | Used for the heading of the component |
@@ -0,0 +1,34 @@
1
+ // @ts-nocheck
2
+ import tabs from "../../modules/tabs";
3
+
4
+ class iamTabs extends HTMLElement {
5
+
6
+ constructor(){
7
+ super();
8
+ this.attachShadow({ mode: 'open'});
9
+
10
+ const assetLocation = document.body.hasAttribute('data-assets-location') ? document.body.getAttribute('data-assets-location') : '/assets';
11
+ const loadCSS = `@import "${assetLocation}/css/components/tabs.css";`;
12
+ const template = document.createElement('template');
13
+ template.innerHTML = `
14
+ <style>
15
+ @import "${assetLocation}/css/core.min.css";
16
+ ${loadCSS}
17
+
18
+ ${this.hasAttribute('css') ? `@import "${this.getAttribute('css')}";` : ``}
19
+ </style>
20
+ <div class="tabs">
21
+ <div class="tabs__links"></div>
22
+ <slot></slot>
23
+ </div>
24
+ `;
25
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
26
+ }
27
+
28
+ connectedCallback() {
29
+
30
+ tabs(this);
31
+ }
32
+ }
33
+
34
+ export default iamTabs;
@@ -0,0 +1,105 @@
1
+ // @ts-nocheck
2
+ // Modules
3
+ import * as helpers from '../js/modules/helpers'
4
+ import nav from '../js/modules/nav'
5
+ import table from '../js/modules/table'
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 modal from '../js/modules/modal'
12
+
13
+ const components = ['accordion','header','tabs'];
14
+ const prefix = "iam"
15
+ const options = {
16
+ rootMargin: '50px',
17
+ threshold: 0.1
18
+ }
19
+ const componentExt = ".component.js";
20
+
21
+ // Load components - Each component will load once the first of its type has been loaded
22
+ components.forEach((component) => {
23
+
24
+ if(document.getElementsByTagName(`${prefix}-${component}`).length === 0)
25
+ return;
26
+
27
+ let callback = (entries:any) => {
28
+ entries.forEach((entry:any) => {
29
+
30
+ if(entry.intersectionRatio > 0){
31
+
32
+ import(`./components/${component}/${component}${componentExt}`).then(module => {
33
+ if (!window.customElements.get(`${prefix}-${component}`))
34
+ window.customElements.define(`${prefix}-${component}`, module.default);
35
+ }).catch((err) => {
36
+ console.log(err.message);
37
+ });
38
+
39
+ intObserver.unobserve(entry.target);
40
+ }
41
+ });
42
+ };
43
+
44
+ const intObserver = new IntersectionObserver(callback, options);
45
+ intObserver.observe(document.getElementsByTagName(`${prefix}-${component}`)[0]);
46
+ });
47
+
48
+
49
+ // Attach classes to dom elements
50
+ document.addEventListener("DOMContentLoaded", function() {
51
+
52
+ // Global stuff
53
+ helpers.addBodyClasses(document.body);
54
+ helpers.addGlobalEvents(document.body);
55
+ helpers.checkElements(document.body);
56
+
57
+ // ANav
58
+ Array.from(document.querySelectorAll('.nav')).forEach((arrayElement) => {
59
+ nav(arrayElement);
60
+ });
61
+
62
+ // Advanced tables
63
+ Array.from(document.querySelectorAll('.table__wrapper')).forEach((arrayElement) => {
64
+ table(arrayElement);
65
+ });
66
+
67
+ // Accordions
68
+ /*
69
+ Array.from(document.querySelectorAll('.accordion')).forEach((arrayElement) => {
70
+ accordion(arrayElement);
71
+ });
72
+ */
73
+
74
+ // Testimonial
75
+ Array.from(document.querySelectorAll('.testimonial')).forEach((arrayElement) => {
76
+ testimonial(arrayElement);
77
+ });
78
+ // Carousel
79
+ Array.from(document.querySelectorAll('.carousel')).forEach((arrayElement) => {
80
+ carousel(arrayElement);
81
+ });
82
+ // Form
83
+ Array.from(document.querySelectorAll('form')).forEach((arrayElement) => {
84
+ form(arrayElement);
85
+ });
86
+ // Modal
87
+ Array.from(document.querySelectorAll('.modal')).forEach((arrayElement) => {
88
+ modal(arrayElement);
89
+ });
90
+ // YouTube videos
91
+ Array.from(document.querySelectorAll('.youtube-embed')).forEach((arrayElement) => {
92
+ new youtubeVideo(arrayElement);
93
+ });
94
+
95
+
96
+ window.addEventListener('hashchange', function() {
97
+
98
+ const hash = location.hash.replace('#','');
99
+ const label = document.querySelector(`label[for="${hash}"]`);
100
+
101
+ if (label instanceof HTMLElement)
102
+ label.click();
103
+
104
+ }, false);
105
+ });