@orange-halo/components 2.2.0 → 3.1.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 +565 -328
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +7 -0
- package/dist/base.js.map +1 -1
- package/dist/index.d.ts +2 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/oh-accordion.d.ts +53 -8
- package/dist/oh-accordion.d.ts.map +1 -1
- package/dist/oh-accordion.js +83 -21
- package/dist/oh-accordion.js.map +1 -1
- package/dist/oh-alert.d.ts +26 -8
- package/dist/oh-alert.d.ts.map +1 -1
- package/dist/oh-alert.js +32 -14
- package/dist/oh-alert.js.map +1 -1
- package/dist/oh-badge.d.ts +32 -13
- package/dist/oh-badge.d.ts.map +1 -1
- package/dist/oh-badge.js +35 -16
- package/dist/oh-badge.js.map +1 -1
- package/dist/oh-breadcrumb.d.ts +39 -12
- package/dist/oh-breadcrumb.d.ts.map +1 -1
- package/dist/oh-breadcrumb.js +43 -21
- package/dist/oh-breadcrumb.js.map +1 -1
- package/dist/oh-button.d.ts +50 -24
- package/dist/oh-button.d.ts.map +1 -1
- package/dist/oh-button.js +66 -47
- package/dist/oh-button.js.map +1 -1
- package/dist/oh-card.d.ts +47 -19
- package/dist/oh-card.d.ts.map +1 -1
- package/dist/oh-card.js +110 -82
- package/dist/oh-card.js.map +1 -1
- package/dist/oh-checkbox-group.d.ts +56 -12
- package/dist/oh-checkbox-group.d.ts.map +1 -1
- package/dist/oh-checkbox-group.js +87 -45
- package/dist/oh-checkbox-group.js.map +1 -1
- package/dist/oh-checkbox.d.ts +55 -18
- package/dist/oh-checkbox.d.ts.map +1 -1
- package/dist/oh-checkbox.js +91 -59
- package/dist/oh-checkbox.js.map +1 -1
- package/dist/oh-cluster.d.ts +19 -14
- package/dist/oh-cluster.d.ts.map +1 -1
- package/dist/oh-cluster.js +19 -19
- package/dist/oh-cluster.js.map +1 -1
- package/dist/oh-container.d.ts +19 -16
- package/dist/oh-container.d.ts.map +1 -1
- package/dist/oh-container.js +26 -33
- package/dist/oh-container.js.map +1 -1
- package/dist/oh-drawer.d.ts +36 -14
- package/dist/oh-drawer.d.ts.map +1 -1
- package/dist/oh-drawer.js +57 -26
- package/dist/oh-drawer.js.map +1 -1
- package/dist/oh-footer.d.ts +37 -18
- package/dist/oh-footer.d.ts.map +1 -1
- package/dist/oh-footer.js +38 -19
- package/dist/oh-footer.js.map +1 -1
- package/dist/oh-grid.d.ts +27 -14
- package/dist/oh-grid.d.ts.map +1 -1
- package/dist/oh-grid.js +27 -19
- package/dist/oh-grid.js.map +1 -1
- package/dist/oh-icon.d.ts +21 -5
- package/dist/oh-icon.d.ts.map +1 -1
- package/dist/oh-icon.js +28 -5
- package/dist/oh-icon.js.map +1 -1
- package/dist/oh-input.d.ts +105 -21
- package/dist/oh-input.d.ts.map +1 -1
- package/dist/oh-input.js +207 -68
- package/dist/oh-input.js.map +1 -1
- package/dist/oh-link.d.ts +42 -19
- package/dist/oh-link.d.ts.map +1 -1
- package/dist/oh-link.js +56 -34
- package/dist/oh-link.js.map +1 -1
- package/dist/oh-modal.d.ts +29 -6
- package/dist/oh-modal.d.ts.map +1 -1
- package/dist/oh-modal.js +37 -16
- package/dist/oh-modal.js.map +1 -1
- package/dist/oh-navbar.d.ts +42 -19
- package/dist/oh-navbar.d.ts.map +1 -1
- package/dist/oh-navbar.js +44 -21
- package/dist/oh-navbar.js.map +1 -1
- package/dist/oh-progress.d.ts +26 -7
- package/dist/oh-progress.d.ts.map +1 -1
- package/dist/oh-progress.js +32 -13
- package/dist/oh-progress.js.map +1 -1
- package/dist/oh-radio-group.d.ts +55 -13
- package/dist/oh-radio-group.d.ts.map +1 -1
- package/dist/oh-radio-group.js +84 -44
- package/dist/oh-radio-group.js.map +1 -1
- package/dist/oh-radio.d.ts +56 -18
- package/dist/oh-radio.d.ts.map +1 -1
- package/dist/oh-radio.js +93 -60
- package/dist/oh-radio.js.map +1 -1
- package/dist/oh-select.d.ts +58 -16
- package/dist/oh-select.d.ts.map +1 -1
- package/dist/oh-select.js +72 -36
- package/dist/oh-select.js.map +1 -1
- package/dist/oh-skip-link.d.ts +33 -15
- package/dist/oh-skip-link.d.ts.map +1 -1
- package/dist/oh-skip-link.js +39 -26
- package/dist/oh-skip-link.js.map +1 -1
- package/dist/oh-stack.d.ts +17 -14
- package/dist/oh-stack.d.ts.map +1 -1
- package/dist/oh-stack.js +18 -20
- package/dist/oh-stack.js.map +1 -1
- package/dist/oh-tabs.d.ts +56 -30
- package/dist/oh-tabs.d.ts.map +1 -1
- package/dist/oh-tabs.js +89 -70
- package/dist/oh-tabs.js.map +1 -1
- package/dist/oh-textarea.d.ts +37 -6
- package/dist/oh-textarea.d.ts.map +1 -1
- package/dist/oh-textarea.js +40 -9
- package/dist/oh-textarea.js.map +1 -1
- package/dist/oh-toggle.d.ts +45 -12
- package/dist/oh-toggle.d.ts.map +1 -1
- package/dist/oh-toggle.js +68 -33
- package/dist/oh-toggle.js.map +1 -1
- package/dist/styles/typography.d.ts.map +1 -1
- package/dist/styles/typography.js +1 -2
- package/dist/styles/typography.js.map +1 -1
- package/package.json +3 -7
- package/dist/oh-button.figma.d.ts +0 -2
- package/dist/oh-button.figma.d.ts.map +0 -1
- package/dist/oh-button.figma.js +0 -18
- package/dist/oh-button.figma.js.map +0 -1
- package/dist/oh-checkbox-group.figma.d.ts +0 -2
- package/dist/oh-checkbox-group.figma.d.ts.map +0 -1
- package/dist/oh-checkbox-group.figma.js +0 -24
- package/dist/oh-checkbox-group.figma.js.map +0 -1
- package/dist/oh-hero.d.ts +0 -33
- package/dist/oh-hero.d.ts.map +0 -1
- package/dist/oh-hero.js +0 -248
- package/dist/oh-hero.js.map +0 -1
- package/dist/oh-input.figma.d.ts +0 -2
- package/dist/oh-input.figma.d.ts.map +0 -1
- package/dist/oh-input.figma.js +0 -36
- package/dist/oh-input.figma.js.map +0 -1
- package/dist/oh-radio-group.figma.d.ts +0 -2
- package/dist/oh-radio-group.figma.d.ts.map +0 -1
- package/dist/oh-radio-group.figma.js +0 -22
- package/dist/oh-radio-group.figma.js.map +0 -1
package/dist/oh-tabs.js
CHANGED
|
@@ -1,28 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* oh-tabs
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
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
|
|
4
|
+
* DESIGN DECISIONS:
|
|
5
|
+
* ─────────────────
|
|
6
|
+
* 1. WAI-ARIA tabs pattern: tablist / tab / tabpanel roles, roving tabindex,
|
|
7
|
+
* inactive panels `hidden`.
|
|
8
|
+
* 2. Manual activation: arrow keys and Home/End move focus only;
|
|
9
|
+
* Enter/Space selects and moves focus into the panel. Tab leaves the
|
|
10
|
+
* tablist.
|
|
11
|
+
* 3. The selected tab joins the panel: it shares the panel's surface and
|
|
12
|
+
* border, and covers the panel's top border beneath it.
|
|
13
|
+
* 4. Focus is a solid underline on the tab label (and an outline on the
|
|
14
|
+
* panel), never colour alone.
|
|
26
15
|
*/
|
|
27
16
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
28
17
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -33,17 +22,54 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
33
22
|
import { html, css } from "lit";
|
|
34
23
|
import { customElement, property, state } from "lit/decorators.js";
|
|
35
24
|
import { OhElement, baseStyles } from "./base.js";
|
|
25
|
+
/**
|
|
26
|
+
* A set of tabs that switches between panels of related content in the same place.
|
|
27
|
+
*
|
|
28
|
+
* **Use it for** a few peer sections of content where only one needs to be
|
|
29
|
+
* seen at a time. **Don't use it for** navigating between pages (use links
|
|
30
|
+
* or `oh-navbar`), or for content people need to compare side by side.
|
|
31
|
+
*
|
|
32
|
+
* **Parts:** pass `items`, an array of `{ id, label, content? }`. A panel
|
|
33
|
+
* shows `content` as text, or else the light-DOM element with
|
|
34
|
+
* `slot="<id>"`. `value` is the selected tab's `id` (defaults to the first).
|
|
35
|
+
*
|
|
36
|
+
* **States:** each tab is selected or not; unselected tabs show an underline
|
|
37
|
+
* on hover.
|
|
38
|
+
*
|
|
39
|
+
* **Behaviour:** click selects a tab. Arrow keys move focus between tabs and
|
|
40
|
+
* wrap (Left/Right, swapped in right-to-left text, or Up/Down when
|
|
41
|
+
* `orientation="vertical"`; orientation changes the keys only, not the
|
|
42
|
+
* layout); Home/End jump to the first/last.
|
|
43
|
+
* Enter or Space selects the focused tab and moves focus to its panel.
|
|
44
|
+
* Selecting a different tab fires `oh-change`. Transitions are cut short
|
|
45
|
+
* under `prefers-reduced-motion`.
|
|
46
|
+
*
|
|
47
|
+
* **Accessibility:** tablist/tab/tabpanel roles with `aria-selected`,
|
|
48
|
+
* `aria-controls` and `aria-labelledby`; one tab is in the tab order at a
|
|
49
|
+
* time; inactive panels are `hidden`; the active panel is focusable. Keyboard
|
|
50
|
+
* focus shows a solid underline on the tab label and an outline on the panel.
|
|
51
|
+
* Keep labels short.
|
|
52
|
+
*
|
|
53
|
+
* **Look:** set by tokens — `color.brand.primary` the unselected tabs and
|
|
54
|
+
* their hover underline (`decoration.underlineThickness`,
|
|
55
|
+
* `decoration.underlineDash`, `decoration.underlinePeriod`);
|
|
56
|
+
* `color.text.primary`, `color.surface.base` and `color.border.emphasis` the
|
|
57
|
+
* selected tab and panel; `stroke.control` the borders; `shape.control` the
|
|
58
|
+
* tab corners and `shape.container` the panel corners;
|
|
59
|
+
* `typography.body.*` and `typography.label.base.fontWeight` the text;
|
|
60
|
+
* `spacing.*` the padding; `motion.snappy` and `motion.relaxed` the
|
|
61
|
+
* transitions.
|
|
62
|
+
*
|
|
63
|
+
* @element oh-tabs
|
|
64
|
+
* @fires oh-change - When a different tab is selected. `detail: { value }`, the tab's `id`.
|
|
65
|
+
*/
|
|
36
66
|
let OhTabs = class OhTabs extends OhElement {
|
|
37
67
|
constructor() {
|
|
38
68
|
super(...arguments);
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
this.
|
|
43
|
-
/**
|
|
44
|
-
* ID of the currently selected tab
|
|
45
|
-
*/
|
|
46
|
-
this.selected = "";
|
|
69
|
+
/** The tabs: `{ id, label, content? }`. In HTML, a JSON array */
|
|
70
|
+
this.items = [];
|
|
71
|
+
/** The selected tab's `id`. Defaults to the first tab */
|
|
72
|
+
this.value = "";
|
|
47
73
|
/**
|
|
48
74
|
* Orientation of the tabs (affects arrow key behavior)
|
|
49
75
|
*/
|
|
@@ -60,11 +86,6 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
60
86
|
static { this.styles = [
|
|
61
87
|
baseStyles,
|
|
62
88
|
css `
|
|
63
|
-
/* ═══════════════════════════════════════════════════════════════
|
|
64
|
-
ORANGE HALO TABS
|
|
65
|
-
Chunky • Playful • Accessible
|
|
66
|
-
═══════════════════════════════════════════════════════════════ */
|
|
67
|
-
|
|
68
89
|
:host {
|
|
69
90
|
display: block;
|
|
70
91
|
font-family: var(--oh-typography-body-font-family);
|
|
@@ -83,7 +104,7 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
83
104
|
|
|
84
105
|
/* ═══════════════════════════════════════════════════════════════
|
|
85
106
|
INDIVIDUAL TAB BUTTONS
|
|
86
|
-
|
|
107
|
+
Transparent unselected state; selected state joins the panel
|
|
87
108
|
═══════════════════════════════════════════════════════════════ */
|
|
88
109
|
|
|
89
110
|
.tab {
|
|
@@ -112,7 +133,7 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
112
133
|
box-shadow var(--oh-motion-snappy) ease;
|
|
113
134
|
}
|
|
114
135
|
|
|
115
|
-
/*
|
|
136
|
+
/* Hover underline pseudo-element (animatable), shaped by decoration tokens */
|
|
116
137
|
.tab__label {
|
|
117
138
|
position: relative;
|
|
118
139
|
}
|
|
@@ -120,8 +141,7 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
120
141
|
.tab:not([aria-selected="true"]) .tab__label::after {
|
|
121
142
|
content: "";
|
|
122
143
|
position: absolute;
|
|
123
|
-
|
|
124
|
-
right: 0;
|
|
144
|
+
inset-inline: 0;
|
|
125
145
|
bottom: -3px;
|
|
126
146
|
height: var(--oh-decoration-underline-thickness);
|
|
127
147
|
background: repeating-linear-gradient(
|
|
@@ -131,7 +151,7 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
131
151
|
transparent var(--oh-decoration-underline-dash),
|
|
132
152
|
transparent var(--oh-decoration-underline-period)
|
|
133
153
|
);
|
|
134
|
-
transform-origin:
|
|
154
|
+
transform-origin: calc(50% - 50% * var(--_oh-dir)); /* the start side */
|
|
135
155
|
transform: scaleX(0);
|
|
136
156
|
transition: transform var(--oh-motion-relaxed) ease;
|
|
137
157
|
}
|
|
@@ -146,7 +166,7 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
146
166
|
|
|
147
167
|
/* ═══════════════════════════════════════════════════════════════
|
|
148
168
|
SELECTED TAB STATE
|
|
149
|
-
|
|
169
|
+
color.text.primary on color.surface.base, bordered like the panel
|
|
150
170
|
═══════════════════════════════════════════════════════════════ */
|
|
151
171
|
|
|
152
172
|
.tab[aria-selected="true"] {
|
|
@@ -185,7 +205,8 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
185
205
|
|
|
186
206
|
/* ═══════════════════════════════════════════════════════════════
|
|
187
207
|
TAB PANEL
|
|
188
|
-
|
|
208
|
+
Shares the selected tab's surface and border; square top-left
|
|
209
|
+
corner while the first tab is selected
|
|
189
210
|
═══════════════════════════════════════════════════════════════ */
|
|
190
211
|
|
|
191
212
|
.tabpanel {
|
|
@@ -230,17 +251,15 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
230
251
|
connectedCallback() {
|
|
231
252
|
super.connectedCallback();
|
|
232
253
|
// Set initial selected tab if not specified
|
|
233
|
-
if (!this.
|
|
234
|
-
this.
|
|
254
|
+
if (!this.value && this.items.length > 0) {
|
|
255
|
+
this.value = this.items[0].id;
|
|
235
256
|
}
|
|
236
257
|
// Set initial focused index to match selected
|
|
237
|
-
this._focusedIndex = Math.max(0, this.
|
|
258
|
+
this._focusedIndex = Math.max(0, this.items.findIndex((t) => t.id === this.value));
|
|
238
259
|
}
|
|
239
260
|
updated(changedProperties) {
|
|
240
|
-
if (changedProperties.has("tabs") &&
|
|
241
|
-
this.
|
|
242
|
-
!this.selected) {
|
|
243
|
-
this.selected = this.tabs[0].id;
|
|
261
|
+
if (changedProperties.has("tabs") && this.items.length > 0 && !this.value) {
|
|
262
|
+
this.value = this.items[0].id;
|
|
244
263
|
}
|
|
245
264
|
}
|
|
246
265
|
/**
|
|
@@ -249,21 +268,25 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
249
268
|
*/
|
|
250
269
|
async _handleKeyDown(e) {
|
|
251
270
|
const { key } = e;
|
|
252
|
-
const tabCount = this.
|
|
271
|
+
const tabCount = this.items.length;
|
|
253
272
|
if (tabCount === 0)
|
|
254
273
|
return;
|
|
255
274
|
let newIndex = this._focusedIndex;
|
|
256
275
|
let handled = false;
|
|
257
276
|
let shouldActivate = false;
|
|
277
|
+
// In right-to-left text the tabs run right to left, so the arrow keys swap
|
|
278
|
+
const rtl = this.matches(":dir(rtl)");
|
|
279
|
+
const previousKey = rtl ? "ArrowRight" : "ArrowLeft";
|
|
280
|
+
const nextKey = rtl ? "ArrowLeft" : "ArrowRight";
|
|
258
281
|
switch (key) {
|
|
259
|
-
case
|
|
282
|
+
case previousKey:
|
|
260
283
|
if (this.orientation === "horizontal") {
|
|
261
284
|
newIndex =
|
|
262
285
|
this._focusedIndex === 0 ? tabCount - 1 : this._focusedIndex - 1;
|
|
263
286
|
handled = true;
|
|
264
287
|
}
|
|
265
288
|
break;
|
|
266
|
-
case
|
|
289
|
+
case nextKey:
|
|
267
290
|
if (this.orientation === "horizontal") {
|
|
268
291
|
newIndex =
|
|
269
292
|
this._focusedIndex === tabCount - 1 ? 0 : this._focusedIndex + 1;
|
|
@@ -302,10 +325,10 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
302
325
|
e.preventDefault();
|
|
303
326
|
if (shouldActivate) {
|
|
304
327
|
// Activate the currently focused tab
|
|
305
|
-
this._selectTab(this.
|
|
328
|
+
this._selectTab(this.items[this._focusedIndex].id);
|
|
306
329
|
// Wait for render to complete, then move focus to panel
|
|
307
330
|
await this.updateComplete;
|
|
308
|
-
this._focusPanel(this.
|
|
331
|
+
this._focusPanel(this.items[this._focusedIndex].id);
|
|
309
332
|
}
|
|
310
333
|
else if (newIndex !== this._focusedIndex) {
|
|
311
334
|
// Just move focus to the new tab (don't activate)
|
|
@@ -333,14 +356,10 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
333
356
|
* Select a tab and dispatch change event
|
|
334
357
|
*/
|
|
335
358
|
_selectTab(tabId) {
|
|
336
|
-
if (this.
|
|
337
|
-
this.
|
|
338
|
-
this._focusedIndex = this.
|
|
339
|
-
this.
|
|
340
|
-
detail: { tabId },
|
|
341
|
-
bubbles: true,
|
|
342
|
-
composed: true,
|
|
343
|
-
}));
|
|
359
|
+
if (this.value !== tabId) {
|
|
360
|
+
this.value = tabId;
|
|
361
|
+
this._focusedIndex = this.items.findIndex((t) => t.id === tabId);
|
|
362
|
+
this.emit("oh-change", { value: tabId });
|
|
344
363
|
}
|
|
345
364
|
}
|
|
346
365
|
/**
|
|
@@ -360,8 +379,8 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
360
379
|
aria-orientation=${this.orientation}
|
|
361
380
|
@keydown=${this._handleKeyDown}
|
|
362
381
|
>
|
|
363
|
-
${this.
|
|
364
|
-
const isSelected = tab.id === this.
|
|
382
|
+
${this.items.map((tab, index) => {
|
|
383
|
+
const isSelected = tab.id === this.value;
|
|
365
384
|
const tabId = `${this._idPrefix}-tab-${tab.id}`;
|
|
366
385
|
const panelId = `${this._idPrefix}-panel-${tab.id}`;
|
|
367
386
|
return html `
|
|
@@ -381,11 +400,11 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
381
400
|
</div>
|
|
382
401
|
|
|
383
402
|
<!-- Tab Panels -->
|
|
384
|
-
${this.
|
|
385
|
-
const isSelected = tab.id === this.
|
|
403
|
+
${this.items.map((tab) => {
|
|
404
|
+
const isSelected = tab.id === this.value;
|
|
386
405
|
const tabId = `${this._idPrefix}-tab-${tab.id}`;
|
|
387
406
|
const panelId = `${this._idPrefix}-panel-${tab.id}`;
|
|
388
|
-
const isFirstTabSelected = this.
|
|
407
|
+
const isFirstTabSelected = this.items.length > 0 && this.value === this.items[0].id;
|
|
389
408
|
return html `
|
|
390
409
|
<div
|
|
391
410
|
class="tabpanel ${!isFirstTabSelected
|
|
@@ -409,10 +428,10 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
409
428
|
};
|
|
410
429
|
__decorate([
|
|
411
430
|
property({ type: Array })
|
|
412
|
-
], OhTabs.prototype, "
|
|
431
|
+
], OhTabs.prototype, "items", void 0);
|
|
413
432
|
__decorate([
|
|
414
|
-
property({ type: String, reflect: true
|
|
415
|
-
], OhTabs.prototype, "
|
|
433
|
+
property({ type: String, reflect: true })
|
|
434
|
+
], OhTabs.prototype, "value", void 0);
|
|
416
435
|
__decorate([
|
|
417
436
|
property({ type: String })
|
|
418
437
|
], OhTabs.prototype, "orientation", void 0);
|
package/dist/oh-tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-tabs.js","sourceRoot":"","sources":["../src/oh-tabs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oh-tabs.js","sourceRoot":"","sources":["../src/oh-tabs.ts"],"names":[],"mappings":"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"}
|
package/dist/oh-textarea.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* oh-textarea
|
|
3
3
|
*
|
|
4
|
-
* A multi-line text field for messages, comments and feedback.
|
|
5
|
-
* chunky, inset field as oh-input, and the first OHDS control that takes
|
|
6
|
-
* part in a native <form>.
|
|
4
|
+
* A multi-line text field for messages, comments and feedback.
|
|
7
5
|
*
|
|
8
6
|
* DESIGN DECISIONS:
|
|
9
7
|
* ─────────────────
|
|
10
8
|
* 1. SAME FAMILY AS oh-input
|
|
11
|
-
* -
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* - Same tokens: stroke.control border in color.border.emphasis,
|
|
10
|
+
* shape.control corners, an inset shadow offset by elevation.offset.md
|
|
11
|
+
* in elevation.color.field
|
|
12
|
+
* - Focus is a solid inset ring in focus.ringColor inside the border;
|
|
13
|
+
* background switches to color.surface.highlight
|
|
14
14
|
*
|
|
15
15
|
* 2. ON THE GRID
|
|
16
16
|
* - Line height is 1.5 times the text size, rounded up to the brand's
|
|
@@ -31,6 +31,37 @@ import { OhElement } from "./base.js";
|
|
|
31
31
|
/**
|
|
32
32
|
* A multi-line text field that submits with a native form.
|
|
33
33
|
*
|
|
34
|
+
* **Use it for** messages, comments, feedback: text that may run to several
|
|
35
|
+
* lines. **Don't use it for** a single line of text (use `oh-input`).
|
|
36
|
+
*
|
|
37
|
+
* **States:** rest, hover, focus, error (set `error-text`), disabled,
|
|
38
|
+
* required. `rows` sets the visible lines (default 4); people can drag it
|
|
39
|
+
* taller. `maxlength` limits the length.
|
|
40
|
+
*
|
|
41
|
+
* **Behaviour:** form-associated. Give it a `name` and it submits with the
|
|
42
|
+
* form. `required` stops the form submitting while it's empty, with the
|
|
43
|
+
* browser's own message. A form reset restores its starting text, and a
|
|
44
|
+
* disabled `<fieldset>` disables it. Fires `oh-input` on every keystroke and
|
|
45
|
+
* `oh-change` when the value is committed. Its line height is 1.5 times the
|
|
46
|
+
* text size, rounded up to `grid.unit`, so long messages stay on the grid.
|
|
47
|
+
*
|
|
48
|
+
* **Accessibility:** always set `label`: it names the field. A placeholder
|
|
49
|
+
* isn't a label. Helper and error text are linked to the field with
|
|
50
|
+
* `aria-describedby`, so screen readers read them. Errors come before the
|
|
51
|
+
* field, with an icon, set `aria-invalid`, and are announced only when they
|
|
52
|
+
* appear after the page has loaded. Focus is a solid inset ring. Use
|
|
53
|
+
* `autocomplete` when the field asks for something a browser can fill in,
|
|
54
|
+
* such as an address (WCAG 1.3.5).
|
|
55
|
+
*
|
|
56
|
+
* **Look:** set by tokens — `stroke.control` in `color.border.emphasis`
|
|
57
|
+
* (border), `shape.control` (corners), `typography.control.*` (type),
|
|
58
|
+
* `elevation.offset.md` and `elevation.color.field` (inset shadow),
|
|
59
|
+
* `color.border.hover` (hover), `focus.ringColor` and
|
|
60
|
+
* `color.surface.highlight` (focus), `color.feedback.error`,
|
|
61
|
+
* `color.feedback.errorSubtle` and `elevation.color.error` (error),
|
|
62
|
+
* `color.surface.disabled`, `color.border.disabled` and
|
|
63
|
+
* `color.text.disabled` (disabled).
|
|
64
|
+
*
|
|
34
65
|
* @element oh-textarea
|
|
35
66
|
* @fires oh-input - On every keystroke. detail: { value, originalEvent }
|
|
36
67
|
* @fires oh-change - When the value is committed (on blur). detail: { value, originalEvent }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-textarea.d.ts","sourceRoot":"","sources":["../src/oh-textarea.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"oh-textarea.d.ts","sourceRoot":"","sources":["../src/oh-textarea.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,qBACa,UAAW,SAAQ,SAAS;IACvC,MAAM,CAAC,cAAc,UAAQ;IAE7B,OAAgB,MAAM,4BA4HpB;IAEF,6DAA6D;IAE7D,KAAK,SAAM;IAEX,4BAA4B;IAE5B,KAAK,SAAM;IAEX,mFAAmF;IAEnF,WAAW,SAAM;IAEjB,kDAAkD;IAElD,UAAU,SAAM;IAEhB,kGAAkG;IAElG,SAAS,SAAM;IAEf,4CAA4C;IAE5C,IAAI,SAAM;IAEV,gDAAgD;IAEhD,QAAQ,UAAS;IAEjB,oDAAoD;IAEpD,QAAQ,UAAS;IAEjB,iFAAiF;IAEjF,IAAI,SAAK;IAET,0CAA0C;IAE1C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8FAA8F;IAE9F,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO,CAAC,UAAU,CAA0B;IAE5C,uDAAuD;IACvD,OAAO,CAAC,aAAa,CAAM;IAE3B,2DAA2D;IAE3D,OAAO,CAAC,aAAa,CAAS;IAE9B;;;;OAIG;IAEH,OAAO,CAAC,cAAc,CAAS;IAE/B,iBAAiB;IAKjB,qCAAqC;IACrC,IAAI,IAAI,2BAEP;IAED,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY;IAI5B,IAAI;IAIJ,iBAAiB;IAIjB,oBAAoB,CAAC,QAAQ,EAAE,OAAO;IAItC,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI;IAI/D,UAAU,CAAC,OAAO,EAAE,cAAc;IAMlC,OAAO,CAAC,OAAO,EAAE,cAAc;IAe/B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,aAAa;IAIrB,MAAM;CAsEP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
|
package/dist/oh-textarea.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* oh-textarea
|
|
3
3
|
*
|
|
4
|
-
* A multi-line text field for messages, comments and feedback.
|
|
5
|
-
* chunky, inset field as oh-input, and the first OHDS control that takes
|
|
6
|
-
* part in a native <form>.
|
|
4
|
+
* A multi-line text field for messages, comments and feedback.
|
|
7
5
|
*
|
|
8
6
|
* DESIGN DECISIONS:
|
|
9
7
|
* ─────────────────
|
|
10
8
|
* 1. SAME FAMILY AS oh-input
|
|
11
|
-
* -
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* - Same tokens: stroke.control border in color.border.emphasis,
|
|
10
|
+
* shape.control corners, an inset shadow offset by elevation.offset.md
|
|
11
|
+
* in elevation.color.field
|
|
12
|
+
* - Focus is a solid inset ring in focus.ringColor inside the border;
|
|
13
|
+
* background switches to color.surface.highlight
|
|
14
14
|
*
|
|
15
15
|
* 2. ON THE GRID
|
|
16
16
|
* - Line height is 1.5 times the text size, rounded up to the brand's
|
|
@@ -38,6 +38,37 @@ import { OhElement, baseStyles } from "./base.js";
|
|
|
38
38
|
/**
|
|
39
39
|
* A multi-line text field that submits with a native form.
|
|
40
40
|
*
|
|
41
|
+
* **Use it for** messages, comments, feedback: text that may run to several
|
|
42
|
+
* lines. **Don't use it for** a single line of text (use `oh-input`).
|
|
43
|
+
*
|
|
44
|
+
* **States:** rest, hover, focus, error (set `error-text`), disabled,
|
|
45
|
+
* required. `rows` sets the visible lines (default 4); people can drag it
|
|
46
|
+
* taller. `maxlength` limits the length.
|
|
47
|
+
*
|
|
48
|
+
* **Behaviour:** form-associated. Give it a `name` and it submits with the
|
|
49
|
+
* form. `required` stops the form submitting while it's empty, with the
|
|
50
|
+
* browser's own message. A form reset restores its starting text, and a
|
|
51
|
+
* disabled `<fieldset>` disables it. Fires `oh-input` on every keystroke and
|
|
52
|
+
* `oh-change` when the value is committed. Its line height is 1.5 times the
|
|
53
|
+
* text size, rounded up to `grid.unit`, so long messages stay on the grid.
|
|
54
|
+
*
|
|
55
|
+
* **Accessibility:** always set `label`: it names the field. A placeholder
|
|
56
|
+
* isn't a label. Helper and error text are linked to the field with
|
|
57
|
+
* `aria-describedby`, so screen readers read them. Errors come before the
|
|
58
|
+
* field, with an icon, set `aria-invalid`, and are announced only when they
|
|
59
|
+
* appear after the page has loaded. Focus is a solid inset ring. Use
|
|
60
|
+
* `autocomplete` when the field asks for something a browser can fill in,
|
|
61
|
+
* such as an address (WCAG 1.3.5).
|
|
62
|
+
*
|
|
63
|
+
* **Look:** set by tokens — `stroke.control` in `color.border.emphasis`
|
|
64
|
+
* (border), `shape.control` (corners), `typography.control.*` (type),
|
|
65
|
+
* `elevation.offset.md` and `elevation.color.field` (inset shadow),
|
|
66
|
+
* `color.border.hover` (hover), `focus.ringColor` and
|
|
67
|
+
* `color.surface.highlight` (focus), `color.feedback.error`,
|
|
68
|
+
* `color.feedback.errorSubtle` and `elevation.color.error` (error),
|
|
69
|
+
* `color.surface.disabled`, `color.border.disabled` and
|
|
70
|
+
* `color.text.disabled` (disabled).
|
|
71
|
+
*
|
|
41
72
|
* @element oh-textarea
|
|
42
73
|
* @fires oh-input - On every keystroke. detail: { value, originalEvent }
|
|
43
74
|
* @fires oh-change - When the value is committed (on blur). detail: { value, originalEvent }
|
|
@@ -126,7 +157,7 @@ let OhTextarea = class OhTextarea extends OhElement {
|
|
|
126
157
|
border: var(--oh-stroke-control) solid var(--oh-color-border-emphasis);
|
|
127
158
|
border-radius: var(--oh-shape-control);
|
|
128
159
|
box-shadow: inset var(--oh-elevation-offset-md)
|
|
129
|
-
var(--oh-elevation-offset-md) 0 0 var(--oh-
|
|
160
|
+
var(--oh-elevation-offset-md) 0 0 var(--oh-elevation-color-field);
|
|
130
161
|
transition:
|
|
131
162
|
border-color var(--oh-motion-snappy) ease,
|
|
132
163
|
box-shadow var(--oh-motion-snappy) ease,
|
|
@@ -152,7 +183,7 @@ let OhTextarea = class OhTextarea extends OhElement {
|
|
|
152
183
|
border-color: var(--oh-color-feedback-error);
|
|
153
184
|
background-color: var(--oh-color-feedback-error-subtle);
|
|
154
185
|
box-shadow: inset var(--oh-elevation-offset-md)
|
|
155
|
-
var(--oh-elevation-offset-md) 0 0 var(--oh-
|
|
186
|
+
var(--oh-elevation-offset-md) 0 0 var(--oh-elevation-color-error);
|
|
156
187
|
}
|
|
157
188
|
|
|
158
189
|
.textarea--error:focus {
|
|
@@ -160,7 +191,7 @@ let OhTextarea = class OhTextarea extends OhElement {
|
|
|
160
191
|
box-shadow: inset 0 0 0 2px var(--oh-color-feedback-error);
|
|
161
192
|
}
|
|
162
193
|
|
|
163
|
-
/* Disabled:
|
|
194
|
+
/* Disabled: color.*.disabled tokens, no shadow, no resizing */
|
|
164
195
|
.textarea:disabled {
|
|
165
196
|
cursor: not-allowed;
|
|
166
197
|
resize: none;
|
package/dist/oh-textarea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-textarea.js","sourceRoot":"","sources":["../src/oh-textarea.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAuB,MAAM,KAAK,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"oh-textarea.js","sourceRoot":"","sources":["../src/oh-textarea.ts"],"names":[],"mappings":"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"}
|
package/dist/oh-toggle.d.ts
CHANGED
|
@@ -1,30 +1,63 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* oh-toggle
|
|
3
3
|
*
|
|
4
|
-
* A
|
|
4
|
+
* A switch for binary on/off settings.
|
|
5
5
|
*
|
|
6
6
|
* DESIGN DECISIONS:
|
|
7
7
|
* ─────────────────
|
|
8
|
-
* 1.
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
8
|
+
* 1. LOOK FROM TOKENS
|
|
9
|
+
* - Track: shape.pill, color.surface.raised off, color.brand.primary on
|
|
10
|
+
* - Thumb: color.surface.base with a stroke.control border in
|
|
11
|
+
* color.border.emphasis, and a shadow offset by elevation.offset.*
|
|
12
|
+
* (elevation.color.secondary off, elevation.color.primary on). The shadow's horizontal
|
|
13
|
+
* offset flips when checked; hover and press move the thumb by
|
|
14
|
+
* lift.hoverSm / lift.pressSm
|
|
12
15
|
*
|
|
13
16
|
* 2. VISUAL STATES
|
|
14
|
-
* - Off:
|
|
15
|
-
* - On: Brand primary track, thumb on right, shadow bottom-left (flipped)
|
|
17
|
+
* - Off: thumb at the start of the track; on: thumb at the end
|
|
16
18
|
*
|
|
17
19
|
* 3. ACCESSIBILITY
|
|
18
|
-
* -
|
|
20
|
+
* - role="switch" with aria-checked on a focusable track
|
|
19
21
|
* - Keyboard: Space/Enter to toggle
|
|
20
|
-
* - Focus
|
|
21
|
-
*
|
|
22
|
+
* - Focus: a solid outline in focus.ringColor (focus.glowColor adds a
|
|
23
|
+
* glow around it, as decoration)
|
|
24
|
+
* - Named by its visible label (aria-labelledby) or accessible-label
|
|
25
|
+
*/
|
|
26
|
+
import { OhElement } from "./base.js";
|
|
27
|
+
/**
|
|
28
|
+
* A switch that turns a setting on or off.
|
|
29
|
+
*
|
|
30
|
+
* **Use it for** a setting that takes effect straight away, such as turning
|
|
31
|
+
* notifications on. **Don't use it for** a choice that's only applied when a
|
|
32
|
+
* form is submitted, or one that must be agreed to (use `oh-checkbox`), or
|
|
33
|
+
* a choice between more than two options (use `oh-radio-group`).
|
|
34
|
+
*
|
|
35
|
+
* **States:** off, on, hover, active, focus.
|
|
36
|
+
*
|
|
37
|
+
* **Behaviour:** clicking the switch or its label, or pressing Space or
|
|
38
|
+
* Enter while it's focused, flips `checked` and fires `oh-change` with
|
|
39
|
+
* `{ checked }`. `name` and `value` are stored but it isn't form-associated,
|
|
40
|
+
* so it doesn't submit with a native form: listen for `oh-change`. It has no
|
|
41
|
+
* `disabled` property. Under `prefers-reduced-motion` it doesn't animate.
|
|
42
|
+
*
|
|
43
|
+
* **Accessibility:** `role="switch"` with `aria-checked`, in the tab order.
|
|
44
|
+
* Set `label` (a visible label, linked with `aria-labelledby`), or
|
|
45
|
+
* `accessible-label` when there's no visible label (not `aria-label`, which
|
|
46
|
+
* isn't forwarded into the shadow root). Focus is a solid outline in
|
|
47
|
+
* `focus.ringColor`.
|
|
48
|
+
*
|
|
49
|
+
* **Look:** set by tokens — `shape.pill` (track), `color.surface.raised` /
|
|
50
|
+
* `color.brand.primary` (track off / on), `color.surface.base`,
|
|
51
|
+
* `stroke.control` and `color.border.emphasis` (thumb),
|
|
52
|
+
* `elevation.offset.*` with `elevation.color.secondary` / `elevation.color.primary` (thumb
|
|
53
|
+
* shadow off / on), `lift.hoverSm` / `lift.pressSm` (movement on hover and
|
|
54
|
+
* press), `focus.ringColor` and `focus.glowColor` (focus),
|
|
55
|
+
* `typography.body.*` (label).
|
|
22
56
|
*
|
|
23
57
|
* @element oh-toggle
|
|
24
58
|
*
|
|
25
|
-
* @fires oh-change - Fired when the toggle state changes
|
|
59
|
+
* @fires oh-change - Fired when the toggle state changes. detail: { checked }
|
|
26
60
|
*/
|
|
27
|
-
import { OhElement } from "./base.js";
|
|
28
61
|
export declare class OhToggle extends OhElement {
|
|
29
62
|
static styles: import("lit").CSSResult[];
|
|
30
63
|
/** Whether the toggle is checked/on */
|
package/dist/oh-toggle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-toggle.d.ts","sourceRoot":"","sources":["../src/oh-toggle.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oh-toggle.d.ts","sourceRoot":"","sources":["../src/oh-toggle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBACa,QAAS,SAAQ,SAAS;IACrC,OAAgB,MAAM,4BA4HpB;IAEF,uCAAuC;IAEvC,OAAO,UAAS;IAEhB,8CAA8C;IAE9C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IAEH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,+BAA+B;IAE/B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,gCAAgC;IAEhC,KAAK,SAAQ;IAEb,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+D;IAExF,MAAM;CA4BP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,QAAQ,CAAC;KACvB;CACF"}
|