@elliemae/ds-tabs 2.3.0-alpha.9 → 2.3.0-next.3

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.
Files changed (174) hide show
  1. package/cjs/DSTabs.js +45 -0
  2. package/cjs/DSTabsCTX.js +30 -0
  3. package/cjs/DSTabsDatatestid.js +18 -0
  4. package/cjs/DSTabsTypes.js +2 -0
  5. package/cjs/config/useCrossRef.js +17 -0
  6. package/cjs/config/useTabs.js +51 -0
  7. package/cjs/defaultProps.js +27 -0
  8. package/cjs/exportsRelated/DSTab.js +32 -0
  9. package/cjs/index.js +17 -0
  10. package/cjs/parts/carousel/Carousel.js +69 -0
  11. package/cjs/parts/carousel/styles.js +65 -0
  12. package/cjs/parts/carousel/useCarousel.js +78 -0
  13. package/cjs/parts/carousel/useCarouselCallbacks.js +72 -0
  14. package/cjs/parts/tabBar/TabBar.js +168 -0
  15. package/cjs/parts/tabBar/styles.js +200 -0
  16. package/cjs/parts/tabBar/useTabBar.js +87 -0
  17. package/cjs/parts/tabsContent/TabsContent.js +49 -0
  18. package/cjs/parts/tabsContent/styles.js +15 -0
  19. package/cjs/parts/tabsPanel/TabsPanels.js +77 -0
  20. package/cjs/parts/tabsPanel/styles.js +25 -0
  21. package/cjs/propTypes.js +33 -0
  22. package/cjs/utils/constants.js +28 -0
  23. package/cjs/utils/helpers.js +75 -0
  24. package/cjs/utils/hooks/useKeyboardNavigation.js +61 -0
  25. package/cjs/utils/hooks/useTabsCallbacks.js +41 -0
  26. package/esm/DSTabs.js +35 -0
  27. package/esm/DSTabsCTX.js +25 -0
  28. package/esm/DSTabsDatatestid.js +14 -0
  29. package/esm/DSTabsTypes.js +1 -0
  30. package/{dist/esm → esm}/config/useCrossRef.js +4 -6
  31. package/esm/config/useTabs.js +47 -0
  32. package/{dist/esm → esm}/defaultProps.js +8 -9
  33. package/esm/exportsRelated/DSTab.js +21 -0
  34. package/esm/index.js +4 -0
  35. package/esm/parts/carousel/Carousel.js +61 -0
  36. package/esm/parts/carousel/styles.js +54 -0
  37. package/{dist/esm → esm}/parts/carousel/useCarousel.js +34 -15
  38. package/{dist/esm → esm}/parts/carousel/useCarouselCallbacks.js +28 -20
  39. package/esm/parts/tabBar/TabBar.js +159 -0
  40. package/esm/parts/tabBar/styles.js +186 -0
  41. package/{dist/esm → esm}/parts/tabBar/useTabBar.js +35 -27
  42. package/esm/parts/tabsContent/TabsContent.js +40 -0
  43. package/esm/parts/tabsContent/styles.js +7 -0
  44. package/esm/parts/tabsPanel/TabsPanels.js +67 -0
  45. package/esm/parts/tabsPanel/styles.js +17 -0
  46. package/esm/propTypes.js +28 -0
  47. package/esm/utils/constants.js +20 -0
  48. package/{dist/esm → esm}/utils/helpers.js +28 -23
  49. package/esm/utils/hooks/useKeyboardNavigation.js +57 -0
  50. package/esm/utils/hooks/useTabsCallbacks.js +37 -0
  51. package/package.json +70 -72
  52. package/{dist/types → types}/DSTabs.d.ts +2 -2
  53. package/{dist/types → types}/DSTabsCTX.d.ts +0 -0
  54. package/{dist/types → types}/DSTabsDatatestid.d.ts +0 -0
  55. package/{dist/types → types}/DSTabsTypes.d.ts +0 -0
  56. package/{dist/types → types}/config/useCrossRef.d.ts +0 -0
  57. package/{dist/types → types}/config/useTabs.d.ts +0 -0
  58. package/{dist/types → types}/defaultProps.d.ts +0 -0
  59. package/{dist/types → types}/exportsRelated/DSTab.d.ts +0 -0
  60. package/{dist/types → types}/index.d.ts +0 -0
  61. package/{dist/types → types}/parts/carousel/Carousel.d.ts +0 -0
  62. package/{dist/types → types}/parts/carousel/styles.d.ts +1 -1
  63. package/{dist/types → types}/parts/carousel/useCarousel.d.ts +0 -0
  64. package/{dist/types → types}/parts/carousel/useCarouselCallbacks.d.ts +0 -0
  65. package/{dist/types → types}/parts/tabBar/TabBar.d.ts +0 -0
  66. package/{dist/types → types}/parts/tabBar/styles.d.ts +0 -0
  67. package/{dist/types → types}/parts/tabBar/useTabBar.d.ts +0 -0
  68. package/{dist/types → types}/parts/tabsContent/TabsContent.d.ts +0 -0
  69. package/{dist/types → types}/parts/tabsContent/styles.d.ts +0 -0
  70. package/{dist/types → types}/parts/tabsPanel/TabsPanels.d.ts +0 -0
  71. package/{dist/types → types}/parts/tabsPanel/styles.d.ts +0 -0
  72. package/{dist/types → types}/propTypes.d.ts +0 -0
  73. package/{dist/types → types}/tests/DSTabs.callbacks.test.d.ts +0 -0
  74. package/{dist/types → types}/tests/DSTabs.func.test.d.ts +0 -0
  75. package/{dist/types → types}/tests/DSTabs.keyboard.test.d.ts +0 -0
  76. package/{dist/types → types}/tests/DSTabs.test.d.ts +0 -0
  77. package/{dist/types → types}/utils/constants.d.ts +0 -0
  78. package/{dist/types → types}/utils/helpers.d.ts +0 -0
  79. package/{dist/types → types}/utils/hooks/useKeyboardNavigation.d.ts +0 -0
  80. package/{dist/types → types}/utils/hooks/useTabsCallbacks.d.ts +0 -0
  81. package/dist/cjs/DSTabs.js +0 -63
  82. package/dist/cjs/DSTabs.js.map +0 -7
  83. package/dist/cjs/DSTabsCTX.js +0 -56
  84. package/dist/cjs/DSTabsCTX.js.map +0 -7
  85. package/dist/cjs/DSTabsDatatestid.js +0 -46
  86. package/dist/cjs/DSTabsDatatestid.js.map +0 -7
  87. package/dist/cjs/DSTabsTypes.js +0 -27
  88. package/dist/cjs/DSTabsTypes.js.map +0 -7
  89. package/dist/cjs/config/useCrossRef.js +0 -44
  90. package/dist/cjs/config/useCrossRef.js.map +0 -7
  91. package/dist/cjs/config/useTabs.js +0 -68
  92. package/dist/cjs/config/useTabs.js.map +0 -7
  93. package/dist/cjs/defaultProps.js +0 -53
  94. package/dist/cjs/defaultProps.js.map +0 -7
  95. package/dist/cjs/exportsRelated/DSTab.js +0 -46
  96. package/dist/cjs/exportsRelated/DSTab.js.map +0 -7
  97. package/dist/cjs/index.js +0 -38
  98. package/dist/cjs/index.js.map +0 -7
  99. package/dist/cjs/parts/carousel/Carousel.js +0 -77
  100. package/dist/cjs/parts/carousel/Carousel.js.map +0 -7
  101. package/dist/cjs/parts/carousel/styles.js +0 -79
  102. package/dist/cjs/parts/carousel/styles.js.map +0 -7
  103. package/dist/cjs/parts/carousel/useCarousel.js +0 -80
  104. package/dist/cjs/parts/carousel/useCarousel.js.map +0 -7
  105. package/dist/cjs/parts/carousel/useCarouselCallbacks.js +0 -89
  106. package/dist/cjs/parts/carousel/useCarouselCallbacks.js.map +0 -7
  107. package/dist/cjs/parts/tabBar/TabBar.js +0 -171
  108. package/dist/cjs/parts/tabBar/TabBar.js.map +0 -7
  109. package/dist/cjs/parts/tabBar/styles.js +0 -294
  110. package/dist/cjs/parts/tabBar/styles.js.map +0 -7
  111. package/dist/cjs/parts/tabBar/useTabBar.js +0 -100
  112. package/dist/cjs/parts/tabBar/useTabBar.js.map +0 -7
  113. package/dist/cjs/parts/tabsContent/TabsContent.js +0 -53
  114. package/dist/cjs/parts/tabsContent/TabsContent.js.map +0 -7
  115. package/dist/cjs/parts/tabsContent/styles.js +0 -39
  116. package/dist/cjs/parts/tabsContent/styles.js.map +0 -7
  117. package/dist/cjs/parts/tabsPanel/TabsPanels.js +0 -79
  118. package/dist/cjs/parts/tabsPanel/TabsPanels.js.map +0 -7
  119. package/dist/cjs/parts/tabsPanel/styles.js +0 -45
  120. package/dist/cjs/parts/tabsPanel/styles.js.map +0 -7
  121. package/dist/cjs/propTypes.js +0 -58
  122. package/dist/cjs/propTypes.js.map +0 -7
  123. package/dist/cjs/utils/constants.js +0 -56
  124. package/dist/cjs/utils/constants.js.map +0 -7
  125. package/dist/cjs/utils/helpers.js +0 -88
  126. package/dist/cjs/utils/helpers.js.map +0 -7
  127. package/dist/cjs/utils/hooks/useKeyboardNavigation.js +0 -77
  128. package/dist/cjs/utils/hooks/useKeyboardNavigation.js.map +0 -7
  129. package/dist/cjs/utils/hooks/useTabsCallbacks.js +0 -60
  130. package/dist/cjs/utils/hooks/useTabsCallbacks.js.map +0 -7
  131. package/dist/esm/DSTabs.js +0 -34
  132. package/dist/esm/DSTabs.js.map +0 -7
  133. package/dist/esm/DSTabsCTX.js +0 -27
  134. package/dist/esm/DSTabsCTX.js.map +0 -7
  135. package/dist/esm/DSTabsDatatestid.js +0 -17
  136. package/dist/esm/DSTabsDatatestid.js.map +0 -7
  137. package/dist/esm/DSTabsTypes.js +0 -2
  138. package/dist/esm/DSTabsTypes.js.map +0 -7
  139. package/dist/esm/config/useCrossRef.js.map +0 -7
  140. package/dist/esm/config/useTabs.js +0 -39
  141. package/dist/esm/config/useTabs.js.map +0 -7
  142. package/dist/esm/defaultProps.js.map +0 -7
  143. package/dist/esm/exportsRelated/DSTab.js +0 -17
  144. package/dist/esm/exportsRelated/DSTab.js.map +0 -7
  145. package/dist/esm/index.js +0 -9
  146. package/dist/esm/index.js.map +0 -7
  147. package/dist/esm/parts/carousel/Carousel.js +0 -48
  148. package/dist/esm/parts/carousel/Carousel.js.map +0 -7
  149. package/dist/esm/parts/carousel/styles.js +0 -50
  150. package/dist/esm/parts/carousel/styles.js.map +0 -7
  151. package/dist/esm/parts/carousel/useCarousel.js.map +0 -7
  152. package/dist/esm/parts/carousel/useCarouselCallbacks.js.map +0 -7
  153. package/dist/esm/parts/tabBar/TabBar.js +0 -149
  154. package/dist/esm/parts/tabBar/TabBar.js.map +0 -7
  155. package/dist/esm/parts/tabBar/styles.js +0 -265
  156. package/dist/esm/parts/tabBar/styles.js.map +0 -7
  157. package/dist/esm/parts/tabBar/useTabBar.js.map +0 -7
  158. package/dist/esm/parts/tabsContent/TabsContent.js +0 -24
  159. package/dist/esm/parts/tabsContent/TabsContent.js.map +0 -7
  160. package/dist/esm/parts/tabsContent/styles.js +0 -10
  161. package/dist/esm/parts/tabsContent/styles.js.map +0 -7
  162. package/dist/esm/parts/tabsPanel/TabsPanels.js +0 -50
  163. package/dist/esm/parts/tabsPanel/TabsPanels.js.map +0 -7
  164. package/dist/esm/parts/tabsPanel/styles.js +0 -16
  165. package/dist/esm/parts/tabsPanel/styles.js.map +0 -7
  166. package/dist/esm/propTypes.js +0 -29
  167. package/dist/esm/propTypes.js.map +0 -7
  168. package/dist/esm/utils/constants.js +0 -27
  169. package/dist/esm/utils/constants.js.map +0 -7
  170. package/dist/esm/utils/helpers.js.map +0 -7
  171. package/dist/esm/utils/hooks/useKeyboardNavigation.js +0 -48
  172. package/dist/esm/utils/hooks/useKeyboardNavigation.js.map +0 -7
  173. package/dist/esm/utils/hooks/useTabsCallbacks.js +0 -31
  174. package/dist/esm/utils/hooks/useTabsCallbacks.js.map +0 -7
