@factorialco/f0-react-native 0.34.0 → 0.36.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 (59) hide show
  1. package/README.md +7 -5
  2. package/lib/module/components/Button/index.js +1 -1
  3. package/lib/module/components/Button/index.js.map +1 -1
  4. package/lib/module/components/F0Button/F0Button.js +2 -0
  5. package/lib/module/components/F0Button/F0Button.js.map +1 -0
  6. package/lib/module/components/F0Button/F0Button.md +163 -0
  7. package/lib/module/components/F0Button/F0Button.styles.js +2 -0
  8. package/lib/module/components/F0Button/F0Button.styles.js.map +1 -0
  9. package/lib/module/components/F0Button/F0Button.types.js +2 -0
  10. package/lib/module/components/F0Button/F0Button.types.js.map +1 -0
  11. package/lib/module/components/F0Button/index.js +2 -0
  12. package/lib/module/components/F0Button/index.js.map +1 -0
  13. package/lib/module/components/Icon/index.js.map +1 -1
  14. package/lib/module/components/exports.js +1 -1
  15. package/lib/module/components/exports.js.map +1 -1
  16. package/lib/module/components/primitives/F0Image/F0Image.js +2 -0
  17. package/lib/module/components/primitives/F0Image/F0Image.js.map +1 -0
  18. package/lib/module/components/primitives/F0Image/F0Image.md +40 -0
  19. package/lib/module/components/primitives/F0Image/F0Image.types.js +2 -0
  20. package/lib/module/components/primitives/F0Image/F0Image.types.js.map +1 -0
  21. package/lib/module/components/primitives/F0Image/index.js +2 -0
  22. package/lib/module/components/primitives/F0Image/index.js.map +1 -0
  23. package/lib/typescript/components/Button/index.d.ts +18 -0
  24. package/lib/typescript/components/Button/index.d.ts.map +1 -1
  25. package/lib/typescript/components/F0Button/F0Button.d.ts +6 -0
  26. package/lib/typescript/components/F0Button/F0Button.d.ts.map +1 -0
  27. package/lib/typescript/components/F0Button/F0Button.styles.d.ts +161 -0
  28. package/lib/typescript/components/F0Button/F0Button.styles.d.ts.map +1 -0
  29. package/lib/typescript/components/F0Button/F0Button.types.d.ts +47 -0
  30. package/lib/typescript/components/F0Button/F0Button.types.d.ts.map +1 -0
  31. package/lib/typescript/components/F0Button/index.d.ts +4 -0
  32. package/lib/typescript/components/F0Button/index.d.ts.map +1 -0
  33. package/lib/typescript/components/Icon/index.d.ts +5 -0
  34. package/lib/typescript/components/Icon/index.d.ts.map +1 -1
  35. package/lib/typescript/components/exports.d.ts +2 -0
  36. package/lib/typescript/components/exports.d.ts.map +1 -1
  37. package/lib/typescript/components/primitives/F0Image/F0Image.d.ts +11 -0
  38. package/lib/typescript/components/primitives/F0Image/F0Image.d.ts.map +1 -0
  39. package/lib/typescript/components/primitives/F0Image/F0Image.types.d.ts +21 -0
  40. package/lib/typescript/components/primitives/F0Image/F0Image.types.d.ts.map +1 -0
  41. package/lib/typescript/components/primitives/F0Image/index.d.ts +3 -0
  42. package/lib/typescript/components/primitives/F0Image/index.d.ts.map +1 -0
  43. package/package.json +2 -1
  44. package/src/components/Button/__snapshots__/index.spec.tsx.snap +11 -11
  45. package/src/components/Button/index.tsx +22 -2
  46. package/src/components/F0Button/F0Button.md +163 -0
  47. package/src/components/F0Button/F0Button.styles.ts +141 -0
  48. package/src/components/F0Button/F0Button.tsx +228 -0
  49. package/src/components/F0Button/F0Button.types.ts +82 -0
  50. package/src/components/F0Button/__tests__/F0Button.spec.tsx +285 -0
  51. package/src/components/F0Button/__tests__/__snapshots__/F0Button.spec.tsx.snap +966 -0
  52. package/src/components/F0Button/index.ts +7 -0
  53. package/src/components/Icon/index.tsx +5 -0
  54. package/src/components/exports.ts +2 -0
  55. package/src/components/primitives/F0Image/F0Image.md +40 -0
  56. package/src/components/primitives/F0Image/F0Image.tsx +48 -0
  57. package/src/components/primitives/F0Image/F0Image.types.ts +23 -0
  58. package/src/components/primitives/F0Image/__tests__/F0Image.spec.tsx +46 -0
  59. package/src/components/primitives/F0Image/index.ts +2 -0
