@tamagui/image 1.100.6 → 1.101.1

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.
package/dist/cjs/Image.js CHANGED
@@ -17,7 +17,7 @@ __export(Image_exports, {
17
17
  Image: () => Image
18
18
  });
19
19
  module.exports = __toCommonJS(Image_exports);
20
- var import_constants = require("@tamagui/constants"), import_core = require("@tamagui/core"), import_react_native = require("react-native-web"), import_jsx_runtime = require("react/jsx-runtime");
20
+ var import_constants = require("@tamagui/constants"), import_core = require("@tamagui/core"), import_react = require("react"), import_react_native = require("react-native-web"), import_jsx_runtime = require("react/jsx-runtime");
21
21
  const StyledImage = (0, import_core.styled)(import_react_native.Image, {
22
22
  name: "Image"
23
23
  });
@@ -27,8 +27,24 @@ const Image = StyledImage.styleable((inProps, ref) => {
27
27
  process.env.NODE_ENV === "development" && typeof src == "string" && (typeof props.width == "string" && props.width[0] !== "$" || typeof props.height == "string" && props.height[0] !== "$") && (hasWarned || (hasWarned = !0, console.warn(
28
28
  '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.'
29
29
  )));
30
- let finalSource = typeof src == "string" ? { uri: src, ...import_constants.isWeb && { width: props.width, height: props.height } } : source ?? src;
31
- return finalSource && typeof finalSource == "object" && finalSource.default && (finalSource = finalSource.default), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StyledImage, { ref, source: finalSource, style, ...rest });
30
+ let finalSource = typeof src == "string" ? {
31
+ uri: src,
32
+ ...import_constants.isWeb && {
33
+ width: props.width || style?.width,
34
+ height: props.height || style?.height
35
+ }
36
+ } : source ?? src;
37
+ return finalSource && typeof finalSource == "object" && (process.env.NODE_ENV === "development" && process.env.TAMAGUI_IMAGE_CHECK_ERROR && (0, import_react.useEffect)(() => {
38
+ async function run() {
39
+ if (typeof src == "string")
40
+ try {
41
+ await fetch(src).then((res) => res.text());
42
+ } catch {
43
+ console.error(`Error loading image: ${src}`, { props });
44
+ }
45
+ }
46
+ run();
47
+ }, [src]), finalSource.default && (finalSource = finalSource.default)), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_native.Image, { ref, source: finalSource, style, ...rest });
32
48
  });
33
49
  Image.getSize = import_react_native.Image.getSize;
34
50
  Image.getSizeWithHeaders = import_react_native.Image.getSizeWithHeaders;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Image.tsx"],
4
- "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAsB,+BAQtB,cAAyC,0BAEzC,sBAAiC,yBAyFxB;AAvFT,MAAM,kBAAc,oBAAO,oBAAAA,OAAS;AAAA,EAClC,MAAM;AACR,CAAC;AAmCD,IAAI,YAAY;AAET,MAAM,QAAQ,YAAY,UAAsB,CAAC,SAAS,QAAQ;AACvE,QAAM,CAAC,OAAO,KAAK,QAAI,8BAAiB,OAAO,GACzC,EAAE,KAAK,QAAQ,GAAG,KAAK,IAAI;AAEjC,EAAI,QAAQ,IAAI,aAAa,iBACvB,OAAO,OAAQ,aAEd,OAAO,MAAM,SAAU,YAAY,MAAM,MAAM,CAAC,MAAM,OACtD,OAAO,MAAM,UAAW,YAAY,MAAM,OAAO,CAAC,MAAM,SAEpD,cACH,YAAY,IACZ,QAAQ;AAAA,IACN;AAAA,EACF;AAMR,MAAI,cACF,OAAO,OAAQ,WACX,EAAE,KAAK,KAAK,GAAI,0BAAS,EAAE,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,EAAG,IACvE,UAAU;AAEhB,SAAI,eAAe,OAAO,eAAgB,YAiBpC,YAAY,YACd,cAAc,YAAY,UAKvB,4CAAC,eAAY,KAAU,QAAQ,aAAa,OAAe,GAAI,MAAc;AACtF,CAAC;AAED,MAAM,UAAU,oBAAAA,MAAQ;AACxB,MAAM,qBAAqB,oBAAAA,MAAQ;AACnC,MAAM,WAAW,oBAAAA,MAAQ;AACzB,MAAM,uBAAuB,oBAAAA,MAAQ;AACrC,MAAM,gBAAgB,oBAAAA,MAAQ;AAC9B,MAAM,aAAa,oBAAAA,MAAQ;",
4
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAsB,+BAQtB,cAAyC,0BACzC,eAAmC,kBACnC,sBAAiC,yBAgHxB;AA9GT,MAAM,kBAAc,oBAAO,oBAAAA,OAAS;AAAA,EAClC,MAAM;AACR,CAAC;AAmCD,IAAI,YAAY;AAET,MAAM,QAAQ,YAAY,UAAsB,CAAC,SAAS,QAAQ;AACvE,QAAM,CAAC,OAAO,KAAK,QAAI,8BAAiB,OAAO,GACzC,EAAE,KAAK,QAAQ,GAAG,KAAK,IAAI;AAEjC,EAAI,QAAQ,IAAI,aAAa,iBACvB,OAAO,OAAQ,aAEd,OAAO,MAAM,SAAU,YAAY,MAAM,MAAM,CAAC,MAAM,OACtD,OAAO,MAAM,UAAW,YAAY,MAAM,OAAO,CAAC,MAAM,SAEpD,cACH,YAAY,IACZ,QAAQ;AAAA,IACN;AAAA,EACF;AAMR,MAAI,cACF,OAAO,OAAQ,WACX;AAAA,IACE,KAAK;AAAA,IACL,GAAI,0BAAS;AAAA,MACX,OAAO,MAAM,SAAS,OAAO;AAAA,MAC7B,QAAQ,MAAM,UAAU,OAAO;AAAA,IACjC;AAAA,EACF,IACA,UAAU;AAEhB,SAAI,eAAe,OAAO,eAAgB,aAgBpC,QAAQ,IAAI,aAAa,iBAAiB,QAAQ,IAAI,iCAExD,wBAAU,MAAM;AACd,mBAAe,MAAM;AACnB,UAAI,OAAO,OAAQ;AACjB,YAAI;AACF,gBAAM,MAAM,GAAG,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAAA,QAC3C,QAAc;AACZ,kBAAQ,MAAM,wBAAwB,GAAG,IAAI,EAAE,MAAM,CAAC;AAAA,QACxD;AAAA,IAEJ;AAEA,QAAI;AAAA,EACN,GAAG,CAAC,GAAG,CAAC,GAIN,YAAY,YACd,cAAc,YAAY,WAKvB,4CAAC,oBAAAA,OAAA,EAAQ,KAAU,QAAQ,aAAa,OAAe,GAAI,MAAc;AAClF,CAAC;AAED,MAAM,UAAU,oBAAAA,MAAQ;AACxB,MAAM,qBAAqB,oBAAAA,MAAQ;AACnC,MAAM,WAAW,oBAAAA,MAAQ;AACzB,MAAM,uBAAuB,oBAAAA,MAAQ;AACrC,MAAM,gBAAgB,oBAAAA,MAAQ;AAC9B,MAAM,aAAa,oBAAAA,MAAQ;",
5
5
  "names": ["RNImage"]
6
6
  }
@@ -18,7 +18,7 @@ __export(Image_exports, {
18
18
  Image: () => Image
19
19
  });
20
20
  module.exports = __toCommonJS(Image_exports);
