@orange-halo/components 1.0.0 → 2.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/dist/base.js +3 -3
- package/dist/oh-accordion.js +17 -17
- package/dist/oh-alert.js +15 -15
- package/dist/oh-badge.js +11 -11
- package/dist/oh-breadcrumb.js +8 -8
- package/dist/oh-button.d.ts +6 -0
- package/dist/oh-button.d.ts.map +1 -1
- package/dist/oh-button.js +105 -76
- package/dist/oh-button.js.map +1 -1
- package/dist/oh-card.js +28 -28
- package/dist/oh-checkbox-group.d.ts +8 -0
- package/dist/oh-checkbox-group.d.ts.map +1 -1
- package/dist/oh-checkbox-group.js +27 -13
- package/dist/oh-checkbox-group.js.map +1 -1
- package/dist/oh-checkbox.d.ts +9 -0
- package/dist/oh-checkbox.d.ts.map +1 -1
- package/dist/oh-checkbox.js +25 -9
- package/dist/oh-checkbox.js.map +1 -1
- package/dist/oh-container.d.ts +5 -5
- package/dist/oh-container.js +15 -15
- package/dist/oh-drawer.d.ts +7 -2
- package/dist/oh-drawer.d.ts.map +1 -1
- package/dist/oh-drawer.js +52 -25
- package/dist/oh-drawer.js.map +1 -1
- package/dist/oh-footer.js +4 -4
- package/dist/oh-hero.d.ts.map +1 -1
- package/dist/oh-hero.js +50 -51
- package/dist/oh-hero.js.map +1 -1
- package/dist/oh-icon.js +6 -6
- package/dist/oh-input.d.ts +9 -1
- package/dist/oh-input.d.ts.map +1 -1
- package/dist/oh-input.js +45 -33
- package/dist/oh-input.js.map +1 -1
- package/dist/oh-link.d.ts +1 -1
- package/dist/oh-link.js +15 -15
- package/dist/oh-modal.d.ts +8 -2
- package/dist/oh-modal.d.ts.map +1 -1
- package/dist/oh-modal.js +68 -65
- package/dist/oh-modal.js.map +1 -1
- package/dist/oh-navbar.d.ts.map +1 -1
- package/dist/oh-navbar.js +3 -4
- package/dist/oh-navbar.js.map +1 -1
- package/dist/oh-progress.d.ts.map +1 -1
- package/dist/oh-progress.js +20 -34
- package/dist/oh-progress.js.map +1 -1
- package/dist/oh-radio-group.d.ts +8 -0
- package/dist/oh-radio-group.d.ts.map +1 -1
- package/dist/oh-radio-group.js +27 -13
- package/dist/oh-radio-group.js.map +1 -1
- package/dist/oh-radio.d.ts +9 -0
- package/dist/oh-radio.d.ts.map +1 -1
- package/dist/oh-radio.js +26 -10
- package/dist/oh-radio.js.map +1 -1
- package/dist/oh-select.d.ts +8 -0
- package/dist/oh-select.d.ts.map +1 -1
- package/dist/oh-select.js +34 -20
- package/dist/oh-select.js.map +1 -1
- package/dist/oh-skip-link.d.ts.map +1 -1
- package/dist/oh-skip-link.js +13 -12
- package/dist/oh-skip-link.js.map +1 -1
- package/dist/oh-tabs.js +6 -6
- package/dist/oh-toggle.d.ts +5 -2
- package/dist/oh-toggle.d.ts.map +1 -1
- package/dist/oh-toggle.js +7 -9
- package/dist/oh-toggle.js.map +1 -1
- package/dist/styles/typography.js +46 -46
- package/package.json +7 -3
|
@@ -20,7 +20,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
20
20
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
21
21
|
};
|
|
22
22
|
import { html, css, nothing } from "lit";
|
|
23
|
-
import { customElement, property } from "lit/decorators.js";
|
|
23
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
24
24
|
import { OhElement, baseStyles } from "./base.js";
|
|
25
25
|
let OhCheckboxGroup = class OhCheckboxGroup extends OhElement {
|
|
26
26
|
constructor() {
|
|
@@ -32,6 +32,12 @@ let OhCheckboxGroup = class OhCheckboxGroup extends OhElement {
|
|
|
32
32
|
this.required = false;
|
|
33
33
|
this.error = false;
|
|
34
34
|
this.errorMessage = "";
|
|
35
|
+
/**
|
|
36
|
+
* Errors that appear after first render (e.g. on submit) are announced via
|
|
37
|
+
* role="alert". Errors present on page load are only linked with
|
|
38
|
+
* aria-describedby, so they aren't read out unprompted.
|
|
39
|
+
*/
|
|
40
|
+
this._announceError = false;
|
|
35
41
|
}
|
|
36
42
|
static { this.styles = [
|
|
37
43
|
baseStyles,
|
|
@@ -58,9 +64,9 @@ let OhCheckboxGroup = class OhCheckboxGroup extends OhElement {
|
|
|
58
64
|
}
|
|
59
65
|
|
|
60
66
|
legend {
|
|
61
|
-
font-family: var(--oh-font-family
|
|
62
|
-
font-size: var(--oh-font-size-
|
|
63
|
-
font-weight: var(--oh-font-weight
|
|
67
|
+
font-family: var(--oh-typography-control-font-family);
|
|
68
|
+
font-size: var(--oh-typography-control-font-size-sm);
|
|
69
|
+
font-weight: var(--oh-typography-control-font-weight);
|
|
64
70
|
color: var(--oh-color-text-primary);
|
|
65
71
|
margin-bottom: var(--oh-spacing-2);
|
|
66
72
|
padding: 0;
|
|
@@ -103,7 +109,7 @@ let OhCheckboxGroup = class OhCheckboxGroup extends OhElement {
|
|
|
103
109
|
height: 24px;
|
|
104
110
|
flex-shrink: 0;
|
|
105
111
|
border: var(--oh-input-base-border-width) solid var(--oh-color-border-emphasis);
|
|
106
|
-
border-radius: var(--oh-
|
|
112
|
+
border-radius: var(--oh-shape-compact);
|
|
107
113
|
background-color: var(--oh-color-surface-base);
|
|
108
114
|
box-shadow: 3px 3px 0 0 var(--oh-shadow-secondary);
|
|
109
115
|
transition:
|
|
@@ -128,9 +134,9 @@ let OhCheckboxGroup = class OhCheckboxGroup extends OhElement {
|
|
|
128
134
|
}
|
|
129
135
|
|
|
130
136
|
.option-label {
|
|
131
|
-
font-family: var(--oh-font-family
|
|
132
|
-
font-size: var(--oh-font-size-
|
|
133
|
-
line-height: var(--oh-
|
|
137
|
+
font-family: var(--oh-typography-control-font-family);
|
|
138
|
+
font-size: var(--oh-typography-control-font-size-md);
|
|
139
|
+
line-height: var(--oh-typography-body-base-line-height);
|
|
134
140
|
color: var(--oh-color-text-primary);
|
|
135
141
|
user-select: none;
|
|
136
142
|
}
|
|
@@ -202,16 +208,16 @@ let OhCheckboxGroup = class OhCheckboxGroup extends OhElement {
|
|
|
202
208
|
display: flex;
|
|
203
209
|
align-items: center;
|
|
204
210
|
gap: var(--oh-spacing-2);
|
|
205
|
-
font-family: var(--oh-font-family
|
|
206
|
-
font-size: var(--oh-font-size
|
|
211
|
+
font-family: var(--oh-typography-body-font-family);
|
|
212
|
+
font-size: var(--oh-typography-body-base-font-size);
|
|
207
213
|
color: var(--oh-color-feedback-error);
|
|
208
214
|
margin-bottom: var(--oh-spacing-2);
|
|
209
215
|
}
|
|
210
216
|
|
|
211
217
|
.error-icon {
|
|
212
218
|
flex-shrink: 0;
|
|
213
|
-
width: var(--oh-font-size
|
|
214
|
-
height: var(--oh-font-size
|
|
219
|
+
width: var(--oh-typography-body-lg-font-size);
|
|
220
|
+
height: var(--oh-typography-body-lg-font-size);
|
|
215
221
|
}
|
|
216
222
|
|
|
217
223
|
/* ═══════════════════════════════════════════════════════════════
|
|
@@ -236,6 +242,11 @@ let OhCheckboxGroup = class OhCheckboxGroup extends OhElement {
|
|
|
236
242
|
}
|
|
237
243
|
this.emit("oh-change", { value: this.value });
|
|
238
244
|
}
|
|
245
|
+
willUpdate(changed) {
|
|
246
|
+
if (this.hasUpdated && (changed.has("error") || changed.has("errorMessage"))) {
|
|
247
|
+
this._announceError = !!(this.error && this.errorMessage);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
239
250
|
render() {
|
|
240
251
|
return html `
|
|
241
252
|
<fieldset
|
|
@@ -252,7 +263,7 @@ let OhCheckboxGroup = class OhCheckboxGroup extends OhElement {
|
|
|
252
263
|
|
|
253
264
|
${this.error && this.errorMessage
|
|
254
265
|
? html `
|
|
255
|
-
<div id="error-msg" class="error-message" role
|
|
266
|
+
<div id="error-msg" class="error-message" role=${this._announceError ? "alert" : nothing}>
|
|
256
267
|
<svg class="error-icon" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
257
268
|
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd" />
|
|
258
269
|
</svg>
|
|
@@ -302,6 +313,9 @@ __decorate([
|
|
|
302
313
|
__decorate([
|
|
303
314
|
property({ type: String })
|
|
304
315
|
], OhCheckboxGroup.prototype, "errorMessage", void 0);
|
|
316
|
+
__decorate([
|
|
317
|
+
state()
|
|
318
|
+
], OhCheckboxGroup.prototype, "_announceError", void 0);
|
|
305
319
|
OhCheckboxGroup = __decorate([
|
|
306
320
|
customElement("oh-checkbox-group")
|
|
307
321
|
], OhCheckboxGroup);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-checkbox-group.js","sourceRoot":"","sources":["../src/oh-checkbox-group.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"oh-checkbox-group.js","sourceRoot":"","sources":["../src/oh-checkbox-group.ts"],"names":[],"mappings":"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"}
|
package/dist/oh-checkbox.d.ts
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
*
|
|
25
25
|
* @element oh-checkbox
|
|
26
26
|
*/
|
|
27
|
+
import { type PropertyValues } from "lit";
|
|
27
28
|
import { OhElement } from "./base.js";
|
|
28
29
|
export type CheckboxState = "default" | "hover" | "focus";
|
|
29
30
|
export declare class OhCheckbox extends OhElement {
|
|
@@ -40,6 +41,14 @@ export declare class OhCheckbox extends OhElement {
|
|
|
40
41
|
*/
|
|
41
42
|
forceState: CheckboxState;
|
|
42
43
|
private _handleChange;
|
|
44
|
+
/**
|
|
45
|
+
* Errors that appear after first render (e.g. on submit) are announced via
|
|
46
|
+
* role="alert". Errors present on page load are only linked with
|
|
47
|
+
* aria-describedby, so they aren't read out unprompted.
|
|
48
|
+
*/
|
|
49
|
+
private _announceError;
|
|
50
|
+
private _errorId;
|
|
51
|
+
willUpdate(changed: PropertyValues): void;
|
|
43
52
|
render(): import("lit").TemplateResult<1>;
|
|
44
53
|
}
|
|
45
54
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-checkbox.d.ts","sourceRoot":"","sources":["../src/oh-checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;
|
|
1
|
+
{"version":3,"file":"oh-checkbox.d.ts","sourceRoot":"","sources":["../src/oh-checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1D,qBACa,UAAW,SAAQ,SAAS;IACvC,OAAgB,MAAM,4BAyMpB;IAGF,OAAO,UAAS;IAGhB,KAAK,SAAM;IAGX,IAAI,SAAM;IAGV,KAAK,SAAM;IAGX,KAAK,UAAS;IAGd,YAAY,SAAM;IAElB;;;OAGG;IAEH,UAAU,EAAE,aAAa,CAAa;IAEtC,OAAO,CAAC,aAAa;IAMrB;;;;OAIG;IAEH,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,QAAQ,CAAkE;IAElF,UAAU,CAAC,OAAO,EAAE,cAAc;IAMlC,MAAM;CAiCP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
|
package/dist/oh-checkbox.js
CHANGED
|
@@ -30,8 +30,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
30
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
31
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
32
32
|
};
|
|
33
|
-
import { html, css } from "lit";
|
|
34
|
-
import { customElement, property } from "lit/decorators.js";
|
|
33
|
+
import { html, css, nothing } from "lit";
|
|
34
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
35
35
|
import { OhElement, baseStyles } from "./base.js";
|
|
36
36
|
let OhCheckbox = class OhCheckbox extends OhElement {
|
|
37
37
|
constructor() {
|
|
@@ -47,6 +47,13 @@ let OhCheckbox = class OhCheckbox extends OhElement {
|
|
|
47
47
|
* Values: 'hover' | 'focus'
|
|
48
48
|
*/
|
|
49
49
|
this.forceState = "default";
|
|
50
|
+
/**
|
|
51
|
+
* Errors that appear after first render (e.g. on submit) are announced via
|
|
52
|
+
* role="alert". Errors present on page load are only linked with
|
|
53
|
+
* aria-describedby, so they aren't read out unprompted.
|
|
54
|
+
*/
|
|
55
|
+
this._announceError = false;
|
|
56
|
+
this._errorId = `oh-checkbox-error-${Math.random().toString(36).slice(2, 11)}`;
|
|
50
57
|
}
|
|
51
58
|
static { this.styles = [
|
|
52
59
|
baseStyles,
|
|
@@ -92,7 +99,7 @@ let OhCheckbox = class OhCheckbox extends OhElement {
|
|
|
92
99
|
|
|
93
100
|
/* Chunky border */
|
|
94
101
|
border: var(--oh-input-base-border-width) solid var(--oh-color-border-emphasis);
|
|
95
|
-
border-radius: var(--oh-
|
|
102
|
+
border-radius: var(--oh-shape-compact);
|
|
96
103
|
|
|
97
104
|
/* Offset shadow like primary button */
|
|
98
105
|
background-color: var(--oh-color-surface-base);
|
|
@@ -174,9 +181,9 @@ let OhCheckbox = class OhCheckbox extends OhElement {
|
|
|
174
181
|
═══════════════════════════════════════════════════════════════ */
|
|
175
182
|
|
|
176
183
|
.label {
|
|
177
|
-
font-family: var(--oh-font-family
|
|
178
|
-
font-size: var(--oh-font-size-
|
|
179
|
-
line-height: var(--oh-
|
|
184
|
+
font-family: var(--oh-typography-control-font-family);
|
|
185
|
+
font-size: var(--oh-typography-control-font-size-md);
|
|
186
|
+
line-height: var(--oh-typography-body-base-line-height);
|
|
180
187
|
color: var(--oh-color-text-primary);
|
|
181
188
|
user-select: none;
|
|
182
189
|
padding-top: 0; /* Align with checkbox */
|
|
@@ -200,8 +207,8 @@ let OhCheckbox = class OhCheckbox extends OhElement {
|
|
|
200
207
|
display: flex;
|
|
201
208
|
align-items: center;
|
|
202
209
|
gap: var(--oh-spacing-2);
|
|
203
|
-
font-family: var(--oh-font-family
|
|
204
|
-
font-size: var(--oh-font-size
|
|
210
|
+
font-family: var(--oh-typography-body-font-family);
|
|
211
|
+
font-size: var(--oh-typography-body-base-font-size);
|
|
205
212
|
color: var(--oh-color-feedback-error);
|
|
206
213
|
margin-top: var(--oh-spacing-1);
|
|
207
214
|
margin-left: calc(24px + var(--oh-spacing-3)); /* Align with label */
|
|
@@ -255,6 +262,11 @@ let OhCheckbox = class OhCheckbox extends OhElement {
|
|
|
255
262
|
this.checked = target.checked;
|
|
256
263
|
this.emit("oh-change", { checked: this.checked, value: this.value });
|
|
257
264
|
}
|
|
265
|
+
willUpdate(changed) {
|
|
266
|
+
if (this.hasUpdated && (changed.has("error") || changed.has("errorMessage"))) {
|
|
267
|
+
this._announceError = !!(this.error && this.errorMessage);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
258
270
|
render() {
|
|
259
271
|
const inputId = this.name || `oh-checkbox-${Math.random().toString(36).substr(2, 9)}`;
|
|
260
272
|
return html `
|
|
@@ -268,6 +280,7 @@ let OhCheckbox = class OhCheckbox extends OhElement {
|
|
|
268
280
|
.value=${this.value}
|
|
269
281
|
.checked=${this.checked}
|
|
270
282
|
aria-invalid=${this.error ? "true" : "false"}
|
|
283
|
+
aria-describedby=${this.error && this.errorMessage ? this._errorId : nothing}
|
|
271
284
|
@change=${this._handleChange}
|
|
272
285
|
/>
|
|
273
286
|
<span class="checkbox-box" part="box"></span>
|
|
@@ -275,7 +288,7 @@ let OhCheckbox = class OhCheckbox extends OhElement {
|
|
|
275
288
|
</label>
|
|
276
289
|
${this.error && this.errorMessage
|
|
277
290
|
? html `
|
|
278
|
-
<div class="error-message" part="error" role
|
|
291
|
+
<div id=${this._errorId} class="error-message" part="error" role=${this._announceError ? "alert" : nothing}>
|
|
279
292
|
<svg class="error-icon" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
|
280
293
|
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd" />
|
|
281
294
|
</svg>
|
|
@@ -308,6 +321,9 @@ __decorate([
|
|
|
308
321
|
__decorate([
|
|
309
322
|
property({ type: String, reflect: true, attribute: "force-state" })
|
|
310
323
|
], OhCheckbox.prototype, "forceState", void 0);
|
|
324
|
+
__decorate([
|
|
325
|
+
state()
|
|
326
|
+
], OhCheckbox.prototype, "_announceError", void 0);
|
|
311
327
|
OhCheckbox = __decorate([
|
|
312
328
|
customElement("oh-checkbox")
|
|
313
329
|
], OhCheckbox);
|
package/dist/oh-checkbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-checkbox.js","sourceRoot":"","sources":["../src/oh-checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"oh-checkbox.js","sourceRoot":"","sources":["../src/oh-checkbox.ts"],"names":[],"mappings":"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"}
|
package/dist/oh-container.d.ts
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
*
|
|
7
7
|
* DESIGN DECISIONS:
|
|
8
8
|
* ─────────────────
|
|
9
|
-
* 1. RESPONSIVE MAX-WIDTHS
|
|
10
|
-
* - sm:
|
|
11
|
-
* - md:
|
|
12
|
-
* - lg:
|
|
13
|
-
* - xl:
|
|
9
|
+
* 1. RESPONSIVE MAX-WIDTHS (layout.container.*)
|
|
10
|
+
* - sm: tight, focused content
|
|
11
|
+
* - md: articles, forms
|
|
12
|
+
* - lg: standard pages
|
|
13
|
+
* - xl: wide layouts
|
|
14
14
|
* - full: 100% (edge-to-edge)
|
|
15
15
|
*
|
|
16
16
|
* 2. CONSISTENT PADDING
|
package/dist/oh-container.js
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
*
|
|
7
7
|
* DESIGN DECISIONS:
|
|
8
8
|
* ─────────────────
|
|
9
|
-
* 1. RESPONSIVE MAX-WIDTHS
|
|
10
|
-
* - sm:
|
|
11
|
-
* - md:
|
|
12
|
-
* - lg:
|
|
13
|
-
* - xl:
|
|
9
|
+
* 1. RESPONSIVE MAX-WIDTHS (layout.container.*)
|
|
10
|
+
* - sm: tight, focused content
|
|
11
|
+
* - md: articles, forms
|
|
12
|
+
* - lg: standard pages
|
|
13
|
+
* - xl: wide layouts
|
|
14
14
|
* - full: 100% (edge-to-edge)
|
|
15
15
|
*
|
|
16
16
|
* 2. CONSISTENT PADDING
|
|
@@ -50,26 +50,26 @@ let OhContainer = class OhContainer extends OhElement {
|
|
|
50
50
|
width: 100%;
|
|
51
51
|
margin-left: auto;
|
|
52
52
|
margin-right: auto;
|
|
53
|
-
padding-left: var(--oh-spacing-4
|
|
54
|
-
padding-right: var(--oh-spacing-4
|
|
53
|
+
padding-left: var(--oh-spacing-4);
|
|
54
|
+
padding-right: var(--oh-spacing-4);
|
|
55
55
|
box-sizing: border-box;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/* Size variants */
|
|
59
59
|
:host([size="sm"]) {
|
|
60
|
-
max-width:
|
|
60
|
+
max-width: var(--oh-layout-container-sm);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
:host([size="md"]) {
|
|
64
|
-
max-width:
|
|
64
|
+
max-width: var(--oh-layout-container-md);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
:host([size="lg"]) {
|
|
68
|
-
max-width:
|
|
68
|
+
max-width: var(--oh-layout-container-lg);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
:host([size="xl"]) {
|
|
72
|
-
max-width:
|
|
72
|
+
max-width: var(--oh-layout-container-xl);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
:host([size="full"]) {
|
|
@@ -81,15 +81,15 @@ let OhContainer = class OhContainer extends OhElement {
|
|
|
81
81
|
/* Responsive padding */
|
|
82
82
|
@media (min-width: 640px) {
|
|
83
83
|
:host {
|
|
84
|
-
padding-left: var(--oh-spacing-6
|
|
85
|
-
padding-right: var(--oh-spacing-6
|
|
84
|
+
padding-left: var(--oh-spacing-6);
|
|
85
|
+
padding-right: var(--oh-spacing-6);
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
@media (min-width: 1024px) {
|
|
90
90
|
:host {
|
|
91
|
-
padding-left: var(--oh-spacing-8
|
|
92
|
-
padding-right: var(--oh-spacing-8
|
|
91
|
+
padding-left: var(--oh-spacing-8);
|
|
92
|
+
padding-right: var(--oh-spacing-8);
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
package/dist/oh-drawer.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* - Smooth slide animation
|
|
17
17
|
*
|
|
18
18
|
* 3. ACCESSIBILITY
|
|
19
|
-
* - Focus trap when open
|
|
19
|
+
* - Focus trap when open (focus guards at each end of the panel)
|
|
20
20
|
* - Escape key closes
|
|
21
21
|
* - aria-modal and role="dialog"
|
|
22
22
|
* - Returns focus to trigger on close
|
|
@@ -43,7 +43,6 @@ export declare class OhDrawer extends OhElement {
|
|
|
43
43
|
/** Element that triggered the drawer (for focus return) */
|
|
44
44
|
private _triggerElement;
|
|
45
45
|
private _drawer;
|
|
46
|
-
private _cleanupFocusTrap?;
|
|
47
46
|
connectedCallback(): void;
|
|
48
47
|
disconnectedCallback(): void;
|
|
49
48
|
updated(changedProperties: Map<string, unknown>): void;
|
|
@@ -52,6 +51,12 @@ export declare class OhDrawer extends OhElement {
|
|
|
52
51
|
private _handleKeydown;
|
|
53
52
|
private _close;
|
|
54
53
|
private _handleBackdropClick;
|
|
54
|
+
/**
|
|
55
|
+
* Focus guards: Tab past the last control lands on the end guard, which
|
|
56
|
+
* wraps to the first; Shift+Tab before the first wraps to the last. This
|
|
57
|
+
* holds however the browser orders Tab (Safari skips links by default).
|
|
58
|
+
*/
|
|
59
|
+
private _focusEdge;
|
|
55
60
|
/** Public method to open the drawer */
|
|
56
61
|
show(): void;
|
|
57
62
|
/** Public method to close the drawer */
|
package/dist/oh-drawer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-drawer.d.ts","sourceRoot":"","sources":["../src/oh-drawer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAGlD,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AAEtB,qBACa,QAAS,SAAQ,SAAS;IACrC,OAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"oh-drawer.d.ts","sourceRoot":"","sources":["../src/oh-drawer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAGlD,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AAEtB,qBACa,QAAS,SAAQ,SAAS;IACrC,OAAgB,MAAM,4BAmHpB;IAEF,iCAAiC;IAEjC,IAAI,UAAS;IAEb,6BAA6B;IAE7B,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAU;IAEpC,uCAAuC;IAEvC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2DAA2D;IAE3D,OAAO,CAAC,eAAe,CAA4B;IAGnD,OAAO,CAAC,OAAO,CAAe;IAE9B,iBAAiB;IAKjB,oBAAoB;IAKpB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAU/C,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,oBAAoB;IAI5B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAKlB,uCAAuC;IACvC,IAAI;IAIJ,wCAAwC;IACxC,IAAI;IAIJ,MAAM;CAiDP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}
|
package/dist/oh-drawer.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* - Smooth slide animation
|
|
17
17
|
*
|
|
18
18
|
* 3. ACCESSIBILITY
|
|
19
|
-
* - Focus trap when open
|
|
19
|
+
* - Focus trap when open (focus guards at each end of the panel)
|
|
20
20
|
* - Escape key closes
|
|
21
21
|
* - aria-modal and role="dialog"
|
|
22
22
|
* - Returns focus to trigger on close
|
|
@@ -38,7 +38,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
38
38
|
import { html, css } from "lit";
|
|
39
39
|
import { customElement, property, state, query } from "lit/decorators.js";
|
|
40
40
|
import { OhElement, baseStyles } from "./base.js";
|
|
41
|
-
import {
|
|
41
|
+
import { getFocusableElementsDeep } from "@orange-halo/utils";
|
|
42
42
|
import "./oh-button.js";
|
|
43
43
|
import "./oh-icon.js";
|
|
44
44
|
let OhDrawer = class OhDrawer extends OhElement {
|
|
@@ -86,14 +86,27 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
86
86
|
z-index: 1000;
|
|
87
87
|
display: flex;
|
|
88
88
|
flex-direction: column;
|
|
89
|
-
|
|
89
|
+
/* Hidden once it has slid away, so its shadow can't show at the
|
|
90
|
+
viewport edge while closed */
|
|
91
|
+
visibility: hidden;
|
|
92
|
+
transition:
|
|
93
|
+
transform var(--oh-motion-relaxed) var(--oh-motion-ease-gentle),
|
|
94
|
+
visibility 0s linear var(--oh-motion-relaxed);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* Opening: visible at once, so focus can move into the panel on the
|
|
98
|
+
next frame (see ACCESSIBILITY_LESSONS.md 21) */
|
|
99
|
+
.drawer.is-open {
|
|
100
|
+
visibility: visible;
|
|
101
|
+
transition:
|
|
102
|
+
transform var(--oh-motion-relaxed) var(--oh-motion-ease-gentle),
|
|
103
|
+
visibility 0s;
|
|
90
104
|
}
|
|
91
105
|
|
|
92
106
|
/* Left position (default) */
|
|
93
107
|
.drawer--left {
|
|
94
108
|
left: 0;
|
|
95
|
-
|
|
96
|
-
box-shadow: var(--oh-shadow-lg);
|
|
109
|
+
box-shadow: var(--oh-elevation-strong);
|
|
97
110
|
transform: translateX(-100%);
|
|
98
111
|
}
|
|
99
112
|
|
|
@@ -104,8 +117,7 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
104
117
|
/* Right position */
|
|
105
118
|
.drawer--right {
|
|
106
119
|
right: 0;
|
|
107
|
-
|
|
108
|
-
box-shadow: calc(-1 * var(--oh-shadow-offset-x, 4px)) var(--oh-shadow-offset-y, 4px) 0 0 var(--oh-color-warm-dune);
|
|
120
|
+
box-shadow: -4px 4px 0 0 var(--oh-color-border-strong);
|
|
109
121
|
transform: translateX(100%);
|
|
110
122
|
}
|
|
111
123
|
|
|
@@ -119,14 +131,13 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
119
131
|
align-items: center;
|
|
120
132
|
justify-content: space-between;
|
|
121
133
|
padding: var(--oh-spacing-4);
|
|
122
|
-
border-bottom: var(--oh-border-width-md) solid var(--oh-color-border-default);
|
|
123
134
|
flex-shrink: 0;
|
|
124
135
|
}
|
|
125
136
|
|
|
126
137
|
.drawer__title {
|
|
127
|
-
font-family: var(--oh-font-family
|
|
128
|
-
font-size: var(--oh-font-size
|
|
129
|
-
font-weight: var(--oh-font-weight
|
|
138
|
+
font-family: var(--oh-typography-body-font-family);
|
|
139
|
+
font-size: var(--oh-typography-heading-h5-font-size);
|
|
140
|
+
font-weight: var(--oh-typography-emphasis-font-weight);
|
|
130
141
|
color: var(--oh-color-text-primary);
|
|
131
142
|
margin: 0;
|
|
132
143
|
}
|
|
@@ -138,6 +149,15 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
138
149
|
padding: var(--oh-spacing-4);
|
|
139
150
|
}
|
|
140
151
|
|
|
152
|
+
/* Focus guards: focusable but never seen; focus moves on at once. */
|
|
153
|
+
.focus-guard {
|
|
154
|
+
position: absolute;
|
|
155
|
+
width: 1px;
|
|
156
|
+
height: 1px;
|
|
157
|
+
overflow: hidden;
|
|
158
|
+
clip-path: inset(50%);
|
|
159
|
+
}
|
|
160
|
+
|
|
141
161
|
/* Reduced motion */
|
|
142
162
|
@media (prefers-reduced-motion: reduce) {
|
|
143
163
|
.drawer-backdrop,
|
|
@@ -154,7 +174,6 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
154
174
|
disconnectedCallback() {
|
|
155
175
|
super.disconnectedCallback();
|
|
156
176
|
document.removeEventListener("keydown", this._handleKeydown);
|
|
157
|
-
this._cleanupFocusTrap?.();
|
|
158
177
|
}
|
|
159
178
|
updated(changedProperties) {
|
|
160
179
|
if (changedProperties.has("open")) {
|
|
@@ -167,20 +186,20 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
167
186
|
}
|
|
168
187
|
}
|
|
169
188
|
_onOpen() {
|
|
170
|
-
// Store the trigger element for focus return
|
|
171
|
-
|
|
189
|
+
// Store the trigger element for focus return. Follow focus into shadow
|
|
190
|
+
// roots: a trigger inside another component (the navbar's menu button)
|
|
191
|
+
// is reported as that component's host, which can't take focus.
|
|
192
|
+
let active = document.activeElement;
|
|
193
|
+
while (active?.shadowRoot?.activeElement)
|
|
194
|
+
active = active.shadowRoot.activeElement;
|
|
195
|
+
this._triggerElement = active;
|
|
172
196
|
// Prevent body scroll
|
|
173
197
|
document.body.style.overflow = "hidden";
|
|
174
198
|
// Add keydown listener
|
|
175
199
|
document.addEventListener("keydown", this._handleKeydown);
|
|
176
|
-
//
|
|
200
|
+
// Focus the close button after render. The focus guards keep focus inside.
|
|
177
201
|
requestAnimationFrame(() => {
|
|
178
|
-
|
|
179
|
-
this._cleanupFocusTrap = trapFocus(this._drawer);
|
|
180
|
-
// Focus the close button
|
|
181
|
-
const closeBtn = this._drawer.querySelector("oh-button");
|
|
182
|
-
closeBtn?.focus();
|
|
183
|
-
}
|
|
202
|
+
this._drawer?.querySelector("oh-button")?.focus();
|
|
184
203
|
});
|
|
185
204
|
}
|
|
186
205
|
_onClose() {
|
|
@@ -188,9 +207,6 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
188
207
|
document.body.style.overflow = "";
|
|
189
208
|
// Remove keydown listener
|
|
190
209
|
document.removeEventListener("keydown", this._handleKeydown);
|
|
191
|
-
// Clean up focus trap
|
|
192
|
-
this._cleanupFocusTrap?.();
|
|
193
|
-
this._cleanupFocusTrap = undefined;
|
|
194
210
|
// Return focus to trigger
|
|
195
211
|
this._triggerElement?.focus();
|
|
196
212
|
this._triggerElement = null;
|
|
@@ -208,6 +224,15 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
208
224
|
_handleBackdropClick() {
|
|
209
225
|
this._close();
|
|
210
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Focus guards: Tab past the last control lands on the end guard, which
|
|
229
|
+
* wraps to the first; Shift+Tab before the first wraps to the last. This
|
|
230
|
+
* holds however the browser orders Tab (Safari skips links by default).
|
|
231
|
+
*/
|
|
232
|
+
_focusEdge(edge) {
|
|
233
|
+
const items = getFocusableElementsDeep(this._drawer).filter((el) => !el.classList.contains("focus-guard"));
|
|
234
|
+
(edge === "first" ? items[0] : items[items.length - 1])?.focus();
|
|
235
|
+
}
|
|
211
236
|
/** Public method to open the drawer */
|
|
212
237
|
show() {
|
|
213
238
|
this.open = true;
|
|
@@ -240,6 +265,7 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
240
265
|
aria-label=${this.heading || "Navigation menu"}
|
|
241
266
|
?inert=${!this.open}
|
|
242
267
|
>
|
|
268
|
+
<span class="focus-guard" tabindex="0" @focus=${() => this._focusEdge("last")}></span>
|
|
243
269
|
<div class="drawer__header">
|
|
244
270
|
${this.heading
|
|
245
271
|
? html `<h2 class="drawer__title">${this.heading}</h2>`
|
|
@@ -248,7 +274,7 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
248
274
|
variant="secondary"
|
|
249
275
|
size="sm"
|
|
250
276
|
icon-only
|
|
251
|
-
|
|
277
|
+
accessible-label="Close menu"
|
|
252
278
|
@click=${this._close}
|
|
253
279
|
>
|
|
254
280
|
<oh-icon name="close"></oh-icon>
|
|
@@ -258,6 +284,7 @@ let OhDrawer = class OhDrawer extends OhElement {
|
|
|
258
284
|
<div class="drawer__content">
|
|
259
285
|
<slot></slot>
|
|
260
286
|
</div>
|
|
287
|
+
<span class="focus-guard" tabindex="0" @focus=${() => this._focusEdge("first")}></span>
|
|
261
288
|
</div>
|
|
262
289
|
`;
|
|
263
290
|
}
|
package/dist/oh-drawer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-drawer.js","sourceRoot":"","sources":["../src/oh-drawer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"oh-drawer.js","sourceRoot":"","sources":["../src/oh-drawer.ts"],"names":[],"mappings":"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"}
|
package/dist/oh-footer.js
CHANGED
|
@@ -47,9 +47,9 @@ let OhFooter = class OhFooter extends OhElement {
|
|
|
47
47
|
display: block;
|
|
48
48
|
background-color: var(--oh-color-accent-default);
|
|
49
49
|
color: var(--oh-color-text-on-accent);
|
|
50
|
-
font-family: var(--oh-font-family
|
|
51
|
-
font-size: var(--oh-font-size
|
|
52
|
-
line-height: var(--oh-line-height
|
|
50
|
+
font-family: var(--oh-typography-body-font-family);
|
|
51
|
+
font-size: var(--oh-typography-body-base-font-size);
|
|
52
|
+
line-height: var(--oh-typography-body-base-line-height);
|
|
53
53
|
padding: var(--oh-spacing-8) 0;
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -69,7 +69,7 @@ let OhFooter = class OhFooter extends OhElement {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/* Responsive - tablet: brand section spans full width */
|
|
72
|
-
@media (max-width:
|
|
72
|
+
@media (max-width: 768px) {
|
|
73
73
|
.footer__brand {
|
|
74
74
|
grid-column: 1 / -1;
|
|
75
75
|
}
|
package/dist/oh-hero.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-hero.d.ts","sourceRoot":"","sources":["../src/oh-hero.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAGrD,OAAO,kBAAkB,CAAC;AAE1B,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAChD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,qBACa,MAAO,SAAQ,UAAU;IACpC,OAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"oh-hero.d.ts","sourceRoot":"","sources":["../src/oh-hero.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAGrD,OAAO,kBAAkB,CAAC;AAE1B,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAChD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,qBACa,MAAO,SAAQ,UAAU;IACpC,OAAgB,MAAM,0BA+IpB;IAGF,OAAO,EAAE,WAAW,CAAa;IAGjC,IAAI,EAAE,QAAQ,CAAQ;IAGtB,OAAO,SAAM;IAGb,QAAQ,SAAM;IAGd,WAAW,SAAM;IAGjB,WAAW,SAAK;IAGhB,UAAU,SAAK;IAEN,MAAM;CA4ChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}
|