@transferwise/components 46.52.3 → 46.54.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/build/dateLookup/dateTrigger/DateTrigger.js +8 -4
- package/build/dateLookup/dateTrigger/DateTrigger.js.map +1 -1
- package/build/dateLookup/dateTrigger/DateTrigger.mjs +8 -4
- package/build/dateLookup/dateTrigger/DateTrigger.mjs.map +1 -1
- package/build/field/Field.js +36 -8
- package/build/field/Field.js.map +1 -1
- package/build/field/Field.mjs +37 -9
- package/build/field/Field.mjs.map +1 -1
- package/build/i18n/en.json +2 -0
- package/build/i18n/en.json.js +2 -0
- package/build/i18n/en.json.js.map +1 -1
- package/build/i18n/en.json.mjs +2 -0
- package/build/i18n/en.json.mjs.map +1 -1
- package/build/index.js +2 -2
- package/build/index.mjs +1 -1
- package/build/inlineAlert/InlineAlert.js +13 -6
- package/build/inlineAlert/InlineAlert.js.map +1 -1
- package/build/inlineAlert/InlineAlert.mjs +13 -6
- package/build/inlineAlert/InlineAlert.mjs.map +1 -1
- package/build/label/Label.js +35 -4
- package/build/label/Label.js.map +1 -1
- package/build/label/Label.messages.js +12 -0
- package/build/label/Label.messages.js.map +1 -0
- package/build/label/Label.messages.mjs +10 -0
- package/build/label/Label.messages.mjs.map +1 -0
- package/build/label/Label.mjs +36 -5
- package/build/label/Label.mjs.map +1 -1
- package/build/main.css +14 -8
- package/build/styles/dateLookup/dateTrigger/DateTrigger.css +0 -8
- package/build/styles/field/Field.css +4 -0
- package/build/styles/main.css +14 -8
- package/build/styles/upload/Upload.css +10 -0
- package/build/tabs/Tab.js +13 -38
- package/build/tabs/Tab.js.map +1 -1
- package/build/tabs/Tab.mjs +13 -34
- package/build/tabs/Tab.mjs.map +1 -1
- package/build/tabs/TabList.js +3 -11
- package/build/tabs/TabList.js.map +1 -1
- package/build/tabs/TabList.mjs +3 -7
- package/build/tabs/TabList.mjs.map +1 -1
- package/build/tabs/TabPanel.js +3 -16
- package/build/tabs/TabPanel.js.map +1 -1
- package/build/tabs/TabPanel.mjs +3 -12
- package/build/tabs/TabPanel.mjs.map +1 -1
- package/build/tabs/Tabs.js +24 -48
- package/build/tabs/Tabs.js.map +1 -1
- package/build/tabs/Tabs.mjs +24 -47
- package/build/tabs/Tabs.mjs.map +1 -1
- package/build/tabs/utils.js +0 -1
- package/build/tabs/utils.js.map +1 -1
- package/build/tabs/utils.mjs +0 -1
- package/build/tabs/utils.mjs.map +1 -1
- package/build/types/dateLookup/dateTrigger/DateTrigger.d.ts.map +1 -1
- package/build/types/field/Field.d.ts +4 -2
- package/build/types/field/Field.d.ts.map +1 -1
- package/build/types/index.d.ts +2 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/inlineAlert/InlineAlert.d.ts +9 -0
- package/build/types/inlineAlert/InlineAlert.d.ts.map +1 -1
- package/build/types/label/Label.d.ts +21 -1
- package/build/types/label/Label.d.ts.map +1 -1
- package/build/types/label/Label.messages.d.ts +8 -0
- package/build/types/label/Label.messages.d.ts.map +1 -0
- package/build/types/label/index.d.ts +3 -0
- package/build/types/label/index.d.ts.map +1 -0
- package/build/types/tabs/Tab.d.ts +12 -1
- package/build/types/tabs/Tab.d.ts.map +1 -1
- package/build/types/tabs/TabList.d.ts +3 -8
- package/build/types/tabs/TabList.d.ts.map +1 -1
- package/build/types/tabs/TabPanel.d.ts +6 -14
- package/build/types/tabs/TabPanel.d.ts.map +1 -1
- package/build/types/tabs/Tabs.d.ts +83 -30
- package/build/types/tabs/Tabs.d.ts.map +1 -1
- package/build/types/tabs/index.d.ts +2 -1
- package/build/types/tabs/index.d.ts.map +1 -1
- package/build/types/tabs/utils.d.ts +12 -7
- package/build/types/tabs/utils.d.ts.map +1 -1
- package/build/types/upload/Upload.d.ts +1 -0
- package/build/types/upload/Upload.d.ts.map +1 -1
- package/build/types/upload/Upload.messages.d.ts +4 -0
- package/build/types/upload/Upload.messages.d.ts.map +1 -1
- package/build/types/upload/steps/completeStep/completeStep.d.ts +1 -3
- package/build/types/upload/steps/completeStep/completeStep.d.ts.map +1 -1
- package/build/types/upload/steps/uploadImageStep/uploadImageStep.d.ts +1 -0
- package/build/types/upload/steps/uploadImageStep/uploadImageStep.d.ts.map +1 -1
- package/build/upload/Upload.js +26 -12
- package/build/upload/Upload.js.map +1 -1
- package/build/upload/Upload.messages.js +3 -0
- package/build/upload/Upload.messages.js.map +1 -1
- package/build/upload/Upload.messages.mjs +3 -0
- package/build/upload/Upload.messages.mjs.map +1 -1
- package/build/upload/Upload.mjs +26 -12
- package/build/upload/Upload.mjs.map +1 -1
- package/build/upload/steps/completeStep/completeStep.js +15 -30
- package/build/upload/steps/completeStep/completeStep.js.map +1 -1
- package/build/upload/steps/completeStep/completeStep.mjs +16 -31
- package/build/upload/steps/completeStep/completeStep.mjs.map +1 -1
- package/build/upload/steps/uploadImageStep/uploadImageStep.js +56 -32
- package/build/upload/steps/uploadImageStep/uploadImageStep.js.map +1 -1
- package/build/upload/steps/uploadImageStep/uploadImageStep.mjs +56 -32
- package/build/upload/steps/uploadImageStep/uploadImageStep.mjs.map +1 -1
- package/package.json +2 -2
- package/src/dateInput/DateInput.tests.story.tsx +6 -42
- package/src/dateLookup/DateLookup.rtl.spec.tsx +1 -1
- package/src/dateLookup/dateTrigger/DateTrigger.css +0 -8
- package/src/dateLookup/dateTrigger/DateTrigger.less +0 -8
- package/src/dateLookup/dateTrigger/DateTrigger.spec.js +1 -1
- package/src/dateLookup/dateTrigger/DateTrigger.tsx +9 -4
- package/src/field/Field.css +4 -0
- package/src/field/Field.less +5 -0
- package/src/field/Field.spec.tsx +41 -5
- package/src/field/Field.story.tsx +105 -7
- package/src/field/Field.tsx +34 -10
- package/src/i18n/en.json +2 -0
- package/src/index.ts +2 -1
- package/src/inlineAlert/InlineAlert.story.tsx +7 -72
- package/src/inlineAlert/InlineAlert.tsx +14 -3
- package/src/inputWithDisplayFormat/InputWithDisplayFormat.story.js +5 -10
- package/src/inputs/InputGroup.spec.tsx +1 -1
- package/src/inputs/SearchInput.spec.tsx +1 -1
- package/src/inputs/SelectInput.spec.tsx +1 -1
- package/src/label/Label.messages.tsx +8 -0
- package/src/label/Label.spec.tsx +53 -4
- package/src/label/Label.story.tsx +32 -26
- package/src/label/Label.tsx +47 -2
- package/src/label/index.ts +2 -0
- package/src/main.css +14 -8
- package/src/main.less +1 -0
- package/src/moneyInput/MoneyInput.story.tsx +11 -11
- package/src/radioGroup/RadioGroup.rtl.spec.tsx +1 -1
- package/src/select/Select.rtl.spec.tsx +1 -1
- package/src/switch/Switch.spec.tsx +1 -1
- package/src/switch/Switch.story.tsx +19 -21
- package/src/tabs/Tab.tsx +72 -0
- package/src/tabs/TabList.tsx +11 -0
- package/src/tabs/TabPanel.tsx +14 -0
- package/src/tabs/{Tabs.story.js → Tabs.story.tsx} +1 -1
- package/src/tabs/{Tabs.js → Tabs.tsx} +111 -74
- package/src/tabs/index.ts +2 -0
- package/src/tabs/{utils.spec.js → utils.spec.ts} +24 -21
- package/src/tabs/{utils.js → utils.ts} +15 -9
- package/src/upload/Upload.css +10 -0
- package/src/upload/Upload.less +9 -0
- package/src/upload/Upload.messages.ts +4 -0
- package/src/upload/Upload.spec.js +8 -7
- package/src/upload/Upload.story.tsx +1 -0
- package/src/upload/Upload.tsx +39 -20
- package/src/upload/steps/completeStep/completeStep.spec.js +0 -9
- package/src/upload/steps/completeStep/completeStep.tsx +14 -29
- package/src/upload/steps/uploadImageStep/uploadImageStep.spec.js +12 -0
- package/src/upload/steps/uploadImageStep/uploadImageStep.tsx +43 -24
- package/src/field/Field.tests.story.tsx +0 -33
- package/src/tabs/Tab.js +0 -71
- package/src/tabs/TabList.js +0 -15
- package/src/tabs/TabPanel.js +0 -20
- package/src/tabs/index.js +0 -1
package/build/tabs/TabPanel.mjs
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
1
|
import { jsx } from 'react/jsx-runtime';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
function TabPanel({
|
|
5
4
|
children,
|
|
6
5
|
id,
|
|
7
6
|
tabId,
|
|
8
7
|
style
|
|
9
|
-
})
|
|
8
|
+
}) {
|
|
10
9
|
return /*#__PURE__*/jsx("div", {
|
|
11
10
|
className: "tabs__panel",
|
|
12
11
|
role: "tabpanel",
|
|
@@ -15,15 +14,7 @@ const TabPanel = ({
|
|
|
15
14
|
style: style,
|
|
16
15
|
children: children
|
|
17
16
|
});
|
|
18
|
-
}
|
|
19
|
-
TabPanel.propTypes = {
|
|
20
|
-
children: PropTypes.node.isRequired,
|
|
21
|
-
id: PropTypes.string.isRequired,
|
|
22
|
-
tabId: PropTypes.string.isRequired,
|
|
23
|
-
style: PropTypes.shape({
|
|
24
|
-
width: PropTypes.string.isRequired
|
|
25
|
-
}).isRequired
|
|
26
|
-
};
|
|
17
|
+
}
|
|
27
18
|
|
|
28
19
|
export { TabPanel as default };
|
|
29
20
|
//# sourceMappingURL=TabPanel.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabPanel.mjs","sources":["../../src/tabs/TabPanel.
|
|
1
|
+
{"version":3,"file":"TabPanel.mjs","sources":["../../src/tabs/TabPanel.tsx"],"sourcesContent":["export interface TabPanelProps {\n children?: React.ReactNode;\n id: string;\n tabId: string;\n style: React.CSSProperties;\n}\n\nexport default function TabPanel({ children, id, tabId, style }: TabPanelProps) {\n return (\n <div className=\"tabs__panel\" role=\"tabpanel\" id={id} aria-labelledby={tabId} style={style}>\n {children}\n </div>\n );\n}\n"],"names":["TabPanel","children","id","tabId","style","_jsx","className","role"],"mappings":";;AAOwB,SAAAA,QAAQA,CAAC;EAAEC,QAAQ;EAAEC,EAAE;EAAEC,KAAK;AAAEC,EAAAA,KAAAA;AAAsB,CAAA,EAAA;AAC5E,EAAA,oBACEC,GAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,aAAa;AAACC,IAAAA,IAAI,EAAC,UAAU;AAACL,IAAAA,EAAE,EAAEA,EAAG;AAAC,IAAA,iBAAA,EAAiBC,KAAM;AAACC,IAAAA,KAAK,EAAEA,KAAM;AAAAH,IAAAA,QAAA,EACvFA,QAAAA;AAAQ,GACN,CAAC,CAAA;AAEV;;;;"}
|
package/build/tabs/Tabs.js
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
var web = require('@react-spring/web');
|
|
4
4
|
var clsx = require('clsx');
|
|
5
5
|
var clamp = require('lodash.clamp');
|
|
6
|
-
var PropTypes = require('prop-types');
|
|
7
6
|
var React = require('react');
|
|
8
7
|
var DirectionProvider = require('../provider/direction/DirectionProvider.js');
|
|
9
8
|
var Tab = require('./Tab.js');
|
|
@@ -13,16 +12,12 @@ var utils = require('./utils.js');
|
|
|
13
12
|
var jsxRuntime = require('react/jsx-runtime');
|
|
14
13
|
var width = require('../common/propsValues/width.js');
|
|
15
14
|
var direction = require('../common/direction.js');
|
|
16
|
-
var size = require('../common/propsValues/size.js');
|
|
17
15
|
|
|
18
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
17
|
|
|
20
18
|
var clamp__default = /*#__PURE__*/_interopDefault(clamp);
|
|
21
|
-
var PropTypes__default = /*#__PURE__*/_interopDefault(PropTypes);
|
|
22
19
|
|
|
23
|
-
/* eslint-disable react/forbid-dom-props */
|
|
24
20
|
const MIN_INDEX = 0;
|
|
25
|
-
const enabledTabsFilter = tab => !tab.disabled;
|
|
26
21
|
const SpacerWidth = {
|
|
27
22
|
default: 0,
|
|
28
23
|
xs: 8,
|
|
@@ -31,7 +26,11 @@ const SpacerWidth = {
|
|
|
31
26
|
lg: 32
|
|
32
27
|
};
|
|
33
28
|
class Tabs extends React.Component {
|
|
34
|
-
|
|
29
|
+
static defaultProps = {
|
|
30
|
+
changeTabOnSwipe: true,
|
|
31
|
+
transitionSpacing: 'default',
|
|
32
|
+
headerWidth: width.Width.BLOCK
|
|
33
|
+
};
|
|
35
34
|
containerReference = /*#__PURE__*/React.createRef();
|
|
36
35
|
constructor(props) {
|
|
37
36
|
super(props);
|
|
@@ -45,14 +44,16 @@ class Tabs extends React.Component {
|
|
|
45
44
|
isSwiping: false,
|
|
46
45
|
isScrolling: false,
|
|
47
46
|
lastSwipeVelocity: 0,
|
|
48
|
-
fullWidthTabs: props.headerWidth === width.Width.BLOCK
|
|
47
|
+
fullWidthTabs: props.headerWidth === width.Width.BLOCK,
|
|
48
|
+
currentSwipe: [],
|
|
49
|
+
selectedTabIndex: props.selected
|
|
49
50
|
};
|
|
50
51
|
}
|
|
51
52
|
container = null;
|
|
52
53
|
containerWidth = 0;
|
|
53
54
|
tabRefs = [];
|
|
54
55
|
get filteredTabsLength() {
|
|
55
|
-
return this.props.tabs.filter(
|
|
56
|
+
return this.props.tabs.filter(tab => !tab.disabled).length;
|
|
56
57
|
}
|
|
57
58
|
get MAX_INDEX() {
|
|
58
59
|
return this.props.tabs.length - 1;
|
|
@@ -76,13 +77,13 @@ class Tabs extends React.Component {
|
|
|
76
77
|
const currentSelected = this.props.selected;
|
|
77
78
|
const previousSelected = previousProps.selected;
|
|
78
79
|
const currentSelectedTab = this.props.tabs[currentSelected];
|
|
79
|
-
const currentSelectedTabIsDisabled = currentSelectedTab
|
|
80
|
+
const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;
|
|
80
81
|
const previousSelectedTab = previousProps.tabs[previousSelected];
|
|
81
|
-
const previousSelectedTabIsDisabled = previousSelectedTab
|
|
82
|
+
const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;
|
|
82
83
|
const currentTabsLength = this.props.tabs.length;
|
|
83
84
|
const previousTabsLength = previousProps.tabs.length;
|
|
84
|
-
const currentDisabledTabsLength = this.props.tabs.filter(
|
|
85
|
-
const previousDisabledTabsLength = previousProps.tabs.filter(
|
|
85
|
+
const currentDisabledTabsLength = this.props.tabs.filter(tab => !tab.disabled).length;
|
|
86
|
+
const previousDisabledTabsLength = previousProps.tabs.filter(tab => !tab.disabled).length;
|
|
86
87
|
const currentHeaderWidth = this.props.headerWidth;
|
|
87
88
|
const previousFullHeaderWidth = previousProps.headerWidth;
|
|
88
89
|
const {
|
|
@@ -126,7 +127,7 @@ class Tabs extends React.Component {
|
|
|
126
127
|
const {
|
|
127
128
|
tabs
|
|
128
129
|
} = this.props;
|
|
129
|
-
return tabs[index]
|
|
130
|
+
return tabs[index]?.disabled ?? false;
|
|
130
131
|
};
|
|
131
132
|
getAllTabsWidth = () => {
|
|
132
133
|
return this.tabRefs.map(reference => {
|
|
@@ -173,7 +174,6 @@ class Tabs extends React.Component {
|
|
|
173
174
|
const width = reference ? reference.getBoundingClientRect().width : 0;
|
|
174
175
|
return `${width}px`;
|
|
175
176
|
};
|
|
176
|
-
|
|
177
177
|
/*
|
|
178
178
|
* Gets the next tab that should be selected based on the swipe direction
|
|
179
179
|
* and the current selected tab (is called recursively to account for disabled tabs).
|
|
@@ -227,7 +227,7 @@ class Tabs extends React.Component {
|
|
|
227
227
|
onTabSelect(index);
|
|
228
228
|
};
|
|
229
229
|
getTabIndexWithoutDisabledTabs(index) {
|
|
230
|
-
return index - this.props.tabs.slice(0, index).filter(tab =>
|
|
230
|
+
return index - this.props.tabs.slice(0, index).filter(tab => tab.disabled).length;
|
|
231
231
|
}
|
|
232
232
|
animateToTab = (index, instant) => {
|
|
233
233
|
this.animateLine(index);
|
|
@@ -238,7 +238,6 @@ class Tabs extends React.Component {
|
|
|
238
238
|
translateLineX: previousState.fullWidthTabs ? `${index * 100}%` : `${this.getDistanceToSelectedTab(index)}px`
|
|
239
239
|
}));
|
|
240
240
|
};
|
|
241
|
-
|
|
242
241
|
// Pass `instant` to set the `translateX` to the new panel with no transition
|
|
243
242
|
animatePanel = (index, instant = false) => {
|
|
244
243
|
const {
|
|
@@ -285,6 +284,9 @@ class Tabs extends React.Component {
|
|
|
285
284
|
const {
|
|
286
285
|
start
|
|
287
286
|
} = this.state;
|
|
287
|
+
if (start == null) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
288
290
|
const {
|
|
289
291
|
selected: currentSelectedFromProps
|
|
290
292
|
} = this.props;
|
|
@@ -334,6 +336,9 @@ class Tabs extends React.Component {
|
|
|
334
336
|
start,
|
|
335
337
|
isSwiping
|
|
336
338
|
} = this.state;
|
|
339
|
+
if (start == null) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
337
342
|
const {
|
|
338
343
|
selected
|
|
339
344
|
} = this.props;
|
|
@@ -393,7 +398,6 @@ class Tabs extends React.Component {
|
|
|
393
398
|
const restrictedVelocity = (Number.isNaN(remainingContainerToTravel) ? 0 : remainingContainerToTravel) * Math.min(10 * Math.E, lastSwipeVelocity * 10 * Math.E);
|
|
394
399
|
const hidePanelOverflow = isAnimating || isSwiping;
|
|
395
400
|
const sliderWidth = tabsLength * this.containerWidth + spacer * 2;
|
|
396
|
-
|
|
397
401
|
// Uses `props.panelTransitionSpacing` to add a spacer in-between the `TabPanel` you're transitioning to/from
|
|
398
402
|
const Spacer = ({
|
|
399
403
|
id
|
|
@@ -429,10 +433,10 @@ class Tabs extends React.Component {
|
|
|
429
433
|
disabled: disabled,
|
|
430
434
|
focusTab: () => {
|
|
431
435
|
if (this.containerReference.current?.contains(document.activeElement)) {
|
|
432
|
-
this.tabRefs[index]
|
|
436
|
+
this.tabRefs[index]?.focus();
|
|
433
437
|
}
|
|
434
438
|
},
|
|
435
|
-
onClick: disabled ?
|
|
439
|
+
onClick: disabled ? undefined : this.handleTabClick(index),
|
|
436
440
|
onKeyDown: this.onKeyDown(index),
|
|
437
441
|
...(fullWidthTabs ? {
|
|
438
442
|
style: {
|
|
@@ -507,34 +511,6 @@ class Tabs extends React.Component {
|
|
|
507
511
|
});
|
|
508
512
|
}
|
|
509
513
|
}
|
|
510
|
-
const SpacerSizes = {
|
|
511
|
-
...size.Size,
|
|
512
|
-
NONE: 'default'
|
|
513
|
-
};
|
|
514
|
-
Tabs.propTypes = {
|
|
515
|
-
tabs: PropTypes__default.default.arrayOf(PropTypes__default.default.shape({
|
|
516
|
-
title: PropTypes__default.default.string.isRequired,
|
|
517
|
-
content: PropTypes__default.default.node.isRequired,
|
|
518
|
-
disabled: PropTypes__default.default.bool.isRequired
|
|
519
|
-
})).isRequired,
|
|
520
|
-
selected: PropTypes__default.default.number.isRequired,
|
|
521
|
-
name: PropTypes__default.default.string.isRequired,
|
|
522
|
-
animatePanelsOnClick: PropTypes__default.default.bool,
|
|
523
|
-
changeTabOnSwipe: PropTypes__default.default.bool,
|
|
524
|
-
className: PropTypes__default.default.string,
|
|
525
|
-
transitionSpacing: PropTypes__default.default.oneOf(['default', 'xs', 'sm', 'md', 'lg']),
|
|
526
|
-
headerWidth: PropTypes__default.default.oneOf(['auto', 'block']),
|
|
527
|
-
id: PropTypes__default.default.string,
|
|
528
|
-
onTabSelect: PropTypes__default.default.func.isRequired
|
|
529
|
-
};
|
|
530
|
-
Tabs.defaultProps = {
|
|
531
|
-
animatePanelsOnClick: false,
|
|
532
|
-
changeTabOnSwipe: true,
|
|
533
|
-
className: '',
|
|
534
|
-
transitionSpacing: SpacerSizes.NONE,
|
|
535
|
-
headerWidth: width.Width.BLOCK
|
|
536
|
-
};
|
|
537
|
-
var Tabs$1 = Tabs;
|
|
538
514
|
|
|
539
|
-
module.exports = Tabs
|
|
515
|
+
module.exports = Tabs;
|
|
540
516
|
//# sourceMappingURL=Tabs.js.map
|
package/build/tabs/Tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sources":["../../src/tabs/Tabs.js"],"sourcesContent":["/* eslint-disable react/forbid-dom-props */\nimport { Spring, SpringValue, animated } from '@react-spring/web';\nimport { clsx } from 'clsx';\nimport clamp from 'lodash.clamp';\nimport PropTypes from 'prop-types';\nimport { Component, createRef, Fragment } from 'react';\n\nimport { Size, Width, Direction } from '../common';\nimport { DirectionContext } from '../provider/direction';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport {\n getElasticDragDifference,\n getSwipeDifference,\n swipedLeftToRight,\n swipedRightToLeft,\n swipeShouldChangeTab,\n getVelocity,\n} from './utils';\n\nconst MIN_INDEX = 0;\n\nconst enabledTabsFilter = (tab) => !tab.disabled;\n\nconst SpacerWidth = { default: 0, xs: 8, sm: 16, md: 24, lg: 32 };\n\nclass Tabs extends Component {\n /** @type {React.RefObject<HTMLDivElement | null>} */\n containerReference = createRef();\n\n constructor(props) {\n super(props);\n this.state = {\n start: null,\n translateX: 0,\n translateFrom: 0,\n translateTo: 0,\n translateLineX: null,\n isAnimating: false,\n isSwiping: false,\n isScrolling: false,\n lastSwipeVelocity: 0,\n fullWidthTabs: props.headerWidth === Width.BLOCK,\n };\n }\n\n container = null;\n\n containerWidth = 0;\n\n tabRefs = [];\n\n get filteredTabsLength() {\n return this.props.tabs.filter(enabledTabsFilter).length;\n }\n\n get MAX_INDEX() {\n return this.props.tabs.length - 1;\n }\n\n componentDidMount() {\n const { selected } = this.props;\n\n this.setTabWidth();\n this.switchTab(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n this.animateToTab(clamp(selected, MIN_INDEX, this.MAX_INDEX), true);\n document.body.addEventListener('touchmove', this.disableScroll, { passive: false });\n document.body.addEventListener('touchforcechange', this.disableScroll, { passive: false });\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(previousProps, previousState) {\n const currentSelected = this.props.selected;\n const previousSelected = previousProps.selected;\n const currentSelectedTab = this.props.tabs[currentSelected];\n const currentSelectedTabIsDisabled = currentSelectedTab && currentSelectedTab.disabled;\n const previousSelectedTab = previousProps.tabs[previousSelected];\n const previousSelectedTabIsDisabled = previousSelectedTab && previousSelectedTab.disabled;\n const currentTabsLength = this.props.tabs.length;\n const previousTabsLength = previousProps.tabs.length;\n const currentDisabledTabsLength = this.props.tabs.filter(enabledTabsFilter).length;\n const previousDisabledTabsLength = previousProps.tabs.filter(enabledTabsFilter).length;\n const currentHeaderWidth = this.props.headerWidth;\n const previousFullHeaderWidth = previousProps.headerWidth;\n const { animatePanelsOnClick } = this.props;\n const instantOnClick = !animatePanelsOnClick && !previousState.isSwiping;\n\n if (\n currentHeaderWidth !== previousFullHeaderWidth ||\n currentTabsLength !== previousTabsLength\n ) {\n this.setTabWidth();\n }\n\n if (\n currentSelected !== previousSelected ||\n currentDisabledTabsLength !== previousDisabledTabsLength ||\n currentSelectedTabIsDisabled !== previousSelectedTabIsDisabled\n ) {\n this.animateToTab(\n clamp(currentSelected, MIN_INDEX, this.MAX_INDEX),\n currentSelected === previousSelected || instantOnClick,\n );\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('touchmove', this.disableScroll);\n document.body.removeEventListener('touchforcechange', this.disableScroll);\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleResize = () => {\n this.setContainerWidth(this.container);\n\n this.setState(({ selectedTabIndex }) => ({\n translateTo: -(this.containerWidth * selectedTabIndex),\n }));\n };\n\n setContainerRefAndWidth = (node) => {\n this.container = node;\n this.setContainerWidth(node);\n };\n\n setContainerWidth = (node) => {\n if (!node) {\n return;\n }\n\n const { width } = node.getBoundingClientRect();\n\n this.containerWidth = width;\n };\n\n isTabDisabled = (index) => {\n const { tabs } = this.props;\n\n return tabs[index] && tabs[index].disabled;\n };\n\n getAllTabsWidth = () => {\n return this.tabRefs\n .map((reference) => {\n return reference ? reference.getBoundingClientRect().width : 0;\n })\n .reduce((a, b) => a + b, 0);\n };\n\n getDistanceToSelectedTab = (selectedTabIndex) => {\n return this.tabRefs\n .filter((_, idx) => idx < selectedTabIndex)\n .map((reference) => (reference ? reference.getBoundingClientRect().width : 0))\n .reduce((a, b) => a + b, 0);\n };\n\n setTabWidth = () => {\n const { fullWidthTabs } = this.state;\n const { headerWidth, selected } = this.props;\n\n const allTabsWidth = this.getAllTabsWidth();\n\n if (!fullWidthTabs && (headerWidth === Width.BLOCK || this.containerWidth < allTabsWidth)) {\n this.setState({ fullWidthTabs: true, translateLineX: `${selected * 100}%` });\n }\n if (fullWidthTabs && headerWidth === Width.AUTO && this.containerWidth >= allTabsWidth) {\n this.setState({\n fullWidthTabs: false,\n translateLineX: `${this.getDistanceToSelectedTab(selected)}px`,\n });\n }\n };\n\n getTabLineWidth = () => {\n const { fullWidthTabs } = this.state;\n const { selected, tabs } = this.props;\n\n if (fullWidthTabs) {\n return `${(1 / tabs.length) * 100}%`;\n }\n\n const reference = this.tabRefs[selected] || this.tabRefs[this.tabRefs.length - 1];\n const width = reference ? reference.getBoundingClientRect().width : 0;\n return `${width}px`;\n };\n\n /*\n * Gets the next tab that should be selected based on the swipe direction\n * and the current selected tab (is called recursively to account for disabled tabs).\n */\n getTabToSelect = (selected, start, end) => {\n let nextSelected = selected;\n\n if (swipedLeftToRight(start, end)) {\n nextSelected -= 1;\n\n if (nextSelected > MIN_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n } else if (swipedRightToLeft(start, end)) {\n nextSelected += 1;\n\n if (nextSelected < this.MAX_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n }\n\n nextSelected = clamp(\n nextSelected,\n Math.max(selected - 1, MIN_INDEX),\n Math.min(selected + 1, this.MAX_INDEX),\n );\n\n if (this.isTabDisabled(nextSelected)) {\n return selected;\n }\n\n return nextSelected;\n };\n\n swipedOverHalfOfContainer = (difference) => difference / this.containerWidth >= 0.5;\n\n calculateApplicableDragDifference = ({ currentSelected, nextSelected, start, end }) => {\n const difference = getSwipeDifference(start, end);\n const elasticDrag = getElasticDragDifference(difference);\n\n if (swipedLeftToRight(start, end)) {\n if (currentSelected > MIN_INDEX && currentSelected !== nextSelected) {\n return Math.min(difference, this.containerWidth);\n }\n return elasticDrag;\n }\n if (swipedRightToLeft(start, end)) {\n if (currentSelected < this.MAX_INDEX && currentSelected !== nextSelected) {\n return -Math.min(difference, this.containerWidth);\n }\n return -elasticDrag;\n }\n\n return false;\n };\n\n switchTab = (index) => {\n const { onTabSelect } = this.props;\n onTabSelect(index);\n };\n\n getTabIndexWithoutDisabledTabs(index) {\n return index - this.props.tabs.slice(0, index).filter((tab) => !enabledTabsFilter(tab)).length;\n }\n\n animateToTab = (index, instant) => {\n this.animateLine(index);\n\n this.animatePanel(this.getTabIndexWithoutDisabledTabs(index), instant);\n };\n\n animateLine = (index) => {\n this.setState((previousState) => ({\n translateLineX: previousState.fullWidthTabs\n ? `${index * 100}%`\n : `${this.getDistanceToSelectedTab(index)}px`,\n }));\n };\n\n // Pass `instant` to set the `translateX` to the new panel with no transition\n animatePanel = (index, instant = false) => {\n const { translateTo: currentTranslateTo } = this.state;\n\n const translateFrom = currentTranslateTo;\n const translateTo = -(this.containerWidth * index);\n\n this.setState({\n selectedTabIndex: index,\n isAnimating: !instant && translateFrom !== translateTo,\n translateFrom,\n translateTo,\n });\n };\n\n disableScroll = (event) => {\n const { isSwiping } = this.state;\n\n if (isSwiping) {\n event.preventDefault();\n }\n };\n\n handleTabClick = (index) => () => {\n this.switchTab(index);\n };\n\n onKeyDown = (index) => (event) => {\n if (event && event.key === 'Enter') {\n this.switchTab(index);\n }\n };\n\n handleTouchStart = (event) => {\n const start = {\n x: event.nativeEvent.touches[0].clientX,\n y: event.nativeEvent.touches[0].clientY,\n time: Date.now(),\n };\n this.setState({\n start,\n currentSwipe: [start],\n });\n\n event.persist();\n };\n\n handleTouchMove = (event) => {\n const { start } = this.state;\n const { selected: currentSelectedFromProps } = this.props;\n const selected = this.getTabIndexWithoutDisabledTabs(currentSelectedFromProps);\n const end = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const yAxisDifference = getSwipeDifference(start, end, 'y');\n let { isScrolling, isSwiping } = this.state;\n\n event.persist();\n\n if (!isScrolling && !isSwiping) {\n if (difference > yAxisDifference) {\n isSwiping = true;\n } else {\n isScrolling = true;\n }\n }\n\n this.setState({ isScrolling, isSwiping });\n\n if (isSwiping) {\n const nextSelected = this.getTabToSelect(currentSelectedFromProps, start, end);\n\n this.animateLine(\n this.swipedOverHalfOfContainer(difference) ? nextSelected : currentSelectedFromProps,\n );\n\n const dragDifference = this.calculateApplicableDragDifference({\n currentSelected: currentSelectedFromProps,\n nextSelected,\n start,\n end,\n });\n\n const translateX = dragDifference\n ? -(this.containerWidth * selected) + dragDifference\n : false;\n\n this.setState((state) => ({\n currentSwipe: [...state.currentSwipe, end],\n translateFrom: translateX || state.translateFrom,\n translateTo: translateX || state.translateTo,\n }));\n }\n };\n\n handleTouchEnd = (event) => {\n const { start, isSwiping } = this.state;\n const { selected } = this.props;\n const end = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const velocity = getVelocity([...this.state.currentSwipe, end]);\n\n this.setState({\n currentSwipe: [],\n });\n\n let nextSelected = selected;\n\n event.persist();\n\n if (isSwiping) {\n if (swipeShouldChangeTab(start, end) || this.swipedOverHalfOfContainer(difference)) {\n nextSelected = this.getTabToSelect(nextSelected, start, end);\n }\n\n if (nextSelected !== selected) {\n this.switchTab(nextSelected);\n\n this.setState({\n lastSwipeVelocity: velocity,\n });\n } else {\n this.animateToTab(nextSelected);\n }\n }\n\n this.setState({ isSwiping: false, isScrolling: false });\n };\n\n render() {\n const { tabs, changeTabOnSwipe, name, selected, className, transitionSpacing, headerWidth } =\n this.props;\n const {\n isSwiping,\n translateLineX,\n isAnimating,\n translateFrom,\n translateTo,\n lastSwipeVelocity,\n fullWidthTabs,\n } = this.state;\n\n const spacer = SpacerWidth[transitionSpacing];\n\n const tabsLength = this.filteredTabsLength;\n\n const distanceSwiped = Math.abs(-translateFrom - this.containerWidth * selected);\n\n const remainingContainerToTravel = isSwiping\n ? 1 - distanceSwiped / this.containerWidth\n : 1 - Math.abs(distanceSwiped / this.containerWidth - 1);\n\n const restrictedVelocity =\n (Number.isNaN(remainingContainerToTravel) ? 0 : remainingContainerToTravel) *\n Math.min(10 * Math.E, lastSwipeVelocity * 10 * Math.E);\n\n const hidePanelOverflow = isAnimating || isSwiping;\n\n const sliderWidth = tabsLength * this.containerWidth + spacer * 2;\n\n // Uses `props.panelTransitionSpacing` to add a spacer in-between the `TabPanel` you're transitioning to/from\n const Spacer = ({ id }) =>\n spacer > 0 && (\n <div\n key={id}\n style={{\n width: spacer,\n display: hidePanelOverflow ? 'block' : 'none',\n }}\n />\n );\n\n return (\n <DirectionContext.Consumer>\n {(direction) => {\n const isRTL = direction === Direction.RTL;\n return (\n <div\n ref={this.containerReference}\n className={clsx('tabs', className, {\n 'tabs--auto-width': headerWidth === Width.AUTO,\n })}\n onTouchStart={changeTabOnSwipe ? this.handleTouchStart : undefined}\n onTouchEnd={changeTabOnSwipe ? this.handleTouchEnd : undefined}\n onTouchMove={changeTabOnSwipe ? this.handleTouchMove : undefined}\n >\n <TabList>\n {tabs.map(({ title, disabled }, index) => {\n return (\n <Tab\n key={title}\n ref={(node) => {\n this.tabRefs[index] = node;\n }}\n id={`${name}-tab-${index}`}\n panelId={`${name}-panel-${index}`}\n selected={selected === index}\n disabled={disabled}\n focusTab={() => {\n if (this.containerReference.current?.contains(document.activeElement)) {\n this.tabRefs[index].focus();\n }\n }}\n onClick={disabled ? null : this.handleTabClick(index)}\n onKeyDown={this.onKeyDown(index)}\n {...(fullWidthTabs\n ? { style: { width: `${(1 / tabs.length) * 100}%` } }\n : {})}\n >\n {title}\n </Tab>\n );\n })}\n {translateLineX ? (\n <li\n role=\"none\"\n className=\"tabs__line\"\n style={{\n width: this.getTabLineWidth(),\n transform: isRTL\n ? `translateX(-${translateLineX})`\n : `translateX(${translateLineX})`,\n }}\n />\n ) : null}\n </TabList>\n <div\n ref={this.setContainerRefAndWidth}\n className=\"tabs__panel-container\"\n style={{\n overflow: hidePanelOverflow ? 'hidden' : 'visible',\n }}\n >\n <Spring\n from={{\n transform: `translateX(${translateFrom - spacer}px)`,\n }}\n to={{\n transform: `translateX(${translateTo - spacer}px)`,\n }}\n config={{\n precision: isSwiping ? 1 : 0.01,\n velocity: !isSwiping ? restrictedVelocity : 0,\n clamp: true,\n }}\n onRest={() => {\n if (isAnimating) {\n this.setState({\n isAnimating: false,\n lastSwipeVelocity: 0,\n });\n }\n }}\n >\n {(props) => (\n <animated.div\n className=\"tabs__slider\"\n style={{\n width: hidePanelOverflow ? `${sliderWidth}px` : '100%',\n transform: hidePanelOverflow ? props.transform : 'translateX(0px)',\n }}\n >\n {tabs.map(({ content, disabled }, index) =>\n !disabled ? (\n <Fragment key={`${tabs[index].title}-fragment`}>\n {index === selected && <Spacer id=\"left-spacer\" />}\n <TabPanel\n key={tabs[index].title}\n tabId={`${name}-tab-${index}`}\n id={`${name}-panel-${index}`}\n style={{\n width: hidePanelOverflow ? `${this.containerWidth}px` : '100%',\n display: hidePanelOverflow || index === selected ? 'block' : 'none',\n }}\n >\n {content}\n </TabPanel>\n {index === selected && <Spacer id=\"right-spacer\" />}\n </Fragment>\n ) : null,\n )}\n </animated.div>\n )}\n </Spring>\n </div>\n </div>\n );\n }}\n </DirectionContext.Consumer>\n );\n }\n}\n\nconst SpacerSizes = { ...Size, NONE: 'default' };\n\nTabs.propTypes = {\n tabs: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n content: PropTypes.node.isRequired,\n disabled: PropTypes.bool.isRequired,\n }),\n ).isRequired,\n selected: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n animatePanelsOnClick: PropTypes.bool,\n changeTabOnSwipe: PropTypes.bool,\n className: PropTypes.string,\n transitionSpacing: PropTypes.oneOf(['default', 'xs', 'sm', 'md', 'lg']),\n headerWidth: PropTypes.oneOf(['auto', 'block']),\n id: PropTypes.string,\n onTabSelect: PropTypes.func.isRequired,\n};\n\nTabs.defaultProps = {\n animatePanelsOnClick: false,\n changeTabOnSwipe: true,\n className: '',\n transitionSpacing: SpacerSizes.NONE,\n headerWidth: Width.BLOCK,\n};\n\nexport default Tabs;\n"],"names":["MIN_INDEX","enabledTabsFilter","tab","disabled","SpacerWidth","default","xs","sm","md","lg","Tabs","Component","containerReference","createRef","constructor","props","state","start","translateX","translateFrom","translateTo","translateLineX","isAnimating","isSwiping","isScrolling","lastSwipeVelocity","fullWidthTabs","headerWidth","Width","BLOCK","container","containerWidth","tabRefs","filteredTabsLength","tabs","filter","length","MAX_INDEX","componentDidMount","selected","setTabWidth","switchTab","clamp","animateToTab","document","body","addEventListener","disableScroll","passive","window","handleResize","componentDidUpdate","previousProps","previousState","currentSelected","previousSelected","currentSelectedTab","currentSelectedTabIsDisabled","previousSelectedTab","previousSelectedTabIsDisabled","currentTabsLength","previousTabsLength","currentDisabledTabsLength","previousDisabledTabsLength","currentHeaderWidth","previousFullHeaderWidth","animatePanelsOnClick","instantOnClick","componentWillUnmount","removeEventListener","setContainerWidth","setState","selectedTabIndex","setContainerRefAndWidth","node","width","getBoundingClientRect","isTabDisabled","index","getAllTabsWidth","map","reference","reduce","a","b","getDistanceToSelectedTab","_","idx","allTabsWidth","AUTO","getTabLineWidth","getTabToSelect","end","nextSelected","swipedLeftToRight","swipedRightToLeft","Math","max","min","swipedOverHalfOfContainer","difference","calculateApplicableDragDifference","getSwipeDifference","elasticDrag","getElasticDragDifference","onTabSelect","getTabIndexWithoutDisabledTabs","slice","instant","animateLine","animatePanel","currentTranslateTo","event","preventDefault","handleTabClick","onKeyDown","key","handleTouchStart","x","nativeEvent","touches","clientX","y","clientY","time","Date","now","currentSwipe","persist","handleTouchMove","currentSelectedFromProps","changedTouches","yAxisDifference","dragDifference","handleTouchEnd","velocity","getVelocity","swipeShouldChangeTab","render","changeTabOnSwipe","name","className","transitionSpacing","spacer","tabsLength","distanceSwiped","abs","remainingContainerToTravel","restrictedVelocity","Number","isNaN","E","hidePanelOverflow","sliderWidth","Spacer","id","_jsx","style","display","DirectionContext","Consumer","children","direction","isRTL","Direction","RTL","_jsxs","ref","clsx","onTouchStart","undefined","onTouchEnd","onTouchMove","TabList","title","Tab","panelId","focusTab","current","contains","activeElement","focus","onClick","role","transform","overflow","Spring","from","to","config","precision","onRest","animated","div","content","Fragment","TabPanel","tabId","SpacerSizes","Size","NONE","propTypes","PropTypes","arrayOf","shape","string","isRequired","bool","number","oneOf","func","defaultProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../src/tabs/Tabs.tsx"],"sourcesContent":["import { Spring, animated } from '@react-spring/web';\nimport { clsx } from 'clsx';\nimport clamp from 'lodash.clamp';\nimport { Component, createRef, Fragment } from 'react';\n\nimport { Size, Width, Direction } from '../common';\nimport { DirectionContext } from '../provider/direction';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport {\n getElasticDragDifference,\n getSwipeDifference,\n swipedLeftToRight,\n swipedRightToLeft,\n swipeShouldChangeTab,\n getVelocity,\n Swipe,\n} from './utils';\n\nconst MIN_INDEX = 0;\n\nexport interface TabItem {\n title: string;\n content: React.ReactNode;\n disabled: boolean;\n}\n\ntype TabsTransitionSpacing =\n | 'default'\n | `${Size.EXTRA_SMALL | Size.SMALL | Size.MEDIUM | Size.LARGE}`;\n\nexport interface TabsProps {\n tabs: TabItem[];\n selected: number;\n name: string;\n animatePanelsOnClick?: boolean;\n changeTabOnSwipe?: boolean;\n className?: string;\n transitionSpacing?: TabsTransitionSpacing;\n headerWidth?: `${Width}`;\n id?: string;\n onTabSelect: (index: number) => void;\n}\n\ninterface TabsState {\n start: Swipe | null;\n translateX: number;\n translateFrom: number;\n translateTo: number;\n translateLineX: string | null;\n isAnimating: boolean;\n isSwiping: boolean;\n isScrolling: boolean;\n lastSwipeVelocity: number;\n fullWidthTabs: boolean;\n currentSwipe: Swipe[];\n selectedTabIndex: number;\n}\n\nconst SpacerWidth = {\n default: 0,\n xs: 8,\n sm: 16,\n md: 24,\n lg: 32,\n} satisfies Record<TabsTransitionSpacing, number>;\n\nexport default class Tabs extends Component<TabsProps, TabsState> {\n declare props: TabsProps & Required<Pick<TabsProps, keyof typeof Tabs.defaultProps>>;\n\n static defaultProps = {\n changeTabOnSwipe: true,\n transitionSpacing: 'default',\n headerWidth: Width.BLOCK,\n } satisfies Partial<TabsProps>;\n\n containerReference = createRef<HTMLDivElement>();\n\n constructor(props: Tabs['props']) {\n super(props);\n this.state = {\n start: null,\n translateX: 0,\n translateFrom: 0,\n translateTo: 0,\n translateLineX: null,\n isAnimating: false,\n isSwiping: false,\n isScrolling: false,\n lastSwipeVelocity: 0,\n fullWidthTabs: props.headerWidth === Width.BLOCK,\n currentSwipe: [],\n selectedTabIndex: props.selected,\n };\n }\n\n container: HTMLDivElement | null = null;\n\n containerWidth = 0;\n\n tabRefs: (HTMLLIElement | null)[] = [];\n\n get filteredTabsLength() {\n return this.props.tabs.filter((tab) => !tab.disabled).length;\n }\n\n get MAX_INDEX() {\n return this.props.tabs.length - 1;\n }\n\n componentDidMount() {\n const { selected } = this.props;\n\n this.setTabWidth();\n this.switchTab(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n this.animateToTab(clamp(selected, MIN_INDEX, this.MAX_INDEX), true);\n document.body.addEventListener('touchmove', this.disableScroll, { passive: false });\n document.body.addEventListener('touchforcechange', this.disableScroll, { passive: false });\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(previousProps: TabsProps, previousState: TabsState) {\n const currentSelected = this.props.selected;\n const previousSelected = previousProps.selected;\n const currentSelectedTab = this.props.tabs[currentSelected];\n const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;\n const previousSelectedTab = previousProps.tabs[previousSelected];\n const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;\n const currentTabsLength = this.props.tabs.length;\n const previousTabsLength = previousProps.tabs.length;\n const currentDisabledTabsLength = this.props.tabs.filter((tab) => !tab.disabled).length;\n const previousDisabledTabsLength = previousProps.tabs.filter((tab) => !tab.disabled).length;\n const currentHeaderWidth = this.props.headerWidth;\n const previousFullHeaderWidth = previousProps.headerWidth;\n const { animatePanelsOnClick } = this.props;\n const instantOnClick = !animatePanelsOnClick && !previousState.isSwiping;\n\n if (\n currentHeaderWidth !== previousFullHeaderWidth ||\n currentTabsLength !== previousTabsLength\n ) {\n this.setTabWidth();\n }\n\n if (\n currentSelected !== previousSelected ||\n currentDisabledTabsLength !== previousDisabledTabsLength ||\n currentSelectedTabIsDisabled !== previousSelectedTabIsDisabled\n ) {\n this.animateToTab(\n clamp(currentSelected, MIN_INDEX, this.MAX_INDEX),\n currentSelected === previousSelected || instantOnClick,\n );\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('touchmove', this.disableScroll);\n document.body.removeEventListener('touchforcechange', this.disableScroll);\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleResize = () => {\n this.setContainerWidth(this.container);\n\n this.setState(({ selectedTabIndex }) => ({\n translateTo: -(this.containerWidth * selectedTabIndex),\n }));\n };\n\n setContainerRefAndWidth = (node: HTMLDivElement | null) => {\n this.container = node;\n this.setContainerWidth(node);\n };\n\n setContainerWidth = (node: HTMLDivElement | null) => {\n if (!node) {\n return;\n }\n\n const { width } = node.getBoundingClientRect();\n\n this.containerWidth = width;\n };\n\n isTabDisabled = (index: number) => {\n const { tabs } = this.props;\n\n return tabs[index]?.disabled ?? false;\n };\n\n getAllTabsWidth = () => {\n return this.tabRefs\n .map((reference) => {\n return reference ? reference.getBoundingClientRect().width : 0;\n })\n .reduce((a, b) => a + b, 0);\n };\n\n getDistanceToSelectedTab = (selectedTabIndex: number) => {\n return this.tabRefs\n .filter((_, idx) => idx < selectedTabIndex)\n .map((reference) => (reference ? reference.getBoundingClientRect().width : 0))\n .reduce((a, b) => a + b, 0);\n };\n\n setTabWidth = () => {\n const { fullWidthTabs } = this.state;\n const { headerWidth, selected } = this.props;\n\n const allTabsWidth = this.getAllTabsWidth();\n\n if (!fullWidthTabs && (headerWidth === Width.BLOCK || this.containerWidth < allTabsWidth)) {\n this.setState({ fullWidthTabs: true, translateLineX: `${selected * 100}%` });\n }\n if (fullWidthTabs && headerWidth === Width.AUTO && this.containerWidth >= allTabsWidth) {\n this.setState({\n fullWidthTabs: false,\n translateLineX: `${this.getDistanceToSelectedTab(selected)}px`,\n });\n }\n };\n\n getTabLineWidth = () => {\n const { fullWidthTabs } = this.state;\n const { selected, tabs } = this.props;\n\n if (fullWidthTabs) {\n return `${(1 / tabs.length) * 100}%`;\n }\n\n const reference = this.tabRefs[selected] || this.tabRefs[this.tabRefs.length - 1];\n const width = reference ? reference.getBoundingClientRect().width : 0;\n return `${width}px`;\n };\n\n /*\n * Gets the next tab that should be selected based on the swipe direction\n * and the current selected tab (is called recursively to account for disabled tabs).\n */\n getTabToSelect = (selected: number, start: Swipe, end: Swipe): number => {\n let nextSelected = selected;\n\n if (swipedLeftToRight(start, end)) {\n nextSelected -= 1;\n\n if (nextSelected > MIN_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n } else if (swipedRightToLeft(start, end)) {\n nextSelected += 1;\n\n if (nextSelected < this.MAX_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n }\n\n nextSelected = clamp(\n nextSelected,\n Math.max(selected - 1, MIN_INDEX),\n Math.min(selected + 1, this.MAX_INDEX),\n );\n\n if (this.isTabDisabled(nextSelected)) {\n return selected;\n }\n\n return nextSelected;\n };\n\n swipedOverHalfOfContainer = (difference: number) => difference / this.containerWidth >= 0.5;\n\n calculateApplicableDragDifference = ({\n currentSelected,\n nextSelected,\n start,\n end,\n }: {\n currentSelected: number;\n nextSelected: number;\n start: Swipe;\n end: Swipe;\n }) => {\n const difference = getSwipeDifference(start, end);\n const elasticDrag = getElasticDragDifference(difference);\n\n if (swipedLeftToRight(start, end)) {\n if (currentSelected > MIN_INDEX && currentSelected !== nextSelected) {\n return Math.min(difference, this.containerWidth);\n }\n return elasticDrag;\n }\n if (swipedRightToLeft(start, end)) {\n if (currentSelected < this.MAX_INDEX && currentSelected !== nextSelected) {\n return -Math.min(difference, this.containerWidth);\n }\n return -elasticDrag;\n }\n\n return false;\n };\n\n switchTab = (index: number) => {\n const { onTabSelect } = this.props;\n onTabSelect(index);\n };\n\n getTabIndexWithoutDisabledTabs(index: number) {\n return index - this.props.tabs.slice(0, index).filter((tab) => tab.disabled).length;\n }\n\n animateToTab = (index: number, instant?: boolean) => {\n this.animateLine(index);\n\n this.animatePanel(this.getTabIndexWithoutDisabledTabs(index), instant);\n };\n\n animateLine = (index: number) => {\n this.setState((previousState) => ({\n translateLineX: previousState.fullWidthTabs\n ? `${index * 100}%`\n : `${this.getDistanceToSelectedTab(index)}px`,\n }));\n };\n\n // Pass `instant` to set the `translateX` to the new panel with no transition\n animatePanel = (index: number, instant = false) => {\n const { translateTo: currentTranslateTo } = this.state;\n\n const translateFrom = currentTranslateTo;\n const translateTo = -(this.containerWidth * index);\n\n this.setState({\n selectedTabIndex: index,\n isAnimating: !instant && translateFrom !== translateTo,\n translateFrom,\n translateTo,\n });\n };\n\n disableScroll = (event: Event) => {\n const { isSwiping } = this.state;\n\n if (isSwiping) {\n event.preventDefault();\n }\n };\n\n handleTabClick = (index: number) => () => {\n this.switchTab(index);\n };\n\n onKeyDown = (index: number) => (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event && event.key === 'Enter') {\n this.switchTab(index);\n }\n };\n\n handleTouchStart: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const start = {\n x: event.nativeEvent.touches[0].clientX,\n y: event.nativeEvent.touches[0].clientY,\n time: Date.now(),\n };\n this.setState({\n start,\n currentSwipe: [start],\n });\n\n event.persist();\n };\n\n handleTouchMove: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected: currentSelectedFromProps } = this.props;\n const selected = this.getTabIndexWithoutDisabledTabs(currentSelectedFromProps);\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const yAxisDifference = getSwipeDifference(start, end, 'y');\n let { isScrolling, isSwiping } = this.state;\n\n event.persist();\n\n if (!isScrolling && !isSwiping) {\n if (difference > yAxisDifference) {\n isSwiping = true;\n } else {\n isScrolling = true;\n }\n }\n\n this.setState({ isScrolling, isSwiping });\n\n if (isSwiping) {\n const nextSelected = this.getTabToSelect(currentSelectedFromProps, start, end);\n\n this.animateLine(\n this.swipedOverHalfOfContainer(difference) ? nextSelected : currentSelectedFromProps,\n );\n\n const dragDifference = this.calculateApplicableDragDifference({\n currentSelected: currentSelectedFromProps,\n nextSelected,\n start,\n end,\n });\n\n const translateX = dragDifference\n ? -(this.containerWidth * selected) + dragDifference\n : false;\n\n this.setState((state) => ({\n currentSwipe: [...state.currentSwipe, end],\n translateFrom: translateX || state.translateFrom,\n translateTo: translateX || state.translateTo,\n }));\n }\n };\n\n handleTouchEnd: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start, isSwiping } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const velocity = getVelocity([...this.state.currentSwipe, end]);\n\n this.setState({\n currentSwipe: [],\n });\n\n let nextSelected = selected;\n\n event.persist();\n\n if (isSwiping) {\n if (swipeShouldChangeTab(start, end) || this.swipedOverHalfOfContainer(difference)) {\n nextSelected = this.getTabToSelect(nextSelected, start, end);\n }\n\n if (nextSelected !== selected) {\n this.switchTab(nextSelected);\n\n this.setState({\n lastSwipeVelocity: velocity,\n });\n } else {\n this.animateToTab(nextSelected);\n }\n }\n\n this.setState({ isSwiping: false, isScrolling: false });\n };\n\n render() {\n const { tabs, changeTabOnSwipe, name, selected, className, transitionSpacing, headerWidth } =\n this.props;\n const {\n isSwiping,\n translateLineX,\n isAnimating,\n translateFrom,\n translateTo,\n lastSwipeVelocity,\n fullWidthTabs,\n } = this.state;\n\n const spacer = SpacerWidth[transitionSpacing];\n\n const tabsLength = this.filteredTabsLength;\n\n const distanceSwiped = Math.abs(-translateFrom - this.containerWidth * selected);\n\n const remainingContainerToTravel = isSwiping\n ? 1 - distanceSwiped / this.containerWidth\n : 1 - Math.abs(distanceSwiped / this.containerWidth - 1);\n\n const restrictedVelocity =\n (Number.isNaN(remainingContainerToTravel) ? 0 : remainingContainerToTravel) *\n Math.min(10 * Math.E, lastSwipeVelocity * 10 * Math.E);\n\n const hidePanelOverflow = isAnimating || isSwiping;\n\n const sliderWidth = tabsLength * this.containerWidth + spacer * 2;\n\n // Uses `props.panelTransitionSpacing` to add a spacer in-between the `TabPanel` you're transitioning to/from\n const Spacer = ({ id }: { id: string }) =>\n spacer > 0 && (\n <div\n key={id}\n style={{\n width: spacer,\n display: hidePanelOverflow ? 'block' : 'none',\n }}\n />\n );\n\n return (\n <DirectionContext.Consumer>\n {(direction) => {\n const isRTL = direction === Direction.RTL;\n return (\n <div\n ref={this.containerReference}\n className={clsx('tabs', className, {\n 'tabs--auto-width': headerWidth === Width.AUTO,\n })}\n onTouchStart={changeTabOnSwipe ? this.handleTouchStart : undefined}\n onTouchEnd={changeTabOnSwipe ? this.handleTouchEnd : undefined}\n onTouchMove={changeTabOnSwipe ? this.handleTouchMove : undefined}\n >\n <TabList>\n {tabs.map(({ title, disabled }, index) => {\n return (\n <Tab\n key={title}\n ref={(node) => {\n this.tabRefs[index] = node;\n }}\n id={`${name}-tab-${index}`}\n panelId={`${name}-panel-${index}`}\n selected={selected === index}\n disabled={disabled}\n focusTab={() => {\n if (this.containerReference.current?.contains(document.activeElement)) {\n this.tabRefs[index]?.focus();\n }\n }}\n onClick={disabled ? undefined : this.handleTabClick(index)}\n onKeyDown={this.onKeyDown(index)}\n {...(fullWidthTabs\n ? { style: { width: `${(1 / tabs.length) * 100}%` } }\n : {})}\n >\n {title}\n </Tab>\n );\n })}\n {translateLineX ? (\n <li\n role=\"none\"\n className=\"tabs__line\"\n style={{\n width: this.getTabLineWidth(),\n transform: isRTL\n ? `translateX(-${translateLineX})`\n : `translateX(${translateLineX})`,\n }}\n />\n ) : null}\n </TabList>\n <div\n ref={this.setContainerRefAndWidth}\n className=\"tabs__panel-container\"\n style={{\n overflow: hidePanelOverflow ? 'hidden' : 'visible',\n }}\n >\n <Spring\n from={{\n transform: `translateX(${translateFrom - spacer}px)`,\n }}\n to={{\n transform: `translateX(${translateTo - spacer}px)`,\n }}\n config={{\n precision: isSwiping ? 1 : 0.01,\n velocity: !isSwiping ? restrictedVelocity : 0,\n clamp: true,\n }}\n onRest={() => {\n if (isAnimating) {\n this.setState({\n isAnimating: false,\n lastSwipeVelocity: 0,\n });\n }\n }}\n >\n {(props) => (\n <animated.div\n className=\"tabs__slider\"\n style={{\n width: hidePanelOverflow ? `${sliderWidth}px` : '100%',\n transform: hidePanelOverflow ? props.transform : 'translateX(0px)',\n }}\n >\n {tabs.map(({ content, disabled }, index) =>\n !disabled ? (\n <Fragment key={`${tabs[index].title}-fragment`}>\n {index === selected && <Spacer id=\"left-spacer\" />}\n <TabPanel\n key={tabs[index].title}\n tabId={`${name}-tab-${index}`}\n id={`${name}-panel-${index}`}\n style={{\n width: hidePanelOverflow ? `${this.containerWidth}px` : '100%',\n display: hidePanelOverflow || index === selected ? 'block' : 'none',\n }}\n >\n {content}\n </TabPanel>\n {index === selected && <Spacer id=\"right-spacer\" />}\n </Fragment>\n ) : null,\n )}\n </animated.div>\n )}\n </Spring>\n </div>\n </div>\n );\n }}\n </DirectionContext.Consumer>\n );\n }\n}\n"],"names":["MIN_INDEX","SpacerWidth","default","xs","sm","md","lg","Tabs","Component","defaultProps","changeTabOnSwipe","transitionSpacing","headerWidth","Width","BLOCK","containerReference","createRef","constructor","props","state","start","translateX","translateFrom","translateTo","translateLineX","isAnimating","isSwiping","isScrolling","lastSwipeVelocity","fullWidthTabs","currentSwipe","selectedTabIndex","selected","container","containerWidth","tabRefs","filteredTabsLength","tabs","filter","tab","disabled","length","MAX_INDEX","componentDidMount","setTabWidth","switchTab","clamp","animateToTab","document","body","addEventListener","disableScroll","passive","window","handleResize","componentDidUpdate","previousProps","previousState","currentSelected","previousSelected","currentSelectedTab","currentSelectedTabIsDisabled","previousSelectedTab","previousSelectedTabIsDisabled","currentTabsLength","previousTabsLength","currentDisabledTabsLength","previousDisabledTabsLength","currentHeaderWidth","previousFullHeaderWidth","animatePanelsOnClick","instantOnClick","componentWillUnmount","removeEventListener","setContainerWidth","setState","setContainerRefAndWidth","node","width","getBoundingClientRect","isTabDisabled","index","getAllTabsWidth","map","reference","reduce","a","b","getDistanceToSelectedTab","_","idx","allTabsWidth","AUTO","getTabLineWidth","getTabToSelect","end","nextSelected","swipedLeftToRight","swipedRightToLeft","Math","max","min","swipedOverHalfOfContainer","difference","calculateApplicableDragDifference","getSwipeDifference","elasticDrag","getElasticDragDifference","onTabSelect","getTabIndexWithoutDisabledTabs","slice","instant","animateLine","animatePanel","currentTranslateTo","event","preventDefault","handleTabClick","onKeyDown","key","handleTouchStart","x","nativeEvent","touches","clientX","y","clientY","time","Date","now","persist","handleTouchMove","currentSelectedFromProps","changedTouches","yAxisDifference","dragDifference","handleTouchEnd","velocity","getVelocity","swipeShouldChangeTab","render","name","className","spacer","tabsLength","distanceSwiped","abs","remainingContainerToTravel","restrictedVelocity","Number","isNaN","E","hidePanelOverflow","sliderWidth","Spacer","id","_jsx","style","display","DirectionContext","Consumer","children","direction","isRTL","Direction","RTL","_jsxs","ref","clsx","onTouchStart","undefined","onTouchEnd","onTouchMove","TabList","title","Tab","panelId","focusTab","current","contains","activeElement","focus","onClick","role","transform","overflow","Spring","from","to","config","precision","onRest","animated","div","content","Fragment","TabPanel","tabId"],"mappings":"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"}
|
package/build/tabs/Tabs.mjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Spring, animated } from '@react-spring/web';
|
|
2
2
|
import { clsx } from 'clsx';
|
|
3
3
|
import clamp from 'lodash.clamp';
|
|
4
|
-
import PropTypes from 'prop-types';
|
|
5
4
|
import { Component, createRef, Fragment } from 'react';
|
|
6
5
|
import { DirectionContext } from '../provider/direction/DirectionProvider.mjs';
|
|
7
6
|
import Tab from './Tab.mjs';
|
|
@@ -11,11 +10,8 @@ import { swipedLeftToRight, swipedRightToLeft, getSwipeDifference, getVelocity,
|
|
|
11
10
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
12
11
|
import { Width } from '../common/propsValues/width.mjs';
|
|
13
12
|
import { Direction } from '../common/direction.mjs';
|
|
14
|
-
import { Size } from '../common/propsValues/size.mjs';
|
|
15
13
|
|
|
16
|
-
/* eslint-disable react/forbid-dom-props */
|
|
17
14
|
const MIN_INDEX = 0;
|
|
18
|
-
const enabledTabsFilter = tab => !tab.disabled;
|
|
19
15
|
const SpacerWidth = {
|
|
20
16
|
default: 0,
|
|
21
17
|
xs: 8,
|
|
@@ -24,7 +20,11 @@ const SpacerWidth = {
|
|
|
24
20
|
lg: 32
|
|
25
21
|
};
|
|
26
22
|
class Tabs extends Component {
|
|
27
|
-
|
|
23
|
+
static defaultProps = {
|
|
24
|
+
changeTabOnSwipe: true,
|
|
25
|
+
transitionSpacing: 'default',
|
|
26
|
+
headerWidth: Width.BLOCK
|
|
27
|
+
};
|
|
28
28
|
containerReference = /*#__PURE__*/createRef();
|
|
29
29
|
constructor(props) {
|
|
30
30
|
super(props);
|
|
@@ -38,14 +38,16 @@ class Tabs extends Component {
|
|
|
38
38
|
isSwiping: false,
|
|
39
39
|
isScrolling: false,
|
|
40
40
|
lastSwipeVelocity: 0,
|
|
41
|
-
fullWidthTabs: props.headerWidth === Width.BLOCK
|
|
41
|
+
fullWidthTabs: props.headerWidth === Width.BLOCK,
|
|
42
|
+
currentSwipe: [],
|
|
43
|
+
selectedTabIndex: props.selected
|
|
42
44
|
};
|
|
43
45
|
}
|
|
44
46
|
container = null;
|
|
45
47
|
containerWidth = 0;
|
|
46
48
|
tabRefs = [];
|
|
47
49
|
get filteredTabsLength() {
|
|
48
|
-
return this.props.tabs.filter(
|
|
50
|
+
return this.props.tabs.filter(tab => !tab.disabled).length;
|
|
49
51
|
}
|
|
50
52
|
get MAX_INDEX() {
|
|
51
53
|
return this.props.tabs.length - 1;
|
|
@@ -69,13 +71,13 @@ class Tabs extends Component {
|
|
|
69
71
|
const currentSelected = this.props.selected;
|
|
70
72
|
const previousSelected = previousProps.selected;
|
|
71
73
|
const currentSelectedTab = this.props.tabs[currentSelected];
|
|
72
|
-
const currentSelectedTabIsDisabled = currentSelectedTab
|
|
74
|
+
const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;
|
|
73
75
|
const previousSelectedTab = previousProps.tabs[previousSelected];
|
|
74
|
-
const previousSelectedTabIsDisabled = previousSelectedTab
|
|
76
|
+
const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;
|
|
75
77
|
const currentTabsLength = this.props.tabs.length;
|
|
76
78
|
const previousTabsLength = previousProps.tabs.length;
|
|
77
|
-
const currentDisabledTabsLength = this.props.tabs.filter(
|
|
78
|
-
const previousDisabledTabsLength = previousProps.tabs.filter(
|
|
79
|
+
const currentDisabledTabsLength = this.props.tabs.filter(tab => !tab.disabled).length;
|
|
80
|
+
const previousDisabledTabsLength = previousProps.tabs.filter(tab => !tab.disabled).length;
|
|
79
81
|
const currentHeaderWidth = this.props.headerWidth;
|
|
80
82
|
const previousFullHeaderWidth = previousProps.headerWidth;
|
|
81
83
|
const {
|
|
@@ -119,7 +121,7 @@ class Tabs extends Component {
|
|
|
119
121
|
const {
|
|
120
122
|
tabs
|
|
121
123
|
} = this.props;
|
|
122
|
-
return tabs[index]
|
|
124
|
+
return tabs[index]?.disabled ?? false;
|
|
123
125
|
};
|
|
124
126
|
getAllTabsWidth = () => {
|
|
125
127
|
return this.tabRefs.map(reference => {
|
|
@@ -166,7 +168,6 @@ class Tabs extends Component {
|
|
|
166
168
|
const width = reference ? reference.getBoundingClientRect().width : 0;
|
|
167
169
|
return `${width}px`;
|
|
168
170
|
};
|
|
169
|
-
|
|
170
171
|
/*
|
|
171
172
|
* Gets the next tab that should be selected based on the swipe direction
|
|
172
173
|
* and the current selected tab (is called recursively to account for disabled tabs).
|
|
@@ -220,7 +221,7 @@ class Tabs extends Component {
|
|
|
220
221
|
onTabSelect(index);
|
|
221
222
|
};
|
|
222
223
|
getTabIndexWithoutDisabledTabs(index) {
|
|
223
|
-
return index - this.props.tabs.slice(0, index).filter(tab =>
|
|
224
|
+
return index - this.props.tabs.slice(0, index).filter(tab => tab.disabled).length;
|
|
224
225
|
}
|
|
225
226
|
animateToTab = (index, instant) => {
|
|
226
227
|
this.animateLine(index);
|
|
@@ -231,7 +232,6 @@ class Tabs extends Component {
|
|
|
231
232
|
translateLineX: previousState.fullWidthTabs ? `${index * 100}%` : `${this.getDistanceToSelectedTab(index)}px`
|
|
232
233
|
}));
|
|
233
234
|
};
|
|
234
|
-
|
|
235
235
|
// Pass `instant` to set the `translateX` to the new panel with no transition
|
|
236
236
|
animatePanel = (index, instant = false) => {
|
|
237
237
|
const {
|
|
@@ -278,6 +278,9 @@ class Tabs extends Component {
|
|
|
278
278
|
const {
|
|
279
279
|
start
|
|
280
280
|
} = this.state;
|
|
281
|
+
if (start == null) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
281
284
|
const {
|
|
282
285
|
selected: currentSelectedFromProps
|
|
283
286
|
} = this.props;
|
|
@@ -327,6 +330,9 @@ class Tabs extends Component {
|
|
|
327
330
|
start,
|
|
328
331
|
isSwiping
|
|
329
332
|
} = this.state;
|
|
333
|
+
if (start == null) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
330
336
|
const {
|
|
331
337
|
selected
|
|
332
338
|
} = this.props;
|
|
@@ -386,7 +392,6 @@ class Tabs extends Component {
|
|
|
386
392
|
const restrictedVelocity = (Number.isNaN(remainingContainerToTravel) ? 0 : remainingContainerToTravel) * Math.min(10 * Math.E, lastSwipeVelocity * 10 * Math.E);
|
|
387
393
|
const hidePanelOverflow = isAnimating || isSwiping;
|
|
388
394
|
const sliderWidth = tabsLength * this.containerWidth + spacer * 2;
|
|
389
|
-
|
|
390
395
|
// Uses `props.panelTransitionSpacing` to add a spacer in-between the `TabPanel` you're transitioning to/from
|
|
391
396
|
const Spacer = ({
|
|
392
397
|
id
|
|
@@ -422,10 +427,10 @@ class Tabs extends Component {
|
|
|
422
427
|
disabled: disabled,
|
|
423
428
|
focusTab: () => {
|
|
424
429
|
if (this.containerReference.current?.contains(document.activeElement)) {
|
|
425
|
-
this.tabRefs[index]
|
|
430
|
+
this.tabRefs[index]?.focus();
|
|
426
431
|
}
|
|
427
432
|
},
|
|
428
|
-
onClick: disabled ?
|
|
433
|
+
onClick: disabled ? undefined : this.handleTabClick(index),
|
|
429
434
|
onKeyDown: this.onKeyDown(index),
|
|
430
435
|
...(fullWidthTabs ? {
|
|
431
436
|
style: {
|
|
@@ -500,34 +505,6 @@ class Tabs extends Component {
|
|
|
500
505
|
});
|
|
501
506
|
}
|
|
502
507
|
}
|
|
503
|
-
const SpacerSizes = {
|
|
504
|
-
...Size,
|
|
505
|
-
NONE: 'default'
|
|
506
|
-
};
|
|
507
|
-
Tabs.propTypes = {
|
|
508
|
-
tabs: PropTypes.arrayOf(PropTypes.shape({
|
|
509
|
-
title: PropTypes.string.isRequired,
|
|
510
|
-
content: PropTypes.node.isRequired,
|
|
511
|
-
disabled: PropTypes.bool.isRequired
|
|
512
|
-
})).isRequired,
|
|
513
|
-
selected: PropTypes.number.isRequired,
|
|
514
|
-
name: PropTypes.string.isRequired,
|
|
515
|
-
animatePanelsOnClick: PropTypes.bool,
|
|
516
|
-
changeTabOnSwipe: PropTypes.bool,
|
|
517
|
-
className: PropTypes.string,
|
|
518
|
-
transitionSpacing: PropTypes.oneOf(['default', 'xs', 'sm', 'md', 'lg']),
|
|
519
|
-
headerWidth: PropTypes.oneOf(['auto', 'block']),
|
|
520
|
-
id: PropTypes.string,
|
|
521
|
-
onTabSelect: PropTypes.func.isRequired
|
|
522
|
-
};
|
|
523
|
-
Tabs.defaultProps = {
|
|
524
|
-
animatePanelsOnClick: false,
|
|
525
|
-
changeTabOnSwipe: true,
|
|
526
|
-
className: '',
|
|
527
|
-
transitionSpacing: SpacerSizes.NONE,
|
|
528
|
-
headerWidth: Width.BLOCK
|
|
529
|
-
};
|
|
530
|
-
var Tabs$1 = Tabs;
|
|
531
508
|
|
|
532
|
-
export { Tabs
|
|
509
|
+
export { Tabs as default };
|
|
533
510
|
//# sourceMappingURL=Tabs.mjs.map
|