@hanzogui/image 8.3.1 → 8.3.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 (120) hide show
  1. package/dist/cjs/Image.js +27 -0
  2. package/dist/cjs/Image.js.map +1 -0
  3. package/dist/cjs/createImage.js +158 -0
  4. package/dist/cjs/createImage.js.map +1 -0
  5. package/dist/cjs/index.js +6 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/package.json +1 -0
  8. package/dist/cjs/types.js +3 -0
  9. package/dist/cjs/types.js.map +1 -0
  10. package/dist/cjs/v1/Image.js +86 -0
  11. package/dist/cjs/v1/Image.js.map +1 -0
  12. package/dist/cjs/v1/index.js +5 -0
  13. package/dist/cjs/v1/index.js.map +1 -0
  14. package/dist/esm/Image.js +24 -0
  15. package/dist/esm/Image.js.map +1 -0
  16. package/dist/esm/createImage.js +155 -0
  17. package/dist/esm/createImage.js.map +1 -0
  18. package/dist/esm/index.js +3 -3
  19. package/dist/esm/index.js.map +1 -1
  20. package/dist/esm/types.js +2 -0
  21. package/dist/esm/types.js.map +1 -0
  22. package/dist/esm/v1/Image.js +82 -0
  23. package/dist/esm/v1/Image.js.map +1 -0
  24. package/dist/esm/v1/index.js +2 -0
  25. package/dist/esm/v1/index.js.map +1 -0
  26. package/dist/native/Image.js +6 -0
  27. package/dist/native/Image.js.map +1 -0
  28. package/dist/native/createImage.js +155 -0
  29. package/dist/native/createImage.js.map +1 -0
  30. package/dist/native/index.js +3 -0
  31. package/dist/native/index.js.map +1 -0
  32. package/dist/native/types.js +2 -0
  33. package/dist/native/types.js.map +1 -0
  34. package/dist/native/v1/Image.js +82 -0
  35. package/dist/native/v1/Image.js.map +1 -0
  36. package/dist/native/v1/index.js +2 -0
  37. package/dist/native/v1/index.js.map +1 -0
  38. package/package.json +22 -17
  39. package/src/Image.native.tsx +1 -1
  40. package/src/Image.tsx +1 -1
  41. package/src/createImage.tsx +1 -1
  42. package/src/index.ts +3 -3
  43. package/src/v1/index.ts +1 -1
  44. package/types/Image.d.ts +1 -1
  45. package/types/Image.d.ts.map +1 -1
  46. package/types/Image.native.d.ts +5 -5
  47. package/types/createImage.d.ts +5 -5
  48. package/types/createImage.d.ts.map +1 -1
  49. package/types/index.d.ts +3 -3
  50. package/types/index.d.ts.map +1 -1
  51. package/types/v1/index.d.ts +1 -1
  52. package/types/v1/index.d.ts.map +1 -1
  53. package/dist/cjs/Image.cjs +0 -64
  54. package/dist/cjs/Image.native.js +0 -35
  55. package/dist/cjs/Image.native.js.map +0 -1
  56. package/dist/cjs/createImage.cjs +0 -160
  57. package/dist/cjs/createImage.native.js +0 -164
  58. package/dist/cjs/createImage.native.js.map +0 -1
  59. package/dist/cjs/index.cjs +0 -21
  60. package/dist/cjs/index.native.js +0 -24
  61. package/dist/cjs/index.native.js.map +0 -1
  62. package/dist/cjs/types.cjs +0 -18
  63. package/dist/cjs/types.native.js +0 -21
  64. package/dist/cjs/types.native.js.map +0 -1
  65. package/dist/cjs/v1/Image.cjs +0 -101
  66. package/dist/cjs/v1/Image.native.js +0 -123
  67. package/dist/cjs/v1/Image.native.js.map +0 -1
  68. package/dist/cjs/v1/index.cjs +0 -20
  69. package/dist/cjs/v1/index.native.js +0 -23
  70. package/dist/cjs/v1/index.native.js.map +0 -1
  71. package/dist/esm/Image.mjs +0 -39
  72. package/dist/esm/Image.mjs.map +0 -1
  73. package/dist/esm/Image.native.js +0 -7
  74. package/dist/esm/Image.native.js.map +0 -1
  75. package/dist/esm/createImage.mjs +0 -135
  76. package/dist/esm/createImage.mjs.map +0 -1
  77. package/dist/esm/createImage.native.js +0 -136
  78. package/dist/esm/createImage.native.js.map +0 -1
  79. package/dist/esm/index.mjs +0 -3
  80. package/dist/esm/index.mjs.map +0 -1
  81. package/dist/esm/index.native.js +0 -3
  82. package/dist/esm/index.native.js.map +0 -1
  83. package/dist/esm/types.mjs +0 -2
  84. package/dist/esm/types.mjs.map +0 -1
  85. package/dist/esm/types.native.js +0 -2
  86. package/dist/esm/types.native.js.map +0 -1
  87. package/dist/esm/v1/Image.mjs +0 -65
  88. package/dist/esm/v1/Image.mjs.map +0 -1
  89. package/dist/esm/v1/Image.native.js +0 -84
  90. package/dist/esm/v1/Image.native.js.map +0 -1
  91. package/dist/esm/v1/index.mjs +0 -2
  92. package/dist/esm/v1/index.mjs.map +0 -1
  93. package/dist/esm/v1/index.native.js +0 -2
  94. package/dist/esm/v1/index.native.js.map +0 -1
  95. package/dist/jsx/Image.mjs +0 -39
  96. package/dist/jsx/Image.mjs.map +0 -1
  97. package/dist/jsx/Image.native.js +0 -35
  98. package/dist/jsx/Image.native.js.map +0 -1
  99. package/dist/jsx/createImage.mjs +0 -135
  100. package/dist/jsx/createImage.mjs.map +0 -1
  101. package/dist/jsx/createImage.native.js +0 -164
  102. package/dist/jsx/createImage.native.js.map +0 -1
  103. package/dist/jsx/index.js +0 -3
  104. package/dist/jsx/index.js.map +0 -1
  105. package/dist/jsx/index.mjs +0 -3
  106. package/dist/jsx/index.mjs.map +0 -1
  107. package/dist/jsx/index.native.js +0 -24
  108. package/dist/jsx/index.native.js.map +0 -1
  109. package/dist/jsx/types.mjs +0 -2
  110. package/dist/jsx/types.mjs.map +0 -1
  111. package/dist/jsx/types.native.js +0 -21
  112. package/dist/jsx/types.native.js.map +0 -1
  113. package/dist/jsx/v1/Image.mjs +0 -65
  114. package/dist/jsx/v1/Image.mjs.map +0 -1
  115. package/dist/jsx/v1/Image.native.js +0 -123
  116. package/dist/jsx/v1/Image.native.js.map +0 -1
  117. package/dist/jsx/v1/index.mjs +0 -2
  118. package/dist/jsx/v1/index.mjs.map +0 -1
  119. package/dist/jsx/v1/index.native.js +0 -23
  120. package/dist/jsx/v1/index.native.js.map +0 -1
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Image = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const web_1 = require("@hanzogui/web");
6
+ const StyledImage = (0, web_1.styled)(web_1.View, {
7
+ name: 'Image',
8
+ render: 'img',
9
+ });
10
+ exports.Image = StyledImage.styleable((inProps, ref) => {
11
+ const {
12
+ // exclude native only props
13
+ blurRadius, capInsets, defaultSource, fadeDuration, loadingIndicatorSource, onLoadEnd, onPartialLoad, progressiveRenderingEnabled, resizeMethod, tintColor, ...rest } = inProps;
14
+ return (0, jsx_runtime_1.jsx)(StyledImage, { ref: ref, ...rest });
15
+ }, {
16
+ staticConfig: {
17
+ memo: true,
18
+ },
19
+ });
20
+ const func = (() => { });
21
+ exports.Image.getSize = func;
22
+ exports.Image.getSizeWithHeaders = func;
23
+ exports.Image.prefetch = func;
24
+ exports.Image.prefetchWithMetadata = func;
25
+ exports.Image.abortPrefetch = func;
26
+ exports.Image.queryCache = func;
27
+ //# sourceMappingURL=Image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/Image.tsx"],"names":[],"mappings":";;;;AAAA,uCAA4C;AAG5C,MAAM,WAAW,GAAG,IAAA,YAAM,EAAC,UAAI,EAAE;IAC/B,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,KAAK;CACd,CAAC,CAAA;AAEW,QAAA,KAAK,GAAG,WAAW,CAAC,SAAS,CACxC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IACf,MAAM;IACJ,4BAA4B;IAC5B,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,SAAS,EACT,aAAa,EACb,2BAA2B,EAC3B,YAAY,EACZ,SAAS,EACT,GAAG,IAAI,EACR,GAAG,OAAO,CAAA;IACX,OAAO,uBAAC,WAAW,IAAC,GAAG,EAAE,GAAG,KAAM,IAAI,GAAI,CAAA;AAC5C,CAAC,EACD;IACE,YAAY,EAAE;QACZ,IAAI,EAAE,IAAI;KACX;CACF,CACsB,CAAA;AAEzB,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAAQ,CAAA;AAE9B,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;AACpB,QAAA,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAA;AAC/B,QAAA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;AACrB,QAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAA;AACjC,QAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;AAC1B,QAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAA"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createImage = createImage;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const web_1 = require("@hanzogui/web");
6
+ const defaultObjectFitMap = (objectFit) => {
7
+ switch (objectFit) {
8
+ case 'fill':
9
+ return 'stretch';
10
+ case 'none':
11
+ return 'center';
12
+ case 'scale-down':
13
+ return 'contain';
14
+ case 'contain':
15
+ return 'contain';
16
+ default:
17
+ return 'cover';
18
+ }
19
+ };
20
+ const defaultTransformSource = (props) => {
21
+ const { src, source } = props;
22
+ if (typeof src === 'string') {
23
+ return {
24
+ uri: src,
25
+ };
26
+ }
27
+ if (source !== undefined && source !== null)
28
+ return source;
29
+ if (src !== undefined && src !== null)
30
+ return src;
31
+ return {
32
+ uri: src,
33
+ };
34
+ };
35
+ /**
36
+ * Create a custom Image component with a pluggable underlying implementation.
37
+ *
38
+ * @example
39
+ * Using with expo-image
40
+ * import { Image as ExpoImage } from 'expo-image'
41
+ * import { createImage } from '@hanzogui/image'
42
+ *
43
+ * export const Image = createImage({
44
+ * Component: ExpoImage,
45
+ * resizeModePropName: 'contentFit',
46
+ * objectPositionPropName: 'contentPosition',
47
+ * })
48
+ *
49
+ * Now you get all expo-image props (transition, placeholder, etc.)
50
+ * plus Gui's unified API (src, objectFit, objectPosition)
51
+ * <Image
52
+ * src="https://example.com/photo.jpg"
53
+ * objectFit="cover"
54
+ * transition={300}
55
+ * placeholder={blurhash}
56
+ * />
57
+ */
58
+ function createImage(options) {
59
+ const { Component, mapObjectFitToResizeMode = defaultObjectFitMap, resizeModePropName = 'resizeMode', objectPositionPropName, transformSource = defaultTransformSource, } = options;
60
+ // Props that should pass directly to the underlying component without Gui processing
61
+ const inlinePropsSet = new Set([
62
+ 'source',
63
+ 'placeholder',
64
+ 'transition',
65
+ 'contentFit',
66
+ 'contentPosition',
67
+ 'cachePolicy',
68
+ 'recyclingKey',
69
+ 'allowDownscaling',
70
+ 'autoplay',
71
+ 'blurRadius',
72
+ 'priority',
73
+ 'placeholderContentFit',
74
+ 'responsivePolicy',
75
+ 'onLoadStart',
76
+ 'onProgress',
77
+ 'onLoadEnd',
78
+ ]);
79
+ const StyledImage = (0, web_1.styled)(Component, {
80
+ name: 'Image',
81
+ }, {
82
+ inlineProps: inlinePropsSet,
83
+ });
84
+ const ImageComponent = StyledImage.styleable((incomingProps, ref) => {
85
+ const props = incomingProps;
86
+ const { src, source, width, height, borderRadius, objectFit, objectPosition,
87
+ // web only props - filter out on native
88
+ decoding, elementTiming, fetchpriority, isMap, loading, sizes, useMap, onLoad, onError, ...rest } = props;
89
+ const resolvedWidth = typeof width === 'string' && width[0] === '$'
90
+ ? (0, web_1.getTokenValue)(width, 'size')
91
+ : width;
92
+ const resolvedHeight = typeof height === 'string' && height[0] === '$'
93
+ ? (0, web_1.getTokenValue)(height, 'size')
94
+ : height;
95
+ const finalSource = transformSource({
96
+ src,
97
+ source,
98
+ width: resolvedWidth,
99
+ height: resolvedHeight,
100
+ });
101
+ const incomingStyle = Array.isArray(rest.style)
102
+ ? Object.assign({}, ...rest.style.flat())
103
+ : rest.style;
104
+ const resolvedBorderRadius = typeof borderRadius === 'string' && borderRadius[0] === '$'
105
+ ? (0, web_1.getTokenValue)(borderRadius, 'radius')
106
+ : borderRadius;
107
+ const finalProps = {
108
+ ...rest,
109
+ source: finalSource,
110
+ style: {
111
+ ...incomingStyle,
112
+ ...(resolvedBorderRadius !== undefined && { borderRadius: resolvedBorderRadius }),
113
+ ...(resolvedWidth !== undefined && { width: resolvedWidth }),
114
+ ...(resolvedHeight !== undefined && { height: resolvedHeight }),
115
+ },
116
+ };
117
+ // Set resize mode / content fit
118
+ if (objectFit) {
119
+ finalProps[resizeModePropName] = mapObjectFitToResizeMode(objectFit);
120
+ }
121
+ // Add object position if supported
122
+ if (objectPositionPropName && objectPosition) {
123
+ finalProps[objectPositionPropName] = objectPosition;
124
+ }
125
+ // Normalize onLoad event
126
+ if (onLoad) {
127
+ finalProps.onLoad = (e) => {
128
+ const source = e?.nativeEvent?.source || e?.source || {};
129
+ onLoad({
130
+ target: {
131
+ naturalHeight: source?.height,
132
+ naturalWidth: source?.width,
133
+ },
134
+ type: 'load',
135
+ });
136
+ };
137
+ }
138
+ // Normalize onError event
139
+ if (onError) {
140
+ finalProps.onError = () => {
141
+ onError({
142
+ type: 'error',
143
+ });
144
+ };
145
+ }
146
+ return (0, jsx_runtime_1.jsx)(StyledImage, { ref: ref, ...finalProps });
147
+ });
148
+ // Add static methods if the component has them
149
+ const comp = Component;
150
+ ImageComponent.getSize = comp.getSize || (() => { });
151
+ ImageComponent.getSizeWithHeaders = comp.getSizeWithHeaders || (() => { });
152
+ ImageComponent.prefetch = comp.prefetch || (() => { });
153
+ ImageComponent.prefetchWithMetadata = comp.prefetchWithMetadata || (() => { });
154
+ ImageComponent.abortPrefetch = comp.abortPrefetch || (() => { });
155
+ ImageComponent.queryCache = comp.queryCache || (() => { });
156
+ return ImageComponent;
157
+ }
158
+ //# sourceMappingURL=createImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createImage.js","sourceRoot":"","sources":["../../src/createImage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Image.js"), exports);
5
+ tslib_1.__exportStar(require("./createImage.js"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2B;AAC3B,2DAAiC"}
@@ -0,0 +1 @@
1
+ { "type": "commonjs" }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Image = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const react_1 = tslib_1.__importDefault(require("react"));
7
+ const constants_1 = require("@hanzogui/constants");
8
+ const web_1 = require("@hanzogui/web");
9
+ const react_native_1 = require("react-native");
10
+ const StyledImage = (0, web_1.styled)(react_native_1.Image, {
11
+ name: 'Image',
12
+ });
13
+ let hasWarned = false;
14
+ /**
15
+ * @summary An image is a component that displays an image.
16
+ * @see — Docs https://hanzogui.dev/ui/image
17
+ */
18
+ exports.Image = StyledImage.styleable((inProps, ref) => {
19
+ const [props, style] = (0, web_1.usePropsAndStyle)(inProps);
20
+ const { src, source, objectFit, ...rest } = props;
21
+ if (process.env.NODE_ENV === 'development') {
22
+ if (typeof src === 'string') {
23
+ if ((typeof props.width === 'string' && props.width[0] !== '$') ||
24
+ (typeof props.height === 'string' && props.height[0] !== '$')) {
25
+ if (!hasWarned) {
26
+ hasWarned = true;
27
+ console.warn(`React Native expects a numerical width/height. If you want to use a percent you must define the "source" prop with width, height, and uri.`);
28
+ }
29
+ }
30
+ }
31
+ }
32
+ let finalSource = typeof src === 'string'
33
+ ? {
34
+ uri: src,
35
+ ...(constants_1.isWeb && {
36
+ width: props.width || style?.width,
37
+ height: props.height || style?.height,
38
+ }),
39
+ }
40
+ : (source ?? src);
41
+ if (finalSource && typeof finalSource === 'object') {
42
+ if ("web" === 'native') {
43
+ // fix: normalize import style images
44
+ if (!Array.isArray(finalSource)) {
45
+ if (typeof finalSource.uri === 'number') {
46
+ finalSource = finalSource.uri;
47
+ if (source && typeof source === 'object' && !Array.isArray(source)) {
48
+ // @ts-ignore
49
+ style.width ?? (style.width = source.width);
50
+ // @ts-ignore
51
+ style.height ?? (style.height = source.height);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ if (process.env.NODE_ENV === 'development' && process.env.GUI_IMAGE_CHECK_ERROR) {
57
+ // lets add an onload timeout and warning if it fails to load in console
58
+ react_1.default.useEffect(() => {
59
+ async function run() {
60
+ if (typeof src === 'string') {
61
+ try {
62
+ await fetch(src).then((res) => res.text());
63
+ }
64
+ catch (err) {
65
+ console.error(`Error loading image: ${src}`, { props });
66
+ }
67
+ }
68
+ }
69
+ run();
70
+ }, [src]);
71
+ }
72
+ // require compat across native/web
73
+ if (finalSource['default']) {
74
+ finalSource = finalSource['default'];
75
+ }
76
+ }
77
+ // must set defaultSource to allow SSR, default it to the same as src
78
+ return ((0, jsx_runtime_1.jsx)(react_native_1.Image, { resizeMode: objectFit, ref: ref, source: finalSource, style: style, ...rest }));
79
+ });
80
+ exports.Image.getSize = react_native_1.Image.getSize;
81
+ exports.Image.getSizeWithHeaders = react_native_1.Image.getSizeWithHeaders;
82
+ exports.Image.prefetch = react_native_1.Image.prefetch;
83
+ exports.Image.prefetchWithMetadata = react_native_1.Image.prefetchWithMetadata;
84
+ exports.Image.abortPrefetch = react_native_1.Image.abortPrefetch;
85
+ exports.Image.queryCache = react_native_1.Image.queryCache;
86
+ //# sourceMappingURL=Image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/v1/Image.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./Image.js"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v1/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2B"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { View, styled } from '@hanzogui/web';
3
+ const StyledImage = styled(View, {
4
+ name: 'Image',
5
+ render: 'img',
6
+ });
7
+ export const Image = StyledImage.styleable((inProps, ref) => {
8
+ const {
9
+ // exclude native only props
10
+ blurRadius, capInsets, defaultSource, fadeDuration, loadingIndicatorSource, onLoadEnd, onPartialLoad, progressiveRenderingEnabled, resizeMethod, tintColor, ...rest } = inProps;
11
+ return _jsx(StyledImage, { ref: ref, ...rest });
12
+ }, {
13
+ staticConfig: {
14
+ memo: true,
15
+ },
16
+ });
17
+ const func = (() => { });
18
+ Image.getSize = func;
19
+ Image.getSizeWithHeaders = func;
20
+ Image.prefetch = func;
21
+ Image.prefetchWithMetadata = func;
22
+ Image.abortPrefetch = func;
23
+ Image.queryCache = func;
24
+ //# sourceMappingURL=Image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/Image.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAG5C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE;IAC/B,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,KAAK;CACd,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CACxC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IACf,MAAM;IACJ,4BAA4B;IAC5B,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,SAAS,EACT,aAAa,EACb,2BAA2B,EAC3B,YAAY,EACZ,SAAS,EACT,GAAG,IAAI,EACR,GAAG,OAAO,CAAA;IACX,OAAO,KAAC,WAAW,IAAC,GAAG,EAAE,GAAG,KAAM,IAAI,GAAI,CAAA;AAC5C,CAAC,EACD;IACE,YAAY,EAAE;QACZ,IAAI,EAAE,IAAI;KACX;CACF,CACsB,CAAA;AAEzB,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAAQ,CAAA;AAE9B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;AACpB,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAA;AAC/B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;AACrB,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAA;AACjC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;AAC1B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAA"}
@@ -0,0 +1,155 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { getTokenValue, styled } from '@hanzogui/web';
3
+ const defaultObjectFitMap = (objectFit) => {
4
+ switch (objectFit) {
5
+ case 'fill':
6
+ return 'stretch';
7
+ case 'none':
8
+ return 'center';
9
+ case 'scale-down':
10
+ return 'contain';
11
+ case 'contain':
12
+ return 'contain';
13
+ default:
14
+ return 'cover';
15
+ }
16
+ };
17
+ const defaultTransformSource = (props) => {
18
+ const { src, source } = props;
19
+ if (typeof src === 'string') {
20
+ return {
21
+ uri: src,
22
+ };
23
+ }
24
+ if (source !== undefined && source !== null)
25
+ return source;
26
+ if (src !== undefined && src !== null)
27
+ return src;
28
+ return {
29
+ uri: src,
30
+ };
31
+ };
32
+ /**
33
+ * Create a custom Image component with a pluggable underlying implementation.
34
+ *
35
+ * @example
36
+ * Using with expo-image
37
+ * import { Image as ExpoImage } from 'expo-image'
38
+ * import { createImage } from '@hanzogui/image'
39
+ *
40
+ * export const Image = createImage({
41
+ * Component: ExpoImage,
42
+ * resizeModePropName: 'contentFit',
43
+ * objectPositionPropName: 'contentPosition',
44
+ * })
45
+ *
46
+ * Now you get all expo-image props (transition, placeholder, etc.)
47
+ * plus Gui's unified API (src, objectFit, objectPosition)
48
+ * <Image
49
+ * src="https://example.com/photo.jpg"
50
+ * objectFit="cover"
51
+ * transition={300}
52
+ * placeholder={blurhash}
53
+ * />
54
+ */
55
+ export function createImage(options) {
56
+ const { Component, mapObjectFitToResizeMode = defaultObjectFitMap, resizeModePropName = 'resizeMode', objectPositionPropName, transformSource = defaultTransformSource, } = options;
57
+ // Props that should pass directly to the underlying component without Gui processing
58
+ const inlinePropsSet = new Set([
59
+ 'source',
60
+ 'placeholder',
61
+ 'transition',
62
+ 'contentFit',
63
+ 'contentPosition',
64
+ 'cachePolicy',
65
+ 'recyclingKey',
66
+ 'allowDownscaling',
67
+ 'autoplay',
68
+ 'blurRadius',
69
+ 'priority',
70
+ 'placeholderContentFit',
71
+ 'responsivePolicy',
72
+ 'onLoadStart',
73
+ 'onProgress',
74
+ 'onLoadEnd',
75
+ ]);
76
+ const StyledImage = styled(Component, {
77
+ name: 'Image',
78
+ }, {
79
+ inlineProps: inlinePropsSet,
80
+ });
81
+ const ImageComponent = StyledImage.styleable((incomingProps, ref) => {
82
+ const props = incomingProps;
83
+ const { src, source, width, height, borderRadius, objectFit, objectPosition,
84
+ // web only props - filter out on native
85
+ decoding, elementTiming, fetchpriority, isMap, loading, sizes, useMap, onLoad, onError, ...rest } = props;
86
+ const resolvedWidth = typeof width === 'string' && width[0] === '$'
87
+ ? getTokenValue(width, 'size')
88
+ : width;
89
+ const resolvedHeight = typeof height === 'string' && height[0] === '$'
90
+ ? getTokenValue(height, 'size')
91
+ : height;
92
+ const finalSource = transformSource({
93
+ src,
94
+ source,
95
+ width: resolvedWidth,
96
+ height: resolvedHeight,
97
+ });
98
+ const incomingStyle = Array.isArray(rest.style)
99
+ ? Object.assign({}, ...rest.style.flat())
100
+ : rest.style;
101
+ const resolvedBorderRadius = typeof borderRadius === 'string' && borderRadius[0] === '$'
102
+ ? getTokenValue(borderRadius, 'radius')
103
+ : borderRadius;
104
+ const finalProps = {
105
+ ...rest,
106
+ source: finalSource,
107
+ style: {
108
+ ...incomingStyle,
109
+ ...(resolvedBorderRadius !== undefined && { borderRadius: resolvedBorderRadius }),
110
+ ...(resolvedWidth !== undefined && { width: resolvedWidth }),
111
+ ...(resolvedHeight !== undefined && { height: resolvedHeight }),
112
+ },
113
+ };
114
+ // Set resize mode / content fit
115
+ if (objectFit) {
116
+ finalProps[resizeModePropName] = mapObjectFitToResizeMode(objectFit);
117
+ }
118
+ // Add object position if supported
119
+ if (objectPositionPropName && objectPosition) {
120
+ finalProps[objectPositionPropName] = objectPosition;
121
+ }
122
+ // Normalize onLoad event
123
+ if (onLoad) {
124
+ finalProps.onLoad = (e) => {
125
+ const source = e?.nativeEvent?.source || e?.source || {};
126
+ onLoad({
127
+ target: {
128
+ naturalHeight: source?.height,
129
+ naturalWidth: source?.width,
130
+ },
131
+ type: 'load',
132
+ });
133
+ };
134
+ }
135
+ // Normalize onError event
136
+ if (onError) {
137
+ finalProps.onError = () => {
138
+ onError({
139
+ type: 'error',
140
+ });
141
+ };
142
+ }
143
+ return _jsx(StyledImage, { ref: ref, ...finalProps });
144
+ });
145
+ // Add static methods if the component has them
146
+ const comp = Component;
147
+ ImageComponent.getSize = comp.getSize || (() => { });
148
+ ImageComponent.getSizeWithHeaders = comp.getSizeWithHeaders || (() => { });
149
+ ImageComponent.prefetch = comp.prefetch || (() => { });
150
+ ImageComponent.prefetchWithMetadata = comp.prefetchWithMetadata || (() => { });
151
+ ImageComponent.abortPrefetch = comp.abortPrefetch || (() => { });
152
+ ImageComponent.queryCache = comp.queryCache || (() => { });
153
+ return ImageComponent;
154
+ }
155
+ //# sourceMappingURL=createImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createImage.js","sourceRoot":"","sources":["../../src/createImage.tsx"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./Image.mjs";
2
- export * from "./createImage.mjs";
3
- //# sourceMappingURL=index.js.map
1
+ export * from './Image.js';
2
+ export * from './createImage.js';
3
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc;AACd,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAa,CAAA;AAC3B,cAAc,kBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { isWeb } from '@hanzogui/constants';
4
+ import { styled, usePropsAndStyle } from '@hanzogui/web';
5
+ import { Image as RNImage } from 'react-native';
6
+ const StyledImage = styled(RNImage, {
7
+ name: 'Image',
8
+ });
9
+ let hasWarned = false;
10
+ /**
11
+ * @summary An image is a component that displays an image.
12
+ * @see — Docs https://hanzogui.dev/ui/image
13
+ */
14
+ export const Image = StyledImage.styleable((inProps, ref) => {
15
+ const [props, style] = usePropsAndStyle(inProps);
16
+ const { src, source, objectFit, ...rest } = props;
17
+ if (process.env.NODE_ENV === 'development') {
18
+ if (typeof src === 'string') {
19
+ if ((typeof props.width === 'string' && props.width[0] !== '$') ||
20
+ (typeof props.height === 'string' && props.height[0] !== '$')) {
21
+ if (!hasWarned) {
22
+ hasWarned = true;
23
+ console.warn(`React Native expects a numerical width/height. If you want to use a percent you must define the "source" prop with width, height, and uri.`);
24
+ }
25
+ }
26
+ }
27
+ }
28
+ let finalSource = typeof src === 'string'
29
+ ? {
30
+ uri: src,
31
+ ...(isWeb && {
32
+ width: props.width || style?.width,
33
+ height: props.height || style?.height,
34
+ }),
35
+ }
36
+ : (source ?? src);
37
+ if (finalSource && typeof finalSource === 'object') {
38
+ if ("web" === 'native') {
39
+ // fix: normalize import style images
40
+ if (!Array.isArray(finalSource)) {
41
+ if (typeof finalSource.uri === 'number') {
42
+ finalSource = finalSource.uri;
43
+ if (source && typeof source === 'object' && !Array.isArray(source)) {
44
+ // @ts-ignore
45
+ style.width ?? (style.width = source.width);
46
+ // @ts-ignore
47
+ style.height ?? (style.height = source.height);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ if (process.env.NODE_ENV === 'development' && process.env.GUI_IMAGE_CHECK_ERROR) {
53
+ // lets add an onload timeout and warning if it fails to load in console
54
+ React.useEffect(() => {
55
+ async function run() {
56
+ if (typeof src === 'string') {
57
+ try {
58
+ await fetch(src).then((res) => res.text());
59
+ }
60
+ catch (err) {
61
+ console.error(`Error loading image: ${src}`, { props });
62
+ }
63
+ }
64
+ }
65
+ run();
66
+ }, [src]);
67
+ }
68
+ // require compat across native/web
69
+ if (finalSource['default']) {
70
+ finalSource = finalSource['default'];
71
+ }
72
+ }
73
+ // must set defaultSource to allow SSR, default it to the same as src
74
+ return (_jsx(RNImage, { resizeMode: objectFit, ref: ref, source: finalSource, style: style, ...rest }));
75
+ });
76
+ Image.getSize = RNImage.getSize;
77
+ Image.getSizeWithHeaders = RNImage.getSizeWithHeaders;
78
+ Image.prefetch = RNImage.prefetch;
79
+ Image.prefetchWithMetadata = RNImage.prefetchWithMetadata;
80
+ Image.abortPrefetch = RNImage.abortPrefetch;
81
+ Image.queryCache = RNImage.queryCache;
82
+ //# sourceMappingURL=Image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/v1/Image.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './Image.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v1/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAa,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Image as RNImage } from 'react-native';
2
+ import { createImage } from './createImage.js';
3
+ export const Image = createImage({
4
+ Component: RNImage,
5
+ });
6
+ //# sourceMappingURL=Image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.native.js","sourceRoot":"","sources":["../../src/Image.native.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC;IAC/B,SAAS,EAAE,OAAO;CACnB,CAAC,CAAA"}