@impulse-ui-native/primitives 3.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +63 -21
  2. package/dist/components/atoms/avatar.d.mts +1 -1
  3. package/dist/components/atoms/avatar.js +14 -30
  4. package/dist/components/atoms/avatar.js.map +1 -1
  5. package/dist/components/atoms/badge/root.d.mts +1 -1
  6. package/dist/components/atoms/badge/root.js +25 -38
  7. package/dist/components/atoms/badge/root.js.map +1 -1
  8. package/dist/components/atoms/button.d.mts +1 -1
  9. package/dist/components/atoms/button.js +22 -31
  10. package/dist/components/atoms/button.js.map +1 -1
  11. package/dist/components/atoms/circular-progress.js +2 -2
  12. package/dist/components/atoms/circular-progress.js.map +1 -1
  13. package/dist/components/atoms/divider.d.mts +1 -1
  14. package/dist/components/atoms/divider.js +18 -14
  15. package/dist/components/atoms/divider.js.map +1 -1
  16. package/dist/components/atoms/icon-button.d.mts +1 -1
  17. package/dist/components/atoms/icon-button.js +18 -22
  18. package/dist/components/atoms/icon-button.js.map +1 -1
  19. package/dist/components/atoms/progress.d.mts +1 -1
  20. package/dist/components/atoms/progress.js +0 -28
  21. package/dist/components/atoms/progress.js.map +1 -1
  22. package/dist/components/atoms/spinner.d.mts +1 -1
  23. package/dist/components/atoms/spinner.js +8 -29
  24. package/dist/components/atoms/spinner.js.map +1 -1
  25. package/dist/components/atoms/tag.js +9 -5
  26. package/dist/components/atoms/tag.js.map +1 -1
  27. package/dist/components/atoms/typography.js +25 -1
  28. package/dist/components/atoms/typography.js.map +1 -1
  29. package/dist/components/card/card.d.mts +1 -1
  30. package/dist/components/card/pressable.d.mts +1 -1
  31. package/dist/components/card/pressable.js +2 -20
  32. package/dist/components/card/pressable.js.map +1 -1
  33. package/dist/components/controls/addon.js +6 -3
  34. package/dist/components/controls/addon.js.map +1 -1
  35. package/dist/components/controls/container.js +8 -4
  36. package/dist/components/controls/container.js.map +1 -1
  37. package/dist/components/controls/input.js +7 -5
  38. package/dist/components/controls/input.js.map +1 -1
  39. package/dist/components/controls/label.js +9 -3
  40. package/dist/components/controls/label.js.map +1 -1
  41. package/dist/components/controls/placeholder.js +6 -3
  42. package/dist/components/controls/placeholder.js.map +1 -1
  43. package/dist/components/controls/value.js +6 -3
  44. package/dist/components/controls/value.js.map +1 -1
  45. package/dist/components/index.d.mts +2 -0
  46. package/dist/components/index.js +1 -0
  47. package/dist/components/index.js.map +1 -1
  48. package/dist/components/list/content.d.mts +11 -0
  49. package/dist/components/list/content.js +27 -0
  50. package/dist/components/list/content.js.map +1 -0
  51. package/dist/components/list/index.d.mts +8 -0
  52. package/dist/components/list/index.js +5 -0
  53. package/dist/components/list/index.js.map +1 -0
  54. package/dist/components/list/item.d.mts +11 -0
  55. package/dist/components/list/item.js +32 -0
  56. package/dist/components/list/item.js.map +1 -0
  57. package/dist/components/list/leading.d.mts +11 -0
  58. package/dist/components/list/leading.js +32 -0
  59. package/dist/components/list/leading.js.map +1 -0
  60. package/dist/components/list/list.d.mts +18 -0
  61. package/dist/components/list/list.js +18 -0
  62. package/dist/components/list/list.js.map +1 -0
  63. package/dist/components/list/pressable.d.mts +11 -0
  64. package/dist/components/list/pressable.js +37 -0
  65. package/dist/components/list/pressable.js.map +1 -0
  66. package/dist/components/list/root.d.mts +11 -0
  67. package/dist/components/list/root.js +33 -0
  68. package/dist/components/list/root.js.map +1 -0
  69. package/dist/components/list/trailing.d.mts +11 -0
  70. package/dist/components/list/trailing.js +32 -0
  71. package/dist/components/list/trailing.js.map +1 -0
  72. package/dist/hocs/create-preset.hoc.d.mts +1 -1
  73. package/dist/hocs/create-preset.hoc.js +23 -8
  74. package/dist/hocs/create-preset.hoc.js.map +1 -1
  75. package/dist/hooks/use-indeterminate-progress-animation.hook.js +3 -24
  76. package/dist/hooks/use-indeterminate-progress-animation.hook.js.map +1 -1
  77. package/dist/index.d.mts +2 -0
  78. package/dist/types/avatar.types.d.mts +3 -3
  79. package/dist/types/badge.types.d.mts +3 -3
  80. package/dist/types/button.types.d.mts +4 -3
  81. package/dist/types/control-components.types.d.mts +2 -2
  82. package/dist/types/icon-button.types.d.mts +3 -2
  83. package/dist/types/index.d.mts +1 -0
  84. package/dist/types/index.js +1 -0
  85. package/dist/types/index.js.map +1 -1
  86. package/dist/types/list.types.d.mts +21 -0
  87. package/dist/types/list.types.js +1 -0
  88. package/dist/types/list.types.js.map +1 -0
  89. package/dist/types/tag.types.d.mts +3 -3
  90. package/package.json +6 -6
@@ -1,25 +1,16 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { memo, useCallback, useMemo } from "react";
2
+ import { memo, useCallback } from "react";
3
3
  import { StyleSheet } from "react-native";
4
4
  import { useStyleProps, useThemedStyles } from "@impulse-ui-native/theme";
5
5
  import { Pressable } from "../atoms/pressable";
6
6
  import { cardRootStyles } from "./root.styles";
