@orange-halo/components 2.1.0 → 3.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 +968 -362
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +1 -2
- package/dist/base.js.map +1 -1
- package/dist/index.d.ts +4 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -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 +99 -29
- 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 +96 -36
- 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 +38 -19
- 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 +66 -25
- package/dist/oh-breadcrumb.js.map +1 -1
- package/dist/oh-button.d.ts +49 -23
- package/dist/oh-button.d.ts.map +1 -1
- package/dist/oh-button.figma.js +1 -3
- package/dist/oh-button.figma.js.map +1 -1
- package/dist/oh-button.js +133 -82
- 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 +143 -96
- 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.figma.js +4 -6
- package/dist/oh-checkbox-group.figma.js.map +1 -1
- package/dist/oh-checkbox-group.js +114 -49
- package/dist/oh-checkbox-group.js.map +1 -1
- package/dist/oh-checkbox.d.ts +54 -17
- package/dist/oh-checkbox.d.ts.map +1 -1
- package/dist/oh-checkbox.js +117 -60
- 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 +21 -23
- package/dist/oh-container.js.map +1 -1
- package/dist/oh-drawer.d.ts +28 -11
- package/dist/oh-drawer.d.ts.map +1 -1
- package/dist/oh-drawer.js +52 -24
- 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 +28 -21
- 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 +27 -9
- package/dist/oh-icon.js.map +1 -1
- package/dist/oh-input.d.ts +110 -21
- package/dist/oh-input.d.ts.map +1 -1
- package/dist/oh-input.figma.js +2 -2
- package/dist/oh-input.figma.js.map +1 -1
- package/dist/oh-input.js +227 -71
- 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 +83 -38
- package/dist/oh-link.js.map +1 -1
- package/dist/oh-modal.d.ts +35 -6
- package/dist/oh-modal.d.ts.map +1 -1
- package/dist/oh-modal.js +90 -39
- 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 -20
- 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 +35 -14
- 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.figma.js +2 -2
- package/dist/oh-radio-group.figma.js.map +1 -1
- package/dist/oh-radio-group.js +122 -51
- package/dist/oh-radio-group.js.map +1 -1
- package/dist/oh-radio.d.ts +55 -17
- package/dist/oh-radio.d.ts.map +1 -1
- package/dist/oh-radio.js +120 -61
- package/dist/oh-radio.js.map +1 -1
- package/dist/oh-select.d.ts +59 -16
- package/dist/oh-select.d.ts.map +1 -1
- package/dist/oh-select.js +141 -69
- 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 +43 -32
- 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 +55 -30
- package/dist/oh-tabs.d.ts.map +1 -1
- package/dist/oh-tabs.js +100 -76
- package/dist/oh-tabs.js.map +1 -1
- package/dist/oh-textarea.d.ts +129 -0
- package/dist/oh-textarea.d.ts.map +1 -0
- package/dist/oh-textarea.js +401 -0
- package/dist/oh-textarea.js.map +1 -0
- package/dist/oh-toggle.d.ts +45 -12
- package/dist/oh-toggle.d.ts.map +1 -1
- package/dist/oh-toggle.js +84 -34
- package/dist/oh-toggle.js.map +1 -1
- package/dist/styles/typography.js +1 -1
- package/package.json +7 -7
- package/dist/oh-hero.d.ts +0 -33
- package/dist/oh-hero.d.ts.map +0 -1
- package/dist/oh-hero.js +0 -246
- package/dist/oh-hero.js.map +0 -1
package/dist/oh-skip-link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-skip-link.js","sourceRoot":"","sources":["../src/oh-skip-link.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oh-skip-link.js","sourceRoot":"","sources":["../src/oh-skip-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEI,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,SAAS;IAAlC;;QAoFL,SAAI,GAAG,OAAO,CAAC;QAGf,SAAI,GAAG,sBAAsB,CAAC;IAShC,CAAC;aA/FiB,WAAM,GAAG;QACvB,UAAU;QACV,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6EF;KACF,AAhFqB,CAgFpB;IAQF,MAAM;QACJ,OAAO,IAAI,CAAA;kCACmB,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,IAAI;UACzD,IAAI,CAAC,IAAI;;KAEd,CAAC;IACJ,CAAC;;AAXD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACZ;AAGf;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCACG;AAvFnB,UAAU;IADtB,aAAa,CAAC,cAAc,CAAC;GACjB,UAAU,CAgGtB"}
|
package/dist/oh-stack.d.ts
CHANGED
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* oh-stack
|
|
3
3
|
*
|
|
4
|
-
* Vertical spacing between children.
|
|
5
|
-
* Creates consistent vertical rhythm without manual margins.
|
|
6
|
-
*
|
|
7
4
|
* DESIGN DECISIONS:
|
|
8
5
|
* ─────────────────
|
|
9
|
-
* 1.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* 1. A flex column; `gap` maps named steps to `spacing.*` tokens, so
|
|
7
|
+
* children need no margins.
|
|
8
|
+
* 2. Cross-axis alignment: start, center, end, stretch (default).
|
|
9
|
+
*/
|
|
10
|
+
import { OhElement } from "./base.js";
|
|
11
|
+
export type StackGap = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
|
|
12
|
+
export type StackAlign = "start" | "center" | "end" | "stretch";
|
|
13
|
+
/**
|
|
14
|
+
* A vertical layout that spaces its children evenly, top to bottom.
|
|
12
15
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
+
* **Use it for** consistent vertical rhythm without margins on children.
|
|
17
|
+
* **Don't use it for** items in a row (use `oh-cluster`) or a grid of cards
|
|
18
|
+
* (use `oh-grid`).
|
|
16
19
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
20
|
+
* **Gaps:** `gap` is `none`, `xs` (`spacing.1`), `sm` (`spacing.2`), `md`
|
|
21
|
+
* (default, `spacing.4`), `lg` (`spacing.6`), `xl` (`spacing.8`) or `2xl`
|
|
22
|
+
* (`spacing.12`). `align` sets horizontal alignment: `start`, `center`,
|
|
23
|
+
* `end` or `stretch` (default).
|
|
19
24
|
*
|
|
20
25
|
* @element oh-stack
|
|
26
|
+
* @slot - The items to stack.
|
|
21
27
|
*/
|
|
22
|
-
import { OhElement } from "./base.js";
|
|
23
|
-
export type StackGap = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
|
|
24
|
-
export type StackAlign = "start" | "center" | "end" | "stretch";
|
|
25
28
|
export declare class OhStack extends OhElement {
|
|
26
29
|
static styles: import("lit").CSSResult[];
|
|
27
30
|
gap: StackGap;
|
package/dist/oh-stack.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-stack.d.ts","sourceRoot":"","sources":["../src/oh-stack.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oh-stack.d.ts","sourceRoot":"","sources":["../src/oh-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AACzE,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AACH,qBACa,OAAQ,SAAQ,SAAS;IACpC,OAAgB,MAAM,4BAuDpB;IAGF,GAAG,EAAE,QAAQ,CAAQ;IAGrB,KAAK,EAAE,UAAU,CAAa;IAE9B,MAAM;CAGP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
|
package/dist/oh-stack.js
CHANGED
|
@@ -1,23 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* oh-stack
|
|
3
3
|
*
|
|
4
|
-
* Vertical spacing between children.
|
|
5
|
-
* Creates consistent vertical rhythm without manual margins.
|
|
6
|
-
*
|
|
7
4
|
* DESIGN DECISIONS:
|
|
8
5
|
* ─────────────────
|
|
9
|
-
* 1.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* 2. FLEX COLUMN LAYOUT
|
|
14
|
-
* - Simple vertical stacking
|
|
15
|
-
* - Gap property for consistent spacing
|
|
16
|
-
*
|
|
17
|
-
* 3. ALIGNMENT OPTIONS
|
|
18
|
-
* - start, center, end, stretch
|
|
19
|
-
*
|
|
20
|
-
* @element oh-stack
|
|
6
|
+
* 1. A flex column; `gap` maps named steps to `spacing.*` tokens, so
|
|
7
|
+
* children need no margins.
|
|
8
|
+
* 2. Cross-axis alignment: start, center, end, stretch (default).
|
|
21
9
|
*/
|
|
22
10
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
23
11
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -28,6 +16,21 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
28
16
|
import { html, css } from "lit";
|
|
29
17
|
import { customElement, property } from "lit/decorators.js";
|
|
30
18
|
import { OhElement, baseStyles } from "./base.js";
|
|
19
|
+
/**
|
|
20
|
+
* A vertical layout that spaces its children evenly, top to bottom.
|
|
21
|
+
*
|
|
22
|
+
* **Use it for** consistent vertical rhythm without margins on children.
|
|
23
|
+
* **Don't use it for** items in a row (use `oh-cluster`) or a grid of cards
|
|
24
|
+
* (use `oh-grid`).
|
|
25
|
+
*
|
|
26
|
+
* **Gaps:** `gap` is `none`, `xs` (`spacing.1`), `sm` (`spacing.2`), `md`
|
|
27
|
+
* (default, `spacing.4`), `lg` (`spacing.6`), `xl` (`spacing.8`) or `2xl`
|
|
28
|
+
* (`spacing.12`). `align` sets horizontal alignment: `start`, `center`,
|
|
29
|
+
* `end` or `stretch` (default).
|
|
30
|
+
*
|
|
31
|
+
* @element oh-stack
|
|
32
|
+
* @slot - The items to stack.
|
|
33
|
+
*/
|
|
31
34
|
let OhStack = class OhStack extends OhElement {
|
|
32
35
|
constructor() {
|
|
33
36
|
super(...arguments);
|
|
@@ -37,11 +40,6 @@ let OhStack = class OhStack extends OhElement {
|
|
|
37
40
|
static { this.styles = [
|
|
38
41
|
baseStyles,
|
|
39
42
|
css `
|
|
40
|
-
/* ═══════════════════════════════════════════════════════════════
|
|
41
|
-
ORANGE HALO STACK
|
|
42
|
-
Vertical spacing • Consistent rhythm • Flexible alignment
|
|
43
|
-
═══════════════════════════════════════════════════════════════ */
|
|
44
|
-
|
|
45
43
|
:host {
|
|
46
44
|
display: flex;
|
|
47
45
|
flex-direction: column;
|
package/dist/oh-stack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-stack.js","sourceRoot":"","sources":["../src/oh-stack.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oh-stack.js","sourceRoot":"","sources":["../src/oh-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;;;;;;;AAEH,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAKlD;;;;;;;;;;;;;;GAcG;AAEI,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,SAAS;IAA/B;;QA2DL,QAAG,GAAa,IAAI,CAAC;QAGrB,UAAK,GAAe,SAAS,CAAC;IAKhC,CAAC;aAlEiB,WAAM,GAAG;QACvB,UAAU;QACV,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoDF;KACF,AAvDqB,CAuDpB;IAQF,MAAM;QACJ,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;;AAPD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oCACrB;AAGrB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sCACZ;AA9DnB,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAmEnB"}
|
package/dist/oh-tabs.d.ts
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
|
import { OhElement } from "./base.js";
|
|
28
17
|
export interface TabItem {
|
|
@@ -30,16 +19,52 @@ export interface TabItem {
|
|
|
30
19
|
label: string;
|
|
31
20
|
content?: string;
|
|
32
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* A set of tabs that switches between panels of related content in the same place.
|
|
24
|
+
*
|
|
25
|
+
* **Use it for** a few peer sections of content where only one needs to be
|
|
26
|
+
* seen at a time. **Don't use it for** navigating between pages (use links
|
|
27
|
+
* or `oh-navbar`), or for content people need to compare side by side.
|
|
28
|
+
*
|
|
29
|
+
* **Parts:** pass `items`, an array of `{ id, label, content? }`. A panel
|
|
30
|
+
* shows `content` as text, or else the light-DOM element with
|
|
31
|
+
* `slot="<id>"`. `value` is the selected tab's `id` (defaults to the first).
|
|
32
|
+
*
|
|
33
|
+
* **States:** each tab is selected or not; unselected tabs show an underline
|
|
34
|
+
* on hover.
|
|
35
|
+
*
|
|
36
|
+
* **Behaviour:** click selects a tab. Arrow keys move focus between tabs and
|
|
37
|
+
* wrap (Left/Right, or Up/Down when `orientation="vertical"`; orientation
|
|
38
|
+
* changes the keys only, not the layout); Home/End jump to the first/last.
|
|
39
|
+
* Enter or Space selects the focused tab and moves focus to its panel.
|
|
40
|
+
* Selecting a different tab fires `oh-change`. Transitions are cut short
|
|
41
|
+
* under `prefers-reduced-motion`.
|
|
42
|
+
*
|
|
43
|
+
* **Accessibility:** tablist/tab/tabpanel roles with `aria-selected`,
|
|
44
|
+
* `aria-controls` and `aria-labelledby`; one tab is in the tab order at a
|
|
45
|
+
* time; inactive panels are `hidden`; the active panel is focusable. Keyboard
|
|
46
|
+
* focus shows a solid underline on the tab label and an outline on the panel.
|
|
47
|
+
* Keep labels short.
|
|
48
|
+
*
|
|
49
|
+
* **Look:** set by tokens — `color.brand.primary` the unselected tabs and
|
|
50
|
+
* their hover underline (`decoration.underlineThickness`,
|
|
51
|
+
* `decoration.underlineDash`, `decoration.underlinePeriod`);
|
|
52
|
+
* `color.text.primary`, `color.surface.base` and `color.border.emphasis` the
|
|
53
|
+
* selected tab and panel; `stroke.control` the borders; `shape.control` the
|
|
54
|
+
* tab corners and `shape.container` the panel corners;
|
|
55
|
+
* `typography.body.*` and `typography.label.base.fontWeight` the text;
|
|
56
|
+
* `spacing.*` the padding; `motion.snappy` and `motion.relaxed` the
|
|
57
|
+
* transitions.
|
|
58
|
+
*
|
|
59
|
+
* @element oh-tabs
|
|
60
|
+
* @fires oh-change - When a different tab is selected. `detail: { value }`, the tab's `id`.
|
|
61
|
+
*/
|
|
33
62
|
export declare class OhTabs extends OhElement {
|
|
34
63
|
static styles: import("lit").CSSResult[];
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* ID of the currently selected tab
|
|
41
|
-
*/
|
|
42
|
-
selected: string;
|
|
64
|
+
/** The tabs: `{ id, label, content? }`. In HTML, a JSON array */
|
|
65
|
+
items: TabItem[];
|
|
66
|
+
/** The selected tab's `id`. Defaults to the first tab */
|
|
67
|
+
value: string;
|
|
43
68
|
/**
|
|
44
69
|
* Orientation of the tabs (affects arrow key behavior)
|
|
45
70
|
*/
|
package/dist/oh-tabs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-tabs.d.ts","sourceRoot":"","sources":["../src/oh-tabs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"oh-tabs.d.ts","sourceRoot":"","sources":["../src/oh-tabs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,SAAS,EAAc,MAAM,WAAW,CAAC;AAElD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBACa,MAAO,SAAQ,SAAS;IACnC,OAAgB,MAAM,4BAqKpB;IAEF,iEAAiE;IAEjE,KAAK,EAAE,OAAO,EAAE,CAAM;IAEtB,yDAAyD;IAEzD,KAAK,SAAM;IAEX;;OAEG;IAEH,WAAW,EAAE,YAAY,GAAG,UAAU,CAAgB;IAEtD;;OAEG;IAEH,OAAO,CAAC,aAAa,CAAK;IAE1B;;OAEG;IACH,OAAO,CAAC,SAAS,CAAwD;IAEhE,iBAAiB;IAajB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAMxD;;;OAGG;YACW,cAAc;IAuE5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAMjB;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB,MAAM;CA2DP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}
|
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,53 @@ 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, or Up/Down when `orientation="vertical"`; orientation
|
|
41
|
+
* changes the keys only, not the layout); Home/End jump to the first/last.
|
|
42
|
+
* Enter or Space selects the focused tab and moves focus to its panel.
|
|
43
|
+
* Selecting a different tab fires `oh-change`. Transitions are cut short
|
|
44
|
+
* under `prefers-reduced-motion`.
|
|
45
|
+
*
|
|
46
|
+
* **Accessibility:** tablist/tab/tabpanel roles with `aria-selected`,
|
|
47
|
+
* `aria-controls` and `aria-labelledby`; one tab is in the tab order at a
|
|
48
|
+
* time; inactive panels are `hidden`; the active panel is focusable. Keyboard
|
|
49
|
+
* focus shows a solid underline on the tab label and an outline on the panel.
|
|
50
|
+
* Keep labels short.
|
|
51
|
+
*
|
|
52
|
+
* **Look:** set by tokens — `color.brand.primary` the unselected tabs and
|
|
53
|
+
* their hover underline (`decoration.underlineThickness`,
|
|
54
|
+
* `decoration.underlineDash`, `decoration.underlinePeriod`);
|
|
55
|
+
* `color.text.primary`, `color.surface.base` and `color.border.emphasis` the
|
|
56
|
+
* selected tab and panel; `stroke.control` the borders; `shape.control` the
|
|
57
|
+
* tab corners and `shape.container` the panel corners;
|
|
58
|
+
* `typography.body.*` and `typography.label.base.fontWeight` the text;
|
|
59
|
+
* `spacing.*` the padding; `motion.snappy` and `motion.relaxed` the
|
|
60
|
+
* transitions.
|
|
61
|
+
*
|
|
62
|
+
* @element oh-tabs
|
|
63
|
+
* @fires oh-change - When a different tab is selected. `detail: { value }`, the tab's `id`.
|
|
64
|
+
*/
|
|
36
65
|
let OhTabs = class OhTabs extends OhElement {
|
|
37
66
|
constructor() {
|
|
38
67
|
super(...arguments);
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
this.
|
|
43
|
-
/**
|
|
44
|
-
* ID of the currently selected tab
|
|
45
|
-
*/
|
|
46
|
-
this.selected = "";
|
|
68
|
+
/** The tabs: `{ id, label, content? }`. In HTML, a JSON array */
|
|
69
|
+
this.items = [];
|
|
70
|
+
/** The selected tab's `id`. Defaults to the first tab */
|
|
71
|
+
this.value = "";
|
|
47
72
|
/**
|
|
48
73
|
* Orientation of the tabs (affects arrow key behavior)
|
|
49
74
|
*/
|
|
@@ -60,11 +85,6 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
60
85
|
static { this.styles = [
|
|
61
86
|
baseStyles,
|
|
62
87
|
css `
|
|
63
|
-
/* ═══════════════════════════════════════════════════════════════
|
|
64
|
-
ORANGE HALO TABS
|
|
65
|
-
Chunky • Playful • Accessible
|
|
66
|
-
═══════════════════════════════════════════════════════════════ */
|
|
67
|
-
|
|
68
88
|
:host {
|
|
69
89
|
display: block;
|
|
70
90
|
font-family: var(--oh-typography-body-font-family);
|
|
@@ -83,7 +103,7 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
83
103
|
|
|
84
104
|
/* ═══════════════════════════════════════════════════════════════
|
|
85
105
|
INDIVIDUAL TAB BUTTONS
|
|
86
|
-
|
|
106
|
+
Transparent unselected state; selected state joins the panel
|
|
87
107
|
═══════════════════════════════════════════════════════════════ */
|
|
88
108
|
|
|
89
109
|
.tab {
|
|
@@ -98,27 +118,27 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
98
118
|
border-bottom: none;
|
|
99
119
|
border-radius: var(--oh-shape-control) var(--oh-shape-control) 0 0;
|
|
100
120
|
cursor: pointer;
|
|
101
|
-
|
|
121
|
+
|
|
102
122
|
/* No shadow for inactive tabs */
|
|
103
123
|
box-shadow: none;
|
|
104
|
-
|
|
124
|
+
|
|
105
125
|
/* Position above the border line */
|
|
106
126
|
margin-bottom: -2.5px;
|
|
107
|
-
|
|
108
|
-
transition:
|
|
127
|
+
|
|
128
|
+
transition:
|
|
109
129
|
color var(--oh-motion-snappy) ease,
|
|
110
130
|
background-color var(--oh-motion-snappy) ease,
|
|
111
131
|
border-color var(--oh-motion-snappy) ease,
|
|
112
132
|
box-shadow var(--oh-motion-snappy) ease;
|
|
113
133
|
}
|
|
114
134
|
|
|
115
|
-
/*
|
|
135
|
+
/* Hover underline pseudo-element (animatable), shaped by decoration tokens */
|
|
116
136
|
.tab__label {
|
|
117
137
|
position: relative;
|
|
118
138
|
}
|
|
119
139
|
|
|
120
140
|
.tab:not([aria-selected="true"]) .tab__label::after {
|
|
121
|
-
content:
|
|
141
|
+
content: "";
|
|
122
142
|
position: absolute;
|
|
123
143
|
left: 0;
|
|
124
144
|
right: 0;
|
|
@@ -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,14 +205,16 @@ 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 {
|
|
192
213
|
padding: var(--oh-spacing-6);
|
|
193
214
|
background: var(--oh-color-surface-base);
|
|
194
215
|
border: var(--oh-stroke-control) solid var(--oh-color-border-emphasis);
|
|
195
|
-
border-radius: 0 var(--oh-shape-container) var(--oh-shape-container)
|
|
216
|
+
border-radius: 0 var(--oh-shape-container) var(--oh-shape-container)
|
|
217
|
+
var(--oh-shape-container);
|
|
196
218
|
color: var(--oh-color-text-primary);
|
|
197
219
|
}
|
|
198
220
|
|
|
@@ -229,15 +251,15 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
229
251
|
connectedCallback() {
|
|
230
252
|
super.connectedCallback();
|
|
231
253
|
// Set initial selected tab if not specified
|
|
232
|
-
if (!this.
|
|
233
|
-
this.
|
|
254
|
+
if (!this.value && this.items.length > 0) {
|
|
255
|
+
this.value = this.items[0].id;
|
|
234
256
|
}
|
|
235
257
|
// Set initial focused index to match selected
|
|
236
|
-
this._focusedIndex = Math.max(0, this.
|
|
258
|
+
this._focusedIndex = Math.max(0, this.items.findIndex((t) => t.id === this.value));
|
|
237
259
|
}
|
|
238
260
|
updated(changedProperties) {
|
|
239
|
-
if (changedProperties.has("tabs") && this.
|
|
240
|
-
this.
|
|
261
|
+
if (changedProperties.has("tabs") && this.items.length > 0 && !this.value) {
|
|
262
|
+
this.value = this.items[0].id;
|
|
241
263
|
}
|
|
242
264
|
}
|
|
243
265
|
/**
|
|
@@ -246,7 +268,7 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
246
268
|
*/
|
|
247
269
|
async _handleKeyDown(e) {
|
|
248
270
|
const { key } = e;
|
|
249
|
-
const tabCount = this.
|
|
271
|
+
const tabCount = this.items.length;
|
|
250
272
|
if (tabCount === 0)
|
|
251
273
|
return;
|
|
252
274
|
let newIndex = this._focusedIndex;
|
|
@@ -255,25 +277,29 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
255
277
|
switch (key) {
|
|
256
278
|
case "ArrowLeft":
|
|
257
279
|
if (this.orientation === "horizontal") {
|
|
258
|
-
newIndex =
|
|
280
|
+
newIndex =
|
|
281
|
+
this._focusedIndex === 0 ? tabCount - 1 : this._focusedIndex - 1;
|
|
259
282
|
handled = true;
|
|
260
283
|
}
|
|
261
284
|
break;
|
|
262
285
|
case "ArrowRight":
|
|
263
286
|
if (this.orientation === "horizontal") {
|
|
264
|
-
newIndex =
|
|
287
|
+
newIndex =
|
|
288
|
+
this._focusedIndex === tabCount - 1 ? 0 : this._focusedIndex + 1;
|
|
265
289
|
handled = true;
|
|
266
290
|
}
|
|
267
291
|
break;
|
|
268
292
|
case "ArrowUp":
|
|
269
293
|
if (this.orientation === "vertical") {
|
|
270
|
-
newIndex =
|
|
294
|
+
newIndex =
|
|
295
|
+
this._focusedIndex === 0 ? tabCount - 1 : this._focusedIndex - 1;
|
|
271
296
|
handled = true;
|
|
272
297
|
}
|
|
273
298
|
break;
|
|
274
299
|
case "ArrowDown":
|
|
275
300
|
if (this.orientation === "vertical") {
|
|
276
|
-
newIndex =
|
|
301
|
+
newIndex =
|
|
302
|
+
this._focusedIndex === tabCount - 1 ? 0 : this._focusedIndex + 1;
|
|
277
303
|
handled = true;
|
|
278
304
|
}
|
|
279
305
|
break;
|
|
@@ -295,10 +321,10 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
295
321
|
e.preventDefault();
|
|
296
322
|
if (shouldActivate) {
|
|
297
323
|
// Activate the currently focused tab
|
|
298
|
-
this._selectTab(this.
|
|
324
|
+
this._selectTab(this.items[this._focusedIndex].id);
|
|
299
325
|
// Wait for render to complete, then move focus to panel
|
|
300
326
|
await this.updateComplete;
|
|
301
|
-
this._focusPanel(this.
|
|
327
|
+
this._focusPanel(this.items[this._focusedIndex].id);
|
|
302
328
|
}
|
|
303
329
|
else if (newIndex !== this._focusedIndex) {
|
|
304
330
|
// Just move focus to the new tab (don't activate)
|
|
@@ -319,21 +345,17 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
319
345
|
* Focus a specific tab button
|
|
320
346
|
*/
|
|
321
347
|
_focusTab(index) {
|
|
322
|
-
const tabButtons = this.shadowRoot?.querySelectorAll(
|
|
348
|
+
const tabButtons = this.shadowRoot?.querySelectorAll(".tab");
|
|
323
349
|
tabButtons?.[index]?.focus();
|
|
324
350
|
}
|
|
325
351
|
/**
|
|
326
352
|
* Select a tab and dispatch change event
|
|
327
353
|
*/
|
|
328
354
|
_selectTab(tabId) {
|
|
329
|
-
if (this.
|
|
330
|
-
this.
|
|
331
|
-
this._focusedIndex = this.
|
|
332
|
-
this.
|
|
333
|
-
detail: { tabId },
|
|
334
|
-
bubbles: true,
|
|
335
|
-
composed: true,
|
|
336
|
-
}));
|
|
355
|
+
if (this.value !== tabId) {
|
|
356
|
+
this.value = tabId;
|
|
357
|
+
this._focusedIndex = this.items.findIndex((t) => t.id === tabId);
|
|
358
|
+
this.emit("oh-change", { value: tabId });
|
|
337
359
|
}
|
|
338
360
|
}
|
|
339
361
|
/**
|
|
@@ -347,14 +369,14 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
347
369
|
return html `
|
|
348
370
|
<div class="tabs-container">
|
|
349
371
|
<!-- Tab List -->
|
|
350
|
-
<div
|
|
372
|
+
<div
|
|
351
373
|
class="tablist"
|
|
352
374
|
role="tablist"
|
|
353
375
|
aria-orientation=${this.orientation}
|
|
354
376
|
@keydown=${this._handleKeyDown}
|
|
355
377
|
>
|
|
356
|
-
${this.
|
|
357
|
-
const isSelected = tab.id === this.
|
|
378
|
+
${this.items.map((tab, index) => {
|
|
379
|
+
const isSelected = tab.id === this.value;
|
|
358
380
|
const tabId = `${this._idPrefix}-tab-${tab.id}`;
|
|
359
381
|
const panelId = `${this._idPrefix}-panel-${tab.id}`;
|
|
360
382
|
return html `
|
|
@@ -374,14 +396,16 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
374
396
|
</div>
|
|
375
397
|
|
|
376
398
|
<!-- Tab Panels -->
|
|
377
|
-
${this.
|
|
378
|
-
const isSelected = tab.id === this.
|
|
399
|
+
${this.items.map((tab) => {
|
|
400
|
+
const isSelected = tab.id === this.value;
|
|
379
401
|
const tabId = `${this._idPrefix}-tab-${tab.id}`;
|
|
380
402
|
const panelId = `${this._idPrefix}-panel-${tab.id}`;
|
|
381
|
-
const isFirstTabSelected = this.
|
|
403
|
+
const isFirstTabSelected = this.items.length > 0 && this.value === this.items[0].id;
|
|
382
404
|
return html `
|
|
383
405
|
<div
|
|
384
|
-
class="tabpanel ${!isFirstTabSelected
|
|
406
|
+
class="tabpanel ${!isFirstTabSelected
|
|
407
|
+
? "tabpanel--rounded-top-left"
|
|
408
|
+
: ""}"
|
|
385
409
|
role="tabpanel"
|
|
386
410
|
id=${panelId}
|
|
387
411
|
aria-labelledby=${tabId}
|
|
@@ -400,10 +424,10 @@ let OhTabs = class OhTabs extends OhElement {
|
|
|
400
424
|
};
|
|
401
425
|
__decorate([
|
|
402
426
|
property({ type: Array })
|
|
403
|
-
], OhTabs.prototype, "
|
|
427
|
+
], OhTabs.prototype, "items", void 0);
|
|
404
428
|
__decorate([
|
|
405
|
-
property({ type: String, reflect: true
|
|
406
|
-
], OhTabs.prototype, "
|
|
429
|
+
property({ type: String, reflect: true })
|
|
430
|
+
], OhTabs.prototype, "value", void 0);
|
|
407
431
|
__decorate([
|
|
408
432
|
property({ type: String })
|
|
409
433
|
], 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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"}
|