@impulse-ui-native/primitives 11.4.0 → 12.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 (31) hide show
  1. package/README.md +21 -1
  2. package/dist/components/controls/container.js +9 -3
  3. package/dist/components/controls/container.js.map +1 -1
  4. package/dist/components/controls/container.styles.d.mts +1 -1
  5. package/dist/components/controls/container.styles.js +2 -2
  6. package/dist/components/controls/container.styles.js.map +1 -1
  7. package/dist/components/controls/control.d.mts +3 -3
  8. package/dist/components/controls/field.d.mts +1 -1
  9. package/dist/components/controls/field.js +2 -0
  10. package/dist/components/controls/field.js.map +1 -1
  11. package/dist/components/controls/icon.js +2 -2
  12. package/dist/components/controls/icon.js.map +1 -1
  13. package/dist/components/controls/input.js +13 -6
  14. package/dist/components/controls/input.js.map +1 -1
  15. package/dist/components/controls/label.js +3 -2
  16. package/dist/components/controls/label.js.map +1 -1
  17. package/dist/components/controls/loader.js +12 -1
  18. package/dist/components/controls/loader.js.map +1 -1
  19. package/dist/components/controls/placeholder.js +11 -4
  20. package/dist/components/controls/placeholder.js.map +1 -1
  21. package/dist/components/controls/provider.d.mts +2 -2
  22. package/dist/components/controls/provider.js +9 -3
  23. package/dist/components/controls/provider.js.map +1 -1
  24. package/dist/components/controls/trigger.js +9 -3
  25. package/dist/components/controls/trigger.js.map +1 -1
  26. package/dist/components/controls/value.js +11 -5
  27. package/dist/components/controls/value.js.map +1 -1
  28. package/dist/contexts/control.context.d.mts +2 -2
  29. package/dist/types/control-components.types.d.mts +5 -2
  30. package/dist/types/control-theme.types.d.mts +2 -1
  31. package/package.json +4 -4
package/README.md CHANGED
@@ -176,7 +176,27 @@ spacing, dimension, and shadow props. Native `style` objects or callbacks overri
176
176
  direct style props; `pressedStyle` applies last while pressed.
177
177
 
178
178
  ```tsx
179
- <Pressable flex={1} flexDirection="row" alignItems="center" gap={8} padding={16}>
179
+ <Pressable
180
+ flex={1}
181
+ flexDirection="row"
182
+ alignItems="center"
183
+ gap={8}
184
+ padding={16}
185
+ >
180
186
  <Typography.Master>Continue</Typography.Master>
181
187
  </Pressable>
182
188
  ```
