@ornikar/bumper 1.1.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.
Files changed (108) hide show
  1. package/.eslintrc.json +3 -0
  2. package/.vscode/settings.json +3 -0
  3. package/CHANGELOG.md +20 -0
  4. package/dist/definitions/components/breakpoints/SwitchBreakpoins.d.ts +5 -0
  5. package/dist/definitions/components/breakpoints/SwitchBreakpoins.d.ts.map +1 -0
  6. package/dist/definitions/components/breakpoints/hooks/useBreakpointValue.d.ts +3 -0
  7. package/dist/definitions/components/breakpoints/hooks/useBreakpointValue.d.ts.map +1 -0
  8. package/dist/definitions/components/breakpoints/hooks/useCurrentBreakpointName.d.ts +3 -0
  9. package/dist/definitions/components/breakpoints/hooks/useCurrentBreakpointName.d.ts.map +1 -0
  10. package/dist/definitions/components/breakpoints/hooks/useWindowSize.d.ts +2 -0
  11. package/dist/definitions/components/breakpoints/hooks/useWindowSize.d.ts.map +1 -0
  12. package/dist/definitions/components/breakpoints/utils/breakpointsUtils.d.ts +10 -0
  13. package/dist/definitions/components/breakpoints/utils/breakpointsUtils.d.ts.map +1 -0
  14. package/dist/definitions/components/primitives/Stacks.d.ts +9 -0
  15. package/dist/definitions/components/primitives/Stacks.d.ts.map +1 -0
  16. package/dist/definitions/components/primitives/View.d.ts +5 -0
  17. package/dist/definitions/components/primitives/View.d.ts.map +1 -0
  18. package/dist/definitions/components/typography/Typograhy.d.ts +40 -0
  19. package/dist/definitions/components/typography/Typograhy.d.ts.map +1 -0
  20. package/dist/definitions/components/typography/utils/getTypeAndWeightValues.d.ts +9 -0
  21. package/dist/definitions/components/typography/utils/getTypeAndWeightValues.d.ts.map +1 -0
  22. package/dist/definitions/core/BumperDecorator.d.ts +2 -0
  23. package/dist/definitions/core/BumperDecorator.d.ts.map +1 -0
  24. package/dist/definitions/core/BumperProvider.d.ts +6 -0
  25. package/dist/definitions/core/BumperProvider.d.ts.map +1 -0
  26. package/dist/definitions/index.d.ts +10 -0
  27. package/dist/definitions/index.d.ts.map +1 -0
  28. package/dist/definitions/story-components/StorySection.d.ts +20 -0
  29. package/dist/definitions/story-components/StorySection.d.ts.map +1 -0
  30. package/dist/definitions/story-components/StoryTitle.d.ts +6 -0
  31. package/dist/definitions/story-components/StoryTitle.d.ts.map +1 -0
  32. package/dist/definitions/tamagui.config.d.ts +148 -0
  33. package/dist/definitions/tamagui.config.d.ts.map +1 -0
  34. package/dist/definitions/themes/light.d.ts +53 -0
  35. package/dist/definitions/themes/light.d.ts.map +1 -0
  36. package/dist/definitions/themes/palettes/deepPurpleColorPalette.d.ts +86 -0
  37. package/dist/definitions/themes/palettes/deepPurpleColorPalette.d.ts.map +1 -0
  38. package/dist/definitions/themes/utils/breakpoints.d.ts +15 -0
  39. package/dist/definitions/themes/utils/breakpoints.d.ts.map +1 -0
  40. package/dist/definitions/tokens/fonts.d.ts +18 -0
  41. package/dist/definitions/tokens/fonts.d.ts.map +1 -0
  42. package/dist/definitions/tokens/size.d.ts +11 -0
  43. package/dist/definitions/tokens/size.d.ts.map +1 -0
  44. package/dist/definitions/tokens/space.d.ts +16 -0
  45. package/dist/definitions/tokens/space.d.ts.map +1 -0
  46. package/dist/index-metro.es.android.js +396 -0
  47. package/dist/index-metro.es.android.js.map +1 -0
  48. package/dist/index-metro.es.ios.js +396 -0
  49. package/dist/index-metro.es.ios.js.map +1 -0
  50. package/dist/index-node-22.17.cjs.js +405 -0
  51. package/dist/index-node-22.17.cjs.js.map +1 -0
  52. package/dist/index-node-22.17.cjs.web.js +405 -0
  53. package/dist/index-node-22.17.cjs.web.js.map +1 -0
  54. package/dist/index-node-22.17.es.mjs +395 -0
  55. package/dist/index-node-22.17.es.mjs.map +1 -0
  56. package/dist/index-node-22.17.es.web.mjs +395 -0
  57. package/dist/index-node-22.17.es.web.mjs.map +1 -0
  58. package/dist/index.es.js +392 -0
  59. package/dist/index.es.js.map +1 -0
  60. package/dist/index.es.web.js +392 -0
  61. package/dist/index.es.web.js.map +1 -0
  62. package/dist/tsbuildinfo +1 -0
  63. package/package.json +79 -0
  64. package/src/.eslintrc.json +20 -0
  65. package/src/components/breakpoints/SwitchBreakpoins.tsx +12 -0
  66. package/src/components/breakpoints/__snapshots__/breakpoints.stories.tsx.snap +49 -0
  67. package/src/components/breakpoints/__snapshots_web__/breakpoints.stories.tsx.snap +43 -0
  68. package/src/components/breakpoints/breakpoints.stories.tsx +45 -0
  69. package/src/components/breakpoints/hooks/useBreakpointValue.ts +12 -0
  70. package/src/components/breakpoints/hooks/useCurrentBreakpointName.ts +20 -0
  71. package/src/components/breakpoints/hooks/useWindowSize.ts +1 -0
  72. package/src/components/breakpoints/utils/breakpointsUtils.test.ts +85 -0
  73. package/src/components/breakpoints/utils/breakpointsUtils.ts +28 -0
  74. package/src/components/primitives/Stack.stories.tsx +62 -0
  75. package/src/components/primitives/Stacks.ts +19 -0
  76. package/src/components/primitives/View.stories.tsx +13 -0
  77. package/src/components/primitives/View.ts +5 -0
  78. package/src/components/primitives/__snapshots__/Stack.stories.tsx.snap +376 -0
  79. package/src/components/primitives/__snapshots__/View.stories.tsx.snap +25 -0
  80. package/src/components/primitives/__snapshots_web__/Stack.stories.tsx.snap +190 -0
  81. package/src/components/primitives/__snapshots_web__/View.stories.tsx.snap +28 -0
  82. package/src/components/typography/Typograhy.tsx +130 -0
  83. package/src/components/typography/Typography.stories.tsx +144 -0
  84. package/src/components/typography/__snapshots__/Typography.stories.tsx.snap +1471 -0
  85. package/src/components/typography/__snapshots_web__/Typography.stories.tsx.snap +605 -0
  86. package/src/components/typography/utils/getTypeAndWeightValues.test.tsx +147 -0
  87. package/src/components/typography/utils/getTypeAndWeightValues.tsx +32 -0
  88. package/src/core/BumperDecorator.tsx +11 -0
  89. package/src/core/BumperProvider.tsx +15 -0
  90. package/src/index.ts +11 -0
  91. package/src/story-components/StorySection.tsx +70 -0
  92. package/src/story-components/StoryTitle.tsx +16 -0
  93. package/src/tamagui.config.ts +43 -0
  94. package/src/themes/__snapshots__/light.stories.tsx.snap +2192 -0
  95. package/src/themes/__snapshots_web__/light.stories.tsx.snap +985 -0
  96. package/src/themes/light.stories.tsx +38 -0
  97. package/src/themes/light.ts +59 -0
  98. package/src/themes/palettes/__snapshots__/deepPurpleColorPalette.stories.tsx.snap +2770 -0
  99. package/src/themes/palettes/__snapshots_web__/deepPurpleColorPalette.stories.tsx.snap +1213 -0
  100. package/src/themes/palettes/deepPurpleColorPalette.stories.tsx +37 -0
  101. package/src/themes/palettes/deepPurpleColorPalette.ts +147 -0
  102. package/src/themes/utils/breakpoints.ts +15 -0
  103. package/src/tokens/fonts.ts +95 -0
  104. package/src/tokens/size.ts +10 -0
  105. package/src/tokens/space.ts +15 -0
  106. package/tsconfig.build.json +25 -0
  107. package/tsconfig.eslint.json +6 -0
  108. package/tsconfig.json +21 -0
