@react-spectrum/tabs 3.8.29 → 3.9.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/dist/Tabs.mjs DELETED
@@ -1,395 +0,0 @@
1
- import "./tabs.a87f78a9.css";
2
- import $14nVg$tabs_vars_cssmodulejs from "./tabs_vars_css.mjs";
3
- import {useDOMRef as $14nVg$useDOMRef, useStyleProps as $14nVg$useStyleProps, classNames as $14nVg$classNames, SlotProvider as $14nVg$SlotProvider, unwrapDOMRef as $14nVg$unwrapDOMRef} from "@react-spectrum/utils";
4
- import {useLayoutEffect as $14nVg$useLayoutEffect, useResizeObserver as $14nVg$useResizeObserver, useId as $14nVg$useId, filterDOMProps as $14nVg$filterDOMProps, mergeProps as $14nVg$mergeProps} from "@react-aria/utils";
5
- import {FocusRing as $14nVg$FocusRing} from "@react-aria/focus";
6
- import {Picker as $14nVg$Picker, Item as $14nVg$Item} from "@react-spectrum/picker";
7
- import {ListCollection as $14nVg$ListCollection} from "@react-stately/list";
8
- import $14nVg$react, {useRef as $14nVg$useRef, useState as $14nVg$useState, useEffect as $14nVg$useEffect, useCallback as $14nVg$useCallback, useContext as $14nVg$useContext} from "react";
9
- import {useTabListState as $14nVg$useTabListState} from "@react-stately/tabs";
10
- import {Text as $14nVg$Text} from "@react-spectrum/text";
11
- import {useCollection as $14nVg$useCollection} from "@react-stately/collections";
12
- import {useHover as $14nVg$useHover} from "@react-aria/interactions";
13
- import {useLocale as $14nVg$useLocale} from "@react-aria/i18n";
14
- import {useProviderProps as $14nVg$useProviderProps, useProvider as $14nVg$useProvider} from "@react-spectrum/provider";
15
- import {useTab as $14nVg$useTab, useTabList as $14nVg$useTabList, useTabPanel as $14nVg$useTabPanel} from "@react-aria/tabs";
16
-
17
-
18
- function $parcel$interopDefault(a) {
19
- return a && a.__esModule ? a.default : a;
20
- }
21
- /*
22
- * Copyright 2020 Adobe. All rights reserved.
23
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
24
- * you may not use this file except in compliance with the License. You may obtain a copy
25
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
26
- *
27
- * Unless required by applicable law or agreed to in writing, software distributed under
28
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
29
- * OF ANY KIND, either express or implied. See the License for the specific language
30
- * governing permissions and limitations under the License.
31
- */
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
- const $65ab70ddbed1564b$var$TabContext = /*#__PURE__*/ (0, $14nVg$react).createContext(null);
46
- const $65ab70ddbed1564b$export$b2539bed5023c21c = /*#__PURE__*/ (0, $14nVg$react).forwardRef(function Tabs(props, ref) {
47
- props = (0, $14nVg$useProviderProps)(props);
48
- let { orientation: orientation = 'horizontal', density: density = 'regular', children: children, ...otherProps } = props;
49
- let domRef = (0, $14nVg$useDOMRef)(ref);
50
- let tablistRef = (0, $14nVg$useRef)(null);
51
- let wrapperRef = (0, $14nVg$useRef)(null);
52
- let { direction: direction } = (0, $14nVg$useLocale)();
53
- let { styleProps: styleProps } = (0, $14nVg$useStyleProps)(otherProps);
54
- let [collapsed, setCollapsed] = (0, $14nVg$useState)(false);
55
- let [selectedTab, setSelectedTab] = (0, $14nVg$useState)(null);
56
- const [tabListState, setTabListState] = (0, $14nVg$useState)(null);
57
- let [tabPositions, setTabPositions] = (0, $14nVg$useState)([]);
58
- let prevTabPositions = (0, $14nVg$useRef)(tabPositions);
59
- (0, $14nVg$useEffect)(()=>{
60
- if (tablistRef.current) {
61
- var _tabListState_selectedKey;
62
- var _tabListState_selectedKey_toString;
63
- let selectedTab = tablistRef.current.querySelector(`[data-key="${CSS.escape((_tabListState_selectedKey_toString = tabListState === null || tabListState === void 0 ? void 0 : (_tabListState_selectedKey = tabListState.selectedKey) === null || _tabListState_selectedKey === void 0 ? void 0 : _tabListState_selectedKey.toString()) !== null && _tabListState_selectedKey_toString !== void 0 ? _tabListState_selectedKey_toString : '')}"]`);
64
- if (selectedTab != null) setSelectedTab(selectedTab);
65
- }
66
- // collapse is in the dep array so selectedTab can be updated for TabLine positioning
67
- }, [
68
- children,
69
- tabListState === null || tabListState === void 0 ? void 0 : tabListState.selectedKey,
70
- collapsed,
71
- tablistRef
72
- ]);
73
- let checkShouldCollapse = (0, $14nVg$useCallback)(()=>{
74
- if (wrapperRef.current && orientation !== 'vertical') {
75
- var _tablistRef_current;
76
- let tabsComponent = wrapperRef.current;
77
- var _tablistRef_current_querySelectorAll;
78
- let tabs = (_tablistRef_current_querySelectorAll = (_tablistRef_current = tablistRef.current) === null || _tablistRef_current === void 0 ? void 0 : _tablistRef_current.querySelectorAll('[role="tab"]')) !== null && _tablistRef_current_querySelectorAll !== void 0 ? _tablistRef_current_querySelectorAll : new NodeList();
79
- let tabDimensions = [
80
- ...tabs
81
- ].map((tab)=>tab.getBoundingClientRect());
82
- let end = direction === 'rtl' ? 'left' : 'right';
83
- let farEdgeTabList = tabsComponent.getBoundingClientRect()[end];
84
- let farEdgeLastTab = tabDimensions[tabDimensions.length - 1][end];
85
- let shouldCollapse = direction === 'rtl' ? farEdgeLastTab < farEdgeTabList : farEdgeTabList < farEdgeLastTab;
86
- setCollapsed(shouldCollapse);
87
- if (tabDimensions.length !== prevTabPositions.current.length || tabDimensions.some((box, index)=>{
88
- var _prevTabPositions_current_index, _prevTabPositions_current_index1;
89
- return (box === null || box === void 0 ? void 0 : box.left) !== ((_prevTabPositions_current_index = prevTabPositions.current[index]) === null || _prevTabPositions_current_index === void 0 ? void 0 : _prevTabPositions_current_index.left) || (box === null || box === void 0 ? void 0 : box.right) !== ((_prevTabPositions_current_index1 = prevTabPositions.current[index]) === null || _prevTabPositions_current_index1 === void 0 ? void 0 : _prevTabPositions_current_index1.right);
90
- })) {
91
- setTabPositions(tabDimensions);
92
- prevTabPositions.current = tabDimensions;
93
- }
94
- }
95
- }, [
96
- tablistRef,
97
- wrapperRef,
98
- direction,
99
- orientation,
100
- setCollapsed,
101
- prevTabPositions,
102
- setTabPositions
103
- ]);
104
- (0, $14nVg$useLayoutEffect)(()=>{
105
- checkShouldCollapse();
106
- }, [
107
- children,
108
- checkShouldCollapse
109
- ]);
110
- (0, $14nVg$useResizeObserver)({
111
- ref: wrapperRef,
112
- onResize: checkShouldCollapse
113
- });
114
- let tabPanelProps = {
115
- 'aria-labelledby': undefined
116
- };
117
- // When the tabs are collapsed, the tabPanel should be labelled by the Picker button element.
118
- let collapsibleTabListId = (0, $14nVg$useId)();
119
- if (collapsed && orientation !== 'vertical') tabPanelProps['aria-labelledby'] = collapsibleTabListId;
120
- return /*#__PURE__*/ (0, $14nVg$react).createElement($65ab70ddbed1564b$var$TabContext.Provider, {
121
- value: {
122
- tabProps: {
123
- ...props,
124
- orientation: orientation,
125
- density: density
126
- },
127
- tabState: {
128
- tabListState: tabListState,
129
- setTabListState: setTabListState,
130
- selectedTab: selectedTab,
131
- collapsed: collapsed
132
- },
133
- refs: {
134
- tablistRef: tablistRef,
135
- wrapperRef: wrapperRef
136
- },
137
- tabPanelProps: tabPanelProps,
138
- tabLineState: tabPositions
139
- }
140
- }, /*#__PURE__*/ (0, $14nVg$react).createElement("div", {
141
- ...(0, $14nVg$filterDOMProps)(otherProps),
142
- ...styleProps,
143
- ref: domRef,
144
- className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-TabsPanel', `spectrum-TabsPanel--${orientation}`, styleProps.className)
145
- }, props.children));
146
- });
147
- // @private
148
- function $65ab70ddbed1564b$var$Tab(props) {
149
- let { item: item, state: state } = props;
150
- let { key: key, rendered: rendered } = item;
151
- let ref = (0, $14nVg$useRef)(undefined);
152
- let { tabProps: tabProps, isSelected: isSelected, isDisabled: isDisabled } = (0, $14nVg$useTab)({
153
- key: key
154
- }, state, ref);
155
- let { hoverProps: hoverProps, isHovered: isHovered } = (0, $14nVg$useHover)({
156
- ...props
157
- });
158
- let ElementType = item.props.href ? 'a' : 'div';
159
- return /*#__PURE__*/ (0, $14nVg$react).createElement((0, $14nVg$FocusRing), {
160
- focusRingClass: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'focus-ring')
161
- }, /*#__PURE__*/ (0, $14nVg$react).createElement(ElementType, {
162
- ...(0, $14nVg$mergeProps)(tabProps, hoverProps),
163
- ref: ref,
164
- className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-Tabs-item', {
165
- 'is-selected': isSelected,
166
- 'is-disabled': isDisabled,
167
- 'is-hovered': isHovered
168
- })
169
- }, /*#__PURE__*/ (0, $14nVg$react).createElement((0, $14nVg$SlotProvider), {
170
- slots: {
171
- icon: {
172
- size: 'S',
173
- UNSAFE_className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-Icon')
174
- },
175
- text: {
176
- UNSAFE_className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-Tabs-itemLabel')
177
- }
178
- }
179
- }, typeof rendered === 'string' ? /*#__PURE__*/ (0, $14nVg$react).createElement((0, $14nVg$Text), null, rendered) : rendered)));
180
- }
181
- // @private
182
- function $65ab70ddbed1564b$var$TabLine(props) {
183
- let { orientation: orientation, selectedTab: // Is either the tab node (non-collapsed) or the picker node (collapsed)
184
- selectedTab, selectedKey: // selectedKey is provided so that the TabLine styles are updated when the TabPicker's width updates from a selection change
185
- selectedKey } = props;
186
- let { direction: direction } = (0, $14nVg$useLocale)();
187
- let { scale: scale } = (0, $14nVg$useProvider)();
188
- let { tabLineState: tabLineState } = (0, $14nVg$useContext)($65ab70ddbed1564b$var$TabContext);
189
- let [style, setStyle] = (0, $14nVg$useState)({
190
- width: undefined,
191
- height: undefined
192
- });
193
- let onResize = (0, $14nVg$useCallback)(()=>{
194
- if (selectedTab) {
195
- var _selectedTab_offsetParent;
196
- let styleObj = {
197
- transform: undefined,
198
- width: undefined,
199
- height: undefined
200
- };
201
- // In RTL, calculate the transform from the right edge of the tablist so that resizing the window doesn't break the Tabline position due to offsetLeft changes
202
- let offset = direction === 'rtl' ? -1 * (((_selectedTab_offsetParent = selectedTab.offsetParent) === null || _selectedTab_offsetParent === void 0 ? void 0 : _selectedTab_offsetParent.offsetWidth) - selectedTab.offsetWidth - selectedTab.offsetLeft) : selectedTab.offsetLeft;
203
- styleObj.transform = orientation === 'vertical' ? `translateY(${selectedTab.offsetTop}px)` : `translateX(${offset}px)`;
204
- if (orientation === 'horizontal') styleObj.width = `${selectedTab.offsetWidth}px`;
205
- else styleObj.height = `${selectedTab.offsetHeight}px`;
206
- setStyle(styleObj);
207
- }
208
- }, [
209
- direction,
210
- setStyle,
211
- selectedTab,
212
- orientation
213
- ]);
214
- (0, $14nVg$useLayoutEffect)(()=>{
215
- onResize();
216
- }, [
217
- onResize,
218
- scale,
219
- selectedKey,
220
- tabLineState
221
- ]);
222
- return /*#__PURE__*/ (0, $14nVg$react).createElement("div", {
223
- className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-Tabs-selectionIndicator'),
224
- role: "presentation",
225
- style: style
226
- });
227
- }
228
- function $65ab70ddbed1564b$export$e51a686c67fdaa2d(props) {
229
- const tabContext = (0, $14nVg$useContext)($65ab70ddbed1564b$var$TabContext);
230
- const { refs: refs, tabState: tabState, tabProps: tabProps, tabPanelProps: tabPanelProps } = tabContext;
231
- const { isQuiet: isQuiet, density: density, isEmphasized: isEmphasized, orientation: orientation } = tabProps;
232
- const { selectedTab: selectedTab, collapsed: collapsed, setTabListState: setTabListState } = tabState;
233
- const { tablistRef: tablistRef, wrapperRef: wrapperRef } = refs;
234
- // Pass original Tab props but override children to create the collection.
235
- const state = (0, $14nVg$useTabListState)({
236
- ...tabProps,
237
- children: props.children
238
- });
239
- let { styleProps: styleProps } = (0, $14nVg$useStyleProps)(props);
240
- const { tabListProps: tabListProps } = (0, $14nVg$useTabList)({
241
- ...tabProps,
242
- ...props
243
- }, state, tablistRef);
244
- (0, $14nVg$useEffect)(()=>{
245
- // Passing back to root as useTabPanel needs the TabListState
246
- setTabListState(state);
247
- // eslint-disable-next-line react-hooks/exhaustive-deps
248
- }, [
249
- state.disabledKeys,
250
- state.selectedItem,
251
- state.selectedKey,
252
- props.children
253
- ]);
254
- let collapseStyle = collapsed && orientation !== 'vertical' ? {
255
- maxWidth: 'calc(100% + 1px)',
256
- overflow: 'hidden',
257
- visibility: 'hidden',
258
- position: 'absolute'
259
- } : {
260
- maxWidth: 'calc(100% + 1px)'
261
- };
262
- let stylePropsFinal = orientation === 'vertical' ? styleProps : {
263
- style: collapseStyle
264
- };
265
- if (collapsed && orientation !== 'vertical') tabListProps['aria-hidden'] = true;
266
- let tabListclassName = (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-TabsPanel-tabs');
267
- const tabContent = /*#__PURE__*/ (0, $14nVg$react).createElement("div", {
268
- ...stylePropsFinal,
269
- ...tabListProps,
270
- ref: tablistRef,
271
- className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-Tabs', `spectrum-Tabs--${orientation}`, tabListclassName, {
272
- 'spectrum-Tabs--quiet': isQuiet,
273
- 'spectrum-Tabs--emphasized': isEmphasized,
274
- ['spectrum-Tabs--compact']: density === 'compact'
275
- }, orientation === 'vertical' && styleProps.className)
276
- }, [
277
- ...state.collection
278
- ].map((item)=>/*#__PURE__*/ (0, $14nVg$react).createElement($65ab70ddbed1564b$var$Tab, {
279
- key: item.key,
280
- item: item,
281
- state: state,
282
- orientation: orientation
283
- })), /*#__PURE__*/ (0, $14nVg$react).createElement($65ab70ddbed1564b$var$TabLine, {
284
- orientation: orientation,
285
- selectedTab: selectedTab
286
- }));
287
- if (orientation === 'vertical') return tabContent;
288
- else return /*#__PURE__*/ (0, $14nVg$react).createElement("div", {
289
- ...styleProps,
290
- ref: wrapperRef,
291
- className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-TabsPanel-collapseWrapper', styleProps.className)
292
- }, /*#__PURE__*/ (0, $14nVg$react).createElement($65ab70ddbed1564b$var$TabPicker, {
293
- ...props,
294
- ...tabProps,
295
- visible: collapsed,
296
- id: tabPanelProps['aria-labelledby'],
297
- state: state,
298
- className: tabListclassName
299
- }), tabContent);
300
- }
301
- function $65ab70ddbed1564b$export$5dae8d435677f210(props) {
302
- const { tabState: tabState, tabProps: tabProps } = (0, $14nVg$useContext)($65ab70ddbed1564b$var$TabContext);
303
- const { tabListState: tabListState } = tabState;
304
- const factory = (0, $14nVg$useCallback)((nodes)=>new (0, $14nVg$ListCollection)(nodes), []);
305
- const collection = (0, $14nVg$useCollection)({
306
- items: tabProps.items,
307
- ...props
308
- }, factory, {
309
- suppressTextValueWarning: true
310
- });
311
- const selectedItem = tabListState && tabListState.selectedKey != null ? collection.getItem(tabListState.selectedKey) : null;
312
- return /*#__PURE__*/ (0, $14nVg$react).createElement($65ab70ddbed1564b$var$TabPanel, {
313
- ...props,
314
- key: tabListState === null || tabListState === void 0 ? void 0 : tabListState.selectedKey
315
- }, selectedItem && selectedItem.props.children);
316
- }
317
- // @private
318
- function $65ab70ddbed1564b$var$TabPanel(props) {
319
- const { tabState: tabState, tabPanelProps: ctxTabPanelProps } = (0, $14nVg$useContext)($65ab70ddbed1564b$var$TabContext);
320
- const { tabListState: tabListState } = tabState;
321
- let ref = (0, $14nVg$useRef)(null);
322
- const { tabPanelProps: tabPanelProps } = (0, $14nVg$useTabPanel)(props, tabListState, ref);
323
- let { styleProps: styleProps } = (0, $14nVg$useStyleProps)(props);
324
- if (ctxTabPanelProps['aria-labelledby']) tabPanelProps['aria-labelledby'] = ctxTabPanelProps['aria-labelledby'];
325
- return /*#__PURE__*/ (0, $14nVg$react).createElement((0, $14nVg$FocusRing), {
326
- focusRingClass: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'focus-ring')
327
- }, /*#__PURE__*/ (0, $14nVg$react).createElement("div", {
328
- ...styleProps,
329
- ...tabPanelProps,
330
- ref: ref,
331
- className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-TabsPanel-tabpanel', styleProps.className)
332
- }, props.children));
333
- }
334
- function $65ab70ddbed1564b$var$TabPicker(props) {
335
- let { isDisabled: isDisabled, isEmphasized: isEmphasized, isQuiet: isQuiet, state: state, 'aria-labelledby': ariaLabeledBy, 'aria-label': ariaLabel, density: density, className: className, id: id, visible: visible } = props;
336
- let ref = (0, $14nVg$useRef)(null);
337
- let [pickerNode, setPickerNode] = (0, $14nVg$useState)(null);
338
- (0, $14nVg$useEffect)(()=>{
339
- let node = (0, $14nVg$unwrapDOMRef)(ref);
340
- setPickerNode(node.current);
341
- }, [
342
- ref
343
- ]);
344
- let items = [
345
- ...state.collection
346
- ];
347
- let pickerProps = {
348
- 'aria-labelledby': ariaLabeledBy,
349
- 'aria-label': ariaLabel
350
- };
351
- const style = visible ? {} : {
352
- visibility: 'hidden',
353
- position: 'absolute'
354
- };
355
- return /*#__PURE__*/ (0, $14nVg$react).createElement("div", {
356
- className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-Tabs', 'spectrum-Tabs--horizontal', 'spectrum-Tabs--isCollapsed', {
357
- 'spectrum-Tabs--quiet': isQuiet,
358
- ['spectrum-Tabs--compact']: density === 'compact',
359
- 'spectrum-Tabs--emphasized': isEmphasized
360
- }, className),
361
- style: style,
362
- "aria-hidden": visible ? undefined : true
363
- }, /*#__PURE__*/ (0, $14nVg$react).createElement((0, $14nVg$SlotProvider), {
364
- slots: {
365
- icon: {
366
- size: 'S',
367
- UNSAFE_className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-Icon')
368
- },
369
- button: {
370
- focusRingClass: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'focus-ring')
371
- }
372
- }
373
- }, /*#__PURE__*/ (0, $14nVg$react).createElement((0, $14nVg$Picker), {
374
- ...pickerProps,
375
- id: id,
376
- items: items,
377
- ref: ref,
378
- isQuiet: true,
379
- isDisabled: !visible || isDisabled,
380
- selectedKey: state.selectedKey,
381
- disabledKeys: state.disabledKeys,
382
- onSelectionChange: (key)=>{
383
- if (key != null) state.setSelectedKey(key);
384
- },
385
- UNSAFE_className: (0, $14nVg$classNames)((0, ($parcel$interopDefault($14nVg$tabs_vars_cssmodulejs))), 'spectrum-Tabs-picker')
386
- }, (item)=>/*#__PURE__*/ (0, $14nVg$react).createElement((0, $14nVg$Item), item.props, item.rendered)), pickerNode && /*#__PURE__*/ (0, $14nVg$react).createElement($65ab70ddbed1564b$var$TabLine, {
387
- orientation: "horizontal",
388
- selectedTab: pickerNode,
389
- selectedKey: state.selectedKey
390
- })));
391
- }
392
-
393
-
394
- export {$65ab70ddbed1564b$export$b2539bed5023c21c as Tabs, $65ab70ddbed1564b$export$e51a686c67fdaa2d as TabList, $65ab70ddbed1564b$export$5dae8d435677f210 as TabPanels};
395
- //# sourceMappingURL=Tabs.module.js.map