189
+
190
+ ## Field appearance
191
+
192
+ Rectangular fields support `variant="outlined" | "soft" | "filled"` and
193
+ `tone="neutral" | "primary" | "secondary"`. The default is `outlined` / `neutral`.
194
+ Outlined uses a transparent surface with a tone border; soft uses a subtle tone
195
+ surface; filled uses the tone fill with its paired foreground. Colors come from
196
+ the active theme in both schemes. Error styling overrides the selected tone;
197
+ disabled fields use neutral styling and block interaction.
198
+
199
+ Customize `components.controlContainer.colors[tone][variant][state]`,
200
+ `controlInput.colors[tone][variant][state]`, and
201
+ `controlAddon.colors[tone][variant][state]` together. These tone-aware maps replace
202
+ the previous `variants[variant][state]` maps.
@@ -8,11 +8,17 @@ const ControlContainer = memo(function ControlContainer2({
8
8
  style,
9
9
  ...props
10
10
  }) {
11
- const { size, variant, disabled, error } = useControlContext();
11
+ const {
12
+ size,
13
+ variant,
14
+ tone = "neutral",
15
+ disabled,
16
+ error
17
+ } = useControlContext();
12
18
  const styles = useThemedStyles(
13
19
  controlContainerStyles,
14
- { size, variant, disabled, error },
15
- [size, variant, disabled, error]
20
+ { size, variant, tone, disabled, error },
21
+ [size, variant, tone, disabled, error]
16
22
  );
17
23
  const containerStyle = useMemo(
18
24
  () => [styles.inputContainer, style],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/container.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\n\nimport { useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlContainerProps } from \"../../types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { View } from \"../atoms/view\";\nimport { controlContainerStyles } from \"./container.styles\";\n\nexport const ControlContainer = memo(function ControlContainer({\n style,\n ...props\n}: ControlContainerProps) {\n const { size, variant, disabled, error } = useControlContext();\n const styles = useThemedStyles(\n controlContainerStyles,\n { size, variant, disabled, error },\n [size, variant, disabled, error],\n );\n const containerStyle = useMemo(\n () => [styles.inputContainer, style],\n [styles.inputContainer, style],\n );\n\n return <View {...props} style={containerStyle} />;\n});\n"],"mappings":"AAwBS;AAxBT,SAAS,MAAM,eAAe;AAE9B,SAAS,uBAAuB;AAGhC,SAAS,yBAAyB;AAClC,SAAS,YAAY;AACrB,SAAS,8BAA8B;AAEhC,MAAM,mBAAmB,KAAK,SAASA,kBAAiB;AAAA,EAC7D;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAC7D,QAAM,SAAS;AAAA,IACb;AAAA,IACA,EAAE,MAAM,SAAS,UAAU,MAAM;AAAA,IACjC,CAAC,MAAM,SAAS,UAAU,KAAK;AAAA,EACjC;AACA,QAAM,iBAAiB;AAAA,IACrB,MAAM,CAAC,OAAO,gBAAgB,KAAK;AAAA,IACnC,CAAC,OAAO,gBAAgB,KAAK;AAAA,EAC/B;AAEA,SAAO,oBAAC,QAAM,GAAG,OAAO,OAAO,gBAAgB;AACjD,CAAC;","names":["ControlContainer"]}
1
+ {"version":3,"sources":["../../../src/components/controls/container.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\n\nimport { useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlContainerProps } from \"../../types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { View } from \"../atoms/view\";\nimport { controlContainerStyles } from \"./container.styles\";\n\nexport const ControlContainer = memo(function ControlContainer({\n style,\n ...props\n}: ControlContainerProps) {\n const {\n size,\n variant,\n tone = \"neutral\",\n disabled,\n error,\n } = useControlContext();\n const styles = useThemedStyles(\n controlContainerStyles,\n { size, variant, tone, disabled, error },\n [size, variant, tone, disabled, error],\n );\n const containerStyle = useMemo(\n () => [styles.inputContainer, style],\n [styles.inputContainer, style],\n );\n\n return <View {...props} style={containerStyle} />;\n});\n"],"mappings":"AA8BS;AA9BT,SAAS,MAAM,eAAe;AAE9B,SAAS,uBAAuB;AAGhC,SAAS,yBAAyB;AAClC,SAAS,YAAY;AACrB,SAAS,8BAA8B;AAEhC,MAAM,mBAAmB,KAAK,SAASA,kBAAiB;AAAA,EAC7D;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,IAAI,kBAAkB;AACtB,QAAM,SAAS;AAAA,IACb;AAAA,IACA,EAAE,MAAM,SAAS,MAAM,UAAU,MAAM;AAAA,IACvC,CAAC,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACvC;AACA,QAAM,iBAAiB;AAAA,IACrB,MAAM,CAAC,OAAO,gBAAgB,KAAK;AAAA,IACnC,CAAC,OAAO,gBAAgB,KAAK;AAAA,EAC/B;AAEA,SAAO,oBAAC,QAAM,GAAG,OAAO,OAAO,gBAAgB;AACjD,CAAC;","names":["ControlContainer"]}
@@ -1,7 +1,7 @@
1
1
  import { AppTheme } from '@impulse-ui-native/theme';
2
2
  import { ControlFieldThemeProps } from '../../types/control-theme.types.mjs';
3
3
 
4
- declare function controlContainerStyles(theme: AppTheme, { size, variant, disabled, error }: ControlFieldThemeProps): Readonly<{
4
+ declare function controlContainerStyles(theme: AppTheme, { size, variant, tone, disabled, error }: ControlFieldThemeProps): Readonly<{
5
5
  inputContainer: {
6
6
  flexDirection: "row";
7
7
  alignItems: "center";
@@ -1,9 +1,9 @@
1
1
  import { StyleSheet } from "react-native";
2
2
  import { getFieldStateTokens } from "@impulse-ui-native/theme";
3
- function controlContainerStyles(theme, { size, variant, disabled, error }) {
3
+ function controlContainerStyles(theme, { size, variant, tone, disabled, error }) {
4
4
  const tokens = theme.components.controlContainer;
5
5
  const sizeTokens = tokens.sizes[size];
6
- const appearance = getFieldStateTokens(tokens.variants[variant], {
6
+ const appearance = getFieldStateTokens(tokens.colors[tone][variant], {
7
7
  disabled,
8
8
  error: Boolean(error)
9
9
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/container.styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens } from \"@impulse-ui-native/theme\";\n\nimport type { ControlFieldThemeProps } from \"../../types/control-theme.types\";\n\nexport function controlContainerStyles(\n theme: AppTheme,\n { size, variant, disabled, error }: ControlFieldThemeProps,\n) {\n const tokens = theme.components.controlContainer;\n const sizeTokens = tokens.sizes[size];\n const appearance = getFieldStateTokens(tokens.variants[variant], {\n disabled,\n error: Boolean(error),\n });\n\n return StyleSheet.create({\n inputContainer: {\n flexDirection: \"row\",\n alignItems: \"center\",\n height: sizeTokens.height,\n paddingHorizontal: sizeTokens.paddingHorizontal,\n borderRadius: tokens.borderRadius,\n borderWidth: tokens.borderWidth,\n opacity: appearance.opacity,\n backgroundColor: appearance.backgroundColor,\n borderColor: appearance.borderColor,\n },\n });\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAG3B,SAAS,2BAA2B;AAI7B,SAAS,uBACd,OACA,EAAE,MAAM,SAAS,UAAU,MAAM,GACjC;AACA,QAAM,SAAS,MAAM,WAAW;AAChC,QAAM,aAAa,OAAO,MAAM,IAAI;AACpC,QAAM,aAAa,oBAAoB,OAAO,SAAS,OAAO,GAAG;AAAA,IAC/D;AAAA,IACA,OAAO,QAAQ,KAAK;AAAA,EACtB,CAAC;AAED,SAAO,WAAW,OAAO;AAAA,IACvB,gBAAgB;AAAA,MACd,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,QAAQ,WAAW;AAAA,MACnB,mBAAmB,WAAW;AAAA,MAC9B,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,SAAS,WAAW;AAAA,MACpB,iBAAiB,WAAW;AAAA,MAC5B,aAAa,WAAW;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/controls/container.styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens } from \"@impulse-ui-native/theme\";\n\nimport type { ControlFieldThemeProps } from \"../../types/control-theme.types\";\n\nexport function controlContainerStyles(\n theme: AppTheme,\n { size, variant, tone, disabled, error }: ControlFieldThemeProps,\n) {\n const tokens = theme.components.controlContainer;\n const sizeTokens = tokens.sizes[size];\n const appearance = getFieldStateTokens(tokens.colors[tone][variant], {\n disabled,\n error: Boolean(error),\n });\n\n return StyleSheet.create({\n inputContainer: {\n flexDirection: \"row\",\n alignItems: \"center\",\n height: sizeTokens.height,\n paddingHorizontal: sizeTokens.paddingHorizontal,\n borderRadius: tokens.borderRadius,\n borderWidth: tokens.borderWidth,\n opacity: appearance.opacity,\n backgroundColor: appearance.backgroundColor,\n borderColor: appearance.borderColor,\n },\n });\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAG3B,SAAS,2BAA2B;AAI7B,SAAS,uBACd,OACA,EAAE,MAAM,SAAS,MAAM,UAAU,MAAM,GACvC;AACA,QAAM,SAAS,MAAM,WAAW;AAChC,QAAM,aAAa,OAAO,MAAM,IAAI;AACpC,QAAM,aAAa,oBAAoB,OAAO,OAAO,IAAI,EAAE,OAAO,GAAG;AAAA,IACnE;AAAA,IACA,OAAO,QAAQ,KAAK;AAAA,EACtB,CAAC;AAED,SAAO,WAAW,OAAO;AAAA,IACvB,gBAAgB;AAAA,MACd,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,QAAQ,WAAW;AAAA,MACnB,mBAAmB,WAAW;AAAA,MAC9B,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,SAAS,WAAW;AAAA,MACpB,iBAAiB,WAAW;AAAA,MAC5B,aAAa,WAAW;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import { ViewProps } from '../../types/view.types.mjs';
3
- import { ControlFieldProps, ControlTriggerProps, ControlIconProps, ControlContainerProps, ControlContextData, ControlLabelProps, ControlErrorLabelProps, ControlAddonProps, ControlInputProps, ControlPlaceholderProps, ControlValueProps, ControlLoaderProps } from '../../types/control-components.types.mjs';
3
+ import { ControlFieldProps, ControlTriggerProps, ControlIconProps, ControlContainerProps, ControlComponentProps, ControlLabelProps, ControlErrorLabelProps, ControlAddonProps, ControlInputProps, ControlPlaceholderProps, ControlValueProps, ControlLoaderProps } from '../../types/control-components.types.mjs';
4
4
  import 'react-native';
5
5
  import '@impulse-ui-native/theme';
6
6
  import '@impulse-ui-native/icon/types';
@@ -8,11 +8,11 @@ import '../../types/button.types.mjs';
8
8
  import '../../types/spinner.types.mjs';
9
9
 
10
10
  declare const Control: {
11
- Field: react.MemoExoticComponent<({ children, disabled, error, label, onPress, onPressPrefix, onPressSuffix, prefix, size, suffix, variant, ...props }: ControlFieldProps) => react.JSX.Element>;
11
+ Field: react.MemoExoticComponent<({ children, disabled, error, label, onPress, onPressPrefix, onPressSuffix, prefix, size, suffix, variant, tone, ...props }: ControlFieldProps) => react.JSX.Element>;
12
12
  Trigger: react.MemoExoticComponent<({ disabled: disabledProp, style, ...props }: ControlTriggerProps) => react.JSX.Element>;
13
13
  Icon: react.MemoExoticComponent<({ color, ...props }: ControlIconProps) => react.JSX.Element>;
14
14
  Container: react.MemoExoticComponent<({ style, ...props }: ControlContainerProps) => react.JSX.Element>;
15
- Provider: react.MemoExoticComponent<(props: react.PropsWithChildren<ControlContextData>) => react.JSX.Element>;
15
+ Provider: react.MemoExoticComponent<(props: react.PropsWithChildren<ControlComponentProps>) => react.JSX.Element>;
16
16
  Root: react.MemoExoticComponent<(props: ViewProps) => react.JSX.Element>;
17
17
  Label: react.MemoExoticComponent<(props: ControlLabelProps) => react.JSX.Element | null>;
18
18
  Error: react.MemoExoticComponent<(props: ControlErrorLabelProps) => react.JSX.Element>;
@@ -6,6 +6,6 @@ import '@impulse-ui-native/theme';
6
6
  import '../../types/button.types.mjs';
7
7
  import '../../types/spinner.types.mjs';
8
8
 
9
- declare const ControlField: react.MemoExoticComponent<({ children, disabled, error, label, onPress, onPressPrefix, onPressSuffix, prefix, size, suffix, variant, ...props }: ControlFieldProps) => react.JSX.Element>;
9
+ declare const ControlField: react.MemoExoticComponent<({ children, disabled, error, label, onPress, onPressPrefix, onPressSuffix, prefix, size, suffix, variant, tone, ...props }: ControlFieldProps) => react.JSX.Element>;
10
10
 
11
11
  export { ControlField };
@@ -19,6 +19,7 @@ const ControlField = memo(function ControlField2({
19
19
  size = "medium",
20
20
  suffix,
21
21
  variant = "outlined",
22
+ tone = "neutral",
22
23
  ...props
23
24
  }) {
24
25
  const layoutStyle = useStyleProps(props);
@@ -29,6 +30,7 @@ const ControlField = memo(function ControlField2({
29
30
  {
30
31
  size,
31
32
  variant,
33
+ tone,
32
34
  error,
33
35
  disabled,
34
36
  children: /* @__PURE__ */ jsxs(ControlRoot, { style: layoutStyle, children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/field.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useStyleProps } from \"@impulse-ui-native/theme\";\n\nimport type { ControlFieldProps } from \"../../types\";\nimport { ControlAddon } from \"./addon\";\nimport { ControlError } from \"./error\";\nimport { ControlLabel } from \"./label\";\nimport { ControlProvider } from \"./provider\";\nimport { ControlRoot } from \"./root\";\nimport { ControlTrigger } from \"./trigger\";\n\nexport const ControlField = memo(function ControlField({\n children,\n disabled,\n error,\n label,\n onPress,\n onPressPrefix,\n onPressSuffix,\n prefix,\n size = \"medium\",\n suffix,\n variant = \"outlined\",\n ...props\n}: ControlFieldProps) {\n const layoutStyle = useStyleProps(props);\n\n const hasPrefix = prefix !== null && prefix !== undefined;\n const hasSuffix = suffix !== null && suffix !== undefined;\n\n return (\n <ControlProvider\n size={size}\n variant={variant}\n error={error}\n disabled={disabled}\n >\n <ControlRoot style={layoutStyle}>\n <ControlLabel>{label}</ControlLabel>\n <ControlTrigger onPress={onPress}>\n {hasPrefix ? (\n <ControlAddon onPress={onPressPrefix}>{prefix}</ControlAddon>\n ) : null}\n {children}\n {hasSuffix ? (\n <ControlAddon onPress={onPressSuffix}>{suffix}</ControlAddon>\n ) : null}\n </ControlTrigger>\n {error ? <ControlError>{error}</ControlError> : null}\n </ControlRoot>\n </ControlProvider>\n );\n});\n"],"mappings":"AAuCQ,cACA,YADA;AAvCR,SAAS,YAAY;AAErB,SAAS,qBAAqB;AAG9B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAExB,MAAM,eAAe,KAAK,SAASA,cAAa;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,GAAsB;AACpB,QAAM,cAAc,cAAc,KAAK;AAEvC,QAAM,YAAY,WAAW,QAAQ,WAAW;AAChD,QAAM,YAAY,WAAW,QAAQ,WAAW;AAEhD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,+BAAC,eAAY,OAAO,aAClB;AAAA,4BAAC,gBAAc,iBAAM;AAAA,QACrB,qBAAC,kBAAe,SACb;AAAA,sBACC,oBAAC,gBAAa,SAAS,eAAgB,kBAAO,IAC5C;AAAA,UACH;AAAA,UACA,YACC,oBAAC,gBAAa,SAAS,eAAgB,kBAAO,IAC5C;AAAA,WACN;AAAA,QACC,QAAQ,oBAAC,gBAAc,iBAAM,IAAkB;AAAA,SAClD;AAAA;AAAA,EACF;AAEJ,CAAC;","names":["ControlField"]}
1
+ {"version":3,"sources":["../../../src/components/controls/field.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useStyleProps } from \"@impulse-ui-native/theme\";\n\nimport type { ControlFieldProps } from \"../../types\";\nimport { ControlAddon } from \"./addon\";\nimport { ControlError } from \"./error\";\nimport { ControlLabel } from \"./label\";\nimport { ControlProvider } from \"./provider\";\nimport { ControlRoot } from \"./root\";\nimport { ControlTrigger } from \"./trigger\";\n\nexport const ControlField = memo(function ControlField({\n children,\n disabled,\n error,\n label,\n onPress,\n onPressPrefix,\n onPressSuffix,\n prefix,\n size = \"medium\",\n suffix,\n variant = \"outlined\",\n tone = \"neutral\",\n ...props\n}: ControlFieldProps) {\n const layoutStyle = useStyleProps(props);\n\n const hasPrefix = prefix !== null && prefix !== undefined;\n const hasSuffix = suffix !== null && suffix !== undefined;\n\n return (\n <ControlProvider\n size={size}\n variant={variant}\n tone={tone}\n error={error}\n disabled={disabled}\n >\n <ControlRoot style={layoutStyle}>\n <ControlLabel>{label}</ControlLabel>\n <ControlTrigger onPress={onPress}>\n {hasPrefix ? (\n <ControlAddon onPress={onPressPrefix}>{prefix}</ControlAddon>\n ) : null}\n {children}\n {hasSuffix ? (\n <ControlAddon onPress={onPressSuffix}>{suffix}</ControlAddon>\n ) : null}\n </ControlTrigger>\n {error ? <ControlError>{error}</ControlError> : null}\n </ControlRoot>\n </ControlProvider>\n );\n});\n"],"mappings":"AAyCQ,cACA,YADA;AAzCR,SAAS,YAAY;AAErB,SAAS,qBAAqB;AAG9B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAExB,MAAM,eAAe,KAAK,SAASA,cAAa;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,GAAG;AACL,GAAsB;AACpB,QAAM,cAAc,cAAc,KAAK;AAEvC,QAAM,YAAY,WAAW,QAAQ,WAAW;AAChD,QAAM,YAAY,WAAW,QAAQ,WAAW;AAEhD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,+BAAC,eAAY,OAAO,aAClB;AAAA,4BAAC,gBAAc,iBAAM;AAAA,QACrB,qBAAC,kBAAe,SACb;AAAA,sBACC,oBAAC,gBAAa,SAAS,eAAgB,kBAAO,IAC5C;AAAA,UACH;AAAA,UACA,YACC,oBAAC,gBAAa,SAAS,eAAgB,kBAAO,IAC5C;AAAA,WACN;AAAA,QACC,QAAQ,oBAAC,gBAAc,iBAAM,IAAkB;AAAA,SAClD;AAAA;AAAA,EACF;AAEJ,CAAC;","names":["ControlField"]}
@@ -10,9 +10,9 @@ const ControlIcon = memo(function ControlIcon2({
10
10
  color,
11
11
  ...props
12
12
  }) {
13
- const { variant, disabled, error } = useControlContext();
13
+ const { variant, tone = "neutral", disabled, error } = useControlContext();
14
14
  const tokens = useComponentsTokens().controlAddon;
15
- const appearance = getFieldStateTokens(tokens.variants[variant], {
15
+ const appearance = getFieldStateTokens(tokens.colors[tone][variant], {
16
16
  disabled,
17
17
  error: Boolean(error)
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/icon.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { Icon } from \"@impulse-ui-native/icon\";\nimport {\n getFieldStateTokens,\n useComponentsTokens,\n} from \"@impulse-ui-native/theme\";\n\nimport type { ControlIconProps } from \"../../types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\n\nexport const ControlIcon = memo(function ControlIcon({\n color,\n ...props\n}: ControlIconProps) {\n const { variant, disabled, error } = useControlContext();\n const tokens = useComponentsTokens().controlAddon;\n const appearance = getFieldStateTokens(tokens.variants[variant], {\n disabled,\n error: Boolean(error),\n });\n\n return <Icon {...props} color={color ?? appearance.iconColor} />;\n});\n"],"mappings":"AAsBS;AAtBT,SAAS,YAAY;AAErB,SAAS,YAAY;AACrB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,yBAAyB;AAE3B,MAAM,cAAc,KAAK,SAASA,aAAY;AAAA,EACnD;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,EAAE,SAAS,UAAU,MAAM,IAAI,kBAAkB;AACvD,QAAM,SAAS,oBAAoB,EAAE;AACrC,QAAM,aAAa,oBAAoB,OAAO,SAAS,OAAO,GAAG;AAAA,IAC/D;AAAA,IACA,OAAO,QAAQ,KAAK;AAAA,EACtB,CAAC;AAED,SAAO,oBAAC,QAAM,GAAG,OAAO,OAAO,SAAS,WAAW,WAAW;AAChE,CAAC;","names":["ControlIcon"]}
1
+ {"version":3,"sources":["../../../src/components/controls/icon.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { Icon } from \"@impulse-ui-native/icon\";\nimport {\n getFieldStateTokens,\n useComponentsTokens,\n} from \"@impulse-ui-native/theme\";\n\nimport type { ControlIconProps } from \"../../types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\n\nexport const ControlIcon = memo(function ControlIcon({\n color,\n ...props\n}: ControlIconProps) {\n const { variant, tone = \"neutral\", disabled, error } = useControlContext();\n const tokens = useComponentsTokens().controlAddon;\n const appearance = getFieldStateTokens(tokens.colors[tone][variant], {\n disabled,\n error: Boolean(error),\n });\n\n return <Icon {...props} color={color ?? appearance.iconColor} />;\n});\n"],"mappings":"AAsBS;AAtBT,SAAS,YAAY;AAErB,SAAS,YAAY;AACrB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,yBAAyB;AAE3B,MAAM,cAAc,KAAK,SAASA,aAAY;AAAA,EACnD;AAAA,EACA,GAAG;AACL,GAAqB;AACnB,QAAM,EAAE,SAAS,OAAO,WAAW,UAAU,MAAM,IAAI,kBAAkB;AACzE,QAAM,SAAS,oBAAoB,EAAE;AACrC,QAAM,aAAa,oBAAoB,OAAO,OAAO,IAAI,EAAE,OAAO,GAAG;AAAA,IACnE;AAAA,IACA,OAAO,QAAQ,KAAK;AAAA,EACtB,CAAC;AAED,SAAO,oBAAC,QAAM,GAAG,OAAO,OAAO,SAAS,WAAW,WAAW;AAChE,CAAC;","names":["ControlIcon"]}
@@ -4,17 +4,24 @@ import { StyleSheet, TextInput } from "react-native";
4
4
  import { getFieldStateTokens, useThemedStyles } from "@impulse-ui-native/theme";
5
5
  import { useControlContext } from "../../hooks/use-control-context.hook";
6
6
  const ControlInput = memo(function ControlInput2(props) {
7
- const { onPress: _onPress, style, ...rest } = props;
8
- const { size, variant, disabled, error } = useControlContext();
7
+ const { onPress: _onPress, editable, style, ...rest } = props;
8
+ const {
9
+ size,
10
+ variant,
11
+ tone = "neutral",
12
+ disabled,
13
+ error
14
+ } = useControlContext();
9
15
  const styles = useThemedStyles(
10
16
  themedStyles,
11
17
  {
12
18
  size,
13
19
  variant,
20
+ tone,
14
21
  disabled,
15
22
  error
16
23
  },
17
- [size, variant, disabled, error]
24
+ [size, variant, tone, disabled, error]
18
25
  );
19
26
  const inputStyles = useMemo(
20
27
  () => [styles.input, style],
@@ -26,15 +33,15 @@ const ControlInput = memo(function ControlInput2(props) {
26
33
  ...rest,
27
34
  style: inputStyles,
28
35
  placeholderTextColor: styles.placeholder.color,
29
- editable: !disabled
36
+ editable: !disabled && editable !== false
30
37
  }
31
38
  );
32
39
  });
33
- function themedStyles(theme, { size, variant, disabled, error }) {
40
+ function themedStyles(theme, { size, variant, tone = "neutral", disabled, error }) {
34
41
  const controlInputTokens = theme.components.controlInput;
35
42
  const sizeTokens = controlInputTokens.sizes[size];
36
43
  const appearanceTokens = getFieldStateTokens(
37
- controlInputTokens.variants[variant],
44
+ controlInputTokens.colors[tone][variant],
38
45
  { disabled, error: Boolean(error) }
39
46
  );
40
47
  return StyleSheet.create({
@@ -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 type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlInputProps } from \"../../types\";\nimport type { ControlFieldThemeProps } from \"../../types/control-theme.types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\n\nexport const ControlInput = memo(function ControlInput(\n props: ControlInputProps,\n) {\n const { onPress: _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 { size, variant, disabled, error }: ControlFieldThemeProps,\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":"AAkCI;AAlCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,YAAY,iBAAiB;AAGtC,SAAS,qBAAqB,uBAAuB;AAIrD,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,SAAS,UAAU,OAAO,GAAG,KAAK,IAAI;AAE9C,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,EAAE,MAAM,SAAS,UAAU,MAAM,GACjC;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
+ {"version":3,"sources":["../../../src/components/controls/input.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet, TextInput } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlInputProps } from \"../../types\";\nimport type { ControlFieldThemeProps } from \"../../types/control-theme.types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\n\nexport const ControlInput = memo(function ControlInput(\n props: ControlInputProps,\n) {\n const { onPress: _onPress, editable, style, ...rest } = props;\n\n const {\n size,\n variant,\n tone = \"neutral\",\n disabled,\n error,\n } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n tone,\n disabled,\n error,\n },\n [size, variant, tone, 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 && editable !== false}\n />\n );\n});\n\nfunction themedStyles(\n theme: AppTheme,\n { size, variant, tone = \"neutral\", disabled, error }: ControlFieldThemeProps,\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const appearanceTokens = getFieldStateTokens(\n controlInputTokens.colors[tone][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":"AAyCI;AAzCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,YAAY,iBAAiB;AAGtC,SAAS,qBAAqB,uBAAuB;AAIrD,SAAS,yBAAyB;AAE3B,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,SAAS,UAAU,UAAU,OAAO,GAAG,KAAK,IAAI;AAExD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,IAAI,kBAAkB;AAEtB,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACvC;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,YAAY,aAAa;AAAA;AAAA,EACtC;AAEJ,CAAC;AAED,SAAS,aACP,OACA,EAAE,MAAM,SAAS,OAAO,WAAW,UAAU,MAAM,GACnD;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,mBAAmB;AAAA,IACvB,mBAAmB,OAAO,IAAI,EAAE,OAAO;AAAA,IACvC,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"]}
@@ -5,8 +5,9 @@ import { getFieldStateTokens, useThemedStyles } from "@impulse-ui-native/theme";
5
5
  import { useControlContext } from "../../hooks/use-control-context.hook";
6
6
  import { Typography } from "../atoms";
7
7
  const ControlLabel = memo(function ControlLabel2(props) {
8
- const { children, disabled, style, ...rest } = props;
9
- const { error } = useControlContext();
8
+ const { children, disabled: disabledProp, style, ...rest } = props;
9
+ const { error, disabled: groupDisabled } = useControlContext();
10
+ const disabled = Boolean(groupDisabled) || disabledProp === true;
10
11
  const styles = useThemedStyles(
11
12
  themedStyles,
12
13
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/label.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlLabelProps } from \"../../types\";\nimport type { ControlStateThemeProps } from \"../../types/control-theme.types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Typography } from \"../atoms\";\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(theme: AppTheme, props: ControlStateThemeProps) {\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":"AAqCI;AArCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,qBAAqB,uBAAuB;AAIrD,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAEpB,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,aAAa,OAAiB,OAA+B;AACpE,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"]}
1
+ {"version":3,"sources":["../../../src/components/controls/label.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlLabelProps } from \"../../types\";\nimport type { ControlStateThemeProps } from \"../../types/control-theme.types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Typography } from \"../atoms\";\n\nexport const ControlLabel = memo(function ControlLabel(\n props: ControlLabelProps,\n) {\n const { children, disabled: disabledProp, style, ...rest } = props;\n\n const { error, disabled: groupDisabled } = useControlContext();\n const disabled = Boolean(groupDisabled) || disabledProp === true;\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(theme: AppTheme, props: ControlStateThemeProps) {\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":"AAsCI;AAtCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,qBAAqB,uBAAuB;AAIrD,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAEpB,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,UAAU,UAAU,cAAc,OAAO,GAAG,KAAK,IAAI;AAE7D,QAAM,EAAE,OAAO,UAAU,cAAc,IAAI,kBAAkB;AAC7D,QAAM,WAAW,QAAQ,aAAa,KAAK,iBAAiB;AAE5D,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,aAAa,OAAiB,OAA+B;AACpE,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"]}
@@ -1,8 +1,19 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { memo } from "react";
3
+ import {
4
+ getFieldStateTokens,
5
+ useComponentsTokens
6
+ } from "@impulse-ui-native/theme";
7
+ import { useControlContext } from "../../hooks/use-control-context.hook";
3
8
  import { Spinner } from "../atoms/spinner";
4
9
  const ControlLoader = memo(function ControlLoader2(props) {
5
- return /* @__PURE__ */ jsx(Spinner, { ...props });
10
+ const { variant, tone = "neutral", disabled, error } = useControlContext();
11
+ const tokens = useComponentsTokens().controlAddon;
12
+ const appearance = getFieldStateTokens(tokens.colors[tone][variant], {
13
+ disabled,
14
+ error: Boolean(error)
15
+ });
16
+ return /* @__PURE__ */ jsx(Spinner, { color: appearance.iconColor, ...props });
6
17
  });
7
18
  export {
8
19
  ControlLoader
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/loader.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport type { ControlLoaderProps } from \"../../types\";\nimport { Spinner } from \"../atoms/spinner\";\n\nexport const ControlLoader = memo(function ControlLoader(\n props: ControlLoaderProps,\n) {\n return <Spinner {...props} />;\n});\n"],"mappings":"AAQS;AART,SAAS,YAAY;AAGrB,SAAS,eAAe;AAEjB,MAAM,gBAAgB,KAAK,SAASA,eACzC,OACA;AACA,SAAO,oBAAC,WAAS,GAAG,OAAO;AAC7B,CAAC;","names":["ControlLoader"]}
1
+ {"version":3,"sources":["../../../src/components/controls/loader.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport {\n getFieldStateTokens,\n useComponentsTokens,\n} from \"@impulse-ui-native/theme\";\n\nimport type { ControlLoaderProps } from \"../../types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Spinner } from \"../atoms/spinner\";\n\nexport const ControlLoader = memo(function ControlLoader(\n props: ControlLoaderProps,\n) {\n const { variant, tone = \"neutral\", disabled, error } = useControlContext();\n const tokens = useComponentsTokens().controlAddon;\n const appearance = getFieldStateTokens(tokens.colors[tone][variant], {\n disabled,\n error: Boolean(error),\n });\n\n return <Spinner color={appearance.iconColor} {...props} />;\n});\n"],"mappings":"AAqBS;AArBT,SAAS,YAAY;AAErB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,yBAAyB;AAClC,SAAS,eAAe;AAEjB,MAAM,gBAAgB,KAAK,SAASA,eACzC,OACA;AACA,QAAM,EAAE,SAAS,OAAO,WAAW,UAAU,MAAM,IAAI,kBAAkB;AACzE,QAAM,SAAS,oBAAoB,EAAE;AACrC,QAAM,aAAa,oBAAoB,OAAO,OAAO,IAAI,EAAE,OAAO,GAAG;AAAA,IACnE;AAAA,IACA,OAAO,QAAQ,KAAK;AAAA,EACtB,CAAC;AAED,SAAO,oBAAC,WAAQ,OAAO,WAAW,WAAY,GAAG,OAAO;AAC1D,CAAC;","names":["ControlLoader"]}
@@ -6,16 +6,23 @@ import { useControlContext } from "../../hooks/use-control-context.hook";
6
6
  import { Typography } from "../atoms";
7
7
  const ControlPlaceholder = memo(function ControlPlaceholder2(props) {
8
8
  const { style, ...rest } = props;
9
- const { size, variant, disabled, error } = useControlContext();
9
+ const {
10
+ size,
11
+ variant,
12
+ tone = "neutral",
13
+ disabled,
14
+ error
15
+ } = useControlContext();
10
16
  const styles = useThemedStyles(
11
17
  themedStyles,
12
18
  {
13
19
  size,
14
20
  variant,
21
+ tone,
15
22
  disabled,
16
23
  error
17
24
  },
18
- [size, variant, disabled, error]
25
+ [size, variant, tone, disabled, error]
19
26
  );
20
27
  const placeholderStyle = useMemo(
21
28
  () => [styles.placeholder, style],
@@ -23,11 +30,11 @@ const ControlPlaceholder = memo(function ControlPlaceholder2(props) {
23
30
  );
24
31
  return /* @__PURE__ */ jsx(Typography.Master, { numberOfLines: 1, ...rest, style: placeholderStyle });
25
32
  });
26
- function themedStyles(theme, { size, variant, disabled, error }) {
33
+ function themedStyles(theme, { size, variant, tone = "neutral", disabled, error }) {
27
34
  const controlInputTokens = theme.components.controlInput;
28
35
  const sizeTokens = controlInputTokens.sizes[size];
29
36
  const appearanceTokens = getFieldStateTokens(
30
- controlInputTokens.variants[variant],
37
+ controlInputTokens.colors[tone][variant],
31
38
  { disabled, error: Boolean(error) }
32
39
  );
33
40
  return StyleSheet.create({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/placeholder.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlPlaceholderProps } from \"../../types\";\nimport type { ControlFieldThemeProps } from \"../../types/control-theme.types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Typography } from \"../atoms\";\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 { size, variant, disabled, error }: ControlFieldThemeProps,\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":"AAmCI;AAnCJ,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,qBAAqB,uBAAuB;AAIrD,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAEpB,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,EAAE,MAAM,SAAS,UAAU,MAAM,GACjC;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"]}
1
+ {"version":3,"sources":["../../../src/components/controls/placeholder.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlPlaceholderProps } from \"../../types\";\nimport type { ControlFieldThemeProps } from \"../../types/control-theme.types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Typography } from \"../atoms\";\n\nexport const ControlPlaceholder = memo(function ControlPlaceholder(\n props: ControlPlaceholderProps,\n) {\n const { style, ...rest } = props;\n\n const {\n size,\n variant,\n tone = \"neutral\",\n disabled,\n error,\n } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n {\n size,\n variant,\n tone,\n disabled,\n error,\n },\n [size, variant, tone, 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 { size, variant, tone = \"neutral\", disabled, error }: ControlFieldThemeProps,\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const appearanceTokens = getFieldStateTokens(\n controlInputTokens.colors[tone][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":"AA0CI;AA1CJ,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,qBAAqB,uBAAuB;AAIrD,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAEpB,MAAM,qBAAqB,KAAK,SAASA,oBAC9C,OACA;AACA,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAE3B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,IAAI,kBAAkB;AAEtB,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACvC;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,EAAE,MAAM,SAAS,OAAO,WAAW,UAAU,MAAM,GACnD;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,mBAAmB;AAAA,IACvB,mBAAmB,OAAO,IAAI,EAAE,OAAO;AAAA,IACvC,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"]}
@@ -1,12 +1,12 @@
1
1
  import * as react from 'react';
2
2
  import { PropsWithChildren } from 'react';
3
- import { ControlContextData } from '../../types/control-components.types.mjs';
3
+ import { ControlComponentProps } from '../../types/control-components.types.mjs';
4
4
  import 'react-native';
5
5
  import '@impulse-ui-native/icon/types';
6
6
  import '@impulse-ui-native/theme';
7
7
  import '../../types/button.types.mjs';
8
8
  import '../../types/spinner.types.mjs';
9
9
 
10
- declare const ControlProvider: react.MemoExoticComponent<(props: PropsWithChildren<ControlContextData>) => react.JSX.Element>;
10
+ declare const ControlProvider: react.MemoExoticComponent<(props: PropsWithChildren<ControlComponentProps>) => react.JSX.Element>;
11
11
 
12
12
  export { ControlProvider };
@@ -2,10 +2,16 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { memo, useMemo } from "react";
3
3
  import { ControlContext } from "../../contexts/control.context";
4
4
  const ControlProvider = memo(function ControlProvider2(props) {
5
- const { children, disabled, error, size, variant } = props;
5
+ const { children, disabled, error, size, variant, tone = "neutral" } = props;
6
6
  const context = useMemo(
7
- () => ({ disabled, error, size, variant }),
8
- [disabled, error, size, variant]
7
+ () => ({
8
+ disabled,
9
+ error,
10
+ size,
11
+ variant,
12
+ tone
13
+ }),
14
+ [disabled, error, size, variant, tone]
9
15
  );
10
16
  return /* @__PURE__ */ jsx(ControlContext.Provider, { value: context, children });
11
17
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/provider.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport { memo, useMemo } from \"react\";\n\nimport type { ControlContextData } from \"../../types\";\nimport { ControlContext } from \"../../contexts/control.context\";\n\nexport const ControlProvider = memo(function ControlProvider(\n props: PropsWithChildren<ControlContextData>,\n) {\n const { children, disabled, error, size, variant } = props;\n\n const context = useMemo<ControlContextData>(\n () => ({ disabled, error, size, variant }),\n [disabled, error, size, variant],\n );\n\n return (\n <ControlContext.Provider value={context}>\n {children}\n </ControlContext.Provider>\n );\n});\n"],"mappings":"AAiBI;AAhBJ,SAAS,MAAM,eAAe;AAG9B,SAAS,sBAAsB;AAExB,MAAM,kBAAkB,KAAK,SAASA,iBAC3C,OACA;AACA,QAAM,EAAE,UAAU,UAAU,OAAO,MAAM,QAAQ,IAAI;AAErD,QAAM,UAAU;AAAA,IACd,OAAO,EAAE,UAAU,OAAO,MAAM,QAAQ;AAAA,IACxC,CAAC,UAAU,OAAO,MAAM,OAAO;AAAA,EACjC;AAEA,SACE,oBAAC,eAAe,UAAf,EAAwB,OAAO,SAC7B,UACH;AAEJ,CAAC;","names":["ControlProvider"]}
1
+ {"version":3,"sources":["../../../src/components/controls/provider.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport { memo, useMemo } from \"react\";\n\nimport type { ControlComponentProps, ControlContextData } from \"../../types\";\nimport { ControlContext } from \"../../contexts/control.context\";\n\nexport const ControlProvider = memo(function ControlProvider(\n props: PropsWithChildren<ControlComponentProps>,\n) {\n const { children, disabled, error, size, variant, tone = \"neutral\" } = props;\n\n const context = useMemo<ControlContextData>(\n () => ({\n disabled,\n error,\n size,\n variant,\n tone,\n }),\n [disabled, error, size, variant, tone],\n );\n\n return (\n <ControlContext.Provider value={context}>\n {children}\n </ControlContext.Provider>\n );\n});\n"],"mappings":"AAuBI;AAtBJ,SAAS,MAAM,eAAe;AAG9B,SAAS,sBAAsB;AAExB,MAAM,kBAAkB,KAAK,SAASA,iBAC3C,OACA;AACA,QAAM,EAAE,UAAU,UAAU,OAAO,MAAM,SAAS,OAAO,UAAU,IAAI;AAEvE,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,UAAU,OAAO,MAAM,SAAS,IAAI;AAAA,EACvC;AAEA,SACE,oBAAC,eAAe,UAAf,EAAwB,OAAO,SAC7B,UACH;AAEJ,CAAC;","names":["ControlProvider"]}
@@ -13,13 +13,19 @@ const ControlTrigger = memo(function ControlTrigger2({
13
13
  style,
14
14
  ...props
15
15
  }) {
16
- const { size, variant, disabled, error } = useControlContext();
16
+ const {
17
+ size,
18
+ variant,
19
+ tone = "neutral",
20
+ disabled,
21
+ error
22
+ } = useControlContext();
17
23
  const tokens = useComponentsTokens().pressable;
18
24
  const resolvedDisabled = Boolean(disabled) || disabledProp === true;
19
25
  const styles = useThemedStyles(
20
26
  controlContainerStyles,
21
- { size, variant, disabled: resolvedDisabled, error },
22
- [size, variant, resolvedDisabled, error]
27
+ { size, variant, tone, disabled: resolvedDisabled, error },
28
+ [size, variant, tone, resolvedDisabled, error]
23
29
  );
24
30
  const extractedStyleProps = useStyleProps(props);
25
31
  const triggerStyle = useCallback(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/trigger.tsx"],"sourcesContent":["import type { PressableStateCallbackType } from \"react-native\";\nimport { memo, useCallback } from \"react\";\n\nimport {\n useComponentsTokens,\n useStyleProps,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport type { ControlTriggerProps } from \"../../types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Pressable } from \"../atoms/pressable\";\nimport { controlContainerStyles } from \"./container.styles\";\n\nexport const ControlTrigger = memo(function ControlTrigger({\n disabled: disabledProp,\n style,\n ...props\n}: ControlTriggerProps) {\n const { size, variant, disabled, error } = useControlContext();\n const tokens = useComponentsTokens().pressable;\n const resolvedDisabled = Boolean(disabled) || disabledProp === true;\n const styles = useThemedStyles(\n controlContainerStyles,\n { size, variant, disabled: resolvedDisabled, error },\n [size, variant, resolvedDisabled, error],\n );\n const extractedStyleProps = useStyleProps(props);\n\n const triggerStyle = useCallback(\n (state: PressableStateCallbackType) => [\n styles.inputContainer,\n {\n opacity:\n styles.inputContainer.opacity *\n (state.pressed ? tokens.pressedOpacity : 1),\n },\n extractedStyleProps,\n typeof style === \"function\" ? style(state) : style,\n ],\n [extractedStyleProps, style, styles.inputContainer, tokens.pressedOpacity],\n );\n\n return (\n <Pressable {...props} disabled={resolvedDisabled} style={triggerStyle} />\n );\n});\n"],"mappings":"AA4CI;AA3CJ,SAAS,MAAM,mBAAmB;AAElC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,yBAAyB;AAClC,SAAS,iBAAiB;AAC1B,SAAS,8BAA8B;AAEhC,MAAM,iBAAiB,KAAK,SAASA,gBAAe;AAAA,EACzD,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,EAAE,MAAM,SAAS,UAAU,MAAM,IAAI,kBAAkB;AAC7D,QAAM,SAAS,oBAAoB,EAAE;AACrC,QAAM,mBAAmB,QAAQ,QAAQ,KAAK,iBAAiB;AAC/D,QAAM,SAAS;AAAA,IACb;AAAA,IACA,EAAE,MAAM,SAAS,UAAU,kBAAkB,MAAM;AAAA,IACnD,CAAC,MAAM,SAAS,kBAAkB,KAAK;AAAA,EACzC;AACA,QAAM,sBAAsB,cAAc,KAAK;AAE/C,QAAM,eAAe;AAAA,IACnB,CAAC,UAAsC;AAAA,MACrC,OAAO;AAAA,MACP;AAAA,QACE,SACE,OAAO,eAAe,WACrB,MAAM,UAAU,OAAO,iBAAiB;AAAA,MAC7C;AAAA,MACA;AAAA,MACA,OAAO,UAAU,aAAa,MAAM,KAAK,IAAI;AAAA,IAC/C;AAAA,IACA,CAAC,qBAAqB,OAAO,OAAO,gBAAgB,OAAO,cAAc;AAAA,EAC3E;AAEA,SACE,oBAAC,aAAW,GAAG,OAAO,UAAU,kBAAkB,OAAO,cAAc;AAE3E,CAAC;","names":["ControlTrigger"]}
1
+ {"version":3,"sources":["../../../src/components/controls/trigger.tsx"],"sourcesContent":["import type { PressableStateCallbackType } from \"react-native\";\nimport { memo, useCallback } from \"react\";\n\nimport {\n useComponentsTokens,\n useStyleProps,\n useThemedStyles,\n} from \"@impulse-ui-native/theme\";\n\nimport type { ControlTriggerProps } from \"../../types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Pressable } from \"../atoms/pressable\";\nimport { controlContainerStyles } from \"./container.styles\";\n\nexport const ControlTrigger = memo(function ControlTrigger({\n disabled: disabledProp,\n style,\n ...props\n}: ControlTriggerProps) {\n const {\n size,\n variant,\n tone = \"neutral\",\n disabled,\n error,\n } = useControlContext();\n const tokens = useComponentsTokens().pressable;\n const resolvedDisabled = Boolean(disabled) || disabledProp === true;\n const styles = useThemedStyles(\n controlContainerStyles,\n { size, variant, tone, disabled: resolvedDisabled, error },\n [size, variant, tone, resolvedDisabled, error],\n );\n const extractedStyleProps = useStyleProps(props);\n\n const triggerStyle = useCallback(\n (state: PressableStateCallbackType) => [\n styles.inputContainer,\n {\n opacity:\n styles.inputContainer.opacity *\n (state.pressed ? tokens.pressedOpacity : 1),\n },\n extractedStyleProps,\n typeof style === \"function\" ? style(state) : style,\n ],\n [extractedStyleProps, style, styles.inputContainer, tokens.pressedOpacity],\n );\n\n return (\n <Pressable {...props} disabled={resolvedDisabled} style={triggerStyle} />\n );\n});\n"],"mappings":"AAkDI;AAjDJ,SAAS,MAAM,mBAAmB;AAElC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,yBAAyB;AAClC,SAAS,iBAAiB;AAC1B,SAAS,8BAA8B;AAEhC,MAAM,iBAAiB,KAAK,SAASA,gBAAe;AAAA,EACzD,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,IAAI,kBAAkB;AACtB,QAAM,SAAS,oBAAoB,EAAE;AACrC,QAAM,mBAAmB,QAAQ,QAAQ,KAAK,iBAAiB;AAC/D,QAAM,SAAS;AAAA,IACb;AAAA,IACA,EAAE,MAAM,SAAS,MAAM,UAAU,kBAAkB,MAAM;AAAA,IACzD,CAAC,MAAM,SAAS,MAAM,kBAAkB,KAAK;AAAA,EAC/C;AACA,QAAM,sBAAsB,cAAc,KAAK;AAE/C,QAAM,eAAe;AAAA,IACnB,CAAC,UAAsC;AAAA,MACrC,OAAO;AAAA,MACP;AAAA,QACE,SACE,OAAO,eAAe,WACrB,MAAM,UAAU,OAAO,iBAAiB;AAAA,MAC7C;AAAA,MACA;AAAA,MACA,OAAO,UAAU,aAAa,MAAM,KAAK,IAAI;AAAA,IAC/C;AAAA,IACA,CAAC,qBAAqB,OAAO,OAAO,gBAAgB,OAAO,cAAc;AAAA,EAC3E;AAEA,SACE,oBAAC,aAAW,GAAG,OAAO,UAAU,kBAAkB,OAAO,cAAc;AAE3E,CAAC;","names":["ControlTrigger"]}
@@ -6,11 +6,17 @@ import { useControlContext } from "../../hooks/use-control-context.hook";
6
6
  import { Typography } from "../atoms";
7
7
  const ControlValue = memo(function ControlValue2(props) {
8
8
  const { style, ...rest } = props;
9
- const { size, variant, disabled, error } = useControlContext();
9
+ const {
10
+ size,
11
+ variant,
12
+ tone = "neutral",
13
+ disabled,
14
+ error
15
+ } = useControlContext();
10
16
  const styles = useThemedStyles(
11
17
  themedStyles,
12
- { size, variant, disabled, error },
13
- [size, variant, disabled, error]
18
+ { size, variant, tone, disabled, error },
19
+ [size, variant, tone, disabled, error]
14
20
  );
15
21
  const valueStyle = useMemo(
16
22
  () => [styles.value, style],
@@ -18,11 +24,11 @@ const ControlValue = memo(function ControlValue2(props) {
18
24
  );
19
25
  return /* @__PURE__ */ jsx(Typography.Master, { numberOfLines: 1, ...rest, style: valueStyle });
20
26
  });
21
- function themedStyles(theme, { size, variant, disabled, error }) {
27
+ function themedStyles(theme, { size, variant, tone = "neutral", disabled, error }) {
22
28
  const controlInputTokens = theme.components.controlInput;
23
29
  const sizeTokens = controlInputTokens.sizes[size];
24
30
  const appearanceTokens = getFieldStateTokens(
25
- controlInputTokens.variants[variant],
31
+ controlInputTokens.colors[tone][variant],
26
32
  { disabled, error: Boolean(error) }
27
33
  );
28
34
  return StyleSheet.create({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/controls/value.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlValueProps } from \"../../types\";\nimport type { ControlFieldThemeProps } from \"../../types/control-theme.types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Typography } from \"../atoms\";\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 { size, variant, disabled, error }: ControlFieldThemeProps,\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":"AA6BS;AA7BT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,qBAAqB,uBAAuB;AAIrD,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAEpB,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,EAAE,MAAM,SAAS,UAAU,MAAM,GACjC;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"]}
1
+ {"version":3,"sources":["../../../src/components/controls/value.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\nimport { StyleSheet } from \"react-native\";\n\nimport type { AppTheme } from \"@impulse-ui-native/theme\";\nimport { getFieldStateTokens, useThemedStyles } from \"@impulse-ui-native/theme\";\n\nimport type { ControlValueProps } from \"../../types\";\nimport type { ControlFieldThemeProps } from \"../../types/control-theme.types\";\nimport { useControlContext } from \"../../hooks/use-control-context.hook\";\nimport { Typography } from \"../atoms\";\n\nexport const ControlValue = memo(function ControlValue(\n props: ControlValueProps,\n) {\n const { style, ...rest } = props;\n\n const {\n size,\n variant,\n tone = \"neutral\",\n disabled,\n error,\n } = useControlContext();\n\n const styles = useThemedStyles(\n themedStyles,\n { size, variant, tone, disabled, error },\n [size, variant, tone, 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 { size, variant, tone = \"neutral\", disabled, error }: ControlFieldThemeProps,\n) {\n const controlInputTokens = theme.components.controlInput;\n const sizeTokens = controlInputTokens.sizes[size];\n const appearanceTokens = getFieldStateTokens(\n controlInputTokens.colors[tone][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":"AAmCS;AAnCT,SAAS,MAAM,eAAe;AAC9B,SAAS,kBAAkB;AAG3B,SAAS,qBAAqB,uBAAuB;AAIrD,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAEpB,MAAM,eAAe,KAAK,SAASA,cACxC,OACA;AACA,QAAM,EAAE,OAAO,GAAG,KAAK,IAAI;AAE3B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,IAAI,kBAAkB;AAEtB,QAAM,SAAS;AAAA,IACb;AAAA,IACA,EAAE,MAAM,SAAS,MAAM,UAAU,MAAM;AAAA,IACvC,CAAC,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACvC;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,EAAE,MAAM,SAAS,OAAO,WAAW,UAAU,MAAM,GACnD;AACA,QAAM,qBAAqB,MAAM,WAAW;AAC5C,QAAM,aAAa,mBAAmB,MAAM,IAAI;AAChD,QAAM,mBAAmB;AAAA,IACvB,mBAAmB,OAAO,IAAI,EAAE,OAAO;AAAA,IACvC,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"]}
@@ -1,11 +1,11 @@
1
1
  import * as react from 'react';
2
- import { ControlComponentProps } from '../types/control-components.types.mjs';
2
+ import { ControlContextData } from '../types/control-components.types.mjs';
3
3
  import 'react-native';
4
4
  import '@impulse-ui-native/icon/types';
5
5
  import '@impulse-ui-native/theme';
6
6
  import '../types/button.types.mjs';
7
7
  import '../types/spinner.types.mjs';
8
8
 
9
- declare const ControlContext: react.Context<ControlComponentProps | undefined>;
9
+ declare const ControlContext: react.Context<ControlContextData | undefined>;
10
10
 
11
11
  export { ControlContext };
@@ -1,7 +1,7 @@
1
1
  import { ComponentType, ReactNode } from 'react';
2
2
  import { ViewProps, TextProps, TextInputProps } from 'react-native';
3
3
  import { IconProps } from '@impulse-ui-native/icon/types';
4
- import { FlexProps, DimensionProps, SpacingProps, ComponentSize, FieldVariant } from '@impulse-ui-native/theme';
4
+ import { FlexProps, DimensionProps, SpacingProps, ComponentSize, FieldVariant, FieldTone } from '@impulse-ui-native/theme';
5
5
  import { PressableCoreProps } from './button.types.mjs';
6
6
  import { SpinnerProps } from './spinner.types.mjs';
7
7
 
@@ -19,10 +19,13 @@ interface ControlComponentCommonProps extends ControlLayoutProps {
19
19
  interface ControlComponentProps {
20
20
  size: ComponentSize;
21
21
  variant: FieldVariant;
22
+ tone?: FieldTone;
22
23
  error: string | undefined;
23
24
  disabled: boolean | undefined;
24
25
  }
25
- type ControlContextData = ControlComponentProps;
26
+ interface ControlContextData extends ControlComponentProps {
27
+ tone: FieldTone;
28
+ }
26
29
  type ControlContainerProps = ViewProps;
27
30
  type ControlTriggerProps = PressableCoreProps;
28
31
  type ControlIconProps = IconProps;
@@ -1,4 +1,4 @@
1
- import { ComponentSize, FieldVariant } from '@impulse-ui-native/theme';
1
+ import { ComponentSize, FieldVariant, FieldTone } from '@impulse-ui-native/theme';
2
2
 
3
3
  interface ControlStateThemeProps {
4
4
  disabled?: boolean;
@@ -7,6 +7,7 @@ interface ControlStateThemeProps {
7
7
  interface ControlFieldThemeProps extends ControlStateThemeProps {
8
8
  size: ComponentSize;
9
9
  variant: FieldVariant;
10
+ tone: FieldTone;
10
11
  }
11
12
 
12
13
  export type { ControlFieldThemeProps, ControlStateThemeProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@impulse-ui-native/primitives",
3
- "version": "11.4.0",
3
+ "version": "12.0.0",
4
4
  "description": "Foundational UI primitives for building ImpulseUI Native components.",
5
5
  "keywords": [
6
6
  "react-native",
@@ -28,9 +28,9 @@
28
28
  ],
29
29
  "sideEffects": false,
30
30
  "dependencies": {
31
- "@impulse-ui-native/theme": "11.4.0",
32
- "@impulse-ui-native/icon": "11.4.0",
33
- "@impulse-ui-native/core": "11.4.0"
31
+ "@impulse-ui-native/theme": "12.0.0",
32
+ "@impulse-ui-native/icon": "12.0.0",
33
+ "@impulse-ui-native/core": "12.0.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@impulse-ui-native/eslint-config": "1.0.0",