@toptal/picasso-tabs 5.0.15-alpha-ff-7-tabs-17eb872bb.13 → 5.0.15-alpha-bill-root-ref-context-42c3d2541.6

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 (57) hide show
  1. package/dist-package/src/Tab/Tab.d.ts +8 -5
  2. package/dist-package/src/Tab/Tab.d.ts.map +1 -1
  3. package/dist-package/src/Tab/Tab.js +16 -61
  4. package/dist-package/src/Tab/Tab.js.map +1 -1
  5. package/dist-package/src/Tab/styles.d.ts +4 -0
  6. package/dist-package/src/Tab/styles.d.ts.map +1 -0
  7. package/dist-package/src/Tab/styles.js +95 -0
  8. package/dist-package/src/Tab/styles.js.map +1 -0
  9. package/dist-package/src/TabScrollButton/TabScrollButton.d.ts +12 -0
  10. package/dist-package/src/TabScrollButton/TabScrollButton.d.ts.map +1 -0
  11. package/dist-package/src/TabScrollButton/TabScrollButton.js +30 -0
  12. package/dist-package/src/TabScrollButton/TabScrollButton.js.map +1 -0
  13. package/dist-package/src/TabScrollButton/index.d.ts +5 -0
  14. package/dist-package/src/TabScrollButton/index.d.ts.map +1 -0
  15. package/dist-package/src/TabScrollButton/index.js +2 -0
  16. package/dist-package/src/TabScrollButton/index.js.map +1 -0
  17. package/dist-package/src/Tabs/Tabs.d.ts +9 -12
  18. package/dist-package/src/Tabs/Tabs.d.ts.map +1 -1
  19. package/dist-package/src/Tabs/Tabs.js +16 -68
  20. package/dist-package/src/Tabs/Tabs.js.map +1 -1
  21. package/dist-package/src/Tabs/index.d.ts +2 -3
  22. package/dist-package/src/Tabs/index.d.ts.map +1 -1
  23. package/dist-package/src/Tabs/index.js.map +1 -1
  24. package/dist-package/src/Tabs/styles.d.ts +4 -0
  25. package/dist-package/src/Tabs/styles.d.ts.map +1 -0
  26. package/dist-package/src/Tabs/styles.js +41 -0
  27. package/dist-package/src/Tabs/styles.js.map +1 -0
  28. package/dist-package/src/Tabs/use-tab-action.d.ts +5 -0
  29. package/dist-package/src/Tabs/use-tab-action.d.ts.map +1 -0
  30. package/dist-package/src/Tabs/use-tab-action.js +21 -0
  31. package/dist-package/src/Tabs/use-tab-action.js.map +1 -0
  32. package/dist-package/src/TabsCompound/index.d.ts +4 -2
  33. package/dist-package/src/TabsCompound/index.d.ts.map +1 -1
  34. package/dist-package/src/index.d.ts +1 -0
  35. package/dist-package/src/index.d.ts.map +1 -1
  36. package/dist-package/src/index.js +1 -0
  37. package/dist-package/src/index.js.map +1 -1
  38. package/package.json +13 -13
  39. package/src/Tab/Tab.tsx +51 -121
  40. package/src/Tab/__snapshots__/test.tsx.snap +45 -29
  41. package/src/Tab/story/IconOrBadge.example.tsx +3 -8
  42. package/src/Tab/styles.ts +107 -0
  43. package/src/TabScrollButton/TabScrollButton.tsx +59 -0
  44. package/src/TabScrollButton/index.ts +6 -0
  45. package/src/Tabs/Tabs.tsx +42 -125
  46. package/src/Tabs/__snapshots__/test.tsx.snap +76 -45
  47. package/src/Tabs/index.ts +2 -3
  48. package/src/Tabs/story/Default.example.tsx +2 -4
  49. package/src/Tabs/styles.ts +45 -0
  50. package/src/Tabs/test.tsx +4 -4
  51. package/src/Tabs/use-tab-action.ts +27 -0
  52. package/src/index.ts +1 -0
  53. package/dist-package/src/Tabs/TabsContext.d.ts +0 -11
  54. package/dist-package/src/Tabs/TabsContext.d.ts.map +0 -1
  55. package/dist-package/src/Tabs/TabsContext.js +0 -15
  56. package/dist-package/src/Tabs/TabsContext.js.map +0 -1
  57. package/src/Tabs/TabsContext.tsx +0 -27