package/cjs/DSTabs.js ADDED
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _jsx = require('@babel/runtime/helpers/jsx');
6
+ var reactDesc = require('react-desc');
7
+ var propTypes = require('./propTypes.js');
8
+ var DSTabsCTX = require('./DSTabsCTX.js');
9
+ var TabsContent = require('./parts/tabsContent/TabsContent.js');
10
+ var useTabs = require('./config/useTabs.js');
11
+ var useCrossRef = require('./config/useCrossRef.js');
12
+ var constants = require('./utils/constants.js');
13
+
14
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
15
+
16
+ var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
17
+
18
+ var _TabsContent, _TabsContent2;
19
+
20
+ const DSTabs = props => {
21
+ const ctx = useTabs.useTabs(props);
22
+ const crossRefsCtx = useCrossRef.useCrossRef();
23
+ const {
24
+ type
25
+ } = props;
26
+
27
+ if (type === constants.TabTypes.SUBTABS) {
28
+ return /*#__PURE__*/_jsx__default["default"](DSTabsCTX.DSTabsContext.Provider, {
29
+ value: ctx
30
+ }, void 0, _TabsContent || (_TabsContent = /*#__PURE__*/_jsx__default["default"](TabsContent.TabsContent, {})));
31
+ }
32
+
33
+ return /*#__PURE__*/_jsx__default["default"](DSTabsCTX.DSTabsCrossRefContext.Provider, {
34
+ value: crossRefsCtx
35
+ }, void 0, /*#__PURE__*/_jsx__default["default"](DSTabsCTX.DSTabsContext.Provider, {
36
+ value: ctx
37
+ }, void 0, _TabsContent2 || (_TabsContent2 = /*#__PURE__*/_jsx__default["default"](TabsContent.TabsContent, {}))));
38
+ };
39
+
40
+ const DSTabsWithSchema = reactDesc.describe(DSTabs);
41
+ DSTabsWithSchema.propTypes = propTypes.tabsPropTypes;
42
+
43
+ exports.DSTabs = DSTabs;
44
+ exports.DSTabsWithSchema = DSTabsWithSchema;
45
+ exports["default"] = DSTabs;
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var defaultProps = require('./defaultProps.js');
7
+
8
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
9
+ const noop = () => {};
10
+
11
+ const defaultContext = {
12
+ props: defaultProps.tabsDefaultProps,
13
+ tabsRef: /*#__PURE__*/React.createRef(),
14
+ tabsListRef: /*#__PURE__*/React.createRef(),
15
+ carouselOnlyListRef: /*#__PURE__*/React.createRef(),
16
+ focusableTabsRef: /*#__PURE__*/React.createRef(),
17
+ tabsRefAsArray: /*#__PURE__*/React.createRef(),
18
+ actualActiveTabRef: /*#__PURE__*/React.createRef(),
19
+ setInternalActiveTab: noop,
20
+ actualActiveTab: ''
21
+ };
22
+ const defaultCrossRefsContext = {
23
+ lastTabInternalRef: /*#__PURE__*/React.createRef(),
24
+ firstSubtabInternalRef: /*#__PURE__*/React.createRef()
25
+ };
26
+ const DSTabsContext = /*#__PURE__*/React.createContext(defaultContext);
27
+ const DSTabsCrossRefContext = /*#__PURE__*/React.createContext(defaultCrossRefsContext);
28
+
29
+ exports.DSTabsContext = DSTabsContext;
30
+ exports.DSTabsCrossRefContext = DSTabsCrossRefContext;
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const DSTabsDatatestid = {
6
+ TABS_CONTAINER: 'ds-tabs-container',
7
+ TAB_BUTTON: 'ds-tabs-tab-button',
8
+ SUBTAB_BUTTON: 'ds-tabs-subtab-button',
9
+ TAB_PANEL: 'ds-tabs-tab-panel',
10
+ SUB_TAB_LIST: 'subtabs-list',
11
+ TAB_LIST: 'tab-list',
12
+ CAROUSEL: {
13
+ BUTTON_RIGHT: 'chevron-right',
14
+ BUTTON_LEFT: 'chevron-left'
15
+ }
16
+ };
17
+
18
+ exports.DSTabsDatatestid = DSTabsDatatestid;
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+
7
+ const useCrossRef = () => {
8
+ const firstSubtabInternalRef = React.useRef();
9
+ const lastTabInternalRef = React.useRef();
10
+ const ctx = React.useMemo(() => ({
11
+ firstSubtabInternalRef,
12
+ lastTabInternalRef
13
+ }), []);
14
+ return ctx;
15
+ };
16
+
17
+ exports.useCrossRef = useCrossRef;
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('core-js/modules/web.dom-collections.iterator.js');
6
+ require('core-js/modules/esnext.async-iterator.find.js');
7
+ require('core-js/modules/esnext.iterator.constructor.js');
8
+ require('core-js/modules/esnext.iterator.find.js');
9
+ var React = require('react');
10
+ var dsPropsHelpers = require('@elliemae/ds-props-helpers');
11
+ var defaultProps = require('../defaultProps.js');
12
+
13
+ const useTabs = props => {
14
+ var _children$, _children$$props;
15
+
16
+ const propsWithDefaults = dsPropsHelpers.useMemoMergePropsWithDefault(props, defaultProps.tabsDefaultProps);
17
+ const {
18
+ activeTab,
19
+ children
20
+ } = propsWithDefaults;
21
+ const tabsRef = React.useRef({});
22
+ const tabsRefAsArray = React.useRef([]);
23
+ const focusableTabsRef = React.useRef([]);
24
+ const carouselOnlyListRef = React.useRef(null);
25
+ const tabsListRef = React.useRef(null);
26
+ const actualActiveTabRef = React.useRef(null);
27
+ const [internalActiveTab, setInternalActiveTab] = React.useState(children === null || children === void 0 ? void 0 : (_children$ = children[0]) === null || _children$ === void 0 ? void 0 : (_children$$props = _children$.props) === null || _children$$props === void 0 ? void 0 : _children$$props.tabId);
28
+ const actualActiveTab = React.useMemo(() => {
29
+ if (activeTab !== undefined) return activeTab;
30
+ return internalActiveTab;
31
+ }, [activeTab, internalActiveTab]);
32
+ React.useEffect(() => {
33
+ var _focusableTabsRef$cur;
34
+
35
+ actualActiveTabRef.current = (_focusableTabsRef$cur = focusableTabsRef.current.find(el => el.dataset.tabId === actualActiveTab)) !== null && _focusableTabsRef$cur !== void 0 ? _focusableTabsRef$cur : null;
36
+ }, [actualActiveTab]);
37
+ const ctx = React.useMemo(() => ({
38
+ props: propsWithDefaults,
39
+ tabsRef,
40
+ focusableTabsRef,
41
+ tabsListRef,
42
+ tabsRefAsArray,
43
+ setInternalActiveTab,
44
+ actualActiveTab,
45
+ actualActiveTabRef,
46
+ carouselOnlyListRef
47
+ }), [actualActiveTab, propsWithDefaults]);
48
+ return ctx;
49
+ };
50
+
51
+ exports.useTabs = useTabs;
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var constants = require('./utils/constants.js');
6
+
7
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
8
+ const noop = () => {};
9
+
10
+ const tabsDefaultProps = {
11
+ containerProps: {},
12
+ animated: true,
13
+ enableMouseEvents: false,
14
+ allowTextSelection: false,
15
+ onTabChange: noop,
16
+ tabsListAriaLabel: 'Tab list',
17
+ type: constants.TabTypes.NORMAL,
18
+ onlyRenderActiveTab: false,
19
+ withCarousel: false,
20
+ isDSMobile: false,
21
+ showSelectionIndicator: true,
22
+ children: [],
23
+ fixedTabsHeaders: false,
24
+ showSeparator: true
25
+ };
26
+
27
+ exports.tabsDefaultProps = tabsDefaultProps;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('core-js/modules/esnext.async-iterator.filter.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.filter.js');
8
+ require('core-js/modules/esnext.async-iterator.for-each.js');
9
+ require('core-js/modules/esnext.iterator.for-each.js');
10
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
11
+ var React = require('react');
12
+ var reactDesc = require('react-desc');
13
+ var propTypes = require('../propTypes.js');
14
+ var jsxRuntime = require('react/jsx-runtime');
15
+
16
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
+
18
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
19
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
20
+
21
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22
+
23
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
24
+
25
+ const DSTab = props => /*#__PURE__*/jsxRuntime.jsx(React__default["default"].Fragment, _objectSpread({}, props));
26
+
27
+ const DSTabWithSchema = reactDesc.describe(DSTab);
28
+ DSTabWithSchema.propTypes = propTypes.tabPropTypes;
29
+
30
+ exports.DSTab = DSTab;
31
+ exports.DSTabWithSchema = DSTabWithSchema;
32
+ exports["default"] = DSTab;
package/cjs/index.js ADDED
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var DSTab = require('./exportsRelated/DSTab.js');
6
+ var DSTabs = require('./DSTabs.js');
7
+ var constants = require('./utils/constants.js');
8
+ var DSTabsDatatestid = require('./DSTabsDatatestid.js');
9
+
10
+
11
+
12
+ exports.DSTab = DSTab.DSTab;
13
+ exports.DSTabWithSchema = DSTab.DSTabWithSchema;
14
+ exports.DSTabs = DSTabs.DSTabs;
15
+ exports.DSTabsWithSchema = DSTabs.DSTabsWithSchema;
16
+ exports.TabTypes = constants.TabTypes;
17
+ exports.DSTabsDatatestid = DSTabsDatatestid.DSTabsDatatestid;
@@ -0,0 +1,69 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _jsx = require('@babel/runtime/helpers/jsx');
6
+ var React = require('react');
7
+ var dsIcon = require('@elliemae/ds-icon');
8
+ var dsButton = require('@elliemae/ds-button');
9
+ var dsIcons = require('@elliemae/ds-icons');
10
+ var styles = require('./styles.js');
11
+ var useCarousel = require('./useCarousel.js');
12
+ var DSTabsCTX = require('../../DSTabsCTX.js');
13
+ var DSTabsDatatestid = require('../../DSTabsDatatestid.js');
14
+ var jsxRuntime = require('react/jsx-runtime');
15
+
16
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
+
18
+ var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
19
+
20
+ const Carousel = _ref => {
21
+ let {
22
+ children,
23
+ updateIndicatorStyle
24
+ } = _ref;
25
+ const {
26
+ showChevrons,
27
+ leftButtonOnClick,
28
+ rightButtonOnClick,
29
+ handleOnClick,
30
+ handleOnScroll
31
+ } = useCarousel.useCarousel({
32
+ updateIndicatorStyle
33
+ });
34
+ const {
35
+ carouselOnlyListRef,
36
+ props: {
37
+ type
38
+ }
39
+ } = React.useContext(DSTabsCTX.DSTabsContext);
40
+ return /*#__PURE__*/_jsx__default["default"](styles.StyledCarouselWrapper, {}, void 0, showChevrons.left && /*#__PURE__*/_jsx__default["default"](styles.StyledCarouselButtonWrapper, {
41
+ tabType: type
42
+ }, void 0, /*#__PURE__*/_jsx__default["default"](styles.StyledCarouselBtn, {
43
+ size: "s",
44
+ onClick: leftButtonOnClick,
45
+ tabIndex: -1,
46
+ "data-testid": DSTabsDatatestid.DSTabsDatatestid.CAROUSEL.BUTTON_LEFT,
47
+ buttonType: dsButton.BUTTON_TYPES.ICON
48
+ }, void 0, /*#__PURE__*/_jsx__default["default"](dsIcons.ChevronLeft, {
49
+ size: dsIcon.DSIconSizes.S
50
+ }))), showChevrons.right && /*#__PURE__*/_jsx__default["default"](styles.StyledCarouselButtonWrapper, {
51
+ tabType: type,
52
+ right: showChevrons.right
53
+ }, void 0, /*#__PURE__*/_jsx__default["default"](styles.StyledCarouselBtn, {
54
+ size: "s",
55
+ onClick: rightButtonOnClick,
56
+ tabIndex: -1,
57
+ "data-testid": DSTabsDatatestid.DSTabsDatatestid.CAROUSEL.BUTTON_RIGHT,
58
+ buttonType: dsButton.BUTTON_TYPES.ICON
59
+ }, void 0, /*#__PURE__*/_jsx__default["default"](dsIcons.ChevronRight, {
60
+ size: dsIcon.DSIconSizes.S
61
+ }))), /*#__PURE__*/jsxRuntime.jsx(styles.StyledChildrenWrap, {
62
+ ref: carouselOnlyListRef,
63
+ onClick: handleOnClick,
64
+ onScroll: handleOnScroll,
65
+ children: children
66
+ }));
67
+ };
68
+
69
+ exports.Carousel = Carousel;
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var styled = require('styled-components');
6
+ var dsButton = require('@elliemae/ds-button');
7
+ var constants = require('../../utils/constants.js');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
12
+
13
+ const StyledCarouselBtn = /*#__PURE__*/styled__default["default"](dsButton.DSButtonV2).withConfig({
14
+ componentId: "sc-prv5a7-0"
15
+ })(["margin:0;min-width:", ";width:", ";&:hover:not(:disabled){background-color:transparent;}background-color:transparent;border-radius:0px;& .em-ds-icon svg{fill:", ";}"], _ref => {
16
+ let {
17
+ theme
18
+ } = _ref;
19
+ return theme.space.xs;
20
+ }, _ref2 => {
21
+ let {
22
+ theme
23
+ } = _ref2;
24
+ return theme.space.xs;
25
+ }, _ref3 => {
26
+ let {
27
+ theme
28
+ } = _ref3;
29
+ return theme.colors.brand[600];
30
+ });
31
+ const StyledCarouselWrapper = /*#__PURE__*/styled__default["default"].span.withConfig({
32
+ componentId: "sc-prv5a7-1"
33
+ })(["position:relative;width:100%;display:flex;"]);
34
+ const StyledChildrenWrap = /*#__PURE__*/styled__default["default"].div.withConfig({
35
+ componentId: "sc-prv5a7-2"
36
+ })(["display:flex;flex-wrap:nowrap;flex:1;overflow-x:hidden;"]);
37
+ const StyledCarouselButtonWrapper = /*#__PURE__*/styled__default["default"].div.withConfig({
38
+ componentId: "sc-prv5a7-3"
39
+ })(["max-width:16px;position:absolute;z-index:200;", " width:16px;height:", ";padding-top:", ";background:white;", ";"], _ref4 => {
40
+ let {
41
+ right
42
+ } = _ref4;
43
+ return right ? 'right: 0;' : "left: 0;";
44
+ }, _ref5 => {
45
+ let {
46
+ tabType
47
+ } = _ref5;
48
+ return tabType === constants.TabTypes.NORMAL ? '32px' : '22px';
49
+ }, _ref6 => {
50
+ let {
51
+ tabType
52
+ } = _ref6;
53
+ return tabType === constants.TabTypes.NORMAL ? '5px' : '0px';
54
+ }, _ref7 => {
55
+ let {
56
+ theme,
57
+ tabType
58
+ } = _ref7;
59
+ return tabType === constants.TabTypes.NORMAL ? "\n background: linear-gradient(to bottom, white 0px, white 30px, ".concat(theme.colors.neutral[400], " 30px, ").concat(theme.colors.neutral[400], " 31px, white 31px , white 32px );\n ") : "";
60
+ });
61
+
62
+ exports.StyledCarouselBtn = StyledCarouselBtn;
63
+ exports.StyledCarouselButtonWrapper = StyledCarouselButtonWrapper;
64
+ exports.StyledCarouselWrapper = StyledCarouselWrapper;
65
+ exports.StyledChildrenWrap = StyledChildrenWrap;
@@ -0,0 +1,78 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('core-js/modules/web.dom-collections.iterator.js');
6
+ require('core-js/modules/esnext.async-iterator.reduce.js');
7
+ require('core-js/modules/esnext.iterator.constructor.js');
8
+ require('core-js/modules/esnext.iterator.reduce.js');
9
+ var React = require('react');
10
+ var useResizeObserver = require('@react-hook/resize-observer');
11
+ var DSTabsCTX = require('../../DSTabsCTX.js');
12
+ var helpers = require('../../utils/helpers.js');
13
+ var useCarouselCallbacks = require('./useCarouselCallbacks.js');
14
+
15
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
16
+
17
+ var useResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(useResizeObserver);
18
+
19
+ const useCarousel = _ref => {
20
+ let {
21
+ updateIndicatorStyle
22
+ } = _ref;
23
+ const {
24
+ carouselOnlyListRef
25
+ } = React.useContext(DSTabsCTX.DSTabsContext);
26
+ const [showChevrons, setShowChevrons] = React.useState({
27
+ right: false,
28
+ left: false
29
+ });
30
+ const {
31
+ tabsRefAsArray
32
+ } = React.useContext(DSTabsCTX.DSTabsContext);
33
+ const shouldShowLeft = React.useCallback(() => carouselOnlyListRef.current ? carouselOnlyListRef.current.scrollLeft > 0 : false, [carouselOnlyListRef]);
34
+ const shouldShowRight = React.useCallback(() => carouselOnlyListRef.current ? carouselOnlyListRef.current.scrollLeft < carouselOnlyListRef.current.scrollWidth - carouselOnlyListRef.current.clientWidth : false, [carouselOnlyListRef]);
35
+ const recalcChevrons = React.useCallback(() => {
36
+ setShowChevrons({
37
+ right: shouldShowRight(),
38
+ left: shouldShowLeft()
39
+ });
40
+ }, [shouldShowLeft, shouldShowRight]);
41
+ const getVisibleItemsOffset = React.useCallback(() => {
42
+ if (tabsRefAsArray.current) {
43
+ const scroll = tabsRefAsArray.current.reduce((acc, c) => {
44
+ if (helpers.isElementVisibleCarousel(c, carouselOnlyListRef.current)) {
45
+ const styles = window.getComputedStyle(c);
46
+ const width = c.clientWidth;
47
+ const margin = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
48
+ return acc + (width + margin);
49
+ }
50
+
51
+ return acc;
52
+ }, 0);
53
+ return scroll - 16;
54
+ }
55
+
56
+ return 0;
57
+ }, [tabsRefAsArray, carouselOnlyListRef]);
58
+ useResizeObserver__default["default"](carouselOnlyListRef, recalcChevrons);
59
+ const {
60
+ leftButtonOnClick,
61
+ rightButtonOnClick,
62
+ handleOnClick,
63
+ handleOnScroll
64
+ } = useCarouselCallbacks.useCarouselCallbacks({
65
+ getVisibleItemsOffset,
66
+ recalcChevrons,
67
+ updateIndicatorStyle
68
+ });
69
+ return {
70
+ showChevrons,
71
+ leftButtonOnClick,
72
+ rightButtonOnClick,
73
+ handleOnClick,
74
+ handleOnScroll
75
+ };
76
+ };
77
+
78
+ exports.useCarousel = useCarousel;
@@ -0,0 +1,72 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var helpers = require('../../utils/helpers.js');
7
+ var DSTabsCTX = require('../../DSTabsCTX.js');
8
+
9
+ /* eslint-disable max-statements */
10
+ const useCarouselCallbacks = _ref => {
11
+ let {
12
+ getVisibleItemsOffset,
13
+ updateIndicatorStyle,
14
+ recalcChevrons
15
+ } = _ref;
16
+ const {
17
+ focusableTabsRef,
18
+ carouselOnlyListRef
19
+ } = React.useContext(DSTabsCTX.DSTabsContext);
20
+ const rightButtonOnClick = React.useCallback(() => {
21
+ if (carouselOnlyListRef.current) {
22
+ carouselOnlyListRef.current.scrollLeft += getVisibleItemsOffset();
23
+ }
24
+ }, [getVisibleItemsOffset, carouselOnlyListRef]);
25
+ const leftButtonOnClick = React.useCallback(() => {
26
+ if (carouselOnlyListRef.current) {
27
+ carouselOnlyListRef.current.scrollLeft -= getVisibleItemsOffset();
28
+ }
29
+ }, [getVisibleItemsOffset, carouselOnlyListRef]);
30
+ const handleOnScroll = React.useCallback(() => {
31
+ recalcChevrons();
32
+ if (updateIndicatorStyle) updateIndicatorStyle();
33
+ }, [recalcChevrons, updateIndicatorStyle]);
34
+ const handleOnClick = React.useCallback(_ref2 => {
35
+ let {
36
+ target
37
+ } = _ref2;
38
+
39
+ if (focusableTabsRef.current && target.getAttribute('role') === 'tab') {
40
+ const tabList = carouselOnlyListRef.current;
41
+ const tabButton = target;
42
+ const tabButtonDimensions = tabButton.getBoundingClientRect();
43
+ const tabListDimensions = tabList === null || tabList === void 0 ? void 0 : tabList.getBoundingClientRect();
44
+ const tabButtonIndex = tabButton.dataset.index;
45
+ const lastItemIndex = focusableTabsRef.current.length.toString();
46
+ const magicNumber = 34;
47
+ const firstOrLastItem = tabButtonIndex === '0' || tabButtonIndex === lastItemIndex;
48
+
49
+ if (!helpers.isElementVisibleCarousel(tabButton, tabList, firstOrLastItem) && tabListDimensions && carouselOnlyListRef.current) {
50
+ const containerWidth = tabListDimensions.width;
51
+ const halfContainer = containerWidth / 2;
52
+ const elementScrollPosition = tabButtonDimensions.left - tabListDimensions.left;
53
+ const positionInContainer = elementScrollPosition % containerWidth;
54
+ const width = tabButton.offsetWidth + magicNumber;
55
+
56
+ if (positionInContainer > halfContainer) {
57
+ carouselOnlyListRef.current.scrollLeft += width + positionInContainer - containerWidth;
58
+ } else {
59
+ carouselOnlyListRef.current.scrollLeft += positionInContainer - magicNumber;
60
+ }
61
+ }
62
+ }
63
+ }, [focusableTabsRef, carouselOnlyListRef]);
64
+ return {
65
+ handleOnClick,
66
+ rightButtonOnClick,
67
+ leftButtonOnClick,
68
+ handleOnScroll
69
+ };
70
+ };
71
+
72
+ exports.useCarouselCallbacks = useCarouselCallbacks;