@hanzogui/tabs-headless 8.3.0 → 8.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/useTabs.js +250 -0
- package/dist/cjs/useTabs.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/useTabs.js +242 -0
- package/dist/esm/useTabs.js.map +1 -0
- package/package.json +16 -16
- package/src/index.ts +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/useTabs.d.ts +8 -8
- package/types/useTabs.d.ts.map +1 -1
- package/dist/cjs/index.cjs +0 -20
- package/dist/cjs/index.native.js +0 -23
- package/dist/cjs/index.native.js.map +0 -1
- package/dist/cjs/useTabs.cjs +0 -305
- package/dist/cjs/useTabs.native.js +0 -320
- package/dist/cjs/useTabs.native.js.map +0 -1
- package/dist/esm/index.mjs +0 -2
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/index.native.js +0 -2
- package/dist/esm/index.native.js.map +0 -1
- package/dist/esm/useTabs.mjs +0 -265
- package/dist/esm/useTabs.mjs.map +0 -1
- package/dist/esm/useTabs.native.js +0 -277
- package/dist/esm/useTabs.native.js.map +0 -1
- package/dist/jsx/index.js +0 -2
- package/dist/jsx/index.js.map +0 -1
- package/dist/jsx/index.mjs +0 -2
- package/dist/jsx/index.mjs.map +0 -1
- package/dist/jsx/index.native.js +0 -23
- package/dist/jsx/index.native.js.map +0 -1
- package/dist/jsx/useTabs.mjs +0 -265
- package/dist/jsx/useTabs.mjs.map +0 -1
- package/dist/jsx/useTabs.native.js +0 -320
- package/dist/jsx/useTabs.native.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "type": "commonjs" }
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TabsProvider = void 0;
|
|
4
|
+
exports.useTabs = useTabs;
|
|
5
|
+
exports.useTabsContext = useTabsContext;
|
|
6
|
+
exports.useTab = useTab;
|
|
7
|
+
exports.useTabContent = useTabContent;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const helpers_1 = require("@hanzogui/helpers");
|
|
10
|
+
const use_controllable_state_1 = require("@hanzogui/use-controllable-state");
|
|
11
|
+
const use_direction_1 = require("@hanzogui/use-direction");
|
|
12
|
+
const React = tslib_1.__importStar(require("react"));
|
|
13
|
+
const react_1 = require("react");
|
|
14
|
+
function useTabs(props = {}) {
|
|
15
|
+
const { value: valueProp, onValueChange, defaultValue = '', orientation = 'horizontal', dir, activationMode = 'automatic', loop = true, } = props;
|
|
16
|
+
const direction = (0, use_direction_1.useDirection)(dir);
|
|
17
|
+
const baseId = (0, react_1.useId)();
|
|
18
|
+
const [value, setValue] = (0, use_controllable_state_1.useControllableState)({
|
|
19
|
+
prop: valueProp,
|
|
20
|
+
onChange: onValueChange,
|
|
21
|
+
defaultProp: defaultValue,
|
|
22
|
+
});
|
|
23
|
+
const tabRefs = (0, react_1.useRef)(new Map());
|
|
24
|
+
const [tabValues, setTabValues] = (0, react_1.useState)([]);
|
|
25
|
+
const registerTab = (0, react_1.useCallback)((tabValue, element) => {
|
|
26
|
+
if (element) {
|
|
27
|
+
tabRefs.current.set(tabValue, element);
|
|
28
|
+
setTabValues((prev) => (prev.includes(tabValue) ? prev : [...prev, tabValue]));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
tabRefs.current.delete(tabValue);
|
|
32
|
+
setTabValues((prev) => prev.filter((v) => v !== tabValue));
|
|
33
|
+
}
|
|
34
|
+
}, []);
|
|
35
|
+
const focusTab = (0, react_1.useCallback)((tabValue) => {
|
|
36
|
+
const element = tabRefs.current.get(tabValue);
|
|
37
|
+
element?.focus();
|
|
38
|
+
}, []);
|
|
39
|
+
const getNextTab = (0, react_1.useCallback)((currentValue, direction) => {
|
|
40
|
+
const currentIndex = tabValues.indexOf(currentValue);
|
|
41
|
+
if (currentIndex === -1)
|
|
42
|
+
return null;
|
|
43
|
+
let nextIndex = currentIndex + direction;
|
|
44
|
+
if (loop) {
|
|
45
|
+
nextIndex = (nextIndex + tabValues.length) % tabValues.length;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
if (nextIndex < 0 || nextIndex >= tabValues.length)
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return tabValues[nextIndex] ?? null;
|
|
52
|
+
}, [tabValues, loop]);
|
|
53
|
+
const handleKeyDown = (0, react_1.useCallback)((tabValue) => (event) => {
|
|
54
|
+
const isHorizontal = orientation === 'horizontal';
|
|
55
|
+
const isRtl = direction === 'rtl';
|
|
56
|
+
let nextTab = null;
|
|
57
|
+
switch (event.key) {
|
|
58
|
+
case 'ArrowRight':
|
|
59
|
+
if (isHorizontal) {
|
|
60
|
+
nextTab = getNextTab(tabValue, isRtl ? -1 : 1);
|
|
61
|
+
}
|
|
62
|
+
break;
|
|
63
|
+
case 'ArrowLeft':
|
|
64
|
+
if (isHorizontal) {
|
|
65
|
+
nextTab = getNextTab(tabValue, isRtl ? 1 : -1);
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
case 'ArrowDown':
|
|
69
|
+
if (!isHorizontal) {
|
|
70
|
+
nextTab = getNextTab(tabValue, 1);
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
case 'ArrowUp':
|
|
74
|
+
if (!isHorizontal) {
|
|
75
|
+
nextTab = getNextTab(tabValue, -1);
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
case 'Home':
|
|
79
|
+
nextTab = tabValues[0] ?? null;
|
|
80
|
+
break;
|
|
81
|
+
case 'End':
|
|
82
|
+
nextTab = tabValues[tabValues.length - 1] ?? null;
|
|
83
|
+
break;
|
|
84
|
+
case ' ':
|
|
85
|
+
case 'Enter':
|
|
86
|
+
if (activationMode === 'manual') {
|
|
87
|
+
setValue(tabValue);
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (nextTab) {
|
|
93
|
+
event.preventDefault();
|
|
94
|
+
focusTab(nextTab);
|
|
95
|
+
if (activationMode === 'automatic') {
|
|
96
|
+
setValue(nextTab);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}, [orientation, direction, getNextTab, tabValues, activationMode, setValue, focusTab]);
|
|
100
|
+
const getTabProps = (0, react_1.useCallback)((tabValue, disabled) => {
|
|
101
|
+
const isSelected = value === tabValue;
|
|
102
|
+
const triggerId = makeTriggerId(baseId, tabValue);
|
|
103
|
+
const contentId = makeContentId(baseId, tabValue);
|
|
104
|
+
return {
|
|
105
|
+
role: 'tab',
|
|
106
|
+
id: triggerId,
|
|
107
|
+
'aria-selected': isSelected,
|
|
108
|
+
'aria-controls': contentId,
|
|
109
|
+
'data-state': isSelected ? 'active' : 'inactive',
|
|
110
|
+
...(disabled && { 'data-disabled': '' }),
|
|
111
|
+
disabled,
|
|
112
|
+
tabIndex: isSelected ? 0 : -1,
|
|
113
|
+
onKeyDown: disabled ? () => { } : handleKeyDown(tabValue),
|
|
114
|
+
onClick: (event) => {
|
|
115
|
+
if (!disabled && !isSelected) {
|
|
116
|
+
setValue(tabValue);
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
onFocus: (event) => {
|
|
120
|
+
registerTab(tabValue, event.currentTarget);
|
|
121
|
+
if (!disabled && !isSelected && activationMode === 'automatic') {
|
|
122
|
+
setValue(tabValue);
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}, [value, baseId, handleKeyDown, setValue, activationMode, registerTab]);
|
|
127
|
+
const getContentProps = (0, react_1.useCallback)((tabValue) => {
|
|
128
|
+
const isSelected = value === tabValue;
|
|
129
|
+
const triggerId = makeTriggerId(baseId, tabValue);
|
|
130
|
+
const contentId = makeContentId(baseId, tabValue);
|
|
131
|
+
return {
|
|
132
|
+
role: 'tabpanel',
|
|
133
|
+
id: contentId,
|
|
134
|
+
'aria-labelledby': triggerId,
|
|
135
|
+
'data-state': isSelected ? 'active' : 'inactive',
|
|
136
|
+
'data-orientation': orientation,
|
|
137
|
+
hidden: !isSelected,
|
|
138
|
+
tabIndex: 0,
|
|
139
|
+
};
|
|
140
|
+
}, [value, baseId, orientation]);
|
|
141
|
+
const contextValue = {
|
|
142
|
+
baseId,
|
|
143
|
+
value,
|
|
144
|
+
setValue,
|
|
145
|
+
orientation,
|
|
146
|
+
direction,
|
|
147
|
+
activationMode,
|
|
148
|
+
loop,
|
|
149
|
+
};
|
|
150
|
+
return {
|
|
151
|
+
value,
|
|
152
|
+
setValue,
|
|
153
|
+
direction,
|
|
154
|
+
tabsProps: {
|
|
155
|
+
'data-orientation': orientation,
|
|
156
|
+
dir: direction,
|
|
157
|
+
},
|
|
158
|
+
listProps: {
|
|
159
|
+
role: 'tablist',
|
|
160
|
+
'aria-orientation': orientation,
|
|
161
|
+
},
|
|
162
|
+
getTabProps,
|
|
163
|
+
getContentProps,
|
|
164
|
+
contextValue,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// -------------------------------------------------------------------------------------------------
|
|
168
|
+
// useTabsContext - for component-based APIs
|
|
169
|
+
// -------------------------------------------------------------------------------------------------
|
|
170
|
+
const TabsContext = React.createContext(null);
|
|
171
|
+
exports.TabsProvider = TabsContext.Provider;
|
|
172
|
+
function useTabsContext() {
|
|
173
|
+
const context = React.useContext(TabsContext);
|
|
174
|
+
if (!context) {
|
|
175
|
+
throw new Error('useTabsContext must be used within a TabsProvider');
|
|
176
|
+
}
|
|
177
|
+
return context;
|
|
178
|
+
}
|
|
179
|
+
function useTab(props) {
|
|
180
|
+
const { value: tabValue, disabled, onPress, onKeyDown, onFocus } = props;
|
|
181
|
+
const context = useTabsContext();
|
|
182
|
+
const { value, setValue, baseId, activationMode, orientation, direction, loop } = context;
|
|
183
|
+
const isSelected = value === tabValue;
|
|
184
|
+
const triggerId = makeTriggerId(baseId, tabValue);
|
|
185
|
+
const contentId = makeContentId(baseId, tabValue);
|
|
186
|
+
const ref = (0, react_1.useRef)(null);
|
|
187
|
+
return {
|
|
188
|
+
isSelected,
|
|
189
|
+
tabProps: {
|
|
190
|
+
ref,
|
|
191
|
+
role: 'tab',
|
|
192
|
+
id: triggerId,
|
|
193
|
+
'aria-selected': isSelected,
|
|
194
|
+
'aria-controls': contentId,
|
|
195
|
+
'data-state': isSelected ? 'active' : 'inactive',
|
|
196
|
+
...(disabled && { 'data-disabled': '' }),
|
|
197
|
+
disabled,
|
|
198
|
+
tabIndex: isSelected ? 0 : -1,
|
|
199
|
+
onKeyDown: (0, helpers_1.composeEventHandlers)(onKeyDown, (event) => {
|
|
200
|
+
if (disabled)
|
|
201
|
+
return;
|
|
202
|
+
if ([' ', 'Enter'].includes(event.key)) {
|
|
203
|
+
setValue(tabValue);
|
|
204
|
+
event.preventDefault();
|
|
205
|
+
}
|
|
206
|
+
}),
|
|
207
|
+
onPress: (0, helpers_1.composeEventHandlers)(onPress, () => {
|
|
208
|
+
if (!disabled && !isSelected) {
|
|
209
|
+
setValue(tabValue);
|
|
210
|
+
}
|
|
211
|
+
}),
|
|
212
|
+
onFocus: (0, helpers_1.composeEventHandlers)(onFocus, () => {
|
|
213
|
+
if (!disabled && !isSelected && activationMode === 'automatic') {
|
|
214
|
+
setValue(tabValue);
|
|
215
|
+
}
|
|
216
|
+
}),
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
function useTabContent(props) {
|
|
221
|
+
const { value: tabValue, forceMount } = props;
|
|
222
|
+
const context = useTabsContext();
|
|
223
|
+
const { value, baseId, orientation } = context;
|
|
224
|
+
const isSelected = value === tabValue;
|
|
225
|
+
const triggerId = makeTriggerId(baseId, tabValue);
|
|
226
|
+
const contentId = makeContentId(baseId, tabValue);
|
|
227
|
+
return {
|
|
228
|
+
isSelected,
|
|
229
|
+
shouldMount: forceMount || isSelected,
|
|
230
|
+
contentProps: {
|
|
231
|
+
role: 'tabpanel',
|
|
232
|
+
id: contentId,
|
|
233
|
+
'aria-labelledby': triggerId,
|
|
234
|
+
'data-state': isSelected ? 'active' : 'inactive',
|
|
235
|
+
'data-orientation': orientation,
|
|
236
|
+
hidden: !isSelected,
|
|
237
|
+
tabIndex: 0,
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
// -------------------------------------------------------------------------------------------------
|
|
242
|
+
// Helpers
|
|
243
|
+
// -------------------------------------------------------------------------------------------------
|
|
244
|
+
function makeTriggerId(baseId, value) {
|
|
245
|
+
return `${baseId}-trigger-${value}`;
|
|
246
|
+
}
|
|
247
|
+
function makeContentId(baseId, value) {
|
|
248
|
+
return `${baseId}-content-${value}`;
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=useTabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTabs.js","sourceRoot":"","sources":["../../src/useTabs.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
export * from './useTabs.js';
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAe,CAAA"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { composeEventHandlers } from '@hanzogui/helpers';
|
|
2
|
+
import { useControllableState } from '@hanzogui/use-controllable-state';
|
|
3
|
+
import { useDirection } from '@hanzogui/use-direction';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { useCallback, useId, useRef, useState } from 'react';
|
|
6
|
+
export function useTabs(props = {}) {
|
|
7
|
+
const { value: valueProp, onValueChange, defaultValue = '', orientation = 'horizontal', dir, activationMode = 'automatic', loop = true, } = props;
|
|
8
|
+
const direction = useDirection(dir);
|
|
9
|
+
const baseId = useId();
|
|
10
|
+
const [value, setValue] = useControllableState({
|
|
11
|
+
prop: valueProp,
|
|
12
|
+
onChange: onValueChange,
|
|
13
|
+
defaultProp: defaultValue,
|
|
14
|
+
});
|
|
15
|
+
const tabRefs = useRef(new Map());
|
|
16
|
+
const [tabValues, setTabValues] = useState([]);
|
|
17
|
+
const registerTab = useCallback((tabValue, element) => {
|
|
18
|
+
if (element) {
|
|
19
|
+
tabRefs.current.set(tabValue, element);
|
|
20
|
+
setTabValues((prev) => (prev.includes(tabValue) ? prev : [...prev, tabValue]));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
tabRefs.current.delete(tabValue);
|
|
24
|
+
setTabValues((prev) => prev.filter((v) => v !== tabValue));
|
|
25
|
+
}
|
|
26
|
+
}, []);
|
|
27
|
+
const focusTab = useCallback((tabValue) => {
|
|
28
|
+
const element = tabRefs.current.get(tabValue);
|
|
29
|
+
element?.focus();
|
|
30
|
+
}, []);
|
|
31
|
+
const getNextTab = useCallback((currentValue, direction) => {
|
|
32
|
+
const currentIndex = tabValues.indexOf(currentValue);
|
|
33
|
+
if (currentIndex === -1)
|
|
34
|
+
return null;
|
|
35
|
+
let nextIndex = currentIndex + direction;
|
|
36
|
+
if (loop) {
|
|
37
|
+
nextIndex = (nextIndex + tabValues.length) % tabValues.length;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
if (nextIndex < 0 || nextIndex >= tabValues.length)
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
return tabValues[nextIndex] ?? null;
|
|
44
|
+
}, [tabValues, loop]);
|
|
45
|
+
const handleKeyDown = useCallback((tabValue) => (event) => {
|
|
46
|
+
const isHorizontal = orientation === 'horizontal';
|
|
47
|
+
const isRtl = direction === 'rtl';
|
|
48
|
+
let nextTab = null;
|
|
49
|
+
switch (event.key) {
|
|
50
|
+
case 'ArrowRight':
|
|
51
|
+
if (isHorizontal) {
|
|
52
|
+
nextTab = getNextTab(tabValue, isRtl ? -1 : 1);
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case 'ArrowLeft':
|
|
56
|
+
if (isHorizontal) {
|
|
57
|
+
nextTab = getNextTab(tabValue, isRtl ? 1 : -1);
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
case 'ArrowDown':
|
|
61
|
+
if (!isHorizontal) {
|
|
62
|
+
nextTab = getNextTab(tabValue, 1);
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
case 'ArrowUp':
|
|
66
|
+
if (!isHorizontal) {
|
|
67
|
+
nextTab = getNextTab(tabValue, -1);
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case 'Home':
|
|
71
|
+
nextTab = tabValues[0] ?? null;
|
|
72
|
+
break;
|
|
73
|
+
case 'End':
|
|
74
|
+
nextTab = tabValues[tabValues.length - 1] ?? null;
|
|
75
|
+
break;
|
|
76
|
+
case ' ':
|
|
77
|
+
case 'Enter':
|
|
78
|
+
if (activationMode === 'manual') {
|
|
79
|
+
setValue(tabValue);
|
|
80
|
+
event.preventDefault();
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (nextTab) {
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
focusTab(nextTab);
|
|
87
|
+
if (activationMode === 'automatic') {
|
|
88
|
+
setValue(nextTab);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}, [orientation, direction, getNextTab, tabValues, activationMode, setValue, focusTab]);
|
|
92
|
+
const getTabProps = useCallback((tabValue, disabled) => {
|
|
93
|
+
const isSelected = value === tabValue;
|
|
94
|
+
const triggerId = makeTriggerId(baseId, tabValue);
|
|
95
|
+
const contentId = makeContentId(baseId, tabValue);
|
|
96
|
+
return {
|
|
97
|
+
role: 'tab',
|
|
98
|
+
id: triggerId,
|
|
99
|
+
'aria-selected': isSelected,
|
|
100
|
+
'aria-controls': contentId,
|
|
101
|
+
'data-state': isSelected ? 'active' : 'inactive',
|
|
102
|
+
...(disabled && { 'data-disabled': '' }),
|
|
103
|
+
disabled,
|
|
104
|
+
tabIndex: isSelected ? 0 : -1,
|
|
105
|
+
onKeyDown: disabled ? () => { } : handleKeyDown(tabValue),
|
|
106
|
+
onClick: (event) => {
|
|
107
|
+
if (!disabled && !isSelected) {
|
|
108
|
+
setValue(tabValue);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
onFocus: (event) => {
|
|
112
|
+
registerTab(tabValue, event.currentTarget);
|
|
113
|
+
if (!disabled && !isSelected && activationMode === 'automatic') {
|
|
114
|
+
setValue(tabValue);
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}, [value, baseId, handleKeyDown, setValue, activationMode, registerTab]);
|
|
119
|
+
const getContentProps = useCallback((tabValue) => {
|
|
120
|
+
const isSelected = value === tabValue;
|
|
121
|
+
const triggerId = makeTriggerId(baseId, tabValue);
|
|
122
|
+
const contentId = makeContentId(baseId, tabValue);
|
|
123
|
+
return {
|
|
124
|
+
role: 'tabpanel',
|
|
125
|
+
id: contentId,
|
|
126
|
+
'aria-labelledby': triggerId,
|
|
127
|
+
'data-state': isSelected ? 'active' : 'inactive',
|
|
128
|
+
'data-orientation': orientation,
|
|
129
|
+
hidden: !isSelected,
|
|
130
|
+
tabIndex: 0,
|
|
131
|
+
};
|
|
132
|
+
}, [value, baseId, orientation]);
|
|
133
|
+
const contextValue = {
|
|
134
|
+
baseId,
|
|
135
|
+
value,
|
|
136
|
+
setValue,
|
|
137
|
+
orientation,
|
|
138
|
+
direction,
|
|
139
|
+
activationMode,
|
|
140
|
+
loop,
|
|
141
|
+
};
|
|
142
|
+
return {
|
|
143
|
+
value,
|
|
144
|
+
setValue,
|
|
145
|
+
direction,
|
|
146
|
+
tabsProps: {
|
|
147
|
+
'data-orientation': orientation,
|
|
148
|
+
dir: direction,
|
|
149
|
+
},
|
|
150
|
+
listProps: {
|
|
151
|
+
role: 'tablist',
|
|
152
|
+
'aria-orientation': orientation,
|
|
153
|
+
},
|
|
154
|
+
getTabProps,
|
|
155
|
+
getContentProps,
|
|
156
|
+
contextValue,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// -------------------------------------------------------------------------------------------------
|
|
160
|
+
// useTabsContext - for component-based APIs
|
|
161
|
+
// -------------------------------------------------------------------------------------------------
|
|
162
|
+
const TabsContext = React.createContext(null);
|
|
163
|
+
export const TabsProvider = TabsContext.Provider;
|
|
164
|
+
export function useTabsContext() {
|
|
165
|
+
const context = React.useContext(TabsContext);
|
|
166
|
+
if (!context) {
|
|
167
|
+
throw new Error('useTabsContext must be used within a TabsProvider');
|
|
168
|
+
}
|
|
169
|
+
return context;
|
|
170
|
+
}
|
|
171
|
+
export function useTab(props) {
|
|
172
|
+
const { value: tabValue, disabled, onPress, onKeyDown, onFocus } = props;
|
|
173
|
+
const context = useTabsContext();
|
|
174
|
+
const { value, setValue, baseId, activationMode, orientation, direction, loop } = context;
|
|
175
|
+
const isSelected = value === tabValue;
|
|
176
|
+
const triggerId = makeTriggerId(baseId, tabValue);
|
|
177
|
+
const contentId = makeContentId(baseId, tabValue);
|
|
178
|
+
const ref = useRef(null);
|
|
179
|
+
return {
|
|
180
|
+
isSelected,
|
|
181
|
+
tabProps: {
|
|
182
|
+
ref,
|
|
183
|
+
role: 'tab',
|
|
184
|
+
id: triggerId,
|
|
185
|
+
'aria-selected': isSelected,
|
|
186
|
+
'aria-controls': contentId,
|
|
187
|
+
'data-state': isSelected ? 'active' : 'inactive',
|
|
188
|
+
...(disabled && { 'data-disabled': '' }),
|
|
189
|
+
disabled,
|
|
190
|
+
tabIndex: isSelected ? 0 : -1,
|
|
191
|
+
onKeyDown: composeEventHandlers(onKeyDown, (event) => {
|
|
192
|
+
if (disabled)
|
|
193
|
+
return;
|
|
194
|
+
if ([' ', 'Enter'].includes(event.key)) {
|
|
195
|
+
setValue(tabValue);
|
|
196
|
+
event.preventDefault();
|
|
197
|
+
}
|
|
198
|
+
}),
|
|
199
|
+
onPress: composeEventHandlers(onPress, () => {
|
|
200
|
+
if (!disabled && !isSelected) {
|
|
201
|
+
setValue(tabValue);
|
|
202
|
+
}
|
|
203
|
+
}),
|
|
204
|
+
onFocus: composeEventHandlers(onFocus, () => {
|
|
205
|
+
if (!disabled && !isSelected && activationMode === 'automatic') {
|
|
206
|
+
setValue(tabValue);
|
|
207
|
+
}
|
|
208
|
+
}),
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
export function useTabContent(props) {
|
|
213
|
+
const { value: tabValue, forceMount } = props;
|
|
214
|
+
const context = useTabsContext();
|
|
215
|
+
const { value, baseId, orientation } = context;
|
|
216
|
+
const isSelected = value === tabValue;
|
|
217
|
+
const triggerId = makeTriggerId(baseId, tabValue);
|
|
218
|
+
const contentId = makeContentId(baseId, tabValue);
|
|
219
|
+
return {
|
|
220
|
+
isSelected,
|
|
221
|
+
shouldMount: forceMount || isSelected,
|
|
222
|
+
contentProps: {
|
|
223
|
+
role: 'tabpanel',
|
|
224
|
+
id: contentId,
|
|
225
|
+
'aria-labelledby': triggerId,
|
|
226
|
+
'data-state': isSelected ? 'active' : 'inactive',
|
|
227
|
+
'data-orientation': orientation,
|
|
228
|
+
hidden: !isSelected,
|
|
229
|
+
tabIndex: 0,
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
// -------------------------------------------------------------------------------------------------
|
|
234
|
+
// Helpers
|
|
235
|
+
// -------------------------------------------------------------------------------------------------
|
|
236
|
+
function makeTriggerId(baseId, value) {
|
|
237
|
+
return `${baseId}-trigger-${value}`;
|
|
238
|
+
}
|
|
239
|
+
function makeContentId(baseId, value) {
|
|
240
|
+
return `${baseId}-content-${value}`;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=useTabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTabs.js","sourceRoot":"","sources":["../../src/useTabs.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanzogui/tabs-headless",
|
|
3
|
-
"version": "8.3.
|
|
3
|
+
"version": "8.3.2",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"files": [
|
|
6
6
|
"src",
|
|
@@ -9,41 +9,41 @@
|
|
|
9
9
|
],
|
|
10
10
|
"type": "module",
|
|
11
11
|
"sideEffects": false,
|
|
12
|
-
"main": "dist/cjs",
|
|
13
|
-
"module": "dist/esm",
|
|
12
|
+
"main": "./dist/cjs/index.js",
|
|
13
|
+
"module": "./dist/esm/index.js",
|
|
14
14
|
"types": "./types/index.d.ts",
|
|
15
15
|
"exports": {
|
|
16
16
|
"./package.json": "./package.json",
|
|
17
17
|
".": {
|
|
18
18
|
"types": "./types/index.d.ts",
|
|
19
|
-
"react-native": "./dist/esm/index.
|
|
20
|
-
"browser": "./dist/esm/index.
|
|
21
|
-
"module": "./dist/esm/index.
|
|
22
|
-
"import": "./dist/esm/index.
|
|
23
|
-
"require": "./dist/cjs/index.
|
|
24
|
-
"default": "./dist/esm/index.
|
|
19
|
+
"react-native": "./dist/esm/index.js",
|
|
20
|
+
"browser": "./dist/esm/index.js",
|
|
21
|
+
"module": "./dist/esm/index.js",
|
|
22
|
+
"import": "./dist/esm/index.js",
|
|
23
|
+
"require": "./dist/cjs/index.js",
|
|
24
|
+
"default": "./dist/esm/index.js"
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"publishConfig": {
|
|
28
28
|
"access": "public"
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
|
-
"build": "hanzogui-build",
|
|
31
|
+
"build": "hanzogui-build --skip-native",
|
|
32
32
|
"watch": "hanzogui-build --watch",
|
|
33
33
|
"clean": "hanzogui-build clean",
|
|
34
34
|
"clean:build": "hanzogui-build clean:build"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@hanzogui/helpers": "8.3.
|
|
38
|
-
"@hanzogui/use-controllable-state": "8.3.
|
|
39
|
-
"@hanzogui/use-direction": "8.3.
|
|
37
|
+
"@hanzogui/helpers": "8.3.2",
|
|
38
|
+
"@hanzogui/use-controllable-state": "8.3.2",
|
|
39
|
+
"@hanzogui/use-direction": "8.3.2"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@hanzogui/build": "8.3.
|
|
43
|
-
"react": "
|
|
42
|
+
"@hanzogui/build": "8.3.2",
|
|
43
|
+
"react": "19.2.8"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
|
-
"react": ">=19"
|
|
46
|
+
"react": ">=19.2.8"
|
|
47
47
|
},
|
|
48
48
|
"module:jsx": "dist/jsx",
|
|
49
49
|
"repository": {
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './useTabs'
|
|
1
|
+
export * from './useTabs.tsx'
|
package/types/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './useTabs';
|
|
1
|
+
export * from './useTabs.tsx';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
|
package/types/useTabs.d.ts
CHANGED
|
@@ -98,18 +98,18 @@ export interface UseTabProps {
|
|
|
98
98
|
export declare function useTab(props: UseTabProps): {
|
|
99
99
|
isSelected: boolean;
|
|
100
100
|
tabProps: {
|
|
101
|
-
disabled: boolean | undefined;
|
|
102
|
-
tabIndex: number;
|
|
103
|
-
onKeyDown: import("@hanzogui/helpers").EventHandler<React.KeyboardEvent<Element>> | undefined;
|
|
104
|
-
onPress: import("@hanzogui/helpers").EventHandler<any> | undefined;
|
|
105
|
-
onFocus: import("@hanzogui/helpers").EventHandler<React.FocusEvent<Element, Element>> | undefined;
|
|
106
|
-
'data-disabled'?: "" | undefined;
|
|
107
101
|
ref: React.RefObject<HTMLElement | null>;
|
|
108
|
-
role:
|
|
102
|
+
role: 'tab';
|
|
109
103
|
id: string;
|
|
110
104
|
'aria-selected': boolean;
|
|
111
105
|
'aria-controls': string;
|
|
112
106
|
'data-state': string;
|
|
107
|
+
'data-disabled'?: "" | undefined;
|
|
108
|
+
disabled: boolean | undefined;
|
|
109
|
+
tabIndex: number;
|
|
110
|
+
onKeyDown: import("@hanzogui/helpers").EventHandler<React.KeyboardEvent<Element>> | undefined;
|
|
111
|
+
onPress: import("@hanzogui/helpers").EventHandler<any> | undefined;
|
|
112
|
+
onFocus: import("@hanzogui/helpers").EventHandler<React.FocusEvent<Element, Element>> | undefined;
|
|
113
113
|
};
|
|
114
114
|
};
|
|
115
115
|
export interface UseTabContentProps {
|
|
@@ -120,7 +120,7 @@ export declare function useTabContent(props: UseTabContentProps): {
|
|
|
120
120
|
isSelected: boolean;
|
|
121
121
|
shouldMount: boolean;
|
|
122
122
|
contentProps: {
|
|
123
|
-
role:
|
|
123
|
+
role: 'tabpanel';
|
|
124
124
|
id: string;
|
|
125
125
|
'aria-labelledby': string;
|
|
126
126
|
'data-state': string;
|