@@ -0,0 +1,43 @@
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
+
3
+ exports[`bumper/utils/Breakpoints Breakpoints 1`] = `
4
+ <DocumentFragment>
5
+ <div
6
+ class="css-view-175oi2r r-flex-13awgt0"
7
+ >
8
+ <span
9
+ class=""
10
+ style="display: contents;"
11
+ >
12
+ <span
13
+ class=" "
14
+ style="display: contents;"
15
+ >
16
+ <span
17
+ class=" t_light is_Theme"
18
+ style="display: contents;"
19
+ >
20
+ <span
21
+ class="font_GTStandard _WebkitFontSmoothing-_platformweb_antialiased _display-inline _boxSizing-border-box _wordWrap-break-word _whiteSpace-pre-wrap _marginTop-0px _marginRight-0px _marginBottom-0px _marginLeft-0px _fontFamily-f-family"
22
+ data-disable-theme="true"
23
+ >
24
+ Current breakpoint name: base
25
+ </span>
26
+ <span
27
+ class="font_GTStandard _WebkitFontSmoothing-_platformweb_antialiased _display-inline _boxSizing-border-box _wordWrap-break-word _whiteSpace-pre-wrap _marginTop-0px _marginRight-0px _marginBottom-0px _marginLeft-0px _fontFamily-f-family"
28
+ data-disable-theme="true"
29
+ >
30
+ Breakpoint value: base
31
+ </span>
32
+ <span
33
+ class="font_GTStandard _WebkitFontSmoothing-_platformweb_antialiased _display-inline _boxSizing-border-box _wordWrap-break-word _whiteSpace-pre-wrap _marginTop-0px _marginRight-0px _marginBottom-0px _marginLeft-0px _fontFamily-f-family"
34
+ data-disable-theme="true"
35
+ >
36
+ SwitchBreakpoints value: base
37
+ </span>
38
+ </span>
39
+ </span>
40
+ </span>
41
+ </div>
42
+ </DocumentFragment>
43
+ `;
@@ -0,0 +1,45 @@
1
+ import type { ComponentStory, Meta } from '@storybook/react';
2
+ import type { View } from '@tamagui/core';
3
+ import type { ReactElement } from 'react';
4
+ import { Typography } from '../typography/Typograhy';
5
+ import { SwitchBreakpoints } from './SwitchBreakpoins';
6
+ import { useBreakpointValue } from './hooks/useBreakpointValue';
7
+ import { useCurrentBreakpointName } from './hooks/useCurrentBreakpointName';
8
+
9
+ export default {
10
+ title: 'bumper/utils/Breakpoints',
11
+ } satisfies Meta;
12
+
13
+ const CurrentBreakpointNameComponent = (): ReactElement => {
14
+ const breakpointName = useCurrentBreakpointName();
15
+
16
+ return <Typography.Text>Current breakpoint name: {breakpointName}</Typography.Text>;
17
+ };
18
+
19
+ const BreakpointValueComponent = (): ReactElement => {
20
+ const value = useBreakpointValue({ base: 'base', small: 'small', medium: 'medium', large: 'large', wide: 'wide' });
21
+
22
+ return <Typography.Text>Breakpoint value: {value}</Typography.Text>;
23
+ };
24
+
25
+ const SwitchBreakpointsComponent = (): ReactElement => {
26
+ return (
27
+ <Typography.Text>
28
+ SwitchBreakpoints value: <SwitchBreakpoints base="base" small="small" medium="medium" large="large" wide="wide" />
29
+ </Typography.Text>
30
+ );
31
+ };
32
+
33
+ export const BreakpointsStory: ComponentStory<typeof View> = () => {
34
+ return (
35
+ <>
36
+ <CurrentBreakpointNameComponent />
37
+
38
+ <BreakpointValueComponent />
39
+
40
+ <SwitchBreakpointsComponent />
41
+ </>
42
+ );
43
+ };
44
+
45
+ BreakpointsStory.storyName = 'Breakpoints';
@@ -0,0 +1,12 @@
1
+ import { useMemo } from 'react';
2
+ import type { ValueForBreakpoint } from '../utils/breakpointsUtils';
3
+ import { getValueForBreakpoint } from '../utils/breakpointsUtils';
4
+ import { useCurrentBreakpointName } from './useCurrentBreakpointName';
5
+
6
+ export function useBreakpointValue<T>(values: ValueForBreakpoint<T>): T {
7
+ const breakpoint = useCurrentBreakpointName();
8
+
9
+ return useMemo(() => {
10
+ return getValueForBreakpoint(breakpoint, values);
11
+ }, [breakpoint, values]);
12
+ }
@@ -0,0 +1,20 @@
1
+ import { useMedia } from '@tamagui/core';
2
+ import { BreakpointNameEnum } from '../../../themes/utils/breakpoints';
3
+
4
+ export function useCurrentBreakpointName(): BreakpointNameEnum {
5
+ const media = useMedia();
6
+
7
+ switch (true) {
8
+ case media.wide:
9
+ return BreakpointNameEnum.WIDE;
10
+ case media.large:
11
+ return BreakpointNameEnum.LARGE;
12
+ case media.medium:
13
+ return BreakpointNameEnum.MEDIUM;
14
+ case media.small:
15
+ return BreakpointNameEnum.SMALL;
16
+ case media.base:
17
+ default:
18
+ return BreakpointNameEnum.BASE;
19
+ }
20
+ }
@@ -0,0 +1 @@
1
+ export { useWindowDimensions as useWindowSize } from 'react-native';
@@ -0,0 +1,85 @@
1
+ import { BreakpointNameEnum } from '../../../themes/utils/breakpoints';
2
+ import { getValueForBreakpoint } from './breakpointsUtils';
3
+
4
+ describe('getValueForBreakpoint', () => {
5
+ test('should return the base value for BASE breakpoint', () => {
6
+ expect(getValueForBreakpoint(BreakpointNameEnum.BASE, { base: 'base-value' })).toBe('base-value');
7
+ });
8
+
9
+ test('should return small value for SMALL breakpoint if available', () => {
10
+ expect(getValueForBreakpoint(BreakpointNameEnum.SMALL, { base: 'base-value', small: 'small-value' })).toBe(
11
+ 'small-value',
12
+ );
13
+ });
14
+
15
+ test('should fallback to base value for SMALL breakpoint if small not provided', () => {
16
+ expect(getValueForBreakpoint(BreakpointNameEnum.SMALL, { base: 'base-value' })).toBe('base-value');
17
+ });
18
+
19
+ test('should return medium value for MEDIUM breakpoint if available', () => {
20
+ expect(
21
+ getValueForBreakpoint(BreakpointNameEnum.MEDIUM, {
22
+ base: 'base-value',
23
+ small: 'small-value',
24
+ medium: 'medium-value',
25
+ }),
26
+ ).toBe('medium-value');
27
+ });
28
+
29
+ test('should fallback to small value for MEDIUM breakpoint if medium not provided', () => {
30
+ expect(
31
+ getValueForBreakpoint(BreakpointNameEnum.MEDIUM, {
32
+ base: 'base-value',
33
+ small: 'small-value',
34
+ }),
35
+ ).toBe('small-value');
36
+ });
37
+
38
+ test('should return large value for LARGE breakpoint if available', () => {
39
+ expect(
40
+ getValueForBreakpoint(BreakpointNameEnum.LARGE, {
41
+ base: 'base-value',
42
+ small: 'small-value',
43
+ medium: 'medium-value',
44
+ large: 'large-value',
45
+ }),
46
+ ).toBe('large-value');
47
+ });
48
+
49
+ test('should fallback to medium value for LARGE breakpoint if large not provided', () => {
50
+ expect(
51
+ getValueForBreakpoint(BreakpointNameEnum.LARGE, {
52
+ base: 'base-value',
53
+ small: 'small-value',
54
+ medium: 'medium-value',
55
+ }),
56
+ ).toBe('medium-value');
57
+ });
58
+
59
+ test('should return wide value for WIDE breakpoint if available', () => {
60
+ expect(
61
+ getValueForBreakpoint(BreakpointNameEnum.WIDE, {
62
+ base: 'base-value',
63
+ small: 'small-value',
64
+ medium: 'medium-value',
65
+ large: 'large-value',
66
+ wide: 'wide-value',
67
+ }),
68
+ ).toBe('wide-value');
69
+ });
70
+
71
+ test('should fallback to large value for WIDE breakpoint if wide not provided', () => {
72
+ expect(
73
+ getValueForBreakpoint(BreakpointNameEnum.WIDE, {
74
+ base: 'base-value',
75
+ small: 'small-value',
76
+ medium: 'medium-value',
77
+ large: 'large-value',
78
+ }),
79
+ ).toBe('large-value');
80
+ });
81
+
82
+ test('should return base value for unknown breakpoint', () => {
83
+ expect(getValueForBreakpoint('unknown' as BreakpointNameEnum, { base: 'base-value' })).toBe('base-value');
84
+ });
85
+ });
@@ -0,0 +1,28 @@
1
+ import { BreakpointNameEnum } from '../../../themes/utils/breakpoints';
2
+
3
+ export interface ValueForBreakpoint<T> {
4
+ base: T;
5
+ small?: T;
6
+ medium?: T;
7
+ large?: T;
8
+ wide?: T;
9
+ }
10
+
11
+ export function getValueForBreakpoint<T>(
12
+ breakpoint: BreakpointNameEnum,
13
+ { base, small, medium, large, wide }: ValueForBreakpoint<T>,
14
+ ): T {
15
+ switch (breakpoint) {
16
+ case BreakpointNameEnum.WIDE:
17
+ return wide ?? large ?? medium ?? small ?? base;
18
+ case BreakpointNameEnum.LARGE:
19
+ return large ?? medium ?? small ?? base;
20
+ case BreakpointNameEnum.MEDIUM:
21
+ return medium ?? small ?? base;
22
+ case BreakpointNameEnum.SMALL:
23
+ return small ?? base;
24
+ case BreakpointNameEnum.BASE:
25
+ default:
26
+ return base;
27
+ }
28
+ }
@@ -0,0 +1,62 @@
1
+ import type { ComponentStory, Meta } from '@storybook/react';
2
+ import { Text } from '@tamagui/core';
3
+ import { StorySection } from '../../story-components/StorySection';
4
+ import { Typography } from '../typography/Typograhy';
5
+ import { HStack, Stack, VStack } from './Stacks';
6
+
7
+ export default {
8
+ title: 'bumper/Primitives/Stacks',
9
+ component: Stack,
10
+ } satisfies Meta<unknown>;
11
+
12
+ export const StacksStory: ComponentStory<typeof Stack> = () => (
13
+ <>
14
+ <Text>
15
+ - space is deprecated, use gap instead - direction from NB is now flexDirection- reversed from NB is now direction
16
+ (rtl/ltr)
17
+ </Text>
18
+
19
+ <StorySection title="Stack">
20
+ <StorySection.SubSection title="Demo">
21
+ <Stack flexDirection="column-reverse" gap="$2">
22
+ <Typography.Text>1</Typography.Text>
23
+ <Typography.Text>2</Typography.Text>
24
+ </Stack>
25
+ </StorySection.SubSection>
26
+ </StorySection>
27
+
28
+ <StorySection title="HStack">
29
+ <StorySection.SubSection title="Default">
30
+ <HStack>
31
+ <Typography.Text>1</Typography.Text>
32
+ <Typography.Text>2</Typography.Text>
33
+ </HStack>
34
+ </StorySection.SubSection>
35
+
36
+ <StorySection.SubSection title="With gap (space)">
37
+ <HStack gap="$2">
38
+ <Typography.Text backgroundColor="$bg.accent.default">1</Typography.Text>
39
+ <Typography.Text backgroundColor="$bg.accent.default">2</Typography.Text>
40
+ </HStack>
41
+ </StorySection.SubSection>
42
+ </StorySection>
43
+
44
+ <StorySection title="VStack">
45
+ <StorySection.SubSection title="Default">
46
+ <VStack>
47
+ <Typography.Text>1</Typography.Text>
48
+ <Typography.Text>2</Typography.Text>
49
+ </VStack>
50
+ </StorySection.SubSection>
51
+
52
+ <StorySection.SubSection title="With gap (space)">
53
+ <VStack gap="$2">
54
+ <Typography.Text backgroundColor="$bg.accent.default">1</Typography.Text>
55
+ <Typography.Text backgroundColor="$bg.accent.default">2</Typography.Text>
56
+ </VStack>
57
+ </StorySection.SubSection>
58
+ </StorySection>
59
+ </>
60
+ );
61
+
62
+ StacksStory.storyName = 'Stacks';
@@ -0,0 +1,19 @@
1
+ import { Stack, styled } from '@tamagui/core';
2
+ import type { GetProps } from '@tamagui/core';
3
+
4
+ export { Stack } from '@tamagui/core';
5
+ export type StackProps = GetProps<typeof Stack>;
6
+
7
+ export const HStack = styled(Stack, {
8
+ name: 'HStack',
9
+ flexDirection: 'row',
10
+ });
11
+
12
+ export type HStackProps = GetProps<typeof HStack>;
13
+
14
+ export const VStack = styled(Stack, {
15
+ name: 'VStack',
16
+ flexDirection: 'column',
17
+ });
18
+
19
+ export type VStackProps = GetProps<typeof VStack>;
@@ -0,0 +1,13 @@
1
+ import type { ComponentStory, Meta } from '@storybook/react';
2
+ import { View } from './View';
3
+
4
+ export default {
5
+ title: 'bumper/Primitives/View',
6
+ component: View,
7
+ } satisfies Meta<unknown>;
8
+
9
+ export const ViewStory: ComponentStory<typeof View> = () => (
10
+ <View width={50} height={500} backgroundColor="$bg.base.mid.default" />
11
+ );
12
+
13
+ ViewStory.storyName = 'View';
@@ -0,0 +1,5 @@
1
+ import type { View } from '@tamagui/core';
2
+ import type { ComponentProps } from 'react';
3
+
4
+ export { View } from '@tamagui/core';
5
+ export type ViewProps = ComponentProps<typeof View>;