@@ -0,0 +1,45 @@
1
+ import type { Theme } from '@material-ui/core/styles'
2
+ import { createStyles } from '@material-ui/core/styles'
3
+ import { PicassoProvider } from '@toptal/picasso-provider'
4
+
5
+ PicassoProvider.override(({ palette }: Theme) => ({
6
+ MuiTabs: {
7
+ root: {
8
+ position: 'relative',
9
+ minHeight: 0,
10
+ },
11
+ vertical: {
12
+ width: 200,
13
+ margin: 0,
14
+ '& $scroller': {
15
+ // We need a bit of padding to allow active tab's shadow to be visible
16
+ paddingLeft: '0.5em',
17
+ },
18
+
19
+ '& $indicator': {
20
+ display: 'none',
21
+ },
22
+ },
23
+ indicator: {
24
+ backgroundColor: palette.blue.main,
25
+ zIndex: 1,
26
+ },
27
+ },
28
+ }))
29
+
30
+ export default ({ palette }: Theme) =>
31
+ createStyles({
32
+ horizontal: {
33
+ '&::after': {
34
+ position: 'absolute',
35
+ content: '""',
36
+ bottom: 0,
37
+ left: 0,
38
+ right: 0,
39
+ height: 1,
40
+ backgroundColor: palette.grey.main,
41
+ zIndex: 0,
42
+ },
43
+ },
44
+ vertical: {},
45
+ })
package/src/Tabs/test.tsx CHANGED
@@ -60,7 +60,7 @@ describe('Tabs', () => {
60
60
  const { container, queryByTestId } = renderTabs(
61
61
  [{ label: 'Tab 1' }, { label: 'Tab 2' }],
62
62
  {
63
- value: null,
63
+ value: false,
64
64
  }
65
65
  )
66
66
 
@@ -73,7 +73,7 @@ describe('Tabs', () => {
73
73
  it('renders in vertical orientation', () => {
74
74
  const { container } = renderTabs(
75
75
  [{ label: 'Tab 1' }, { label: 'Tab 2' }],
76
- { value: null },
76
+ { value: false },
77
77
  'vertical'
78
78
  )
79
79
 
@@ -116,7 +116,7 @@ describe('Tabs', () => {
116
116
  const { getByTestId } = renderTabs(
117
117
  [{ label: 'Tab 1' }, { label: 'Tab 2' }],
118
118
  {
119
- value: 0,
119
+ value: 1,
120
120
  onChange,
121
121
  }
122
122
  )
@@ -159,7 +159,7 @@ describe('Tabs', () => {
159
159
 
160
160
  it('renders in full width', () => {
161
161
  const { container } = renderTabs([{ label: 'Tab 1' }, { label: 'Tab 2' }], {
162
- value: null,
162
+ value: false,
163
163
  variant: 'fullWidth',
164
164
  })
165
165
 
@@ -0,0 +1,27 @@
1
+ import type { Ref } from 'react'
2
+ import { useEffect, useRef } from 'react'
3
+ import type { TabsActions } from '@material-ui/core'
4
+
5
+ /*
6
+ * MuiTabs break when the size of a tab changes without rendering with React.
7
+ * This issue happens when the font is loaded after the initial render of the component.
8
+ * To solve this issue, we imperatively update the indicator and scroll buttons when it happens.
9
+ */
10
+ const useTabAction = (): Ref<TabsActions> => {
11
+ const ref = useRef<TabsActions>(null)
12
+
13
+ useEffect(() => {
14
+ const listener = () => {
15
+ ref.current?.updateIndicator()
16
+ ref.current?.updateScrollButtons()
17
+ }
18
+
19
+ window.addEventListener('load', listener)
20
+
21
+ return () => window.removeEventListener('load', listener)
22
+ }, [])
23
+
24
+ return ref
25
+ }
26
+
27
+ export default useTabAction
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './TabScrollButton'
1
2
  export * from './Tabs'
2
3
  export * from './Tab'
3
4
  export * from './TabDescription'
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- export declare type TabsValueType = string | number | null;
3
- export interface TabsContextValue {
4
- value: TabsValueType;
5
- onChange: (event: React.ChangeEvent<{}>, value: TabsValueType) => void;
6
- orientation: 'horizontal' | 'vertical';
7
- variant: 'scrollable' | 'fullWidth';
8
- }
9
- export declare const TabsContext: React.Context<TabsContextValue>;
10
- export declare const useTabsContext: () => TabsContextValue;
11
- //# sourceMappingURL=TabsContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabsContext.d.ts","sourceRoot":"","sources":["../../../src/Tabs/TabsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,oBAAY,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAElD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAA;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACtE,WAAW,EAAE,YAAY,GAAG,UAAU,CAAA;IACtC,OAAO,EAAE,YAAY,GAAG,WAAW,CAAA;CACpC;AAED,eAAO,MAAM,WAAW,iCAKtB,CAAA;AAEF,eAAO,MAAM,cAAc,wBAQ1B,CAAA"}
@@ -1,15 +0,0 @@
1
- import React from 'react';
2
- export const TabsContext = React.createContext({
3
- value: null,
4
- onChange: () => { },
5
- orientation: 'horizontal',
6
- variant: 'scrollable',
7
- });
8
- export const useTabsContext = () => {
9
- const context = React.useContext(TabsContext);
10
- if (!context) {
11
- throw new Error('useTabsContext must be used within a TabsProvider');
12
- }
13
- return context;
14
- };
15
- //# sourceMappingURL=TabsContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabsContext.js","sourceRoot":"","sources":["../../../src/Tabs/TabsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;IAC/D,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,YAAY;CACtB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;IAE7C,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;KACrE;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -1,27 +0,0 @@
1
- import React from 'react'
2
-
3
- export type TabsValueType = string | number | null
4
-
5
- export interface TabsContextValue {
6
- value: TabsValueType
7
- onChange: (event: React.ChangeEvent<{}>, value: TabsValueType) => void
8
- orientation: 'horizontal' | 'vertical'
9
- variant: 'scrollable' | 'fullWidth'
10
- }
11
-
12
- export const TabsContext = React.createContext<TabsContextValue>({
13
- value: null,
14
- onChange: () => {},
15
- orientation: 'horizontal',
16
- variant: 'scrollable',
17
- })
18
-
19
- export const useTabsContext = () => {
20
- const context = React.useContext(TabsContext)
21
-
22
- if (!context) {
23
- throw new Error('useTabsContext must be used within a TabsProvider')
24
- }
25
-
26
- return context
27
- }