@impulse-ui-native/primitives 2.1.0 → 2.1.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/dist/components/atoms/button.d.mts +10 -0
- package/dist/components/atoms/button.js +60 -0
- package/dist/components/atoms/button.js.map +1 -0
- package/dist/components/atoms/icon-button.d.mts +12 -0
- package/dist/components/atoms/icon-button.js +51 -0
- package/dist/components/atoms/icon-button.js.map +1 -0
- package/dist/components/atoms/index.d.mts +18 -0
- package/dist/components/atoms/index.js +17 -0
- package/dist/components/atoms/index.js.map +1 -0
- package/dist/components/atoms/pressable.d.mts +9 -0
- package/dist/components/atoms/pressable.js +52 -0
- package/dist/components/atoms/pressable.js.map +1 -0
- package/dist/components/atoms/safe-area-view.d.mts +8 -0
- package/dist/components/atoms/safe-area-view.js +103 -0
- package/dist/components/atoms/safe-area-view.js.map +1 -0
- package/dist/components/atoms/tag.d.mts +9 -0
- package/dist/components/atoms/tag.js +82 -0
- package/dist/components/atoms/tag.js.map +1 -0
- package/dist/components/atoms/typography.d.mts +99 -0
- package/dist/components/atoms/typography.js +184 -0
- package/dist/components/atoms/typography.js.map +1 -0
- package/dist/components/atoms/view.d.mts +8 -0
- package/dist/components/atoms/view.js +27 -0
- package/dist/components/atoms/view.js.map +1 -0
- package/dist/components/controls/addon.d.mts +11 -0
- package/dist/components/controls/addon.js +72 -0
- package/dist/components/controls/addon.js.map +1 -0
- package/dist/components/controls/container.d.mts +11 -0
- package/dist/components/controls/container.js +54 -0
- package/dist/components/controls/container.js.map +1 -0
- package/dist/components/controls/control.d.mts +23 -0
- package/dist/components/controls/control.js +26 -0
- package/dist/components/controls/control.js.map +1 -0
- package/dist/components/controls/error.d.mts +11 -0
- package/dist/components/controls/error.js +33 -0
- package/dist/components/controls/error.js.map +1 -0
- package/dist/components/controls/index.d.mts +10 -0
- package/dist/components/controls/index.js +7 -0
- package/dist/components/controls/index.js.map +1 -0
- package/dist/components/controls/input.d.mts +11 -0
- package/dist/components/controls/input.js +63 -0
- package/dist/components/controls/input.js.map +1 -0
- package/dist/components/controls/label.d.mts +11 -0
- package/dist/components/controls/label.js +42 -0
- package/dist/components/controls/label.js.map +1 -0
- package/dist/components/controls/loader.d.mts +6 -0
- package/dist/components/controls/loader.js +10 -0
- package/dist/components/controls/loader.js.map +1 -0
- package/dist/components/controls/placeholder.d.mts +11 -0
- package/dist/components/controls/placeholder.js +51 -0
- package/dist/components/controls/placeholder.js.map +1 -0
- package/dist/components/controls/provider.d.mts +13 -0
- package/dist/components/controls/provider.js +19 -0
- package/dist/components/controls/provider.js.map +1 -0
- package/dist/components/controls/root.d.mts +9 -0
- package/dist/components/controls/root.js +18 -0
- package/dist/components/controls/root.js.map +1 -0
- package/dist/components/controls/value.d.mts +11 -0
- package/dist/components/controls/value.js +36 -0
- package/dist/components/controls/value.js.map +1 -0
- package/dist/components/index.d.mts +22 -0
- package/dist/components/index.js +3 -0
- package/dist/components/index.js.map +1 -0
- package/dist/constants/control-container.constants.d.mts +6 -0
- package/dist/constants/control-container.constants.js +15 -0
- package/dist/constants/control-container.constants.js.map +1 -0
- package/dist/constants/index.d.mts +3 -0
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/safe-area-view.constants.d.mts +14 -0
- package/dist/constants/safe-area-view.constants.js +17 -0
- package/dist/constants/safe-area-view.constants.js.map +1 -0
- package/dist/hocs/create-preset.hoc.d.mts +12 -0
- package/dist/hocs/create-preset.hoc.js +38 -0
- package/dist/hocs/create-preset.hoc.js.map +1 -0
- package/dist/hocs/index.d.mts +6 -0
- package/dist/hocs/index.js +5 -0
- package/dist/hocs/index.js.map +1 -0
- package/dist/index.d.mts +25 -241
- package/dist/index.js +4 -998
- package/dist/index.js.map +1 -1
- package/dist/types/button.types.d.mts +21 -0
- package/dist/types/button.types.js +1 -0
- package/dist/types/button.types.js.map +1 -0
- package/dist/types/control-components.types.d.mts +45 -0
- package/dist/types/control-components.types.js +1 -0
- package/dist/types/control-components.types.js.map +1 -0
- package/dist/types/icon-button.types.d.mts +15 -0
- package/dist/types/icon-button.types.js +1 -0
- package/dist/types/icon-button.types.js.map +1 -0
- package/dist/types/index.d.mts +12 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/safe-area-view.types.d.mts +5 -0
- package/dist/types/safe-area-view.types.js +1 -0
- package/dist/types/safe-area-view.types.js.map +1 -0
- package/dist/types/tag.types.d.mts +22 -0
- package/dist/types/tag.types.js +1 -0
- package/dist/types/tag.types.js.map +1 -0
- package/dist/types/typography.types.d.mts +8 -0
- package/dist/types/typography.types.js +1 -0
- package/dist/types/typography.types.js.map +1 -0
- package/dist/types/view.types.d.mts +6 -0
- package/dist/types/view.types.js +1 -0
- package/dist/types/view.types.js.map +1 -0
- package/dist/utils/controls.utils.d.mts +13 -0
- package/dist/utils/controls.utils.js +18 -0
- package/dist/utils/controls.utils.js.map +1 -0
- package/dist/utils/index.d.mts +2 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +7 -6
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { PropsWithChildren } from 'react';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import { ButtonProps } from '../../types/button.types.mjs';
|
|
5
|
+
import 'react-native';
|
|
6
|
+
import '@impulse-ui-native/theme';
|
|
7
|
+
|
|
8
|
+
declare const Button: react.MemoExoticComponent<({ size, variant, disabled, children, style, ...props }: PropsWithChildren<ButtonProps>) => react_jsx_runtime.JSX.Element>;
|
|
9
|
+
|
|
10
|
+
export { Button };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useMemo } from "react";
|
|
3
|
+
import { ActivityIndicator, StyleSheet } from "react-native";
|
|
4
|
+
import { useThemedStyles } from "@impulse-ui-native/theme";
|
|
5
|
+
import { Pressable } from "./pressable";
|
|
6
|
+
import { Typography } from "./typography";
|
|
7
|
+
const Button = memo(function Button2({
|
|
8
|
+
size = "medium",
|
|
9
|
+
variant = "filled",
|
|
10
|
+
disabled,
|
|
11
|
+
children,
|
|
12
|
+
style,
|
|
13
|
+
...props
|
|
14
|
+
}) {
|
|
15
|
+
const styles = useThemedStyles(themedStyles, { size, variant, disabled }, [
|
|
16
|
+
size,
|
|
17
|
+
variant,
|
|
18
|
+
disabled
|
|
19
|
+
]);
|
|
20
|
+
const buttonStyles = useMemo(
|
|
21
|
+
() => [styles.button, style],
|
|
22
|
+
[styles.button, style]
|
|
23
|
+
);
|
|
24
|
+
const content = useMemo(() => {
|
|
25
|
+
if (props.loading) {
|
|
26
|
+
return /* @__PURE__ */ jsx(ActivityIndicator, { color: styles.text.color });
|
|
27
|
+
}
|
|
28
|
+
return typeof children === "string" ? /* @__PURE__ */ jsx(Typography.Master, { style: styles.text, children }) : children;
|
|
29
|
+
}, [children, props.loading, styles.text]);
|
|
30
|
+
return /* @__PURE__ */ jsx(Pressable, { style: buttonStyles, disabled, ...props, children: content });
|
|
31
|
+
});
|
|
32
|
+
function themedStyles(theme, props) {
|
|
33
|
+
const { size, variant, disabled } = props;
|
|
34
|
+
const buttonTokens = theme.components.button;
|
|
35
|
+
const sizeTokens = buttonTokens.sizes[size];
|
|
36
|
+
const variantTokens = buttonTokens.variants[variant];
|
|
37
|
+
return StyleSheet.create({
|
|
38
|
+
button: {
|
|
39
|
+
alignItems: "center",
|
|
40
|
+
justifyContent: "center",
|
|
41
|
+
height: sizeTokens.height,
|
|
42
|
+
paddingVertical: sizeTokens.paddingVertical,
|
|
43
|
+
paddingHorizontal: sizeTokens.paddingHorizontal,
|
|
44
|
+
borderWidth: buttonTokens.borderWidth,
|
|
45
|
+
borderRadius: buttonTokens.borderRadius,
|
|
46
|
+
borderColor: disabled ? variantTokens.disabledBorderColor : variantTokens.borderColor,
|
|
47
|
+
backgroundColor: disabled ? variantTokens.disabledBackgroundColor : variantTokens.backgroundColor
|
|
48
|
+
},
|
|
49
|
+
text: {
|
|
50
|
+
width: "100%",
|
|
51
|
+
textAlign: "center",
|
|
52
|
+
fontSize: sizeTokens.fontSize,
|
|
53
|
+
color: disabled ? variantTokens.disabledColor : variantTokens.color
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
Button
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/atoms/button.tsx"],"sourcesContent":["import { memo, PropsWithChildren, useMemo } from \"react\";\nimport { ActivityIndicator, StyleSheet } from \"react-native\";\n\nimport { AppTheme, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport { ButtonProps, ButtonThemeProps } from \"../../types\";\nimport { Pressable } from \"./pressable\";\nimport { Typography } from \"./typography\";\n\nexport const Button = memo(function Button({\n size = \"medium\",\n variant = \"filled\",\n disabled,\n children,\n style,\n ...props\n}: PropsWithChildren<ButtonProps>) {\n const styles = useThemedStyles(themedStyles, { size, variant, disabled }, [\n size,\n variant,\n disabled,\n ]);\n\n const buttonStyles = useMemo(\n () => [styles.button, style],\n [styles.button, style],\n );\n\n const content = useMemo(() => {\n if (props.loading) {\n return <ActivityIndicator color={styles.text.color} />;\n }\n\n return typeof children === \"string\" ? (\n <Typography.Master style={styles.text}>{children}</Typography.Master>\n ) : (\n children\n );\n }, [children, props.loading, styles.text]);\n\n return (\n <Pressable style={buttonStyles} disabled={disabled} {...props}>\n {content}\n </Pressable>\n );\n});\n\nfunction themedStyles(theme: AppTheme, props: ButtonThemeProps) {\n const { size, variant, disabled } = props;\n\n const buttonTokens = theme.components.button;\n const sizeTokens = buttonTokens.sizes[size];\n const variantTokens = buttonTokens.variants[variant];\n\n return StyleSheet.create({\n button: {\n alignItems: \"center\",\n justifyContent: \"center\",\n\n height: sizeTokens.height,\n paddingVertical: sizeTokens.paddingVertical,\n paddingHorizontal: sizeTokens.paddingHorizontal,\n\n borderWidth: buttonTokens.borderWidth,\n borderRadius: buttonTokens.borderRadius,\n\n borderColor: disabled\n ? variantTokens.disabledBorderColor\n : variantTokens.borderColor,\n\n backgroundColor: disabled\n ? variantTokens.disabledBackgroundColor\n : variantTokens.backgroundColor,\n },\n\n text: {\n width: \"100%\",\n textAlign: \"center\",\n\n fontSize: sizeTokens.fontSize,\n\n color: disabled ? variantTokens.disabledColor : variantTokens.color,\n },\n });\n}\n"],"mappings":"AA8Ba;AA9Bb,SAAS,MAAyB,eAAe;AACjD,SAAS,mBAAmB,kBAAkB;AAE9C,SAAmB,uBAAuB;AAG1C,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAEpB,MAAM,SAAS,KAAK,SAASA,QAAO;AAAA,EACzC,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmC;AACjC,QAAM,SAAS,gBAAgB,cAAc,EAAE,MAAM,SAAS,SAAS,GAAG;AAAA,IACxE;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,eAAe;AAAA,IACnB,MAAM,CAAC,OAAO,QAAQ,KAAK;AAAA,IAC3B,CAAC,OAAO,QAAQ,KAAK;AAAA,EACvB;AAEA,QAAM,UAAU,QAAQ,MAAM;AAC5B,QAAI,MAAM,SAAS;AACjB,aAAO,oBAAC,qBAAkB,OAAO,OAAO,KAAK,OAAO;AAAA,IACtD;AAEA,WAAO,OAAO,aAAa,WACzB,oBAAC,WAAW,QAAX,EAAkB,OAAO,OAAO,MAAO,UAAS,IAEjD;AAAA,EAEJ,GAAG,CAAC,UAAU,MAAM,SAAS,OAAO,IAAI,CAAC;AAEzC,SACE,oBAAC,aAAU,OAAO,cAAc,UAAqB,GAAG,OACrD,mBACH;AAEJ,CAAC;AAED,SAAS,aAAa,OAAiB,OAAyB;AAC9D,QAAM,EAAE,MAAM,SAAS,SAAS,IAAI;AAEpC,QAAM,eAAe,MAAM,WAAW;AACtC,QAAM,aAAa,aAAa,MAAM,IAAI;AAC1C,QAAM,gBAAgB,aAAa,SAAS,OAAO;AAEnD,SAAO,WAAW,OAAO;AAAA,IACvB,QAAQ;AAAA,MACN,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAEhB,QAAQ,WAAW;AAAA,MACnB,iBAAiB,WAAW;AAAA,MAC5B,mBAAmB,WAAW;AAAA,MAE9B,aAAa,aAAa;AAAA,MAC1B,cAAc,aAAa;AAAA,MAE3B,aAAa,WACT,cAAc,sBACd,cAAc;AAAA,MAElB,iBAAiB,WACb,cAAc,0BACd,cAAc;AAAA,IACpB;AAAA,IAEA,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MAEX,UAAU,WAAW;AAAA,MAErB,OAAO,WAAW,cAAc,gBAAgB,cAAc;AAAA,IAChE;AAAA,EACF,CAAC;AACH;","names":["Button"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { PropsWithChildren } from 'react';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import { IconButtonProps } from '../../types/icon-button.types.mjs';
|
|
5
|
+
import '@impulse-ui-native/icon/types';
|
|
6
|
+
import '@impulse-ui-native/theme';
|
|
7
|
+
import '../../types/button.types.mjs';
|
|
8
|
+
import 'react-native';
|
|
9
|
+
|
|
10
|
+
declare const IconButton: react.MemoExoticComponent<({ size, variant, disabled, style, icon, ...props }: PropsWithChildren<IconButtonProps>) => react_jsx_runtime.JSX.Element>;
|
|
11
|
+
|
|
12
|
+
export { IconButton };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useMemo } from "react";
|
|
3
|
+
import { StyleSheet } from "react-native";
|
|
4
|
+
import { Icon } from "@impulse-ui-native/icon/components/icon";
|
|
5
|
+
import { useThemedStyles } from "@impulse-ui-native/theme";
|
|
6
|
+
import { Pressable } from "./pressable";
|
|
7
|
+
const IconButton = memo(function IconButton2({
|
|
8
|
+
size = "medium",
|
|
9
|
+
variant = "filled",
|
|
10
|
+
disabled,
|
|
11
|
+
style,
|
|
12
|
+
icon,
|
|
13
|
+
...props
|
|
14
|
+
}) {
|
|
15
|
+
const styles = useThemedStyles(themedStyles, { size, variant, disabled }, [
|
|
16
|
+
size,
|
|
17
|
+
variant,
|
|
18
|
+
disabled
|
|
19
|
+
]);
|
|
20
|
+
const iconButtonStyles = useMemo(
|
|
21
|
+
() => [styles.button, style],
|
|
22
|
+
[styles.button, style]
|
|
23
|
+
);
|
|
24
|
+
return /* @__PURE__ */ jsx(Pressable, { style: iconButtonStyles, disabled, ...props, children: /* @__PURE__ */ jsx(Icon, { size, icon, color: styles.icon.color }) });
|
|
25
|
+
});
|
|
26
|
+
function themedStyles(theme, props) {
|
|
27
|
+
const { size, variant, disabled } = props;
|
|
28
|
+
const iconButtonTokens = theme.components.iconButton;
|
|
29
|
+
const sizeTokens = iconButtonTokens.sizes[size];
|
|
30
|
+
const variantTokens = iconButtonTokens.variants[variant];
|
|
31
|
+
return StyleSheet.create({
|
|
32
|
+
button: {
|
|
33
|
+
alignItems: "center",
|
|
34
|
+
justifyContent: "center",
|
|
35
|
+
height: sizeTokens.size,
|
|
36
|
+
width: sizeTokens.size,
|
|
37
|
+
padding: sizeTokens.padding,
|
|
38
|
+
borderWidth: iconButtonTokens.borderWidth,
|
|
39
|
+
borderRadius: iconButtonTokens.borderRadius,
|
|
40
|
+
borderColor: disabled ? variantTokens.disabledBorderColor : variantTokens.borderColor,
|
|
41
|
+
backgroundColor: disabled ? variantTokens.disabledBackgroundColor : variantTokens.backgroundColor
|
|
42
|
+
},
|
|
43
|
+
icon: {
|
|
44
|
+
color: disabled ? variantTokens.disabledColor : variantTokens.color
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
IconButton
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=icon-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/atoms/icon-button.tsx"],"sourcesContent":["import { memo, PropsWithChildren, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport { Icon } from \"@impulse-ui-native/icon/components/icon\";\nimport { AppTheme, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport { IconButtonProps, IconButtonThemeProps } from \"../../types\";\nimport { Pressable } from \"./pressable\";\n\nexport const IconButton = memo(function IconButton({\n size = \"medium\",\n variant = \"filled\",\n disabled,\n style,\n icon,\n ...props\n}: PropsWithChildren<IconButtonProps>) {\n const styles = useThemedStyles(themedStyles, { size, variant, disabled }, [\n size,\n variant,\n disabled,\n ]);\n\n const iconButtonStyles = useMemo(\n () => [styles.button, style],\n [styles.button, style],\n );\n\n return (\n <Pressable style={iconButtonStyles} disabled={disabled} {...props}>\n <Icon size={size} icon={icon} color={styles.icon.color} />\n </Pressable>\n );\n});\n\nfunction themedStyles(theme: AppTheme, props: IconButtonThemeProps) {\n const { size, variant, disabled } = props;\n\n const iconButtonTokens = theme.components.iconButton;\n const sizeTokens = iconButtonTokens.sizes[size];\n const variantTokens = iconButtonTokens.variants[variant];\n\n return StyleSheet.create({\n button: {\n alignItems: \"center\",\n justifyContent: \"center\",\n\n height: sizeTokens.size,\n width: sizeTokens.size,\n padding: sizeTokens.padding,\n\n borderWidth: iconButtonTokens.borderWidth,\n borderRadius: iconButtonTokens.borderRadius,\n\n borderColor: disabled\n ? variantTokens.disabledBorderColor\n : variantTokens.borderColor,\n\n backgroundColor: disabled\n ? variantTokens.disabledBackgroundColor\n : variantTokens.backgroundColor,\n },\n\n icon: {\n color: disabled ? variantTokens.disabledColor : variantTokens.color,\n },\n });\n}\n"],"mappings":"AA8BM;AA9BN,SAAS,MAAyB,eAAe;AACjD,SAAS,kBAAkB;AAE3B,SAAS,YAAY;AACrB,SAAmB,uBAAuB;AAG1C,SAAS,iBAAiB;AAEnB,MAAM,aAAa,KAAK,SAASA,YAAW;AAAA,EACjD,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAuC;AACrC,QAAM,SAAS,gBAAgB,cAAc,EAAE,MAAM,SAAS,SAAS,GAAG;AAAA,IACxE;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,mBAAmB;AAAA,IACvB,MAAM,CAAC,OAAO,QAAQ,KAAK;AAAA,IAC3B,CAAC,OAAO,QAAQ,KAAK;AAAA,EACvB;AAEA,SACE,oBAAC,aAAU,OAAO,kBAAkB,UAAqB,GAAG,OAC1D,8BAAC,QAAK,MAAY,MAAY,OAAO,OAAO,KAAK,OAAO,GAC1D;AAEJ,CAAC;AAED,SAAS,aAAa,OAAiB,OAA6B;AAClE,QAAM,EAAE,MAAM,SAAS,SAAS,IAAI;AAEpC,QAAM,mBAAmB,MAAM,WAAW;AAC1C,QAAM,aAAa,iBAAiB,MAAM,IAAI;AAC9C,QAAM,gBAAgB,iBAAiB,SAAS,OAAO;AAEvD,SAAO,WAAW,OAAO;AAAA,IACvB,QAAQ;AAAA,MACN,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAEhB,QAAQ,WAAW;AAAA,MACnB,OAAO,WAAW;AAAA,MAClB,SAAS,WAAW;AAAA,MAEpB,aAAa,iBAAiB;AAAA,MAC9B,cAAc,iBAAiB;AAAA,MAE/B,aAAa,WACT,cAAc,sBACd,cAAc;AAAA,MAElB,iBAAiB,WACb,cAAc,0BACd,cAAc;AAAA,IACpB;AAAA,IAEA,MAAM;AAAA,MACJ,OAAO,WAAW,cAAc,gBAAgB,cAAc;AAAA,IAChE;AAAA,EACF,CAAC;AACH;","names":["IconButton"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { View } from './view.mjs';
|
|
2
|
+
export { SafeAreaView } from './safe-area-view.mjs';
|
|
3
|
+
export { Typography, TypographyComponent } from './typography.mjs';
|
|
4
|
+
export { Button } from './button.mjs';
|
|
5
|
+
export { IconButton } from './icon-button.mjs';
|
|
6
|
+
export { Pressable } from './pressable.mjs';
|
|
7
|
+
export { Tag } from './tag.mjs';
|
|
8
|
+
import 'react';
|
|
9
|
+
import '@impulse-ui-native/theme';
|
|
10
|
+
import 'react-native';
|
|
11
|
+
import 'react/jsx-runtime';
|
|
12
|
+
import '../../types/safe-area-view.types.mjs';
|
|
13
|
+
import 'react-native-safe-area-context';
|
|
14
|
+
import '../../types/typography.types.mjs';
|
|
15
|
+
import '../../types/button.types.mjs';
|
|
16
|
+
import '../../types/icon-button.types.mjs';
|
|
17
|
+
import '@impulse-ui-native/icon/types';
|
|
18
|
+
import '../../types/tag.types.mjs';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { View } from "./view";
|
|
2
|
+
import { SafeAreaView } from "./safe-area-view";
|
|
3
|
+
import { Typography } from "./typography";
|
|
4
|
+
import { Button } from "./button";
|
|
5
|
+
import { IconButton } from "./icon-button";
|
|
6
|
+
import { Pressable } from "./pressable";
|
|
7
|
+
import { Tag } from "./tag";
|
|
8
|
+
export {
|
|
9
|
+
Button,
|
|
10
|
+
IconButton,
|
|
11
|
+
Pressable,
|
|
12
|
+
SafeAreaView,
|
|
13
|
+
Tag,
|
|
14
|
+
Typography,
|
|
15
|
+
View
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/atoms/index.ts"],"sourcesContent":["export { View } from \"./view\";\nexport { SafeAreaView } from \"./safe-area-view\";\nexport { Typography, type TypographyComponent } from \"./typography\";\nexport { Button } from \"./button\";\nexport { IconButton } from \"./icon-button\";\nexport { Pressable } from \"./pressable\";\nexport { Tag } from \"./tag\";\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,kBAA4C;AACrD,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,WAAW;","names":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { PropsWithChildren } from 'react';
|
|
3
|
+
import { PressableCoreProps } from '../../types/button.types.mjs';
|
|
4
|
+
import 'react-native';
|
|
5
|
+
import '@impulse-ui-native/theme';
|
|
6
|
+
|
|
7
|
+
declare const Pressable: ({ children, disabled, pressedStyle, style, ...props }: PropsWithChildren<PressableCoreProps>) => react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { Pressable };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
import {
|
|
4
|
+
Pressable as RNPressable,
|
|
5
|
+
StyleSheet
|
|
6
|
+
} from "react-native";
|
|
7
|
+
import {
|
|
8
|
+
getShadowStyle,
|
|
9
|
+
useColors,
|
|
10
|
+
useStyleProps
|
|
11
|
+
} from "@impulse-ui-native/theme";
|
|
12
|
+
const Pressable = function PressableCore({
|
|
13
|
+
children,
|
|
14
|
+
disabled,
|
|
15
|
+
pressedStyle,
|
|
16
|
+
style,
|
|
17
|
+
...props
|
|
18
|
+
}) {
|
|
19
|
+
const colors = useColors();
|
|
20
|
+
const extractedStyleProps = useStyleProps(props);
|
|
21
|
+
const pressableStyles = useCallback(
|
|
22
|
+
(state) => {
|
|
23
|
+
let overrideStyle;
|
|
24
|
+
if (typeof style === "function") {
|
|
25
|
+
overrideStyle = style(state);
|
|
26
|
+
} else {
|
|
27
|
+
overrideStyle = style;
|
|
28
|
+
}
|
|
29
|
+
return StyleSheet.flatten([
|
|
30
|
+
{ opacity: disabled || state.pressed ? 0.6 : 1 },
|
|
31
|
+
getShadowStyle(props.shadow, props.shadowPosition, colors),
|
|
32
|
+
extractedStyleProps,
|
|
33
|
+
overrideStyle,
|
|
34
|
+
state.pressed ? pressedStyle : void 0
|
|
35
|
+
]);
|
|
36
|
+
},
|
|
37
|
+
[
|
|
38
|
+
style,
|
|
39
|
+
pressedStyle,
|
|
40
|
+
disabled,
|
|
41
|
+
extractedStyleProps,
|
|
42
|
+
props.shadow,
|
|
43
|
+
props.shadowPosition,
|
|
44
|
+
colors
|
|
45
|
+
]
|
|
46
|
+
);
|
|
47
|
+
return /* @__PURE__ */ jsx(RNPressable, { ...props, style: pressableStyles, disabled, children });
|
|
48
|
+
};
|
|
49
|
+
export {
|
|
50
|
+
Pressable
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=pressable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/atoms/pressable.tsx"],"sourcesContent":["import { PropsWithChildren, useCallback } from \"react\";\nimport {\n PressableStateCallbackType,\n Pressable as RNPressable,\n StyleProp,\n StyleSheet,\n ViewStyle,\n} from \"react-native\";\n\nimport {\n getShadowStyle,\n useColors,\n useStyleProps,\n} from \"@impulse-ui-native/theme\";\n\nimport { PressableCoreProps } from \"../../types\";\n\nexport const Pressable = function PressableCore({\n children,\n disabled,\n pressedStyle,\n style,\n ...props\n}: PropsWithChildren<PressableCoreProps>) {\n const colors = useColors();\n const extractedStyleProps = useStyleProps(props);\n\n const pressableStyles = useCallback(\n (state: PressableStateCallbackType): StyleProp<ViewStyle> => {\n let overrideStyle: StyleProp<ViewStyle>;\n\n if (typeof style === \"function\") {\n overrideStyle = style(state);\n } else {\n overrideStyle = style;\n }\n\n return StyleSheet.flatten([\n { opacity: disabled || state.pressed ? 0.6 : 1 },\n getShadowStyle(props.shadow, props.shadowPosition, colors),\n extractedStyleProps,\n overrideStyle,\n state.pressed ? pressedStyle : undefined,\n ]);\n },\n [\n style,\n pressedStyle,\n disabled,\n extractedStyleProps,\n props.shadow,\n props.shadowPosition,\n colors,\n ],\n );\n\n return (\n <RNPressable {...props} style={pressableStyles} disabled={disabled}>\n {children}\n </RNPressable>\n );\n};\n"],"mappings":"AAyDI;AAzDJ,SAA4B,mBAAmB;AAC/C;AAAA,EAEE,aAAa;AAAA,EAEb;AAAA,OAEK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIA,MAAM,YAAY,SAAS,cAAc;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA0C;AACxC,QAAM,SAAS,UAAU;AACzB,QAAM,sBAAsB,cAAc,KAAK;AAE/C,QAAM,kBAAkB;AAAA,IACtB,CAAC,UAA4D;AAC3D,UAAI;AAEJ,UAAI,OAAO,UAAU,YAAY;AAC/B,wBAAgB,MAAM,KAAK;AAAA,MAC7B,OAAO;AACL,wBAAgB;AAAA,MAClB;AAEA,aAAO,WAAW,QAAQ;AAAA,QACxB,EAAE,SAAS,YAAY,MAAM,UAAU,MAAM,EAAE;AAAA,QAC/C,eAAe,MAAM,QAAQ,MAAM,gBAAgB,MAAM;AAAA,QACzD;AAAA,QACA;AAAA,QACA,MAAM,UAAU,eAAe;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,SACE,oBAAC,eAAa,GAAG,OAAO,OAAO,iBAAiB,UAC7C,UACH;AAEJ;","names":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import { SafeAreaViewProps } from '../../types/safe-area-view.types.mjs';
|
|
4
|
+
import 'react-native-safe-area-context';
|
|
5
|
+
|
|
6
|
+
declare const SafeAreaView: react.MemoExoticComponent<(props: SafeAreaViewProps) => react_jsx_runtime.JSX.Element>;
|
|
7
|
+
|
|
8
|
+
export { SafeAreaView };
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useCallback, useMemo } from "react";
|
|
3
|
+
import { StyleSheet } from "react-native";
|
|
4
|
+
import {
|
|
5
|
+
useSafeAreaInsets
|
|
6
|
+
} from "react-native-safe-area-context";
|
|
7
|
+
import { EdgeToShorthandKeyMap, EdgeToSpacingKeyMap } from "../../constants";
|
|
8
|
+
import { View } from "./view";
|
|
9
|
+
const SafeAreaView = memo(function SafeAreaView2(props) {
|
|
10
|
+
const { edges, mode = "padding", style, ...rest } = props;
|
|
11
|
+
const insets = useSafeAreaInsets();
|
|
12
|
+
const flatenedStyle = useMemo(() => {
|
|
13
|
+
return StyleSheet.flatten(style);
|
|
14
|
+
}, [style]);
|
|
15
|
+
const nativeEdges = useMemo(() => {
|
|
16
|
+
if (!edges) {
|
|
17
|
+
return {
|
|
18
|
+
top: "additive",
|
|
19
|
+
bottom: "additive",
|
|
20
|
+
left: "additive",
|
|
21
|
+
right: "additive"
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
let computedEdges;
|
|
25
|
+
if (Array.isArray(edges)) {
|
|
26
|
+
computedEdges = edges.reduce((acc, current) => {
|
|
27
|
+
acc[current] = "additive";
|
|
28
|
+
return acc;
|
|
29
|
+
}, {});
|
|
30
|
+
} else {
|
|
31
|
+
computedEdges = edges;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
top: computedEdges.top ?? "off",
|
|
35
|
+
bottom: computedEdges.bottom ?? "off",
|
|
36
|
+
left: computedEdges.left ?? "off",
|
|
37
|
+
right: computedEdges.right ?? "off"
|
|
38
|
+
};
|
|
39
|
+
}, [edges]);
|
|
40
|
+
const getSpacingKey = useCallback(
|
|
41
|
+
(edge) => `${mode}${EdgeToSpacingKeyMap[edge]}`,
|
|
42
|
+
[mode]
|
|
43
|
+
);
|
|
44
|
+
const getSpacingForEdge = useCallback(
|
|
45
|
+
(edge) => {
|
|
46
|
+
const shorthand = `${mode}${EdgeToShorthandKeyMap[edge]}`;
|
|
47
|
+
const spacing = getSpacingKey(edge);
|
|
48
|
+
return Number(
|
|
49
|
+
flatenedStyle?.[spacing] ?? flatenedStyle?.[shorthand] ?? flatenedStyle?.[mode] ?? 0
|
|
50
|
+
);
|
|
51
|
+
},
|
|
52
|
+
[flatenedStyle, getSpacingKey, mode]
|
|
53
|
+
);
|
|
54
|
+
const resolveEdge = useCallback(
|
|
55
|
+
(inset, current, edgeMode) => {
|
|
56
|
+
if (edgeMode === "off") {
|
|
57
|
+
return current;
|
|
58
|
+
}
|
|
59
|
+
if (edgeMode === "maximum") {
|
|
60
|
+
return Math.max(inset, current);
|
|
61
|
+
}
|
|
62
|
+
return inset + current;
|
|
63
|
+
},
|
|
64
|
+
[]
|
|
65
|
+
);
|
|
66
|
+
const computedStyle = useMemo(() => {
|
|
67
|
+
const insetsStyle = {
|
|
68
|
+
[getSpacingKey("top")]: resolveEdge(
|
|
69
|
+
insets.top,
|
|
70
|
+
getSpacingForEdge("top"),
|
|
71
|
+
nativeEdges.top
|
|
72
|
+
),
|
|
73
|
+
[getSpacingKey("bottom")]: resolveEdge(
|
|
74
|
+
insets.bottom,
|
|
75
|
+
getSpacingForEdge("bottom"),
|
|
76
|
+
nativeEdges.bottom
|
|
77
|
+
),
|
|
78
|
+
[getSpacingKey("left")]: resolveEdge(
|
|
79
|
+
insets.left,
|
|
80
|
+
getSpacingForEdge("left"),
|
|
81
|
+
nativeEdges.left
|
|
82
|
+
),
|
|
83
|
+
[getSpacingKey("right")]: resolveEdge(
|
|
84
|
+
insets.right,
|
|
85
|
+
getSpacingForEdge("right"),
|
|
86
|
+
nativeEdges.right
|
|
87
|
+
)
|
|
88
|
+
};
|
|
89
|
+
return StyleSheet.flatten([style, insetsStyle]);
|
|
90
|
+
}, [
|
|
91
|
+
insets,
|
|
92
|
+
nativeEdges,
|
|
93
|
+
style,
|
|
94
|
+
resolveEdge,
|
|
95
|
+
getSpacingKey,
|
|
96
|
+
getSpacingForEdge
|
|
97
|
+
]);
|
|
98
|
+
return /* @__PURE__ */ jsx(View, { style: computedStyle, ...rest });
|
|
99
|
+
});
|
|
100
|
+
export {
|
|
101
|
+
SafeAreaView
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=safe-area-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/atoms/safe-area-view.tsx"],"sourcesContent":["import { memo, useCallback, useMemo } from \"react\";\nimport { StyleSheet, ViewStyle } from \"react-native\";\nimport {\n Edge,\n EdgeMode,\n EdgeRecord,\n useSafeAreaInsets,\n} from \"react-native-safe-area-context\";\n\nimport { EdgeToShorthandKeyMap, EdgeToSpacingKeyMap } from \"../../constants\";\nimport { SafeAreaViewProps } from \"../../types\";\nimport { View } from \"./view\";\n\nexport const SafeAreaView = memo(function SafeAreaView(\n props: SafeAreaViewProps,\n) {\n const { edges, mode = \"padding\", style, ...rest } = props;\n const insets = useSafeAreaInsets();\n\n const flatenedStyle = useMemo(() => {\n return StyleSheet.flatten(style);\n }, [style]);\n\n const nativeEdges = useMemo<Record<Edge, EdgeMode>>(() => {\n if (!edges) {\n return {\n top: \"additive\",\n bottom: \"additive\",\n left: \"additive\",\n right: \"additive\",\n };\n }\n\n let computedEdges: EdgeRecord;\n\n if (Array.isArray(edges)) {\n computedEdges = edges.reduce<EdgeRecord>((acc, current: Edge) => {\n acc[current] = \"additive\";\n\n return acc;\n }, {});\n } else {\n computedEdges = edges as EdgeRecord;\n }\n\n return {\n top: computedEdges.top ?? \"off\",\n bottom: computedEdges.bottom ?? \"off\",\n left: computedEdges.left ?? \"off\",\n right: computedEdges.right ?? \"off\",\n };\n }, [edges]);\n\n const getSpacingKey = useCallback(\n (edge: Edge): keyof ViewStyle => `${mode}${EdgeToSpacingKeyMap[edge]}`,\n [mode],\n );\n\n const getSpacingForEdge = useCallback(\n (edge: Edge): number => {\n const shorthand: keyof ViewStyle = `${mode}${EdgeToShorthandKeyMap[edge]}`;\n const spacing: keyof ViewStyle = getSpacingKey(edge);\n\n return Number(\n flatenedStyle?.[spacing] ??\n flatenedStyle?.[shorthand] ??\n flatenedStyle?.[mode] ??\n 0,\n );\n },\n [flatenedStyle, getSpacingKey, mode],\n );\n\n const resolveEdge = useCallback(\n (inset: number, current: number, edgeMode: EdgeMode) => {\n if (edgeMode === \"off\") {\n return current;\n }\n\n if (edgeMode === \"maximum\") {\n return Math.max(inset, current);\n }\n\n return inset + current;\n },\n [],\n );\n\n const computedStyle = useMemo(() => {\n const insetsStyle: ViewStyle = {\n [getSpacingKey(\"top\")]: resolveEdge(\n insets.top,\n getSpacingForEdge(\"top\"),\n nativeEdges.top,\n ),\n [getSpacingKey(\"bottom\")]: resolveEdge(\n insets.bottom,\n getSpacingForEdge(\"bottom\"),\n nativeEdges.bottom,\n ),\n [getSpacingKey(\"left\")]: resolveEdge(\n insets.left,\n getSpacingForEdge(\"left\"),\n nativeEdges.left,\n ),\n [getSpacingKey(\"right\")]: resolveEdge(\n insets.right,\n getSpacingForEdge(\"right\"),\n nativeEdges.right,\n ),\n };\n\n return StyleSheet.flatten([style, insetsStyle]);\n }, [\n insets,\n nativeEdges,\n style,\n resolveEdge,\n getSpacingKey,\n getSpacingForEdge,\n ]);\n\n return <View style={computedStyle} {...rest} />;\n});\n"],"mappings":"AA0HS;AA1HT,SAAS,MAAM,aAAa,eAAe;AAC3C,SAAS,kBAA6B;AACtC;AAAA,EAIE;AAAA,OACK;AAEP,SAAS,uBAAuB,2BAA2B;AAE3D,SAAS,YAAY;AAEd,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,OAAO,OAAO,WAAW,OAAO,GAAG,KAAK,IAAI;AACpD,QAAM,SAAS,kBAAkB;AAEjC,QAAM,gBAAgB,QAAQ,MAAM;AAClC,WAAO,WAAW,QAAQ,KAAK;AAAA,EACjC,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,cAAc,QAAgC,MAAM;AACxD,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI;AAEJ,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,sBAAgB,MAAM,OAAmB,CAAC,KAAK,YAAkB;AAC/D,YAAI,OAAO,IAAI;AAEf,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAAA,IACP,OAAO;AACL,sBAAgB;AAAA,IAClB;AAEA,WAAO;AAAA,MACL,KAAK,cAAc,OAAO;AAAA,MAC1B,QAAQ,cAAc,UAAU;AAAA,MAChC,MAAM,cAAc,QAAQ;AAAA,MAC5B,OAAO,cAAc,SAAS;AAAA,IAChC;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,gBAAgB;AAAA,IACpB,CAAC,SAAgC,GAAG,IAAI,GAAG,oBAAoB,IAAI,CAAC;AAAA,IACpE,CAAC,IAAI;AAAA,EACP;AAEA,QAAM,oBAAoB;AAAA,IACxB,CAAC,SAAuB;AACtB,YAAM,YAA6B,GAAG,IAAI,GAAG,sBAAsB,IAAI,CAAC;AACxE,YAAM,UAA2B,cAAc,IAAI;AAEnD,aAAO;AAAA,QACL,gBAAgB,OAAO,KACrB,gBAAgB,SAAS,KACzB,gBAAgB,IAAI,KACpB;AAAA,MACJ;AAAA,IACF;AAAA,IACA,CAAC,eAAe,eAAe,IAAI;AAAA,EACrC;AAEA,QAAM,cAAc;AAAA,IAClB,CAAC,OAAe,SAAiB,aAAuB;AACtD,UAAI,aAAa,OAAO;AACtB,eAAO;AAAA,MACT;AAEA,UAAI,aAAa,WAAW;AAC1B,eAAO,KAAK,IAAI,OAAO,OAAO;AAAA,MAChC;AAEA,aAAO,QAAQ;AAAA,IACjB;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,gBAAgB,QAAQ,MAAM;AAClC,UAAM,cAAyB;AAAA,MAC7B,CAAC,cAAc,KAAK,CAAC,GAAG;AAAA,QACtB,OAAO;AAAA,QACP,kBAAkB,KAAK;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,MACA,CAAC,cAAc,QAAQ,CAAC,GAAG;AAAA,QACzB,OAAO;AAAA,QACP,kBAAkB,QAAQ;AAAA,QAC1B,YAAY;AAAA,MACd;AAAA,MACA,CAAC,cAAc,MAAM,CAAC,GAAG;AAAA,QACvB,OAAO;AAAA,QACP,kBAAkB,MAAM;AAAA,QACxB,YAAY;AAAA,MACd;AAAA,MACA,CAAC,cAAc,OAAO,CAAC,GAAG;AAAA,QACxB,OAAO;AAAA,QACP,kBAAkB,OAAO;AAAA,QACzB,YAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO,WAAW,QAAQ,CAAC,OAAO,WAAW,CAAC;AAAA,EAChD,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO,oBAAC,QAAK,OAAO,eAAgB,GAAG,MAAM;AAC/C,CAAC;","names":["SafeAreaView"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import { TagProps } from '../../types/tag.types.mjs';
|
|
4
|
+
import 'react-native';
|
|
5
|
+
import '@impulse-ui-native/theme';
|
|
6
|
+
|
|
7
|
+
declare const Tag: react.MemoExoticComponent<({ label, size, variant, color, closable, disabled, onClose, onPress, }: TagProps) => react_jsx_runtime.JSX.Element>;
|
|
8
|
+
|
|
9
|
+
export { Tag };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useMemo } from "react";
|
|
3
|
+
import { StyleSheet, View } from "react-native";
|
|
4
|
+
import { Icon } from "@impulse-ui-native/icon/components/icon";
|
|
5
|
+
import { XCircleIcon } from "@impulse-ui-native/icon/icons/x-circle";
|
|
6
|
+
import { useThemedStyles } from "@impulse-ui-native/theme";
|
|
7
|
+
import { Pressable } from "./pressable";
|
|
8
|
+
import { Typography } from "./typography";
|
|
9
|
+
const Tag = memo(function Tag2({
|
|
10
|
+
label,
|
|
11
|
+
size = "medium",
|
|
12
|
+
variant = "filled",
|
|
13
|
+
color = "primary",
|
|
14
|
+
closable,
|
|
15
|
+
disabled,
|
|
16
|
+
onClose,
|
|
17
|
+
onPress
|
|
18
|
+
}) {
|
|
19
|
+
const styles = useThemedStyles(
|
|
20
|
+
themedStyles,
|
|
21
|
+
{
|
|
22
|
+
size,
|
|
23
|
+
variant,
|
|
24
|
+
disabled,
|
|
25
|
+
color
|
|
26
|
+
},
|
|
27
|
+
[size, variant, disabled, color]
|
|
28
|
+
);
|
|
29
|
+
const Container = useMemo(() => {
|
|
30
|
+
if (onPress) {
|
|
31
|
+
return Pressable;
|
|
32
|
+
}
|
|
33
|
+
return View;
|
|
34
|
+
}, [onPress]);
|
|
35
|
+
const showClose = (closable || size === "medium" || size === "large") && !disabled && onClose;
|
|
36
|
+
return /* @__PURE__ */ jsxs(Container, { onPress, disabled, style: styles.container, children: [
|
|
37
|
+
/* @__PURE__ */ jsx(Typography.Caption, { style: styles.label, children: label }),
|
|
38
|
+
showClose ? /* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, children: /* @__PURE__ */ jsx(
|
|
39
|
+
Icon,
|
|
40
|
+
{
|
|
41
|
+
icon: XCircleIcon,
|
|
42
|
+
size: "small",
|
|
43
|
+
color: styles.icon.color,
|
|
44
|
+
style: styles.icon
|
|
45
|
+
}
|
|
46
|
+
) }) : null
|
|
47
|
+
] });
|
|
48
|
+
});
|
|
49
|
+
function themedStyles(theme, props) {
|
|
50
|
+
const { size, variant, color, disabled } = props;
|
|
51
|
+
const tagTokens = theme.components.tag;
|
|
52
|
+
const sizeTokens = tagTokens.sizes[size];
|
|
53
|
+
const variantTokens = tagTokens.colors[color][variant];
|
|
54
|
+
return StyleSheet.create({
|
|
55
|
+
container: {
|
|
56
|
+
flexDirection: "row",
|
|
57
|
+
alignItems: "center",
|
|
58
|
+
justifyContent: "center",
|
|
59
|
+
alignSelf: "flex-start",
|
|
60
|
+
height: sizeTokens.height,
|
|
61
|
+
paddingHorizontal: sizeTokens.paddingHorizontal,
|
|
62
|
+
minWidth: sizeTokens.minWidth,
|
|
63
|
+
borderRadius: tagTokens.borderRadius,
|
|
64
|
+
gap: tagTokens.gap,
|
|
65
|
+
borderWidth: tagTokens.borderWidth,
|
|
66
|
+
borderColor: disabled ? variantTokens.disabledBorderColor : variantTokens.borderColor,
|
|
67
|
+
backgroundColor: disabled ? variantTokens.disabledBackgroundColor : variantTokens.backgroundColor
|
|
68
|
+
},
|
|
69
|
+
label: {
|
|
70
|
+
fontSize: sizeTokens.fontSize,
|
|
71
|
+
color: disabled ? variantTokens.disabledColor : variantTokens.color
|
|
72
|
+
},
|
|
73
|
+
icon: {
|
|
74
|
+
marginLeft: tagTokens.iconMarginLeft,
|
|
75
|
+
color: disabled ? variantTokens.disabledColor : variantTokens.color
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export {
|
|
80
|
+
Tag
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=tag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/atoms/tag.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet, View } from \"react-native\";\n\nimport { Icon } from \"@impulse-ui-native/icon/components/icon\";\nimport { XCircleIcon } from \"@impulse-ui-native/icon/icons/x-circle\";\nimport { AppTheme, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport { TagProps, TagThemeProps } from \"../../types\";\nimport { Pressable } from \"./pressable\";\nimport { Typography } from \"./typography\";\n\nexport const Tag = memo(function Tag({\n label,\n size = \"medium\",\n variant = \"filled\",\n color = \"primary\",\n closable,\n disabled,\n onClose,\n onPress,\n}: TagProps) {\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n disabled,\n color,\n },\n [size, variant, disabled, color],\n );\n\n const Container = useMemo(() => {\n if (onPress) {\n return Pressable;\n }\n\n return View;\n }, [onPress]);\n\n const showClose =\n (closable || size === \"medium\" || size === \"large\") && !disabled && onClose;\n\n return (\n <Container onPress={onPress} disabled={disabled} style={styles.container}>\n <Typography.Caption style={styles.label}>{label}</Typography.Caption>\n\n {showClose ? (\n <Pressable onPress={onClose} hitSlop={10}>\n <Icon\n icon={XCircleIcon}\n size=\"small\"\n color={styles.icon.color}\n style={styles.icon}\n />\n </Pressable>\n ) : null}\n </Container>\n );\n});\n\nfunction themedStyles(theme: AppTheme, props: TagThemeProps) {\n const { size, variant, color, disabled } = props;\n\n const tagTokens = theme.components.tag;\n const sizeTokens = tagTokens.sizes[size];\n const variantTokens = tagTokens.colors[color][variant];\n\n return StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"flex-start\",\n\n height: sizeTokens.height,\n paddingHorizontal: sizeTokens.paddingHorizontal,\n minWidth: sizeTokens.minWidth,\n\n borderRadius: tagTokens.borderRadius,\n gap: tagTokens.gap,\n borderWidth: tagTokens.borderWidth,\n\n borderColor: disabled\n ? variantTokens.disabledBorderColor\n : variantTokens.borderColor,\n\n backgroundColor: disabled\n ? variantTokens.disabledBackgroundColor\n : variantTokens.backgroundColor,\n },\n\n label: {\n fontSize: sizeTokens.fontSize,\n color: disabled ? variantTokens.disabledColor : variantTokens.color,\n },\n\n icon: {\n marginLeft: tagTokens.iconMarginLeft,\n color: disabled ? variantTokens.disabledColor : variantTokens.color,\n },\n });\n}\n"],"mappings":"AA4CI,SACE,KADF;AA5CJ,SAAS,MAAM,eAAe;AAC9B,SAAS,YAAY,YAAY;AAEjC,SAAS,YAAY;AACrB,SAAS,mBAAmB;AAC5B,SAAmB,uBAAuB;AAG1C,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAEpB,MAAM,MAAM,KAAK,SAASA,KAAI;AAAA,EACnC;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAa;AACX,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,MAAM,SAAS,UAAU,KAAK;AAAA,EACjC;AAEA,QAAM,YAAY,QAAQ,MAAM;AAC9B,QAAI,SAAS;AACX,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,aACH,YAAY,SAAS,YAAY,SAAS,YAAY,CAAC,YAAY;AAEtE,SACE,qBAAC,aAAU,SAAkB,UAAoB,OAAO,OAAO,WAC7D;AAAA,wBAAC,WAAW,SAAX,EAAmB,OAAO,OAAO,OAAQ,iBAAM;AAAA,IAE/C,YACC,oBAAC,aAAU,SAAS,SAAS,SAAS,IACpC;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,MAAK;AAAA,QACL,OAAO,OAAO,KAAK;AAAA,QACnB,OAAO,OAAO;AAAA;AAAA,IAChB,GACF,IACE;AAAA,KACN;AAEJ,CAAC;AAED,SAAS,aAAa,OAAiB,OAAsB;AAC3D,QAAM,EAAE,MAAM,SAAS,OAAO,SAAS,IAAI;AAE3C,QAAM,YAAY,MAAM,WAAW;AACnC,QAAM,aAAa,UAAU,MAAM,IAAI;AACvC,QAAM,gBAAgB,UAAU,OAAO,KAAK,EAAE,OAAO;AAErD,SAAO,WAAW,OAAO;AAAA,IACvB,WAAW;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,WAAW;AAAA,MAEX,QAAQ,WAAW;AAAA,MACnB,mBAAmB,WAAW;AAAA,MAC9B,UAAU,WAAW;AAAA,MAErB,cAAc,UAAU;AAAA,MACxB,KAAK,UAAU;AAAA,MACf,aAAa,UAAU;AAAA,MAEvB,aAAa,WACT,cAAc,sBACd,cAAc;AAAA,MAElB,iBAAiB,WACb,cAAc,0BACd,cAAc;AAAA,IACpB;AAAA,IAEA,OAAO;AAAA,MACL,UAAU,WAAW;AAAA,MACrB,OAAO,WAAW,cAAc,gBAAgB,cAAc;AAAA,IAChE;AAAA,IAEA,MAAM;AAAA,MACJ,YAAY,UAAU;AAAA,MACtB,OAAO,WAAW,cAAc,gBAAgB,cAAc;AAAA,IAChE;AAAA,EACF,CAAC;AACH;","names":["Tag"]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import { TextProps } from '../../types/typography.types.mjs';
|
|
4
|
+
import 'react-native';
|
|
5
|
+
import '@impulse-ui-native/theme';
|
|
6
|
+
|
|
7
|
+
declare const Typography: {
|
|
8
|
+
Master: react.MemoExoticComponent<{
|
|
9
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
10
|
+
displayName: string;
|
|
11
|
+
}>;
|
|
12
|
+
DisplayLarge: react.MemoExoticComponent<{
|
|
13
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
14
|
+
displayName: string;
|
|
15
|
+
}>;
|
|
16
|
+
DisplayMedium: react.MemoExoticComponent<{
|
|
17
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
18
|
+
displayName: string;
|
|
19
|
+
}>;
|
|
20
|
+
DisplaySmall: react.MemoExoticComponent<{
|
|
21
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
displayName: string;
|
|
23
|
+
}>;
|
|
24
|
+
Title1: react.MemoExoticComponent<{
|
|
25
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
26
|
+
displayName: string;
|
|
27
|
+
}>;
|
|
28
|
+
Title2: react.MemoExoticComponent<{
|
|
29
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
30
|
+
displayName: string;
|
|
31
|
+
}>;
|
|
32
|
+
Title3: react.MemoExoticComponent<{
|
|
33
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
34
|
+
displayName: string;
|
|
35
|
+
}>;
|
|
36
|
+
Title4: react.MemoExoticComponent<{
|
|
37
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
38
|
+
displayName: string;
|
|
39
|
+
}>;
|
|
40
|
+
Title5: react.MemoExoticComponent<{
|
|
41
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
42
|
+
displayName: string;
|
|
43
|
+
}>;
|
|
44
|
+
Title6: react.MemoExoticComponent<{
|
|
45
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
46
|
+
displayName: string;
|
|
47
|
+
}>;
|
|
48
|
+
Subtitle1: react.MemoExoticComponent<{
|
|
49
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
50
|
+
displayName: string;
|
|
51
|
+
}>;
|
|
52
|
+
Subtitle2: react.MemoExoticComponent<{
|
|
53
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
54
|
+
displayName: string;
|
|
55
|
+
}>;
|
|
56
|
+
BodyLarge: react.MemoExoticComponent<{
|
|
57
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
58
|
+
displayName: string;
|
|
59
|
+
}>;
|
|
60
|
+
Body: react.MemoExoticComponent<{
|
|
61
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
62
|
+
displayName: string;
|
|
63
|
+
}>;
|
|
64
|
+
BodySmall: react.MemoExoticComponent<{
|
|
65
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
66
|
+
displayName: string;
|
|
67
|
+
}>;
|
|
68
|
+
Caption: react.MemoExoticComponent<{
|
|
69
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
70
|
+
displayName: string;
|
|
71
|
+
}>;
|
|
72
|
+
Label: react.MemoExoticComponent<{
|
|
73
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
74
|
+
displayName: string;
|
|
75
|
+
}>;
|
|
76
|
+
Overline: react.MemoExoticComponent<{
|
|
77
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
78
|
+
displayName: string;
|
|
79
|
+
}>;
|
|
80
|
+
Helper: react.MemoExoticComponent<{
|
|
81
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
82
|
+
displayName: string;
|
|
83
|
+
}>;
|
|
84
|
+
Code: react.MemoExoticComponent<{
|
|
85
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
86
|
+
displayName: string;
|
|
87
|
+
}>;
|
|
88
|
+
Quote: react.MemoExoticComponent<{
|
|
89
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
90
|
+
displayName: string;
|
|
91
|
+
}>;
|
|
92
|
+
Eyebrow: react.MemoExoticComponent<{
|
|
93
|
+
(props: TextProps): react_jsx_runtime.JSX.Element;
|
|
94
|
+
displayName: string;
|
|
95
|
+
}>;
|
|
96
|
+
};
|
|
97
|
+
type TypographyComponent = (typeof Typography)[keyof typeof Typography];
|
|
98
|
+
|
|
99
|
+
export { Typography, type TypographyComponent };
|