@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.
- package/custom-elements.json +186 -0
- package/dist/base.d.ts +30 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +78 -0
- package/dist/base.js.map +1 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/oh-accordion.d.ts +47 -0
- package/dist/oh-accordion.d.ts.map +1 -0
- package/dist/oh-accordion.js +387 -0
- package/dist/oh-accordion.js.map +1 -0
- package/dist/oh-alert.d.ts +48 -0
- package/dist/oh-alert.d.ts.map +1 -0
- package/dist/oh-alert.js +343 -0
- package/dist/oh-alert.js.map +1 -0
- package/dist/oh-badge.d.ts +38 -0
- package/dist/oh-badge.d.ts.map +1 -0
- package/dist/oh-badge.js +176 -0
- package/dist/oh-badge.js.map +1 -0
- package/dist/oh-breadcrumb.d.ts +39 -0
- package/dist/oh-breadcrumb.d.ts.map +1 -0
- package/dist/oh-breadcrumb.js +277 -0
- package/dist/oh-breadcrumb.js.map +1 -0
- package/dist/oh-button.d.ts +62 -0
- package/dist/oh-button.d.ts.map +1 -0
- package/dist/oh-button.figma.d.ts +2 -0
- package/dist/oh-button.figma.d.ts.map +1 -0
- package/dist/oh-button.figma.js +20 -0
- package/dist/oh-button.figma.js.map +1 -0
- package/dist/oh-button.js +490 -0
- package/dist/oh-button.js.map +1 -0
- package/dist/oh-card.d.ts +44 -0
- package/dist/oh-card.d.ts.map +1 -0
- package/dist/oh-card.js +340 -0
- package/dist/oh-card.js.map +1 -0
- package/dist/oh-checkbox-group.d.ts +39 -0
- package/dist/oh-checkbox-group.d.ts.map +1 -0
- package/dist/oh-checkbox-group.figma.d.ts +2 -0
- package/dist/oh-checkbox-group.figma.d.ts.map +1 -0
- package/dist/oh-checkbox-group.figma.js +24 -0
- package/dist/oh-checkbox-group.figma.js.map +1 -0
- package/dist/oh-checkbox-group.js +309 -0
- package/dist/oh-checkbox-group.js.map +1 -0
- package/dist/oh-checkbox.d.ts +50 -0
- package/dist/oh-checkbox.d.ts.map +1 -0
- package/dist/oh-checkbox.js +315 -0
- package/dist/oh-checkbox.js.map +1 -0
- package/dist/oh-cluster.d.ts +38 -0
- package/dist/oh-cluster.d.ts.map +1 -0
- package/dist/oh-cluster.js +141 -0
- package/dist/oh-cluster.js.map +1 -0
- package/dist/oh-container.d.ts +38 -0
- package/dist/oh-container.d.ts.map +1 -0
- package/dist/oh-container.js +116 -0
- package/dist/oh-container.js.map +1 -0
- package/dist/oh-drawer.d.ts +66 -0
- package/dist/oh-drawer.d.ts.map +1 -0
- package/dist/oh-drawer.js +284 -0
- package/dist/oh-drawer.js.map +1 -0
- package/dist/oh-footer.d.ts +40 -0
- package/dist/oh-footer.d.ts.map +1 -0
- package/dist/oh-footer.js +112 -0
- package/dist/oh-footer.js.map +1 -0
- package/dist/oh-grid.d.ts +40 -0
- package/dist/oh-grid.d.ts.map +1 -0
- package/dist/oh-grid.js +168 -0
- package/dist/oh-grid.js.map +1 -0
- package/dist/oh-hero.d.ts +28 -0
- package/dist/oh-hero.d.ts.map +1 -0
- package/dist/oh-hero.js +242 -0
- package/dist/oh-hero.js.map +1 -0
- package/dist/oh-icon.d.ts +44 -0
- package/dist/oh-icon.d.ts.map +1 -0
- package/dist/oh-icon.js +321 -0
- package/dist/oh-icon.js.map +1 -0
- package/dist/oh-input.d.ts +56 -0
- package/dist/oh-input.d.ts.map +1 -0
- package/dist/oh-input.figma.d.ts +2 -0
- package/dist/oh-input.figma.d.ts.map +1 -0
- package/dist/oh-input.figma.js +36 -0
- package/dist/oh-input.figma.js.map +1 -0
- package/dist/oh-input.js +320 -0
- package/dist/oh-input.js.map +1 -0
- package/dist/oh-link.d.ts +45 -0
- package/dist/oh-link.d.ts.map +1 -0
- package/dist/oh-link.js +392 -0
- package/dist/oh-link.js.map +1 -0
- package/dist/oh-modal.d.ts +54 -0
- package/dist/oh-modal.d.ts.map +1 -0
- package/dist/oh-modal.js +450 -0
- package/dist/oh-modal.js.map +1 -0
- package/dist/oh-navbar.d.ts +49 -0
- package/dist/oh-navbar.d.ts.map +1 -0
- package/dist/oh-navbar.js +185 -0
- package/dist/oh-navbar.js.map +1 -0
- package/dist/oh-progress.d.ts +56 -0
- package/dist/oh-progress.d.ts.map +1 -0
- package/dist/oh-progress.js +299 -0
- package/dist/oh-progress.js.map +1 -0
- package/dist/oh-radio-group.d.ts +43 -0
- package/dist/oh-radio-group.d.ts.map +1 -0
- package/dist/oh-radio-group.figma.d.ts +2 -0
- package/dist/oh-radio-group.figma.d.ts.map +1 -0
- package/dist/oh-radio-group.figma.js +22 -0
- package/dist/oh-radio-group.figma.js.map +1 -0
- package/dist/oh-radio-group.js +324 -0
- package/dist/oh-radio-group.js.map +1 -0
- package/dist/oh-radio.d.ts +50 -0
- package/dist/oh-radio.d.ts.map +1 -0
- package/dist/oh-radio.js +314 -0
- package/dist/oh-radio.js.map +1 -0
- package/dist/oh-select.d.ts +82 -0
- package/dist/oh-select.d.ts.map +1 -0
- package/dist/oh-select.js +638 -0
- package/dist/oh-select.js.map +1 -0
- package/dist/oh-skip-link.d.ts +37 -0
- package/dist/oh-skip-link.d.ts.map +1 -0
- package/dist/oh-skip-link.js +145 -0
- package/dist/oh-skip-link.js.map +1 -0
- package/dist/oh-stack.d.ts +36 -0
- package/dist/oh-stack.d.ts.map +1 -0
- package/dist/oh-stack.js +112 -0
- package/dist/oh-stack.js.map +1 -0
- package/dist/oh-tabs.d.ts +85 -0
- package/dist/oh-tabs.d.ts.map +1 -0
- package/dist/oh-tabs.js +417 -0
- package/dist/oh-tabs.js.map +1 -0
- package/dist/oh-toggle.d.ts +51 -0
- package/dist/oh-toggle.d.ts.map +1 -0
- package/dist/oh-toggle.js +219 -0
- package/dist/oh-toggle.js.map +1 -0
- package/dist/styles/typography.d.ts +15 -0
- package/dist/styles/typography.d.ts.map +1 -0
- package/dist/styles/typography.js +235 -0
- package/dist/styles/typography.js.map +1 -0
- 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"}
|
package/dist/oh-stack.js
ADDED
|
@@ -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"}
|