@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
@@ -1,22 +1,23 @@
1
1
  // @ts-nocheck
2
2
  // Modules
3
- import * as helpers from './modules/helpers'
4
- import nav from './modules/nav'
5
- import table from './modules/table'
3
+ import * as helpers from '../js/modules/helpers'
4
+ import nav from '../js/modules/nav'
5
+ import table from '../js/modules/table'
6
6
  import accordion from './modules/accordion'
7
- import testimonial from './modules/testimonial'
8
- import carousel from './modules/carousel'
9
- import form from './modules/form'
10
- import youtubeVideo from './modules/youtubevideo'
11
- import modal from './modules/modal'
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 tabs from '../js/modules/tabs'
12
13
 
13
14
  // Attach classes to dom elements
14
15
  document.addEventListener("DOMContentLoaded", function() {
15
16
 
17
+ // Global stuff
16
18
  helpers.addBodyClasses(document.body);
17
19
  helpers.addGlobalEvents(document.body);
18
20
  helpers.checkElements(document.body);
19
- console.log('test.js');
20
21
 
21
22
  // ANav
22
23
  Array.from(document.querySelectorAll('.nav')).forEach((arrayElement) => {
@@ -53,6 +54,10 @@ document.addEventListener("DOMContentLoaded", function() {
53
54
  Array.from(document.querySelectorAll('.youtube-embed')).forEach((arrayElement) => {
54
55
  new youtubeVideo(arrayElement);
55
56
  });
57
+ // Tabs
58
+ Array.from(document.querySelectorAll('.tabs')).forEach((arrayElement) => {
59
+ tabs(arrayElement);
60
+ });
56
61
 
57
62
 
58
63
  window.addEventListener('hashchange', function() {
@@ -60,9 +65,8 @@ document.addEventListener("DOMContentLoaded", function() {
60
65
  const hash = location.hash.replace('#','');
61
66
  const label = document.querySelector(`label[for="${hash}"]`);
62
67
 
63
- if (label instanceof HTMLElement) {
68
+ if (label instanceof HTMLElement)
64
69
  label.click();
65
- }
66
70
 
67
71
  }, false);
68
72
  });
@@ -0,0 +1,4 @@
1
+ declare module '*.html' {
2
+ const value: string;
3
+ export default value
4
+ }
@@ -1,6 +1,21 @@
1
1
  // @ts-nocheck
2
2
  function accordion(accordionElement: Element) {
3
3
 
4
+ // Add classes to help with CSS
5
+ let details = accordionElement.querySelectorAll('details');
6
+ let summaries = accordionElement.querySelectorAll('summary');
7
+
8
+ details.forEach((detail) => {
9
+ detail.classList.add('accordion-item');
10
+ });
11
+
12
+ summaries.forEach((summary) => {
13
+ summary.classList.add('accordion-header');
14
+ summary.classList.add('accordion-button');
15
+ summary.classList.add('h4');
16
+ });
17
+
18
+
4
19
  // Fetch all the details element.
5
20
  if(!accordionElement.classList.contains('accordion--keep-open')){
6
21
 
@@ -18,27 +33,6 @@ function accordion(accordionElement: Element) {
18
33
  });
19
34
  });
20
35
  }
21
-
22
-
23
- if(window.location.hash && document.querySelector(window.location.hash+':not([open]) summary')) {
24
-
25
- const detail = document.querySelector(window.location.hash+' summary');
26
-
27
- if (detail instanceof HTMLElement) {
28
- detail.click();
29
- }
30
- }
31
-
32
- window.addEventListener('hashchange', function(){
33
- if(window.location.hash && document.querySelector(window.location.hash+' summary')) {
34
-
35
- const detail = document.querySelector(window.location.hash+' summary');
36
-
37
- if (detail instanceof HTMLElement) {
38
- detail.click();
39
- }
40
- }
41
- });
42
36
  }
43
37
 
44
38
  export default accordion
@@ -26,16 +26,24 @@
26
26
  */
27
27
  export const addGlobalEvents = (body) => {
28
28
 
29
+ if(location.hash && document.querySelector(location.hash+':not([open]) summary')) {
30
+
31
+ const summary = document.querySelector(location.hash+' summary');
32
+
33
+ if (summary instanceof HTMLElement)
34
+ summary.click();
35
+ }
36
+
29
37
  window.addEventListener('hashchange', function() {
30
38
 
31
39
  const hash = location.hash.replace('#','');
32
40
  const label = document.querySelector(`label[for="${hash}"]`);
33
- const detail = document.querySelector(`details[id="${hash}"]:not([open])`);
41
+ const summary = document.querySelector(location.hash+' summary');
34
42
 
35
- if(label)
43
+ if(label instanceof HTMLElement)
36
44
  label.click();
37
- else if(detail)
38
- detail.setAttribute('open','open');
45
+ else if(summary instanceof HTMLElement)
46
+ summary.click();
39
47
 
40
48
  }, false);
41
49
 
@@ -0,0 +1,129 @@
1
+ // @ts-nocheck
2
+ export const createTabsLinks = function(tabsElement: Element) {
3
+
4
+ const details = tabsElement.querySelectorAll(':scope > details');
5
+ let summaries = tabsElement.querySelectorAll(':scope > details > summary');
6
+ let tabLinks = tabsElement.querySelector(':scope > .tabs__links');
7
+
8
+ if(tabsElement.shadowRoot && tabsElement.shadowRoot.querySelector('.tabs__links'))
9
+ tabLinks = tabsElement.shadowRoot.querySelector('.tabs__links');
10
+
11
+ if(!tabLinks){
12
+ tabLinks = document.createElement('div');
13
+ tabLinks.classList.add('tabs__links');
14
+
15
+ tabsElement.prepend(tabLinks);
16
+ }
17
+
18
+ // Create the tab buttons from the summary titles
19
+ details.forEach((detail, index) => {
20
+
21
+ let summary = detail.querySelector(':scope > summary');
22
+ summary.classList.add('visually-hidden');
23
+
24
+ let button = document.createElement('button');
25
+ if(detail.hasAttribute('id')){
26
+
27
+ button = document.createElement('a');
28
+ button.setAttribute('href',`#${detail.getAttribute('id')}`);
29
+ }
30
+
31
+ if(detail.hasAttribute('open')){
32
+ button.setAttribute('aria-pressed',true);
33
+ }
34
+
35
+ button.innerHTML = `${summary.innerText}`;
36
+ button.classList.add('link');
37
+ button.setAttribute('data-index',index);
38
+ button.setAttribute('tabindex','-1');
39
+
40
+ tabLinks.appendChild(button);
41
+ });
42
+
43
+ }
44
+
45
+ export const setTabsEventHandlers = function(tabsElement: Element){
46
+
47
+ let details = tabsElement.querySelectorAll(':scope > details');
48
+ let summaries = tabsElement.querySelectorAll(':scope > details > summary');
49
+ let buttons = tabsElement.querySelectorAll(':scope > .tabs__links > button, .tabs__links > a');
50
+
51
+ if(tabsElement.shadowRoot)
52
+ buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button, .tabs__links > a');
53
+
54
+ // Set the on click for the tab buttons, these will open the details box it matches too
55
+ buttons.forEach((button) => {
56
+
57
+ button.addEventListener("click", (e) => {
58
+ e.preventDefault();
59
+ buttons.forEach((buttonLoopItem) => {
60
+
61
+ let buttonPressed = buttonLoopItem == button ? true : false;
62
+ buttonLoopItem.setAttribute('aria-pressed', buttonPressed);
63
+ });
64
+ details.forEach((detail, detailsIndex) => {
65
+
66
+ let detailsOpen = button.getAttribute('data-index') == detailsIndex ? true : false;
67
+
68
+ if(detailsOpen)
69
+ detail.setAttribute('open', detailsOpen);
70
+ else
71
+ detail.removeAttribute('open')
72
+ });
73
+
74
+ if(button.hasAttribute('href'))
75
+ history.pushState(undefined, undefined, button.getAttribute('href'))
76
+ });
77
+
78
+ });
79
+
80
+ // Make sure we dont loose existing summary functionality
81
+ summaries.forEach((summary, index) => {
82
+
83
+ // Maintain the focus on the summary element but visually highlight the tab button
84
+ summary.addEventListener("focus", (e) => {
85
+
86
+ buttons.forEach((button) => {
87
+
88
+ button.classList.remove('focus');
89
+ });
90
+ buttons[index].classList.add('focus');
91
+ });
92
+ summary.addEventListener("click", (e) => {
93
+
94
+ e.preventDefault();
95
+ buttons[index].click();
96
+ });
97
+ });
98
+
99
+ }
100
+
101
+ export const openFirstTab = function(tabsElement: Element){
102
+
103
+ let details = tabsElement.querySelectorAll(':scope > details');
104
+ let buttons = tabsElement.querySelectorAll(':scope > .tabs__links > button, .tabs__links > a');
105
+
106
+ if(tabsElement.shadowRoot)
107
+ buttons = tabsElement.shadowRoot.querySelectorAll('.tabs__links > button, .tabs__links > a');
108
+
109
+ if(location.hash && tabsElement.querySelector(`.tabs__links [href="${location.hash}"]`)){
110
+
111
+ tabsElement.querySelector(`[href="${location.hash}"]`).setAttribute('open',true);
112
+ tabsElement.querySelector(`details[id="${location.hash.replace('#','')}"]`).setAttribute('open',true);
113
+ }
114
+ else if(!tabsElement.querySelector(`details[open]`)) {
115
+
116
+ details[0].setAttribute('open',true);
117
+ buttons[0].setAttribute('aria-pressed',true);
118
+ }
119
+
120
+ }
121
+
122
+ const tabs = function(tabsElement: Element){
123
+
124
+ createTabsLinks(tabsElement);
125
+ setTabsEventHandlers(tabsElement);
126
+ openFirstTab(tabsElement);
127
+ }
128
+
129
+ export default tabs