@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
package/dist/oh-card.js
ADDED
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oh-card
|
|
3
|
+
*
|
|
4
|
+
* A tactile, raised surface with visible frame.
|
|
5
|
+
* Designed with the same layered construction as oh-button.
|
|
6
|
+
*
|
|
7
|
+
* DESIGN DECISIONS:
|
|
8
|
+
* ─────────────────
|
|
9
|
+
* 1. LAYERED CONSTRUCTION
|
|
10
|
+
* - Surface: subtle gradient for depth
|
|
11
|
+
* - Border: visible warm edge
|
|
12
|
+
* - Inner highlight: sunlit top edge
|
|
13
|
+
* - Outer shadow: soft, slightly offset
|
|
14
|
+
*
|
|
15
|
+
* 2. RETRO-MODERN DETAILS
|
|
16
|
+
* - Warm, tactile shadows (never harsh)
|
|
17
|
+
* - Visible border that warms on hover
|
|
18
|
+
* - Subtle gradient background
|
|
19
|
+
*
|
|
20
|
+
* 3. VARIANTS
|
|
21
|
+
* - Raised: default with layered depth
|
|
22
|
+
* - Sunlit: featured with warm gradient
|
|
23
|
+
* - Flat: border-only, minimal shadow
|
|
24
|
+
*
|
|
25
|
+
* @element oh-card
|
|
26
|
+
*/
|
|
27
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
28
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
29
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
30
|
+
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;
|
|
31
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
32
|
+
};
|
|
33
|
+
import { html, css, nothing } from "lit";
|
|
34
|
+
import { customElement, property } from "lit/decorators.js";
|
|
35
|
+
import { OhElement, baseStyles } from "./base.js";
|
|
36
|
+
let OhCard = class OhCard extends OhElement {
|
|
37
|
+
constructor() {
|
|
38
|
+
super(...arguments);
|
|
39
|
+
this.variant = "raised";
|
|
40
|
+
this.interactive = false;
|
|
41
|
+
this.padding = "md";
|
|
42
|
+
}
|
|
43
|
+
static { this.styles = [
|
|
44
|
+
baseStyles,
|
|
45
|
+
css `
|
|
46
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
47
|
+
ORANGE HALO CARD
|
|
48
|
+
Tactile • Layered • Warm • Personal
|
|
49
|
+
═══════════════════════════════════════════════════════════════ */
|
|
50
|
+
|
|
51
|
+
:host {
|
|
52
|
+
display: block;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
56
|
+
BASE CARD
|
|
57
|
+
Layered construction — feels like a physical object
|
|
58
|
+
═══════════════════════════════════════════════════════════════ */
|
|
59
|
+
|
|
60
|
+
.card {
|
|
61
|
+
/* Shape: friendly rounded corners */
|
|
62
|
+
border-radius: var(--oh-radius-lg);
|
|
63
|
+
overflow: hidden;
|
|
64
|
+
|
|
65
|
+
transition:
|
|
66
|
+
transform var(--oh-motion-gentle) var(--oh-motion-ease-gentle),
|
|
67
|
+
box-shadow var(--oh-motion-gentle) var(--oh-motion-ease-gentle),
|
|
68
|
+
border-color var(--oh-motion-gentle) var(--oh-motion-ease-gentle);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
72
|
+
RAISED VARIANT (Default)
|
|
73
|
+
Subtle gradient surface with layered shadows
|
|
74
|
+
═══════════════════════════════════════════════════════════════ */
|
|
75
|
+
|
|
76
|
+
.card--raised {
|
|
77
|
+
/* Surface: subtle gradient for depth */
|
|
78
|
+
background: linear-gradient(
|
|
79
|
+
180deg,
|
|
80
|
+
#FFFFFF 0%,
|
|
81
|
+
#FAF7F2 40%,
|
|
82
|
+
#F5F0E8 100%
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
/* Border: visible warm edge */
|
|
86
|
+
border: 1px solid #E2D5C8;
|
|
87
|
+
|
|
88
|
+
/* Layered shadows:
|
|
89
|
+
1. Outer: soft, offset shadow (tactile)
|
|
90
|
+
2. Deeper: ambient depth
|
|
91
|
+
3. Inner top: sunlit highlight */
|
|
92
|
+
box-shadow:
|
|
93
|
+
0 2px 6px rgba(61, 50, 41, 0.08),
|
|
94
|
+
0 6px 16px rgba(61, 50, 41, 0.05),
|
|
95
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.8);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
99
|
+
SUNLIT VARIANT
|
|
100
|
+
Featured content with warm gradient and glow
|
|
101
|
+
═══════════════════════════════════════════════════════════════ */
|
|
102
|
+
|
|
103
|
+
.card--sunlit {
|
|
104
|
+
/* Surface: warm sunlit gradient */
|
|
105
|
+
background: linear-gradient(
|
|
106
|
+
180deg,
|
|
107
|
+
#FFFBF5 0%,
|
|
108
|
+
#FDF6EE 30%,
|
|
109
|
+
#F8EFE4 100%
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
/* Border: warm tinted edge */
|
|
113
|
+
border: 1px solid rgba(197, 67, 0, 0.2);
|
|
114
|
+
|
|
115
|
+
/* Layered shadows with warm glow */
|
|
116
|
+
box-shadow:
|
|
117
|
+
0 2px 8px rgba(139, 69, 19, 0.08),
|
|
118
|
+
0 8px 24px rgba(139, 69, 19, 0.06),
|
|
119
|
+
0 0 20px rgba(197, 67, 0, 0.04),
|
|
120
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.9);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
124
|
+
FLAT VARIANT
|
|
125
|
+
Border-only, minimal shadow — still layered
|
|
126
|
+
═══════════════════════════════════════════════════════════════ */
|
|
127
|
+
|
|
128
|
+
.card--flat {
|
|
129
|
+
/* Surface: subtle gradient */
|
|
130
|
+
background: linear-gradient(
|
|
131
|
+
180deg,
|
|
132
|
+
#FAFAF8 0%,
|
|
133
|
+
#F5F2EE 100%
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
/* Border: visible edge */
|
|
137
|
+
border: 1px solid #E2DCD2;
|
|
138
|
+
|
|
139
|
+
/* Minimal shadow */
|
|
140
|
+
box-shadow:
|
|
141
|
+
0 1px 2px rgba(61, 50, 41, 0.04),
|
|
142
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.6);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
146
|
+
INTERACTIVE STATES
|
|
147
|
+
Hover lifts, focus shows warm glow
|
|
148
|
+
═══════════════════════════════════════════════════════════════ */
|
|
149
|
+
|
|
150
|
+
.card--interactive {
|
|
151
|
+
cursor: pointer;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* Hover: warm light, lifted */
|
|
155
|
+
.card--interactive.card--raised:hover {
|
|
156
|
+
border-color: var(--oh-color-warm-dune);
|
|
157
|
+
box-shadow:
|
|
158
|
+
0 4px 12px rgba(61, 50, 41, 0.1),
|
|
159
|
+
0 12px 28px rgba(61, 50, 41, 0.08),
|
|
160
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.9);
|
|
161
|
+
transform: translateY(-2px);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.card--interactive.card--sunlit:hover {
|
|
165
|
+
border-color: rgba(197, 67, 0, 0.35);
|
|
166
|
+
box-shadow:
|
|
167
|
+
0 4px 12px rgba(139, 69, 19, 0.12),
|
|
168
|
+
0 12px 32px rgba(139, 69, 19, 0.08),
|
|
169
|
+
0 0 28px rgba(197, 67, 0, 0.06),
|
|
170
|
+
inset 0 1px 0 rgba(255, 255, 255, 1);
|
|
171
|
+
transform: translateY(-2px);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.card--interactive.card--flat:hover {
|
|
175
|
+
border-color: var(--oh-color-warm-dune);
|
|
176
|
+
box-shadow:
|
|
177
|
+
0 2px 6px rgba(61, 50, 41, 0.08),
|
|
178
|
+
0 6px 16px rgba(61, 50, 41, 0.05),
|
|
179
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.8);
|
|
180
|
+
transform: translateY(-1px);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* Active: pressed */
|
|
184
|
+
.card--interactive:active {
|
|
185
|
+
transform: translateY(0) !important;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.card--interactive.card--raised:active {
|
|
189
|
+
box-shadow:
|
|
190
|
+
0 1px 3px rgba(61, 50, 41, 0.1),
|
|
191
|
+
0 3px 8px rgba(61, 50, 41, 0.06),
|
|
192
|
+
inset 0 1px 2px rgba(61, 50, 41, 0.04);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* Focus: warm glow ring */
|
|
196
|
+
.card--interactive:focus-visible {
|
|
197
|
+
outline: none;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.card--interactive.card--raised:focus-visible,
|
|
201
|
+
.card--interactive.card--flat:focus-visible {
|
|
202
|
+
border-color: var(--oh-color-brand-primary);
|
|
203
|
+
box-shadow:
|
|
204
|
+
0 0 0 3px rgba(197, 67, 0, 0.25),
|
|
205
|
+
0 0 16px rgba(197, 67, 0, 0.1),
|
|
206
|
+
0 2px 6px rgba(61, 50, 41, 0.08),
|
|
207
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.8);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.card--interactive.card--sunlit:focus-visible {
|
|
211
|
+
border-color: rgba(197, 67, 0, 0.5);
|
|
212
|
+
box-shadow:
|
|
213
|
+
0 0 0 3px rgba(197, 67, 0, 0.3),
|
|
214
|
+
0 0 20px rgba(197, 67, 0, 0.15),
|
|
215
|
+
0 2px 8px rgba(139, 69, 19, 0.08),
|
|
216
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.9);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
220
|
+
PADDING VARIANTS
|
|
221
|
+
═══════════════════════════════════════════════════════════════ */
|
|
222
|
+
|
|
223
|
+
.card--padding-sm .content { padding: var(--oh-spacing-3-5); }
|
|
224
|
+
.card--padding-md .content { padding: var(--oh-spacing-5); }
|
|
225
|
+
.card--padding-lg .content { padding: var(--oh-spacing-7); }
|
|
226
|
+
|
|
227
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
228
|
+
SLOTS: Header, Content, Footer
|
|
229
|
+
═══════════════════════════════════════════════════════════════ */
|
|
230
|
+
|
|
231
|
+
.header {
|
|
232
|
+
padding: var(--oh-spacing-4) var(--oh-spacing-5);
|
|
233
|
+
border-bottom: 1px solid rgba(226, 213, 200, 0.6);
|
|
234
|
+
background: linear-gradient(
|
|
235
|
+
180deg,
|
|
236
|
+
rgba(255, 255, 255, 0.5) 0%,
|
|
237
|
+
rgba(255, 255, 255, 0) 100%
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.header:empty { display: none; }
|
|
242
|
+
|
|
243
|
+
.content {
|
|
244
|
+
/* Padding handled by variant */
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.footer {
|
|
248
|
+
padding: var(--oh-spacing-4) var(--oh-spacing-5);
|
|
249
|
+
border-top: 1px solid rgba(226, 213, 200, 0.6);
|
|
250
|
+
background: linear-gradient(
|
|
251
|
+
180deg,
|
|
252
|
+
var(--oh-color-surface-raised) 0%,
|
|
253
|
+
var(--oh-color-surface-inset) 100%
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.footer:empty { display: none; }
|
|
258
|
+
|
|
259
|
+
/* Padding adjustments for slots */
|
|
260
|
+
.card--padding-sm .header,
|
|
261
|
+
.card--padding-sm .footer {
|
|
262
|
+
padding: var(--oh-spacing-2-5) var(--oh-spacing-3-5);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.card--padding-lg .header,
|
|
266
|
+
.card--padding-lg .footer {
|
|
267
|
+
padding: var(--oh-spacing-5) var(--oh-spacing-7);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/* ═══════════════════════════════════════════════════════════════
|
|
271
|
+
REDUCED MOTION
|
|
272
|
+
═══════════════════════════════════════════════════════════════ */
|
|
273
|
+
|
|
274
|
+
@media (prefers-reduced-motion: reduce) {
|
|
275
|
+
.card {
|
|
276
|
+
transition-duration: 0.01ms !important;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.card--interactive:hover {
|
|
280
|
+
transform: none !important;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
`,
|
|
284
|
+
]; }
|
|
285
|
+
_handleClick(event) {
|
|
286
|
+
if (this.interactive) {
|
|
287
|
+
this.emit("oh-click", { originalEvent: event });
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
_handleKeyDown(event) {
|
|
291
|
+
if (this.interactive && (event.key === "Enter" || event.key === " ")) {
|
|
292
|
+
event.preventDefault();
|
|
293
|
+
this._handleClick(event);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
render() {
|
|
297
|
+
const classes = this.classMap({
|
|
298
|
+
card: true,
|
|
299
|
+
[`card--${this.variant}`]: true,
|
|
300
|
+
[`card--padding-${this.padding}`]: true,
|
|
301
|
+
"card--interactive": this.interactive,
|
|
302
|
+
});
|
|
303
|
+
return html `
|
|
304
|
+
<div
|
|
305
|
+
part="card"
|
|
306
|
+
class=${classes}
|
|
307
|
+
role=${this.interactive ? "button" : nothing}
|
|
308
|
+
tabindex=${this.interactive ? "0" : nothing}
|
|
309
|
+
@click=${this._handleClick}
|
|
310
|
+
@keydown=${this._handleKeyDown}
|
|
311
|
+
>
|
|
312
|
+
<div class="header" part="header">
|
|
313
|
+
<slot name="header"></slot>
|
|
314
|
+
</div>
|
|
315
|
+
|
|
316
|
+
<div class="content" part="content">
|
|
317
|
+
<slot></slot>
|
|
318
|
+
</div>
|
|
319
|
+
|
|
320
|
+
<div class="footer" part="footer">
|
|
321
|
+
<slot name="footer"></slot>
|
|
322
|
+
</div>
|
|
323
|
+
</div>
|
|
324
|
+
`;
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
__decorate([
|
|
328
|
+
property({ type: String, reflect: true })
|
|
329
|
+
], OhCard.prototype, "variant", void 0);
|
|
330
|
+
__decorate([
|
|
331
|
+
property({ type: Boolean, reflect: true })
|
|
332
|
+
], OhCard.prototype, "interactive", void 0);
|
|
333
|
+
__decorate([
|
|
334
|
+
property({ type: String, reflect: true })
|
|
335
|
+
], OhCard.prototype, "padding", void 0);
|
|
336
|
+
OhCard = __decorate([
|
|
337
|
+
customElement("oh-card")
|
|
338
|
+
], OhCard);
|
|
339
|
+
export { OhCard };
|
|
340
|
+
//# sourceMappingURL=oh-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-card.js","sourceRoot":"","sources":["../src/oh-card.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM3C,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,SAAS;IAA9B;;QAqPL,YAAO,GAAgB,QAAQ,CAAC;QAGhC,gBAAW,GAAG,KAAK,CAAC;QAGpB,YAAO,GAAgB,IAAI,CAAC;IA8C9B,CAAC;aAxSiB,WAAM,GAAG;QACvB,UAAU;QACV,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8OF;KACF,AAjPqB,CAiPpB;IAWM,YAAY,CAAC,KAAiB;QACpC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAoB;QACzC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;YACrE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,KAA8B,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC5B,IAAI,EAAE,IAAI;YACV,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI;YAC/B,CAAC,iBAAiB,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI;YACvC,mBAAmB,EAAE,IAAI,CAAC,WAAW;SACtC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAA;;;gBAGC,OAAO;eACR,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;mBACjC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO;iBAClC,IAAI,CAAC,YAAY;mBACf,IAAI,CAAC,cAAc;;;;;;;;;;;;;;KAcjC,CAAC;IACJ,CAAC;;AAnDD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;uCACV;AAGhC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;2CACvB;AAGpB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;uCACd;AA3PjB,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CAySlB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* oh-checkbox-group
|
|
3
|
+
*
|
|
4
|
+
* A checkbox group with proper semantics and group-level error handling.
|
|
5
|
+
* For single checkboxes, use oh-checkbox directly.
|
|
6
|
+
*
|
|
7
|
+
* ACCESSIBILITY:
|
|
8
|
+
* ─────────────
|
|
9
|
+
* - Uses <fieldset> and <legend> for proper semantics
|
|
10
|
+
* - Group-level error messaging with aria-describedby
|
|
11
|
+
* - Visible focus ring (outline, not inset)
|
|
12
|
+
* - aria-invalid for error state
|
|
13
|
+
*
|
|
14
|
+
* @element oh-checkbox-group
|
|
15
|
+
*/
|
|
16
|
+
import { OhElement } from "./base.js";
|
|
17
|
+
export interface CheckboxOption {
|
|
18
|
+
label: string;
|
|
19
|
+
value: string;
|
|
20
|
+
checked?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare class OhCheckboxGroup extends OhElement {
|
|
23
|
+
static styles: import("lit").CSSResult[];
|
|
24
|
+
legend: string;
|
|
25
|
+
name: string;
|
|
26
|
+
options: CheckboxOption[];
|
|
27
|
+
value: string[];
|
|
28
|
+
required: boolean;
|
|
29
|
+
error: boolean;
|
|
30
|
+
errorMessage: string;
|
|
31
|
+
private _handleChange;
|
|
32
|
+
render(): import("lit").TemplateResult<1>;
|
|
33
|
+
}
|
|
34
|
+
declare global {
|
|
35
|
+
interface HTMLElementTagNameMap {
|
|
36
|
+
"oh-checkbox-group": OhCheckboxGroup;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=oh-checkbox-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-checkbox-group.d.ts","sourceRoot":"","sources":["../src/oh-checkbox-group.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBACa,eAAgB,SAAQ,SAAS;IAC5C,OAAgB,MAAM,4BAgMpB;IAGF,MAAM,SAAM;IAGZ,IAAI,SAAM;IAGV,OAAO,EAAE,cAAc,EAAE,CAAM;IAG/B,KAAK,EAAE,MAAM,EAAE,CAAM;IAGrB,QAAQ,UAAS;IAGjB,KAAK,UAAS;IAGd,YAAY,SAAM;IAElB,OAAO,CAAC,aAAa;IAYrB,MAAM;CA8CP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-checkbox-group.figma.d.ts","sourceRoot":"","sources":["../src/oh-checkbox-group.figma.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import figma, { html } from "@figma/code-connect/html";
|
|
2
|
+
/**
|
|
3
|
+
* Code Connect for oh-checkbox-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-77", {
|
|
8
|
+
props: {
|
|
9
|
+
legend: figma.string("Legend"),
|
|
10
|
+
required: figma.boolean("Required"),
|
|
11
|
+
error: figma.boolean("Error"),
|
|
12
|
+
errorMessage: figma.string("Error Message"),
|
|
13
|
+
},
|
|
14
|
+
example: (props) => html `
|
|
15
|
+
<oh-checkbox-group
|
|
16
|
+
legend="${props.legend}"
|
|
17
|
+
?required="${props.required}"
|
|
18
|
+
?error="${props.error}"
|
|
19
|
+
error-message="${props.errorMessage}"
|
|
20
|
+
.options="\${options}"
|
|
21
|
+
></oh-checkbox-group>
|
|
22
|
+
`,
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=oh-checkbox-group.figma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oh-checkbox-group.figma.js","sourceRoot":"","sources":["../src/oh-checkbox-group.figma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;GAIG;AAEH,KAAK,CAAC,OAAO,CACX,uEAAuE,EACvE;IACE,KAAK,EAAE;QACL,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QACnC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;KAC5C;IACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAA;;kBAEV,KAAK,CAAC,MAAM;qBACT,KAAK,CAAC,QAAQ;kBACjB,KAAK,CAAC,KAAK;yBACJ,KAAK,CAAC,YAAY;;;KAGtC;CACF,CACF,CAAC"}
|