@orange-halo/components 1.0.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 (138) hide show
  1. package/custom-elements.json +186 -0
  2. package/dist/base.d.ts +30 -0
  3. package/dist/base.d.ts.map +1 -0
  4. package/dist/base.js +78 -0
  5. package/dist/base.js.map +1 -0
  6. package/dist/index.d.ts +83 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +72 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/oh-accordion.d.ts +47 -0
  11. package/dist/oh-accordion.d.ts.map +1 -0
  12. package/dist/oh-accordion.js +387 -0
  13. package/dist/oh-accordion.js.map +1 -0
  14. package/dist/oh-alert.d.ts +48 -0
  15. package/dist/oh-alert.d.ts.map +1 -0
  16. package/dist/oh-alert.js +343 -0
  17. package/dist/oh-alert.js.map +1 -0
  18. package/dist/oh-badge.d.ts +38 -0
  19. package/dist/oh-badge.d.ts.map +1 -0
  20. package/dist/oh-badge.js +176 -0
  21. package/dist/oh-badge.js.map +1 -0
  22. package/dist/oh-breadcrumb.d.ts +39 -0
  23. package/dist/oh-breadcrumb.d.ts.map +1 -0
  24. package/dist/oh-breadcrumb.js +277 -0
  25. package/dist/oh-breadcrumb.js.map +1 -0
  26. package/dist/oh-button.d.ts +62 -0
  27. package/dist/oh-button.d.ts.map +1 -0
  28. package/dist/oh-button.figma.d.ts +2 -0
  29. package/dist/oh-button.figma.d.ts.map +1 -0
  30. package/dist/oh-button.figma.js +20 -0
  31. package/dist/oh-button.figma.js.map +1 -0
  32. package/dist/oh-button.js +490 -0
  33. package/dist/oh-button.js.map +1 -0
  34. package/dist/oh-card.d.ts +44 -0
  35. package/dist/oh-card.d.ts.map +1 -0
  36. package/dist/oh-card.js +340 -0
  37. package/dist/oh-card.js.map +1 -0
  38. package/dist/oh-checkbox-group.d.ts +39 -0
  39. package/dist/oh-checkbox-group.d.ts.map +1 -0
  40. package/dist/oh-checkbox-group.figma.d.ts +2 -0
  41. package/dist/oh-checkbox-group.figma.d.ts.map +1 -0
  42. package/dist/oh-checkbox-group.figma.js +24 -0
  43. package/dist/oh-checkbox-group.figma.js.map +1 -0
  44. package/dist/oh-checkbox-group.js +309 -0
  45. package/dist/oh-checkbox-group.js.map +1 -0
  46. package/dist/oh-checkbox.d.ts +50 -0
  47. package/dist/oh-checkbox.d.ts.map +1 -0
  48. package/dist/oh-checkbox.js +315 -0
  49. package/dist/oh-checkbox.js.map +1 -0
  50. package/dist/oh-cluster.d.ts +38 -0
  51. package/dist/oh-cluster.d.ts.map +1 -0
  52. package/dist/oh-cluster.js +141 -0
  53. package/dist/oh-cluster.js.map +1 -0
  54. package/dist/oh-container.d.ts +38 -0
  55. package/dist/oh-container.d.ts.map +1 -0
  56. package/dist/oh-container.js +116 -0
  57. package/dist/oh-container.js.map +1 -0
  58. package/dist/oh-drawer.d.ts +66 -0
  59. package/dist/oh-drawer.d.ts.map +1 -0
  60. package/dist/oh-drawer.js +284 -0
  61. package/dist/oh-drawer.js.map +1 -0
  62. package/dist/oh-footer.d.ts +40 -0
  63. package/dist/oh-footer.d.ts.map +1 -0
  64. package/dist/oh-footer.js +112 -0
  65. package/dist/oh-footer.js.map +1 -0
  66. package/dist/oh-grid.d.ts +40 -0
  67. package/dist/oh-grid.d.ts.map +1 -0
  68. package/dist/oh-grid.js +168 -0
  69. package/dist/oh-grid.js.map +1 -0
  70. package/dist/oh-hero.d.ts +28 -0
  71. package/dist/oh-hero.d.ts.map +1 -0
  72. package/dist/oh-hero.js +242 -0
  73. package/dist/oh-hero.js.map +1 -0
  74. package/dist/oh-icon.d.ts +44 -0
  75. package/dist/oh-icon.d.ts.map +1 -0
  76. package/dist/oh-icon.js +321 -0
  77. package/dist/oh-icon.js.map +1 -0
  78. package/dist/oh-input.d.ts +56 -0
  79. package/dist/oh-input.d.ts.map +1 -0
  80. package/dist/oh-input.figma.d.ts +2 -0
  81. package/dist/oh-input.figma.d.ts.map +1 -0
  82. package/dist/oh-input.figma.js +36 -0
  83. package/dist/oh-input.figma.js.map +1 -0
  84. package/dist/oh-input.js +320 -0
  85. package/dist/oh-input.js.map +1 -0
  86. package/dist/oh-link.d.ts +45 -0
  87. package/dist/oh-link.d.ts.map +1 -0
  88. package/dist/oh-link.js +392 -0
  89. package/dist/oh-link.js.map +1 -0
  90. package/dist/oh-modal.d.ts +54 -0
  91. package/dist/oh-modal.d.ts.map +1 -0
  92. package/dist/oh-modal.js +450 -0
  93. package/dist/oh-modal.js.map +1 -0
  94. package/dist/oh-navbar.d.ts +49 -0
  95. package/dist/oh-navbar.d.ts.map +1 -0
  96. package/dist/oh-navbar.js +185 -0
  97. package/dist/oh-navbar.js.map +1 -0
  98. package/dist/oh-progress.d.ts +56 -0
  99. package/dist/oh-progress.d.ts.map +1 -0
  100. package/dist/oh-progress.js +299 -0
  101. package/dist/oh-progress.js.map +1 -0
  102. package/dist/oh-radio-group.d.ts +43 -0
  103. package/dist/oh-radio-group.d.ts.map +1 -0
  104. package/dist/oh-radio-group.figma.d.ts +2 -0
  105. package/dist/oh-radio-group.figma.d.ts.map +1 -0
  106. package/dist/oh-radio-group.figma.js +22 -0
  107. package/dist/oh-radio-group.figma.js.map +1 -0
  108. package/dist/oh-radio-group.js +324 -0
  109. package/dist/oh-radio-group.js.map +1 -0
  110. package/dist/oh-radio.d.ts +50 -0
  111. package/dist/oh-radio.d.ts.map +1 -0
  112. package/dist/oh-radio.js +314 -0
  113. package/dist/oh-radio.js.map +1 -0
  114. package/dist/oh-select.d.ts +82 -0
  115. package/dist/oh-select.d.ts.map +1 -0
  116. package/dist/oh-select.js +638 -0
  117. package/dist/oh-select.js.map +1 -0
  118. package/dist/oh-skip-link.d.ts +37 -0
  119. package/dist/oh-skip-link.d.ts.map +1 -0
  120. package/dist/oh-skip-link.js +145 -0
  121. package/dist/oh-skip-link.js.map +1 -0
  122. package/dist/oh-stack.d.ts +36 -0
  123. package/dist/oh-stack.d.ts.map +1 -0
  124. package/dist/oh-stack.js +112 -0
  125. package/dist/oh-stack.js.map +1 -0
  126. package/dist/oh-tabs.d.ts +85 -0
  127. package/dist/oh-tabs.d.ts.map +1 -0
  128. package/dist/oh-tabs.js +417 -0
  129. package/dist/oh-tabs.js.map +1 -0
  130. package/dist/oh-toggle.d.ts +51 -0
  131. package/dist/oh-toggle.d.ts.map +1 -0
  132. package/dist/oh-toggle.js +219 -0
  133. package/dist/oh-toggle.js.map +1 -0
  134. package/dist/styles/typography.d.ts +15 -0
  135. package/dist/styles/typography.d.ts.map +1 -0
  136. package/dist/styles/typography.js +235 -0
  137. package/dist/styles/typography.js.map +1 -0
  138. package/package.json +140 -0
