@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 @@
|
|
|
1
|
+
{"version":3,"file":"oh-navbar.js","sourceRoot":"","sources":["../src/oh-navbar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,mBAAmB,CAAC;AAC3B,OAAO,iBAAiB,CAAC;AACzB,OAAO,gBAAgB,CAAC;AACxB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AAGf,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,SAAS;IAAhC;;QA8EL,yCAAyC;QAEzC,kBAAa,GAAG,MAAM,CAAC;QAGf,gBAAW,GAAG,KAAK,CAAC;IAoD9B,CAAC;aAtIiB,WAAM,GAAG;QACvB,UAAU;QACV,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAwEF;KACF,AA3EqB,CA2EpB;IASM,WAAW;QACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;uBAoBQ,IAAI,CAAC,WAAW;;;;;;;;;;;kBAWrB,IAAI,CAAC,aAAa;gBACpB,IAAI,CAAC,WAAW;oBACZ,IAAI,CAAC,YAAY;;;;;;KAMhC,CAAC;IACJ,CAAC;;AAtDD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;+CACjC;AAGf;IADP,KAAK,EAAE;6CACoB;AAnFjB,QAAQ;IADpB,aAAa,CAAC,WAAW,CAAC;GACd,QAAQ,CAuIpB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oh-progress
|
|
3
|
+
*
|
|
4
|
+
* An accessible progress bar component showing completion percentage.
|
|
5
|
+
* Displays both a visual bar and numeric percentage.
|
|
6
|
+
*
|
|
7
|
+
* DESIGN DECISIONS:
|
|
8
|
+
* ─────────────────
|
|
9
|
+
* 1. FULLY ACCESSIBLE
|
|
10
|
+
* - role="progressbar" with aria-valuenow, aria-valuemin, aria-valuemax
|
|
11
|
+
* - aria-label for screen reader context
|
|
12
|
+
* - Percentage announced to screen readers
|
|
13
|
+
*
|
|
14
|
+
* 2. VISUAL + NUMERIC
|
|
15
|
+
* - Bar shows progress visually
|
|
16
|
+
* - Percentage text for precise feedback
|
|
17
|
+
* - Text can be hidden if needed
|
|
18
|
+
*
|
|
19
|
+
* 3. ORANGE HALO STYLING
|
|
20
|
+
* - Chunky track with soft corners
|
|
21
|
+
* - Warm fill colors
|
|
22
|
+
* - Gentle animation on value change
|
|
23
|
+
*
|
|
24
|
+
* @element oh-progress
|
|
25
|
+
*/
|
|
26
|
+
import { OhElement } from "./base.js";
|
|
27
|
+
export type ProgressVariant = "brand" | "success" | "info" | "warning" | "error";
|
|
28
|
+
export type ProgressSize = "sm" | "md" | "lg";
|
|
29
|
+
export declare class OhProgress extends OhElement {
|
|
30
|
+
static styles: import("lit").CSSResult[];
|
|
31
|
+
/** Current progress value (0-100 by default, or 0-max) */
|
|
32
|
+
value: number;
|
|
33
|
+
/** Maximum value (default 100) */
|
|
34
|
+
max: number;
|
|
35
|
+
/** Accessible label describing what the progress represents */
|
|
36
|
+
label: string;
|
|
37
|
+
/** Whether to show the visible label above the bar */
|
|
38
|
+
showLabel: boolean;
|
|
39
|
+
/** Whether to show the percentage number */
|
|
40
|
+
showValue: boolean;
|
|
41
|
+
/** Size variant */
|
|
42
|
+
size: ProgressSize;
|
|
43
|
+
/** Color variant */
|
|
44
|
+
variant: ProgressVariant;
|
|
45
|
+
/** Inverse colors for dark backgrounds */
|
|
46
|
+
inverse: boolean;
|
|
47
|
+
/** Calculate percentage (clamped 0-100) */
|
|
48
|
+
private get percentage();
|
|
49
|
+
render(): import("lit").TemplateResult<1>;
|
|
50
|
+
}
|
|
51
|
+
declare global {
|
|
52
|
+
interface HTMLElementTagNameMap {
|
|
53
|
+
"oh-progress": OhProgress;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=oh-progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-progress.d.ts","sourceRoot":"","sources":["../src/oh-progress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AACjF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9C,qBACa,UAAW,SAAQ,SAAS;IACvC,OAAgB,MAAM,4BA4KpB;IAEF,0DAA0D;IAE1D,KAAK,SAAK;IAEV,kCAAkC;IAElC,GAAG,SAAO;IAEV,+DAA+D;IAE/D,KAAK,SAAc;IAEnB,sDAAsD;IAEtD,SAAS,UAAS;IAElB,4CAA4C;IAE5C,SAAS,UAAQ;IAEjB,mBAAmB;IAEnB,IAAI,EAAE,YAAY,CAAQ;IAE1B,oBAAoB;IAEpB,OAAO,EAAE,eAAe,CAAW;IAEnC,0CAA0C;IAE1C,OAAO,UAAS;IAEhB,2CAA2C;IAC3C,OAAO,KAAK,UAAU,GAGrB;IAED,MAAM;CAwCP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oh-progress
|
|
3
|
+
*
|
|
4
|
+
* An accessible progress bar component showing completion percentage.
|
|
5
|
+
* Displays both a visual bar and numeric percentage.
|
|
6
|
+
*
|
|
7
|
+
* DESIGN DECISIONS:
|
|
8
|
+
* ─────────────────
|
|
9
|
+
* 1. FULLY ACCESSIBLE
|
|
10
|
+
* - role="progressbar" with aria-valuenow, aria-valuemin, aria-valuemax
|
|
11
|
+
* - aria-label for screen reader context
|
|
12
|
+
* - Percentage announced to screen readers
|
|
13
|
+
*
|
|
14
|
+
* 2. VISUAL + NUMERIC
|
|
15
|
+
* - Bar shows progress visually
|
|
16
|
+
* - Percentage text for precise feedback
|
|
17
|
+
* - Text can be hidden if needed
|
|
18
|
+
*
|
|
19
|
+
* 3. ORANGE HALO STYLING
|
|
20
|
+
* - Chunky track with soft corners
|
|
21
|
+
* - Warm fill colors
|
|
22
|
+
* - Gentle animation on value change
|
|
23
|
+
*
|
|
24
|
+
* @element oh-progress
|
|
25
|
+
*/
|
|
26
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
27
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
28
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
29
|
+
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;
|
|
30
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
31
|
+
};
|
|
32
|
+
import { html, css } from "lit";
|
|
33
|
+
import { customElement, property } from "lit/decorators.js";
|
|
34
|
+
import { OhElement, baseStyles } from "./base.js";
|
|
35
|
+
let OhProgress = class OhProgress extends OhElement {
|
|
36
|
+
constructor() {
|
|
37
|
+
super(...arguments);
|
|
38
|
+
/** Current progress value (0-100 by default, or 0-max) */
|
|
39
|
+
this.value = 0;
|
|
40
|
+
/** Maximum value (default 100) */
|
|
41
|
+
this.max = 100;
|
|
42
|
+
/** Accessible label describing what the progress represents */
|
|
43
|
+
this.label = "Progress";
|
|
44
|
+
/** Whether to show the visible label above the bar */
|
|
45
|
+
this.showLabel = false;
|
|
46
|
+
/** Whether to show the percentage number */
|
|
47
|
+
this.showValue = true;
|
|
48
|
+
/** Size variant */
|
|
49
|
+
this.size = "md";
|
|
50
|
+
/** Color variant */
|
|
51
|
+
this.variant = "brand";
|
|
52
|
+
/** Inverse colors for dark backgrounds */
|
|
53
|
+
this.inverse = false;
|
|
54
|
+
}
|
|
55
|
+
static { this.styles = [
|
|
56
|
+
baseStyles,
|
|
57
|
+
css `
|
|
58
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
59
|
+
ORANGE HALO PROGRESS BAR
|
|
60
|
+
Accessible • Visual + Numeric • Warm styling
|
|
61
|
+
═══════════════════════════════════════════════════════════════ */
|
|
62
|
+
|
|
63
|
+
:host {
|
|
64
|
+
display: block;
|
|
65
|
+
width: 100%;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.progress {
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
gap: var(--oh-spacing-3);
|
|
72
|
+
font-family: var(--oh-font-family-sans);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
76
|
+
TRACK (background)
|
|
77
|
+
═══════════════════════════════════════════════════════════════ */
|
|
78
|
+
|
|
79
|
+
.progress__track {
|
|
80
|
+
flex: 1;
|
|
81
|
+
background-color: var(--oh-color-surface-inset);
|
|
82
|
+
border: var(--oh-border-width-chunky, 2.5px) solid var(--oh-color-border-default);
|
|
83
|
+
border-radius: var(--oh-radius-full);
|
|
84
|
+
overflow: hidden;
|
|
85
|
+
box-shadow: inset 2px 2px 0 0 rgba(0, 0, 0, 0.06);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Size variants for track height */
|
|
89
|
+
.progress--sm .progress__track {
|
|
90
|
+
height: 8px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.progress--md .progress__track {
|
|
94
|
+
height: 16px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.progress--lg .progress__track {
|
|
98
|
+
height: 24px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
102
|
+
FILL (the actual progress)
|
|
103
|
+
═══════════════════════════════════════════════════════════════ */
|
|
104
|
+
|
|
105
|
+
.progress__fill {
|
|
106
|
+
height: 100%;
|
|
107
|
+
border-radius: var(--oh-radius-full);
|
|
108
|
+
transition: width var(--oh-motion-relaxed, 300ms) var(--oh-motion-ease-gentle, ease-out);
|
|
109
|
+
min-width: 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Variant colors */
|
|
113
|
+
.progress--brand .progress__fill {
|
|
114
|
+
background-color: var(--oh-color-brand-primary);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.progress--success .progress__fill {
|
|
118
|
+
background-color: var(--oh-color-feedback-success);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.progress--info .progress__fill {
|
|
122
|
+
background-color: var(--oh-color-feedback-info);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.progress--warning .progress__fill {
|
|
126
|
+
background-color: var(--oh-color-feedback-warning);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.progress--error .progress__fill {
|
|
130
|
+
background-color: var(--oh-color-feedback-error);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
134
|
+
VALUE TEXT
|
|
135
|
+
═══════════════════════════════════════════════════════════════ */
|
|
136
|
+
|
|
137
|
+
.progress__value {
|
|
138
|
+
font-size: var(--oh-font-size-base);
|
|
139
|
+
font-weight: var(--oh-font-weight-medium);
|
|
140
|
+
color: var(--oh-color-text-primary);
|
|
141
|
+
min-width: 3.5ch;
|
|
142
|
+
text-align: right;
|
|
143
|
+
font-variant-numeric: tabular-nums;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.progress--sm .progress__value {
|
|
147
|
+
font-size: var(--oh-font-size-base);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.progress--lg .progress__value {
|
|
151
|
+
font-size: var(--oh-font-size-lg);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* Hide value text when showValue is false */
|
|
155
|
+
.progress__value--hidden {
|
|
156
|
+
position: absolute;
|
|
157
|
+
width: 1px;
|
|
158
|
+
height: 1px;
|
|
159
|
+
padding: 0;
|
|
160
|
+
margin: -1px;
|
|
161
|
+
overflow: hidden;
|
|
162
|
+
clip: rect(0, 0, 0, 0);
|
|
163
|
+
white-space: nowrap;
|
|
164
|
+
border: 0;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
168
|
+
LABEL (optional visible label)
|
|
169
|
+
═══════════════════════════════════════════════════════════════ */
|
|
170
|
+
|
|
171
|
+
.progress__label {
|
|
172
|
+
font-size: var(--oh-font-size-base);
|
|
173
|
+
font-weight: var(--oh-font-weight-medium);
|
|
174
|
+
color: var(--oh-color-text-primary);
|
|
175
|
+
margin-bottom: var(--oh-spacing-2);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
179
|
+
INVERSE (for dark backgrounds)
|
|
180
|
+
═══════════════════════════════════════════════════════════════ */
|
|
181
|
+
|
|
182
|
+
:host([inverse]) .progress__track {
|
|
183
|
+
background-color: rgba(255, 255, 255, 0.15);
|
|
184
|
+
border-color: rgba(255, 255, 255, 0.3);
|
|
185
|
+
box-shadow: none;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
:host([inverse]) .progress__value {
|
|
189
|
+
color: var(--oh-color-surface-white);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
:host([inverse]) .progress__label {
|
|
193
|
+
color: var(--oh-color-surface-white);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* Inverse fill - use honey/gold for better visibility on dark */
|
|
197
|
+
:host([inverse]) .progress--brand .progress__fill {
|
|
198
|
+
background-color: var(--oh-color-honey, #E8A838);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
:host([inverse]) .progress--success .progress__fill {
|
|
202
|
+
background-color: #6FCF97;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
:host([inverse]) .progress--info .progress__fill {
|
|
206
|
+
background-color: #6FB3CF;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
:host([inverse]) .progress--warning .progress__fill {
|
|
210
|
+
background-color: var(--oh-color-honey, #E8A838);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
:host([inverse]) .progress--error .progress__fill {
|
|
214
|
+
background-color: #EB8989;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
218
|
+
REDUCED MOTION
|
|
219
|
+
═══════════════════════════════════════════════════════════════ */
|
|
220
|
+
|
|
221
|
+
@media (prefers-reduced-motion: reduce) {
|
|
222
|
+
.progress__fill {
|
|
223
|
+
transition: none;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
`,
|
|
227
|
+
]; }
|
|
228
|
+
/** Calculate percentage (clamped 0-100) */
|
|
229
|
+
get percentage() {
|
|
230
|
+
const clamped = Math.max(0, Math.min(this.value, this.max));
|
|
231
|
+
return Math.round((clamped / this.max) * 100);
|
|
232
|
+
}
|
|
233
|
+
render() {
|
|
234
|
+
const percentage = this.percentage;
|
|
235
|
+
const classes = this.classMap({
|
|
236
|
+
progress: true,
|
|
237
|
+
[`progress--${this.size}`]: true,
|
|
238
|
+
[`progress--${this.variant}`]: true,
|
|
239
|
+
});
|
|
240
|
+
const valueClasses = this.classMap({
|
|
241
|
+
progress__value: true,
|
|
242
|
+
"progress__value--hidden": !this.showValue,
|
|
243
|
+
});
|
|
244
|
+
return html `
|
|
245
|
+
${this.showLabel
|
|
246
|
+
? html `<div class="progress__label">${this.label}</div>`
|
|
247
|
+
: null}
|
|
248
|
+
|
|
249
|
+
<div
|
|
250
|
+
class=${classes}
|
|
251
|
+
role="progressbar"
|
|
252
|
+
aria-valuenow=${this.value}
|
|
253
|
+
aria-valuemin="0"
|
|
254
|
+
aria-valuemax=${this.max}
|
|
255
|
+
aria-label=${this.label}
|
|
256
|
+
>
|
|
257
|
+
<div class="progress__track" part="track">
|
|
258
|
+
<div
|
|
259
|
+
class="progress__fill"
|
|
260
|
+
part="fill"
|
|
261
|
+
style="width: ${percentage}%"
|
|
262
|
+
></div>
|
|
263
|
+
</div>
|
|
264
|
+
<span class=${valueClasses} part="value" aria-hidden="true">
|
|
265
|
+
${percentage}%
|
|
266
|
+
</span>
|
|
267
|
+
</div>
|
|
268
|
+
`;
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
__decorate([
|
|
272
|
+
property({ type: Number, reflect: true })
|
|
273
|
+
], OhProgress.prototype, "value", void 0);
|
|
274
|
+
__decorate([
|
|
275
|
+
property({ type: Number, reflect: true })
|
|
276
|
+
], OhProgress.prototype, "max", void 0);
|
|
277
|
+
__decorate([
|
|
278
|
+
property({ type: String })
|
|
279
|
+
], OhProgress.prototype, "label", void 0);
|
|
280
|
+
__decorate([
|
|
281
|
+
property({ type: Boolean, attribute: "show-label" })
|
|
282
|
+
], OhProgress.prototype, "showLabel", void 0);
|
|
283
|
+
__decorate([
|
|
284
|
+
property({ type: Boolean, attribute: "show-value" })
|
|
285
|
+
], OhProgress.prototype, "showValue", void 0);
|
|
286
|
+
__decorate([
|
|
287
|
+
property({ type: String, reflect: true })
|
|
288
|
+
], OhProgress.prototype, "size", void 0);
|
|
289
|
+
__decorate([
|
|
290
|
+
property({ type: String, reflect: true })
|
|
291
|
+
], OhProgress.prototype, "variant", void 0);
|
|
292
|
+
__decorate([
|
|
293
|
+
property({ type: Boolean, reflect: true })
|
|
294
|
+
], OhProgress.prototype, "inverse", void 0);
|
|
295
|
+
OhProgress = __decorate([
|
|
296
|
+
customElement("oh-progress")
|
|
297
|
+
], OhProgress);
|
|
298
|
+
export { OhProgress };
|
|
299
|
+
//# sourceMappingURL=oh-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-progress.js","sourceRoot":"","sources":["../src/oh-progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oh-radio-group
|
|
3
|
+
*
|
|
4
|
+
* A radio group with proper ARIA semantics and group-level error handling.
|
|
5
|
+
* Individual radios cannot be used standalone.
|
|
6
|
+
*
|
|
7
|
+
* ACCESSIBILITY:
|
|
8
|
+
* ─────────────
|
|
9
|
+
* - role="radiogroup" with aria-labelledby
|
|
10
|
+
* - Arrow key navigation between options
|
|
11
|
+
* - Group-level error messaging
|
|
12
|
+
* - Visible focus ring (outline, not inset)
|
|
13
|
+
* - aria-required and aria-invalid
|
|
14
|
+
*
|
|
15
|
+
* @element oh-radio-group
|
|
16
|
+
*/
|
|
17
|
+
import { OhElement } from "./base.js";
|
|
18
|
+
export interface RadioOption {
|
|
19
|
+
label: string;
|
|
20
|
+
value: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class OhRadioGroup extends OhElement {
|
|
23
|
+
static styles: import("lit").CSSResult[];
|
|
24
|
+
label: string;
|
|
25
|
+
name: string;
|
|
26
|
+
options: RadioOption[];
|
|
27
|
+
value: string;
|
|
28
|
+
required: boolean;
|
|
29
|
+
error: boolean;
|
|
30
|
+
errorMessage: string;
|
|
31
|
+
private _labelId;
|
|
32
|
+
private _focusedValue;
|
|
33
|
+
private _handleChange;
|
|
34
|
+
private _handleFocus;
|
|
35
|
+
private _handleBlur;
|
|
36
|
+
render(): import("lit").TemplateResult<1>;
|
|
37
|
+
}
|
|
38
|
+
declare global {
|
|
39
|
+
interface HTMLElementTagNameMap {
|
|
40
|
+
"oh-radio-group": OhRadioGroup;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=oh-radio-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-radio-group.d.ts","sourceRoot":"","sources":["../src/oh-radio-group.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBACa,YAAa,SAAQ,SAAS;IACzC,OAAgB,MAAM,4BA4LpB;IAGF,KAAK,SAAM;IAGX,IAAI,SAAM;IAGV,OAAO,EAAE,WAAW,EAAE,CAAM;IAG5B,KAAK,SAAM;IAGX,QAAQ,UAAS;IAGjB,KAAK,UAAS;IAGd,YAAY,SAAM;IAGlB,OAAO,CAAC,QAAQ,CAAkE;IAGlF,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,WAAW;IAInB,MAAM;CAuDP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-radio-group.figma.d.ts","sourceRoot":"","sources":["../src/oh-radio-group.figma.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import figma, { html } from "@figma/code-connect/html";
|
|
2
|
+
/**
|
|
3
|
+
* Code Connect for oh-radio-group
|
|
4
|
+
*
|
|
5
|
+
* Replace the Figma URL below with your actual component URL.
|
|
6
|
+
*/
|
|
7
|
+
figma.connect("https://www.figma.com/design/q9ZYrOj2w9DrTVmgQFU7bu/OHDS?node-id=1-107", {
|
|
8
|
+
props: {
|
|
9
|
+
label: figma.string("Label"),
|
|
10
|
+
required: figma.boolean("Required"),
|
|
11
|
+
error: figma.boolean("Error"),
|
|
12
|
+
},
|
|
13
|
+
example: (props) => html `
|
|
14
|
+
<oh-radio-group
|
|
15
|
+
label="${props.label}"
|
|
16
|
+
?required="${props.required}"
|
|
17
|
+
?error="${props.error}"
|
|
18
|
+
.options="\${options}"
|
|
19
|
+
></oh-radio-group>
|
|
20
|
+
`,
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=oh-radio-group.figma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-radio-group.figma.js","sourceRoot":"","sources":["../src/oh-radio-group.figma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;GAIG;AAEH,KAAK,CAAC,OAAO,CACX,wEAAwE,EACxE;IACE,KAAK,EAAE;QACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QAC5B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QACnC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;KAC9B;IACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAA;;iBAEX,KAAK,CAAC,KAAK;qBACP,KAAK,CAAC,QAAQ;kBACjB,KAAK,CAAC,KAAK;;;KAGxB;CACF,CACF,CAAC"}
|