@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.
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./useTabs.js"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -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 "./useTabs.mjs";
2
- //# sourceMappingURL=index.js.map
1
+ export * from './useTabs.js';
2
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc","ignoreList":[]}
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.0",
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.native.js",
20
- "browser": "./dist/esm/index.mjs",
21
- "module": "./dist/esm/index.mjs",
22
- "import": "./dist/esm/index.mjs",
23
- "require": "./dist/cjs/index.cjs",
24
- "default": "./dist/esm/index.mjs"
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.0",
38
- "@hanzogui/use-controllable-state": "8.3.0",
39
- "@hanzogui/use-direction": "8.3.0"
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.0",
43
- "react": ">=19"
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
@@ -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: "tab";
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: "tabpanel";
123
+ role: 'tabpanel';
124
124
  id: string;
125
125
  'aria-labelledby': string;
126
126
  'data-state': string;