@@ -0,0 +1,145 @@
1
+ /**
2
+ * oh-skip-link
3
+ *
4
+ * Accessibility skip link for keyboard navigation.
5
+ *
6
+ * DESIGN DECISIONS:
7
+ * ─────────────────
8
+ * 1. ACCESSIBILITY FIRST
9
+ * - Hidden until Tab focus
10
+ * - High contrast focus state
11
+ * - Semantic anchor link
12
+ *
13
+ * 2. POSITIONING
14
+ * - Fixed top-left position
15
+ * - Smooth transition on focus
16
+ * - Z-index above other content
17
+ *
18
+ * 3. STYLING
19
+ * - Warm orange focus state
20
+ * - Chunky padding and border
21
+ * - Clear typography
22
+ *
23
+ * @element oh-skip-link
24
+ */
25
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
26
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
29
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
30
+ };
31
+ import { html, css } from "lit";
32
+ import { customElement, property } from "lit/decorators.js";
33
+ import { OhElement, baseStyles } from "./base.js";
34
+ let OhSkipLink = class OhSkipLink extends OhElement {
35
+ constructor() {
36
+ super(...arguments);
37
+ this.href = "#main";
38
+ this.text = "Skip to main content";
39
+ }
40
+ static { this.styles = [
41
+ baseStyles,
42
+ css `
43
+ /* ═══════════════════════════════════════════════════════════════
44
+ ORANGE HALO SKIP LINK
45
+ Accessibility • Keyboard Navigation • Hidden until focus
46
+ ═══════════════════════════════════════════════════════════════ */
47
+
48
+ :host {
49
+ display: contents;
50
+ }
51
+
52
+ .skip-link {
53
+ position: fixed;
54
+ top: var(--oh-spacing-4);
55
+ left: var(--oh-spacing-4);
56
+ z-index: 10000;
57
+
58
+ /* Hidden by default */
59
+ opacity: 0;
60
+ transform: translateY(-100%);
61
+ pointer-events: none;
62
+
63
+ /* Smooth transition */
64
+ transition:
65
+ opacity var(--oh-motion-gentle, 200ms) ease,
66
+ transform var(--oh-motion-gentle, 200ms) ease;
67
+
68
+ /* Link styling */
69
+ display: inline-block;
70
+ padding: var(--oh-spacing-2) var(--oh-spacing-4);
71
+ background-color: var(--oh-color-surface-base);
72
+ border: var(--oh-input-base-border-width, 2.5px) solid var(--oh-color-border-emphasis);
73
+ border-radius: var(--oh-radius-md);
74
+ box-shadow: 4px 4px 0 0 rgba(107, 93, 77, 0.15);
75
+
76
+ font-family: var(--oh-font-family-sans);
77
+ font-size: var(--oh-font-size-base);
78
+ font-weight: var(--oh-font-weight-medium);
79
+ color: var(--oh-color-text-link);
80
+ text-decoration: none;
81
+
82
+ /* Focus state */
83
+ transition:
84
+ opacity var(--oh-motion-gentle, 200ms) ease,
85
+ transform var(--oh-motion-gentle, 200ms) ease,
86
+ background-color var(--oh-motion-quick, 120ms) ease,
87
+ border-color var(--oh-motion-quick, 120ms) ease,
88
+ box-shadow var(--oh-motion-snappy, 150ms) ease;
89
+ }
90
+
91
+ .skip-link:focus {
92
+ outline: none;
93
+ opacity: 1;
94
+ transform: translateY(0);
95
+ pointer-events: auto;
96
+ background-color: var(--oh-color-surface-raised);
97
+ border-color: var(--oh-color-brand-primary);
98
+ box-shadow: 4px 4px 0 0 var(--oh-shadow-primary);
99
+ }
100
+
101
+ /* Screen reader only when not focused */
102
+ .skip-link:not(:focus) {
103
+ clip: rect(0 0 0 0);
104
+ clip-path: inset(50%);
105
+ height: 1px;
106
+ overflow: hidden;
107
+ position: absolute;
108
+ white-space: nowrap;
109
+ width: 1px;
110
+ }
111
+
112
+ /* ═══════════════════════════════════════════════════════════════
113
+ REDUCED MOTION
114
+ ═══════════════════════════════════════════════════════════════ */
115
+
116
+ @media (prefers-reduced-motion: reduce) {
117
+ .skip-link {
118
+ transition-duration: 0.01ms !important;
119
+ }
120
+ }
121
+ `,
122
+ ]; }
123
+ render() {
124
+ return html `
125
+ <a
126
+ class="skip-link"
127
+ href=${this.href}
128
+ aria-label=${this.text}
129
+ >
130
+ ${this.text}
131
+ </a>
132
+ `;
133
+ }
134
+ };
135
+ __decorate([
136
+ property({ type: String })
137
+ ], OhSkipLink.prototype, "href", void 0);
138
+ __decorate([
139
+ property({ type: String })
140
+ ], OhSkipLink.prototype, "text", void 0);
141
+ OhSkipLink = __decorate([
142
+ customElement("oh-skip-link")
143
+ ], OhSkipLink);
144
+ export { OhSkipLink };
145
+ //# sourceMappingURL=oh-skip-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oh-skip-link.js","sourceRoot":"","sources":["../src/oh-skip-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG3C,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,SAAS;IAAlC;;QAsFL,SAAI,GAAG,OAAO,CAAC;QAGf,SAAI,GAAG,sBAAsB,CAAC;IAahC,CAAC;aArGiB,WAAM,GAAG;QACvB,UAAU;QACV,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+EF;KACF,AAlFqB,CAkFpB;IAQF,MAAM;QACJ,OAAO,IAAI,CAAA;;;eAGA,IAAI,CAAC,IAAI;qBACH,IAAI,CAAC,IAAI;;UAEpB,IAAI,CAAC,IAAI;;KAEd,CAAC;IACJ,CAAC;;AAfD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACZ;AAGf;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACG;AAzFnB,UAAU;IADtB,aAAa,CAAC,cAAc,CAAC;GACjB,UAAU,CAsGtB"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * oh-stack
3
+ *
4
+ * Vertical spacing between children.
5
+ * Creates consistent vertical rhythm without manual margins.
6
+ *
7
+ * DESIGN DECISIONS:
8
+ * ─────────────────
9
+ * 1. SPACING SCALE
10
+ * - Uses design token spacing values
11
+ * - xs: 4px, sm: 8px, md: 16px, lg: 24px, xl: 32px, 2xl: 48px
12
+ *
13
+ * 2. FLEX COLUMN LAYOUT
14
+ * - Simple vertical stacking
15
+ * - Gap property for consistent spacing
16
+ *
17
+ * 3. ALIGNMENT OPTIONS
18
+ * - start, center, end, stretch
19
+ *
20
+ * @element oh-stack
21
+ */
22
+ import { OhElement } from "./base.js";
23
+ export type StackGap = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
24
+ export type StackAlign = "start" | "center" | "end" | "stretch";
25
+ export declare class OhStack extends OhElement {
26
+ static styles: import("lit").CSSResult[];
27
+ gap: StackGap;
28
+ align: StackAlign;
29
+ render(): import("lit").TemplateResult<1>;
30
+ }
31
+ declare global {
32
+ interface HTMLElementTagNameMap {
33
+ "oh-stack": OhStack;
34
+ }
35
+ }
36
+ //# sourceMappingURL=oh-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oh-stack.d.ts","sourceRoot":"","sources":["../src/oh-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AACzE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEhE,qBACa,OAAQ,SAAQ,SAAS;IACpC,OAAgB,MAAM,4BA4DpB;IAGF,GAAG,EAAE,QAAQ,CAAQ;IAGrB,KAAK,EAAE,UAAU,CAAa;IAE9B,MAAM;CAGP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * oh-stack
3
+ *
4
+ * Vertical spacing between children.
5
+ * Creates consistent vertical rhythm without manual margins.
6
+ *
7
+ * DESIGN DECISIONS:
8
+ * ─────────────────
9
+ * 1. SPACING SCALE
10
+ * - Uses design token spacing values
11
+ * - xs: 4px, sm: 8px, md: 16px, lg: 24px, xl: 32px, 2xl: 48px
12
+ *
13
+ * 2. FLEX COLUMN LAYOUT
14
+ * - Simple vertical stacking
15
+ * - Gap property for consistent spacing
16
+ *
17
+ * 3. ALIGNMENT OPTIONS
18
+ * - start, center, end, stretch
19
+ *
20
+ * @element oh-stack
21
+ */
22
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
23
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
24
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
26
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
27
+ };
28
+ import { html, css } from "lit";
29
+ import { customElement, property } from "lit/decorators.js";
30
+ import { OhElement, baseStyles } from "./base.js";
31
+ let OhStack = class OhStack extends OhElement {
32
+ constructor() {
33
+ super(...arguments);
34
+ this.gap = "md";
35
+ this.align = "stretch";
36
+ }
37
+ static { this.styles = [
38
+ baseStyles,
39
+ css `
40
+ /* ═══════════════════════════════════════════════════════════════
41
+ ORANGE HALO STACK
42
+ Vertical spacing • Consistent rhythm • Flexible alignment
43
+ ═══════════════════════════════════════════════════════════════ */
44
+
45
+ :host {
46
+ display: flex;
47
+ flex-direction: column;
48
+ width: 100%;
49
+ }
50
+
51
+ /* Gap variants */
52
+ :host([gap="none"]) {
53
+ gap: 0;
54
+ }
55
+
56
+ :host([gap="xs"]) {
57
+ gap: var(--oh-spacing-1);
58
+ }
59
+
60
+ :host([gap="sm"]) {
61
+ gap: var(--oh-spacing-2);
62
+ }
63
+
64
+ :host([gap="md"]) {
65
+ gap: var(--oh-spacing-4);
66
+ }
67
+
68
+ :host([gap="lg"]) {
69
+ gap: var(--oh-spacing-6);
70
+ }
71
+
72
+ :host([gap="xl"]) {
73
+ gap: var(--oh-spacing-8);
74
+ }
75
+
76
+ :host([gap="2xl"]) {
77
+ gap: var(--oh-spacing-12);
78
+ }
79
+
80
+ /* Alignment variants */
81
+ :host([align="start"]) {
82
+ align-items: flex-start;
83
+ }
84
+
85
+ :host([align="center"]) {
86
+ align-items: center;
87
+ }
88
+
89
+ :host([align="end"]) {
90
+ align-items: flex-end;
91
+ }
92
+
93
+ :host([align="stretch"]) {
94
+ align-items: stretch;
95
+ }
96
+ `,
97
+ ]; }
98
+ render() {
99
+ return html `<slot></slot>`;
100
+ }
101
+ };
102
+ __decorate([
103
+ property({ type: String, reflect: true })
104
+ ], OhStack.prototype, "gap", void 0);
105
+ __decorate([
106
+ property({ type: String, reflect: true })
107
+ ], OhStack.prototype, "align", void 0);
108
+ OhStack = __decorate([
109
+ customElement("oh-stack")
110
+ ], OhStack);
111
+ export { OhStack };
112
+ //# sourceMappingURL=oh-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oh-stack.js","sourceRoot":"","sources":["../src/oh-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM3C,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,SAAS;IAA/B;;QAgEL,QAAG,GAAa,IAAI,CAAC;QAGrB,UAAK,GAAe,SAAS,CAAC;IAKhC,CAAC;aAvEiB,WAAM,GAAG;QACvB,UAAU;QACV,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyDF;KACF,AA5DqB,CA4DpB;IAQF,MAAM;QACJ,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;;AAPD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oCACrB;AAGrB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sCACZ;AAnEnB,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAwEnB"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * oh-tabs
3
+ *
4
+ * Accessible tabbed interface with full keyboard support.
5
+ *
6
+ * ACCESSIBILITY FEATURES:
7
+ * ───────────────────────
8
+ * - Full ARIA support (tablist, tab, tabpanel roles)
9
+ * - Roving tabindex for keyboard navigation
10
+ * - Manual activation (arrow keys move focus, Enter/Space activates)
11
+ * - Home/End jump to first/last tab
12
+ * - Focus moves to panel content after activation
13
+ * - Focus indicators meet WCAG requirements
14
+ * - Panels properly hidden from assistive tech when inactive
15
+ *
16
+ * KEYBOARD INTERACTIONS:
17
+ * ──────────────────────
18
+ * - Left Arrow: Move focus to previous tab (wraps to last)
19
+ * - Right Arrow: Move focus to next tab (wraps to first)
20
+ * - Home: Move focus to first tab
21
+ * - End: Move focus to last tab
22
+ * - Enter/Space: Activate focused tab and move focus to panel
23
+ * - Tab: Move focus out of tablist
24
+ *
25
+ * @element oh-tabs
26
+ */
27
+ import { OhElement } from "./base.js";
28
+ export interface TabItem {
29
+ id: string;
30
+ label: string;
31
+ content?: string;
32
+ }
33
+ export declare class OhTabs extends OhElement {
34
+ static styles: import("lit").CSSResult[];
35
+ /**
36
+ * Array of tab items with id, label, and optional content
37
+ */
38
+ tabs: TabItem[];
39
+ /**
40
+ * ID of the currently selected tab
41
+ */
42
+ selected: string;
43
+ /**
44
+ * Orientation of the tabs (affects arrow key behavior)
45
+ */
46
+ orientation: "horizontal" | "vertical";
47
+ /**
48
+ * Index of the currently focused tab (for roving tabindex)
49
+ */
50
+ private _focusedIndex;
51
+ /**
52
+ * Unique ID prefix for ARIA relationships
53
+ */
54
+ private _idPrefix;
55
+ connectedCallback(): void;
56
+ updated(changedProperties: Map<string, unknown>): void;
57
+ /**
58
+ * Handle keyboard navigation within the tablist
59
+ * Uses manual activation: arrows move focus, Enter/Space activates
60
+ */
61
+ private _handleKeyDown;
62
+ /**
63
+ * Focus the panel for a given tab
64
+ */
65
+ private _focusPanel;
66
+ /**
67
+ * Focus a specific tab button
68
+ */
69
+ private _focusTab;
70
+ /**
71
+ * Select a tab and dispatch change event
72
+ */
73
+ private _selectTab;
74
+ /**
75
+ * Handle click on a tab
76
+ */
77
+ private _handleTabClick;
78
+ render(): import("lit").TemplateResult<1>;
79
+ }
80
+ declare global {
81
+ interface HTMLElementTagNameMap {
82
+ "oh-tabs": OhTabs;
83
+ }
84
+ }
85
+ //# sourceMappingURL=oh-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oh-tabs.d.ts","sourceRoot":"","sources":["../src/oh-tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBACa,MAAO,SAAQ,SAAS;IACnC,OAAgB,MAAM,4BAwKpB;IAEF;;OAEG;IAEH,IAAI,EAAE,OAAO,EAAE,CAAM;IAErB;;OAEG;IAEH,QAAQ,SAAM;IAEd;;OAEG;IAEH,WAAW,EAAE,YAAY,GAAG,UAAU,CAAgB;IAEtD;;OAEG;IAEH,OAAO,CAAC,aAAa,CAAK;IAE1B;;OAEG;IACH,OAAO,CAAC,SAAS,CAAwD;IAEhE,iBAAiB;IAUjB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAMxD;;;OAGG;YACW,cAAc;IAmE5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB,MAAM;CAyDP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}