Skip to content

Commit 98f7936

Browse files
committed
feat: adds sub-component mapping to tabs and tooltips
1 parent 3e3be91 commit 98f7936

File tree

6 files changed

+59
-29
lines changed

6 files changed

+59
-29
lines changed

packages/tabs/demo/stories/TabsStory.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,27 @@
66
*/
77

88
import React from 'react';
9-
import { Story } from '@storybook/react';
10-
import { ITabsProps, Tab, TabList, TabPanel, Tabs } from '@zendeskgarden/react-tabs';
9+
import { StoryFn } from '@storybook/react';
10+
import { ITabsProps, Tabs } from '@zendeskgarden/react-tabs';
1111
import { ITab } from './types';
1212

1313
interface IArgs extends ITabsProps {
1414
tabs: ITab[];
1515
}
1616

17-
export const TabsStory: Story<IArgs> = ({ tabs, ...args }) => (
17+
export const TabsStory: StoryFn<IArgs> = ({ tabs, ...args }) => (
1818
<Tabs {...args}>
19-
<TabList>
19+
<Tabs.TabList>
2020
{tabs.map(tab => (
21-
<Tab key={tab.value} item={tab.value} disabled={tab.disabled}>
21+
<Tabs.Tab key={tab.value} item={tab.value} disabled={tab.disabled}>
2222
{tab.value}
23-
</Tab>
23+
</Tabs.Tab>
2424
))}
25-
</TabList>
25+
</Tabs.TabList>
2626
{tabs.map(tab => (
27-
<TabPanel key={tab.value} item={tab.value}>
27+
<Tabs.TabPanel key={tab.value} item={tab.value}>
2828
{tab.panel}
29-
</TabPanel>
29+
</Tabs.TabPanel>
3030
))}
3131
</Tabs>
3232
);

packages/tabs/src/elements/Tabs.tsx

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ import { ITabsProps } from '../types';
1515
import { toTabs } from '../utils/toTabs';
1616
import { TabsContext } from '../utils/useTabsContext';
1717
import { StyledTabs } from '../styled/StyledTabs';
18+
import { Tab } from './Tab';
19+
import { TabList } from './TabList';
20+
import { TabPanel } from './TabPanel';
1821

19-
/**
20-
* @extends HTMLAttributes<HTMLDivElement>
21-
*/
22-
export const Tabs = forwardRef<HTMLDivElement, ITabsProps>(
22+
export const TabsComponent = forwardRef<HTMLDivElement, ITabsProps>(
2323
(
2424
{ isVertical, children, onChange, selectedItem: controlledSelectedItem, ...otherProps },
2525
ref
@@ -55,14 +55,27 @@ export const Tabs = forwardRef<HTMLDivElement, ITabsProps>(
5555
}
5656
);
5757

58-
Tabs.propTypes = {
58+
TabsComponent.propTypes = {
5959
isVertical: PropTypes.bool,
6060
selectedItem: PropTypes.any,
6161
onChange: PropTypes.func
6262
};
6363

64-
Tabs.defaultProps = {
64+
TabsComponent.defaultProps = {
6565
isVertical: false
6666
};
6767

68-
Tabs.displayName = 'Tabs';
68+
TabsComponent.displayName = 'Tabs';
69+
70+
/**
71+
* @extends HTMLAttributes<HTMLDivElement>
72+
*/
73+
export const Tabs = TabsComponent as typeof TabsComponent & {
74+
Tab: typeof Tab;
75+
TabList: typeof TabList;
76+
TabPanel: typeof TabPanel;
77+
};
78+
79+
Tabs.Tab = Tab;
80+
Tabs.TabList = TabList;
81+
Tabs.TabPanel = TabPanel;

packages/tabs/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55
* found at http://www.apache.org/licenses/LICENSE-2.0.
66
*/
77

8+
/** @deprecated use `Tabs.Tab` instead */
89
export { Tab } from './elements/Tab';
10+
/** @deprecated use `Tabs.TabList` instead */
911
export { TabList } from './elements/TabList';
12+
/** @deprecated use `Tabs.TabPanel` instead */
1013
export { TabPanel } from './elements/TabPanel';
14+
1115
export { Tabs } from './elements/Tabs';
1216

1317
export type { ITabProps, ITabPanelProps, ITabsProps } from './types';

packages/tooltips/demo/stories/TooltipStory.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,26 @@
66
*/
77

88
import React from 'react';
9-
import { Story } from '@storybook/react';
9+
import { StoryFn } from '@storybook/react';
1010
import { PALETTE } from '@zendeskgarden/react-theming';
1111
import { Col, Grid, Row } from '@zendeskgarden/react-grid';
12-
import { ITooltipProps, Paragraph, Title, Tooltip } from '@zendeskgarden/react-tooltips';
12+
import { ITooltipProps, Tooltip } from '@zendeskgarden/react-tooltips';
1313
import { ITooltipContent } from './types';
1414

1515
interface IArgs extends Omit<ITooltipProps, 'content'> {
1616
content: ITooltipContent;
1717
}
1818

19-
export const TooltipStory: Story<IArgs> = ({ content, ...args }: IArgs) => (
19+
export const TooltipStory: StoryFn<IArgs> = ({ content, ...args }: IArgs) => (
2020
<Grid>
2121
<Row style={{ height: 'calc(100vh - 80px)' }}>
2222
<Col textAlign="center" alignSelf="center">
2323
<Tooltip
2424
{...args}
2525
content={
2626
<>
27-
<Title>{content.title}</Title>
28-
<Paragraph>{content.paragraph}</Paragraph>
27+
<Tooltip.Title>{content.title}</Tooltip.Title>
28+
<Tooltip.Paragraph>{content.paragraph}</Tooltip.Paragraph>
2929
</>
3030
}
3131
>

packages/tooltips/src/elements/Tooltip.tsx

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,10 @@ import { Modifiers } from 'popper.js';
1717
import { getPopperPlacement, getRtlPopperPlacement } from '../utils/gardenPlacements';
1818
import { StyledTooltipWrapper, StyledTooltip } from '../styled';
1919
import { ITooltipProps, PLACEMENT, SIZE, TYPE } from '../types';
20+
import { Paragraph } from './Paragraph';
21+
import { Title } from './Title';
2022

21-
/**
22-
* @extends HTMLAttributes<HTMLDivElement>
23-
*/
24-
export const Tooltip = ({
23+
export const TooltipComponent = ({
2524
id,
2625
delayMS,
2726
isInitialVisible,
@@ -146,9 +145,9 @@ export const Tooltip = ({
146145
);
147146
};
148147

149-
Tooltip.displayName = 'Tooltip';
148+
TooltipComponent.displayName = 'Tooltip';
150149

151-
Tooltip.propTypes = {
150+
TooltipComponent.propTypes = {
152151
appendToNode: PropTypes.any,
153152
hasArrow: PropTypes.bool,
154153
delayMS: PropTypes.number,
@@ -164,11 +163,22 @@ Tooltip.propTypes = {
164163
refKey: PropTypes.string
165164
};
166165

167-
Tooltip.defaultProps = {
166+
TooltipComponent.defaultProps = {
168167
hasArrow: true,
169168
eventsEnabled: true,
170169
type: 'dark',
171170
placement: 'top',
172171
delayMS: 500,
173172
refKey: 'ref'
174173
};
174+
175+
/**
176+
* @extends HTMLAttributes<HTMLDivElement>
177+
*/
178+
export const Tooltip = TooltipComponent as typeof TooltipComponent & {
179+
Paragraph: typeof Paragraph;
180+
Title: typeof Title;
181+
};
182+
183+
Tooltip.Paragraph = Paragraph;
184+
Tooltip.Title = Title;

packages/tooltips/src/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
* found at http://www.apache.org/licenses/LICENSE-2.0.
66
*/
77

8-
export { Tooltip } from './elements/Tooltip';
8+
/** @deprecated use `Tooltip.Paragraph` instead */
99
export { Paragraph } from './elements/Paragraph';
10+
/** @deprecated use `Tooltip.Title` instead */
1011
export { Title } from './elements/Title';
1112

13+
export { Tooltip } from './elements/Tooltip';
14+
1215
export type { ITooltipProps } from './types';

0 commit comments

Comments
 (0)