@utilitywarehouse/hearth-react-native 0.32.1 → 0.32.3

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 (40) hide show
  1. package/.storybook/main.ts +7 -7
  2. package/.storybook/manager.ts +4 -2
  3. package/.storybook/preview.tsx +4 -1
  4. package/.turbo/turbo-build.log +1 -4
  5. package/.turbo/{turbo-lint.log → turbo-lint$colon$fix.log} +13 -16
  6. package/CHANGELOG.md +28 -0
  7. package/build/components/Accordion/Accordion.d.ts +6 -6
  8. package/build/components/Badge/Badge.js +2 -2
  9. package/build/components/Banner/Banner.props.d.ts +2 -0
  10. package/build/components/Button/Button.d.ts +5 -5
  11. package/build/components/Card/Card.d.ts +1 -1
  12. package/build/components/Card/CardAction/CardAction.d.ts +1 -1
  13. package/build/components/Carousel/CarouselControlItem.d.ts +1 -1
  14. package/build/components/Checkbox/Checkbox.d.ts +1 -1
  15. package/build/components/ExpandableCard/ExpandableCardTrigger.d.ts +1 -1
  16. package/build/components/FormField/FormField.d.ts +1 -1
  17. package/build/components/Icons/CircleIcon.d.ts +2 -2
  18. package/build/components/Input/Input.d.ts +4 -4
  19. package/build/components/Input/InputField.js +1 -3
  20. package/build/components/Link/Link.d.ts +1 -1
  21. package/build/components/List/ListAction/ListAction.d.ts +1 -1
  22. package/build/components/List/ListItem/ListItem.d.ts +1 -1
  23. package/build/components/Menu/MenuItem.d.ts +1 -1
  24. package/build/components/PillGroup/Pill.d.ts +1 -1
  25. package/build/components/Radio/Radio.d.ts +1 -1
  26. package/build/components/RadioCard/RadioCard.d.ts +7 -7
  27. package/build/components/SegmentedControl/SegmentedControlOption.d.ts +1 -1
  28. package/build/components/StepperInput/StepperButton.d.ts +1 -1
  29. package/build/components/Tabs/Tab.d.ts +1 -1
  30. package/build/components/Tabs/Tab.js +4 -4
  31. package/build/components/Textarea/Textarea.d.ts +2 -2
  32. package/build/components/ToggleButton/ToggleButton.d.ts +2 -2
  33. package/docs/changelog.mdx +90 -0
  34. package/package.json +15 -12
  35. package/src/components/Badge/Badge.tsx +2 -2
  36. package/src/components/Banner/Banner.props.ts +2 -0
  37. package/src/components/ExpandableCard/ExpandableCardTrigger.tsx +0 -1
  38. package/src/components/Input/InputField.tsx +0 -1
  39. package/src/components/Tabs/Tab.tsx +4 -5
  40. package/tsconfig.json +4 -0
@@ -1,5 +1,5 @@
1
- import { fileURLToPath } from "node:url";
2
- import { dirname } from "node:path";
1
+ import { fileURLToPath } from 'node:url';
2
+ import { dirname } from 'node:path';
3
3
  import remarkGfm from 'remark-gfm';
4
4
  import svgr from 'vite-plugin-svgr';
5
5
 
