@jungherz-de/glasskit-elements 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +263 -0
- package/dist/glasskit-elements.esm.js +1789 -0
- package/dist/glasskit-elements.js +1819 -0
- package/dist/glasskit-elements.min.js +1 -0
- package/package.json +43 -0
- package/src/base.js +181 -0
- package/src/components/buttons/glk-button.js +80 -0
- package/src/components/containers/glk-accordion-item.js +61 -0
- package/src/components/containers/glk-accordion.js +12 -0
- package/src/components/content/glk-avatar.js +58 -0
- package/src/components/content/glk-badge.js +37 -0
- package/src/components/content/glk-card.js +33 -0
- package/src/components/content/glk-divider.js +11 -0
- package/src/components/content/glk-status.js +35 -0
- package/src/components/content/glk-title.js +16 -0
- package/src/components/feedback/glk-modal.js +98 -0
- package/src/components/feedback/glk-progress.js +77 -0
- package/src/components/feedback/glk-toast.js +104 -0
- package/src/components/forms/glk-checkbox.js +103 -0
- package/src/components/forms/glk-input.js +138 -0
- package/src/components/forms/glk-radio.js +109 -0
- package/src/components/forms/glk-range.js +112 -0
- package/src/components/forms/glk-search.js +87 -0
- package/src/components/forms/glk-select.js +96 -0
- package/src/components/forms/glk-textarea.js +95 -0
- package/src/components/forms/glk-toggle.js +121 -0
- package/src/components/navigation/glk-nav.js +12 -0
- package/src/components/navigation/glk-pill.js +48 -0
- package/src/components/navigation/glk-tab-bar.js +31 -0
- package/src/components/navigation/glk-tab-item.js +74 -0
- package/src/index.js +38 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { GlkElement } from '../../base.js';
|
|
2
|
+
|
|
3
|
+
class GlkTabBar extends GlkElement {
|
|
4
|
+
render() {
|
|
5
|
+
const nav = this.createElement('nav', ['glass-tab-bar']);
|
|
6
|
+
nav.appendChild(document.createElement('slot'));
|
|
7
|
+
this._wrapper.appendChild(nav);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
setupEvents() {
|
|
11
|
+
// Listen for tab selection events from child glk-tab-item elements
|
|
12
|
+
this._onTabSelect = (e) => {
|
|
13
|
+
// Deactivate all other tabs
|
|
14
|
+
const items = this.querySelectorAll('glk-tab-item');
|
|
15
|
+
items.forEach(item => {
|
|
16
|
+
if (item !== e.target) {
|
|
17
|
+
item.removeAttribute('active');
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
this.emit('glk-tab-change', { tab: e.target });
|
|
21
|
+
};
|
|
22
|
+
this.addEventListener('glk-tab-select', this._onTabSelect);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
teardownEvents() {
|
|
26
|
+
this.removeEventListener('glk-tab-select', this._onTabSelect);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
customElements.define('glk-tab-bar', GlkTabBar);
|
|
31
|
+
export { GlkTabBar };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { GlkElement } from '../../base.js';
|
|
2
|
+
|
|
3
|
+
class GlkTabItem extends GlkElement {
|
|
4
|
+
static get observedAttributes() {
|
|
5
|
+
return ['label', 'active', 'badge'];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
render() {
|
|
9
|
+
this._btn = this.createElement('button', ['glass-tab-bar__item']);
|
|
10
|
+
if (this.getBoolAttr('active')) this._btn.classList.add('is-active');
|
|
11
|
+
|
|
12
|
+
// Icon slot
|
|
13
|
+
this._iconEl = this.createElement('span', ['glass-tab-bar__icon']);
|
|
14
|
+
this._iconEl.appendChild(document.createElement('slot'));
|
|
15
|
+
|
|
16
|
+
// Label
|
|
17
|
+
this._labelEl = this.createElement('span', ['glass-tab-bar__label']);
|
|
18
|
+
this._labelEl.textContent = this.getAttribute('label') || '';
|
|
19
|
+
|
|
20
|
+
this._btn.appendChild(this._iconEl);
|
|
21
|
+
this._btn.appendChild(this._labelEl);
|
|
22
|
+
|
|
23
|
+
// Badge (optional)
|
|
24
|
+
const badge = this.getAttribute('badge');
|
|
25
|
+
if (badge) {
|
|
26
|
+
this._badgeEl = this.createElement('span', ['glass-tab-bar__badge']);
|
|
27
|
+
this._badgeEl.textContent = badge;
|
|
28
|
+
this._btn.appendChild(this._badgeEl);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
this._wrapper.appendChild(this._btn);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
setupEvents() {
|
|
35
|
+
this._onClick = () => {
|
|
36
|
+
this.setAttribute('active', '');
|
|
37
|
+
this.emit('glk-tab-select');
|
|
38
|
+
};
|
|
39
|
+
this._btn.addEventListener('click', this._onClick);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
teardownEvents() {
|
|
43
|
+
this._btn?.removeEventListener('click', this._onClick);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
onAttributeChanged(name) {
|
|
47
|
+
if (!this._btn) return;
|
|
48
|
+
switch (name) {
|
|
49
|
+
case 'active':
|
|
50
|
+
this._btn.classList.toggle('is-active', this.getBoolAttr('active'));
|
|
51
|
+
break;
|
|
52
|
+
case 'label':
|
|
53
|
+
this._labelEl.textContent = this.getAttribute('label') || '';
|
|
54
|
+
break;
|
|
55
|
+
case 'badge': {
|
|
56
|
+
const badge = this.getAttribute('badge');
|
|
57
|
+
if (badge) {
|
|
58
|
+
if (!this._badgeEl) {
|
|
59
|
+
this._badgeEl = this.createElement('span', ['glass-tab-bar__badge']);
|
|
60
|
+
this._btn.appendChild(this._badgeEl);
|
|
61
|
+
}
|
|
62
|
+
this._badgeEl.textContent = badge;
|
|
63
|
+
} else if (this._badgeEl) {
|
|
64
|
+
this._badgeEl.remove();
|
|
65
|
+
this._badgeEl = null;
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
customElements.define('glk-tab-item', GlkTabItem);
|
|
74
|
+
export { GlkTabItem };
|
package/src/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// GlassKit Elements — Web Components for GlassKit CSS
|
|
2
|
+
// https://github.com/JUNGHERZ/GlassKit
|
|
3
|
+
|
|
4
|
+
// Navigation
|
|
5
|
+
export { GlkNav } from './components/navigation/glk-nav.js';
|
|
6
|
+
export { GlkPill } from './components/navigation/glk-pill.js';
|
|
7
|
+
export { GlkTabBar } from './components/navigation/glk-tab-bar.js';
|
|
8
|
+
export { GlkTabItem } from './components/navigation/glk-tab-item.js';
|
|
9
|
+
|
|
10
|
+
// Content
|
|
11
|
+
export { GlkCard } from './components/content/glk-card.js';
|
|
12
|
+
export { GlkBadge } from './components/content/glk-badge.js';
|
|
13
|
+
export { GlkAvatar } from './components/content/glk-avatar.js';
|
|
14
|
+
export { GlkTitle } from './components/content/glk-title.js';
|
|
15
|
+
export { GlkDivider } from './components/content/glk-divider.js';
|
|
16
|
+
export { GlkStatus } from './components/content/glk-status.js';
|
|
17
|
+
|
|
18
|
+
// Buttons
|
|
19
|
+
export { GlkButton } from './components/buttons/glk-button.js';
|
|
20
|
+
|
|
21
|
+
// Forms
|
|
22
|
+
export { GlkInput } from './components/forms/glk-input.js';
|
|
23
|
+
export { GlkTextarea } from './components/forms/glk-textarea.js';
|
|
24
|
+
export { GlkSelect } from './components/forms/glk-select.js';
|
|
25
|
+
export { GlkSearch } from './components/forms/glk-search.js';
|
|
26
|
+
export { GlkToggle } from './components/forms/glk-toggle.js';
|
|
27
|
+
export { GlkCheckbox } from './components/forms/glk-checkbox.js';
|
|
28
|
+
export { GlkRadio } from './components/forms/glk-radio.js';
|
|
29
|
+
export { GlkRange } from './components/forms/glk-range.js';
|
|
30
|
+
|
|
31
|
+
// Feedback
|
|
32
|
+
export { GlkProgress } from './components/feedback/glk-progress.js';
|
|
33
|
+
export { GlkModal } from './components/feedback/glk-modal.js';
|
|
34
|
+
export { GlkToast } from './components/feedback/glk-toast.js';
|
|
35
|
+
|
|
36
|
+
// Containers
|
|
37
|
+
export { GlkAccordion } from './components/containers/glk-accordion.js';
|
|
38
|
+
export { GlkAccordionItem } from './components/containers/glk-accordion-item.js';
|