@api-client/ui 0.5.32 → 0.5.34
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/build/src/core/ApplicationRoute.d.ts.map +1 -1
- package/build/src/core/ApplicationRoute.js +3 -0
- package/build/src/core/ApplicationRoute.js.map +1 -1
- package/build/src/elements/navigation/internals/Navigation.d.ts +68 -0
- package/build/src/elements/navigation/internals/Navigation.d.ts.map +1 -0
- package/build/src/elements/navigation/internals/Navigation.js +205 -0
- package/build/src/elements/navigation/internals/Navigation.js.map +1 -0
- package/build/src/elements/navigation/internals/Navigation.styles.d.ts +3 -0
- package/build/src/elements/navigation/internals/Navigation.styles.d.ts.map +1 -0
- package/build/src/elements/navigation/internals/Navigation.styles.js +24 -0
- package/build/src/elements/navigation/internals/Navigation.styles.js.map +1 -0
- package/build/src/elements/navigation/internals/NavigationItem.d.ts +62 -2
- package/build/src/elements/navigation/internals/NavigationItem.d.ts.map +1 -1
- package/build/src/elements/navigation/internals/NavigationItem.js +88 -20
- package/build/src/elements/navigation/internals/NavigationItem.js.map +1 -1
- package/build/src/elements/navigation/ui-navigation.d.ts +11 -0
- package/build/src/elements/navigation/ui-navigation.d.ts.map +1 -0
- package/build/src/elements/navigation/ui-navigation.js +27 -0
- package/build/src/elements/navigation/ui-navigation.js.map +1 -0
- package/build/src/md/input/Input.d.ts +2 -0
- package/build/src/md/input/Input.d.ts.map +1 -1
- package/build/src/types/aria.d.ts +28 -0
- package/build/src/types/aria.d.ts.map +1 -0
- package/build/src/types/aria.js +2 -0
- package/build/src/types/aria.js.map +1 -0
- package/build/src/types/role.d.ts +1 -16
- package/build/src/types/role.d.ts.map +1 -1
- package/build/src/types/role.js.map +1 -1
- package/build/test/elements/navigation/Navigation.test.d.ts +3 -0
- package/build/test/elements/navigation/Navigation.test.d.ts.map +1 -0
- package/build/test/elements/navigation/Navigation.test.js +113 -0
- package/build/test/elements/navigation/Navigation.test.js.map +1 -0
- package/demo/elements/index.html +2 -0
- package/demo/elements/navigation/navigation.html +20 -0
- package/demo/elements/navigation/navigation.ts +45 -0
- package/package.json +1 -1
- package/src/core/ApplicationRoute.ts +4 -1
- package/src/elements/navigation/internals/Navigation.styles.ts +24 -0
- package/src/elements/navigation/internals/Navigation.ts +181 -0
- package/src/elements/navigation/internals/NavigationItem.ts +79 -5
- package/src/elements/navigation/ui-navigation.ts +15 -0
- package/src/types/aria.ts +141 -0
- package/src/types/role.ts +1 -129
- package/test/elements/navigation/Navigation.test.ts +120 -0
- package/tsconfig.json +1 -1
package/package.json
CHANGED
|
@@ -34,7 +34,10 @@ function parseParams(pattern: string, uri: string): Record<string, string | stri
|
|
|
34
34
|
const result: Record<string, string | string[]> = {}
|
|
35
35
|
if (groups) {
|
|
36
36
|
Object.keys(groups).forEach((key) => {
|
|
37
|
-
let value = groups[key] as string
|
|
37
|
+
let value = groups[key] as string | undefined
|
|
38
|
+
if (value === undefined) {
|
|
39
|
+
return
|
|
40
|
+
}
|
|
38
41
|
if (value[0] === '/') {
|
|
39
42
|
value = value.substring(1)
|
|
40
43
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { css } from 'lit'
|
|
2
|
+
|
|
3
|
+
export default css`
|
|
4
|
+
:host {
|
|
5
|
+
display: block;
|
|
6
|
+
outline: none;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
nav {
|
|
10
|
+
display: flex;
|
|
11
|
+
gap: 8px;
|
|
12
|
+
list-style: none;
|
|
13
|
+
padding: 0;
|
|
14
|
+
margin: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
:host([orientation='horizontal']) nav {
|
|
18
|
+
flex-direction: row;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
:host([orientation='vertical']) nav {
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
}
|
|
24
|
+
`
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { html, LitElement, type TemplateResult } from 'lit'
|
|
2
|
+
import { property, queryAssignedElements } from 'lit/decorators.js'
|
|
3
|
+
import type NavigationItem from './NavigationItem.js'
|
|
4
|
+
import { AriaCurrent } from '../../../types/aria.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* NavigationList
|
|
8
|
+
*
|
|
9
|
+
* A semantic, accessible navigation container for `ui-navigation-item` elements.
|
|
10
|
+
* Handles keyboard navigation (roving tabindex), focus management, and ARIA roles.
|
|
11
|
+
*
|
|
12
|
+
* ## Usage Example
|
|
13
|
+
*
|
|
14
|
+
* ```html
|
|
15
|
+
* <ui-navigation aria-label="Main navigation" current="page">
|
|
16
|
+
* <ui-navigation-item selected>
|
|
17
|
+
* <span slot="icon" aria-hidden="true">🏠</span>
|
|
18
|
+
* Home
|
|
19
|
+
* </ui-navigation-item>
|
|
20
|
+
* <ui-navigation-item>
|
|
21
|
+
* <span slot="icon" aria-hidden="true">🔍</span>
|
|
22
|
+
* Search
|
|
23
|
+
* </ui-navigation-item>
|
|
24
|
+
* <ui-navigation-item>
|
|
25
|
+
* <span slot="icon" aria-hidden="true">📁</span>
|
|
26
|
+
* Files
|
|
27
|
+
* </ui-navigation-item>
|
|
28
|
+
* <ui-navigation-item iconOnly disabled aria-disabled="true" tabindex="-1">
|
|
29
|
+
* <span slot="icon" aria-hidden="true">⚙️</span>
|
|
30
|
+
* </ui-navigation-item>
|
|
31
|
+
* </ui-navigation>
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @slot - Place `ui-navigation-item` elements as direct children.
|
|
35
|
+
* @fires select - Dispatched when an item is selected via click or keyboard.
|
|
36
|
+
* The `detail` object contains the selected `item`.
|
|
37
|
+
*/
|
|
38
|
+
export default class Navigation extends LitElement {
|
|
39
|
+
/**
|
|
40
|
+
* Orientation of the navigation: 'horizontal' or 'vertical'.
|
|
41
|
+
* @attribute
|
|
42
|
+
*/
|
|
43
|
+
@property({ type: String, reflect: true }) accessor orientation: 'horizontal' | 'vertical' = 'vertical'
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The current item in the navigation, used for ARIA attributes.
|
|
47
|
+
* Can be 'page', 'step', 'location', 'date', 'time', 'true', 'false', or ''.
|
|
48
|
+
* @attribute
|
|
49
|
+
*/
|
|
50
|
+
@property({ type: String, reflect: true }) accessor current: AriaCurrent = ''
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Query all ui-navigation-item children
|
|
54
|
+
*/
|
|
55
|
+
@queryAssignedElements({ flatten: true }) accessor _items!: NavigationItem[]
|
|
56
|
+
|
|
57
|
+
override render(): TemplateResult {
|
|
58
|
+
return html`
|
|
59
|
+
<nav aria-label="${this.getAttribute('aria-label') || 'Navigation'}">
|
|
60
|
+
<slot @slotchange="${this._onSlotChange}"></slot>
|
|
61
|
+
</nav>
|
|
62
|
+
`
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
constructor() {
|
|
66
|
+
super()
|
|
67
|
+
this.addEventListener('keydown', this._onKeyDown.bind(this))
|
|
68
|
+
this.addEventListener('click', this._onClick.bind(this))
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
override firstUpdated() {
|
|
72
|
+
this._setTabIndexes()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private _onSlotChange = () => {
|
|
76
|
+
this._setTabIndexes()
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Sets the initial `tabindex` for the items. The first selected item,
|
|
81
|
+
* or the first item if none are selected, receives `tabindex="0"`.
|
|
82
|
+
* All other items receive `tabindex="-1"`.
|
|
83
|
+
*/
|
|
84
|
+
private _setTabIndexes() {
|
|
85
|
+
const items = this._getEnabledItems()
|
|
86
|
+
if (!items.length) {
|
|
87
|
+
return
|
|
88
|
+
}
|
|
89
|
+
items.forEach((item) => {
|
|
90
|
+
if (item.disabled) {
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
item.setAttribute('tabindex', item.selected ? '0' : '-1')
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private _getEnabledItems(): NavigationItem[] {
|
|
98
|
+
return (this._items || []).filter((item) => !item.disabled)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
private _onClick = (e: MouseEvent) => {
|
|
102
|
+
const target = e.target as HTMLElement
|
|
103
|
+
const item = target.closest('ui-navigation-item')
|
|
104
|
+
if (item && this._items.includes(item)) {
|
|
105
|
+
this._selectItem(item)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private _selectItem(itemToSelect: NavigationItem) {
|
|
110
|
+
if (itemToSelect.disabled) {
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
this._items.forEach((item) => {
|
|
115
|
+
item.selected = item === itemToSelect
|
|
116
|
+
if (item.hasAttribute('aria-current')) {
|
|
117
|
+
item.removeAttribute('aria-current')
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
if (this.current) {
|
|
122
|
+
itemToSelect.setAttribute('aria-current', this.current)
|
|
123
|
+
}
|
|
124
|
+
this._updateFocus(itemToSelect)
|
|
125
|
+
|
|
126
|
+
this.dispatchEvent(
|
|
127
|
+
new CustomEvent('select', {
|
|
128
|
+
detail: { item: itemToSelect },
|
|
129
|
+
bubbles: false,
|
|
130
|
+
composed: true,
|
|
131
|
+
})
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
private _updateFocus(itemToFocus: NavigationItem) {
|
|
136
|
+
this._setTabIndexes()
|
|
137
|
+
itemToFocus.focus()
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private _onKeyDown(e: KeyboardEvent) {
|
|
141
|
+
const items = this._getEnabledItems()
|
|
142
|
+
if (!items.length) {
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const activeElement = (this.getRootNode() as Document | ShadowRoot).activeElement
|
|
147
|
+
if (!activeElement) {
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Find which of our items is the host of the active element.
|
|
152
|
+
// This is necessary because of focus delegation in ui-navigation-item.
|
|
153
|
+
const activeItem = items.find((item) => item === activeElement || item.shadowRoot?.contains(activeElement))
|
|
154
|
+
if (!activeItem) {
|
|
155
|
+
return
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
159
|
+
e.preventDefault()
|
|
160
|
+
this._selectItem(activeItem)
|
|
161
|
+
return
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const idx = items.indexOf(activeItem)
|
|
165
|
+
let nextIdx = idx
|
|
166
|
+
if (this.orientation === 'horizontal') {
|
|
167
|
+
if (e.key === 'ArrowRight') nextIdx = (idx + 1) % items.length
|
|
168
|
+
if (e.key === 'ArrowLeft') nextIdx = (idx - 1 + items.length) % items.length
|
|
169
|
+
} else {
|
|
170
|
+
if (e.key === 'ArrowDown') nextIdx = (idx + 1) % items.length
|
|
171
|
+
if (e.key === 'ArrowUp') nextIdx = (idx - 1 + items.length) % items.length
|
|
172
|
+
}
|
|
173
|
+
if (e.key === 'Home') nextIdx = 0
|
|
174
|
+
if (e.key === 'End') nextIdx = items.length - 1
|
|
175
|
+
if (nextIdx !== idx) {
|
|
176
|
+
items[nextIdx].focus()
|
|
177
|
+
items.forEach((item, i) => item.setAttribute('tabindex', i === nextIdx ? '0' : '-1'))
|
|
178
|
+
e.preventDefault()
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -1,19 +1,84 @@
|
|
|
1
|
-
import { html, TemplateResult } from 'lit'
|
|
1
|
+
import { html, TemplateResult, nothing } from 'lit'
|
|
2
2
|
import { property, state } from 'lit/decorators.js'
|
|
3
3
|
import { classMap } from 'lit/directives/class-map.js'
|
|
4
|
+
import { when } from 'lit/directives/when.js'
|
|
4
5
|
import { UiElement } from '../../../md/UiElement.js'
|
|
6
|
+
import { isDisabled, setDisabled } from '../../../lib/disabled.js'
|
|
5
7
|
|
|
8
|
+
/**
|
|
9
|
+
* NavigationItem
|
|
10
|
+
*
|
|
11
|
+
* An element to be placed inside a navigation bar. This component is designed for use with navigation bars and supports
|
|
12
|
+
* icon-only, selected, and disabled states. It is built with accessibility and composability in mind.
|
|
13
|
+
*
|
|
14
|
+
* ## Accessibility
|
|
15
|
+
*
|
|
16
|
+
* - Uses a native `<button>` element for proper semantics and keyboard accessibility.
|
|
17
|
+
* - The icon is marked with `role="presentation"` to indicate it is decorative.
|
|
18
|
+
* - Focus ring and ripple effects are included for visual feedback.
|
|
19
|
+
*
|
|
20
|
+
* ## Usage Example
|
|
21
|
+
*
|
|
22
|
+
* ### Accessible Navigation Example
|
|
23
|
+
*
|
|
24
|
+
* ```html
|
|
25
|
+
* <nav aria-label="Main navigation">
|
|
26
|
+
* <ul style="display: flex; gap: 8px; list-style: none; padding: 0; margin: 0;">
|
|
27
|
+
* <li>
|
|
28
|
+
* <navigation-item selected aria-current="page">
|
|
29
|
+
* <span slot="icon" aria-hidden="true">🏠</span>
|
|
30
|
+
* Home
|
|
31
|
+
* </navigation-item>
|
|
32
|
+
* </li>
|
|
33
|
+
* <li>
|
|
34
|
+
* <navigation-item>
|
|
35
|
+
* <span slot="icon" aria-hidden="true">🔍</span>
|
|
36
|
+
* Search
|
|
37
|
+
* </navigation-item>
|
|
38
|
+
* </li>
|
|
39
|
+
* <li>
|
|
40
|
+
* <navigation-item>
|
|
41
|
+
* <span slot="icon" aria-hidden="true">📁</span>
|
|
42
|
+
* Files
|
|
43
|
+
* </navigation-item>
|
|
44
|
+
* </li>
|
|
45
|
+
* <li>
|
|
46
|
+
* <navigation-item iconOnly disabled aria-disabled="true" tabindex="-1">
|
|
47
|
+
* <span slot="icon" aria-hidden="true">⚙️</span>
|
|
48
|
+
* </navigation-item>
|
|
49
|
+
* </li>
|
|
50
|
+
* </ul>
|
|
51
|
+
* </nav>
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* This example demonstrates a horizontal navigation bar using semantic HTML. Each `navigation-item`
|
|
55
|
+
* is placed inside a list item for proper structure. The `aria-current="page"` attribute marks the current
|
|
56
|
+
* page, and `aria-disabled="true"` with `tabindex="-1"` ensures the disabled item is not focusable.
|
|
57
|
+
* Icons use `aria-hidden="true"` for accessibility.
|
|
58
|
+
*
|
|
59
|
+
* @slot icon - A slot for the icon element
|
|
60
|
+
* @slot - The default slot for the label
|
|
61
|
+
*/
|
|
6
62
|
export default class NavigationItem extends UiElement {
|
|
7
63
|
static override shadowRootOptions: ShadowRootInit = {
|
|
8
64
|
mode: 'open',
|
|
9
65
|
delegatesFocus: true,
|
|
10
66
|
}
|
|
11
67
|
|
|
68
|
+
get disabled(): boolean {
|
|
69
|
+
return isDisabled(this)
|
|
70
|
+
}
|
|
71
|
+
|
|
12
72
|
/**
|
|
13
|
-
* When set, the
|
|
73
|
+
* When set, the navigation item is in a disabled state.
|
|
14
74
|
* @attribute
|
|
15
75
|
*/
|
|
16
|
-
@property({ reflect: true, type: Boolean })
|
|
76
|
+
@property({ reflect: true, type: Boolean })
|
|
77
|
+
set disabled(value: boolean) {
|
|
78
|
+
const old = isDisabled(this)
|
|
79
|
+
setDisabled(this, value)
|
|
80
|
+
this.requestUpdate('disabled', old)
|
|
81
|
+
}
|
|
17
82
|
|
|
18
83
|
/**
|
|
19
84
|
* Whether the navigation item is selected.
|
|
@@ -26,6 +91,11 @@ export default class NavigationItem extends UiElement {
|
|
|
26
91
|
* @attribute
|
|
27
92
|
*/
|
|
28
93
|
@property({ reflect: true, type: Boolean }) accessor iconOnly = false
|
|
94
|
+
/**
|
|
95
|
+
* The reference of the navigation item to the target.
|
|
96
|
+
* @attribute
|
|
97
|
+
*/
|
|
98
|
+
@property({ reflect: true, type: String }) accessor href: string | undefined
|
|
29
99
|
|
|
30
100
|
/**
|
|
31
101
|
* Determines when the element has an icon in the "icon" slot.
|
|
@@ -49,10 +119,14 @@ export default class NavigationItem extends UiElement {
|
|
|
49
119
|
'icon-only': this.iconOnly,
|
|
50
120
|
})
|
|
51
121
|
return html`
|
|
52
|
-
<button class="${containerClasses}" id="button">
|
|
122
|
+
<button class="${containerClasses}" id="button" ?disabled="${this.disabled}" aria-disabled="${this.disabled}">
|
|
53
123
|
<md-focus-ring part="focus-ring" for="button"></md-focus-ring>
|
|
54
124
|
<md-ripple></md-ripple>
|
|
55
|
-
${this.renderIcon()}${
|
|
125
|
+
${this.renderIcon()}${when(
|
|
126
|
+
this.iconOnly,
|
|
127
|
+
() => nothing,
|
|
128
|
+
() => html`<slot></slot>`
|
|
129
|
+
)}
|
|
56
130
|
</button>
|
|
57
131
|
`
|
|
58
132
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CSSResultOrNative } from 'lit'
|
|
2
|
+
import { customElement } from 'lit/decorators.js'
|
|
3
|
+
import Element from './internals/Navigation.js'
|
|
4
|
+
import styles from './internals/Navigation.styles.js'
|
|
5
|
+
|
|
6
|
+
@customElement('ui-navigation')
|
|
7
|
+
export class NavigationListElement extends Element {
|
|
8
|
+
static override styles: CSSResultOrNative[] = [styles]
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare global {
|
|
12
|
+
interface HTMLElementTagNameMap {
|
|
13
|
+
'ui-navigation': NavigationListElement
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* - `page` - Represents the current page within a set of pages.
|
|
3
|
+
* - `step` - Represents the current step within a process.
|
|
4
|
+
* - `location` - Represents the current location, for example the current page in a breadcrumbs hierarchy.
|
|
5
|
+
* - `date` - Represents the current date within a collection of dates.
|
|
6
|
+
* - `time` - Represents the current time within a set of times.
|
|
7
|
+
* - `true` - Represents the current item within a set.
|
|
8
|
+
* - `false` - Does not represent the current item within a set.
|
|
9
|
+
* - `''` - No current state.
|
|
10
|
+
*/
|
|
11
|
+
export type AriaCurrent = 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false' | ''
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Valid values for `aria-expanded`.
|
|
15
|
+
*/
|
|
16
|
+
export type ARIAAutoComplete = 'none' | 'inline' | 'list' | 'both'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Valid values for `aria-expanded`.
|
|
20
|
+
*/
|
|
21
|
+
export type ARIAExpanded = 'true' | 'false'
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Valid values for `aria-haspopup`.
|
|
25
|
+
*/
|
|
26
|
+
export type ARIAHasPopup = 'false' | 'true' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Valid values for `role`.
|
|
30
|
+
*/
|
|
31
|
+
export type ARIARole =
|
|
32
|
+
| 'alert'
|
|
33
|
+
| 'alertdialog'
|
|
34
|
+
| 'button'
|
|
35
|
+
| 'checkbox'
|
|
36
|
+
| 'dialog'
|
|
37
|
+
| 'gridcell'
|
|
38
|
+
| 'link'
|
|
39
|
+
| 'log'
|
|
40
|
+
| 'marquee'
|
|
41
|
+
| 'menuitem'
|
|
42
|
+
| 'menuitemcheckbox'
|
|
43
|
+
| 'menuitemradio'
|
|
44
|
+
| 'option'
|
|
45
|
+
| 'progressbar'
|
|
46
|
+
| 'radio'
|
|
47
|
+
| 'scrollbar'
|
|
48
|
+
| 'searchbox'
|
|
49
|
+
| 'slider'
|
|
50
|
+
| 'spinbutton'
|
|
51
|
+
| 'status'
|
|
52
|
+
| 'switch'
|
|
53
|
+
| 'tab'
|
|
54
|
+
| 'tabpanel'
|
|
55
|
+
| 'textbox'
|
|
56
|
+
| 'timer'
|
|
57
|
+
| 'tooltip'
|
|
58
|
+
| 'treeitem'
|
|
59
|
+
| 'combobox'
|
|
60
|
+
| 'grid'
|
|
61
|
+
| 'listbox'
|
|
62
|
+
| 'menu'
|
|
63
|
+
| 'menubar'
|
|
64
|
+
| 'radiogroup'
|
|
65
|
+
| 'tablist'
|
|
66
|
+
| 'tree'
|
|
67
|
+
| 'treegrid'
|
|
68
|
+
| 'application'
|
|
69
|
+
| 'article'
|
|
70
|
+
| 'cell'
|
|
71
|
+
| 'columnheader'
|
|
72
|
+
| 'definition'
|
|
73
|
+
| 'directory'
|
|
74
|
+
| 'document'
|
|
75
|
+
| 'feed'
|
|
76
|
+
| 'figure'
|
|
77
|
+
| 'group'
|
|
78
|
+
| 'heading'
|
|
79
|
+
| 'img'
|
|
80
|
+
| 'list'
|
|
81
|
+
| 'listitem'
|
|
82
|
+
| 'math'
|
|
83
|
+
| 'none'
|
|
84
|
+
| 'note'
|
|
85
|
+
| 'presentation'
|
|
86
|
+
| 'region'
|
|
87
|
+
| 'row'
|
|
88
|
+
| 'rowgroup'
|
|
89
|
+
| 'rowheader'
|
|
90
|
+
| 'separator'
|
|
91
|
+
| 'table'
|
|
92
|
+
| 'term'
|
|
93
|
+
| 'text'
|
|
94
|
+
| 'toolbar'
|
|
95
|
+
| 'banner'
|
|
96
|
+
| 'complementary'
|
|
97
|
+
| 'contentinfo'
|
|
98
|
+
| 'form'
|
|
99
|
+
| 'main'
|
|
100
|
+
| 'navigation'
|
|
101
|
+
| 'region'
|
|
102
|
+
| 'search'
|
|
103
|
+
| 'doc-abstract'
|
|
104
|
+
| 'doc-acknowledgments'
|
|
105
|
+
| 'doc-afterword'
|
|
106
|
+
| 'doc-appendix'
|
|
107
|
+
| 'doc-backlink'
|
|
108
|
+
| 'doc-biblioentry'
|
|
109
|
+
| 'doc-bibliography'
|
|
110
|
+
| 'doc-biblioref'
|
|
111
|
+
| 'doc-chapter'
|
|
112
|
+
| 'doc-colophon'
|
|
113
|
+
| 'doc-conclusion'
|
|
114
|
+
| 'doc-cover'
|
|
115
|
+
| 'doc-credit'
|
|
116
|
+
| 'doc-credits'
|
|
117
|
+
| 'doc-dedication'
|
|
118
|
+
| 'doc-endnote'
|
|
119
|
+
| 'doc-endnotes'
|
|
120
|
+
| 'doc-epigraph'
|
|
121
|
+
| 'doc-epilogue'
|
|
122
|
+
| 'doc-errata'
|
|
123
|
+
| 'doc-example'
|
|
124
|
+
| 'doc-footnote'
|
|
125
|
+
| 'doc-foreword'
|
|
126
|
+
| 'doc-glossary'
|
|
127
|
+
| 'doc-glossref'
|
|
128
|
+
| 'doc-index'
|
|
129
|
+
| 'doc-introduction'
|
|
130
|
+
| 'doc-noteref'
|
|
131
|
+
| 'doc-notice'
|
|
132
|
+
| 'doc-pagebreak'
|
|
133
|
+
| 'doc-pagelist'
|
|
134
|
+
| 'doc-part'
|
|
135
|
+
| 'doc-preface'
|
|
136
|
+
| 'doc-prologue'
|
|
137
|
+
| 'doc-pullquote'
|
|
138
|
+
| 'doc-qna'
|
|
139
|
+
| 'doc-subtitle'
|
|
140
|
+
| 'doc-tip'
|
|
141
|
+
| 'doc-toc'
|
package/src/types/role.ts
CHANGED
|
@@ -1,129 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Valid values for `aria-expanded`.
|
|
3
|
-
*/
|
|
4
|
-
export type ARIAAutoComplete = 'none' | 'inline' | 'list' | 'both'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Valid values for `aria-expanded`.
|
|
8
|
-
*/
|
|
9
|
-
export type ARIAExpanded = 'true' | 'false'
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Valid values for `aria-haspopup`.
|
|
13
|
-
*/
|
|
14
|
-
export type ARIAHasPopup = 'false' | 'true' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog'
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Valid values for `role`.
|
|
18
|
-
*/
|
|
19
|
-
export type ARIARole =
|
|
20
|
-
| 'alert'
|
|
21
|
-
| 'alertdialog'
|
|
22
|
-
| 'button'
|
|
23
|
-
| 'checkbox'
|
|
24
|
-
| 'dialog'
|
|
25
|
-
| 'gridcell'
|
|
26
|
-
| 'link'
|
|
27
|
-
| 'log'
|
|
28
|
-
| 'marquee'
|
|
29
|
-
| 'menuitem'
|
|
30
|
-
| 'menuitemcheckbox'
|
|
31
|
-
| 'menuitemradio'
|
|
32
|
-
| 'option'
|
|
33
|
-
| 'progressbar'
|
|
34
|
-
| 'radio'
|
|
35
|
-
| 'scrollbar'
|
|
36
|
-
| 'searchbox'
|
|
37
|
-
| 'slider'
|
|
38
|
-
| 'spinbutton'
|
|
39
|
-
| 'status'
|
|
40
|
-
| 'switch'
|
|
41
|
-
| 'tab'
|
|
42
|
-
| 'tabpanel'
|
|
43
|
-
| 'textbox'
|
|
44
|
-
| 'timer'
|
|
45
|
-
| 'tooltip'
|
|
46
|
-
| 'treeitem'
|
|
47
|
-
| 'combobox'
|
|
48
|
-
| 'grid'
|
|
49
|
-
| 'listbox'
|
|
50
|
-
| 'menu'
|
|
51
|
-
| 'menubar'
|
|
52
|
-
| 'radiogroup'
|
|
53
|
-
| 'tablist'
|
|
54
|
-
| 'tree'
|
|
55
|
-
| 'treegrid'
|
|
56
|
-
| 'application'
|
|
57
|
-
| 'article'
|
|
58
|
-
| 'cell'
|
|
59
|
-
| 'columnheader'
|
|
60
|
-
| 'definition'
|
|
61
|
-
| 'directory'
|
|
62
|
-
| 'document'
|
|
63
|
-
| 'feed'
|
|
64
|
-
| 'figure'
|
|
65
|
-
| 'group'
|
|
66
|
-
| 'heading'
|
|
67
|
-
| 'img'
|
|
68
|
-
| 'list'
|
|
69
|
-
| 'listitem'
|
|
70
|
-
| 'math'
|
|
71
|
-
| 'none'
|
|
72
|
-
| 'note'
|
|
73
|
-
| 'presentation'
|
|
74
|
-
| 'region'
|
|
75
|
-
| 'row'
|
|
76
|
-
| 'rowgroup'
|
|
77
|
-
| 'rowheader'
|
|
78
|
-
| 'separator'
|
|
79
|
-
| 'table'
|
|
80
|
-
| 'term'
|
|
81
|
-
| 'text'
|
|
82
|
-
| 'toolbar'
|
|
83
|
-
| 'banner'
|
|
84
|
-
| 'complementary'
|
|
85
|
-
| 'contentinfo'
|
|
86
|
-
| 'form'
|
|
87
|
-
| 'main'
|
|
88
|
-
| 'navigation'
|
|
89
|
-
| 'region'
|
|
90
|
-
| 'search'
|
|
91
|
-
| 'doc-abstract'
|
|
92
|
-
| 'doc-acknowledgments'
|
|
93
|
-
| 'doc-afterword'
|
|
94
|
-
| 'doc-appendix'
|
|
95
|
-
| 'doc-backlink'
|
|
96
|
-
| 'doc-biblioentry'
|
|
97
|
-
| 'doc-bibliography'
|
|
98
|
-
| 'doc-biblioref'
|
|
99
|
-
| 'doc-chapter'
|
|
100
|
-
| 'doc-colophon'
|
|
101
|
-
| 'doc-conclusion'
|
|
102
|
-
| 'doc-cover'
|
|
103
|
-
| 'doc-credit'
|
|
104
|
-
| 'doc-credits'
|
|
105
|
-
| 'doc-dedication'
|
|
106
|
-
| 'doc-endnote'
|
|
107
|
-
| 'doc-endnotes'
|
|
108
|
-
| 'doc-epigraph'
|
|
109
|
-
| 'doc-epilogue'
|
|
110
|
-
| 'doc-errata'
|
|
111
|
-
| 'doc-example'
|
|
112
|
-
| 'doc-footnote'
|
|
113
|
-
| 'doc-foreword'
|
|
114
|
-
| 'doc-glossary'
|
|
115
|
-
| 'doc-glossref'
|
|
116
|
-
| 'doc-index'
|
|
117
|
-
| 'doc-introduction'
|
|
118
|
-
| 'doc-noteref'
|
|
119
|
-
| 'doc-notice'
|
|
120
|
-
| 'doc-pagebreak'
|
|
121
|
-
| 'doc-pagelist'
|
|
122
|
-
| 'doc-part'
|
|
123
|
-
| 'doc-preface'
|
|
124
|
-
| 'doc-prologue'
|
|
125
|
-
| 'doc-pullquote'
|
|
126
|
-
| 'doc-qna'
|
|
127
|
-
| 'doc-subtitle'
|
|
128
|
-
| 'doc-tip'
|
|
129
|
-
| 'doc-toc'
|
|
1
|
+
export { ARIAAutoComplete, ARIAExpanded, ARIAHasPopup, ARIARole } from './aria.js'
|