@@ -14,9 +14,9 @@ const unistylesPluginOptions = {
14
14
  const config = {
15
15
  stories: ['../**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
16
16
  addons: [
17
- getAbsolutePath("@chromatic-com/storybook"),
17
+ getAbsolutePath('@chromatic-com/storybook'),
18
18
  {
19
- name: getAbsolutePath("@storybook/addon-docs"),
19
+ name: getAbsolutePath('@storybook/addon-docs'),
20
20
  options: {
21
21
  mdxPluginOptions: {
22
22
  mdxCompileOptions: {
@@ -25,11 +25,11 @@ const config = {
25
25
  },
26
26
  },
27
27
  },
28
- getAbsolutePath("@storybook/addon-a11y"),
29
- getAbsolutePath("@storybook/addon-vitest"),
28
+ getAbsolutePath('@storybook/addon-a11y'),
29
+ getAbsolutePath('@storybook/addon-vitest'),
30
30
  ],
31
31
  framework: {
32
- name: getAbsolutePath("@storybook/react-native-web-vite"),
32
+ name: getAbsolutePath('@storybook/react-native-web-vite'),
33
33
  options: {
34
34
  pluginReactOptions: {
35
35
  babel: {
@@ -1,8 +1,10 @@
1
1
  import '@utilitywarehouse/hearth-fonts';
2
2
  import { addons } from 'storybook/manager-api';
3
- import '@utilitywarehouse/hearth-tokens/index.css';
4
3
  import '../../../shared/storybook/styles/manager.css';
5
- import theme from '../../../shared/storybook/theme';
4
+ import { config } from '../../../shared/storybook/theme';
5
+ import { create } from 'storybook/theming';
6
+
7
+ const theme = create(config);
6
8
 
7
9
  addons.setConfig({
8
10
  theme,
@@ -6,9 +6,12 @@ import { useEffect } from 'react';
6
6
  import { SafeAreaProvider } from 'react-native-safe-area-context';
7
7
  import '../../../shared/storybook/styles/diff-highlighting.css';
8
8
  import '../../../shared/storybook/styles/preview.css';
9
- import theme from '../../../shared/storybook/theme';
10
9
  import { breakpoints, StyleSheet, themes, UnistylesRuntime } from '../src/core';
11
10
  import { initializePrism } from './prism-setup';
11
+ import { config } from '../../../shared/storybook/theme';
12
+ import { create } from 'storybook/theming';
13
+
14
+ const theme = create(config);
12
15
 
13
16
  // Initialize Prism.js for syntax highlighting
14
17
  initializePrism();
@@ -1,4 +1 @@
1
-
2
- > @utilitywarehouse/hearth-react-native@0.32.1 build /home/runner/work/hearth/hearth/packages/react-native
3
- > tsc
4
-
1
+ $ tsc
@@ -1,7 +1,4 @@
1
-
2
- > @utilitywarehouse/hearth-react-native@0.32.1 lint /home/runner/work/hearth/hearth/packages/react-native
3
- > TIMING=1 eslint .
4
-
1
+ $ TIMING=1 eslint --fix .
5
2
 
6
3
  /home/runner/work/hearth/hearth/packages/react-native/src/components/Carousel/Carousel.context.tsx
7
4
  6:14 warning Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components react-refresh/only-export-components
@@ -45,15 +42,15 @@
45
42
 
46
43
  ✖ 20 problems (0 errors, 20 warnings)
47
44
 
48
- Rule | Time (ms) | Relative
49
- :-----------------------------------------|----------:|--------:
50
- @typescript-eslint/no-unused-vars | 1452.998 | 57.8%
51
- react-hooks/exhaustive-deps | 126.724 | 5.0%
52
- no-global-assign | 93.240 | 3.7%
53
- react-hooks/rules-of-hooks | 91.457 | 3.6%
54
- @typescript-eslint/ban-ts-comment | 64.809 | 2.6%
55
- no-unexpected-multiline | 56.861 | 2.3%
56
- @typescript-eslint/triple-slash-reference | 35.707 | 1.4%
57
- no-misleading-character-class | 35.239 | 1.4%
58
- no-regex-spaces | 34.132 | 1.4%
59
- no-useless-escape | 32.069 | 1.3%
45
+ Rule | Time (ms) | Relative
46
+ :---------------------------------|----------:|--------:
47
+ @typescript-eslint/no-unused-vars | 1235.710 | 58.8%
48
+ react-hooks/rules-of-hooks | 84.526 | 4.0%
49
+ react-hooks/exhaustive-deps | 83.725 | 4.0%
50
+ no-global-assign | 63.566 | 3.0%
51
+ no-useless-escape | 42.579 | 2.0%
52
+ no-unexpected-multiline | 40.934 | 1.9%
53
+ no-fallthrough | 40.545 | 1.9%
54
+ @typescript-eslint/ban-ts-comment | 37.277 | 1.8%
55
+ no-regex-spaces | 35.268 | 1.7%
56
+ no-misleading-character-class | 28.595 | 1.4%
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @utilitywarehouse/hearth-react-native
2
2
 
3
+ ## 0.32.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1192](https://github.com/utilitywarehouse/hearth/pull/1192) [`a74bf02`](https://github.com/utilitywarehouse/hearth/commit/a74bf02c58c12e1b42351e0d7f8e3e79ea0acbd6) Thanks [@robphoenix](https://github.com/robphoenix)! - 🧹 [HOUSEKEEPING]: Fix dependencies and types
8
+
9
+ ## 0.32.2
10
+
11
+ ### Patch Changes
12
+
13
+ - [#1164](https://github.com/utilitywarehouse/hearth/pull/1164) [`c8848d9`](https://github.com/utilitywarehouse/hearth/commit/c8848d9b01611e4c25b9caef7f211b8c623432c4) Thanks [@MichalCiesliczka](https://github.com/MichalCiesliczka)! - 🐛 [FIX]: Badge and Tabs now adapt their height for larger accessibility font sizes.
14
+
15
+ When larger text sizes are enabled (for example in iOS accessibility settings),
16
+ Badge and Tabs no longer clip text within fixed-height layouts. Their containers
17
+ now grow to fit scaled text while keeping the default visual sizing at standard
18
+ font settings.
19
+
20
+ **Components affected**:
21
+ - Badge
22
+ - Tab
23
+
24
+ **Developer changes**:
25
+
26
+ No code changes are required.
27
+
28
+ - Updated dependencies [[`e4167f2`](https://github.com/utilitywarehouse/hearth/commit/e4167f27325dacc0cbc1feae456697387162aa77)]:
29
+ - @utilitywarehouse/hearth-react-native-icons@0.8.1
30
+
3
31
  ## 0.32.1
4
32
 
5
33
  ### Patch Changes
@@ -1,19 +1,19 @@
1
1
  import { AccordionProps } from './Accordion.props';
2
2
  import { AccordionItemProps } from './AccordionItem.props';
3
- export declare const AccordionHeader: import("react").ForwardRefExoticComponent<import("react-native").ViewProps & import("react").RefAttributes<import("react-native").ViewProps>>;
4
- export declare const AccordionTrigger: import("react").ForwardRefExoticComponent<Omit<import("react-native").PressableProps & {
3
+ export declare const AccordionHeader: import("react").ForwardRefExoticComponent<import("react-native/types").ViewProps & import("react").RefAttributes<import("react-native/types").ViewProps>>;
4
+ export declare const AccordionTrigger: import("react").ForwardRefExoticComponent<Omit<import("react-native/types").PressableProps & {
5
5
  states?: {
6
6
  active?: boolean;
7
7
  };
8
- }, "children"> & import("@gluestack-ui/accordion/lib/typescript/types").IAccordionTriggerProps & import("react").RefAttributes<import("react-native").PressableProps & {
8
+ }, "children"> & import("@gluestack-ui/accordion/lib/typescript/types").IAccordionTriggerProps & import("react").RefAttributes<import("react-native/types").PressableProps & {
9
9
  states?: {
10
10
  active?: boolean;
11
11
  };
12
12
  }>>;
13
- export declare const AccordionContent: import("react").ForwardRefExoticComponent<import("react-native").ViewProps & import("react").RefAttributes<import("react-native").ViewProps>>;
14
- export declare const AccordionContentText: import("react").ForwardRefExoticComponent<import("react-native").TextProps & import("react").RefAttributes<import("react-native").TextProps>>;
13
+ export declare const AccordionContent: import("react").ForwardRefExoticComponent<import("react-native/types").ViewProps & import("react").RefAttributes<import("react-native/types").ViewProps>>;
14
+ export declare const AccordionContentText: import("react").ForwardRefExoticComponent<import("react-native/types").TextProps & import("react").RefAttributes<import("react-native/types").TextProps>>;
15
15
  export declare const AccordionIcon: import("react").ForwardRefExoticComponent<import("..").IconProps & import("react").RefAttributes<import("..").IconProps>>;
16
- export declare const AccordionTitleText: import("react").ForwardRefExoticComponent<import("react-native").TextProps & import("react").RefAttributes<import("react-native").TextProps>>;
16
+ export declare const AccordionTitleText: import("react").ForwardRefExoticComponent<import("react-native/types").TextProps & import("react").RefAttributes<import("react-native/types").TextProps>>;
17
17
  declare const Accordion: {
18
18
  ({ children, collapsible, type, heading, helperText, ...props }: AccordionProps): import("react/jsx-runtime").JSX.Element;
19
19
  displayName: string;
@@ -47,11 +47,11 @@ const styles = StyleSheet.create(theme => ({
47
47
  size: {
48
48
  sm: {
49
49
  paddingVertical: theme.components.badge.sm.paddingVertical,
50
- height: theme.components.badge.sm.height,
50
+ minHeight: theme.components.badge.sm.height,
51
51
  },
52
52
  md: {
53
53
  paddingVertical: theme.components.badge.md.paddingVertical,
54
- height: theme.components.badge.md.height,
54
+ minHeight: theme.components.badge.md.height,
55
55
  },
56
56
  },
57
57
  flatBase: {
@@ -1,4 +1,5 @@
1
1
  import type { ComponentType, ReactElement, ReactNode } from 'react';
2
+ import type { StyleProp, ViewStyle } from 'react-native';
2
3
  import type CardProps from '../Card/Card.props';
3
4
  export type BannerDirection = 'horizontal' | 'vertical';
4
5
  export interface BannerProps extends Omit<CardProps, 'noPadding' | 'variant' | 'space' | 'gap' | 'rowGap' | 'columnGap' | 'flexDirection' | 'flexWrap' | 'alignItems' | 'justifyContent'> {
@@ -71,5 +72,6 @@ export interface BannerProps extends Omit<CardProps, 'noPadding' | 'variant' | '
71
72
  * @default 'center'
72
73
  */
73
74
  alignChevron?: 'center' | 'start' | 'end';
75
+ style?: StyleProp<ViewStyle>;
74
76
  }
75
77
  export default BannerProps;
@@ -1,15 +1,15 @@
1
1
  import type { ButtonProps } from './Button.props';
2
- export declare const ButtonText: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native").TextProps> & import("react-native").TextProps>;
2
+ export declare const ButtonText: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native/types").TextProps> & import("react-native/types").TextProps>;
3
3
  export declare const ButtonSpinner: import("react").ForwardRefExoticComponent<Omit<Omit<import("..").SpinnerProps, "size">, "ref"> & import("react").RefAttributes<Omit<import("..").SpinnerProps, "size">>>;
4
4
  export declare const ButtonIcon: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("..").IconProps> & import("..").IconProps>;
5
- export declare const ButtonGroupComponent: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native").ViewProps & {
6
- flexDirection?: import("react-native").ViewStyle["flexDirection"];
5
+ export declare const ButtonGroupComponent: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native/types").ViewProps & {
6
+ flexDirection?: import("react-native/types").ViewStyle["flexDirection"];
7
7
  reversed?: boolean;
8
8
  attached?: boolean;
9
9
  space?: import("../../types").SpacingValues;
10
10
  spacing?: import("../../types").SpacingValues;
11
- }> & import("react-native").ViewProps & {
12
- flexDirection?: import("react-native").ViewStyle["flexDirection"];
11
+ }> & import("react-native/types").ViewProps & {
12
+ flexDirection?: import("react-native/types").ViewStyle["flexDirection"];
13
13
  reversed?: boolean;
14
14
  attached?: boolean;
15
15
  space?: import("../../types").SpacingValues;
@@ -3,7 +3,7 @@ declare const Card: import("react").ForwardRefExoticComponent<import("./Card.pro
3
3
  active?: boolean;
4
4
  disabled?: boolean;
5
5
  };
6
- } & Omit<import("react-native").PressableProps, "children"> & {
6
+ } & Omit<import("react-native/types").PressableProps, "children"> & {
7
7
  tabIndex?: 0 | -1 | undefined;
8
8
  } & {
9
9
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -4,7 +4,7 @@ declare const CardAction: import("react").ForwardRefExoticComponent<(((import(".
4
4
  disabled?: boolean;
5
5
  };
6
6
  isFirst?: boolean;
7
- }) & Omit<import("react-native").PressableProps, "children">) & {
7
+ }) & Omit<import("react-native/types").PressableProps, "children">) & {
8
8
  tabIndex?: 0 | -1 | undefined;
9
9
  } & {
10
10
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -10,7 +10,7 @@ declare const CarouselControlItem: import("react").ForwardRefExoticComponent<Car
10
10
  active?: boolean;
11
11
  disabled?: boolean;
12
12
  };
13
- } & Omit<import("react-native").PressableProps, "children"> & {
13
+ } & Omit<import("react-native/types").PressableProps, "children"> & {
14
14
  tabIndex?: 0 | -1 | undefined;
15
15
  } & {
16
16
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -4,7 +4,7 @@ declare const CheckboxGroup: import("react").ForwardRefExoticComponent<import("r
4
4
  }> & import("./CheckboxGroup.props").default & {
5
5
  isCard?: boolean;
6
6
  } & import("@gluestack-ui/checkbox/lib/typescript/types").ICheckboxGroup>;
7
- declare const CheckboxIndicator: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native").ViewProps> & import("react-native").ViewProps>;
7
+ declare const CheckboxIndicator: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native/types").ViewProps> & import("react-native/types").ViewProps>;
8
8
  declare const CheckboxIcon: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("..").IconProps> & import("..").IconProps & {
9
9
  forceMount?: boolean;
10
10
  }>;
@@ -3,7 +3,7 @@ declare const ExpandableCardTrigger: import("react").ForwardRefExoticComponent<(
3
3
  active?: boolean;
4
4
  disabled?: boolean;
5
5
  };
6
- }) & Omit<import("react-native").PressableProps, "children">) & {
6
+ }) & Omit<import("react-native/types").PressableProps, "children">) & {
7
7
  tabIndex?: 0 | -1 | undefined;
8
8
  } & {
9
9
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -1,6 +1,6 @@
1
1
  import { View } from 'react-native';
2
2
  import FormFieldProps from './FormField.props';
3
- export declare const FormFieldComponent: import("@gluestack-ui/form-control/lib/types").IFormControlComponentType<import("react-native").ViewProps, Omit<import("../Helper/Helper.props").default, "validationStatus">, Omit<import("../Helper/Helper.props").default, "validationStatus">, Omit<import("..").IconProps, "as">, unknown, Omit<import("../Label/Label.props").default, "disabled">, unknown, Omit<import("../Helper/Helper.props").default, "validationStatus">, import("../BodyText").BodyTextProps>;
3
+ export declare const FormFieldComponent: import("@gluestack-ui/form-control/lib/types").IFormControlComponentType<import("react-native/types").ViewProps, Omit<import("../Helper/Helper.props").default, "validationStatus">, Omit<import("../Helper/Helper.props").default, "validationStatus">, Omit<import("..").IconProps, "as">, unknown, Omit<import("../Label/Label.props").default, "disabled">, unknown, Omit<import("../Helper/Helper.props").default, "validationStatus">, import("../BodyText").BodyTextProps>;
4
4
  export declare const FormFieldLabel: import("react").ForwardRefExoticComponent<import("react").RefAttributes<unknown>> & {
5
5
  Text: import("react").ForwardRefExoticComponent<Omit<Omit<import("../Label/Label.props").default, "disabled">, "ref"> & import("react").RefAttributes<Omit<import("../Label/Label.props").default, "disabled">>>;
6
6
  };
@@ -1,5 +1,5 @@
1
1
  declare const CircleIcon: import("@gluestack-ui/icon/lib/typescript/createIcon").IIconComponentType<import("react-native-svg").SvgProps | {
2
- fill?: import("react-native").ColorValue | undefined;
3
- stroke?: import("react-native").ColorValue | undefined;
2
+ fill?: import("react-native/types").ColorValue | undefined;
3
+ stroke?: import("react-native/types").ColorValue | undefined;
4
4
  }>;
5
5
  export default CircleIcon;
@@ -9,13 +9,13 @@ export declare const InputComponent: import("@gluestack-ui/input/lib/typescript/
9
9
  };
10
10
  }, import("..").IconProps & {
11
11
  as?: ComponentType;
12
- }, import("react-native").ViewProps, import("react-native").TextInputProps & {
12
+ }, import("react-native/types").ViewProps, import("react-native/types").TextInputProps & {
13
13
  inBottomSheet?: boolean;
14
14
  } & import("react").RefAttributes<TextInput>>;
15
- export declare const InputSlot: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native").ViewProps> & import("react-native").ViewProps & import("@gluestack-ui/input/lib/typescript/types").IInputSlotProps>;
16
- export declare const InputField: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native").TextInputProps & {
15
+ export declare const InputSlot: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native/types").ViewProps> & import("react-native/types").ViewProps & import("@gluestack-ui/input/lib/typescript/types").IInputSlotProps>;
16
+ export declare const InputField: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native/types").TextInputProps & {
17
17
  inBottomSheet?: boolean;
18
- } & import("react").RefAttributes<TextInput>> & Omit<import("react-native").TextInputProps & {
18
+ } & import("react").RefAttributes<TextInput>> & Omit<import("react-native/types").TextInputProps & {
19
19
  inBottomSheet?: boolean;
20
20
  } & import("react").RefAttributes<TextInput>, "ref"> & import("@gluestack-ui/input/lib/typescript/types").IInputProps>;
21
21
  export declare const InputIcon: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("..").IconProps & {
@@ -10,9 +10,7 @@ const InputField = forwardRef(({ style, inBottomSheet = false, ...props }, ref)
10
10
  styles.useVariants({ focused, type });
11
11
  const { color } = useTheme();
12
12
  if (inBottomSheet) {
13
- return (
14
- // @ts-expect-error - BottomSheetTextInput has incompatible event types with TextInput
15
- _jsx(BottomSheetTextInput, { ref: ref, placeholderTextColor: color.text.secondary, selectionColor: color.surface.brand.default, cursorColor: color.surface.brand.default, verticalAlign: "middle", "aria-disabled": disabled, ...props, style: [styles.input, style] }));
13
+ return (_jsx(BottomSheetTextInput, { ref: ref, placeholderTextColor: color.text.secondary, selectionColor: color.surface.brand.default, cursorColor: color.surface.brand.default, verticalAlign: "middle", "aria-disabled": disabled, ...props, style: [styles.input, style] }));
16
14
  }
17
15
  return (_jsx(RNTextInput, { ref: ref, placeholderTextColor: color.text.secondary, selectionColor: color.surface.brand.default, cursorColor: color.surface.brand.default, verticalAlign: "middle", "aria-disabled": disabled, ...props, style: [styles.input, style] }));
18
16
  });
@@ -1,5 +1,5 @@
1
1
  import type { LinkProps } from './Link.props';
2
- export declare const LinkText: import("react").ForwardRefExoticComponent<import("react-native").TextProps & import("react").RefAttributes<import("react-native").TextProps>>;
2
+ export declare const LinkText: import("react").ForwardRefExoticComponent<import("react-native/types").TextProps & import("react").RefAttributes<import("react-native/types").TextProps>>;
3
3
  declare const Link: {
4
4
  ({ children, icon, disabled, target, iconPosition, showIcon, textStyle, iconStyle, ...props }: LinkProps): import("react/jsx-runtime").JSX.Element;
5
5
  displayName: string;
@@ -4,7 +4,7 @@ declare const ListAction: import("react").ForwardRefExoticComponent<ListActionPr
4
4
  active?: boolean;
5
5
  disabled?: boolean;
6
6
  };
7
- } & Omit<import("react-native").PressableProps, "children"> & {
7
+ } & Omit<import("react-native/types").PressableProps, "children"> & {
8
8
  tabIndex?: 0 | -1 | undefined;
9
9
  } & {
10
10
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -3,7 +3,7 @@ declare const ListItem: import("react").ForwardRefExoticComponent<(((import("./L
3
3
  active?: boolean;
4
4
  disabled?: boolean;
5
5
  };
6
- }) & Omit<import("react-native").PressableProps, "children">) & {
6
+ }) & Omit<import("react-native/types").PressableProps, "children">) & {
7
7
  tabIndex?: 0 | -1 | undefined;
8
8
  } & {
9
9
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -4,7 +4,7 @@ declare const MenuItem: import("react").ForwardRefExoticComponent<MenuItemProps
4
4
  active?: boolean;
5
5
  disabled?: boolean;
6
6
  };
7
- } & Omit<import("react-native").PressableProps, "children"> & {
7
+ } & Omit<import("react-native/types").PressableProps, "children"> & {
8
8
  tabIndex?: 0 | -1 | undefined;
9
9
  } & {
10
10
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -3,7 +3,7 @@ export declare const Pill: import("react").ForwardRefExoticComponent<PillProps &
3
3
  states?: {
4
4
  active?: boolean;
5
5
  };
6
- } & Omit<import("react-native").PressableProps, "children"> & {
6
+ } & Omit<import("react-native/types").PressableProps, "children"> & {
7
7
  tabIndex?: 0 | -1 | undefined;
8
8
  } & {
9
9
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -4,7 +4,7 @@ declare const RadioGroup: import("react").ForwardRefExoticComponent<import("reac
4
4
  }> & import("./RadioGroup.props").default & {
5
5
  isCard?: boolean;
6
6
  } & import("@gluestack-ui/radio/lib/typescript/types").IRadioGroupProps>;
7
- declare const RadioIndicator: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native").ViewProps> & import("react-native").ViewProps>;
7
+ declare const RadioIndicator: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native/types").ViewProps> & import("react-native/types").ViewProps>;
8
8
  declare const RadioIcon: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("..").IconProps> & import("..").IconProps & {
9
9
  forceMount?: boolean;
10
10
  }>;
@@ -5,25 +5,25 @@ declare const RadioCardGroup: import("react").ForwardRefExoticComponent<import("
5
5
  onChange?: (value: string) => void;
6
6
  gap?: keyof typeof import("../../tokens").space;
7
7
  ref?: import("react").Ref<View>;
8
- } & import("react-native").ViewProps & {
8
+ } & import("react-native/types").ViewProps & {
9
9
  columns?: never;
10
- flexDirection?: import("react-native").ViewStyle["flexDirection"];
11
- flexWrap?: import("react-native").ViewStyle["flexWrap"];
12
- alignItems?: import("react-native").ViewStyle["alignItems"];
13
- justifyContent?: import("react-native").ViewStyle["justifyContent"];
10
+ flexDirection?: import("react-native/types").ViewStyle["flexDirection"];
11
+ flexWrap?: import("react-native/types").ViewStyle["flexWrap"];
12
+ alignItems?: import("react-native/types").ViewStyle["alignItems"];
13
+ justifyContent?: import("react-native/types").ViewStyle["justifyContent"];
14
14
  }, "ref"> | Omit<{
15
15
  value?: string;
16
16
  onChange?: (value: string) => void;
17
17
  gap?: keyof typeof import("../../tokens").space;
18
18
  ref?: import("react").Ref<View>;
19
- } & import("react-native").ViewProps & {
19
+ } & import("react-native/types").ViewProps & {
20
20
  columns: import("..").GridProps["columns"];
21
21
  flexDirection?: never;
22
22
  flexWrap?: never;
23
23
  alignItems?: never;
24
24
  justifyContent?: never;
25
25
  }, "ref">) & import("@gluestack-ui/radio/lib/typescript/types").IRadioGroupProps)>;
26
- declare const RadioCardIndicator: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native").ViewProps> & import("react-native").ViewProps>;
26
+ declare const RadioCardIndicator: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native/types").ViewProps> & import("react-native/types").ViewProps>;
27
27
  declare const RadioCardIcon: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("..").IconProps> & import("..").IconProps & {
28
28
  forceMount?: boolean;
29
29
  }>;
@@ -4,7 +4,7 @@ declare const SegmentedControlOption: import("react").ForwardRefExoticComponent<
4
4
  active?: boolean;
5
5
  disabled?: boolean;
6
6
  };
7
- } & Omit<import("react-native").PressableProps, "children"> & {
7
+ } & Omit<import("react-native/types").PressableProps, "children"> & {
8
8
  tabIndex?: 0 | -1 | undefined;
9
9
  } & {
10
10
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -8,7 +8,7 @@ declare const StepperButton: import("react").ForwardRefExoticComponent<{
8
8
  active?: boolean;
9
9
  disabled?: boolean;
10
10
  };
11
- } & Omit<import("react-native").PressableProps, "children"> & {
11
+ } & {
12
12
  tabIndex?: 0 | -1 | undefined;
13
13
  } & {
14
14
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -4,7 +4,7 @@ declare const PressableTab: import("react").ForwardRefExoticComponent<TabProps &
4
4
  active?: boolean;
5
5
  disabled?: boolean;
6
6
  };
7
- } & Omit<import("react-native").PressableProps, "children"> & {
7
+ } & Omit<import("react-native/types").PressableProps, "children"> & {
8
8
  tabIndex?: 0 | -1 | undefined;
9
9
  } & {
10
10
  children?: import("react").ReactNode | (({ hovered, pressed, focused, focusVisible, disabled, }: {
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createPressable } from '@gluestack-ui/pressable';
2
3
  import { useCallback, useRef } from 'react';
3
4
  import { Platform, Pressable, View } from 'react-native';
4
5
  import { StyleSheet } from 'react-native-unistyles';
6
+ import { BodyText } from '../BodyText';
5
7
  import { Icon } from '../Icon';
6
8
  import { useTabsContext } from './Tabs.context';
7
- import { createPressable } from '@gluestack-ui/pressable';
8
- import { BodyText } from '../BodyText';
9
9
  const Tab = ({ value, children, icon, disabled, style, states, ...props }) => {
10
10
  const { value: active, select, size, disabled: allDisabled, registerTabLayout, } = useTabsContext();
11
11
  const { active: pressed } = states || { active: false };
@@ -49,8 +49,8 @@ const styles = StyleSheet.create(theme => ({
49
49
  },
50
50
  variants: {
51
51
  size: {
52
- md: { height: theme.components.tabs.md.height },
53
- lg: { height: theme.components.tabs.lg.height },
52
+ md: { minHeight: theme.components.tabs.md.height },
53
+ lg: { minHeight: theme.components.tabs.lg.height },
54
54
  },
55
55
  pressed: {
56
56
  true: {
@@ -5,7 +5,7 @@ export declare const TextareaComponent: import("@gluestack-ui/textarea/lib/types
5
5
  disabled?: boolean;
6
6
  readonly?: boolean;
7
7
  };
8
- }, import("react-native").TextInputProps>;
9
- export declare const TextareaField: import("react").ForwardRefExoticComponent<import("react-native").TextInputProps & import("react").RefAttributes<import("react-native").TextInputProps> & import("@gluestack-ui/textarea/lib/typescript/types").IInputProps>;
8
+ }, import("react-native/types").TextInputProps>;
9
+ export declare const TextareaField: import("react").ForwardRefExoticComponent<import("react-native/types").TextInputProps & import("react").RefAttributes<import("react-native/types").TextInputProps> & import("@gluestack-ui/textarea/lib/typescript/types").IInputProps>;
10
10
  declare const Textarea: ({ validationStatus, children, resizable, defaultHeight, disabled, focused, readonly, label, labelVariant, helperText, validText, invalidText, required, helperIcon, onLayout, ...props }: TextareaProps) => import("react/jsx-runtime").JSX.Element;
11
11
  export default Textarea;
@@ -1,7 +1,7 @@
1
1
  import type { ToggleButtonProps } from './ToggleButton.props';
2
- export declare const ToggleButtonText: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native").TextProps & {
2
+ export declare const ToggleButtonText: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("react-native/types").TextProps & {
3
3
  toggled: boolean;
4
- }> & import("react-native").TextProps & {
4
+ }> & import("react-native/types").TextProps & {
5
5
  toggled: boolean;
6
6
  }>;
7
7
  export declare const ToggleButtonIcon: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("..").IconProps & {
@@ -9,6 +9,96 @@ import { BackToTopButton, NextPrevPage } from './components';
9
9
  The changelog for the Hearth React Native library. Here you can find all the changes, improvements, and bug fixes for each version.
10
10
 
11
11
 
12
+ ## 0.32.3
13
+
14
+ ### Patch Changes
15
+
16
+ - [#1192](https://github.com/utilitywarehouse/hearth/pull/1192) [`a74bf02`](https://github.com/utilitywarehouse/hearth/commit/a74bf02c58c12e1b42351e0d7f8e3e79ea0acbd6) Thanks [@robphoenix](https://github.com/robphoenix)! - 🧹 [HOUSEKEEPING]: Fix dependencies and types
17
+
18
+ ## 0.32.2
19
+
20
+ ### Patch Changes
21
+
22
+ - [#1164](https://github.com/utilitywarehouse/hearth/pull/1164) [`c8848d9`](https://github.com/utilitywarehouse/hearth/commit/c8848d9b01611e4c25b9caef7f211b8c623432c4) Thanks [@MichalCiesliczka](https://github.com/MichalCiesliczka)! - 🐛 [FIX]: Badge and Tabs now adapt their height for larger accessibility font sizes.
23
+
24
+ When larger text sizes are enabled (for example in iOS accessibility settings),
25
+ Badge and Tabs no longer clip text within fixed-height layouts. Their containers
26
+ now grow to fit scaled text while keeping the default visual sizing at standard
27
+ font settings.
28
+
29
+ **Components affected**:
30
+ - Badge
31
+ - Tab
32
+
33
+ **Developer changes**:
34
+
35
+ No code changes are required.
36
+
37
+ - Updated dependencies [[`e4167f2`](https://github.com/utilitywarehouse/hearth/commit/e4167f27325dacc0cbc1feae456697387162aa77)]:
38
+ - @utilitywarehouse/hearth-react-native-icons@0.8.1
39
+
40
+ ## 0.32.1
41
+
42
+ ### Patch Changes
43
+
44
+ - [#1144](https://github.com/utilitywarehouse/hearth/pull/1144) [`85459f2`](https://github.com/utilitywarehouse/hearth/commit/85459f2f4d7dcd8a99685a11dcda070530cee8dc) Thanks [@jordmccord](https://github.com/jordmccord)! - 🐛 [FIX]: Add the missing `highlight` color scheme support across the `Banner` and `Card` components.
45
+
46
+ ## 0.32.0
47
+
48
+ ### Minor Changes
49
+
50
+ - [#1134](https://github.com/utilitywarehouse/hearth/pull/1134) [`8824186`](https://github.com/utilitywarehouse/hearth/commit/ebccb55afebcbd47508d7992614b2495c7839cc6) Thanks [@jordmccord](https://github.com/jordmccord)! - 🌟 [FEATURE]: Add `Roundel` status indicator component.
51
+
52
+ `Roundel` is a compact status indicator with `success`, `pending`, and `error` variants, intended for inline state cues.
53
+
54
+ **Components affected**:
55
+
56
+ - `Roundel`
57
+
58
+ **Developer changes**:
59
+
60
+ Import and use `Roundel` from `@utilitywarehouse/hearth-react-native`:
61
+
62
+ ```tsx
63
+ import { Roundel } from '@utilitywarehouse/hearth-react-native';
64
+
65
+ <Roundel variant="success" />;
66
+ ```
67
+
68
+ - [#1132](https://github.com/utilitywarehouse/hearth/pull/1132) [`8824186`](https://github.com/utilitywarehouse/hearth/commit/882418633ee8c3a11e204329d07363dc411996dc) Thanks [@jordmccord](https://github.com/jordmccord)! - 🌟 [FEATURE]: Add the `Rating` component
69
+
70
+ **Components affected**:
71
+ - `Rating`
72
+
73
+ **Developer changes**:
74
+
75
+ ```tsx
76
+ import { Rating } from '@utilitywarehouse/hearth-react-native';
77
+
78
+ const MyComponent = () => <Rating value={3} />;
79
+ ```
80
+
81
+ - [#1129](https://github.com/utilitywarehouse/hearth/pull/1129) [`ec385a8`](https://github.com/utilitywarehouse/hearth/commit/ec385a8185bfa4ec7f4d5f1366ecc069a98cbba8) Thanks [@jordmccord](https://github.com/jordmccord)! - 🌟 [FEATURE]: Add `StepperInput` for controlled numeric input with increment and decrement buttons.
82
+
83
+ `StepperInput` is a new React Native form component for adjusting numeric values with direct text entry and dedicated step controls. It supports min and max bounds, configurable step size, validation and helper text through `FormField`, and an opt-in `focusInputOnStepPress` prop for keyboard-first flows.
84
+
85
+ **Components affected**:
86
+ - `StepperInput`
87
+
88
+ **Developer changes**:
89
+
90
+ Import and use `StepperInput` from `@utilitywarehouse/hearth-react-native`:
91
+
92
+ ```tsx
93
+ import { StepperInput } from '@utilitywarehouse/hearth-react-native';
94
+
95
+ <StepperInput label="Guests" min={1} max={10} value={value} onChangeText={setValue} />;
96
+ ```
97
+
98
+ ### Patch Changes
99
+
100
+ - [#1133](https://github.com/utilitywarehouse/hearth/pull/1133) [`5cae98e`](https://github.com/utilitywarehouse/hearth/commit/5cae98e640a708a7d99eaf0395b7b52e71b8e6ec) Thanks [@jordmccord](https://github.com/jordmccord)! - 💅 [ENHANCEMENT]: Add a `defaultHeight` prop to `Textarea` so the initial height can be configured.
101
+
12
102
  ## 0.31.1
13
103
 
14
104
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@utilitywarehouse/hearth-react-native",
3
- "version": "0.32.1",
3
+ "version": "0.32.3",
4
4
  "description": "Utility Warehouse React Native UI library",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -9,6 +9,7 @@
9
9
  "sideEffects": false,
10
10
  "dependencies": {
11
11
  "@gluestack-ui/accordion": "1.0.7",
12
+ "@gluestack-ui/form-control": "0.1.19",
12
13
  "@gluestack-ui/alert": "0.1.15",
13
14
  "@gluestack-ui/button": "1.0.7",
14
15
  "@gluestack-ui/checkbox": "0.1.32",
@@ -21,7 +22,8 @@
21
22
  "@gluestack-ui/switch": "0.1.22",
22
23
  "@gluestack-ui/textarea": "0.1.23",
23
24
  "@quidone/react-native-wheel-picker": "^1.6.1",
24
- "dayjs": "^1.11.13"
25
+ "dayjs": "^1.11.13",
26
+ "nanoid": "3.3.11"
25
27
  },
26
28
  "devDependencies": {
27
29
  "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
@@ -33,12 +35,13 @@
33
35
  "@storybook/addon-vitest": "^10.2.1",
34
36
  "@storybook/react-native-web-vite": "^10.2.1",
35
37
  "@types/prismjs": "^1.26.5",
36
- "@types/react-dom": "^19.1.6",
37
38
  "@types/react": "^19.1.10",
39
+ "@types/react-dom": "^19.1.6",
40
+ "@types/react-native": "^0.72.8",
38
41
  "@vitest/browser": "^3.2.4",
39
42
  "@vitest/coverage-v8": "^3.2.4",
40
43
  "chromatic": "^13.3.0",
41
- "eslint-plugin-storybook": "10.2.1",
44
+ "globals": "^15.15.0",
42
45
  "playwright": "^1.55.1",
43
46
  "prismjs": "^1.30.0",
44
47
  "react": "^19.1.0",
@@ -60,9 +63,9 @@
60
63
  "vite-plugin-svgr": "^4.5.0",
61
64
  "vitest": "^3.2.4",
62
65
  "@utilitywarehouse/hearth-fonts": "^0.0.4",
63
- "@utilitywarehouse/hearth-react-icons": "^0.8.0",
64
- "@utilitywarehouse/hearth-react-native-icons": "^0.8.0",
65
- "@utilitywarehouse/hearth-svg-assets": "^0.6.0",
66
+ "@utilitywarehouse/hearth-react-icons": "^0.8.1",
67
+ "@utilitywarehouse/hearth-react-native-icons": "^0.8.1",
68
+ "@utilitywarehouse/hearth-svg-assets": "^0.6.1",
66
69
  "@utilitywarehouse/hearth-tokens": "^0.2.4"
67
70
  },
68
71
  "peerDependencies": {
@@ -81,7 +84,7 @@
81
84
  "clean": "rm -rf node_modules rm -rf build .turbo",
82
85
  "generateColours": "node ./scripts/generateColours.js",
83
86
  "copyTokens": "node ./scripts/copyTokens.js",
84
- "copyChangelog": "node ./scripts/copyChangelog.js",
87
+ "copy:changelog": "node ./scripts/copyChangelog.js",
85
88
  "lint:fix": "TIMING=1 eslint --fix .",
86
89
  "lint": "TIMING=1 eslint .",
87
90
  "build": "tsc",
@@ -90,10 +93,10 @@
90
93
  "figma:publish": "figma connect publish",
91
94
  "test": "vitest run --config vitest.unit.config.ts",
92
95
  "test:storybook": "vitest run --project storybook",
93
- "dev": "npm run copyChangelog && storybook dev -p 6006",
94
- "dev:docs": "storybook dev -p 6002 --no-open --docs",
95
- "build:storybook": "npm run copyChangelog && storybook build",
96
- "build:storybook:docs": "npm run copyChangelog && storybook build --docs",
96
+ "dev": "npm run copy:changelog && storybook dev -p 6006",
97
+ "dev:docs": "storybook dev -p 6002 --no-open",
98
+ "build:storybook": "npm run copy:changelog && storybook build",
99
+ "build:storybook:docs": "npm run copy:changelog && storybook build --docs",
97
100
  "chromatic": "npx chromatic --project-token=chpt_cce0fb1ebd95d2a --build-script-name build:storybook"
98
101
  }
99
102
  }
@@ -78,11 +78,11 @@ const styles = StyleSheet.create(theme => ({
78
78
  size: {
79
79
  sm: {
80
80
  paddingVertical: theme.components.badge.sm.paddingVertical,
81
- height: theme.components.badge.sm.height,
81
+ minHeight: theme.components.badge.sm.height,
82
82
  },
83
83
  md: {
84
84
  paddingVertical: theme.components.badge.md.paddingVertical,
85
- height: theme.components.badge.md.height,
85
+ minHeight: theme.components.badge.md.height,
86
86
  },
87
87
  },
88
88
  flatBase: {
@@ -1,4 +1,5 @@
1
1
  import type { ComponentType, ReactElement, ReactNode } from 'react';
2
+ import type { StyleProp, ViewStyle } from 'react-native';
2
3
  import type CardProps from '../Card/Card.props';
3
4
 
4
5
  export type BannerDirection = 'horizontal' | 'vertical';
@@ -92,6 +93,7 @@ export interface BannerProps extends Omit<
92
93
  * @default 'center'
93
94
  */
94
95
  alignChevron?: 'center' | 'start' | 'end';
96
+ style?: StyleProp<ViewStyle>;
95
97
  }
96
98
 
97
99
  export default BannerProps;
@@ -4,7 +4,6 @@ import ExpandableCardTriggerRoot from './ExpandableCardTriggerRoot';
4
4
  const ExpandableCardTrigger = createPressable({
5
5
  Root: ExpandableCardTriggerRoot,
6
6
  });
7
-
8
7
  ExpandableCardTrigger.displayName = 'ExpandableCardTrigger';
9
8
 
10
9
  export default ExpandableCardTrigger;
@@ -13,7 +13,6 @@ const InputField = forwardRef<RNTextInput, TextInputProps & { inBottomSheet?: bo
13
13
 
14
14
  if (inBottomSheet) {
15
15
  return (
16
- // @ts-expect-error - BottomSheetTextInput has incompatible event types with TextInput
17
16
  <BottomSheetTextInput
18
17
  ref={ref as any}
19
18
  placeholderTextColor={color.text.secondary}
@@ -1,13 +1,12 @@
1
+ import { createPressable } from '@gluestack-ui/pressable';
1
2
  import { useCallback, useRef } from 'react';
2
3
  import { Platform, Pressable, View } from 'react-native';
3
4
  import { StyleSheet } from 'react-native-unistyles';
5
+ import { BodyText } from '../BodyText';
4
6
  import { Icon } from '../Icon';
5
7
  import type TabProps from './Tab.props';
6
8
  import { useTabsContext } from './Tabs.context';
7
9
 
8
- import { createPressable } from '@gluestack-ui/pressable';
9
- import { BodyText } from '../BodyText';
10
-
11
10
  const Tab = ({
12
11
  value,
13
12
  children,
@@ -87,8 +86,8 @@ const styles = StyleSheet.create(theme => ({
87
86
  },
88
87
  variants: {
89
88
  size: {
90
- md: { height: theme.components.tabs.md.height },
91
- lg: { height: theme.components.tabs.lg.height },
89
+ md: { minHeight: theme.components.tabs.md.height },
90
+ lg: { minHeight: theme.components.tabs.lg.height },
92
91
  },
93
92
  pressed: {
94
93
  true: {
package/tsconfig.json CHANGED
@@ -10,6 +10,10 @@
10
10
  ],
11
11
  "compilerOptions": {
12
12
  "baseUrl": ".",
13
+ "paths": {
14
+ "react-native": ["./node_modules/react-native"],
15
+ "react-native/*": ["./node_modules/react-native/*"]
16
+ },
13
17
  "ignoreDeprecations": "5.0",
14
18
  "noEmit": false,
15
19
  "declaration": true,