@impulse-ui-native/primitives 2.0.1 → 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.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/atoms/button.d.mts +10 -0
  3. package/dist/components/atoms/button.js +60 -0
  4. package/dist/components/atoms/button.js.map +1 -0
  5. package/dist/components/atoms/icon-button.d.mts +12 -0
  6. package/dist/components/atoms/icon-button.js +51 -0
  7. package/dist/components/atoms/icon-button.js.map +1 -0
  8. package/dist/components/atoms/index.d.mts +18 -0
  9. package/dist/components/atoms/index.js +17 -0
  10. package/dist/components/atoms/index.js.map +1 -0
  11. package/dist/components/atoms/pressable.d.mts +9 -0
  12. package/dist/components/atoms/pressable.js +52 -0
  13. package/dist/components/atoms/pressable.js.map +1 -0
  14. package/dist/components/atoms/safe-area-view.d.mts +8 -0
  15. package/dist/components/atoms/safe-area-view.js +103 -0
  16. package/dist/components/atoms/safe-area-view.js.map +1 -0
  17. package/dist/components/atoms/tag.d.mts +9 -0
  18. package/dist/components/atoms/tag.js +82 -0
  19. package/dist/components/atoms/tag.js.map +1 -0
  20. package/dist/components/atoms/typography.d.mts +99 -0
  21. package/dist/components/atoms/typography.js +184 -0
  22. package/dist/components/atoms/typography.js.map +1 -0
  23. package/dist/components/atoms/view.d.mts +8 -0
  24. package/dist/components/atoms/view.js +27 -0
  25. package/dist/components/atoms/view.js.map +1 -0
  26. package/dist/components/controls/addon.d.mts +11 -0
  27. package/dist/components/controls/addon.js +72 -0
  28. package/dist/components/controls/addon.js.map +1 -0
  29. package/dist/components/controls/container.d.mts +11 -0
  30. package/dist/components/controls/container.js +54 -0
  31. package/dist/components/controls/container.js.map +1 -0
  32. package/dist/components/controls/control.d.mts +23 -0
  33. package/dist/components/controls/control.js +26 -0
  34. package/dist/components/controls/control.js.map +1 -0
  35. package/dist/components/controls/error.d.mts +11 -0
  36. package/dist/components/controls/error.js +33 -0
  37. package/dist/components/controls/error.js.map +1 -0
  38. package/dist/components/controls/index.d.mts +10 -0
  39. package/dist/components/controls/index.js +7 -0
  40. package/dist/components/controls/index.js.map +1 -0
  41. package/dist/components/controls/input.d.mts +11 -0
  42. package/dist/components/controls/input.js +63 -0
  43. package/dist/components/controls/input.js.map +1 -0
  44. package/dist/components/controls/label.d.mts +11 -0
  45. package/dist/components/controls/label.js +42 -0
  46. package/dist/components/controls/label.js.map +1 -0
  47. package/dist/components/controls/loader.d.mts +6 -0
  48. package/dist/components/controls/loader.js +10 -0
  49. package/dist/components/controls/loader.js.map +1 -0
  50. package/dist/components/controls/placeholder.d.mts +11 -0
  51. package/dist/components/controls/placeholder.js +51 -0
  52. package/dist/components/controls/placeholder.js.map +1 -0
  53. package/dist/components/controls/provider.d.mts +13 -0
  54. package/dist/components/controls/provider.js +19 -0
  55. package/dist/components/controls/provider.js.map +1 -0
  56. package/dist/components/controls/root.d.mts +9 -0
  57. package/dist/components/controls/root.js +18 -0
  58. package/dist/components/controls/root.js.map +1 -0
  59. package/dist/components/controls/value.d.mts +11 -0
  60. package/dist/components/controls/value.js +36 -0
  61. package/dist/components/controls/value.js.map +1 -0
  62. package/dist/components/index.d.mts +22 -0
  63. package/dist/components/index.js +3 -0
  64. package/dist/components/index.js.map +1 -0
  65. package/dist/constants/control-container.constants.d.mts +6 -0
  66. package/dist/constants/control-container.constants.js +15 -0
  67. package/dist/constants/control-container.constants.js.map +1 -0
  68. package/dist/constants/index.d.mts +3 -0
  69. package/dist/constants/index.js +3 -0
  70. package/dist/constants/index.js.map +1 -0
  71. package/dist/constants/safe-area-view.constants.d.mts +14 -0
  72. package/dist/constants/safe-area-view.constants.js +17 -0
  73. package/dist/constants/safe-area-view.constants.js.map +1 -0
  74. package/dist/hocs/create-preset.hoc.d.mts +12 -0
  75. package/dist/hocs/create-preset.hoc.js +38 -0
  76. package/dist/hocs/create-preset.hoc.js.map +1 -0
  77. package/dist/hocs/index.d.mts +6 -0
  78. package/dist/hocs/index.js +5 -0
  79. package/dist/hocs/index.js.map +1 -0
  80. package/dist/index.d.mts +25 -242
  81. package/dist/index.js +4 -997
  82. package/dist/index.js.map +1 -1
  83. package/dist/types/button.types.d.mts +21 -0
  84. package/dist/types/button.types.js +1 -0
  85. package/dist/types/button.types.js.map +1 -0
  86. package/dist/types/control-components.types.d.mts +45 -0
  87. package/dist/types/control-components.types.js +1 -0
  88. package/dist/types/control-components.types.js.map +1 -0
  89. package/dist/types/icon-button.types.d.mts +15 -0
  90. package/dist/types/icon-button.types.js +1 -0
  91. package/dist/types/icon-button.types.js.map +1 -0
  92. package/dist/types/index.d.mts +12 -0
  93. package/dist/types/index.js +9 -0
  94. package/dist/types/index.js.map +1 -0
  95. package/dist/types/safe-area-view.types.d.mts +5 -0
  96. package/dist/types/safe-area-view.types.js +1 -0
  97. package/dist/types/safe-area-view.types.js.map +1 -0
  98. package/dist/types/tag.types.d.mts +22 -0
  99. package/dist/types/tag.types.js +1 -0
  100. package/dist/types/tag.types.js.map +1 -0
  101. package/dist/types/typography.types.d.mts +8 -0
  102. package/dist/types/typography.types.js +1 -0
  103. package/dist/types/typography.types.js.map +1 -0
  104. package/dist/types/view.types.d.mts +6 -0
  105. package/dist/types/view.types.js +1 -0
  106. package/dist/types/view.types.js.map +1 -0
  107. package/dist/utils/controls.utils.d.mts +13 -0
  108. package/dist/utils/controls.utils.js +18 -0
  109. package/dist/utils/controls.utils.js.map +1 -0
  110. package/dist/utils/index.d.mts +2 -0
  111. package/dist/utils/index.js +2 -0
  112. package/dist/utils/index.js.map +1 -0
  113. package/package.json +11 -10
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ImpulseUI Native contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -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 };