@mdxui/terminal 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/README.md +571 -0
- package/dist/ansi-css-Sk5mWtdK.d.ts +119 -0
- package/dist/ansi-css-V6JIHGsM.d.ts +119 -0
- package/dist/ansi-css-_3eSEU9d.d.ts +119 -0
- package/dist/chunk-3EFDH7PK.js +5235 -0
- package/dist/chunk-3RG5ZIWI.js +10 -0
- package/dist/chunk-3X5IR6WE.js +884 -0
- package/dist/chunk-4FV5ZDCE.js +5236 -0
- package/dist/chunk-4OVMSF2J.js +243 -0
- package/dist/chunk-63FEETIS.js +4048 -0
- package/dist/chunk-B43KP7XJ.js +884 -0
- package/dist/chunk-BMTJXWUV.js +655 -0
- package/dist/chunk-C3SVH4N7.js +882 -0
- package/dist/chunk-EVWR7Y47.js +874 -0
- package/dist/chunk-F6A5VWUC.js +1285 -0
- package/dist/chunk-FD7KW7GE.js +882 -0
- package/dist/chunk-GBQ6UD6I.js +655 -0
- package/dist/chunk-GMDD3M6U.js +5227 -0
- package/dist/chunk-JBHRXOXM.js +1058 -0
- package/dist/chunk-JFOO3EYO.js +1182 -0
- package/dist/chunk-JQ5H3WXL.js +1291 -0
- package/dist/chunk-JQD5NASE.js +234 -0
- package/dist/chunk-KRHJP5R7.js +592 -0
- package/dist/chunk-KWF6WVJE.js +962 -0
- package/dist/chunk-LHYQVN3H.js +1038 -0
- package/dist/chunk-M3TLQLGC.js +1032 -0
- package/dist/chunk-MVW4Q5OP.js +240 -0
- package/dist/chunk-NXCZSWLU.js +1294 -0
- package/dist/chunk-O25TNRO6.js +607 -0
- package/dist/chunk-PNECDA2I.js +884 -0
- package/dist/chunk-QIHWRLJR.js +962 -0
- package/dist/chunk-QW5YMQ7K.js +882 -0
- package/dist/chunk-R5U7XKVJ.js +16 -0
- package/dist/chunk-RP2MVQLR.js +962 -0
- package/dist/chunk-TP6RXGXA.js +1087 -0
- package/dist/chunk-TQQSTITZ.js +655 -0
- package/dist/chunk-X24GWXQV.js +1281 -0
- package/dist/components/index.d.ts +802 -0
- package/dist/components/index.js +149 -0
- package/dist/data/index.d.ts +2554 -0
- package/dist/data/index.js +51 -0
- package/dist/forms/index.d.ts +1596 -0
- package/dist/forms/index.js +464 -0
- package/dist/index-CQRFZntR.d.ts +867 -0
- package/dist/index.d.ts +579 -0
- package/dist/index.js +786 -0
- package/dist/interactive-D0JkWosD.d.ts +217 -0
- package/dist/keyboard/index.d.ts +2 -0
- package/dist/keyboard/index.js +43 -0
- package/dist/renderers/index.d.ts +546 -0
- package/dist/renderers/index.js +2157 -0
- package/dist/storybook/index.d.ts +396 -0
- package/dist/storybook/index.js +641 -0
- package/dist/theme/index.d.ts +1339 -0
- package/dist/theme/index.js +123 -0
- package/dist/types-Bxu5PAgA.d.ts +710 -0
- package/dist/types-CIlop5Ji.d.ts +701 -0
- package/dist/types-Ca8p_p5X.d.ts +710 -0
- package/package.json +90 -0
- package/src/__tests__/components/data/card.test.ts +458 -0
- package/src/__tests__/components/data/list.test.ts +473 -0
- package/src/__tests__/components/data/metrics.test.ts +541 -0
- package/src/__tests__/components/data/table.test.ts +448 -0
- package/src/__tests__/components/input/field.test.ts +555 -0
- package/src/__tests__/components/input/form.test.ts +870 -0
- package/src/__tests__/components/input/search.test.ts +1238 -0
- package/src/__tests__/components/input/select.test.ts +658 -0
- package/src/__tests__/components/navigation/breadcrumb.test.ts +923 -0
- package/src/__tests__/components/navigation/command-palette.test.ts +1095 -0
- package/src/__tests__/components/navigation/sidebar.test.ts +1018 -0
- package/src/__tests__/components/navigation/tabs.test.ts +995 -0
- package/src/__tests__/components.test.tsx +1197 -0
- package/src/__tests__/core/compiler.test.ts +986 -0
- package/src/__tests__/core/parser.test.ts +785 -0
- package/src/__tests__/core/tier-switcher.test.ts +1103 -0
- package/src/__tests__/core/types.test.ts +1398 -0
- package/src/__tests__/data/collections.test.ts +1337 -0
- package/src/__tests__/data/db.test.ts +1265 -0
- package/src/__tests__/data/reactive.test.ts +1010 -0
- package/src/__tests__/data/sync.test.ts +1614 -0
- package/src/__tests__/errors.test.ts +660 -0
- package/src/__tests__/forms/integration.test.ts +444 -0
- package/src/__tests__/integration.test.ts +905 -0
- package/src/__tests__/keyboard.test.ts +1791 -0
- package/src/__tests__/renderer.test.ts +489 -0
- package/src/__tests__/renderers/ansi-css.test.ts +948 -0
- package/src/__tests__/renderers/ansi.test.ts +1366 -0
- package/src/__tests__/renderers/ascii.test.ts +1360 -0
- package/src/__tests__/renderers/interactive.test.ts +2353 -0
- package/src/__tests__/renderers/markdown.test.ts +1483 -0
- package/src/__tests__/renderers/text.test.ts +1369 -0
- package/src/__tests__/renderers/unicode.test.ts +1307 -0
- package/src/__tests__/theme.test.ts +639 -0
- package/src/__tests__/utils/assertions.ts +685 -0
- package/src/__tests__/utils/index.ts +115 -0
- package/src/__tests__/utils/test-renderer.ts +381 -0
- package/src/__tests__/utils/utils.test.ts +560 -0
- package/src/components/containers/card.ts +56 -0
- package/src/components/containers/dialog.ts +53 -0
- package/src/components/containers/index.ts +9 -0
- package/src/components/containers/panel.ts +59 -0
- package/src/components/feedback/badge.ts +40 -0
- package/src/components/feedback/index.ts +8 -0
- package/src/components/feedback/spinner.ts +23 -0
- package/src/components/helpers.ts +81 -0
- package/src/components/index.ts +153 -0
- package/src/components/layout/breadcrumb.ts +31 -0
- package/src/components/layout/index.ts +10 -0
- package/src/components/layout/list.ts +29 -0
- package/src/components/layout/sidebar.ts +79 -0
- package/src/components/layout/table.ts +62 -0
- package/src/components/primitives/box.ts +95 -0
- package/src/components/primitives/button.ts +54 -0
- package/src/components/primitives/index.ts +11 -0
- package/src/components/primitives/input.ts +88 -0
- package/src/components/primitives/select.ts +97 -0
- package/src/components/primitives/text.ts +60 -0
- package/src/components/render.ts +155 -0
- package/src/components/templates/app.ts +43 -0
- package/src/components/templates/index.ts +8 -0
- package/src/components/templates/site.ts +54 -0
- package/src/components/types.ts +777 -0
- package/src/core/compiler.ts +718 -0
- package/src/core/parser.ts +127 -0
- package/src/core/tier-switcher.ts +607 -0
- package/src/core/types.ts +672 -0
- package/src/data/collection.ts +316 -0
- package/src/data/collections.ts +50 -0
- package/src/data/context.tsx +174 -0
- package/src/data/db.ts +127 -0
- package/src/data/hooks.ts +532 -0
- package/src/data/index.ts +138 -0
- package/src/data/reactive.ts +1225 -0
- package/src/data/saas-collections.ts +375 -0
- package/src/data/sync.ts +1213 -0
- package/src/data/types.ts +660 -0
- package/src/forms/converters.ts +512 -0
- package/src/forms/index.ts +133 -0
- package/src/forms/schemas.ts +403 -0
- package/src/forms/types.ts +476 -0
- package/src/index.ts +542 -0
- package/src/keyboard/focus.ts +748 -0
- package/src/keyboard/index.ts +96 -0
- package/src/keyboard/integration.ts +371 -0
- package/src/keyboard/manager.ts +377 -0
- package/src/keyboard/presets.ts +90 -0
- package/src/renderers/ansi-css.ts +576 -0
- package/src/renderers/ansi.ts +802 -0
- package/src/renderers/ascii.ts +680 -0
- package/src/renderers/breadcrumb.ts +480 -0
- package/src/renderers/command-palette.ts +802 -0
- package/src/renderers/components/field.ts +210 -0
- package/src/renderers/components/form.ts +327 -0
- package/src/renderers/components/index.ts +21 -0
- package/src/renderers/components/search.ts +449 -0
- package/src/renderers/components/select.ts +222 -0
- package/src/renderers/index.ts +101 -0
- package/src/renderers/interactive/component-handlers.ts +622 -0
- package/src/renderers/interactive/cursor-manager.ts +147 -0
- package/src/renderers/interactive/focus-manager.ts +279 -0
- package/src/renderers/interactive/index.ts +661 -0
- package/src/renderers/interactive/input-handler.ts +164 -0
- package/src/renderers/interactive/keyboard-handler.ts +212 -0
- package/src/renderers/interactive/mouse-handler.ts +167 -0
- package/src/renderers/interactive/state-manager.ts +109 -0
- package/src/renderers/interactive/types.ts +338 -0
- package/src/renderers/interactive-string.ts +299 -0
- package/src/renderers/interactive.ts +59 -0
- package/src/renderers/markdown.ts +950 -0
- package/src/renderers/sidebar.ts +549 -0
- package/src/renderers/tabs.ts +682 -0
- package/src/renderers/text.ts +791 -0
- package/src/renderers/unicode.ts +917 -0
- package/src/renderers/utils.ts +942 -0
- package/src/router/adapters.ts +383 -0
- package/src/router/types.ts +140 -0
- package/src/router/utils.ts +452 -0
- package/src/schemas.ts +205 -0
- package/src/storybook/index.ts +91 -0
- package/src/storybook/interactive-decorator.tsx +659 -0
- package/src/storybook/keyboard-simulator.ts +501 -0
- package/src/theme/ansi-codes.ts +80 -0
- package/src/theme/box-drawing.ts +132 -0
- package/src/theme/color-convert.ts +254 -0
- package/src/theme/color-support.ts +321 -0
- package/src/theme/index.ts +134 -0
- package/src/theme/strip-ansi.ts +50 -0
- package/src/theme/tailwind-map.ts +469 -0
- package/src/theme/text-styles.ts +206 -0
- package/src/theme/theme-system.ts +568 -0
- package/src/types.ts +103 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mdxui/terminal Interactive Renderer
|
|
3
|
+
*
|
|
4
|
+
* The Interactive renderer is the highest-capability tier providing:
|
|
5
|
+
* - Full TUI with keyboard navigation
|
|
6
|
+
* - Focus management and Tab cycling
|
|
7
|
+
* - Mouse click support
|
|
8
|
+
* - Cursor positioning
|
|
9
|
+
* - Real-time updates
|
|
10
|
+
* - Input field handling
|
|
11
|
+
* - Component state management
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Configuration options for creating an interactive renderer
|
|
17
|
+
*/
|
|
18
|
+
interface InteractiveRendererConfig {
|
|
19
|
+
/** Terminal width in columns */
|
|
20
|
+
width?: number;
|
|
21
|
+
/** Terminal height in rows */
|
|
22
|
+
height?: number;
|
|
23
|
+
/** Enable mouse support */
|
|
24
|
+
useMouse?: boolean;
|
|
25
|
+
/** Use alternate screen buffer */
|
|
26
|
+
useAlternateScreen?: boolean;
|
|
27
|
+
/** Wrap focus at boundaries */
|
|
28
|
+
wrapFocus?: boolean;
|
|
29
|
+
/** Enable vim-style key bindings */
|
|
30
|
+
vimBindings?: boolean;
|
|
31
|
+
/** Timeout for key sequences in ms */
|
|
32
|
+
sequenceTimeout?: number;
|
|
33
|
+
/** Target frames per second */
|
|
34
|
+
targetFps?: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Focusable element options
|
|
38
|
+
*/
|
|
39
|
+
interface FocusableOptions {
|
|
40
|
+
/** Tab order index */
|
|
41
|
+
tabIndex: number;
|
|
42
|
+
/** Focus group */
|
|
43
|
+
group?: string;
|
|
44
|
+
/** Callback when focused */
|
|
45
|
+
onFocus?: (event: {
|
|
46
|
+
id: string;
|
|
47
|
+
}) => void;
|
|
48
|
+
/** Callback when blurred */
|
|
49
|
+
onBlur?: (event: {
|
|
50
|
+
id: string;
|
|
51
|
+
}) => void;
|
|
52
|
+
/** Callback when activated */
|
|
53
|
+
onActivate?: (event: {
|
|
54
|
+
id: string;
|
|
55
|
+
}) => void;
|
|
56
|
+
/** Callback when toggled */
|
|
57
|
+
onToggle?: (event: {
|
|
58
|
+
id: string;
|
|
59
|
+
}) => void;
|
|
60
|
+
/** Whether element is disabled */
|
|
61
|
+
disabled?: boolean;
|
|
62
|
+
/** Column position for grid navigation */
|
|
63
|
+
column?: number;
|
|
64
|
+
/** Cursor position for input elements */
|
|
65
|
+
cursorPosition?: {
|
|
66
|
+
x: number;
|
|
67
|
+
y: number;
|
|
68
|
+
};
|
|
69
|
+
/** Whether to show cursor when focused */
|
|
70
|
+
showCursor?: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Clickable area options
|
|
74
|
+
*/
|
|
75
|
+
interface ClickableOptions {
|
|
76
|
+
/** X position */
|
|
77
|
+
x: number;
|
|
78
|
+
/** Y position */
|
|
79
|
+
y: number;
|
|
80
|
+
/** Width */
|
|
81
|
+
width: number;
|
|
82
|
+
/** Height */
|
|
83
|
+
height: number;
|
|
84
|
+
/** Z-index for layering */
|
|
85
|
+
zIndex?: number;
|
|
86
|
+
/** Whether clicking focuses the element */
|
|
87
|
+
focusable?: boolean;
|
|
88
|
+
/** Click handler */
|
|
89
|
+
onClick?: (event: {
|
|
90
|
+
x: number;
|
|
91
|
+
y: number;
|
|
92
|
+
id: string;
|
|
93
|
+
}) => void;
|
|
94
|
+
/** Double-click handler */
|
|
95
|
+
onDoubleClick?: () => void;
|
|
96
|
+
/** Right-click handler */
|
|
97
|
+
onRightClick?: () => void;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Input registration options
|
|
101
|
+
*/
|
|
102
|
+
interface InputOptions {
|
|
103
|
+
/** Current value */
|
|
104
|
+
value: string;
|
|
105
|
+
/** Placeholder text */
|
|
106
|
+
placeholder?: string;
|
|
107
|
+
/** Input mask */
|
|
108
|
+
mask?: string;
|
|
109
|
+
/** Maximum length */
|
|
110
|
+
maxLength?: number;
|
|
111
|
+
/** Validation function */
|
|
112
|
+
validate?: (value: string) => boolean;
|
|
113
|
+
/** Whether multiline */
|
|
114
|
+
multiline?: boolean;
|
|
115
|
+
/** Current cursor index */
|
|
116
|
+
cursorIndex?: number;
|
|
117
|
+
/** Change handler */
|
|
118
|
+
onChange?: (value: string) => void;
|
|
119
|
+
/** Submit handler */
|
|
120
|
+
onSubmit?: (value: string) => void;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Component registration options
|
|
124
|
+
*/
|
|
125
|
+
interface ComponentOptions {
|
|
126
|
+
/** Component type */
|
|
127
|
+
type: string;
|
|
128
|
+
/** Additional options */
|
|
129
|
+
[key: string]: unknown;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Interactive renderer interface
|
|
133
|
+
*/
|
|
134
|
+
interface InteractiveRenderer {
|
|
135
|
+
width: number;
|
|
136
|
+
height: number;
|
|
137
|
+
start(): void;
|
|
138
|
+
stop(): void;
|
|
139
|
+
destroy(): void;
|
|
140
|
+
requestRender(): void;
|
|
141
|
+
focusNext(): void;
|
|
142
|
+
focusPrev(): void;
|
|
143
|
+
focusById(id: string): void;
|
|
144
|
+
getFocusedId(): string | null;
|
|
145
|
+
getFocusableIds(): string[];
|
|
146
|
+
registerFocusable(id: string, options: FocusableOptions): void;
|
|
147
|
+
unregisterFocusable(id: string): void;
|
|
148
|
+
setActiveGroup(group: string): void;
|
|
149
|
+
pushFocusTrap(group: string): void;
|
|
150
|
+
popFocusTrap(): void;
|
|
151
|
+
onKeyPress(key: string, handler: () => boolean | void, options?: {
|
|
152
|
+
priority?: number;
|
|
153
|
+
}): void;
|
|
154
|
+
offKeyPress(key: string, handler: () => boolean | void): void;
|
|
155
|
+
emitKey(key: string): void;
|
|
156
|
+
onKeySequence(sequence: string, handler: () => void): void;
|
|
157
|
+
getPendingSequence(): string;
|
|
158
|
+
onSearchMode(handler: () => void): void;
|
|
159
|
+
onCancel(handler: () => void): void;
|
|
160
|
+
getMode(): string;
|
|
161
|
+
onClick(handler: (event: {
|
|
162
|
+
x: number;
|
|
163
|
+
y: number;
|
|
164
|
+
}) => void): void;
|
|
165
|
+
offClick(handler: (event: {
|
|
166
|
+
x: number;
|
|
167
|
+
y: number;
|
|
168
|
+
}) => void): void;
|
|
169
|
+
emitClick(x: number, y: number, options?: {
|
|
170
|
+
clickCount?: number;
|
|
171
|
+
button?: string;
|
|
172
|
+
}): void;
|
|
173
|
+
registerClickable(id: string, options: ClickableOptions): void;
|
|
174
|
+
unregisterClickable(id: string): void;
|
|
175
|
+
getClickableAreas(): Array<{
|
|
176
|
+
id: string;
|
|
177
|
+
} & ClickableOptions>;
|
|
178
|
+
onScroll(handler: (event: {
|
|
179
|
+
deltaY: number;
|
|
180
|
+
}) => void): void;
|
|
181
|
+
emitScroll(x: number, y: number, options: {
|
|
182
|
+
deltaY: number;
|
|
183
|
+
}): void;
|
|
184
|
+
setCursorPosition(x: number, y: number): void;
|
|
185
|
+
getCursorPosition(): {
|
|
186
|
+
x: number;
|
|
187
|
+
y: number;
|
|
188
|
+
};
|
|
189
|
+
showCursor(): void;
|
|
190
|
+
hideCursor(): void;
|
|
191
|
+
isCursorVisible(): boolean;
|
|
192
|
+
setCursorStyle(style: 'block' | 'underline' | 'bar'): void;
|
|
193
|
+
getCursorStyle(): string;
|
|
194
|
+
setCursorBlink(blink: boolean): void;
|
|
195
|
+
isCursorBlinking(): boolean;
|
|
196
|
+
updateCursorPosition(id: string, position: {
|
|
197
|
+
x: number;
|
|
198
|
+
y: number;
|
|
199
|
+
}): void;
|
|
200
|
+
setState(key: string, value: unknown): void;
|
|
201
|
+
getState(key: string): unknown;
|
|
202
|
+
subscribe(key: string, subscriber: (newValue: unknown, oldValue: unknown) => void): () => void;
|
|
203
|
+
onRender(handler: () => void): void;
|
|
204
|
+
getTargetFps(): number;
|
|
205
|
+
registerInput(id: string, options: InputOptions): void;
|
|
206
|
+
getInputCursorIndex(id: string): number;
|
|
207
|
+
registerComponent(id: string, options: ComponentOptions): void;
|
|
208
|
+
unregisterComponent(id: string): void;
|
|
209
|
+
getComponent(id: string): ComponentOptions | undefined;
|
|
210
|
+
updateComponent(id: string, updates: Partial<ComponentOptions>): void;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Creates an interactive renderer instance.
|
|
214
|
+
*/
|
|
215
|
+
declare function createInteractiveRenderer(config?: InteractiveRendererConfig): Promise<InteractiveRenderer>;
|
|
216
|
+
|
|
217
|
+
export { type ClickableOptions as C, type FocusableOptions as F, type InteractiveRenderer as I, type InteractiveRendererConfig as a, type InputOptions as b, createInteractiveRenderer as c, type ComponentOptions as d };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { h as ARROW_BINDINGS, A as ActionContext, c as ActionHandler, y as AttachKeyboardOptions, C as COMMON_BINDINGS, D as DetachKeyboard, E as EMACS_BINDINGS, r as FocusContext, k as FocusManagerState, x as FocusProvider, q as FocusProviderProps, F as FocusableElement, f as KEY, b as KeyBindings, K as KeyModifiers, a as KeyboardAction, e as KeyboardManager, d as KeyboardManagerOptions, N as NormalizedKey, O as OpenTUIKeyEvent, R as ReadlineKey, j as UseFocusOptions, U as UseKeyboardOptions, i as UseKeyboardResult, o as UseNavigableGridOptions, p as UseNavigableGridResult, l as UseNavigableListOptions, n as UseNavigableListResult, V as VIM_BINDINGS, G as attachKeyboardManager, g as createKeyboardManager, I as createOpenTUIKeyHandler, B as keyToBindingString, m as matchKey, H as normalizeOpenTUIKey, z as normalizeReadlineKey, s as useFocus, t as useFocusManager, u as useKeyboard, w as useNavigableGrid, v as useNavigableList } from '../index-CQRFZntR.js';
|
|
2
|
+
import 'react';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ARROW_BINDINGS,
|
|
3
|
+
COMMON_BINDINGS,
|
|
4
|
+
EMACS_BINDINGS,
|
|
5
|
+
FocusContext,
|
|
6
|
+
FocusProvider,
|
|
7
|
+
KEY,
|
|
8
|
+
VIM_BINDINGS,
|
|
9
|
+
attachKeyboardManager,
|
|
10
|
+
createKeyboardManager,
|
|
11
|
+
createOpenTUIKeyHandler,
|
|
12
|
+
keyToBindingString,
|
|
13
|
+
matchKey,
|
|
14
|
+
normalizeOpenTUIKey,
|
|
15
|
+
normalizeReadlineKey,
|
|
16
|
+
useFocus,
|
|
17
|
+
useFocusManager,
|
|
18
|
+
useKeyboard,
|
|
19
|
+
useNavigableGrid,
|
|
20
|
+
useNavigableList
|
|
21
|
+
} from "../chunk-GBQ6UD6I.js";
|
|
22
|
+
import "../chunk-3RG5ZIWI.js";
|
|
23
|
+
export {
|
|
24
|
+
ARROW_BINDINGS,
|
|
25
|
+
COMMON_BINDINGS,
|
|
26
|
+
EMACS_BINDINGS,
|
|
27
|
+
FocusContext,
|
|
28
|
+
FocusProvider,
|
|
29
|
+
KEY,
|
|
30
|
+
VIM_BINDINGS,
|
|
31
|
+
attachKeyboardManager,
|
|
32
|
+
createKeyboardManager,
|
|
33
|
+
createOpenTUIKeyHandler,
|
|
34
|
+
keyToBindingString,
|
|
35
|
+
matchKey,
|
|
36
|
+
normalizeOpenTUIKey,
|
|
37
|
+
normalizeReadlineKey,
|
|
38
|
+
useFocus,
|
|
39
|
+
useFocusManager,
|
|
40
|
+
useKeyboard,
|
|
41
|
+
useNavigableGrid,
|
|
42
|
+
useNavigableList
|
|
43
|
+
};
|