@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.
Files changed (32) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +263 -0
  3. package/dist/glasskit-elements.esm.js +1789 -0
  4. package/dist/glasskit-elements.js +1819 -0
  5. package/dist/glasskit-elements.min.js +1 -0
  6. package/package.json +43 -0
  7. package/src/base.js +181 -0
  8. package/src/components/buttons/glk-button.js +80 -0
  9. package/src/components/containers/glk-accordion-item.js +61 -0
  10. package/src/components/containers/glk-accordion.js +12 -0
  11. package/src/components/content/glk-avatar.js +58 -0
  12. package/src/components/content/glk-badge.js +37 -0
  13. package/src/components/content/glk-card.js +33 -0
  14. package/src/components/content/glk-divider.js +11 -0
  15. package/src/components/content/glk-status.js +35 -0
  16. package/src/components/content/glk-title.js +16 -0
  17. package/src/components/feedback/glk-modal.js +98 -0
  18. package/src/components/feedback/glk-progress.js +77 -0
  19. package/src/components/feedback/glk-toast.js +104 -0
  20. package/src/components/forms/glk-checkbox.js +103 -0
  21. package/src/components/forms/glk-input.js +138 -0
  22. package/src/components/forms/glk-radio.js +109 -0
  23. package/src/components/forms/glk-range.js +112 -0
  24. package/src/components/forms/glk-search.js +87 -0
  25. package/src/components/forms/glk-select.js +96 -0
  26. package/src/components/forms/glk-textarea.js +95 -0
  27. package/src/components/forms/glk-toggle.js +121 -0
  28. package/src/components/navigation/glk-nav.js +12 -0
  29. package/src/components/navigation/glk-pill.js +48 -0
  30. package/src/components/navigation/glk-tab-bar.js +31 -0
  31. package/src/components/navigation/glk-tab-item.js +74 -0
  32. 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';