chili-ui 0.22.0 → 0.22.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chili/components/Tabs/Tabs.tsx +10 -1
- package/chili/components/Tabs/types.ts +1 -0
- package/dist/components/Tabs/Tabs.js +19 -4
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Tabs/types.d.ts +1 -0
- package/docs/src/app/layout-components/tabs/MainDemo/ControlledDemo.tsx +31 -0
- package/docs/src/app/layout-components/tabs/MainDemo/UncontrolledDemo.tsx +22 -0
- package/docs/src/app/layout-components/tabs/MainDemo/index.tsx +25 -0
- package/docs/src/app/layout-components/tabs/page.tsx +2 -26
- package/package.json +1 -1
|
@@ -21,15 +21,23 @@ export const Tabs = React.forwardRef((props: TabsProps, ref?: React.Ref<HTMLElem
|
|
|
21
21
|
activeTabKey: activeTabKeyProp,
|
|
22
22
|
children,
|
|
23
23
|
className,
|
|
24
|
+
contentRender,
|
|
25
|
+
headingRender,
|
|
26
|
+
onChange,
|
|
24
27
|
shouldScrollTabs,
|
|
25
28
|
style,
|
|
26
29
|
tabContentNode,
|
|
27
30
|
tabRender,
|
|
31
|
+
wrapperRender,
|
|
32
|
+
...restProps
|
|
28
33
|
} = useProps(props);
|
|
29
34
|
|
|
30
35
|
const theme = useTheme(themeProp, COMPONENTS_NAMESPACES.tabs);
|
|
31
36
|
|
|
32
|
-
const [activeTabKeyState, setActiveTabKeyState] = React.useState<string | number>(
|
|
37
|
+
const [activeTabKeyState, setActiveTabKeyState] = React.useState<string | number>(() => {
|
|
38
|
+
const firstChild = React.Children.toArray(children).find(React.isValidElement);
|
|
39
|
+
return firstChild ? (firstChild.props as { tabKey?: string | number }).tabKey ?? 0 : 0;
|
|
40
|
+
});
|
|
33
41
|
|
|
34
42
|
// if activeTabKey is not passed - work in uncontrolled mode
|
|
35
43
|
const activeTabKey = isNil(activeTabKeyProp)
|
|
@@ -74,6 +82,7 @@ export const Tabs = React.forwardRef((props: TabsProps, ref?: React.Ref<HTMLElem
|
|
|
74
82
|
|
|
75
83
|
return (
|
|
76
84
|
<Wrapper
|
|
85
|
+
{...restProps}
|
|
77
86
|
className={combinedClassNames}
|
|
78
87
|
style={style as React.CSSProperties}
|
|
79
88
|
ref={ref}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
14
|
import React from 'react';
|
|
4
15
|
import isNil from 'lodash/isNil';
|
|
@@ -12,9 +23,13 @@ import { TabsContext } from './TabsContext';
|
|
|
12
23
|
import { ArrowLeft, ArrowRight } from './ScrollArrows';
|
|
13
24
|
import { Div } from '../Div';
|
|
14
25
|
export const Tabs = React.forwardRef((props, ref) => {
|
|
15
|
-
const { theme: themeProp, activeTabKey: activeTabKeyProp, children, className, shouldScrollTabs, style, tabContentNode, tabRender, } =
|
|
26
|
+
const _a = useProps(props), { theme: themeProp, activeTabKey: activeTabKeyProp, children, className, contentRender, headingRender, onChange, shouldScrollTabs, style, tabContentNode, tabRender, wrapperRender } = _a, restProps = __rest(_a, ["theme", "activeTabKey", "children", "className", "contentRender", "headingRender", "onChange", "shouldScrollTabs", "style", "tabContentNode", "tabRender", "wrapperRender"]);
|
|
16
27
|
const theme = useTheme(themeProp, COMPONENTS_NAMESPACES.tabs);
|
|
17
|
-
const [activeTabKeyState, setActiveTabKeyState] = React.useState(
|
|
28
|
+
const [activeTabKeyState, setActiveTabKeyState] = React.useState(() => {
|
|
29
|
+
var _a;
|
|
30
|
+
const firstChild = React.Children.toArray(children).find(React.isValidElement);
|
|
31
|
+
return firstChild ? (_a = firstChild.props.tabKey) !== null && _a !== void 0 ? _a : 0 : 0;
|
|
32
|
+
});
|
|
18
33
|
// if activeTabKey is not passed - work in uncontrolled mode
|
|
19
34
|
const activeTabKey = isNil(activeTabKeyProp)
|
|
20
35
|
? activeTabKeyState
|
|
@@ -31,11 +46,11 @@ export const Tabs = React.forwardRef((props, ref) => {
|
|
|
31
46
|
const headingClassNames = getClassNames(theme.tabsBar, shouldScrollTabs && theme.scroll);
|
|
32
47
|
if (!children)
|
|
33
48
|
return null;
|
|
34
|
-
return (_jsxs(Wrapper, { className: combinedClassNames, style: style, ref: ref, children: [_jsxs(Div, { ref: containerRef, className: containerClassNames, children: [hasLeftArrow && (_jsx(ArrowLeft, { onClick: onLeftClick, theme: theme })), hasRightArrow && (_jsx(ArrowRight, { onClick: onRightClick, theme: theme })), _jsx(Heading, { className: headingClassNames, children: _jsx(TabsContext.Provider, { value: tabsContext, children: React.Children.map(children, (child) => {
|
|
49
|
+
return (_jsxs(Wrapper, Object.assign({}, restProps, { className: combinedClassNames, style: style, ref: ref, children: [_jsxs(Div, { ref: containerRef, className: containerClassNames, children: [hasLeftArrow && (_jsx(ArrowLeft, { onClick: onLeftClick, theme: theme })), hasRightArrow && (_jsx(ArrowRight, { onClick: onRightClick, theme: theme })), _jsx(Heading, { className: headingClassNames, children: _jsx(TabsContext.Provider, { value: tabsContext, children: React.Children.map(children, (child) => {
|
|
35
50
|
if (!React.isValidElement(child))
|
|
36
51
|
return null;
|
|
37
52
|
return (_jsx(Tab, Object.assign({}, child.props)));
|
|
38
|
-
}) }) })] }), _jsx(Content, { className: theme.content, tabContentNode: tabContentNode, children: _jsx(TabContent, { activeTabKey: activeTabKey, children: children }, activeTabKey) })] }));
|
|
53
|
+
}) }) })] }), _jsx(Content, { className: theme.content, tabContentNode: tabContentNode, children: _jsx(TabContent, { activeTabKey: activeTabKey, children: children }, activeTabKey) })] })));
|
|
39
54
|
});
|
|
40
55
|
Tabs.displayName = 'Tabs';
|
|
41
56
|
//# sourceMappingURL=Tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../chili/components/Tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC
|
|
1
|
+
{"version":3,"file":"Tabs.js","sourceRoot":"","sources":["../../../chili/components/Tabs/Tabs.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as L from '@chili';
|
|
4
|
+
import { Live } from '@/components/live';
|
|
5
|
+
|
|
6
|
+
export const ControlledDemo = () => (
|
|
7
|
+
<Live scope={{ L }}>
|
|
8
|
+
{`
|
|
9
|
+
() => {
|
|
10
|
+
const [selected, setSelected] = React.useState(0);
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<L.Tabs
|
|
14
|
+
activeTabKey={selected}
|
|
15
|
+
onChange={(ev) => setSelected(ev.component.value)}
|
|
16
|
+
>
|
|
17
|
+
<L.Tab title={'Tab 1'} tabKey={0}>
|
|
18
|
+
<div className='p-4'>Tab 1 content</div>
|
|
19
|
+
</L.Tab>
|
|
20
|
+
<L.Tab title={'Tab 2'} tabKey={1}>
|
|
21
|
+
<div className='p-4'>Tab 2 content</div>
|
|
22
|
+
</L.Tab>
|
|
23
|
+
<L.Tab title={'Tab 3'} tabKey={2}>
|
|
24
|
+
<div className='p-4'>Tab 3 content</div>
|
|
25
|
+
</L.Tab>
|
|
26
|
+
</L.Tabs>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
`}
|
|
30
|
+
</Live>
|
|
31
|
+
);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as L from '@chili';
|
|
4
|
+
import { Live } from '@/components/live';
|
|
5
|
+
|
|
6
|
+
export const UncontrolledDemo = () => (
|
|
7
|
+
<Live scope={{ L }}>
|
|
8
|
+
{`
|
|
9
|
+
<L.Tabs>
|
|
10
|
+
<L.Tab title={'Tab 1'} tabKey={0}>
|
|
11
|
+
<div className='p-4'>Tab 1 content</div>
|
|
12
|
+
</L.Tab>
|
|
13
|
+
<L.Tab title={'Tab 2'} tabKey={1}>
|
|
14
|
+
<div className='p-4'>Tab 2 content</div>
|
|
15
|
+
</L.Tab>
|
|
16
|
+
<L.Tab title={'Tab 3'} tabKey={2}>
|
|
17
|
+
<div className='p-4'>Tab 3 content</div>
|
|
18
|
+
</L.Tab>
|
|
19
|
+
</L.Tabs>
|
|
20
|
+
`}
|
|
21
|
+
</Live>
|
|
22
|
+
);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as L from '@chili';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { ControlledDemo } from './ControlledDemo';
|
|
6
|
+
import { UncontrolledDemo } from './UncontrolledDemo';
|
|
7
|
+
|
|
8
|
+
export const MainDemo = () => {
|
|
9
|
+
const [selected, setSelected] = React.useState<string | number>(0);
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<L.Tabs
|
|
13
|
+
activeTabKey={selected}
|
|
14
|
+
onChange={(ev) => setSelected(ev.component.value)}
|
|
15
|
+
_my-6
|
|
16
|
+
>
|
|
17
|
+
<L.Tab title="Controlled" tabKey={0}>
|
|
18
|
+
<ControlledDemo />
|
|
19
|
+
</L.Tab>
|
|
20
|
+
<L.Tab title="Uncontrolled" tabKey={1}>
|
|
21
|
+
<UncontrolledDemo />
|
|
22
|
+
</L.Tab>
|
|
23
|
+
</L.Tabs>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import * as L from '@chili';
|
|
4
3
|
import { UnderscoreClasses } from '@/components/commonProps';
|
|
5
4
|
import {
|
|
6
5
|
H1, H2, Section, THead, Table, Td, propsTableCommonHeaders,
|
|
7
6
|
} from '@/components/typography';
|
|
8
|
-
import {
|
|
7
|
+
import { MainDemo } from './MainDemo';
|
|
9
8
|
|
|
10
9
|
const TabsPage = () => (
|
|
11
10
|
<article>
|
|
@@ -94,30 +93,7 @@ const TabsPage = () => (
|
|
|
94
93
|
</Table>
|
|
95
94
|
</Section>
|
|
96
95
|
|
|
97
|
-
<
|
|
98
|
-
{`
|
|
99
|
-
() => {
|
|
100
|
-
const [selected, setSelected] = React.useState(0);
|
|
101
|
-
|
|
102
|
-
return (
|
|
103
|
-
<L.Tabs
|
|
104
|
-
activeTabKey={selected}
|
|
105
|
-
onChange={(ev) => setSelected(ev.component.value)}
|
|
106
|
-
>
|
|
107
|
-
<L.Tab title={'Tab 1'} tabKey={0}>
|
|
108
|
-
<div className='p-4'>Tab 1 content</div>
|
|
109
|
-
</L.Tab>
|
|
110
|
-
<L.Tab title={'Tab 2'} tabKey={1}>
|
|
111
|
-
<div className='p-4'>Tab 2 content</div>
|
|
112
|
-
</L.Tab>
|
|
113
|
-
<L.Tab title={'Tab 3'} tabKey={2}>
|
|
114
|
-
<div className='p-4'>Tab 3 content</div>
|
|
115
|
-
</L.Tab>
|
|
116
|
-
</L.Tabs>
|
|
117
|
-
);
|
|
118
|
-
};
|
|
119
|
-
`}
|
|
120
|
-
</Live>
|
|
96
|
+
<MainDemo />
|
|
121
97
|
</article>
|
|
122
98
|
);
|
|
123
99
|
|