@ornikar/bumper 2.8.1-canary.1768927687.5a0439490957cfbbe8b8c5136c5fc68b0828466d.0 → 2.8.1-canary.1769087114.a46790da1b5b6361954b6ad25766074d3ed69784.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.
- package/CHANGELOG.md +4 -1
- package/dist/definitions/index.d.ts +2 -1
- package/dist/definitions/index.d.ts.map +1 -1
- package/dist/definitions/shared/storybook/StoryTitle.d.ts +1 -1
- package/dist/definitions/shared/storybook/helpers/argsHelpers.d.ts +8 -0
- package/dist/definitions/shared/storybook/helpers/argsHelpers.d.ts.map +1 -0
- package/dist/definitions/system/content/typography/Typography.d.ts +5 -14
- package/dist/definitions/system/content/typography/Typography.d.ts.map +1 -1
- package/dist/definitions/system/content/typography/TypographyLink.d.ts +9 -0
- package/dist/definitions/system/content/typography/TypographyLink.d.ts.map +1 -0
- package/dist/definitions/system/content/typography/index.d.ts +21 -0
- package/dist/definitions/system/content/typography/index.d.ts.map +1 -0
- package/dist/definitions/system/core/themes/light/light.d.ts +3 -0
- package/dist/definitions/system/core/themes/light/light.d.ts.map +1 -0
- package/dist/definitions/system/core/themes/themes.d.ts +6 -0
- package/dist/definitions/system/core/themes/themes.d.ts.map +1 -0
- package/dist/definitions/tamagui.config.d.ts +1 -57
- package/dist/definitions/tamagui.config.d.ts.map +1 -1
- package/dist/index-metro.es.android.js +139 -105
- package/dist/index-metro.es.android.js.map +1 -1
- package/dist/index-metro.es.ios.js +139 -105
- package/dist/index-metro.es.ios.js.map +1 -1
- package/dist/index-node-22.22.cjs.js +143 -109
- package/dist/index-node-22.22.cjs.js.map +1 -1
- package/dist/index-node-22.22.cjs.web.js +143 -109
- package/dist/index-node-22.22.cjs.web.js.map +1 -1
- package/dist/index-node-22.22.es.mjs +145 -111
- package/dist/index-node-22.22.es.mjs.map +1 -1
- package/dist/index-node-22.22.es.web.mjs +145 -111
- package/dist/index-node-22.22.es.web.mjs.map +1 -1
- package/dist/index.es.js +137 -103
- package/dist/index.es.js.map +1 -1
- package/dist/index.es.web.js +137 -103
- package/dist/index.es.web.js.map +1 -1
- package/dist/tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/index.ts +2 -1
- package/src/shared/storybook/StoryTitle.tsx +1 -1
- package/src/shared/storybook/helpers/argsHelpers.ts +47 -0
- package/src/system/content/icon/Icon.features.stories.tsx +1 -1
- package/src/system/content/icon/Icon.stories.tsx +3 -22
- package/src/system/content/typography/Typography.features.stories.tsx +1 -1
- package/src/system/content/typography/Typography.stories.tsx +3 -23
- package/src/system/content/typography/Typography.tsx +2 -14
- package/src/system/content/typography/TypographyIcon.features.stories.tsx +1 -1
- package/src/system/content/typography/TypographyIcon.stories.tsx +2 -19
- package/src/system/content/typography/TypographyLink.features.stories.tsx +62 -0
- package/src/system/content/typography/TypographyLink.stories.tsx +72 -0
- package/src/system/content/typography/TypographyLink.tsx +38 -0
- package/src/system/content/typography/__snapshots__/TypographyLink.features.stories.tsx.snap +229 -0
- package/src/system/content/typography/__snapshots__/TypographyLink.stories.tsx.snap +41 -0
- package/src/system/content/typography/__snapshots_web__/TypographyLink.features.stories.tsx.snap +196 -0
- package/src/system/content/typography/__snapshots_web__/TypographyLink.stories.tsx.snap +33 -0
- package/src/system/content/typography/index.ts +15 -0
- package/src/system/core/primitives/Center.features.stories.tsx +1 -1
- package/src/system/core/primitives/Center.stories.tsx +6 -89
- package/src/system/core/primitives/Image/Image.stories.tsx +3 -8
- package/src/system/core/primitives/Pressable.features.stories.tsx +1 -1
- package/src/system/core/primitives/Pressable.stories.tsx +4 -53
- package/src/system/core/primitives/ScrollView/ScrollView.features.stories.tsx +1 -1
- package/src/system/core/primitives/ScrollView/ScrollView.stories.tsx +3 -6
- package/src/system/core/primitives/Stack.features.stories.tsx +1 -1
- package/src/system/core/primitives/Stack.stories.tsx +4 -39
- package/src/system/core/primitives/View.features.stories.tsx +1 -1
- package/src/system/core/primitives/View.stories.tsx +6 -107
- package/src/system/core/themes/{light.stories.tsx → light/light.stories.tsx} +5 -5
- package/src/system/core/themes/{light.ts → light/light.ts} +3 -2
- package/src/system/core/themes/themes.ts +69 -0
- package/src/system/core/tokens/breakpoints.stories.tsx +1 -1
- package/src/system/core/tokens/fonts.stories.tsx +1 -1
- package/src/system/core/tokens/palettes/deepPurpleColorPalette.stories.tsx +1 -1
- package/src/system/core/tokens/radius.stories.tsx +1 -1
- package/src/system/core/tokens/size.stories.tsx +1 -1
- package/src/system/core/tokens/space.stories.tsx +1 -1
- package/src/tamagui.config.ts +1 -1
- package/dist/definitions/system/core/themes/light.d.ts +0 -58
- package/dist/definitions/system/core/themes/light.d.ts.map +0 -1
- /package/src/system/core/themes/{__snapshots__ → light/__snapshots__}/light.stories.tsx.snap +0 -0
- /package/src/system/core/themes/{__snapshots_web__ → light/__snapshots_web__}/light.stories.tsx.snap +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ornikar/bumper",
|
|
3
|
-
"version": "2.8.1-canary.
|
|
3
|
+
"version": "2.8.1-canary.1769087114.a46790da1b5b6361954b6ad25766074d3ed69784.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"directory": "@ornikar/bumper",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@babel/runtime": "^7.24.0",
|
|
31
|
-
"@ornikar/kitt-icons": "14.3.
|
|
31
|
+
"@ornikar/kitt-icons": "^14.3.1",
|
|
32
32
|
"@tamagui/core": "1.144.2",
|
|
33
33
|
"@tamagui/image": "1.144.2",
|
|
34
34
|
"@tamagui/scroll-view": "1.144.2"
|
package/src/index.ts
CHANGED
|
@@ -16,9 +16,10 @@ export type { ViewProps } from './system/core/primitives/View';
|
|
|
16
16
|
export { View } from './system/core/primitives/View';
|
|
17
17
|
|
|
18
18
|
// Typography
|
|
19
|
+
export { Typography } from './system/content/typography';
|
|
19
20
|
export type { TypographyTextProps } from './system/content/typography/Typography';
|
|
20
|
-
export { Typography } from './system/content/typography/Typography';
|
|
21
21
|
export type { TypographyIconProps } from './system/content/typography/TypographyIcon';
|
|
22
|
+
export type { TypographyLinkProps } from './system/content/typography/TypographyLink';
|
|
22
23
|
|
|
23
24
|
// Breakpoints
|
|
24
25
|
export { useBreakpointValue } from './system/core/breakpoints/hooks/useBreakpointValue';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ArgTypes } from '@storybook/react';
|
|
2
|
+
import {
|
|
3
|
+
SEMANTIC_TOKENS_BACKGROUND,
|
|
4
|
+
SEMANTIC_TOKENS_BORDER,
|
|
5
|
+
SEMANTIC_TOKENS_CONTENT,
|
|
6
|
+
} from '../../../system/core/themes/themes';
|
|
7
|
+
import { radiusTokens } from '../../../system/core/tokens/radius';
|
|
8
|
+
import { sizeTokens } from '../../../system/core/tokens/size';
|
|
9
|
+
import { spaceTokens } from '../../../system/core/tokens/space';
|
|
10
|
+
|
|
11
|
+
const getTokenKey = (name: string) => `$${name}`;
|
|
12
|
+
|
|
13
|
+
export const backgroundColorArgType: ArgTypes[string] = {
|
|
14
|
+
control: 'select',
|
|
15
|
+
options: SEMANTIC_TOKENS_BACKGROUND.map(getTokenKey),
|
|
16
|
+
description: 'Background color (semantic theme token)',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const spaceArgType: ArgTypes[string] = {
|
|
20
|
+
control: 'select',
|
|
21
|
+
options: Object.keys(spaceTokens).map(getTokenKey),
|
|
22
|
+
description: 'Space value (space token)',
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const sizeArgType: ArgTypes[string] = {
|
|
26
|
+
control: 'select',
|
|
27
|
+
options: Object.keys(sizeTokens).map(getTokenKey),
|
|
28
|
+
description: 'Size value (size token)',
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const radiusArgType: ArgTypes[string] = {
|
|
32
|
+
control: 'select',
|
|
33
|
+
options: Object.keys(radiusTokens).map(getTokenKey),
|
|
34
|
+
description: 'Border radius (radius token)',
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const contentColorArgType: ArgTypes[string] = {
|
|
38
|
+
control: 'select',
|
|
39
|
+
options: SEMANTIC_TOKENS_CONTENT.map(getTokenKey),
|
|
40
|
+
description: 'Content color (semantic theme token)',
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const borderColorArgType: ArgTypes[string] = {
|
|
44
|
+
control: 'select',
|
|
45
|
+
options: SEMANTIC_TOKENS_BORDER.map(getTokenKey),
|
|
46
|
+
description: 'Border color (semantic theme token)',
|
|
47
|
+
};
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from '@ornikar/kitt-icons/phosphor';
|
|
7
7
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
8
8
|
import { HStack, VStack } from '../../core/primitives/Stack';
|
|
9
|
-
import { Typography } from '../typography
|
|
9
|
+
import { Typography } from '../typography';
|
|
10
10
|
import { Icon } from './Icon';
|
|
11
11
|
|
|
12
12
|
const meta: Meta<typeof Icon> = {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { StarRegularIcon } from '@ornikar/kitt-icons/phosphor';
|
|
2
2
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { contentColorArgType, sizeArgType } from '../../../shared/storybook/helpers/argsHelpers';
|
|
3
4
|
import { Icon } from './Icon';
|
|
4
5
|
|
|
5
6
|
const meta: Meta<typeof Icon> = {
|
|
@@ -7,28 +8,8 @@ const meta: Meta<typeof Icon> = {
|
|
|
7
8
|
component: Icon,
|
|
8
9
|
tags: ['autodocs'],
|
|
9
10
|
argTypes: {
|
|
10
|
-
size:
|
|
11
|
-
|
|
12
|
-
options: ['$size.16', '$size.20', '$size.24', '$size.32', '$size.48', '$size.64', '$size.80', '$size.96'],
|
|
13
|
-
description: 'Icon size (uses size tokens)',
|
|
14
|
-
},
|
|
15
|
-
color: {
|
|
16
|
-
control: 'select',
|
|
17
|
-
options: [
|
|
18
|
-
'$content.base.low',
|
|
19
|
-
'$content.base.mid',
|
|
20
|
-
'$content.base.hi',
|
|
21
|
-
'$content.accent',
|
|
22
|
-
'$content.promo',
|
|
23
|
-
'$content.info',
|
|
24
|
-
'$content.success',
|
|
25
|
-
'$content.warning',
|
|
26
|
-
'$content.danger',
|
|
27
|
-
'$content.muted',
|
|
28
|
-
'$content.disabled',
|
|
29
|
-
],
|
|
30
|
-
description: 'Icon color (semantic theme token)',
|
|
31
|
-
},
|
|
11
|
+
size: sizeArgType,
|
|
12
|
+
color: contentColorArgType,
|
|
32
13
|
},
|
|
33
14
|
};
|
|
34
15
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { VStack } from '../../core/primitives/Stack';
|
|
3
|
-
import { Typography } from '
|
|
3
|
+
import { Typography } from '.';
|
|
4
4
|
|
|
5
5
|
const meta: Meta<typeof Typography.Text> = {
|
|
6
6
|
title: 'Bumper/Content/Typography/Features',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import {
|
|
2
|
+
import { contentColorArgType } from '../../../shared/storybook/helpers/argsHelpers';
|
|
3
|
+
import { Typography } from '.';
|
|
3
4
|
|
|
4
5
|
const meta: Meta<typeof Typography.Text> = {
|
|
5
6
|
title: 'Bumper/Content/Typography',
|
|
@@ -40,28 +41,7 @@ const meta: Meta<typeof Typography.Text> = {
|
|
|
40
41
|
options: ['regular', 'semibold', 'bold'],
|
|
41
42
|
description: 'Font weight (note: heading/label/content-caps variants have fixed weights)',
|
|
42
43
|
},
|
|
43
|
-
color:
|
|
44
|
-
control: 'select',
|
|
45
|
-
options: [
|
|
46
|
-
'$content.base.low',
|
|
47
|
-
'$content.base.mid',
|
|
48
|
-
'$content.base.hi',
|
|
49
|
-
'$content.base.onContrasted.low',
|
|
50
|
-
'$content.base.onContrasted.mid',
|
|
51
|
-
'$content.base.onContrasted.hi',
|
|
52
|
-
'$content.accent',
|
|
53
|
-
'$content.promo',
|
|
54
|
-
'$content.promo.onContrasted',
|
|
55
|
-
'$content.info',
|
|
56
|
-
'$content.success',
|
|
57
|
-
'$content.warning',
|
|
58
|
-
'$content.danger',
|
|
59
|
-
'$content.muted',
|
|
60
|
-
'$content.disabled',
|
|
61
|
-
'$content.disabled.onContrasted',
|
|
62
|
-
],
|
|
63
|
-
description: 'Text color (semantic theme token)',
|
|
64
|
-
},
|
|
44
|
+
color: contentColorArgType,
|
|
65
45
|
},
|
|
66
46
|
};
|
|
67
47
|
|
|
@@ -8,7 +8,6 @@ import type {
|
|
|
8
8
|
HeadingFontVariants,
|
|
9
9
|
LabelFontVariants,
|
|
10
10
|
} from '../../core/tokens/fonts';
|
|
11
|
-
import { TypographyIcon } from './TypographyIcon';
|
|
12
11
|
import { getVariantAndWeightValues } from './utils/getVariantAndWeightValues';
|
|
13
12
|
import {
|
|
14
13
|
TypograhyColorContext,
|
|
@@ -97,7 +96,7 @@ export type TypographyTextProps =
|
|
|
97
96
|
| OverrideTamaguiComponentProps<HeadingLabelProps>
|
|
98
97
|
| OverrideTamaguiComponentProps<ContentCapsProps>;
|
|
99
98
|
|
|
100
|
-
const TypographyBase = InternalTypography.styleable<TypographyTextProps, TypographyTextProps>((props, ref) => {
|
|
99
|
+
export const TypographyBase = InternalTypography.styleable<TypographyTextProps, TypographyTextProps>((props, ref) => {
|
|
101
100
|
const typographyVariantAncestorValue = useTypographyVariant();
|
|
102
101
|
const typographyWeightAncestorValue = useTypographyWeight();
|
|
103
102
|
const typographyColorAncestorValue = useTypographyColor();
|
|
@@ -147,19 +146,8 @@ const TypographyBase = InternalTypography.styleable<TypographyTextProps, Typogra
|
|
|
147
146
|
return content;
|
|
148
147
|
});
|
|
149
148
|
|
|
150
|
-
const createHeading = (level: number): TamaguiComponent<TypographyTextProps> => {
|
|
149
|
+
export const createHeading = (level: number): TamaguiComponent<TypographyTextProps> => {
|
|
151
150
|
return TypographyBase.styleable<TypographyTextProps, TypographyTextProps>((props, ref) => {
|
|
152
151
|
return <TypographyBase ref={ref} {...props} role="heading" aria-level={level} />;
|
|
153
152
|
});
|
|
154
153
|
};
|
|
155
|
-
|
|
156
|
-
export const Typography = {
|
|
157
|
-
Text: TypographyBase,
|
|
158
|
-
Header1: createHeading(1),
|
|
159
|
-
Header2: createHeading(2),
|
|
160
|
-
Header3: createHeading(3),
|
|
161
|
-
Header4: createHeading(4),
|
|
162
|
-
Header5: createHeading(5),
|
|
163
|
-
Header6: createHeading(6),
|
|
164
|
-
Icon: TypographyIcon,
|
|
165
|
-
};
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
} from '@ornikar/kitt-icons/phosphor';
|
|
7
7
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
8
8
|
import { HStack, VStack } from '../../core/primitives/Stack';
|
|
9
|
-
import { Typography } from './Typography';
|
|
10
9
|
import { TypographyIcon } from './TypographyIcon';
|
|
10
|
+
import { Typography } from '.';
|
|
11
11
|
|
|
12
12
|
const meta: Meta<typeof TypographyIcon> = {
|
|
13
13
|
title: 'Bumper/Content/TypographyIcon/Features',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { StarRegularIcon } from '@ornikar/kitt-icons/phosphor';
|
|
2
2
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { contentColorArgType } from '../../../shared/storybook/helpers/argsHelpers';
|
|
3
4
|
import { TypographyIcon } from './TypographyIcon';
|
|
4
5
|
|
|
5
6
|
const meta: Meta<typeof TypographyIcon> = {
|
|
@@ -17,25 +18,7 @@ const meta: Meta<typeof TypographyIcon> = {
|
|
|
17
18
|
description: 'Icon size (uses size tokens)',
|
|
18
19
|
},
|
|
19
20
|
color: {
|
|
20
|
-
|
|
21
|
-
options: [
|
|
22
|
-
'$content.base.low',
|
|
23
|
-
'$content.base.mid',
|
|
24
|
-
'$content.base.hi',
|
|
25
|
-
'$content.base.onContrasted.low',
|
|
26
|
-
'$content.base.onContrasted.mid',
|
|
27
|
-
'$content.base.onContrasted.hi',
|
|
28
|
-
'$content.accent',
|
|
29
|
-
'$content.promo',
|
|
30
|
-
'$content.promo.onContrasted',
|
|
31
|
-
'$content.info',
|
|
32
|
-
'$content.success',
|
|
33
|
-
'$content.warning',
|
|
34
|
-
'$content.danger',
|
|
35
|
-
'$content.muted',
|
|
36
|
-
'$content.disabled',
|
|
37
|
-
'$content.disabled.onContrasted',
|
|
38
|
-
],
|
|
21
|
+
...contentColorArgType,
|
|
39
22
|
description: 'Icon color (semantic theme token). When omitted, inherits from parent Typography context.',
|
|
40
23
|
},
|
|
41
24
|
},
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { VStack } from '../../core/primitives/Stack';
|
|
3
|
+
import { TypographyLink } from './TypographyLink';
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof TypographyLink> = {
|
|
6
|
+
title: 'Bumper/Content/TypographyLink/Features',
|
|
7
|
+
component: TypographyLink,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default meta;
|
|
11
|
+
type Story = StoryObj<typeof meta>;
|
|
12
|
+
|
|
13
|
+
export const DisabledFalse: Story = {
|
|
14
|
+
args: {
|
|
15
|
+
disabled: false,
|
|
16
|
+
children: 'Enabled link (clickable with pointer cursor)',
|
|
17
|
+
onPress: () => alert('Link clicked!'),
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const DisabledTrue: Story = {
|
|
22
|
+
args: {
|
|
23
|
+
disabled: true,
|
|
24
|
+
children: 'Disabled link (not-allowed cursor, onPress removed)',
|
|
25
|
+
onPress: () => alert('This should not be called'),
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const NoUnderlineFalse: Story = {
|
|
30
|
+
args: {
|
|
31
|
+
noUnderline: false,
|
|
32
|
+
children: 'Link with underline (default)',
|
|
33
|
+
onPress: () => alert('Link clicked!'),
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const NoUnderlineTrue: Story = {
|
|
38
|
+
args: {
|
|
39
|
+
noUnderline: true,
|
|
40
|
+
children: 'Link without underline',
|
|
41
|
+
onPress: () => alert('Link clicked!'),
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const StateHover: Story = {
|
|
46
|
+
render: () => (
|
|
47
|
+
<VStack gap="$space.16">
|
|
48
|
+
<TypographyLink forceStyle="hover" onPress={() => alert('Link clicked!')}>
|
|
49
|
+
Forced hover state - underline removed (hoverStyle applied)
|
|
50
|
+
</TypographyLink>
|
|
51
|
+
<TypographyLink noUnderline forceStyle="hover" onPress={() => alert('Link clicked!')}>
|
|
52
|
+
Forced hover state with noUnderline - no visual change
|
|
53
|
+
</TypographyLink>
|
|
54
|
+
<TypographyLink disabled forceStyle="hover" onPress={() => alert('Link clicked!')}>
|
|
55
|
+
Forced hover state on disabled - underline removed (hoverStyle applied)
|
|
56
|
+
</TypographyLink>
|
|
57
|
+
<TypographyLink disabled noUnderline forceStyle="hover" onPress={() => alert('Link clicked!')}>
|
|
58
|
+
Forced hover state with noUnderline on disabled - no visual change
|
|
59
|
+
</TypographyLink>
|
|
60
|
+
</VStack>
|
|
61
|
+
),
|
|
62
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { contentColorArgType } from '../../../shared/storybook/helpers/argsHelpers';
|
|
3
|
+
import { TypographyLink } from './TypographyLink';
|
|
4
|
+
|
|
5
|
+
const meta: Meta<typeof TypographyLink> = {
|
|
6
|
+
title: 'Bumper/Content/TypographyLink',
|
|
7
|
+
component: TypographyLink,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
argTypes: {
|
|
10
|
+
variant: {
|
|
11
|
+
control: 'select',
|
|
12
|
+
options: [
|
|
13
|
+
'heading-2xl',
|
|
14
|
+
'heading-xl',
|
|
15
|
+
'heading-l',
|
|
16
|
+
'heading-m',
|
|
17
|
+
'heading-s',
|
|
18
|
+
'heading-xs',
|
|
19
|
+
'heading-2xs',
|
|
20
|
+
'body-xl',
|
|
21
|
+
'body-l',
|
|
22
|
+
'body-m',
|
|
23
|
+
'body-s',
|
|
24
|
+
'body-xs',
|
|
25
|
+
'label-xl',
|
|
26
|
+
'label-l',
|
|
27
|
+
'label-m',
|
|
28
|
+
'label-s',
|
|
29
|
+
'content-caps-3xl',
|
|
30
|
+
'content-caps-2xl',
|
|
31
|
+
'content-caps-xl',
|
|
32
|
+
'content-caps-l',
|
|
33
|
+
'content-caps-m',
|
|
34
|
+
'content-caps-s',
|
|
35
|
+
'content-caps-xs',
|
|
36
|
+
],
|
|
37
|
+
description: 'Typography variant (inherited from Typography.Text)',
|
|
38
|
+
},
|
|
39
|
+
weight: {
|
|
40
|
+
control: 'select',
|
|
41
|
+
options: ['regular', 'semibold', 'bold'],
|
|
42
|
+
description: 'Font weight (inherited from Typography.Text)',
|
|
43
|
+
},
|
|
44
|
+
color: contentColorArgType,
|
|
45
|
+
disabled: {
|
|
46
|
+
control: 'boolean',
|
|
47
|
+
description: 'When true, shows not-allowed cursor and disabled color',
|
|
48
|
+
},
|
|
49
|
+
noUnderline: {
|
|
50
|
+
control: 'boolean',
|
|
51
|
+
description: 'When true, removes the underline decoration',
|
|
52
|
+
},
|
|
53
|
+
onPress: {
|
|
54
|
+
description: 'Click/press handler (automatically removed when disabled=true)',
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export default meta;
|
|
60
|
+
type Story = StoryObj<typeof meta>;
|
|
61
|
+
|
|
62
|
+
export const Default: Story = {
|
|
63
|
+
args: {
|
|
64
|
+
variant: 'body-m',
|
|
65
|
+
weight: 'regular',
|
|
66
|
+
color: '$content.accent',
|
|
67
|
+
disabled: false,
|
|
68
|
+
noUnderline: false,
|
|
69
|
+
children: 'This is a link',
|
|
70
|
+
onPress: () => alert('Link clicked!'),
|
|
71
|
+
},
|
|
72
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { GetProps } from '@tamagui/core';
|
|
2
|
+
import { styled } from '@tamagui/core';
|
|
3
|
+
import { TypographyBase } from './Typography';
|
|
4
|
+
|
|
5
|
+
export const TypographyLink = styled(TypographyBase, {
|
|
6
|
+
name: 'TypographyLink',
|
|
7
|
+
role: 'link',
|
|
8
|
+
variants: {
|
|
9
|
+
disabled: {
|
|
10
|
+
true: {
|
|
11
|
+
cursor: 'not-allowed',
|
|
12
|
+
onPress: undefined,
|
|
13
|
+
color: '$content.disabled',
|
|
14
|
+
hoverStyle: undefined,
|
|
15
|
+
},
|
|
16
|
+
false: {
|
|
17
|
+
cursor: 'pointer',
|
|
18
|
+
hoverStyle: {
|
|
19
|
+
textDecorationLine: 'none',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
noUnderline: {
|
|
24
|
+
true: {
|
|
25
|
+
textDecorationLine: 'none',
|
|
26
|
+
},
|
|
27
|
+
false: {
|
|
28
|
+
textDecorationLine: 'underline',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
} as const,
|
|
32
|
+
defaultVariants: {
|
|
33
|
+
disabled: false,
|
|
34
|
+
noUnderline: false,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export type TypographyLinkProps = GetProps<typeof TypographyLink>;
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
|
2
|
+
|
|
3
|
+
exports[`Bumper/Content/TypographyLink/Features DisabledFalse 1`] = `
|
|
4
|
+
<RNCSafeAreaProvider
|
|
5
|
+
onInsetsChange={[Function]}
|
|
6
|
+
style={
|
|
7
|
+
[
|
|
8
|
+
{
|
|
9
|
+
"flex": 1,
|
|
10
|
+
},
|
|
11
|
+
undefined,
|
|
12
|
+
]
|
|
13
|
+
}
|
|
14
|
+
>
|
|
15
|
+
<Text
|
|
16
|
+
onBlur={[Function]}
|
|
17
|
+
onClick={[Function]}
|
|
18
|
+
onFocus={[Function]}
|
|
19
|
+
onResponderGrant={[Function]}
|
|
20
|
+
onResponderMove={[Function]}
|
|
21
|
+
onResponderRelease={[Function]}
|
|
22
|
+
onResponderTerminate={[Function]}
|
|
23
|
+
onResponderTerminationRequest={[Function]}
|
|
24
|
+
onStartShouldSetResponder={[Function]}
|
|
25
|
+
role="link"
|
|
26
|
+
style={
|
|
27
|
+
{
|
|
28
|
+
"fontFamily": "GTStandard",
|
|
29
|
+
"textDecorationLine": "underline",
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
suppressHighlighting={true}
|
|
33
|
+
>
|
|
34
|
+
Enabled link (clickable with pointer cursor)
|
|
35
|
+
</Text>
|
|
36
|
+
</RNCSafeAreaProvider>
|
|
37
|
+
`;
|
|
38
|
+
|
|
39
|
+
exports[`Bumper/Content/TypographyLink/Features DisabledTrue 1`] = `
|
|
40
|
+
<RNCSafeAreaProvider
|
|
41
|
+
onInsetsChange={[Function]}
|
|
42
|
+
style={
|
|
43
|
+
[
|
|
44
|
+
{
|
|
45
|
+
"flex": 1,
|
|
46
|
+
},
|
|
47
|
+
undefined,
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
>
|
|
51
|
+
<Text
|
|
52
|
+
role="link"
|
|
53
|
+
style={
|
|
54
|
+
{
|
|
55
|
+
"color": "#A8A8A8",
|
|
56
|
+
"fontFamily": "GTStandard",
|
|
57
|
+
"textDecorationLine": "underline",
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
suppressHighlighting={true}
|
|
61
|
+
>
|
|
62
|
+
Disabled link (not-allowed cursor, onPress removed)
|
|
63
|
+
</Text>
|
|
64
|
+
</RNCSafeAreaProvider>
|
|
65
|
+
`;
|
|
66
|
+
|
|
67
|
+
exports[`Bumper/Content/TypographyLink/Features NoUnderlineFalse 1`] = `
|
|
68
|
+
<RNCSafeAreaProvider
|
|
69
|
+
onInsetsChange={[Function]}
|
|
70
|
+
style={
|
|
71
|
+
[
|
|
72
|
+
{
|
|
73
|
+
"flex": 1,
|
|
74
|
+
},
|
|
75
|
+
undefined,
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
>
|
|
79
|
+
<Text
|
|
80
|
+
onBlur={[Function]}
|
|
81
|
+
onClick={[Function]}
|
|
82
|
+
onFocus={[Function]}
|
|
83
|
+
onResponderGrant={[Function]}
|
|
84
|
+
onResponderMove={[Function]}
|
|
85
|
+
onResponderRelease={[Function]}
|
|
86
|
+
onResponderTerminate={[Function]}
|
|
87
|
+
onResponderTerminationRequest={[Function]}
|
|
88
|
+
onStartShouldSetResponder={[Function]}
|
|
89
|
+
role="link"
|
|
90
|
+
style={
|
|
91
|
+
{
|
|
92
|
+
"fontFamily": "GTStandard",
|
|
93
|
+
"textDecorationLine": "underline",
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
suppressHighlighting={true}
|
|
97
|
+
>
|
|
98
|
+
Link with underline (default)
|
|
99
|
+
</Text>
|
|
100
|
+
</RNCSafeAreaProvider>
|
|
101
|
+
`;
|
|
102
|
+
|
|
103
|
+
exports[`Bumper/Content/TypographyLink/Features NoUnderlineTrue 1`] = `
|
|
104
|
+
<RNCSafeAreaProvider
|
|
105
|
+
onInsetsChange={[Function]}
|
|
106
|
+
style={
|
|
107
|
+
[
|
|
108
|
+
{
|
|
109
|
+
"flex": 1,
|
|
110
|
+
},
|
|
111
|
+
undefined,
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
>
|
|
115
|
+
<Text
|
|
116
|
+
onBlur={[Function]}
|
|
117
|
+
onClick={[Function]}
|
|
118
|
+
onFocus={[Function]}
|
|
119
|
+
onResponderGrant={[Function]}
|
|
120
|
+
onResponderMove={[Function]}
|
|
121
|
+
onResponderRelease={[Function]}
|
|
122
|
+
onResponderTerminate={[Function]}
|
|
123
|
+
onResponderTerminationRequest={[Function]}
|
|
124
|
+
onStartShouldSetResponder={[Function]}
|
|
125
|
+
role="link"
|
|
126
|
+
style={
|
|
127
|
+
{
|
|
128
|
+
"fontFamily": "GTStandard",
|
|
129
|
+
"textDecorationLine": "none",
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
suppressHighlighting={true}
|
|
133
|
+
>
|
|
134
|
+
Link without underline
|
|
135
|
+
</Text>
|
|
136
|
+
</RNCSafeAreaProvider>
|
|
137
|
+
`;
|
|
138
|
+
|
|
139
|
+
exports[`Bumper/Content/TypographyLink/Features StateHover 1`] = `
|
|
140
|
+
<RNCSafeAreaProvider
|
|
141
|
+
onInsetsChange={[Function]}
|
|
142
|
+
style={
|
|
143
|
+
[
|
|
144
|
+
{
|
|
145
|
+
"flex": 1,
|
|
146
|
+
},
|
|
147
|
+
undefined,
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
>
|
|
151
|
+
<View
|
|
152
|
+
style={
|
|
153
|
+
{
|
|
154
|
+
"flexDirection": "column",
|
|
155
|
+
"gap": 16,
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
>
|
|
159
|
+
<Text
|
|
160
|
+
onBlur={[Function]}
|
|
161
|
+
onClick={[Function]}
|
|
162
|
+
onFocus={[Function]}
|
|
163
|
+
onResponderGrant={[Function]}
|
|
164
|
+
onResponderMove={[Function]}
|
|
165
|
+
onResponderRelease={[Function]}
|
|
166
|
+
onResponderTerminate={[Function]}
|
|
167
|
+
onResponderTerminationRequest={[Function]}
|
|
168
|
+
onStartShouldSetResponder={[Function]}
|
|
169
|
+
role="link"
|
|
170
|
+
style={
|
|
171
|
+
{
|
|
172
|
+
"fontFamily": "GTStandard",
|
|
173
|
+
"textDecorationLine": "none",
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
suppressHighlighting={true}
|
|
177
|
+
>
|
|
178
|
+
Forced hover state - underline removed (hoverStyle applied)
|
|
179
|
+
</Text>
|
|
180
|
+
<Text
|
|
181
|
+
onBlur={[Function]}
|
|
182
|
+
onClick={[Function]}
|
|
183
|
+
onFocus={[Function]}
|
|
184
|
+
onResponderGrant={[Function]}
|
|
185
|
+
onResponderMove={[Function]}
|
|
186
|
+
onResponderRelease={[Function]}
|
|
187
|
+
onResponderTerminate={[Function]}
|
|
188
|
+
onResponderTerminationRequest={[Function]}
|
|
189
|
+
onStartShouldSetResponder={[Function]}
|
|
190
|
+
role="link"
|
|
191
|
+
style={
|
|
192
|
+
{
|
|
193
|
+
"fontFamily": "GTStandard",
|
|
194
|
+
"textDecorationLine": "none",
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
suppressHighlighting={true}
|
|
198
|
+
>
|
|
199
|
+
Forced hover state with noUnderline - no visual change
|
|
200
|
+
</Text>
|
|
201
|
+
<Text
|
|
202
|
+
role="link"
|
|
203
|
+
style={
|
|
204
|
+
{
|
|
205
|
+
"color": "#A8A8A8",
|
|
206
|
+
"fontFamily": "GTStandard",
|
|
207
|
+
"textDecorationLine": "underline",
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
suppressHighlighting={true}
|
|
211
|
+
>
|
|
212
|
+
Forced hover state on disabled - underline removed (hoverStyle applied)
|
|
213
|
+
</Text>
|
|
214
|
+
<Text
|
|
215
|
+
role="link"
|
|
216
|
+
style={
|
|
217
|
+
{
|
|
218
|
+
"color": "#A8A8A8",
|
|
219
|
+
"fontFamily": "GTStandard",
|
|
220
|
+
"textDecorationLine": "none",
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
suppressHighlighting={true}
|
|
224
|
+
>
|
|
225
|
+
Forced hover state with noUnderline on disabled - no visual change
|
|
226
|
+
</Text>
|
|
227
|
+
</View>
|
|
228
|
+
</RNCSafeAreaProvider>
|
|
229
|
+
`;
|