21
- var import_jsx_runtime = require("react/jsx-runtime"), import_constants = require("@tamagui/constants"), import_core = require("@tamagui/core"), import_react_native = require("react-native");
21
+ var import_jsx_runtime = require("react/jsx-runtime"), import_constants = require("@tamagui/constants"), import_core = require("@tamagui/core"), import_react = require("react"), import_react_native = require("react-native");
22
22
  function _array_like_to_array(arr, len) {
23
23
  (len == null || len > arr.length) && (len = arr.length);
24
24
  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
@@ -27,6 +27,30 @@ function _array_like_to_array(arr, len) {
27
27
  function _array_with_holes(arr) {
28
28
  if (Array.isArray(arr)) return arr;
29
29
  }
30
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
31
+ try {
32
+ var info = gen[key](arg), value = info.value;
33
+ } catch (error) {
34
+ reject(error);
35
+ return;
36
+ }
37
+ info.done ? resolve(value) : Promise.resolve(value).then(_next, _throw);
38
+ }
39
+ function _async_to_generator(fn) {
40
+ return function() {
41
+ var self = this, args = arguments;
42
+ return new Promise(function(resolve, reject) {
43
+ var gen = fn.apply(self, args);
44
+ function _next(value) {
45
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
46
+ }
47
+ function _throw(err) {
48
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
49
+ }
50
+ _next(void 0);
51
+ });
52
+ };
53
+ }
30
54
  function _define_property(obj, key, value) {
31
55
  return key in obj ? Object.defineProperty(obj, key, {
32
56
  value,
@@ -96,6 +120,92 @@ function _unsupported_iterable_to_array(o, minLen) {
96
120
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
97
121
  }
98
122
  }
123
+ function _ts_generator(thisArg, body) {
124
+ var f, y, t, g, _ = {
125
+ label: 0,
126
+ sent: function() {
127
+ if (t[0] & 1) throw t[1];
128
+ return t[1];
129
+ },
130
+ trys: [],
131
+ ops: []
132
+ };
133
+ return g = {
134
+ next: verb(0),
135
+ throw: verb(1),
136
+ return: verb(2)
137
+ }, typeof Symbol == "function" && (g[Symbol.iterator] = function() {
138
+ return this;
139
+ }), g;
140
+ function verb(n) {
141
+ return function(v) {
142
+ return step([
143
+ n,
144
+ v
145
+ ]);
146
+ };
147
+ }
148
+ function step(op) {
149
+ if (f) throw new TypeError("Generator is already executing.");
150
+ for (; _; ) try {
151
+ if (f = 1, y && (t = op[0] & 2 ? y.return : op[0] ? y.throw || ((t = y.return) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
152
+ switch (y = 0, t && (op = [
153
+ op[0] & 2,
154
+ t.value
155
+ ]), op[0]) {
156
+ case 0:
157
+ case 1:
158
+ t = op;
159
+ break;
160
+ case 4:
161
+ return _.label++, {
162
+ value: op[1],
163
+ done: !1
164
+ };
165
+ case 5:
166
+ _.label++, y = op[1], op = [
167
+ 0
168
+ ];
169
+ continue;
170
+ case 7:
171
+ op = _.ops.pop(), _.trys.pop();
172
+ continue;
173
+ default:
174
+ if (t = _.trys, !(t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
175
+ _ = 0;
176
+ continue;
177
+ }
178
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
179
+ _.label = op[1];
180
+ break;
181
+ }
182
+ if (op[0] === 6 && _.label < t[1]) {
183
+ _.label = t[1], t = op;
184
+ break;
185
+ }
186
+ if (t && _.label < t[2]) {
187
+ _.label = t[2], _.ops.push(op);
188
+ break;
189
+ }
190
+ t[2] && _.ops.pop(), _.trys.pop();
191
+ continue;
192
+ }
193
+ op = body.call(thisArg, _);
194
+ } catch (e) {
195
+ op = [
196
+ 6,
197
+ e
198
+ ], y = 0;
199
+ } finally {
200
+ f = t = 0;
201
+ }
202
+ if (op[0] & 5) throw op[1];
203
+ return {
204
+ value: op[0] ? op[1] : void 0,
205
+ done: !0
206
+ };
207
+ }
208
+ }
99
209
  var StyledImage = (0, import_core.styled)(import_react_native.Image, {
100
210
  name: "Image"
101
211
  }), hasWarned = !1, Image = StyledImage.styleable(function(inProps, ref) {
@@ -107,8 +217,8 @@ var StyledImage = (0, import_core.styled)(import_react_native.Image, {
107
217
  var finalSource = typeof src == "string" ? _object_spread({
108
218
  uri: src
109
219
  }, import_constants.isWeb && {
110
- width: props.width,
111
- height: props.height
220
+ width: props.width || (style == null ? void 0 : style.width),
221
+ height: props.height || (style == null ? void 0 : style.height)
112
222
  }) : source ?? src;
113
223
  if (finalSource && typeof finalSource == "object") {
114
224
  if (!Array.isArray(finalSource) && typeof finalSource.uri == "number" && (finalSource = finalSource.uri, source && typeof source == "object" && !Array.isArray(source))) {
@@ -117,9 +227,59 @@ var StyledImage = (0, import_core.styled)(import_react_native.Image, {
117
227
  var _height;
118
228
  (_height = (_style1 = style).height) !== null && _height !== void 0 || (_style1.height = source.height);
119
229
  }
120
- finalSource.default && (finalSource = finalSource.default);
230
+ process.env.NODE_ENV === "development" && process.env.TAMAGUI_IMAGE_CHECK_ERROR && (0, import_react.useEffect)(function() {
231
+ var run = function() {
232
+ return _run.apply(this, arguments);
233
+ };
234
+ function _run() {
235
+ return _run = _async_to_generator(function() {
236
+ var err;
237
+ return _ts_generator(this, function(_state) {
238
+ switch (_state.label) {
239
+ case 0:
240
+ if (typeof src != "string") return [
241
+ 3,
242
+ 4
243
+ ];
244
+ _state.label = 1;
245
+ case 1:
246
+ return _state.trys.push([
247
+ 1,
248
+ 3,
249
+ ,
250
+ 4
251
+ ]), [
252
+ 4,
253
+ fetch(src).then(function(res) {
254
+ return res.text();
255
+ })
256
+ ];
257
+ case 2:
258
+ return _state.sent(), [
259
+ 3,
260
+ 4
261
+ ];
262
+ case 3:
263
+ return err = _state.sent(), console.error("Error loading image: ".concat(src), {
264
+ props
265
+ }), [
266
+ 3,
267
+ 4
268
+ ];
269
+ case 4:
270
+ return [
271
+ 2
272
+ ];
273
+ }
274
+ });
275
+ }), _run.apply(this, arguments);
276
+ }
277
+ run();
278
+ }, [
279
+ src
280
+ ]), finalSource.default && (finalSource = finalSource.default);
121
281
  }
122
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(StyledImage, _object_spread({
282
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_native.Image, _object_spread({
123
283
  ref,
124
284
  source: finalSource,
125
285
  style
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Users/n8/tamagui/packages/image/src/Image.tsx"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;uDAAA,mBAAsB,+BAQtB,cAAyC,0BAEzC,sBAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjC,IAAMA,kBAAcC,oBAAOC,oBAAAA,OAAS;EAClCC,MAAM;AACR,CAAA,GAmCIC,YAAY,IAEHC,QAAQL,YAAYM,UAAsB,SAACC,SAASC,KAAAA;AAC/D,MAAuBC,oBAAAA,qBAAAA,8BAAiBF,OAAAA,GAAAA,CAAAA,GAAjCG,QAAgBD,kBAAAA,CAAAA,GAATE,QAASF,kBAAAA,CAAAA,GACfG,MAAyBF,MAAzBE,KAAKC,SAAoBH,MAApBG,QAAWC,OAAAA,2BAASJ,OAAAA;IAAzBE;IAAKC;;AAEb,EAAIE,QAAQC,IAAIC,aAAa,iBACvB,OAAOL,OAAQ,aAEd,OAAOF,MAAMQ,SAAU,YAAYR,MAAMQ,MAAM,CAAA,MAAO,OACtD,OAAOR,MAAMS,UAAW,YAAYT,MAAMS,OAAO,CAAA,MAAO,SAEpDf,cACHA,YAAY,IACZgB,QAAQC,KACL,4IAAA;AAOX,MAAIC,cACF,OAAOV,OAAQ,WACX,eAAA;IAAEW,KAAKX;KAASY,0BAAS;IAAEN,OAAOR,MAAMQ;IAAOC,QAAQT,MAAMS;EAAO,CAAA,IACpEN,UAAUD;AAEhB,MAAIU,eAAe,OAAOA,eAAgB,UAAU;AAGhD,QAAI,CAACG,MAAMC,QAAQJ,WAAAA,KACb,OAAOA,YAAYC,OAAQ,aAC7BD,cAAcA,YAAYC,KACtBV,UAAU,OAAOA,UAAW,YAAY,CAACY,MAAMC,QAAQb,MAAAA,IAAS;UAElEF,QAEAA;AAFAA,OAAAA,UAAAA,SAAAA,OAAMO,WAAAA,QAAAA,WAAAA,WAANP,OAAMO,QAAUL,OAAOK;;AAEvBP,OAAAA,WAAAA,UAAAA,OAAMQ,YAAAA,QAAAA,YAAAA,WAANR,QAAMQ,SAAWN,OAAOM;IAC1B;AAMN,IAAIG,YAAY,YACdA,cAAcA,YAAY;EAE9B;AAGA,SAAO,uCAAAK,KAAC3B,aAAAA,eAAAA;IAAYQ;IAAUK,QAAQS;IAAaX;KAAmBG,IAAAA,CAAAA;AACxE,CAAA;AAEAT,MAAMuB,UAAU1B,oBAAAA,MAAQ0B;AACxBvB,MAAMwB,qBAAqB3B,oBAAAA,MAAQ2B;AACnCxB,MAAMyB,WAAW5B,oBAAAA,MAAQ4B;AACzBzB,MAAM0B,uBAAuB7B,oBAAAA,MAAQ6B;AACrC1B,MAAM2B,gBAAgB9B,oBAAAA,MAAQ8B;AAC9B3B,MAAM4B,aAAa/B,oBAAAA,MAAQ+B;",
5
- "names": ["StyledImage", "styled", "RNImage", "name", "hasWarned", "Image", "styleable", "inProps", "ref", "usePropsAndStyle", "props", "style", "src", "source", "rest", "process", "env", "NODE_ENV", "width", "height", "console", "warn", "finalSource", "uri", "isWeb", "Array", "isArray", "_jsx", "getSize", "getSizeWithHeaders", "prefetch", "prefetchWithMetadata", "abortPrefetch", "queryCache"]
4
+ "mappings": "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",
5
+ "names": ["StyledImage", "styled", "RNImage", "name", "hasWarned", "Image", "styleable", "inProps", "ref", "usePropsAndStyle", "props", "style", "src", "source", "rest", "process", "env", "NODE_ENV", "width", "height", "console", "warn", "finalSource", "uri", "isWeb", "Array", "isArray", "TAMAGUI_IMAGE_CHECK_ERROR", "useEffect", "run", "err", "fetch", "then", "res", "text", "error", "_jsx", "getSize", "getSizeWithHeaders", "prefetch", "prefetchWithMetadata", "abortPrefetch", "queryCache"]
6
6
  }
package/dist/esm/Image.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { isWeb } from "@tamagui/constants";
2
2
  import { styled, usePropsAndStyle } from "@tamagui/core";
3
+ import { useEffect } from "react";
3
4
  import { Image as RNImage } from "react-native-web";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  const StyledImage = styled(RNImage, {
@@ -11,8 +12,24 @@ const Image = StyledImage.styleable((inProps, ref) => {
11
12
  process.env.NODE_ENV === "development" && typeof src == "string" && (typeof props.width == "string" && props.width[0] !== "$" || typeof props.height == "string" && props.height[0] !== "$") && (hasWarned || (hasWarned = !0, console.warn(
12
13
  '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.'
13
14
  )));
14
- let finalSource = typeof src == "string" ? { uri: src, ...isWeb && { width: props.width, height: props.height } } : source ?? src;
15
- return finalSource && typeof finalSource == "object" && finalSource.default && (finalSource = finalSource.default), /* @__PURE__ */ jsx(StyledImage, { ref, source: finalSource, style, ...rest });
15
+ let finalSource = typeof src == "string" ? {
16
+ uri: src,
17
+ ...isWeb && {
18
+ width: props.width || style?.width,
19
+ height: props.height || style?.height
20
+ }
21
+ } : source ?? src;
22
+ return finalSource && typeof finalSource == "object" && (process.env.NODE_ENV === "development" && process.env.TAMAGUI_IMAGE_CHECK_ERROR && useEffect(() => {
23
+ async function run() {
24
+ if (typeof src == "string")
25
+ try {
26
+ await fetch(src).then((res) => res.text());
27
+ } catch {
28
+ console.error(`Error loading image: ${src}`, { props });
29
+ }
30
+ }
31
+ run();
32
+ }, [src]), finalSource.default && (finalSource = finalSource.default)), /* @__PURE__ */ jsx(RNImage, { ref, source: finalSource, style, ...rest });
16
33
  });
17
34
  Image.getSize = RNImage.getSize;
18
35
  Image.getSizeWithHeaders = RNImage.getSizeWithHeaders;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Image.tsx"],
4
- "mappings": "AAAA,SAAS,aAAa;AAQtB,SAAS,QAAQ,wBAAwB;AAEzC,SAAS,SAAS,eAAe;AAyFxB;AAvFT,MAAM,cAAc,OAAO,SAAS;AAAA,EAClC,MAAM;AACR,CAAC;AAmCD,IAAI,YAAY;AAET,MAAM,QAAQ,YAAY,UAAsB,CAAC,SAAS,QAAQ;AACvE,QAAM,CAAC,OAAO,KAAK,IAAI,iBAAiB,OAAO,GACzC,EAAE,KAAK,QAAQ,GAAG,KAAK,IAAI;AAEjC,EAAI,QAAQ,IAAI,aAAa,iBACvB,OAAO,OAAQ,aAEd,OAAO,MAAM,SAAU,YAAY,MAAM,MAAM,CAAC,MAAM,OACtD,OAAO,MAAM,UAAW,YAAY,MAAM,OAAO,CAAC,MAAM,SAEpD,cACH,YAAY,IACZ,QAAQ;AAAA,IACN;AAAA,EACF;AAMR,MAAI,cACF,OAAO,OAAQ,WACX,EAAE,KAAK,KAAK,GAAI,SAAS,EAAE,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,EAAG,IACvE,UAAU;AAEhB,SAAI,eAAe,OAAO,eAAgB,YAiBpC,YAAY,YACd,cAAc,YAAY,UAKvB,oBAAC,eAAY,KAAU,QAAQ,aAAa,OAAe,GAAI,MAAc;AACtF,CAAC;AAED,MAAM,UAAU,QAAQ;AACxB,MAAM,qBAAqB,QAAQ;AACnC,MAAM,WAAW,QAAQ;AACzB,MAAM,uBAAuB,QAAQ;AACrC,MAAM,gBAAgB,QAAQ;AAC9B,MAAM,aAAa,QAAQ;",
4
+ "mappings": "AAAA,SAAS,aAAa;AAQtB,SAAS,QAAQ,wBAAwB;AACzC,SAAS,iBAA0B;AACnC,SAAS,SAAS,eAAe;AAgHxB;AA9GT,MAAM,cAAc,OAAO,SAAS;AAAA,EAClC,MAAM;AACR,CAAC;AAmCD,IAAI,YAAY;AAET,MAAM,QAAQ,YAAY,UAAsB,CAAC,SAAS,QAAQ;AACvE,QAAM,CAAC,OAAO,KAAK,IAAI,iBAAiB,OAAO,GACzC,EAAE,KAAK,QAAQ,GAAG,KAAK,IAAI;AAEjC,EAAI,QAAQ,IAAI,aAAa,iBACvB,OAAO,OAAQ,aAEd,OAAO,MAAM,SAAU,YAAY,MAAM,MAAM,CAAC,MAAM,OACtD,OAAO,MAAM,UAAW,YAAY,MAAM,OAAO,CAAC,MAAM,SAEpD,cACH,YAAY,IACZ,QAAQ;AAAA,IACN;AAAA,EACF;AAMR,MAAI,cACF,OAAO,OAAQ,WACX;AAAA,IACE,KAAK;AAAA,IACL,GAAI,SAAS;AAAA,MACX,OAAO,MAAM,SAAS,OAAO;AAAA,MAC7B,QAAQ,MAAM,UAAU,OAAO;AAAA,IACjC;AAAA,EACF,IACA,UAAU;AAEhB,SAAI,eAAe,OAAO,eAAgB,aAgBpC,QAAQ,IAAI,aAAa,iBAAiB,QAAQ,IAAI,6BAExD,UAAU,MAAM;AACd,mBAAe,MAAM;AACnB,UAAI,OAAO,OAAQ;AACjB,YAAI;AACF,gBAAM,MAAM,GAAG,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAAA,QAC3C,QAAc;AACZ,kBAAQ,MAAM,wBAAwB,GAAG,IAAI,EAAE,MAAM,CAAC;AAAA,QACxD;AAAA,IAEJ;AAEA,QAAI;AAAA,EACN,GAAG,CAAC,GAAG,CAAC,GAIN,YAAY,YACd,cAAc,YAAY,WAKvB,oBAAC,WAAQ,KAAU,QAAQ,aAAa,OAAe,GAAI,MAAc;AAClF,CAAC;AAED,MAAM,UAAU,QAAQ;AACxB,MAAM,qBAAqB,QAAQ;AACnC,MAAM,WAAW,QAAQ;AACzB,MAAM,uBAAuB,QAAQ;AACrC,MAAM,gBAAgB,QAAQ;AAC9B,MAAM,aAAa,QAAQ;",
5
5
  "names": []
6
6
  }
@@ -1,5 +1,6 @@
1
1
  import { isWeb } from "@tamagui/constants";
2
2
  import { styled, usePropsAndStyle } from "@tamagui/core";
3
+ import { useEffect } from "react";
3
4
  import { Image as RNImage } from "react-native-web";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  const StyledImage = styled(RNImage, {
@@ -17,11 +18,22 @@ const Image = StyledImage.styleable((inProps, ref) => {
17
18
  let finalSource = typeof src == "string" ? {
18
19
  uri: src,
19
20
  ...(isWeb && {
20
- width: props.width,
21
- height: props.height
21
+ width: props.width || style?.width,
22
+ height: props.height || style?.height
22
23
  })
23
24
  } : source ?? src;
24
- return finalSource && typeof finalSource == "object" && finalSource.default && (finalSource = finalSource.default), /* @__PURE__ */jsx(StyledImage, {
25
+ return finalSource && typeof finalSource == "object" && (process.env.NODE_ENV === "development" && process.env.TAMAGUI_IMAGE_CHECK_ERROR && useEffect(() => {
26
+ async function run() {
27
+ if (typeof src == "string") try {
28
+ await fetch(src).then(res => res.text());
29
+ } catch {
30
+ console.error(`Error loading image: ${src}`, {
31
+ props
32
+ });
33
+ }
34
+ }
35
+ run();
36
+ }, [src]), finalSource.default && (finalSource = finalSource.default)), /* @__PURE__ */jsx(RNImage, {
25
37
  ref,
26
38
  source: finalSource,
27
39
  style,
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { isWeb } from "@tamagui/constants";
3
3
  import { styled, usePropsAndStyle } from "@tamagui/core";
4
+ import { useEffect } from "react";
4
5
  import { Image as RNImage } from "react-native";
5
6
  function _array_like_to_array(arr, len) {
6
7
  (len == null || len > arr.length) && (len = arr.length);
@@ -10,6 +11,30 @@ function _array_like_to_array(arr, len) {
10
11
  function _array_with_holes(arr) {
11
12
  if (Array.isArray(arr)) return arr;
12
13
  }
14
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
15
+ try {
16
+ var info = gen[key](arg), value = info.value;
17
+ } catch (error) {
18
+ reject(error);
19
+ return;
20
+ }
21
+ info.done ? resolve(value) : Promise.resolve(value).then(_next, _throw);
22
+ }
23
+ function _async_to_generator(fn) {
24
+ return function() {
25
+ var self = this, args = arguments;
26
+ return new Promise(function(resolve, reject) {
27
+ var gen = fn.apply(self, args);
28
+ function _next(value) {
29
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
30
+ }
31
+ function _throw(err) {
32
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
33
+ }
34
+ _next(void 0);
35
+ });
36
+ };
37
+ }
13
38
  function _define_property(obj, key, value) {
14
39
  return key in obj ? Object.defineProperty(obj, key, {
15
40
  value,
@@ -79,6 +104,92 @@ function _unsupported_iterable_to_array(o, minLen) {
79
104
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
80
105
  }
81
106
  }
107
+ function _ts_generator(thisArg, body) {
108
+ var f, y, t, g, _ = {
109
+ label: 0,
110
+ sent: function() {
111
+ if (t[0] & 1) throw t[1];
112
+ return t[1];
113
+ },
114
+ trys: [],
115
+ ops: []
116
+ };
117
+ return g = {
118
+ next: verb(0),
119
+ throw: verb(1),
120
+ return: verb(2)
121
+ }, typeof Symbol == "function" && (g[Symbol.iterator] = function() {
122
+ return this;
123
+ }), g;
124
+ function verb(n) {
125
+ return function(v) {
126
+ return step([
127
+ n,
128
+ v
129
+ ]);
130
+ };
131
+ }
132
+ function step(op) {
133
+ if (f) throw new TypeError("Generator is already executing.");
134
+ for (; _; ) try {
135
+ if (f = 1, y && (t = op[0] & 2 ? y.return : op[0] ? y.throw || ((t = y.return) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
136
+ switch (y = 0, t && (op = [
137
+ op[0] & 2,
138
+ t.value
139
+ ]), op[0]) {
140
+ case 0:
141
+ case 1:
142
+ t = op;
143
+ break;
144
+ case 4:
145
+ return _.label++, {
146
+ value: op[1],
147
+ done: !1
148
+ };
149
+ case 5:
150
+ _.label++, y = op[1], op = [
151
+ 0
152
+ ];
153
+ continue;
154
+ case 7:
155
+ op = _.ops.pop(), _.trys.pop();
156
+ continue;
157
+ default:
158
+ if (t = _.trys, !(t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
159
+ _ = 0;
160
+ continue;
161
+ }
162
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
163
+ _.label = op[1];
164
+ break;
165
+ }
166
+ if (op[0] === 6 && _.label < t[1]) {
167
+ _.label = t[1], t = op;
168
+ break;
169
+ }
170
+ if (t && _.label < t[2]) {
171
+ _.label = t[2], _.ops.push(op);
172
+ break;
173
+ }
174
+ t[2] && _.ops.pop(), _.trys.pop();
175
+ continue;
176
+ }
177
+ op = body.call(thisArg, _);
178
+ } catch (e) {
179
+ op = [
180
+ 6,
181
+ e
182
+ ], y = 0;
183
+ } finally {
184
+ f = t = 0;
185
+ }
186
+ if (op[0] & 5) throw op[1];
187
+ return {
188
+ value: op[0] ? op[1] : void 0,
189
+ done: !0
190
+ };
191
+ }
192
+ }
82
193
  var StyledImage = styled(RNImage, {
83
194
  name: "Image"
84
195
  }), hasWarned = !1, Image = StyledImage.styleable(function(inProps, ref) {
@@ -90,8 +201,8 @@ var StyledImage = styled(RNImage, {
90
201
  var finalSource = typeof src == "string" ? _object_spread({
91
202
  uri: src
92
203
  }, isWeb && {
93
- width: props.width,
94
- height: props.height
204
+ width: props.width || (style == null ? void 0 : style.width),
205
+ height: props.height || (style == null ? void 0 : style.height)
95
206
  }) : source ?? src;
96
207
  if (finalSource && typeof finalSource == "object") {
97
208
  if (!Array.isArray(finalSource) && typeof finalSource.uri == "number" && (finalSource = finalSource.uri, source && typeof source == "object" && !Array.isArray(source))) {
@@ -100,9 +211,59 @@ var StyledImage = styled(RNImage, {
100
211
  var _height;
101
212
  (_height = (_style1 = style).height) !== null && _height !== void 0 || (_style1.height = source.height);
102
213
  }
103
- finalSource.default && (finalSource = finalSource.default);
214
+ process.env.NODE_ENV === "development" && process.env.TAMAGUI_IMAGE_CHECK_ERROR && useEffect(function() {
215
+ var run = function() {
216
+ return _run.apply(this, arguments);
217
+ };
218
+ function _run() {
219
+ return _run = _async_to_generator(function() {
220
+ var err;
221
+ return _ts_generator(this, function(_state) {
222
+ switch (_state.label) {
223
+ case 0:
224
+ if (typeof src != "string") return [
225
+ 3,
226
+ 4
227
+ ];
228
+ _state.label = 1;
229
+ case 1:
230
+ return _state.trys.push([
231
+ 1,
232
+ 3,
233
+ ,
234
+ 4
235
+ ]), [
236
+ 4,
237
+ fetch(src).then(function(res) {
238
+ return res.text();
239
+ })
240
+ ];
241
+ case 2:
242
+ return _state.sent(), [
243
+ 3,
244
+ 4
245
+ ];
246
+ case 3:
247
+ return err = _state.sent(), console.error("Error loading image: ".concat(src), {
248
+ props
249
+ }), [
250
+ 3,
251
+ 4
252
+ ];
253
+ case 4:
254
+ return [
255
+ 2
256
+ ];
257
+ }
258
+ });
259
+ }), _run.apply(this, arguments);
260
+ }
261
+ run();
262
+ }, [
263
+ src
264
+ ]), finalSource.default && (finalSource = finalSource.default);
104
265
  }
105
- return /* @__PURE__ */ _jsx(StyledImage, _object_spread({
266
+ return /* @__PURE__ */ _jsx(RNImage, _object_spread({
106
267
  ref,
107
268
  source: finalSource,
108
269
  style
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Users/n8/tamagui/packages/image/src/Image.tsx"],
4
- "mappings": ";AAAA,SAASA,aAAa;AAQtB,SAASC,QAAQC,wBAAwB;AAEzC,SAASC,SAASC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjC,IAAMC,cAAcJ,OAAOG,SAAS;EAClCE,MAAM;AACR,CAAA,GAmCIC,YAAY,IAEHJ,QAAQE,YAAYG,UAAsB,SAACC,SAASC,KAAAA;AAC/D,MAAuBR,oBAAAA,iBAAAA,iBAAiBO,OAAAA,GAAAA,CAAAA,GAAjCE,QAAgBT,kBAAAA,CAAAA,GAATU,QAASV,kBAAAA,CAAAA,GACfW,MAAyBF,MAAzBE,KAAKC,SAAoBH,MAApBG,QAAWC,OAAAA,2BAASJ,OAAAA;IAAzBE;IAAKC;;AAEb,EAAIE,QAAQC,IAAIC,aAAa,iBACvB,OAAOL,OAAQ,aAEd,OAAOF,MAAMQ,SAAU,YAAYR,MAAMQ,MAAM,CAAA,MAAO,OACtD,OAAOR,MAAMS,UAAW,YAAYT,MAAMS,OAAO,CAAA,MAAO,SAEpDb,cACHA,YAAY,IACZc,QAAQC,KACL,4IAAA;AAOX,MAAIC,cACF,OAAOV,OAAQ,WACX,eAAA;IAAEW,KAAKX;KAASb,SAAS;IAAEmB,OAAOR,MAAMQ;IAAOC,QAAQT,MAAMS;EAAO,CAAA,IACpEN,UAAUD;AAEhB,MAAIU,eAAe,OAAOA,eAAgB,UAAU;AAGhD,QAAI,CAACE,MAAMC,QAAQH,WAAAA,KACb,OAAOA,YAAYC,OAAQ,aAC7BD,cAAcA,YAAYC,KACtBV,UAAU,OAAOA,UAAW,YAAY,CAACW,MAAMC,QAAQZ,MAAAA,IAAS;UAElEF,QAEAA;AAFAA,OAAAA,UAAAA,SAAAA,OAAMO,WAAAA,QAAAA,WAAAA,WAANP,OAAMO,QAAUL,OAAOK;;AAEvBP,OAAAA,WAAAA,UAAAA,OAAMQ,YAAAA,QAAAA,YAAAA,WAANR,QAAMQ,SAAWN,OAAOM;IAC1B;AAMN,IAAIG,YAAY,YACdA,cAAcA,YAAY;EAE9B;AAGA,SAAO,qBAAClB,aAAAA,eAAAA;IAAYK;IAAUI,QAAQS;IAAaX;KAAmBG,IAAAA,CAAAA;AACxE,CAAA;AAEAZ,MAAMwB,UAAUvB,QAAQuB;AACxBxB,MAAMyB,qBAAqBxB,QAAQwB;AACnCzB,MAAM0B,WAAWzB,QAAQyB;AACzB1B,MAAM2B,uBAAuB1B,QAAQ0B;AACrC3B,MAAM4B,gBAAgB3B,QAAQ2B;AAC9B5B,MAAM6B,aAAa5B,QAAQ4B;",
5
- "names": ["isWeb", "styled", "usePropsAndStyle", "Image", "RNImage", "StyledImage", "name", "hasWarned", "styleable", "inProps", "ref", "props", "style", "src", "source", "rest", "process", "env", "NODE_ENV", "width", "height", "console", "warn", "finalSource", "uri", "Array", "isArray", "getSize", "getSizeWithHeaders", "prefetch", "prefetchWithMetadata", "abortPrefetch", "queryCache"]
4
+ "mappings": ";AAAA,SAASA,aAAa;AAQtB,SAASC,QAAQC,wBAAwB;AACzC,SAASC,iBAA0B;AACnC,SAASC,SAASC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjC,IAAMC,cAAcL,OAAOI,SAAS;EAClCE,MAAM;AACR,CAAA,GAmCIC,YAAY,IAEHJ,QAAQE,YAAYG,UAAsB,SAACC,SAASC,KAAAA;AAC/D,MAAuBT,oBAAAA,iBAAAA,iBAAiBQ,OAAAA,GAAAA,CAAAA,GAAjCE,QAAgBV,kBAAAA,CAAAA,GAATW,QAASX,kBAAAA,CAAAA,GACfY,MAAyBF,MAAzBE,KAAKC,SAAoBH,MAApBG,QAAWC,OAAAA,2BAASJ,OAAAA;IAAzBE;IAAKC;;AAEb,EAAIE,QAAQC,IAAIC,aAAa,iBACvB,OAAOL,OAAQ,aAEd,OAAOF,MAAMQ,SAAU,YAAYR,MAAMQ,MAAM,CAAA,MAAO,OACtD,OAAOR,MAAMS,UAAW,YAAYT,MAAMS,OAAO,CAAA,MAAO,SAEpDb,cACHA,YAAY,IACZc,QAAQC,KACL,4IAAA;AAOX,MAAIC,cACF,OAAOV,OAAQ,WACX,eAAA;IACEW,KAAKX;KACDd,SAAS;IACXoB,OAAOR,MAAMQ,UAASP,SAAAA,OAAAA,SAAAA,MAAOO;IAC7BC,QAAQT,MAAMS,WAAUR,SAAAA,OAAAA,SAAAA,MAAOQ;EACjC,CAAA,IAEFN,UAAUD;AAEhB,MAAIU,eAAe,OAAOA,eAAgB,UAAU;AAGhD,QAAI,CAACE,MAAMC,QAAQH,WAAAA,KACb,OAAOA,YAAYC,OAAQ,aAC7BD,cAAcA,YAAYC,KACtBV,UAAU,OAAOA,UAAW,YAAY,CAACW,MAAMC,QAAQZ,MAAAA,IAAS;UAElEF,QAEAA;AAFAA,OAAAA,UAAAA,SAAAA,OAAMO,WAAAA,QAAAA,WAAAA,WAANP,OAAMO,QAAUL,OAAOK;;AAEvBP,OAAAA,WAAAA,UAAAA,OAAMQ,YAAAA,QAAAA,YAAAA,WAANR,QAAMQ,SAAWN,OAAOM;IAC1B;AAKN,IAAIJ,QAAQC,IAAIC,aAAa,iBAAiBF,QAAQC,IAAIU,6BAExDzB,UAAU,WAAA;UACO0B,MAAAA,WAAAA;eAAAA,KAAAA,MAAAA,MAAAA,SAAAA;;eAAAA,OAAAA;AAAAA,sBAAf,oBAAA,WAAA;cAIaC;;;;oBAHP,OAAOhB,OAAQ,SAAf,QAAA;;;;;;;;;;;oBAEA;;kBAAMiB,MAAMjB,GAAAA,EAAKkB,KAAK,SAACC,KAAAA;2BAAQA,IAAIC,KAAI;;;;AAAvC,8BAAA,KAAA;;;;;AACOJ,6BAAAA,OAAAA,KAAAA,GACPR,QAAQa,MAAO,wBAA2B,OAAJrB,GAAAA,GAAO;kBAAEF;gBAAM,CAAA;;;;;;;;;;QAG3D,CAAA,GAReiB,KAAAA,MAAAA,MAAAA,SAAAA;;AAUfA,UAAAA;IACF,GAAG;MAACf;KAAI,GAINU,YAAY,YACdA,cAAcA,YAAY;EAE9B;AAGA,SAAO,qBAACnB,SAAAA,eAAAA;IAAQM;IAAUI,QAAQS;IAAaX;KAAmBG,IAAAA,CAAAA;AACpE,CAAA;AAEAZ,MAAMgC,UAAU/B,QAAQ+B;AACxBhC,MAAMiC,qBAAqBhC,QAAQgC;AACnCjC,MAAMkC,WAAWjC,QAAQiC;AACzBlC,MAAMmC,uBAAuBlC,QAAQkC;AACrCnC,MAAMoC,gBAAgBnC,QAAQmC;AAC9BpC,MAAMqC,aAAapC,QAAQoC;",
5
+ "names": ["isWeb", "styled", "usePropsAndStyle", "useEffect", "Image", "RNImage", "StyledImage", "name", "hasWarned", "styleable", "inProps", "ref", "props", "style", "src", "source", "rest", "process", "env", "NODE_ENV", "width", "height", "console", "warn", "finalSource", "uri", "Array", "isArray", "TAMAGUI_IMAGE_CHECK_ERROR", "run", "err", "fetch", "then", "res", "text", "error", "getSize", "getSizeWithHeaders", "prefetch", "prefetchWithMetadata", "abortPrefetch", "queryCache"]
6
6
  }
package/dist/jsx/Image.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { isWeb } from "@tamagui/constants";
2
2
  import { styled, usePropsAndStyle } from "@tamagui/core";
3
+ import { useEffect } from "react";
3
4
  import { Image as RNImage } from "react-native-web";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  const StyledImage = styled(RNImage, {
@@ -11,8 +12,24 @@ const Image = StyledImage.styleable((inProps, ref) => {
11
12
  process.env.NODE_ENV === "development" && typeof src == "string" && (typeof props.width == "string" && props.width[0] !== "$" || typeof props.height == "string" && props.height[0] !== "$") && (hasWarned || (hasWarned = !0, console.warn(
12
13
  '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.'
13
14
  )));
14
- let finalSource = typeof src == "string" ? { uri: src, ...isWeb && { width: props.width, height: props.height } } : source ?? src;
15
- return finalSource && typeof finalSource == "object" && finalSource.default && (finalSource = finalSource.default), /* @__PURE__ */ jsx(StyledImage, { ref, source: finalSource, style, ...rest });
15
+ let finalSource = typeof src == "string" ? {
16
+ uri: src,
17
+ ...isWeb && {
18
+ width: props.width || style?.width,
19
+ height: props.height || style?.height
20
+ }
21
+ } : source ?? src;
22
+ return finalSource && typeof finalSource == "object" && (process.env.NODE_ENV === "development" && process.env.TAMAGUI_IMAGE_CHECK_ERROR && useEffect(() => {
23
+ async function run() {
24
+ if (typeof src == "string")
25
+ try {
26
+ await fetch(src).then((res) => res.text());
27
+ } catch {
28
+ console.error(`Error loading image: ${src}`, { props });
29
+ }
30
+ }
31
+ run();
32
+ }, [src]), finalSource.default && (finalSource = finalSource.default)), /* @__PURE__ */ jsx(RNImage, { ref, source: finalSource, style, ...rest });
16
33
  });
17
34
  Image.getSize = RNImage.getSize;
18
35
  Image.getSizeWithHeaders = RNImage.getSizeWithHeaders;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Image.tsx"],
4
- "mappings": "AAAA,SAAS,aAAa;AAQtB,SAAS,QAAQ,wBAAwB;AAEzC,SAAS,SAAS,eAAe;AAyFxB;AAvFT,MAAM,cAAc,OAAO,SAAS;AAAA,EAClC,MAAM;AACR,CAAC;AAmCD,IAAI,YAAY;AAET,MAAM,QAAQ,YAAY,UAAsB,CAAC,SAAS,QAAQ;AACvE,QAAM,CAAC,OAAO,KAAK,IAAI,iBAAiB,OAAO,GACzC,EAAE,KAAK,QAAQ,GAAG,KAAK,IAAI;AAEjC,EAAI,QAAQ,IAAI,aAAa,iBACvB,OAAO,OAAQ,aAEd,OAAO,MAAM,SAAU,YAAY,MAAM,MAAM,CAAC,MAAM,OACtD,OAAO,MAAM,UAAW,YAAY,MAAM,OAAO,CAAC,MAAM,SAEpD,cACH,YAAY,IACZ,QAAQ;AAAA,IACN;AAAA,EACF;AAMR,MAAI,cACF,OAAO,OAAQ,WACX,EAAE,KAAK,KAAK,GAAI,SAAS,EAAE,OAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,EAAG,IACvE,UAAU;AAEhB,SAAI,eAAe,OAAO,eAAgB,YAiBpC,YAAY,YACd,cAAc,YAAY,UAKvB,oBAAC,eAAY,KAAU,QAAQ,aAAa,OAAe,GAAI,MAAc;AACtF,CAAC;AAED,MAAM,UAAU,QAAQ;AACxB,MAAM,qBAAqB,QAAQ;AACnC,MAAM,WAAW,QAAQ;AACzB,MAAM,uBAAuB,QAAQ;AACrC,MAAM,gBAAgB,QAAQ;AAC9B,MAAM,aAAa,QAAQ;",
4
+ "mappings": "AAAA,SAAS,aAAa;AAQtB,SAAS,QAAQ,wBAAwB;AACzC,SAAS,iBAA0B;AACnC,SAAS,SAAS,eAAe;AAgHxB;AA9GT,MAAM,cAAc,OAAO,SAAS;AAAA,EAClC,MAAM;AACR,CAAC;AAmCD,IAAI,YAAY;AAET,MAAM,QAAQ,YAAY,UAAsB,CAAC,SAAS,QAAQ;AACvE,QAAM,CAAC,OAAO,KAAK,IAAI,iBAAiB,OAAO,GACzC,EAAE,KAAK,QAAQ,GAAG,KAAK,IAAI;AAEjC,EAAI,QAAQ,IAAI,aAAa,iBACvB,OAAO,OAAQ,aAEd,OAAO,MAAM,SAAU,YAAY,MAAM,MAAM,CAAC,MAAM,OACtD,OAAO,MAAM,UAAW,YAAY,MAAM,OAAO,CAAC,MAAM,SAEpD,cACH,YAAY,IACZ,QAAQ;AAAA,IACN;AAAA,EACF;AAMR,MAAI,cACF,OAAO,OAAQ,WACX;AAAA,IACE,KAAK;AAAA,IACL,GAAI,SAAS;AAAA,MACX,OAAO,MAAM,SAAS,OAAO;AAAA,MAC7B,QAAQ,MAAM,UAAU,OAAO;AAAA,IACjC;AAAA,EACF,IACA,UAAU;AAEhB,SAAI,eAAe,OAAO,eAAgB,aAgBpC,QAAQ,IAAI,aAAa,iBAAiB,QAAQ,IAAI,6BAExD,UAAU,MAAM;AACd,mBAAe,MAAM;AACnB,UAAI,OAAO,OAAQ;AACjB,YAAI;AACF,gBAAM,MAAM,GAAG,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAAA,QAC3C,QAAc;AACZ,kBAAQ,MAAM,wBAAwB,GAAG,IAAI,EAAE,MAAM,CAAC;AAAA,QACxD;AAAA,IAEJ;AAEA,QAAI;AAAA,EACN,GAAG,CAAC,GAAG,CAAC,GAIN,YAAY,YACd,cAAc,YAAY,WAKvB,oBAAC,WAAQ,KAAU,QAAQ,aAAa,OAAe,GAAI,MAAc;AAClF,CAAC;AAED,MAAM,UAAU,QAAQ;AACxB,MAAM,qBAAqB,QAAQ;AACnC,MAAM,WAAW,QAAQ;AACzB,MAAM,uBAAuB,QAAQ;AACrC,MAAM,gBAAgB,QAAQ;AAC9B,MAAM,aAAa,QAAQ;",
5
5
  "names": []
6
6
  }
@@ -1,5 +1,6 @@
1
1
  import { isWeb } from "@tamagui/constants";
2
2
  import { styled, usePropsAndStyle } from "@tamagui/core";
3
+ import { useEffect } from "react";
3
4
  import { Image as RNImage } from "react-native-web";
4
5
  import { jsx } from "react/jsx-runtime";
5
6
  const StyledImage = styled(RNImage, {
@@ -17,11 +18,22 @@ const Image = StyledImage.styleable((inProps, ref) => {
17
18
  let finalSource = typeof src == "string" ? {
18
19
  uri: src,
19
20
  ...(isWeb && {
20
- width: props.width,
21
- height: props.height
21
+ width: props.width || style?.width,
22
+ height: props.height || style?.height
22
23
  })
23
24
  } : source ?? src;
24
- return finalSource && typeof finalSource == "object" && finalSource.default && (finalSource = finalSource.default), /* @__PURE__ */jsx(StyledImage, {
25
+ return finalSource && typeof finalSource == "object" && (process.env.NODE_ENV === "development" && process.env.TAMAGUI_IMAGE_CHECK_ERROR && useEffect(() => {
26
+ async function run() {
27
+ if (typeof src == "string") try {
28
+ await fetch(src).then(res => res.text());
29
+ } catch {
30
+ console.error(`Error loading image: ${src}`, {
31
+ props
32
+ });
33
+ }
34
+ }
35
+ run();
36
+ }, [src]), finalSource.default && (finalSource = finalSource.default)), /* @__PURE__ */jsx(RNImage, {
25
37
  ref,
26
38
  source: finalSource,
27
39
  style,
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { isWeb } from "@tamagui/constants";
3
3
  import { styled, usePropsAndStyle } from "@tamagui/core";
4
+ import { useEffect } from "react";
4
5
  import { Image as RNImage } from "react-native";
5
6
  function _array_like_to_array(arr, len) {
6
7
  (len == null || len > arr.length) && (len = arr.length);
@@ -10,6 +11,30 @@ function _array_like_to_array(arr, len) {
10
11
  function _array_with_holes(arr) {
11
12
  if (Array.isArray(arr)) return arr;
12
13
  }
14
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
15
+ try {
16
+ var info = gen[key](arg), value = info.value;
17
+ } catch (error) {
18
+ reject(error);
19
+ return;
20
+ }
21
+ info.done ? resolve(value) : Promise.resolve(value).then(_next, _throw);
22
+ }
23
+ function _async_to_generator(fn) {
24
+ return function() {
25
+ var self = this, args = arguments;
26
+ return new Promise(function(resolve, reject) {
27
+ var gen = fn.apply(self, args);
28
+ function _next(value) {
29
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
30
+ }
31
+ function _throw(err) {
32
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
33
+ }
34
+ _next(void 0);
35
+ });
36
+ };
37
+ }
13
38
  function _define_property(obj, key, value) {
14
39
  return key in obj ? Object.defineProperty(obj, key, {
15
40
  value,
@@ -79,6 +104,92 @@ function _unsupported_iterable_to_array(o, minLen) {
79
104
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
80
105
  }
81
106
  }
107
+ function _ts_generator(thisArg, body) {
108
+ var f, y, t, g, _ = {
109
+ label: 0,
110
+ sent: function() {
111
+ if (t[0] & 1) throw t[1];
112
+ return t[1];
113
+ },
114
+ trys: [],
115
+ ops: []
116
+ };
117
+ return g = {
118
+ next: verb(0),
119
+ throw: verb(1),
120
+ return: verb(2)
121
+ }, typeof Symbol == "function" && (g[Symbol.iterator] = function() {
122
+ return this;
123
+ }), g;
124
+ function verb(n) {
125
+ return function(v) {
126
+ return step([
127
+ n,
128
+ v
129
+ ]);
130
+ };
131
+ }
132
+ function step(op) {
133
+ if (f) throw new TypeError("Generator is already executing.");
134
+ for (; _; ) try {
135
+ if (f = 1, y && (t = op[0] & 2 ? y.return : op[0] ? y.throw || ((t = y.return) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
136
+ switch (y = 0, t && (op = [
137
+ op[0] & 2,
138
+ t.value
139
+ ]), op[0]) {
140
+ case 0:
141
+ case 1:
142
+ t = op;
143
+ break;
144
+ case 4:
145
+ return _.label++, {
146
+ value: op[1],
147
+ done: !1
148
+ };
149
+ case 5:
150
+ _.label++, y = op[1], op = [
151
+ 0
152
+ ];
153
+ continue;
154
+ case 7:
155
+ op = _.ops.pop(), _.trys.pop();
156
+ continue;
157
+ default:
158
+ if (t = _.trys, !(t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
159
+ _ = 0;
160
+ continue;
161
+ }
162
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
163
+ _.label = op[1];
164
+ break;
165
+ }
166
+ if (op[0] === 6 && _.label < t[1]) {
167
+ _.label = t[1], t = op;
168
+ break;
169
+ }
170
+ if (t && _.label < t[2]) {
171
+ _.label = t[2], _.ops.push(op);
172
+ break;
173
+ }
174
+ t[2] && _.ops.pop(), _.trys.pop();
175
+ continue;
176
+ }
177
+ op = body.call(thisArg, _);
178
+ } catch (e) {
179
+ op = [
180
+ 6,
181
+ e
182
+ ], y = 0;
183
+ } finally {
184
+ f = t = 0;
185
+ }
186
+ if (op[0] & 5) throw op[1];
187
+ return {
188
+ value: op[0] ? op[1] : void 0,
189
+ done: !0
190
+ };
191
+ }
192
+ }
82
193
  var StyledImage = styled(RNImage, {
83
194
  name: "Image"
84
195
  }), hasWarned = !1, Image = StyledImage.styleable(function(inProps, ref) {
@@ -90,8 +201,8 @@ var StyledImage = styled(RNImage, {
90
201
  var finalSource = typeof src == "string" ? _object_spread({
91
202
  uri: src
92
203
  }, isWeb && {
93
- width: props.width,
94
- height: props.height
204
+ width: props.width || (style == null ? void 0 : style.width),
205
+ height: props.height || (style == null ? void 0 : style.height)
95
206
  }) : source ?? src;
96
207
  if (finalSource && typeof finalSource == "object") {
97
208
  if (!Array.isArray(finalSource) && typeof finalSource.uri == "number" && (finalSource = finalSource.uri, source && typeof source == "object" && !Array.isArray(source))) {
@@ -100,9 +211,59 @@ var StyledImage = styled(RNImage, {
100
211
  var _height;
101
212
  (_height = (_style1 = style).height) !== null && _height !== void 0 || (_style1.height = source.height);
102
213
  }
103
- finalSource.default && (finalSource = finalSource.default);
214
+ process.env.NODE_ENV === "development" && process.env.TAMAGUI_IMAGE_CHECK_ERROR && useEffect(function() {
215
+ var run = function() {
216
+ return _run.apply(this, arguments);
217
+ };
218
+ function _run() {
219
+ return _run = _async_to_generator(function() {
220
+ var err;
221
+ return _ts_generator(this, function(_state) {
222
+ switch (_state.label) {
223
+ case 0:
224
+ if (typeof src != "string") return [
225
+ 3,
226
+ 4
227
+ ];
228
+ _state.label = 1;
229
+ case 1:
230
+ return _state.trys.push([
231
+ 1,
232
+ 3,
233
+ ,
234
+ 4
235
+ ]), [
236
+ 4,
237
+ fetch(src).then(function(res) {
238
+ return res.text();
239
+ })
240
+ ];
241
+ case 2:
242
+ return _state.sent(), [
243
+ 3,
244
+ 4
245
+ ];
246
+ case 3:
247
+ return err = _state.sent(), console.error("Error loading image: ".concat(src), {
248
+ props
249
+ }), [
250
+ 3,
251
+ 4
252
+ ];
253
+ case 4:
254
+ return [
255
+ 2
256
+ ];
257
+ }
258
+ });
259
+ }), _run.apply(this, arguments);
260
+ }
261
+ run();
262
+ }, [
263
+ src
264
+ ]), finalSource.default && (finalSource = finalSource.default);
104
265
  }
105
- return /* @__PURE__ */ _jsx(StyledImage, _object_spread({
266
+ return /* @__PURE__ */ _jsx(RNImage, _object_spread({
106
267
  ref,
107
268
  source: finalSource,
108
269
  style
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/Users/n8/tamagui/packages/image/src/Image.tsx"],
4
- "mappings": ";AAAA,SAASA,aAAa;AAQtB,SAASC,QAAQC,wBAAwB;AAEzC,SAASC,SAASC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEjC,IAAMC,cAAcJ,OAAOG,SAAS;EAClCE,MAAM;AACR,CAAA,GAmCIC,YAAY,IAEHJ,QAAQE,YAAYG,UAAsB,SAACC,SAASC,KAAAA;AAC/D,MAAuBR,oBAAAA,iBAAAA,iBAAiBO,OAAAA,GAAAA,CAAAA,GAAjCE,QAAgBT,kBAAAA,CAAAA,GAATU,QAASV,kBAAAA,CAAAA,GACfW,MAAyBF,MAAzBE,KAAKC,SAAoBH,MAApBG,QAAWC,OAAAA,2BAASJ,OAAAA;IAAzBE;IAAKC;;AAEb,EAAIE,QAAQC,IAAIC,aAAa,iBACvB,OAAOL,OAAQ,aAEd,OAAOF,MAAMQ,SAAU,YAAYR,MAAMQ,MAAM,CAAA,MAAO,OACtD,OAAOR,MAAMS,UAAW,YAAYT,MAAMS,OAAO,CAAA,MAAO,SAEpDb,cACHA,YAAY,IACZc,QAAQC,KACL,4IAAA;AAOX,MAAIC,cACF,OAAOV,OAAQ,WACX,eAAA;IAAEW,KAAKX;KAASb,SAAS;IAAEmB,OAAOR,MAAMQ;IAAOC,QAAQT,MAAMS;EAAO,CAAA,IACpEN,UAAUD;AAEhB,MAAIU,eAAe,OAAOA,eAAgB,UAAU;AAGhD,QAAI,CAACE,MAAMC,QAAQH,WAAAA,KACb,OAAOA,YAAYC,OAAQ,aAC7BD,cAAcA,YAAYC,KACtBV,UAAU,OAAOA,UAAW,YAAY,CAACW,MAAMC,QAAQZ,MAAAA,IAAS;UAElEF,QAEAA;AAFAA,OAAAA,UAAAA,SAAAA,OAAMO,WAAAA,QAAAA,WAAAA,WAANP,OAAMO,QAAUL,OAAOK;;AAEvBP,OAAAA,WAAAA,UAAAA,OAAMQ,YAAAA,QAAAA,YAAAA,WAANR,QAAMQ,SAAWN,OAAOM;IAC1B;AAMN,IAAIG,YAAY,YACdA,cAAcA,YAAY;EAE9B;AAGA,SAAO,qBAAClB,aAAAA,eAAAA;IAAYK;IAAUI,QAAQS;IAAaX;KAAmBG,IAAAA,CAAAA;AACxE,CAAA;AAEAZ,MAAMwB,UAAUvB,QAAQuB;AACxBxB,MAAMyB,qBAAqBxB,QAAQwB;AACnCzB,MAAM0B,WAAWzB,QAAQyB;AACzB1B,MAAM2B,uBAAuB1B,QAAQ0B;AACrC3B,MAAM4B,gBAAgB3B,QAAQ2B;AAC9B5B,MAAM6B,aAAa5B,QAAQ4B;",
5
- "names": ["isWeb", "styled", "usePropsAndStyle", "Image", "RNImage", "StyledImage", "name", "hasWarned", "styleable", "inProps", "ref", "props", "style", "src", "source", "rest", "process", "env", "NODE_ENV", "width", "height", "console", "warn", "finalSource", "uri", "Array", "isArray", "getSize", "getSizeWithHeaders", "prefetch", "prefetchWithMetadata", "abortPrefetch", "queryCache"]
4
+ "mappings": "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",
5
+ "names": ["isWeb", "styled", "usePropsAndStyle", "useEffect", "Image", "RNImage", "StyledImage", "name", "hasWarned", "styleable", "inProps", "ref", "props", "style", "src", "source", "rest", "process", "env", "NODE_ENV", "width", "height", "console", "warn", "finalSource", "uri", "Array", "isArray", "TAMAGUI_IMAGE_CHECK_ERROR", "run", "err", "fetch", "then", "res", "text", "error", "getSize", "getSizeWithHeaders", "prefetch", "prefetchWithMetadata", "abortPrefetch", "queryCache"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/image",
3
- "version": "1.100.6",
3
+ "version": "1.101.1",
4
4
  "sideEffects": [
5
5
  "*.css"
6
6
  ],
@@ -32,15 +32,14 @@
32
32
  }
33
33
  },
34
34
  "dependencies": {
35
- "@tamagui/constants": "1.100.6",
36
- "@tamagui/core": "1.100.6"
35
+ "@tamagui/constants": "1.101.1",
36
+ "@tamagui/core": "1.101.1"
37
37
  },
38
38
  "peerDependencies": {
39
- "react": "*",
40
- "react-native": "*"
39
+ "react": "*"
41
40
  },
42
41
  "devDependencies": {
43
- "@tamagui/build": "1.100.6",
42
+ "@tamagui/build": "1.101.1",
44
43
  "react": "^18.2.0",
45
44
  "react-native": "0.74.1"
46
45
  },
package/src/Image.tsx CHANGED
@@ -7,7 +7,7 @@ import type {
7
7
  ThemeValueFallback,
8
8
  } from '@tamagui/core'
9
9
  import { styled, usePropsAndStyle } from '@tamagui/core'
10
- import type { FC } from 'react'
10
+ import { useEffect, type FC } from 'react'
11
11
  import { Image as RNImage } from 'react-native'
12
12
 
13
13
  const StyledImage = styled(RNImage, {
@@ -71,7 +71,13 @@ export const Image = StyledImage.styleable<ImageProps>((inProps, ref) => {
71
71
 
72
72
  let finalSource =
73
73
  typeof src === 'string'
74
- ? { uri: src, ...(isWeb && { width: props.width, height: props.height }) }
74
+ ? {
75
+ uri: src,
76
+ ...(isWeb && {
77
+ width: props.width || style?.width,
78
+ height: props.height || style?.height,
79
+ }),
80
+ }
75
81
  : source ?? src
76
82
 
77
83
  if (finalSource && typeof finalSource === 'object') {
@@ -90,6 +96,23 @@ export const Image = StyledImage.styleable<ImageProps>((inProps, ref) => {
90
96
  }
91
97
  }
92
98
 
99
+ if (process.env.NODE_ENV === 'development' && process.env.TAMAGUI_IMAGE_CHECK_ERROR) {
100
+ // lets add an onload timeout and warning if it fails to load in console
101
+ useEffect(() => {
102
+ async function run() {
103
+ if (typeof src === 'string') {
104
+ try {
105
+ await fetch(src).then((res) => res.text())
106
+ } catch (err) {
107
+ console.error(`Error loading image: ${src}`, { props })
108
+ }
109
+ }
110
+ }
111
+
112
+ run()
113
+ }, [src])
114
+ }
115
+
93
116
  // require compat across native/web
94
117
  if (finalSource['default']) {
95
118
  finalSource = finalSource['default']
@@ -97,7 +120,7 @@ export const Image = StyledImage.styleable<ImageProps>((inProps, ref) => {
97
120
  }
98
121
 
99
122
  // must set defaultSource to allow SSR, default it to the same as src
100
- return <StyledImage ref={ref} source={finalSource} style={style} {...(rest as any)} />
123
+ return <RNImage ref={ref} source={finalSource} style={style} {...(rest as any)} />
101
124
  }) as any as ImageType
102
125
 
103
126
  Image.getSize = RNImage.getSize
package/types/Image.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { GetProps, RadiusTokens, SizeTokens, StackProps, ThemeValueFallback } from '@tamagui/core';
2
- import type { FC } from 'react';
2
+ import { type FC } from 'react';
3
3
  import { Image as RNImage } from 'react-native';
4
4
  declare const StyledImage: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, RNImage, import("@tamagui/core").TamaguiComponentPropsBaseBase & import("react-native").ImageProps, import("@tamagui/core").StackStyleBase, {}, import("@tamagui/core").StaticConfigPublic>;
5
5
  type StyledImageProps = Omit<GetProps<typeof StyledImage>, 'borderRadius'> & {
@@ -1 +1 @@
1
- {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../src/Image.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,EACnB,MAAM,eAAe,CAAA;AAEtB,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AAE/C,QAAA,MAAM,WAAW,yQAEf,CAAA;AAEF,KAAK,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,EAAE,cAAc,CAAC,GAAG;IAC3E,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,KAAK,SAAS,GAAG,IAAI,CACnB,gBAAgB,EAChB,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CACzD,GAAG;IACF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,kBAAkB,CAAA;IACzD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,kBAAkB,CAAA;IAE1D;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACzC,wCAAwC;IACxC,UAAU,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;IAC3C,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,SAAS,CAAC,CAAA;AAEtE,KAAK,WAAW,GAAG,OAAO,OAAO,CAAA;AAEjC,KAAK,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG;IAChC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAC/B,kBAAkB,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAA;IACrD,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACjC,oBAAoB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAA;IACzD,aAAa,EAAE,WAAW,CAAC,eAAe,CAAC,CAAA;IAC3C,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;CACtC,CAAA;AAID,eAAO,MAAM,KAAK,WAiDI,CAAA"}
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../src/Image.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,EACnB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAa,KAAK,EAAE,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AAE/C,QAAA,MAAM,WAAW,yQAEf,CAAA;AAEF,KAAK,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,EAAE,cAAc,CAAC,GAAG;IAC3E,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,KAAK,SAAS,GAAG,IAAI,CACnB,gBAAgB,EAChB,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CACzD,GAAG;IACF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,kBAAkB,CAAA;IACzD,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,kBAAkB,CAAA;IAE1D;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACzC,wCAAwC;IACxC,UAAU,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;IAC3C,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,SAAS,CAAC,CAAA;AAEtE,KAAK,WAAW,GAAG,OAAO,OAAO,CAAA;AAEjC,KAAK,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG;IAChC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAC/B,kBAAkB,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAA;IACrD,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAA;IACjC,oBAAoB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAA;IACzD,aAAa,EAAE,WAAW,CAAC,eAAe,CAAC,CAAA;IAC3C,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;CACtC,CAAA;AAID,eAAO,MAAM,KAAK,EAwEL,SAAS,CAAA"}