7
7
  const CardPressable = memo(function CardPressable2({
8
- accessibilityRole = "button",
9
- accessibilityState,
10
8
  disabled,
11
9
  style,
12
10
  ...props
13
11
  }) {
14
12
  const styles = useThemedStyles(cardRootStyles);
15
13
  const extractedStyleProps = useStyleProps(props);
16
- const resolvedAccessibilityState = useMemo(
17
- () => ({
18
- ...accessibilityState,
19
- disabled: disabled === true
20
- }),
21
- [accessibilityState, disabled]
22
- );
23
14
  const rootStyle = useCallback(
24
15
  (state) => StyleSheet.flatten([
25
16
  styles.root,
@@ -28,16 +19,7 @@ const CardPressable = memo(function CardPressable2({
28
19
  ]),
29
20
  [extractedStyleProps, style, styles.root]
30
21
  );
31
- return /* @__PURE__ */ jsx(
32
- Pressable,
33
- {
34
- ...props,
35
- accessibilityRole,
36
- accessibilityState: resolvedAccessibilityState,
37
- disabled: disabled === true,
38
- style: rootStyle
39
- }
40
- );
22
+ return /* @__PURE__ */ jsx(Pressable, { ...props, disabled: disabled === true, style: rootStyle });
41
23
  });
42
24
  export {
43
25
  CardPressable
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/card/pressable.tsx"],"sourcesContent":["import type {\n AccessibilityState,\n PressableStateCallbackType,\n StyleProp,\n ViewStyle,\n} from \"react-native\";\nimport { memo, useCallback, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport { useStyleProps, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { CardPressableProps } from \"../../types\";\nimport { Pressable } from \"../atoms/pressable\";\nimport { cardRootStyles } from \"./root.styles\";\n\nexport const CardPressable = memo(function CardPressable({\n accessibilityRole = \"button\",\n accessibilityState,\n disabled,\n style,\n ...props\n}: CardPressableProps) {\n const styles = useThemedStyles(cardRootStyles);\n const extractedStyleProps = useStyleProps(props);\n\n const resolvedAccessibilityState = useMemo<AccessibilityState>(\n () => ({\n ...accessibilityState,\n disabled: disabled === true,\n }),\n [accessibilityState, disabled],\n );\n\n const rootStyle = useCallback(\n (state: PressableStateCallbackType): StyleProp<ViewStyle> =>\n StyleSheet.flatten([\n styles.root,\n extractedStyleProps,\n typeof style === \"function\" ? style(state) : style,\n ]),\n [extractedStyleProps, style, styles.root],\n );\n\n return (\n <Pressable\n {...props}\n accessibilityRole={accessibilityRole}\n accessibilityState={resolvedAccessibilityState}\n disabled={disabled === true}\n style={rootStyle}\n />\n );\n});\n"],"mappings":"AA4CI;AAtCJ,SAAS,MAAM,aAAa,eAAe;AAC3C,SAAS,kBAAkB;AAE3B,SAAS,eAAe,uBAAuB;AAG/C,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAExB,MAAM,gBAAgB,KAAK,SAASA,eAAc;AAAA,EACvD,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAuB;AACrB,QAAM,SAAS,gBAAgB,cAAc;AAC7C,QAAM,sBAAsB,cAAc,KAAK;AAE/C,QAAM,6BAA6B;AAAA,IACjC,OAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,aAAa;AAAA,IACzB;AAAA,IACA,CAAC,oBAAoB,QAAQ;AAAA,EAC/B;AAEA,QAAM,YAAY;AAAA,IAChB,CAAC,UACC,WAAW,QAAQ;AAAA,MACjB,OAAO;AAAA,MACP;AAAA,MACA,OAAO,UAAU,aAAa,MAAM,KAAK,IAAI;AAAA,IAC/C,CAAC;AAAA,IACH,CAAC,qBAAqB,OAAO,OAAO,IAAI;AAAA,EAC1C;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,oBAAoB;AAAA,MACpB,UAAU,aAAa;AAAA,MACvB,OAAO;AAAA;AAAA,EACT;AAEJ,CAAC;","names":["CardPressable"]}
1
+ {"version":3,"sources":["../../../src/components/card/pressable.tsx"],"sourcesContent":["import type {\n PressableStateCallbackType,\n StyleProp,\n ViewStyle,\n} from \"react-native\";\nimport { memo, useCallback, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport { useStyleProps, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { CardPressableProps } from \"../../types\";\nimport { Pressable } from \"../atoms/pressable\";\nimport { cardRootStyles } from \"./root.styles\";\n\nexport const CardPressable = memo(function CardPressable({\n disabled,\n style,\n ...props\n}: CardPressableProps) {\n const styles = useThemedStyles(cardRootStyles);\n const extractedStyleProps = useStyleProps(props);\n\n const rootStyle = useCallback(\n (state: PressableStateCallbackType): StyleProp<ViewStyle> =>\n StyleSheet.flatten([\n styles.root,\n extractedStyleProps,\n typeof style === \"function\" ? style(state) : style,\n ]),\n [extractedStyleProps, style, styles.root],\n );\n\n return (\n <Pressable {...props} disabled={disabled === true} style={rootStyle} />\n );\n});\n"],"mappings":"AAiCI;AA5BJ,SAAS,MAAM,mBAA4B;AAC3C,SAAS,kBAAkB;AAE3B,SAAS,eAAe,uBAAuB;AAG/C,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAExB,MAAM,gBAAgB,KAAK,SAASA,eAAc;AAAA,EACvD;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAuB;AACrB,QAAM,SAAS,gBAAgB,cAAc;AAC7C,QAAM,sBAAsB,cAAc,KAAK;AAE/C,QAAM,YAAY;AAAA,IAChB,CAAC,UACC,WAAW,QAAQ;AAAA,MACjB,OAAO;AAAA,MACP;AAAA,MACA,OAAO,UAAU,aAAa,MAAM,KAAK,IAAI;AAAA,IAC/C,CAAC;AAAA,IACH,CAAC,qBAAqB,OAAO,OAAO,IAAI;AAAA,EAC1C;AAEA,SACE,oBAAC,aAAW,GAAG,OAAO,UAAU,aAAa,MAAM,OAAO,WAAW;AAEzE,CAAC;","names":["CardPressable"]}
@@ -3,6 +3,7 @@ import { memo, useMemo } from "react";
3
3
  import { StyleSheet } from "react-native";
4
4
  import { Icon } from "@impulse-ui-native/icon/components/icon";
5
5
  import {
6
+ getFieldStateTokens,
6
7
  useComponentsTokens,
7
8
  useThemedStyles
8
9
  } from "@impulse-ui-native/theme";
@@ -58,14 +59,16 @@ const ControlAddon = memo(function ControlAddon2(props) {
58
59
  function themedStyles(theme, props) {
59
60
  const { variant, disabled, error } = props;
60
61
  const controlAddonTokens = theme.components.controlAddon;
61
- const variantTokens = controlAddonTokens.variants[variant];
62
- const color = disabled ? variantTokens.disabledIconColor : error ? variantTokens.errorIconColor : variantTokens.iconColor;
62
+ const appearanceTokens = getFieldStateTokens(
63
+ controlAddonTokens.variants[variant],
64
+ { disabled, error: Boolean(error) }
65
+ );
63
66
  return StyleSheet.create({
64
67
  container: {
65
68
  marginHorizontal: controlAddonTokens.marginHorizontal
66
69
  },
67
70
  icon: {
68
- color
71
+ color: appearanceTokens.iconColor
69
72
  }
70
73
  });
71
74
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/addon.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport { Icon } from \"@impulse-ui-native/icon/components/icon\";\nimport {\n AppTheme,\n ComponentVariant,\n useComponentsTokens,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlAddonProps } from \"../../types\";\nimport { Pressable, View } from \"../atoms\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlAddon = memo(function ControlAddon(\n props: ControlAddonProps,\n) {\n const { icon: AddonIcon, onPress, Content, style, ...rest } = props;\n\n const { variant, disabled, error } = useControlContext();\n\n const tokens = useComponentsTokens();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n variant,\n disabled,\n error,\n },\n [variant, disabled, error],\n );\n\n const Container = useMemo(() => {\n if (onPress) {\n return Pressable;\n }\n\n return View;\n }, [onPress]);\n\n const children = useMemo(() => {\n if (Content) {\n return <Content />;\n }\n\n if (AddonIcon) {\n return <Icon color={styles.icon.color} icon={AddonIcon} />;\n }\n\n return null;\n }, [AddonIcon, Content, styles.icon.color]);\n\n const containerStyle = useMemo(\n () => [styles.container, style],\n [styles.container, style],\n );\n\n if (!children) {\n return null;\n }\n\n return (\n <Container\n {...rest}\n style={containerStyle}\n hitSlop={tokens.controlAddon.hitSlop}\n onPress={onPress}\n disabled={disabled}\n >\n {children}\n </Container>\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n props: {\n variant: ComponentVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const { variant, disabled, error } = props;\n\n const controlAddonTokens = theme.components.controlAddon;\n const variantTokens = controlAddonTokens.variants[variant];\n\n const color = disabled\n ? variantTokens.disabledIconColor\n : error\n ? variantTokens.errorIconColor\n : variantTokens.iconColor;\n\n return StyleSheet.create({\n container: {\n marginHorizontal: controlAddonTokens.marginHorizontal,\n },\n\n icon: {\n color,\n },\n });\n}\n"],"mappings":"AA4Ca;AA5Cb,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B,SAAS,YAAY;AACrB;AAAA,EAGE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,WAAW,YAAY;AAChC,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,MAAM,WAAW,SAAS,SAAS,OAAO,GAAG,KAAK,IAAI;AAE9D,QAAM,EAAE,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAEvD,QAAM,SAAS,oBAAoB;AAEnC,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,SAAS,UAAU,KAAK;AAAA,EAC3B;AAEA,QAAM,YAAY,QAAQ,MAAM;AAC9B,QAAI,SAAS;AACX,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,WAAW,QAAQ,MAAM;AAC7B,QAAI,SAAS;AACX,aAAO,oBAAC,WAAQ;AAAA,IAClB;AAEA,QAAI,WAAW;AACb,aAAO,oBAAC,QAAK,OAAO,OAAO,KAAK,OAAO,MAAM,WAAW;AAAA,IAC1D;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,SAAS,OAAO,KAAK,KAAK,CAAC;AAE1C,QAAM,iBAAiB;AAAA,IACrB,MAAM,CAAC,OAAO,WAAW,KAAK;AAAA,IAC9B,CAAC,OAAO,WAAW,KAAK;AAAA,EAC1B;AAEA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,OAAO,aAAa;AAAA,MAC7B;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ,CAAC;AAED,SAAS,aACP,OACA,OAKA;AACA,QAAM,EAAE,SAAS,UAAU,MAAM,IAAI;AAErC,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,gBAAgB,mBAAmB,SAAS,OAAO;AAEzD,QAAM,QAAQ,WACV,cAAc,oBACd,QACE,cAAc,iBACd,cAAc;AAEpB,SAAO,WAAW,OAAO;AAAA,IACvB,WAAW;AAAA,MACT,kBAAkB,mBAAmB;AAAA,IACvC;AAAA,IAEA,MAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":["ControlAddon"]}
1
+ {"version":3,"sources":["../../../src/components/controls/addon.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport { Icon } from \"@impulse-ui-native/icon/components/icon\";\nimport {\n AppTheme,\n FieldVariant,\n getFieldStateTokens,\n useComponentsTokens,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlAddonProps } from \"../../types\";\nimport { Pressable, View } from \"../atoms\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlAddon = memo(function ControlAddon(\n props: ControlAddonProps,\n) {\n const { icon: AddonIcon, onPress, Content, style, ...rest } = props;\n\n const { variant, disabled, error } = useControlContext();\n\n const tokens = useComponentsTokens();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n variant,\n disabled,\n error,\n },\n [variant, disabled, error],\n );\n\n const Container = useMemo(() => {\n if (onPress) {\n return Pressable;\n }\n\n return View;\n }, [onPress]);\n\n const children = useMemo(() => {\n if (Content) {\n return <Content />;\n }\n\n if (AddonIcon) {\n return <Icon color={styles.icon.color} icon={AddonIcon} />;\n }\n\n return null;\n }, [AddonIcon, Content, styles.icon.color]);\n\n const containerStyle = useMemo(\n () => [styles.container, style],\n [styles.container, style],\n );\n\n if (!children) {\n return null;\n }\n\n return (\n <Container\n {...rest}\n style={containerStyle}\n hitSlop={tokens.controlAddon.hitSlop}\n onPress={onPress}\n disabled={disabled}\n >\n {children}\n </Container>\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n props: {\n variant: FieldVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const { variant, disabled, error } = props;\n\n const controlAddonTokens = theme.components.controlAddon;\n const appearanceTokens = getFieldStateTokens(\n controlAddonTokens.variants[variant],\n { disabled, error: Boolean(error) },\n );\n\n return StyleSheet.create({\n container: {\n marginHorizontal: controlAddonTokens.marginHorizontal,\n },\n\n icon: {\n color: appearanceTokens.iconColor,\n },\n });\n}\n"],"mappings":"AA6Ca;AA7Cb,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B,SAAS,YAAY;AACrB;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,WAAW,YAAY;AAChC,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,MAAM,WAAW,SAAS,SAAS,OAAO,GAAG,KAAK,IAAI;AAE9D,QAAM,EAAE,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAEvD,QAAM,SAAS,oBAAoB;AAEnC,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,SAAS,UAAU,KAAK;AAAA,EAC3B;AAEA,QAAM,YAAY,QAAQ,MAAM;AAC9B,QAAI,SAAS;AACX,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,WAAW,QAAQ,MAAM;AAC7B,QAAI,SAAS;AACX,aAAO,oBAAC,WAAQ;AAAA,IAClB;AAEA,QAAI,WAAW;AACb,aAAO,oBAAC,QAAK,OAAO,OAAO,KAAK,OAAO,MAAM,WAAW;AAAA,IAC1D;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,SAAS,OAAO,KAAK,KAAK,CAAC;AAE1C,QAAM,iBAAiB;AAAA,IACrB,MAAM,CAAC,OAAO,WAAW,KAAK;AAAA,IAC9B,CAAC,OAAO,WAAW,KAAK;AAAA,EAC1B;AAEA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,SAAS,OAAO,aAAa;AAAA,MAC7B;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ,CAAC;AAED,SAAS,aACP,OACA,OAKA;AACA,QAAM,EAAE,SAAS,UAAU,MAAM,IAAI;AAErC,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,mBAAmB;AAAA,IACvB,mBAAmB,SAAS,OAAO;AAAA,IACnC,EAAE,UAAU,OAAO,QAAQ,KAAK,EAAE;AAAA,EACpC;AAEA,SAAO,WAAW,OAAO;AAAA,IACvB,WAAW;AAAA,MACT,kBAAkB,mBAAmB;AAAA,IACvC;AAAA,IAEA,MAAM;AAAA,MACJ,OAAO,iBAAiB;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;","names":["ControlAddon"]}
@@ -2,6 +2,7 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { memo, useMemo } from "react";
3
3
  import { StyleSheet } from "react-native";
4
4
  import {
5
+ getFieldStateTokens,
5
6
  useThemedStyles
6
7
  } from "@impulse-ui-native/theme";
7
8
  import { View } from "../atoms/view";
@@ -33,7 +34,10 @@ function themedStyles(theme, {
33
34
  }) {
34
35
  const controlContainerTokens = theme.components.controlContainer;
35
36
  const sizeTokens = controlContainerTokens.sizes[size];
36
- const variantTokens = controlContainerTokens.variants[variant];
37
+ const appearanceTokens = getFieldStateTokens(
38
+ controlContainerTokens.variants[variant],
39
+ { disabled, error: Boolean(error) }
40
+ );
37
41
  return StyleSheet.create({
38
42
  inputContainer: {
39
43
  flexDirection: "row",
@@ -42,9 +46,9 @@ function themedStyles(theme, {
42
46
  paddingHorizontal: sizeTokens.paddingHorizontal,
43
47
  borderRadius: controlContainerTokens.borderRadius,
44
48
  borderWidth: controlContainerTokens.borderWidth,
45
- opacity: disabled ? controlContainerTokens.disabledOpacity : 1,
46
- backgroundColor: disabled ? variantTokens.disabledBackgroundColor : variantTokens.backgroundColor,
47
- borderColor: error ? variantTokens.errorBorderColor : disabled ? variantTokens.disabledBorderColor : variantTokens.borderColor
49
+ opacity: appearanceTokens.opacity,
50
+ backgroundColor: appearanceTokens.backgroundColor,
51
+ borderColor: appearanceTokens.borderColor
48
52
  }
49
53
  });
50
54
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/container.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport {\n AppTheme,\n ComponentSize,\n ComponentVariant,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlContainerProps } from \"../../types\";\nimport { View } from \"../atoms/view\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlContainer = memo(function ControlContainer(\n props: ControlContainerProps,\n) {\n const { style, ...rest } = props;\n\n const { size, variant, disabled, error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n disabled,\n error,\n },\n [size, variant, disabled, error],\n );\n\n const containerStyle = useMemo(\n () => [styles.inputContainer, style],\n [styles.inputContainer, style],\n );\n\n return <View style={containerStyle} {...rest} />;\n});\n\nfunction themedStyles(\n theme: AppTheme,\n {\n size,\n variant,\n disabled,\n error,\n }: {\n size: ComponentSize;\n variant: ComponentVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const controlContainerTokens = theme.components.controlContainer;\n const sizeTokens = controlContainerTokens.sizes[size];\n const variantTokens = controlContainerTokens.variants[variant];\n\n return StyleSheet.create({\n inputContainer: {\n flexDirection: \"row\",\n alignItems: \"center\",\n\n height: sizeTokens.height,\n paddingHorizontal: sizeTokens.paddingHorizontal,\n\n borderRadius: controlContainerTokens.borderRadius,\n borderWidth: controlContainerTokens.borderWidth,\n\n opacity: disabled ? controlContainerTokens.disabledOpacity : 1,\n\n backgroundColor: disabled\n ? variantTokens.disabledBackgroundColor\n : variantTokens.backgroundColor,\n\n borderColor: error\n ? variantTokens.errorBorderColor\n : disabled\n ? variantTokens.disabledBorderColor\n : variantTokens.borderColor,\n },\n });\n}\n"],"mappings":"AAqCS;AArCT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B;AAAA,EAIE;AAAA,OACK;AAGP,SAAS,YAAY;AACrB,SAAS,yBAAyB;AAE3B,MAAM,mBAAmB,KAAK,SAASA,kBAC5C,OACA;AACA,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAE3B,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAE7D,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,iBAAiB;AAAA,IACrB,MAAM,CAAC,OAAO,gBAAgB,KAAK;AAAA,IACnC,CAAC,OAAO,gBAAgB,KAAK;AAAA,EAC/B;AAEA,SAAO,oBAAC,QAAK,OAAO,gBAAiB,GAAG,MAAM;AAChD,CAAC;AAED,SAAS,aACP,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AACA,QAAM,yBAAyB,MAAM,WAAW;AAChD,QAAM,aAAa,uBAAuB,MAAM,IAAI;AACpD,QAAM,gBAAgB,uBAAuB,SAAS,OAAO;AAE7D,SAAO,WAAW,OAAO;AAAA,IACvB,gBAAgB;AAAA,MACd,eAAe;AAAA,MACf,YAAY;AAAA,MAEZ,QAAQ,WAAW;AAAA,MACnB,mBAAmB,WAAW;AAAA,MAE9B,cAAc,uBAAuB;AAAA,MACrC,aAAa,uBAAuB;AAAA,MAEpC,SAAS,WAAW,uBAAuB,kBAAkB;AAAA,MAE7D,iBAAiB,WACb,cAAc,0BACd,cAAc;AAAA,MAElB,aAAa,QACT,cAAc,mBACd,WACE,cAAc,sBACd,cAAc;AAAA,IACtB;AAAA,EACF,CAAC;AACH;","names":["ControlContainer"]}
1
+ {"version":3,"sources":["../../../src/components/controls/container.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport {\n AppTheme,\n ComponentSize,\n FieldVariant,\n getFieldStateTokens,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlContainerProps } from \"../../types\";\nimport { View } from \"../atoms/view\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlContainer = memo(function ControlContainer(\n props: ControlContainerProps,\n) {\n const { style, ...rest } = props;\n\n const { size, variant, disabled, error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n disabled,\n error,\n },\n [size, variant, disabled, error],\n );\n\n const containerStyle = useMemo(\n () => [styles.inputContainer, style],\n [styles.inputContainer, style],\n );\n\n return <View style={containerStyle} {...rest} />;\n});\n\nfunction themedStyles(\n theme: AppTheme,\n {\n size,\n variant,\n disabled,\n error,\n }: {\n size: ComponentSize;\n variant: FieldVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const controlContainerTokens = theme.components.controlContainer;\n const sizeTokens = controlContainerTokens.sizes[size];\n const appearanceTokens = getFieldStateTokens(\n controlContainerTokens.variants[variant],\n { disabled, error: Boolean(error) },\n );\n\n return StyleSheet.create({\n inputContainer: {\n flexDirection: \"row\",\n alignItems: \"center\",\n\n height: sizeTokens.height,\n paddingHorizontal: sizeTokens.paddingHorizontal,\n\n borderRadius: controlContainerTokens.borderRadius,\n borderWidth: controlContainerTokens.borderWidth,\n\n opacity: appearanceTokens.opacity,\n backgroundColor: appearanceTokens.backgroundColor,\n borderColor: appearanceTokens.borderColor,\n },\n });\n}\n"],"mappings":"AAsCS;AAtCT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B;AAAA,EAIE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,YAAY;AACrB,SAAS,yBAAyB;AAE3B,MAAM,mBAAmB,KAAK,SAASA,kBAC5C,OACA;AACA,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAE3B,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAE7D,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,iBAAiB;AAAA,IACrB,MAAM,CAAC,OAAO,gBAAgB,KAAK;AAAA,IACnC,CAAC,OAAO,gBAAgB,KAAK;AAAA,EAC/B;AAEA,SAAO,oBAAC,QAAK,OAAO,gBAAiB,GAAG,MAAM;AAChD,CAAC;AAED,SAAS,aACP,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AACA,QAAM,yBAAyB,MAAM,WAAW;AAChD,QAAM,aAAa,uBAAuB,MAAM,IAAI;AACpD,QAAM,mBAAmB;AAAA,IACvB,uBAAuB,SAAS,OAAO;AAAA,IACvC,EAAE,UAAU,OAAO,QAAQ,KAAK,EAAE;AAAA,EACpC;AAEA,SAAO,WAAW,OAAO;AAAA,IACvB,gBAAgB;AAAA,MACd,eAAe;AAAA,MACf,YAAY;AAAA,MAEZ,QAAQ,WAAW;AAAA,MACnB,mBAAmB,WAAW;AAAA,MAE9B,cAAc,uBAAuB;AAAA,MACrC,aAAa,uBAAuB;AAAA,MAEpC,SAAS,iBAAiB;AAAA,MAC1B,iBAAiB,iBAAiB;AAAA,MAClC,aAAa,iBAAiB;AAAA,IAChC;AAAA,EACF,CAAC;AACH;","names":["ControlContainer"]}
@@ -2,6 +2,7 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { memo, useMemo } from "react";
3
3
  import { StyleSheet, TextInput } from "react-native";
4
4
  import {
5
+ getFieldStateTokens,
5
6
  useThemedStyles
6
7
  } from "@impulse-ui-native/theme";
7
8
  import { useControlContext } from "./provider";
@@ -40,20 +41,21 @@ function themedStyles(theme, {
40
41
  }) {
41
42
  const controlInputTokens = theme.components.controlInput;
42
43
  const sizeTokens = controlInputTokens.sizes[size];
43
- const variantTokens = controlInputTokens.variants[variant];
44
- const color = disabled ? variantTokens.disabledColor : error ? variantTokens.errorColor : variantTokens.color;
45
- const placeholderColor = disabled ? variantTokens.disabledPlaceholderColor : error ? variantTokens.errorPlaceholderColor : variantTokens.placeholderColor;
44
+ const appearanceTokens = getFieldStateTokens(
45
+ controlInputTokens.variants[variant],
46
+ { disabled, error: Boolean(error) }
47
+ );
46
48
  return StyleSheet.create({
47
49
  input: {
48
50
  flex: controlInputTokens.flex,
49
- color,
51
+ color: appearanceTokens.color,
50
52
  fontSize: sizeTokens.fontSize,
51
53
  fontFamily: controlInputTokens.fontFamily,
52
54
  paddingHorizontal: controlInputTokens.paddingHorizontal,
53
55
  height: "100%"
54
56
  },
55
57
  placeholder: {
56
- color: placeholderColor
58
+ color: appearanceTokens.placeholderColor
57
59
  }
58
60
  });
59
61
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/input.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet, TextInput } from \"react-native\";\n\nimport {\n AppTheme,\n ComponentSize,\n ComponentVariant,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlInputProps } from \"../../types\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlInput = memo(function ControlInput(\n props: ControlInputProps,\n) {\n const { onPress, style, ...rest } = props;\n\n const { size, variant, disabled, error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n disabled,\n error,\n },\n [size, variant, disabled, error],\n );\n\n const inputStyles = useMemo(\n () => [styles.input, style],\n [styles.input, style],\n );\n\n return (\n <TextInput\n {...rest}\n style={inputStyles}\n placeholderTextColor={styles.placeholder.color}\n editable={!disabled}\n />\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n {\n size,\n variant,\n disabled,\n error,\n }: {\n size: ComponentSize;\n variant: ComponentVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const variantTokens = controlInputTokens.variants[variant];\n\n const color = disabled\n ? variantTokens.disabledColor\n : error\n ? variantTokens.errorColor\n : variantTokens.color;\n\n const placeholderColor = disabled\n ? variantTokens.disabledPlaceholderColor\n : error\n ? variantTokens.errorPlaceholderColor\n : variantTokens.placeholderColor;\n\n return StyleSheet.create({\n input: {\n flex: controlInputTokens.flex,\n color,\n fontSize: sizeTokens.fontSize,\n fontFamily: controlInputTokens.fontFamily,\n paddingHorizontal: controlInputTokens.paddingHorizontal,\n height: \"100%\",\n },\n\n placeholder: {\n color: placeholderColor,\n },\n });\n}\n"],"mappings":"AAqCI;AArCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,YAAY,iBAAiB;AAEtC;AAAA,EAIE;AAAA,OACK;AAGP,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,SAAS,OAAO,GAAG,KAAK,IAAI;AAEpC,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAE7D,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,cAAc;AAAA,IAClB,MAAM,CAAC,OAAO,OAAO,KAAK;AAAA,IAC1B,CAAC,OAAO,OAAO,KAAK;AAAA,EACtB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,sBAAsB,OAAO,YAAY;AAAA,MACzC,UAAU,CAAC;AAAA;AAAA,EACb;AAEJ,CAAC;AAED,SAAS,aACP,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,gBAAgB,mBAAmB,SAAS,OAAO;AAEzD,QAAM,QAAQ,WACV,cAAc,gBACd,QACE,cAAc,aACd,cAAc;AAEpB,QAAM,mBAAmB,WACrB,cAAc,2BACd,QACE,cAAc,wBACd,cAAc;AAEpB,SAAO,WAAW,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,mBAAmB;AAAA,MACzB;AAAA,MACA,UAAU,WAAW;AAAA,MACrB,YAAY,mBAAmB;AAAA,MAC/B,mBAAmB,mBAAmB;AAAA,MACtC,QAAQ;AAAA,IACV;AAAA,IAEA,aAAa;AAAA,MACX,OAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;","names":["ControlInput"]}
1
+ {"version":3,"sources":["../../../src/components/controls/input.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet, TextInput } from \"react-native\";\n\nimport {\n AppTheme,\n ComponentSize,\n FieldVariant,\n getFieldStateTokens,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlInputProps } from \"../../types\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlInput = memo(function ControlInput(\n props: ControlInputProps,\n) {\n const { onPress, style, ...rest } = props;\n\n const { size, variant, disabled, error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n disabled,\n error,\n },\n [size, variant, disabled, error],\n );\n\n const inputStyles = useMemo(\n () => [styles.input, style],\n [styles.input, style],\n );\n\n return (\n <TextInput\n {...rest}\n style={inputStyles}\n placeholderTextColor={styles.placeholder.color}\n editable={!disabled}\n />\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n {\n size,\n variant,\n disabled,\n error,\n }: {\n size: ComponentSize;\n variant: FieldVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const appearanceTokens = getFieldStateTokens(\n controlInputTokens.variants[variant],\n { disabled, error: Boolean(error) },\n );\n\n return StyleSheet.create({\n input: {\n flex: controlInputTokens.flex,\n color: appearanceTokens.color,\n fontSize: sizeTokens.fontSize,\n fontFamily: controlInputTokens.fontFamily,\n paddingHorizontal: controlInputTokens.paddingHorizontal,\n height: \"100%\",\n },\n\n placeholder: {\n color: appearanceTokens.placeholderColor,\n },\n });\n}\n"],"mappings":"AAsCI;AAtCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,YAAY,iBAAiB;AAEtC;AAAA,EAIE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,SAAS,OAAO,GAAG,KAAK,IAAI;AAEpC,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAE7D,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,cAAc;AAAA,IAClB,MAAM,CAAC,OAAO,OAAO,KAAK;AAAA,IAC1B,CAAC,OAAO,OAAO,KAAK;AAAA,EACtB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,sBAAsB,OAAO,YAAY;AAAA,MACzC,UAAU,CAAC;AAAA;AAAA,EACb;AAEJ,CAAC;AAED,SAAS,aACP,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,mBAAmB;AAAA,IACvB,mBAAmB,SAAS,OAAO;AAAA,IACnC,EAAE,UAAU,OAAO,QAAQ,KAAK,EAAE;AAAA,EACpC;AAEA,SAAO,WAAW,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,mBAAmB;AAAA,MACzB,OAAO,iBAAiB;AAAA,MACxB,UAAU,WAAW;AAAA,MACrB,YAAY,mBAAmB;AAAA,MAC/B,mBAAmB,mBAAmB;AAAA,MACtC,QAAQ;AAAA,IACV;AAAA,IAEA,aAAa;AAAA,MACX,OAAO,iBAAiB;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;","names":["ControlInput"]}
@@ -1,7 +1,10 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { memo, useMemo } from "react";
3
3
  import { StyleSheet } from "react-native";
4
- import { useThemedStyles } from "@impulse-ui-native/theme";
4
+ import {
5
+ getFieldStateTokens,
6
+ useThemedStyles
7
+ } from "@impulse-ui-native/theme";
5
8
  import { Typography } from "../atoms";
6
9
  import { useControlContext } from "./provider";
7
10
  const ControlLabel = memo(function ControlLabel2(props) {
@@ -27,12 +30,15 @@ const ControlLabel = memo(function ControlLabel2(props) {
27
30
  function themedStyles(theme, props) {
28
31
  const { disabled, error } = props;
29
32
  const controlLabelTokens = theme.components.controlLabel;
30
- const color = disabled ? controlLabelTokens.disabledColor : error ? controlLabelTokens.errorColor : controlLabelTokens.color;
33
+ const appearanceTokens = getFieldStateTokens(controlLabelTokens.states, {
34
+ disabled,
35
+ error: Boolean(error)
36
+ });
31
37
  return StyleSheet.create({
32
38
  label: {
33
39
  marginBottom: controlLabelTokens.marginBottom,
34
40
  fontSize: controlLabelTokens.fontSize,
35
- color
41
+ color: appearanceTokens.color
36
42
  }
37
43
  });
38
44
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/label.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport { AppTheme, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport { ControlLabelProps } from \"../../types\";\nimport { Typography } from \"../atoms\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlLabel = memo(function ControlLabel(\n props: ControlLabelProps,\n) {\n const { children, disabled, style, ...rest } = props;\n\n const { error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n disabled,\n error,\n },\n [disabled, error],\n );\n\n const labelStyle = useMemo(\n () => [styles.label, style],\n [styles.label, style],\n );\n\n if (!children) {\n return null;\n }\n\n return (\n <Typography.Label {...rest} style={labelStyle}>\n {children}\n </Typography.Label>\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n props: {\n disabled?: boolean;\n error?: string;\n },\n) {\n const { disabled, error } = props;\n\n const controlLabelTokens = theme.components.controlLabel;\n\n const color = disabled\n ? controlLabelTokens.disabledColor\n : error\n ? controlLabelTokens.errorColor\n : controlLabelTokens.color;\n\n return StyleSheet.create({\n label: {\n marginBottom: controlLabelTokens.marginBottom,\n fontSize: controlLabelTokens.fontSize,\n color,\n },\n });\n}\n"],"mappings":"AAmCI;AAnCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B,SAAmB,uBAAuB;AAG1C,SAAS,kBAAkB;AAC3B,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,UAAU,UAAU,OAAO,GAAG,KAAK,IAAI;AAE/C,QAAM,EAAE,MAAM,IAAI,kBAAkB;AAEpC,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,UAAU,KAAK;AAAA,EAClB;AAEA,QAAM,aAAa;AAAA,IACjB,MAAM,CAAC,OAAO,OAAO,KAAK;AAAA,IAC1B,CAAC,OAAO,OAAO,KAAK;AAAA,EACtB;AAEA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,WAAW,OAAX,EAAkB,GAAG,MAAM,OAAO,YAChC,UACH;AAEJ,CAAC;AAED,SAAS,aACP,OACA,OAIA;AACA,QAAM,EAAE,UAAU,MAAM,IAAI;AAE5B,QAAM,qBAAqB,MAAM,WAAW;AAE5C,QAAM,QAAQ,WACV,mBAAmB,gBACnB,QACE,mBAAmB,aACnB,mBAAmB;AAEzB,SAAO,WAAW,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,cAAc,mBAAmB;AAAA,MACjC,UAAU,mBAAmB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":["ControlLabel"]}
1
+ {"version":3,"sources":["../../../src/components/controls/label.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport {\n AppTheme,\n getFieldStateTokens,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlLabelProps } from \"../../types\";\nimport { Typography } from \"../atoms\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlLabel = memo(function ControlLabel(\n props: ControlLabelProps,\n) {\n const { children, disabled, style, ...rest } = props;\n\n const { error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n disabled,\n error,\n },\n [disabled, error],\n );\n\n const labelStyle = useMemo(\n () => [styles.label, style],\n [styles.label, style],\n );\n\n if (!children) {\n return null;\n }\n\n return (\n <Typography.Label {...rest} style={labelStyle}>\n {children}\n </Typography.Label>\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n props: {\n disabled?: boolean;\n error?: string;\n },\n) {\n const { disabled, error } = props;\n\n const controlLabelTokens = theme.components.controlLabel;\n const appearanceTokens = getFieldStateTokens(controlLabelTokens.states, {\n disabled,\n error: Boolean(error),\n });\n\n return StyleSheet.create({\n label: {\n marginBottom: controlLabelTokens.marginBottom,\n fontSize: controlLabelTokens.fontSize,\n color: appearanceTokens.color,\n },\n });\n}\n"],"mappings":"AAuCI;AAvCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,kBAAkB;AAC3B,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,UAAU,UAAU,OAAO,GAAG,KAAK,IAAI;AAE/C,QAAM,EAAE,MAAM,IAAI,kBAAkB;AAEpC,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,UAAU,KAAK;AAAA,EAClB;AAEA,QAAM,aAAa;AAAA,IACjB,MAAM,CAAC,OAAO,OAAO,KAAK;AAAA,IAC1B,CAAC,OAAO,OAAO,KAAK;AAAA,EACtB;AAEA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,WAAW,OAAX,EAAkB,GAAG,MAAM,OAAO,YAChC,UACH;AAEJ,CAAC;AAED,SAAS,aACP,OACA,OAIA;AACA,QAAM,EAAE,UAAU,MAAM,IAAI;AAE5B,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,mBAAmB,oBAAoB,mBAAmB,QAAQ;AAAA,IACtE;AAAA,IACA,OAAO,QAAQ,KAAK;AAAA,EACtB,CAAC;AAED,SAAO,WAAW,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,cAAc,mBAAmB;AAAA,MACjC,UAAU,mBAAmB;AAAA,MAC7B,OAAO,iBAAiB;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;","names":["ControlLabel"]}
@@ -2,6 +2,7 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { memo, useMemo } from "react";
3
3
  import { StyleSheet } from "react-native";
4
4
  import {
5
+ getFieldStateTokens,
5
6
  useThemedStyles
6
7
  } from "@impulse-ui-native/theme";
7
8
  import { Typography } from "../atoms";
@@ -33,12 +34,14 @@ function themedStyles(theme, {
33
34
  }) {
34
35
  const controlInputTokens = theme.components.controlInput;
35
36
  const sizeTokens = controlInputTokens.sizes[size];
36
- const variantTokens = controlInputTokens.variants[variant];
37
- const color = disabled ? variantTokens.disabledPlaceholderColor : error ? variantTokens.errorPlaceholderColor : variantTokens.placeholderColor;
37
+ const appearanceTokens = getFieldStateTokens(
38
+ controlInputTokens.variants[variant],
39
+ { disabled, error: Boolean(error) }
40
+ );
38
41
  return StyleSheet.create({
39
42
  placeholder: {
40
43
  flex: controlInputTokens.flex,
41
- color,
44
+ color: appearanceTokens.placeholderColor,
42
45
  fontFamily: controlInputTokens.fontFamily,
43
46
  fontSize: sizeTokens.fontSize,
44
47
  paddingHorizontal: controlInputTokens.paddingHorizontal
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/placeholder.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport {\n AppTheme,\n ComponentSize,\n ComponentVariant,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlPlaceholderProps } from \"../../types\";\nimport { Typography } from \"../atoms\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlPlaceholder = memo(function ControlPlaceholder(\n props: ControlPlaceholderProps,\n) {\n const { style, ...rest } = props;\n\n const { size, variant, disabled, error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n disabled,\n error,\n },\n [size, variant, disabled, error],\n );\n\n const placeholderStyle = useMemo(\n () => [styles.placeholder, style],\n [styles.placeholder, style],\n );\n\n return (\n <Typography.Master numberOfLines={1} {...rest} style={placeholderStyle} />\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n {\n size,\n variant,\n disabled,\n error,\n }: {\n size: ComponentSize;\n variant: ComponentVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const variantTokens = controlInputTokens.variants[variant];\n\n const color = disabled\n ? variantTokens.disabledPlaceholderColor\n : error\n ? variantTokens.errorPlaceholderColor\n : variantTokens.placeholderColor;\n\n return StyleSheet.create({\n placeholder: {\n flex: controlInputTokens.flex,\n color,\n fontFamily: controlInputTokens.fontFamily,\n fontSize: sizeTokens.fontSize,\n paddingHorizontal: controlInputTokens.paddingHorizontal,\n },\n });\n}\n"],"mappings":"AAsCI;AAtCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B;AAAA,EAIE;AAAA,OACK;AAGP,SAAS,kBAAkB;AAC3B,SAAS,yBAAyB;AAE3B,MAAM,qBAAqB,KAAK,SAASA,oBAC9C,OACA;AACA,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAE3B,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAE7D,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,mBAAmB;AAAA,IACvB,MAAM,CAAC,OAAO,aAAa,KAAK;AAAA,IAChC,CAAC,OAAO,aAAa,KAAK;AAAA,EAC5B;AAEA,SACE,oBAAC,WAAW,QAAX,EAAkB,eAAe,GAAI,GAAG,MAAM,OAAO,kBAAkB;AAE5E,CAAC;AAED,SAAS,aACP,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,gBAAgB,mBAAmB,SAAS,OAAO;AAEzD,QAAM,QAAQ,WACV,cAAc,2BACd,QACE,cAAc,wBACd,cAAc;AAEpB,SAAO,WAAW,OAAO;AAAA,IACvB,aAAa;AAAA,MACX,MAAM,mBAAmB;AAAA,MACzB;AAAA,MACA,YAAY,mBAAmB;AAAA,MAC/B,UAAU,WAAW;AAAA,MACrB,mBAAmB,mBAAmB;AAAA,IACxC;AAAA,EACF,CAAC;AACH;","names":["ControlPlaceholder"]}
1
+ {"version":3,"sources":["../../../src/components/controls/placeholder.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport {\n AppTheme,\n ComponentSize,\n FieldVariant,\n getFieldStateTokens,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlPlaceholderProps } from \"../../types\";\nimport { Typography } from \"../atoms\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlPlaceholder = memo(function ControlPlaceholder(\n props: ControlPlaceholderProps,\n) {\n const { style, ...rest } = props;\n\n const { size, variant, disabled, error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n disabled,\n error,\n },\n [size, variant, disabled, error],\n );\n\n const placeholderStyle = useMemo(\n () => [styles.placeholder, style],\n [styles.placeholder, style],\n );\n\n return (\n <Typography.Master numberOfLines={1} {...rest} style={placeholderStyle} />\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n {\n size,\n variant,\n disabled,\n error,\n }: {\n size: ComponentSize;\n variant: FieldVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const appearanceTokens = getFieldStateTokens(\n controlInputTokens.variants[variant],\n { disabled, error: Boolean(error) },\n );\n\n return StyleSheet.create({\n placeholder: {\n flex: controlInputTokens.flex,\n color: appearanceTokens.placeholderColor,\n fontFamily: controlInputTokens.fontFamily,\n fontSize: sizeTokens.fontSize,\n paddingHorizontal: controlInputTokens.paddingHorizontal,\n },\n });\n}\n"],"mappings":"AAuCI;AAvCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B;AAAA,EAIE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,kBAAkB;AAC3B,SAAS,yBAAyB;AAE3B,MAAM,qBAAqB,KAAK,SAASA,oBAC9C,OACA;AACA,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAE3B,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAE7D,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,mBAAmB;AAAA,IACvB,MAAM,CAAC,OAAO,aAAa,KAAK;AAAA,IAChC,CAAC,OAAO,aAAa,KAAK;AAAA,EAC5B;AAEA,SACE,oBAAC,WAAW,QAAX,EAAkB,eAAe,GAAI,GAAG,MAAM,OAAO,kBAAkB;AAE5E,CAAC;AAED,SAAS,aACP,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,mBAAmB;AAAA,IACvB,mBAAmB,SAAS,OAAO;AAAA,IACnC,EAAE,UAAU,OAAO,QAAQ,KAAK,EAAE;AAAA,EACpC;AAEA,SAAO,WAAW,OAAO;AAAA,IACvB,aAAa;AAAA,MACX,MAAM,mBAAmB;AAAA,MACzB,OAAO,iBAAiB;AAAA,MACxB,YAAY,mBAAmB;AAAA,MAC/B,UAAU,WAAW;AAAA,MACrB,mBAAmB,mBAAmB;AAAA,IACxC;AAAA,EACF,CAAC;AACH;","names":["ControlPlaceholder"]}
@@ -2,6 +2,7 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { memo, useMemo } from "react";
3
3
  import { StyleSheet } from "react-native";
4
4
  import {
5
+ getFieldStateTokens,
5
6
  useThemedStyles
6
7
  } from "@impulse-ui-native/theme";
7
8
  import { Typography } from "../atoms";
@@ -28,12 +29,14 @@ function themedStyles(theme, {
28
29
  }) {
29
30
  const controlInputTokens = theme.components.controlInput;
30
31
  const sizeTokens = controlInputTokens.sizes[size];
31
- const variantTokens = controlInputTokens.variants[variant];
32
- const color = disabled ? variantTokens.disabledColor : error ? variantTokens.errorColor : variantTokens.color;
32
+ const appearanceTokens = getFieldStateTokens(
33
+ controlInputTokens.variants[variant],
34
+ { disabled, error: Boolean(error) }
35
+ );
33
36
  return StyleSheet.create({
34
37
  value: {
35
38
  flex: controlInputTokens.flex,
36
- color,
39
+ color: appearanceTokens.color,
37
40
  fontFamily: controlInputTokens.fontFamily,
38
41
  fontSize: sizeTokens.fontSize,
39
42
  paddingHorizontal: controlInputTokens.paddingHorizontal
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/value.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport {\n AppTheme,\n ComponentSize,\n ComponentVariant,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlValueProps } from \"../../types\";\nimport { Typography } from \"../atoms\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlValue = memo(function ControlValue(\n props: ControlValueProps,\n) {\n const { style, ...rest } = props;\n\n const { size, variant, disabled, error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n { size, variant, disabled, error },\n [size, variant, disabled, error],\n );\n\n const valueStyle = useMemo(\n () => [styles.value, style],\n [styles.value, style],\n );\n\n return <Typography.Master numberOfLines={1} {...rest} style={valueStyle} />;\n});\n\nfunction themedStyles(\n theme: AppTheme,\n {\n size,\n variant,\n disabled,\n error,\n }: {\n size: ComponentSize;\n variant: ComponentVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const variantTokens = controlInputTokens.variants[variant];\n\n const color = disabled\n ? variantTokens.disabledColor\n : error\n ? variantTokens.errorColor\n : variantTokens.color;\n\n return StyleSheet.create({\n value: {\n flex: controlInputTokens.flex,\n color,\n fontFamily: controlInputTokens.fontFamily,\n fontSize: sizeTokens.fontSize,\n paddingHorizontal: controlInputTokens.paddingHorizontal,\n },\n });\n}\n"],"mappings":"AAgCS;AAhCT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B;AAAA,EAIE;AAAA,OACK;AAGP,SAAS,kBAAkB;AAC3B,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAE3B,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAE7D,QAAM,SAAS;AAAA,IACb;AAAA,IACA,EAAE,MAAM,SAAS,UAAU,MAAM;AAAA,IACjC,CAAC,MAAM,SAAS,UAAU,KAAK;AAAA,EACjC;AAEA,QAAM,aAAa;AAAA,IACjB,MAAM,CAAC,OAAO,OAAO,KAAK;AAAA,IAC1B,CAAC,OAAO,OAAO,KAAK;AAAA,EACtB;AAEA,SAAO,oBAAC,WAAW,QAAX,EAAkB,eAAe,GAAI,GAAG,MAAM,OAAO,YAAY;AAC3E,CAAC;AAED,SAAS,aACP,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,gBAAgB,mBAAmB,SAAS,OAAO;AAEzD,QAAM,QAAQ,WACV,cAAc,gBACd,QACE,cAAc,aACd,cAAc;AAEpB,SAAO,WAAW,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,mBAAmB;AAAA,MACzB;AAAA,MACA,YAAY,mBAAmB;AAAA,MAC/B,UAAU,WAAW;AAAA,MACrB,mBAAmB,mBAAmB;AAAA,IACxC;AAAA,EACF,CAAC;AACH;","names":["ControlValue"]}
1
+ {"version":3,"sources":["../../../src/components/controls/value.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport {\n AppTheme,\n ComponentSize,\n FieldVariant,\n getFieldStateTokens,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport { ControlValueProps } from \"../../types\";\nimport { Typography } from \"../atoms\";\nimport { useControlContext } from \"./provider\";\n\nexport const ControlValue = memo(function ControlValue(\n props: ControlValueProps,\n) {\n const { style, ...rest } = props;\n\n const { size, variant, disabled, error } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n { size, variant, disabled, error },\n [size, variant, disabled, error],\n );\n\n const valueStyle = useMemo(\n () => [styles.value, style],\n [styles.value, style],\n );\n\n return <Typography.Master numberOfLines={1} {...rest} style={valueStyle} />;\n});\n\nfunction themedStyles(\n theme: AppTheme,\n {\n size,\n variant,\n disabled,\n error,\n }: {\n size: ComponentSize;\n variant: FieldVariant;\n disabled?: boolean;\n error?: string;\n },\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const appearanceTokens = getFieldStateTokens(\n controlInputTokens.variants[variant],\n { disabled, error: Boolean(error) },\n );\n\n return StyleSheet.create({\n value: {\n flex: controlInputTokens.flex,\n color: appearanceTokens.color,\n fontFamily: controlInputTokens.fontFamily,\n fontSize: sizeTokens.fontSize,\n paddingHorizontal: controlInputTokens.paddingHorizontal,\n },\n });\n}\n"],"mappings":"AAiCS;AAjCT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAE3B;AAAA,EAIE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,kBAAkB;AAC3B,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAE3B,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAE7D,QAAM,SAAS;AAAA,IACb;AAAA,IACA,EAAE,MAAM,SAAS,UAAU,MAAM;AAAA,IACjC,CAAC,MAAM,SAAS,UAAU,KAAK;AAAA,EACjC;AAEA,QAAM,aAAa;AAAA,IACjB,MAAM,CAAC,OAAO,OAAO,KAAK;AAAA,IAC1B,CAAC,OAAO,OAAO,KAAK;AAAA,EACtB;AAEA,SAAO,oBAAC,WAAW,QAAX,EAAkB,eAAe,GAAI,GAAG,MAAM,OAAO,YAAY;AAC3E,CAAC;AAED,SAAS,aACP,OACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMA;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,mBAAmB;AAAA,IACvB,mBAAmB,SAAS,OAAO;AAAA,IACnC,EAAE,UAAU,OAAO,QAAQ,KAAK,EAAE;AAAA,EACpC;AAEA,SAAO,WAAW,OAAO;AAAA,IACvB,OAAO;AAAA,MACL,MAAM,mBAAmB;AAAA,MACzB,OAAO,iBAAiB;AAAA,MACxB,YAAY,mBAAmB;AAAA,MAC/B,UAAU,WAAW;AAAA,MACrB,mBAAmB,mBAAmB;AAAA,IACxC;AAAA,EACF,CAAC;AACH;","names":["ControlValue"]}
@@ -13,6 +13,7 @@ export { Tag } from './atoms/tag.mjs';
13
13
  export { Card } from './card/card.mjs';
14
14
  export { Control } from './controls/control.mjs';
15
15
  export { useControlContext } from './controls/provider.mjs';
16
+ export { List } from './list/list.mjs';
16
17
  import 'react';
17
18
  import 'react/jsx-runtime';
18
19
  import '../types/avatar.types.mjs';
@@ -32,3 +33,4 @@ import '../types/icon-button.types.mjs';
32
33
  import '../types/progress.types.mjs';
33
34
  import '../types/tag.types.mjs';
34
35
  import '../types/card.types.mjs';
36
+ import '../types/list.types.mjs';
@@ -1,4 +1,5 @@
1
1
  export * from "./atoms";
2
2
  export * from "./card";
3
3
  export * from "./controls";
4
+ export * from "./list";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/index.ts"],"sourcesContent":["export * from \"./atoms\";\nexport * from \"./card\";\nexport * from \"./controls\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../src/components/index.ts"],"sourcesContent":["export * from \"./atoms\";\nexport * from \"./card\";\nexport * from \"./controls\";\n\nexport * from \"./list\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AAEd,cAAc;","names":[]}
@@ -0,0 +1,11 @@
1
+ import * as react from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { ListContentProps } from '../../types/list.types.mjs';
4
+ import '../../types/button.types.mjs';
5
+ import 'react-native';
6
+ import '@impulse-ui-native/theme';
7
+ import '../../types/view.types.mjs';
8
+
9
+ declare const ListContent: react.MemoExoticComponent<({ style, ...props }: ListContentProps) => react_jsx_runtime.JSX.Element>;
10
+
11
+ export { ListContent };
@@ -0,0 +1,27 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { memo, useMemo } from "react";
3
+ import { StyleSheet } from "react-native";
4
+ import { useStyleProps, useThemedStyles } from "@impulse-ui-native/theme";
5
+ import { View } from "../atoms/view";
6
+ const ListContent = memo(function ListContent2({
7
+ style,
8
+ ...props
9
+ }) {
10
+ const extractedStyleProps = useStyleProps(props);
11
+ const styles = useThemedStyles(themedStyles);
12
+ const composedStyle = useMemo(
13
+ () => [styles.part, extractedStyleProps, style],
14
+ [styles.part, extractedStyleProps, style]
15
+ );
16
+ return /* @__PURE__ */ jsx(View, { ...props, style: composedStyle });
17
+ });
18
+ function themedStyles(theme) {
19
+ const tokens = theme.components.list;
20
+ return StyleSheet.create({
21
+ part: { flex: 1, minWidth: 0, gap: tokens.content.gap }
22
+ });
23
+ }
24
+ export {
25
+ ListContent
26
+ };
27
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/list/content.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { useStyleProps, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ListContentProps } from \"../../types\";\nimport { View } from \"../atoms/view\";\n\nexport const ListContent = memo(function ListContent({\n style,\n ...props\n}: ListContentProps) {\n const extractedStyleProps = useStyleProps(props);\n const styles = useThemedStyles(themedStyles);\n const composedStyle = useMemo(\n () => [styles.part, extractedStyleProps, style],\n [styles.part, extractedStyleProps, style],\n );\n return <View {...props} style={composedStyle} />;\n});\nfunction themedStyles(theme: AppTheme) {\n const tokens = theme.components.list;\n return StyleSheet.create({\n part: { flex: 1, minWidth: 0, gap: tokens.content.gap },\n });\n}\n"],"mappings":"AAmBS;AAnBT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,eAAe,uBAAuB;AAG/C,SAAS,YAAY;AAEd,MAAM,cAAc,KAAK,SAASA,aAAY;AAAA,EACnD;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,sBAAsB,cAAc,KAAK;AAC/C,QAAM,SAAS,gBAAgB,YAAY;AAC3C,QAAM,gBAAgB;AAAA,IACpB,MAAM,CAAC,OAAO,MAAM,qBAAqB,KAAK;AAAA,IAC9C,CAAC,OAAO,MAAM,qBAAqB,KAAK;AAAA,EAC1C;AACA,SAAO,oBAAC,QAAM,GAAG,OAAO,OAAO,eAAe;AAChD,CAAC;AACD,SAAS,aAAa,OAAiB;AACrC,QAAM,SAAS,MAAM,WAAW;AAChC,SAAO,WAAW,OAAO;AAAA,IACvB,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,OAAO,QAAQ,IAAI;AAAA,EACxD,CAAC;AACH;","names":["ListContent"]}
@@ -0,0 +1,8 @@
1
+ export { List } from './list.mjs';
2
+ import 'react';
3
+ import 'react/jsx-runtime';
4
+ import '../../types/list.types.mjs';
5
+ import '../../types/button.types.mjs';
6
+ import 'react-native';
7
+ import '@impulse-ui-native/theme';
8
+ import '../../types/view.types.mjs';
@@ -0,0 +1,5 @@
1
+ import { List } from "./list";
2
+ export {
3
+ List
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/list/index.ts"],"sourcesContent":["export { List } from \"./list\";\n"],"mappings":"AAAA,SAAS,YAAY;","names":[]}
@@ -0,0 +1,11 @@
1
+ import * as react from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { ListItemProps } from '../../types/list.types.mjs';
4
+ import '../../types/button.types.mjs';
5
+ import 'react-native';
6
+ import '@impulse-ui-native/theme';
7
+ import '../../types/view.types.mjs';
8
+
9
+ declare const ListItem: react.MemoExoticComponent<({ style, ...props }: ListItemProps) => react_jsx_runtime.JSX.Element>;
10
+
11
+ export { ListItem };
@@ -0,0 +1,32 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { memo, useMemo } from "react";
3
+ import { StyleSheet } from "react-native";
4
+ import { useStyleProps, useThemedStyles } from "@impulse-ui-native/theme";
5
+ import { View } from "../atoms/view";
6
+ const ListItem = memo(function ListItem2({
7
+ style,
8
+ ...props
9
+ }) {
10
+ const extractedStyleProps = useStyleProps(props);
11
+ const styles = useThemedStyles(themedStyles);
12
+ const composedStyle = useMemo(
13
+ () => [styles.part, extractedStyleProps, style],
14
+ [styles.part, extractedStyleProps, style]
15
+ );
16
+ return /* @__PURE__ */ jsx(View, { ...props, style: composedStyle });
17
+ });
18
+ function themedStyles(theme) {
19
+ const tokens = theme.components.list;
20
+ return StyleSheet.create({
21
+ part: {
22
+ flexDirection: "row",
23
+ alignItems: "center",
24
+ gap: tokens.item.gap,
25
+ padding: tokens.item.padding
26
+ }
27
+ });
28
+ }
29
+ export {
30
+ ListItem
31
+ };
32
+ //# sourceMappingURL=item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/list/item.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { useStyleProps, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ListItemProps } from \"../../types\";\nimport { View } from \"../atoms/view\";\n\nexport const ListItem = memo(function ListItem({\n style,\n ...props\n}: ListItemProps) {\n const extractedStyleProps = useStyleProps(props);\n const styles = useThemedStyles(themedStyles);\n const composedStyle = useMemo(\n () => [styles.part, extractedStyleProps, style],\n [styles.part, extractedStyleProps, style],\n );\n return <View {...props} style={composedStyle} />;\n});\nfunction themedStyles(theme: AppTheme) {\n const tokens = theme.components.list;\n return StyleSheet.create({\n part: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: tokens.item.gap,\n padding: tokens.item.padding,\n },\n });\n}\n"],"mappings":"AAmBS;AAnBT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,eAAe,uBAAuB;AAG/C,SAAS,YAAY;AAEd,MAAM,WAAW,KAAK,SAASA,UAAS;AAAA,EAC7C;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,QAAM,sBAAsB,cAAc,KAAK;AAC/C,QAAM,SAAS,gBAAgB,YAAY;AAC3C,QAAM,gBAAgB;AAAA,IACpB,MAAM,CAAC,OAAO,MAAM,qBAAqB,KAAK;AAAA,IAC9C,CAAC,OAAO,MAAM,qBAAqB,KAAK;AAAA,EAC1C;AACA,SAAO,oBAAC,QAAM,GAAG,OAAO,OAAO,eAAe;AAChD,CAAC;AACD,SAAS,aAAa,OAAiB;AACrC,QAAM,SAAS,MAAM,WAAW;AAChC,SAAO,WAAW,OAAO;AAAA,IACvB,MAAM;AAAA,MACJ,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,KAAK,OAAO,KAAK;AAAA,MACjB,SAAS,OAAO,KAAK;AAAA,IACvB;AAAA,EACF,CAAC;AACH;","names":["ListItem"]}
@@ -0,0 +1,11 @@
1
+ import * as react from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { ListLeadingProps } from '../../types/list.types.mjs';
4
+ import '../../types/button.types.mjs';
5
+ import 'react-native';
6
+ import '@impulse-ui-native/theme';
7
+ import '../../types/view.types.mjs';
8
+
9
+ declare const ListLeading: react.MemoExoticComponent<({ style, ...props }: ListLeadingProps) => react_jsx_runtime.JSX.Element>;
10
+
11
+ export { ListLeading };
@@ -0,0 +1,32 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { memo, useMemo } from "react";
3
+ import { StyleSheet } from "react-native";
4
+ import { useStyleProps, useThemedStyles } from "@impulse-ui-native/theme";
5
+ import { View } from "../atoms/view";
6
+ const ListLeading = memo(function ListLeading2({
7
+ style,
8
+ ...props
9
+ }) {
10
+ const extractedStyleProps = useStyleProps(props);
11
+ const styles = useThemedStyles(themedStyles);
12
+ const composedStyle = useMemo(
13
+ () => [styles.part, extractedStyleProps, style],
14
+ [styles.part, extractedStyleProps, style]
15
+ );
16
+ return /* @__PURE__ */ jsx(View, { ...props, style: composedStyle });
17
+ });
18
+ function themedStyles(theme) {
19
+ const tokens = theme.components.list;
20
+ return StyleSheet.create({
21
+ part: {
22
+ gap: tokens.item.gap,
23
+ flexShrink: 0,
24
+ alignItems: "center",
25
+ justifyContent: "center"
26
+ }
27
+ });
28
+ }
29
+ export {
30
+ ListLeading
31
+ };
32
+ //# sourceMappingURL=leading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/list/leading.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { useStyleProps, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ListLeadingProps } from \"../../types\";\nimport { View } from \"../atoms/view\";\n\nexport const ListLeading = memo(function ListLeading({\n style,\n ...props\n}: ListLeadingProps) {\n const extractedStyleProps = useStyleProps(props);\n const styles = useThemedStyles(themedStyles);\n const composedStyle = useMemo(\n () => [styles.part, extractedStyleProps, style],\n [styles.part, extractedStyleProps, style],\n );\n return <View {...props} style={composedStyle} />;\n});\nfunction themedStyles(theme: AppTheme) {\n const tokens = theme.components.list;\n return StyleSheet.create({\n part: {\n gap: tokens.item.gap,\n flexShrink: 0,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n });\n}\n"],"mappings":"AAmBS;AAnBT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,eAAe,uBAAuB;AAG/C,SAAS,YAAY;AAEd,MAAM,cAAc,KAAK,SAASA,aAAY;AAAA,EACnD;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,sBAAsB,cAAc,KAAK;AAC/C,QAAM,SAAS,gBAAgB,YAAY;AAC3C,QAAM,gBAAgB;AAAA,IACpB,MAAM,CAAC,OAAO,MAAM,qBAAqB,KAAK;AAAA,IAC9C,CAAC,OAAO,MAAM,qBAAqB,KAAK;AAAA,EAC1C;AACA,SAAO,oBAAC,QAAM,GAAG,OAAO,OAAO,eAAe;AAChD,CAAC;AACD,SAAS,aAAa,OAAiB;AACrC,QAAM,SAAS,MAAM,WAAW;AAChC,SAAO,WAAW,OAAO;AAAA,IACvB,MAAM;AAAA,MACJ,KAAK,OAAO,KAAK;AAAA,MACjB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB;AAAA,EACF,CAAC;AACH;","names":["ListLeading"]}
@@ -0,0 +1,18 @@
1
+ import * as react from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { ListRootProps, ListItemProps, ListPressableProps, ListLeadingProps, ListContentProps, ListTrailingProps } from '../../types/list.types.mjs';
4
+ import '../../types/button.types.mjs';
5
+ import 'react-native';
6
+ import '@impulse-ui-native/theme';
7
+ import '../../types/view.types.mjs';
8
+
9
+ declare const List: {
10
+ Root: react.MemoExoticComponent<({ style, ...props }: ListRootProps) => react_jsx_runtime.JSX.Element>;
11
+ Item: react.MemoExoticComponent<({ style, ...props }: ListItemProps) => react_jsx_runtime.JSX.Element>;
12
+ Pressable: react.MemoExoticComponent<({ disabled, style, ...props }: ListPressableProps) => react_jsx_runtime.JSX.Element>;
13
+ Leading: react.MemoExoticComponent<({ style, ...props }: ListLeadingProps) => react_jsx_runtime.JSX.Element>;
14
+ Content: react.MemoExoticComponent<({ style, ...props }: ListContentProps) => react_jsx_runtime.JSX.Element>;
15
+ Trailing: react.MemoExoticComponent<({ style, ...props }: ListTrailingProps) => react_jsx_runtime.JSX.Element>;
16
+ };
17
+
18
+ export { List };
@@ -0,0 +1,18 @@
1
+ import { ListContent } from "./content";
2
+ import { ListItem } from "./item";
3
+ import { ListLeading } from "./leading";
4
+ import { ListPressable } from "./pressable";
5
+ import { ListRoot } from "./root";
6
+ import { ListTrailing } from "./trailing";
7
+ const List = {
8
+ Root: ListRoot,
9
+ Item: ListItem,
10
+ Pressable: ListPressable,
11
+ Leading: ListLeading,
12
+ Content: ListContent,
13
+ Trailing: ListTrailing
14
+ };
15
+ export {
16
+ List
17
+ };
18
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/list/list.tsx"],"sourcesContent":["import { ListContent } from \"./content\";\nimport { ListItem } from \"./item\";\nimport { ListLeading } from \"./leading\";\nimport { ListPressable } from \"./pressable\";\nimport { ListRoot } from \"./root\";\nimport { ListTrailing } from \"./trailing\";\n\nexport const List = {\n Root: ListRoot,\n Item: ListItem,\n Pressable: ListPressable,\n Leading: ListLeading,\n Content: ListContent,\n Trailing: ListTrailing,\n};\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAEtB,MAAM,OAAO;AAAA,EAClB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AACZ;","names":[]}
@@ -0,0 +1,11 @@
1
+ import * as react from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { ListPressableProps } from '../../types/list.types.mjs';
4
+ import '../../types/button.types.mjs';
5
+ import 'react-native';
6
+ import '@impulse-ui-native/theme';
7
+ import '../../types/view.types.mjs';
8
+
9
+ declare const ListPressable: react.MemoExoticComponent<({ disabled, style, ...props }: ListPressableProps) => react_jsx_runtime.JSX.Element>;
10
+
11
+ export { ListPressable };