@ankhorage/surface 3.4.0 → 3.4.1
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 +6 -0
- package/dist/primitives/icon/Icon.d.ts +7 -4
- package/dist/primitives/icon/Icon.d.ts.map +1 -1
- package/dist/primitives/icon/Icon.js.map +1 -1
- package/dist/primitives/icon/PortableIcon.d.ts +9 -3
- package/dist/primitives/icon/PortableIcon.d.ts.map +1 -1
- package/dist/primitives/icon/PortableIcon.js.map +1 -1
- package/package.json +1 -1
- package/src/primitives/icon/Icon.tsx +5 -4
- package/src/primitives/icon/PortableIcon.tsx +18 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { type StyleProp, type TextStyle } from 'react-native';
|
|
1
|
+
import { type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
2
2
|
import type { SurfaceTheme } from '../../theme/types';
|
|
3
|
-
import { type
|
|
3
|
+
import { type FontIconSource, type SvgIconSource } from './PortableIcon';
|
|
4
4
|
export type { FontIconSource, IconProvider, IconSource, IconVariant, SvgIconSource, } from './PortableIcon';
|
|
5
5
|
interface IconPresentationProps {
|
|
6
6
|
size?: keyof SurfaceTheme['spacing'] | number;
|
|
7
7
|
color?: keyof SurfaceTheme['colors'] | string;
|
|
8
|
-
style?: StyleProp<TextStyle>;
|
|
9
8
|
testID?: string;
|
|
10
9
|
}
|
|
11
|
-
export type IconProps =
|
|
10
|
+
export type IconProps = (FontIconSource & IconPresentationProps & {
|
|
11
|
+
style?: StyleProp<TextStyle>;
|
|
12
|
+
}) | (SvgIconSource & IconPresentationProps & {
|
|
13
|
+
style?: StyleProp<ViewStyle>;
|
|
14
|
+
});
|
|
12
15
|
export declare function Icon(props: IconProps): import("react").JSX.Element;
|
|
13
16
|
//# sourceMappingURL=Icon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/primitives/icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/primitives/icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,cAAc,EAAgB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEvF,YAAY,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,UAAU,qBAAqB;IAC7B,IAAI,CAAC,EAAE,MAAM,YAAY,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,YAAY,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GACjB,CAAC,cAAc,GAAG,qBAAqB,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,CAAC,GAC3E,CAAC,aAAa,GAAG,qBAAqB,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,CAAC,CAAC;AAE/E,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,+BAQpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../../src/primitives/icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../../src/primitives/icon/Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkD,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAuB,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAoBvF,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC;IACpC,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAExD,OAAO,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,EAAG,CAAC;AAC/E,CAAC","sourcesContent":["import { type StyleProp, type TextStyle, type ViewStyle } from 'react-native';\n\nimport { resolveToken } from '../../theme/resolveToken';\nimport { useTheme } from '../../theme/ThemeContext';\nimport type { SurfaceTheme } from '../../theme/types';\nimport { type FontIconSource, PortableIcon, type SvgIconSource } from './PortableIcon';\n\nexport type {\n FontIconSource,\n IconProvider,\n IconSource,\n IconVariant,\n SvgIconSource,\n} from './PortableIcon';\n\ninterface IconPresentationProps {\n size?: keyof SurfaceTheme['spacing'] | number;\n color?: keyof SurfaceTheme['colors'] | string;\n testID?: string;\n}\n\nexport type IconProps =\n | (FontIconSource & IconPresentationProps & { style?: StyleProp<TextStyle> })\n | (SvgIconSource & IconPresentationProps & { style?: StyleProp<ViewStyle> });\n\nexport function Icon(props: IconProps) {\n const { theme } = useTheme();\n const size = props.size ?? 'm';\n const color = props.color ?? 'text';\n const resolvedSize = typeof size === 'number' ? size : resolveToken(theme.spacing, size);\n const resolvedColor = resolveToken(theme.colors, color);\n\n return <PortableIcon {...props} color={resolvedColor} size={resolvedSize} />;\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import { type FontAwesome6BrandIconName, type FontAwesome6RegularIconName, type
|
|
|
4
4
|
import { type IoniconsIconName } from '@react-native-vector-icons/ionicons/static';
|
|
5
5
|
import { type MaterialDesignIconsIconName } from '@react-native-vector-icons/material-design-icons/static';
|
|
6
6
|
import React from 'react';
|
|
7
|
-
import { type StyleProp, type TextStyle } from 'react-native';
|
|
7
|
+
import { type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
8
8
|
import type { SurfaceImageSource } from '../image';
|
|
9
9
|
export declare const SUPPORTED_ICON_PROVIDERS: readonly ["Ionicons", "FontAwesome", "FontAwesome5", "FontAwesome6", "MaterialDesignIcons"];
|
|
10
10
|
export type IconProvider = (typeof SUPPORTED_ICON_PROVIDERS)[number];
|
|
@@ -53,12 +53,18 @@ export interface SvgIconSource {
|
|
|
53
53
|
variant?: never;
|
|
54
54
|
}
|
|
55
55
|
export type IconSource = FontIconSource | SvgIconSource;
|
|
56
|
-
|
|
56
|
+
interface PortableIconPresentationProps {
|
|
57
57
|
color: string;
|
|
58
58
|
size: number;
|
|
59
|
-
style?: StyleProp<TextStyle>;
|
|
60
59
|
testID?: string;
|
|
60
|
+
}
|
|
61
|
+
type FontPortableIconProps = FontIconSource & PortableIconPresentationProps & {
|
|
62
|
+
style?: StyleProp<TextStyle>;
|
|
63
|
+
};
|
|
64
|
+
type SvgPortableIconProps = SvgIconSource & PortableIconPresentationProps & {
|
|
65
|
+
style?: StyleProp<ViewStyle>;
|
|
61
66
|
};
|
|
67
|
+
type PortableIconProps = FontPortableIconProps | SvgPortableIconProps;
|
|
62
68
|
export declare function PortableIcon(props: PortableIconProps): React.JSX.Element;
|
|
63
69
|
export {};
|
|
64
70
|
//# sourceMappingURL=PortableIcon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortableIcon.d.ts","sourceRoot":"","sources":["../../../src/primitives/icon/PortableIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC/B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC/B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAY,KAAK,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,yDAAyD,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"PortableIcon.d.ts","sourceRoot":"","sources":["../../../src/primitives/icon/PortableIcon.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortableIcon.js","sourceRoot":"","sources":["../../../src/primitives/icon/PortableIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAEZ,MAAM,+CAA+C,CAAC;AACvD,OAAO,EACL,YAAY,GAIb,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,YAAY,GAIb,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAyB,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EACL,mBAAmB,GAEpB,MAAM,yDAAyD,CAAC;AACjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"PortableIcon.js","sourceRoot":"","sources":["../../../src/primitives/icon/PortableIcon.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n FontAwesome,\n type FontAwesomeIconName,\n} from '@react-native-vector-icons/fontawesome/static';\nimport {\n FontAwesome5,\n type FontAwesome5BrandIconName,\n type FontAwesome5RegularIconName,\n type FontAwesome5SolidIconName,\n} from '@react-native-vector-icons/fontawesome5/static';\nimport {\n FontAwesome6,\n type FontAwesome6BrandIconName,\n type FontAwesome6RegularIconName,\n type FontAwesome6SolidIconName,\n} from '@react-native-vector-icons/fontawesome6/static';\nimport { Ionicons, type IoniconsIconName } from '@react-native-vector-icons/ionicons/static';\nimport {\n MaterialDesignIcons,\n type MaterialDesignIconsIconName,\n} from '@react-native-vector-icons/material-design-icons/static';\nimport React from 'react';\nimport { Image, type StyleProp, type TextStyle, type ViewStyle } from 'react-native';\nimport { SvgUri } from 'react-native-svg';\n\nimport type { SurfaceImageSource } from '../image';\n\nexport const SUPPORTED_ICON_PROVIDERS = [\n 'Ionicons',\n 'FontAwesome',\n 'FontAwesome5',\n 'FontAwesome6',\n 'MaterialDesignIcons',\n] as const;\n\nexport type IconProvider = (typeof SUPPORTED_ICON_PROVIDERS)[number];\nexport type IconVariant = 'regular' | 'solid' | 'brand';\n\nexport type FontIconSource =\n | { name: IoniconsIconName; provider?: 'Ionicons'; variant?: never }\n | { name: FontAwesomeIconName; provider: 'FontAwesome'; variant?: never }\n | { name: FontAwesome5RegularIconName; provider: 'FontAwesome5'; variant: 'regular' }\n | { name: FontAwesome5SolidIconName; provider: 'FontAwesome5'; variant: 'solid' }\n | { name: FontAwesome5BrandIconName; provider: 'FontAwesome5'; variant: 'brand' }\n | { name: FontAwesome6RegularIconName; provider: 'FontAwesome6'; variant: 'regular' }\n | { name: FontAwesome6SolidIconName; provider: 'FontAwesome6'; variant: 'solid' }\n | { name: FontAwesome6BrandIconName; provider: 'FontAwesome6'; variant: 'brand' }\n | { name: MaterialDesignIconsIconName; provider: 'MaterialDesignIcons'; variant?: never };\n\nexport interface SvgIconSource {\n source: SurfaceImageSource;\n name?: never;\n provider?: never;\n variant?: never;\n}\n\nexport type IconSource = FontIconSource | SvgIconSource;\n\ninterface PortableIconPresentationProps {\n color: string;\n size: number;\n testID?: string;\n}\n\ntype FontPortableIconProps = FontIconSource &\n PortableIconPresentationProps & {\n style?: StyleProp<TextStyle>;\n };\n\ntype SvgPortableIconProps = SvgIconSource &\n PortableIconPresentationProps & {\n style?: StyleProp<ViewStyle>;\n };\n\ntype PortableIconProps = FontPortableIconProps | SvgPortableIconProps;\n\ntype SharedIconProps = PortableIconPresentationProps & {\n style?: StyleProp<TextStyle>;\n};\n\n/*** Resolve either a direct URI or a React Native bundled image module to its SVG URI. */\nfunction resolveSvgIconUri(source: SurfaceImageSource): string {\n if (typeof source === 'string') return source;\n\n return Image.resolveAssetSource(source).uri;\n}\n\nfunction assertNever(value: never, configuration: string): never {\n throw new Error(`Unsupported icon ${configuration}: ${String(value)}`);\n}\n\nfunction renderFontAwesome5(\n props: Extract<IconSource, { provider: 'FontAwesome5' }>,\n sharedProps: SharedIconProps,\n) {\n const { variant } = props;\n\n switch (variant) {\n case 'brand':\n return <FontAwesome5 {...sharedProps} iconStyle=\"brand\" name={props.name} />;\n case 'regular':\n return <FontAwesome5 {...sharedProps} iconStyle=\"regular\" name={props.name} />;\n case 'solid':\n return <FontAwesome5 {...sharedProps} iconStyle=\"solid\" name={props.name} />;\n default:\n return assertNever(variant, 'FontAwesome5 variant');\n }\n}\n\nfunction renderFontAwesome6(\n props: Extract<IconSource, { provider: 'FontAwesome6' }>,\n sharedProps: SharedIconProps,\n) {\n const { variant } = props;\n\n switch (variant) {\n case 'brand':\n return <FontAwesome6 {...sharedProps} iconStyle=\"brand\" name={props.name} />;\n case 'regular':\n return <FontAwesome6 {...sharedProps} iconStyle=\"regular\" name={props.name} />;\n case 'solid':\n return <FontAwesome6 {...sharedProps} iconStyle=\"solid\" name={props.name} />;\n default:\n return assertNever(variant, 'FontAwesome6 variant');\n }\n}\n\nexport function PortableIcon(props: PortableIconProps) {\n if ('source' in props) {\n return (\n <SvgUri\n color={props.color}\n height={props.size}\n style={props.style}\n testID={props.testID}\n uri={resolveSvgIconUri(props.source)}\n width={props.size}\n />\n );\n }\n\n const { provider } = props;\n const sharedProps = {\n color: props.color,\n size: props.size,\n style: props.style,\n testID: props.testID,\n };\n\n switch (provider) {\n case undefined:\n case 'Ionicons':\n return <Ionicons {...sharedProps} name={props.name} />;\n case 'FontAwesome':\n return <FontAwesome {...sharedProps} name={props.name} />;\n case 'FontAwesome5':\n return renderFontAwesome5(props, sharedProps);\n case 'FontAwesome6':\n return renderFontAwesome6(props, sharedProps);\n case 'MaterialDesignIcons':\n return <MaterialDesignIcons {...sharedProps} name={props.name} />;\n default:\n return assertNever(provider, 'provider');\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type StyleProp, type TextStyle } from 'react-native';
|
|
1
|
+
import { type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
2
2
|
|
|
3
3
|
import { resolveToken } from '../../theme/resolveToken';
|
|
4
4
|
import { useTheme } from '../../theme/ThemeContext';
|
|
5
5
|
import type { SurfaceTheme } from '../../theme/types';
|
|
6
|
-
import { type
|
|
6
|
+
import { type FontIconSource, PortableIcon, type SvgIconSource } from './PortableIcon';
|
|
7
7
|
|
|
8
8
|
export type {
|
|
9
9
|
FontIconSource,
|
|
@@ -16,11 +16,12 @@ export type {
|
|
|
16
16
|
interface IconPresentationProps {
|
|
17
17
|
size?: keyof SurfaceTheme['spacing'] | number;
|
|
18
18
|
color?: keyof SurfaceTheme['colors'] | string;
|
|
19
|
-
style?: StyleProp<TextStyle>;
|
|
20
19
|
testID?: string;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
export type IconProps =
|
|
22
|
+
export type IconProps =
|
|
23
|
+
| (FontIconSource & IconPresentationProps & { style?: StyleProp<TextStyle> })
|
|
24
|
+
| (SvgIconSource & IconPresentationProps & { style?: StyleProp<ViewStyle> });
|
|
24
25
|
|
|
25
26
|
export function Icon(props: IconProps) {
|
|
26
27
|
const { theme } = useTheme();
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
type MaterialDesignIconsIconName,
|
|
21
21
|
} from '@react-native-vector-icons/material-design-icons/static';
|
|
22
22
|
import React from 'react';
|
|
23
|
-
import { Image, type StyleProp, type TextStyle } from 'react-native';
|
|
23
|
+
import { Image, type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
24
24
|
import { SvgUri } from 'react-native-svg';
|
|
25
25
|
|
|
26
26
|
import type { SurfaceImageSource } from '../image';
|
|
@@ -56,14 +56,27 @@ export interface SvgIconSource {
|
|
|
56
56
|
|
|
57
57
|
export type IconSource = FontIconSource | SvgIconSource;
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
interface PortableIconPresentationProps {
|
|
60
60
|
color: string;
|
|
61
61
|
size: number;
|
|
62
|
-
style?: StyleProp<TextStyle>;
|
|
63
62
|
testID?: string;
|
|
64
|
-
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
type FontPortableIconProps = FontIconSource &
|
|
66
|
+
PortableIconPresentationProps & {
|
|
67
|
+
style?: StyleProp<TextStyle>;
|
|
68
|
+
};
|
|
65
69
|
|
|
66
|
-
type
|
|
70
|
+
type SvgPortableIconProps = SvgIconSource &
|
|
71
|
+
PortableIconPresentationProps & {
|
|
72
|
+
style?: StyleProp<ViewStyle>;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
type PortableIconProps = FontPortableIconProps | SvgPortableIconProps;
|
|
76
|
+
|
|
77
|
+
type SharedIconProps = PortableIconPresentationProps & {
|
|
78
|
+
style?: StyleProp<TextStyle>;
|
|
79
|
+
};
|
|
67
80
|
|
|
68
81
|
/*** Resolve either a direct URI or a React Native bundled image module to its SVG URI. */
|
|
69
82
|
function resolveSvgIconUri(source: SurfaceImageSource): string {
|