@iamproperty/components 3.4.4 → 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.
- package/README.md +30 -66
- package/assets/css/components/accordion.css +1 -0
- package/assets/css/components/accordion.css.map +1 -0
- package/assets/css/components/alert.css +1 -0
- package/assets/css/components/alert.css.map +1 -0
- package/assets/css/components/buttons.css +1 -0
- package/assets/css/components/buttons.css.map +1 -0
- package/assets/css/components/card.css +1 -0
- package/assets/css/components/card.css.map +1 -0
- package/assets/css/components/cardDeck.css +1 -0
- package/assets/css/components/cardDeck.css.map +1 -0
- package/assets/css/components/carousel.css +1 -0
- package/assets/css/components/carousel.css.map +1 -0
- package/assets/css/components/charts.css +1 -0
- package/assets/css/components/charts.css.map +1 -0
- package/assets/css/components/container.css +1 -0
- package/assets/css/components/container.css.map +1 -0
- package/assets/css/components/forms.css +1 -0
- package/assets/css/components/forms.css.map +1 -0
- package/assets/css/components/header.css +1 -0
- package/assets/css/components/header.css.map +1 -0
- package/assets/css/components/links.css +1 -0
- package/assets/css/components/links.css.map +1 -0
- package/assets/css/components/lists.css +1 -0
- package/assets/css/components/lists.css.map +1 -0
- package/assets/css/components/modal.css +1 -0
- package/assets/css/components/modal.css.map +1 -0
- package/assets/css/components/nav.css +1 -0
- package/assets/css/components/nav.css.map +1 -0
- package/assets/css/components/panel.css +1 -0
- package/assets/css/components/panel.css.map +1 -0
- package/assets/css/components/property-searchbar.css +1 -0
- package/assets/css/components/property-searchbar.css.map +1 -0
- package/assets/css/components/snapshot.css +1 -0
- package/assets/css/components/snapshot.css.map +1 -0
- package/assets/css/components/stepper.css +1 -0
- package/assets/css/components/stepper.css.map +1 -0
- package/assets/css/components/tables.css +1 -0
- package/assets/css/components/tables.css.map +1 -0
- package/assets/css/components/tabs.css +1 -0
- package/assets/css/components/tabs.css.map +1 -0
- package/assets/css/components/testimonial.css +1 -0
- package/assets/css/components/testimonial.css.map +1 -0
- package/assets/css/components/timeline.css +1 -0
- package/assets/css/components/timeline.css.map +1 -0
- package/assets/css/components/tooltips.css +1 -0
- package/assets/css/components/tooltips.css.map +1 -0
- package/assets/css/core.min.css +1 -1
- package/assets/css/core.min.css.map +1 -1
- package/assets/css/style.min.css +1 -1
- package/assets/css/style.min.css.map +1 -1
- package/assets/fonts/qanelas-bold-webfont.woff +0 -0
- package/assets/fonts/qanelas-bold-webfont.woff2 +0 -0
- package/assets/js/bundle.js +61 -0
- package/assets/js/components/accordion/accordion.component.js +27 -0
- package/assets/js/components/accordion/accordion.component.min.js +14 -0
- package/assets/js/components/accordion/accordion.component.min.js.map +1 -0
- package/assets/js/components/header/header.component.js +45 -0
- package/assets/js/components/header/header.component.min.js +30 -0
- package/assets/js/components/header/header.component.min.js.map +1 -0
- package/assets/js/components/tabs/tabs.component.js +28 -0
- package/assets/js/dynamic.js +85 -0
- package/assets/js/dynamic.min.js +56 -0
- package/assets/js/dynamic.min.js.map +1 -0
- package/assets/js/{main.js → flat-components.js} +15 -11
- package/assets/js/modules/accordion.js +11 -14
- package/assets/js/modules/helpers.js +9 -4
- package/assets/js/modules/tabs.js +91 -0
- package/assets/js/scripts.bundle.js +92 -980
- package/assets/js/scripts.bundle.js.map +1 -1
- package/assets/js/scripts.bundle.min.js +3 -4
- package/assets/js/scripts.bundle.min.js.map +1 -1
- package/assets/sass/_fonts.scss +4 -4
- package/assets/sass/_func.scss +1 -0
- package/assets/sass/_functions/functions.scss +6 -0
- package/assets/sass/_functions/mixins.scss +9 -9
- package/assets/sass/_functions/variables.scss +96 -68
- package/assets/sass/_tests/mixins.spec.scss +1 -1
- package/assets/sass/_tests/typography.spec.scss +2 -2
- package/assets/sass/components/accordion.scss +9 -6
- package/assets/sass/components/card.scss +7 -0
- package/assets/sass/components/container.scss +6 -6
- package/assets/sass/components/forms.scss +2 -0
- package/assets/sass/components/header.scss +34 -11
- package/assets/sass/components/links.scss +3 -2
- package/assets/sass/components/panel.scss +3 -4
- package/assets/sass/components/snapshot.scss +1 -1
- package/assets/sass/components/tabs.scss +52 -36
- package/assets/sass/components/timeline.scss +2 -2
- package/assets/sass/foundations/reboot.scss +2 -2
- package/assets/sass/foundations/root.scss +12 -5
- package/assets/sass/foundations/type.scss +90 -66
- package/assets/ts/README.md +12 -0
- package/assets/ts/bundle.ts +76 -0
- package/assets/ts/components/accordion/README.md +17 -0
- package/assets/ts/components/accordion/accordion.component.ts +36 -0
- package/assets/ts/components/header/README.md +26 -0
- package/assets/ts/components/header/header.component.ts +53 -0
- package/assets/ts/components/tabs/README.md +18 -0
- package/assets/ts/components/tabs/tabs.component.ts +34 -0
- package/assets/ts/dynamic.ts +105 -0
- package/assets/ts/{main.ts → flat-components.ts} +15 -11
- package/assets/ts/html.d.ts +4 -0
- package/assets/ts/modules/accordion.ts +15 -21
- package/assets/ts/modules/helpers.ts +12 -4
- package/assets/ts/modules/tabs.ts +129 -0
- package/dist/components.es.js +845 -873
- package/dist/components.umd.js +63 -19
- package/dist/style.css +1 -1
- package/package.json +19 -10
- package/src/components/Accordion/Accordion.spec.js +1 -1
- package/src/components/Accordion/Accordion.vue +7 -5
- package/src/components/Accordion/AccordionItem.vue +3 -6
- package/src/components/Accordion/README.md +0 -2
- package/src/components/Header/Header.spec.js +5 -4
- package/src/components/Header/Header.vue +14 -20
- package/src/components/Snapshot/Snapshot.vue +1 -1
- package/src/components/Tabs/README.md +0 -2
- package/src/components/Tabs/Tab.vue +3 -2
- package/src/components/Tabs/Tabs.vue +8 -64
- package/src/index.js +0 -1
- package/assets/fonts/qanelassoft-extrabold-webfont.woff +0 -0
- package/assets/fonts/qanelassoft-extrabold-webfont.woff2 +0 -0
- package/assets/sass/components/drawer.scss +0 -47
- package/src/components/Drawer/Drawer.vue +0 -53
- package/src/components/Drawer/README.md +0 -23
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
// Modules
|
|
3
|
-
import * as helpers from '
|
|
4
|
-
import nav from '
|
|
5
|
-
import table from '
|
|
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 '
|
|
8
|
-
import carousel from '
|
|
9
|
-
import form from '
|
|
10
|
-
import youtubeVideo from '
|
|
11
|
-
import modal from '
|
|
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
|
});
|
|
@@ -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
|
|
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(
|
|
38
|
-
|
|
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
|