@@ -0,0 +1,7 @@
1
+ export { F0Button } from "./F0Button"
2
+ export { BUTTON_VARIANTS, BUTTON_SIZES } from "./F0Button.types"
3
+ export type {
4
+ F0ButtonProps,
5
+ F0ButtonVariant,
6
+ F0ButtonSize,
7
+ } from "./F0Button.types"
@@ -21,6 +21,11 @@ const iconVariants = tv({
21
21
  },
22
22
  })
23
23
 
24
+ /**
25
+ * @deprecated Use `F0IconProps` from `../primitives/F0Icon` instead.
26
+ * Migration: Replace `IconProps` with `F0IconProps`.
27
+ * `F0Icon` supports `icon`, `size`, `testID`, and `className`, and adds semantic `color` variants.
28
+ */
24
29
  export interface IconProps extends SvgProps, VariantProps<typeof iconVariants> {
25
30
  icon: IconType
26
31
  testID?: string
@@ -3,6 +3,7 @@ export * from "./Activity/ActivityItem"
3
3
  export * from "./Avatars/exports"
4
4
  export * from "./Badge"
5
5
  export * from "./Button"
6
+ export * from "./F0Button"
6
7
  export * from "./F0Badge"
7
8
  export * from "./Counter"
8
9
  export * from "./ExampleComponent"
@@ -18,4 +19,5 @@ export * from "./experimental/Lists/DetailsItemsList"
18
19
  // Export primitives
19
20
  export * from "./primitives/F0Text"
20
21
  export * from "./primitives/F0Icon"
22
+ export * from "./primitives/F0Image"
21
23
  export * from "./primitives/PressableFeedback"
@@ -0,0 +1,40 @@
1
+ # F0Image
2
+
3
+ Image primitive for React Native in F0.
4
+
5
+ ## Overview
6
+
7
+ `F0Image` is a thin wrapper around `expo-image` with className support and consistent defaults for `contentFit`, `transition`, and `cachePolicy`.
8
+
9
+ `expo-image` is a runtime peer dependency of `@factorialco/f0-react-native`. Ensure your app installs a compatible `expo-image` version.
10
+
11
+ ## Usage
12
+
13
+ <!-- prettier-ignore -->
14
+ ```tsx
15
+ import { F0Image } from "@factorialco/f0-react-native"
16
+
17
+ <F0Image
18
+ source={{ uri: "https://example.com/avatar.png" }}
19
+ className="h-8 w-8 rounded-full"
20
+ accessibilityLabel="Profile picture"
21
+ />
22
+ ```
23
+
24
+ ## Props
25
+
26
+ | Prop | Type | Default | Description |
27
+ | ------------- | ------------------- | ----------------- | ------------------------------ |
28
+ | `source` | `ImageSource` | required | Image source |
29
+ | `className` | `string` | `"h-full w-full"` | Utility classes for layout |
30
+ | `contentFit` | `ImageContentFit` | `"cover"` | Content fit mode |
31
+ | `transition` | `number \| boolean` | `150` | Transition duration / behavior |
32
+ | `cachePolicy` | `ImageCachePolicy` | `"memory-disk"` | Caching policy |
33
+
34
+ All other supported `expo-image` props are forwarded.
35
+
36
+ ## Testing
37
+
38
+ Main tests:
39
+
40
+ - `src/components/primitives/F0Image/__tests__/F0Image.spec.tsx`
@@ -0,0 +1,48 @@
1
+ import { Image as ExpoImage } from "expo-image"
2
+ import React from "react"
3
+ import { withUniwind } from "uniwind"
4
+
5
+ import { cn } from "../../../lib/utils"
6
+
7
+ import type { F0ImageProps } from "./F0Image.types"
8
+
9
+ const UniwindExpoImage = withUniwind(ExpoImage)
10
+
11
+ /**
12
+ * F0Image - Image primitive for React Native in F0.
13
+ *
14
+ * Wraps `expo-image` to provide className support and sane defaults.
15
+ */
16
+ const F0Image = React.memo(
17
+ React.forwardRef<React.ElementRef<typeof ExpoImage>, F0ImageProps>(
18
+ (
19
+ {
20
+ source,
21
+ className,
22
+ style,
23
+ contentFit = "cover",
24
+ transition = 150,
25
+ cachePolicy = "memory-disk",
26
+ ...rest
27
+ },
28
+ ref
29
+ ) => {
30
+ return (
31
+ <UniwindExpoImage
32
+ ref={ref}
33
+ source={source}
34
+ className={cn("h-full w-full", className)}
35
+ style={style}
36
+ contentFit={contentFit}
37
+ transition={transition}
38
+ cachePolicy={cachePolicy}
39
+ {...rest}
40
+ />
41
+ )
42
+ }
43
+ )
44
+ )
45
+
46
+ F0Image.displayName = "F0Image"
47
+
48
+ export { F0Image }
@@ -0,0 +1,23 @@
1
+ import type { ImageProps as ExpoImageProps } from "expo-image"
2
+
3
+ /**
4
+ * Public F0Image props.
5
+ *
6
+ * Thin primitive wrapper around `expo-image` with className support.
7
+ */
8
+ export interface F0ImageProps extends Omit<ExpoImageProps, "source" | "style"> {
9
+ /**
10
+ * Image source passed to expo-image.
11
+ */
12
+ source: ExpoImageProps["source"]
13
+
14
+ /**
15
+ * Utility classes for sizing/layout.
16
+ */
17
+ className?: string
18
+
19
+ /**
20
+ * Inline style escape hatch.
21
+ */
22
+ style?: ExpoImageProps["style"]
23
+ }
@@ -0,0 +1,46 @@
1
+ import { render } from "@testing-library/react-native"
2
+ import React from "react"
3
+
4
+ import { F0Image } from "../"
5
+
6
+ describe("F0Image", () => {
7
+ it("renders with a remote source", () => {
8
+ const { getByTestId } = render(
9
+ <F0Image
10
+ source={{ uri: "https://example.com/avatar.png" }}
11
+ testID="f0-image"
12
+ />
13
+ )
14
+
15
+ expect(getByTestId("f0-image")).toBeTruthy()
16
+ })
17
+
18
+ it("applies sane defaults", () => {
19
+ const { getByTestId } = render(
20
+ <F0Image
21
+ source={{ uri: "https://example.com/defaults.png" }}
22
+ testID="f0-image-defaults"
23
+ />
24
+ )
25
+ const image = getByTestId("f0-image-defaults")
26
+
27
+ expect(image.props.contentFit).toBe("cover")
28
+ expect(image.props.transition).toBe(150)
29
+ expect(image.props.cachePolicy).toBe("memory-disk")
30
+ })
31
+
32
+ it("accepts className overrides", () => {
33
+ const { getByTestId } = render(
34
+ <F0Image
35
+ source={{ uri: "https://example.com/classname.png" }}
36
+ className="h-8 w-8 rounded-full"
37
+ testID="f0-image-classname"
38
+ />
39
+ )
40
+ const image = getByTestId("f0-image-classname")
41
+
42
+ expect(image.props.className).toContain("h-8")
43
+ expect(image.props.className).toContain("w-8")
44
+ expect(image.props.className).toContain("rounded-full")
45
+ })
46
+ })
@@ -0,0 +1,2 @@
1
+ export { F0Image } from "./F0Image"
2
+ export type { F0ImageProps } from "./F0Image.types"