@react-native-ohos/react-native-blurhash 2.1.0 → 2.2.0-rc.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.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Use these variables when you tailor your ArkTS code. They must be of the const type.
3
3
  */
4
- export const HAR_VERSION = '2.1.0';
4
+ export const HAR_VERSION = '2.2.0-rc.1';
5
5
  export const BUILD_MODE_NAME = 'debug';
6
6
  export const DEBUG = true;
7
7
  export const TARGET_NAME = 'default';
@@ -5,7 +5,7 @@
5
5
  description: '',
6
6
  main: 'index.ets',
7
7
  type: 'module',
8
- version: '2.1.0',
8
+ version: '2.2.0-rc.1',
9
9
  dependencies: {
10
10
  "@rnoh/react-native-openharmony": 'file:../react_native_openharmony',
11
11
  "librnoh_blurhash.so": "file:./src/main/cpp/types/libblurhash"
Binary file
@@ -9,12 +9,11 @@ var _reactNative = require("react-native");
9
9
  var _NativeBlurhashModule = _interopRequireDefault(require("./specs/NativeBlurhashModule"));
10
10
  var _NativeBlurhashView = _interopRequireDefault(require("./specs/NativeBlurhashView"));
11
11
  var _utils = require("./utils");
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
16
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
15
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
18
17
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19
18
  class Blurhash extends React.PureComponent {
20
19
  constructor(props) {
@@ -1 +1 @@
1
- {"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_NativeBlurhashModule","_interopRequireDefault","_NativeBlurhashView","_utils","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","_defineProperty","value","_toPropertyKey","enumerable","configurable","writable","_toPrimitive","String","Symbol","toPrimitive","TypeError","Number","Blurhash","PureComponent","constructor","props","_onLoadStart","_onLoadEnd","_onLoadError","encode","imageUri","componentsX","componentsY","Error","NativeBlurhashModule","createBlurhashFromImage","getAverageColor","blurhash","undefined","decode83","substring","decodeDC","clearCosineCache","Platform","OS","console","warn","isBlurhashValid","onLoadStart","onLoadEnd","event","_event$nativeEvent","onLoadError","nativeEvent","message","render","createElement","exports"],"sources":["index.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Platform, type NativeSyntheticEvent, type ViewProps } from 'react-native';\nimport NativeBlurhashModule from './specs/NativeBlurhashModule';\nimport NativeBlurhashView from './specs/NativeBlurhashView';\nimport { decode83, decodeDC, isBlurhashValid, type RGB } from './utils';\n\nexport interface BlurhashProps extends Omit<ViewProps, 'children'> {\n\t/**\n\t * The blurhash string to use. Example: `LGFFaXYk^6#M@-5c,1J5@[or[Q6`.\n\t */\n\tblurhash: string;\n\t/**\n\t * The width (resolution) to decode to. Higher values decrease performance, use `16` for large lists, otherwise you can increase it to `32`.\n\t * @default 32\n\t */\n\tdecodeWidth?: number;\n\t/**\n\t * The height (resolution) to decode to. Higher values decrease performance, use `16` for large lists, otherwise you can increase it to `32`.\n\t * @default 32\n\t */\n\tdecodeHeight?: number;\n\t/**\n\t * Adjusts the contrast of the output image. Tweak it if you want a different look for your placeholders.\n\t * @default 1.0\n\t */\n\tdecodePunch?: number;\n\t/**\n\t * Asynchronously decode the Blurhash on a background Thread instead of the UI-Thread.\n\t * Read the [performance documentation](https://github.com/mrousavy/react-native-blurhash#performance)\n\t * before enabling this.\n\t * @default false\n\t */\n\tdecodeAsync?: boolean;\n\t/**\n\t * Adjusts the resize mode of the image.\n\t * @default 'cover'\n\t */\n\tresizeMode?: 'cover' | 'contain' | 'stretch' | 'center';\n\n\t/**\n\t * Emitted when the Blurhash received new parameters and started to decode the given `blurhash` string.\n\t */\n\tonLoadStart?: () => void;\n\n\t/**\n\t * Emitted when the Blurhash successfully decoded the given `blurhash` string and rendered the image to the `<Blurhash>` view.\n\t */\n\tonLoadEnd?: () => void;\n\n\t/**\n\t * Emitted when the Blurhash failed to decode/load.\n\t */\n\tonLoadError?: (message?: string) => void;\n}\n\nexport class Blurhash extends React.PureComponent<BlurhashProps> {\n\tstatic displayName = 'Blurhash';\n\n\tconstructor(props: BlurhashProps) {\n\t\tsuper(props);\n\t\tthis._onLoadStart = this._onLoadStart.bind(this);\n\t\tthis._onLoadEnd = this._onLoadEnd.bind(this);\n\t\tthis._onLoadError = this._onLoadError.bind(this);\n\t}\n\n\t/**\n\t * Encodes the given image URI to a blurhash string\n\t * @param imageUri An URI to an Image parseable by the react native image loader\n\t * @param componentsX The number of X components\n\t * @param componentsY The number of Y components\n\t * @example\n\t * const blurhash = await Blurhash.encode('https://blurha.sh/assets/images/img2.jpg')\n\t */\n\tstatic encode(imageUri: string, componentsX: number, componentsY: number): Promise<string> {\n\t\tif (typeof imageUri !== 'string') throw new Error('imageUri must be a non-empty string!');\n\t\tif (typeof componentsX !== 'number') throw new Error('componentsX must be a valid positive number!');\n\t\tif (typeof componentsY !== 'number') throw new Error('componentsY must be a valid positive number!');\n\n\t\treturn NativeBlurhashModule.createBlurhashFromImage(imageUri, componentsX, componentsY);\n\t}\n\n\t/**\n\t * Gets the average color in a given blurhash string.\n\t *\n\t * This uses the JS blurhash decoder, so it might be slow.\n\t * @param blurhash The blurhash string\n\t * @example\n\t * const averageColor = Blurhash.getAverageColor(`LGFFaXYk^6#M@-5c,1J5@[or[Q6.`)\n\t */\n\tstatic getAverageColor(blurhash: string): RGB | undefined {\n\t\tif (blurhash == null || blurhash.length < 7) return undefined;\n\n\t\tconst value = decode83(blurhash.substring(2, 6));\n\t\treturn decodeDC(value);\n\t}\n\n\t/**\n\t * Clears the cosine cache and frees up memory.\n\t *\n\t * @platform Android\n\t * @see https://github.com/mrousavy/react-native-blurhash#cosine-operations\n\t */\n\tstatic clearCosineCache(): void {\n\t\tif (Platform.OS === 'android') NativeBlurhashModule.clearCosineCache();\n\t\telse console.warn('Blurhash.clearCosineCache is only available on Android.');\n\t}\n\n\t/**\n\t * Verifies if the given blurhash is valid by checking it's type, length and size flag.\n\t *\n\t * This uses the JS blurhash decoder, so it might be slow.\n\t * @param blurhash The given blurhash string\n\t */\n\tstatic isBlurhashValid(blurhash: string): ReturnType<typeof isBlurhashValid> {\n\t\treturn isBlurhashValid(blurhash);\n\t}\n\n\t_onLoadStart() {\n\t\tif (this.props.onLoadStart != null) this.props.onLoadStart();\n\t}\n\t_onLoadEnd() {\n\t\tif (this.props.onLoadEnd != null) this.props.onLoadEnd();\n\t}\n\t_onLoadError(event?: NativeSyntheticEvent<{ message?: string }>) {\n\t\tif (this.props.onLoadError != null) this.props.onLoadError(event?.nativeEvent?.message);\n\t}\n\n\trender() {\n\t\treturn <NativeBlurhashView {...this.props} onLoadStart={this._onLoadStart} onLoadEnd={this._onLoadEnd} onLoadError={this._onLoadError} />;\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_NativeBlurhashModule","_interopRequireDefault","_NativeBlurhashView","_utils","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","Blurhash","PureComponent","constructor","props","_onLoadStart","_onLoadEnd","_onLoadError","encode","imageUri","componentsX","componentsY","Error","NativeBlurhashModule","createBlurhashFromImage","getAverageColor","blurhash","undefined","decode83","substring","decodeDC","clearCosineCache","Platform","OS","console","warn","isBlurhashValid","onLoadStart","onLoadEnd","event","_event$nativeEvent","onLoadError","nativeEvent","message","render","createElement","exports"],"sources":["index.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { Platform, type NativeSyntheticEvent, type ViewProps } from 'react-native';\r\nimport NativeBlurhashModule from './specs/NativeBlurhashModule';\r\nimport NativeBlurhashView from './specs/NativeBlurhashView';\r\nimport { decode83, decodeDC, isBlurhashValid, type RGB } from './utils';\r\n\r\nexport interface BlurhashProps extends Omit<ViewProps, 'children'> {\r\n\t/**\r\n\t * The blurhash string to use. Example: `LGFFaXYk^6#M@-5c,1J5@[or[Q6`.\r\n\t */\r\n\tblurhash: string;\r\n\t/**\r\n\t * The width (resolution) to decode to. Higher values decrease performance, use `16` for large lists, otherwise you can increase it to `32`.\r\n\t * @default 32\r\n\t */\r\n\tdecodeWidth?: number;\r\n\t/**\r\n\t * The height (resolution) to decode to. Higher values decrease performance, use `16` for large lists, otherwise you can increase it to `32`.\r\n\t * @default 32\r\n\t */\r\n\tdecodeHeight?: number;\r\n\t/**\r\n\t * Adjusts the contrast of the output image. Tweak it if you want a different look for your placeholders.\r\n\t * @default 1.0\r\n\t */\r\n\tdecodePunch?: number;\r\n\t/**\r\n\t * Asynchronously decode the Blurhash on a background Thread instead of the UI-Thread.\r\n\t * Read the [performance documentation](https://github.com/mrousavy/react-native-blurhash#performance)\r\n\t * before enabling this.\r\n\t * @default false\r\n\t */\r\n\tdecodeAsync?: boolean;\r\n\t/**\r\n\t * Adjusts the resize mode of the image.\r\n\t * @default 'cover'\r\n\t */\r\n\tresizeMode?: 'cover' | 'contain' | 'stretch' | 'center';\r\n\r\n\t/**\r\n\t * Emitted when the Blurhash received new parameters and started to decode the given `blurhash` string.\r\n\t */\r\n\tonLoadStart?: () => void;\r\n\r\n\t/**\r\n\t * Emitted when the Blurhash successfully decoded the given `blurhash` string and rendered the image to the `<Blurhash>` view.\r\n\t */\r\n\tonLoadEnd?: () => void;\r\n\r\n\t/**\r\n\t * Emitted when the Blurhash failed to decode/load.\r\n\t */\r\n\tonLoadError?: (message?: string) => void;\r\n}\r\n\r\nexport class Blurhash extends React.PureComponent<BlurhashProps> {\r\n\tstatic displayName = 'Blurhash';\r\n\r\n\tconstructor(props: BlurhashProps) {\r\n\t\tsuper(props);\r\n\t\tthis._onLoadStart = this._onLoadStart.bind(this);\r\n\t\tthis._onLoadEnd = this._onLoadEnd.bind(this);\r\n\t\tthis._onLoadError = this._onLoadError.bind(this);\r\n\t}\r\n\r\n\t/**\r\n\t * Encodes the given image URI to a blurhash string\r\n\t * @param imageUri An URI to an Image parseable by the react native image loader\r\n\t * @param componentsX The number of X components\r\n\t * @param componentsY The number of Y components\r\n\t * @example\r\n\t * const blurhash = await Blurhash.encode('https://blurha.sh/assets/images/img2.jpg')\r\n\t */\r\n\tstatic encode(imageUri: string, componentsX: number, componentsY: number): Promise<string> {\r\n\t\tif (typeof imageUri !== 'string') throw new Error('imageUri must be a non-empty string!');\r\n\t\tif (typeof componentsX !== 'number') throw new Error('componentsX must be a valid positive number!');\r\n\t\tif (typeof componentsY !== 'number') throw new Error('componentsY must be a valid positive number!');\r\n\r\n\t\treturn NativeBlurhashModule.createBlurhashFromImage(imageUri, componentsX, componentsY);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the average color in a given blurhash string.\r\n\t *\r\n\t * This uses the JS blurhash decoder, so it might be slow.\r\n\t * @param blurhash The blurhash string\r\n\t * @example\r\n\t * const averageColor = Blurhash.getAverageColor(`LGFFaXYk^6#M@-5c,1J5@[or[Q6.`)\r\n\t */\r\n\tstatic getAverageColor(blurhash: string): RGB | undefined {\r\n\t\tif (blurhash == null || blurhash.length < 7) return undefined;\r\n\r\n\t\tconst value = decode83(blurhash.substring(2, 6));\r\n\t\treturn decodeDC(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Clears the cosine cache and frees up memory.\r\n\t *\r\n\t * @platform Android\r\n\t * @see https://github.com/mrousavy/react-native-blurhash#cosine-operations\r\n\t */\r\n\tstatic clearCosineCache(): void {\r\n\t\tif (Platform.OS === 'android' || (Platform.OS as string) === 'harmony') NativeBlurhashModule.clearCosineCache();\r\n\t\telse console.warn('Blurhash.clearCosineCache is only available on Android.');\r\n\t}\r\n\r\n\t/**\r\n\t * Verifies if the given blurhash is valid by checking it's type, length and size flag.\r\n\t *\r\n\t * This uses the JS blurhash decoder, so it might be slow.\r\n\t * @param blurhash The given blurhash string\r\n\t */\r\n\tstatic isBlurhashValid(blurhash: string): ReturnType<typeof isBlurhashValid> {\r\n\t\treturn isBlurhashValid(blurhash);\r\n\t}\r\n\r\n\t_onLoadStart() {\r\n\t\tif (this.props.onLoadStart != null) this.props.onLoadStart();\r\n\t}\r\n\t_onLoadEnd() {\r\n\t\tif (this.props.onLoadEnd != null) this.props.onLoadEnd();\r\n\t}\r\n\t_onLoadError(event?: NativeSyntheticEvent<{ message?: string }>) {\r\n\t\tif (this.props.onLoadError != null) this.props.onLoadError(event?.nativeEvent?.message);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn <NativeBlurhashView {...this.props} onLoadStart={this._onLoadStart} onLoadEnd={this._onLoadEnd} onLoadError={this._onLoadError} />;\r\n\t}\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sources":["NativeBlurhashModule.ts"],"sourcesContent":["import { type TurboModule, TurboModuleRegistry } from 'react-native';\nimport type { Int32 } from 'react-native/Libraries/Types/CodegenTypes';\n\nexport interface Spec extends TurboModule {\n\tcreateBlurhashFromImage: (imageUri: string, componentsX: Int32, componentsY: Int32) => Promise<string>;\n\tclearCosineCache: () => void;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>('BlurhashModule');\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAqE,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAQtDC,gCAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC"}
1
+ {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sources":["NativeBlurhashModule.ts"],"sourcesContent":["import { type TurboModule, TurboModuleRegistry } from 'react-native';\r\nimport type { Double } from 'react-native/Libraries/Types/CodegenTypes';\r\n\r\nexport interface Spec extends TurboModule {\r\n\tcreateBlurhashFromImage: (imageUri: string, componentsX: Double, componentsY: Double) => Promise<string>;\r\n\tclearCosineCache: () => void;\r\n}\r\n\r\nexport default TurboModuleRegistry.getEnforcing<Spec>('BlurhashModule');\r\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAqE,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAQtDC,gCAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]}
@@ -5,6 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _codegenNativeComponent = _interopRequireDefault(require("react-native/Libraries/Utilities/codegenNativeComponent"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  var _default = exports.default = (0, _codegenNativeComponent.default)('BlurhashView');
10
10
  //# sourceMappingURL=NativeBlurhashView.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","obj","__esModule","default","_default","exports","codegenNativeComponent"],"sources":["NativeBlurhashView.ts"],"sourcesContent":["import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { DirectEventHandler, Double, Int32, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';\nimport type { ViewProps } from 'react-native';\n\ntype OnLoadErrorEvent = { message?: string };\n\ninterface NativeProps extends ViewProps {\n\tblurhash: string;\n\tdecodeWidth?: WithDefault<Int32, 32>;\n\tdecodeHeight?: WithDefault<Int32, 32>;\n\tdecodePunch?: WithDefault<Double, 1>;\n\tdecodeAsync?: WithDefault<boolean, false>;\n\tresizeMode?: WithDefault<'cover' | 'contain' | 'stretch' | 'center', 'cover'>;\n\tonLoadStart?: DirectEventHandler<null>;\n\tonLoadEnd?: DirectEventHandler<null>;\n\tonLoadError?: DirectEventHandler<OnLoadErrorEvent>;\n}\n\nexport default codegenNativeComponent<NativeProps>('BlurhashView');\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAkB9E,IAAAG,+BAAsB,EAAc,cAAc,CAAC"}
1
+ {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sources":["NativeBlurhashView.ts"],"sourcesContent":["import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\r\nimport type { DirectEventHandler, Double, Int32, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';\r\nimport type { ViewProps } from 'react-native';\r\n\r\ntype OnLoadErrorEvent = { message?: string };\r\n\r\ninterface NativeProps extends ViewProps {\r\n\tblurhash: string;\r\n\tdecodeWidth?: WithDefault<Int32, 32>;\r\n\tdecodeHeight?: WithDefault<Int32, 32>;\r\n\tdecodePunch?: WithDefault<Double, 1>;\r\n\tdecodeAsync?: WithDefault<boolean, false>;\r\n\tresizeMode?: WithDefault<'cover' | 'contain' | 'stretch' | 'center', 'cover'>;\r\n\tonLoadStart?: DirectEventHandler<null>;\r\n\tonLoadEnd?: DirectEventHandler<null>;\r\n\tonLoadError?: DirectEventHandler<OnLoadErrorEvent>;\r\n}\r\n\r\nexport default codegenNativeComponent<NativeProps>('BlurhashView');\r\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAkB9E,IAAAG,+BAAsB,EAAc,cAAc,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["sRGBToLinear","value","v","Math","pow","decodeDC","intR","intG","intB","r","g","b","decode83","str","i","length","c","digit","digitCharacters","indexOf","validateBlurhash","blurhash","Error","sizeFlag","numY","floor","numX","isBlurhashValid","error","message","JSON","stringify","isValid","errorReason"],"sources":["utils.ts"],"sourcesContent":["// Some functions from the Blurhash JS implementation that are used for light tasks (such as getting the average color or validating if a blurhash string is valid)\n\nexport interface RGB {\n\t/**\n\t * The Red value component of this RGB instance. Ranges from 0 to 255.\n\t */\n\tr: number;\n\t/**\n\t * The Green value component of this RGB instance. Ranges from 0 to 255.\n\t */\n\tg: number;\n\t/**\n\t * The Blue value component of this RGB instance. Ranges from 0 to 255.\n\t */\n\tb: number;\n}\n\nfunction sRGBToLinear(value: number): number {\n\tconst v = value / 255;\n\tif (v <= 0.04045) return v / 12.92;\n\telse return Math.pow((v + 0.055) / 1.055, 2.4);\n}\n\nexport function decodeDC(value: number): RGB {\n\tconst intR = value >> 16;\n\tconst intG = (value >> 8) & 255;\n\tconst intB = value & 255;\n\treturn { r: sRGBToLinear(intR) * 255, g: sRGBToLinear(intG) * 255, b: sRGBToLinear(intB) * 255 };\n}\n\nexport function decode83(str: string): number {\n\tlet value = 0;\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst c = str[i];\n\t\tconst digit = digitCharacters.indexOf(c);\n\t\tvalue = value * 83 + digit;\n\t}\n\treturn value;\n}\n\nfunction validateBlurhash(blurhash: string): void {\n\tif (!blurhash || blurhash.length < 6) throw new Error('The blurhash string must be at least 6 characters');\n\n\tconst sizeFlag = decode83(blurhash[0]);\n\tconst numY = Math.floor(sizeFlag / 9) + 1;\n\tconst numX = (sizeFlag % 9) + 1;\n\n\tif (blurhash.length !== 4 + 2 * numX * numY)\n\t\tthrow new Error(`blurhash length mismatch: length is ${blurhash.length} but it should be ${4 + 2 * numX * numY}`);\n}\n\nexport function isBlurhashValid(blurhash: string): { isValid: true } | { isValid: false; errorReason: string } {\n\ttry {\n\t\tvalidateBlurhash(blurhash);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : JSON.stringify(error);\n\t\treturn { isValid: false, errorReason: message };\n\t}\n\n\treturn { isValid: true };\n}\n\nconst digitCharacters = [\n\t'0',\n\t'1',\n\t'2',\n\t'3',\n\t'4',\n\t'5',\n\t'6',\n\t'7',\n\t'8',\n\t'9',\n\t'A',\n\t'B',\n\t'C',\n\t'D',\n\t'E',\n\t'F',\n\t'G',\n\t'H',\n\t'I',\n\t'J',\n\t'K',\n\t'L',\n\t'M',\n\t'N',\n\t'O',\n\t'P',\n\t'Q',\n\t'R',\n\t'S',\n\t'T',\n\t'U',\n\t'V',\n\t'W',\n\t'X',\n\t'Y',\n\t'Z',\n\t'a',\n\t'b',\n\t'c',\n\t'd',\n\t'e',\n\t'f',\n\t'g',\n\t'h',\n\t'i',\n\t'j',\n\t'k',\n\t'l',\n\t'm',\n\t'n',\n\t'o',\n\t'p',\n\t'q',\n\t'r',\n\t's',\n\t't',\n\t'u',\n\t'v',\n\t'w',\n\t'x',\n\t'y',\n\t'z',\n\t'#',\n\t'$',\n\t'%',\n\t'*',\n\t'+',\n\t',',\n\t'-',\n\t'.',\n\t':',\n\t';',\n\t'=',\n\t'?',\n\t'@',\n\t'[',\n\t']',\n\t'^',\n\t'_',\n\t'{',\n\t'|',\n\t'}',\n\t'~',\n];\n"],"mappings":"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"}
1
+ {"version":3,"names":["sRGBToLinear","value","v","Math","pow","decodeDC","intR","intG","intB","r","g","b","decode83","str","i","length","c","digit","digitCharacters","indexOf","validateBlurhash","blurhash","Error","sizeFlag","numY","floor","numX","isBlurhashValid","error","message","JSON","stringify","isValid","errorReason"],"sources":["utils.ts"],"sourcesContent":["// Some functions from the Blurhash JS implementation that are used for light tasks (such as getting the average color or validating if a blurhash string is valid)\r\n\r\nexport interface RGB {\r\n\t/**\r\n\t * The Red value component of this RGB instance. Ranges from 0 to 255.\r\n\t */\r\n\tr: number;\r\n\t/**\r\n\t * The Green value component of this RGB instance. Ranges from 0 to 255.\r\n\t */\r\n\tg: number;\r\n\t/**\r\n\t * The Blue value component of this RGB instance. Ranges from 0 to 255.\r\n\t */\r\n\tb: number;\r\n}\r\n\r\nfunction sRGBToLinear(value: number): number {\r\n\tconst v = value / 255;\r\n\tif (v <= 0.04045) return v / 12.92;\r\n\telse return Math.pow((v + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nexport function decodeDC(value: number): RGB {\r\n\tconst intR = value >> 16;\r\n\tconst intG = (value >> 8) & 255;\r\n\tconst intB = value & 255;\r\n\treturn { r: sRGBToLinear(intR) * 255, g: sRGBToLinear(intG) * 255, b: sRGBToLinear(intB) * 255 };\r\n}\r\n\r\nexport function decode83(str: string): number {\r\n\tlet value = 0;\r\n\tfor (let i = 0; i < str.length; i++) {\r\n\t\tconst c = str[i];\r\n\t\tconst digit = digitCharacters.indexOf(c);\r\n\t\tvalue = value * 83 + digit;\r\n\t}\r\n\treturn value;\r\n}\r\n\r\nfunction validateBlurhash(blurhash: string): void {\r\n\tif (!blurhash || blurhash.length < 6) throw new Error('The blurhash string must be at least 6 characters');\r\n\r\n\tconst sizeFlag = decode83(blurhash[0]);\r\n\tconst numY = Math.floor(sizeFlag / 9) + 1;\r\n\tconst numX = (sizeFlag % 9) + 1;\r\n\r\n\tif (blurhash.length !== 4 + 2 * numX * numY)\r\n\t\tthrow new Error(`blurhash length mismatch: length is ${blurhash.length} but it should be ${4 + 2 * numX * numY}`);\r\n}\r\n\r\nexport function isBlurhashValid(blurhash: string): { isValid: true } | { isValid: false; errorReason: string } {\r\n\ttry {\r\n\t\tvalidateBlurhash(blurhash);\r\n\t} catch (error) {\r\n\t\tconst message = error instanceof Error ? error.message : JSON.stringify(error);\r\n\t\treturn { isValid: false, errorReason: message };\r\n\t}\r\n\r\n\treturn { isValid: true };\r\n}\r\n\r\nconst digitCharacters = [\r\n\t'0',\r\n\t'1',\r\n\t'2',\r\n\t'3',\r\n\t'4',\r\n\t'5',\r\n\t'6',\r\n\t'7',\r\n\t'8',\r\n\t'9',\r\n\t'A',\r\n\t'B',\r\n\t'C',\r\n\t'D',\r\n\t'E',\r\n\t'F',\r\n\t'G',\r\n\t'H',\r\n\t'I',\r\n\t'J',\r\n\t'K',\r\n\t'L',\r\n\t'M',\r\n\t'N',\r\n\t'O',\r\n\t'P',\r\n\t'Q',\r\n\t'R',\r\n\t'S',\r\n\t'T',\r\n\t'U',\r\n\t'V',\r\n\t'W',\r\n\t'X',\r\n\t'Y',\r\n\t'Z',\r\n\t'a',\r\n\t'b',\r\n\t'c',\r\n\t'd',\r\n\t'e',\r\n\t'f',\r\n\t'g',\r\n\t'h',\r\n\t'i',\r\n\t'j',\r\n\t'k',\r\n\t'l',\r\n\t'm',\r\n\t'n',\r\n\t'o',\r\n\t'p',\r\n\t'q',\r\n\t'r',\r\n\t's',\r\n\t't',\r\n\t'u',\r\n\t'v',\r\n\t'w',\r\n\t'x',\r\n\t'y',\r\n\t'z',\r\n\t'#',\r\n\t'$',\r\n\t'%',\r\n\t'*',\r\n\t'+',\r\n\t',',\r\n\t'-',\r\n\t'.',\r\n\t':',\r\n\t';',\r\n\t'=',\r\n\t'?',\r\n\t'@',\r\n\t'[',\r\n\t']',\r\n\t'^',\r\n\t'_',\r\n\t'{',\r\n\t'|',\r\n\t'}',\r\n\t'~',\r\n];\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
3
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
4
4
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
5
5
  import * as React from 'react';
6
6
  import { Platform } from 'react-native';
@@ -51,7 +51,7 @@ export class Blurhash extends React.PureComponent {
51
51
  * @see https://github.com/mrousavy/react-native-blurhash#cosine-operations
52
52
  */
53
53
  static clearCosineCache() {
54
- if (Platform.OS === 'android' || _reactNative.Platform.OS === 'harmony') NativeBlurhashModule.clearCosineCache(); else console.warn('Blurhash.clearCosineCache is only available on Android.');
54
+ if (Platform.OS === 'android' || Platform.OS === 'harmony') NativeBlurhashModule.clearCosineCache();else console.warn('Blurhash.clearCosineCache is only available on Android.');
55
55
  }
56
56
 
57
57
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["React","Platform","NativeBlurhashModule","NativeBlurhashView","decode83","decodeDC","isBlurhashValid","Blurhash","PureComponent","constructor","props","_onLoadStart","bind","_onLoadEnd","_onLoadError","encode","imageUri","componentsX","componentsY","Error","createBlurhashFromImage","getAverageColor","blurhash","length","undefined","value","substring","clearCosineCache","OS","console","warn","onLoadStart","onLoadEnd","event","_event$nativeEvent","onLoadError","nativeEvent","message","render","createElement","_extends","_defineProperty"],"sources":["index.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Platform, type NativeSyntheticEvent, type ViewProps } from 'react-native';\nimport NativeBlurhashModule from './specs/NativeBlurhashModule';\nimport NativeBlurhashView from './specs/NativeBlurhashView';\nimport { decode83, decodeDC, isBlurhashValid, type RGB } from './utils';\n\nexport interface BlurhashProps extends Omit<ViewProps, 'children'> {\n\t/**\n\t * The blurhash string to use. Example: `LGFFaXYk^6#M@-5c,1J5@[or[Q6`.\n\t */\n\tblurhash: string;\n\t/**\n\t * The width (resolution) to decode to. Higher values decrease performance, use `16` for large lists, otherwise you can increase it to `32`.\n\t * @default 32\n\t */\n\tdecodeWidth?: number;\n\t/**\n\t * The height (resolution) to decode to. Higher values decrease performance, use `16` for large lists, otherwise you can increase it to `32`.\n\t * @default 32\n\t */\n\tdecodeHeight?: number;\n\t/**\n\t * Adjusts the contrast of the output image. Tweak it if you want a different look for your placeholders.\n\t * @default 1.0\n\t */\n\tdecodePunch?: number;\n\t/**\n\t * Asynchronously decode the Blurhash on a background Thread instead of the UI-Thread.\n\t * Read the [performance documentation](https://github.com/mrousavy/react-native-blurhash#performance)\n\t * before enabling this.\n\t * @default false\n\t */\n\tdecodeAsync?: boolean;\n\t/**\n\t * Adjusts the resize mode of the image.\n\t * @default 'cover'\n\t */\n\tresizeMode?: 'cover' | 'contain' | 'stretch' | 'center';\n\n\t/**\n\t * Emitted when the Blurhash received new parameters and started to decode the given `blurhash` string.\n\t */\n\tonLoadStart?: () => void;\n\n\t/**\n\t * Emitted when the Blurhash successfully decoded the given `blurhash` string and rendered the image to the `<Blurhash>` view.\n\t */\n\tonLoadEnd?: () => void;\n\n\t/**\n\t * Emitted when the Blurhash failed to decode/load.\n\t */\n\tonLoadError?: (message?: string) => void;\n}\n\nexport class Blurhash extends React.PureComponent<BlurhashProps> {\n\tstatic displayName = 'Blurhash';\n\n\tconstructor(props: BlurhashProps) {\n\t\tsuper(props);\n\t\tthis._onLoadStart = this._onLoadStart.bind(this);\n\t\tthis._onLoadEnd = this._onLoadEnd.bind(this);\n\t\tthis._onLoadError = this._onLoadError.bind(this);\n\t}\n\n\t/**\n\t * Encodes the given image URI to a blurhash string\n\t * @param imageUri An URI to an Image parseable by the react native image loader\n\t * @param componentsX The number of X components\n\t * @param componentsY The number of Y components\n\t * @example\n\t * const blurhash = await Blurhash.encode('https://blurha.sh/assets/images/img2.jpg')\n\t */\n\tstatic encode(imageUri: string, componentsX: number, componentsY: number): Promise<string> {\n\t\tif (typeof imageUri !== 'string') throw new Error('imageUri must be a non-empty string!');\n\t\tif (typeof componentsX !== 'number') throw new Error('componentsX must be a valid positive number!');\n\t\tif (typeof componentsY !== 'number') throw new Error('componentsY must be a valid positive number!');\n\n\t\treturn NativeBlurhashModule.createBlurhashFromImage(imageUri, componentsX, componentsY);\n\t}\n\n\t/**\n\t * Gets the average color in a given blurhash string.\n\t *\n\t * This uses the JS blurhash decoder, so it might be slow.\n\t * @param blurhash The blurhash string\n\t * @example\n\t * const averageColor = Blurhash.getAverageColor(`LGFFaXYk^6#M@-5c,1J5@[or[Q6.`)\n\t */\n\tstatic getAverageColor(blurhash: string): RGB | undefined {\n\t\tif (blurhash == null || blurhash.length < 7) return undefined;\n\n\t\tconst value = decode83(blurhash.substring(2, 6));\n\t\treturn decodeDC(value);\n\t}\n\n\t/**\n\t * Clears the cosine cache and frees up memory.\n\t *\n\t * @platform Android\n\t * @see https://github.com/mrousavy/react-native-blurhash#cosine-operations\n\t */\n\tstatic clearCosineCache(): void {\n\t\tif (Platform.OS === 'android') NativeBlurhashModule.clearCosineCache();\n\t\telse console.warn('Blurhash.clearCosineCache is only available on Android.');\n\t}\n\n\t/**\n\t * Verifies if the given blurhash is valid by checking it's type, length and size flag.\n\t *\n\t * This uses the JS blurhash decoder, so it might be slow.\n\t * @param blurhash The given blurhash string\n\t */\n\tstatic isBlurhashValid(blurhash: string): ReturnType<typeof isBlurhashValid> {\n\t\treturn isBlurhashValid(blurhash);\n\t}\n\n\t_onLoadStart() {\n\t\tif (this.props.onLoadStart != null) this.props.onLoadStart();\n\t}\n\t_onLoadEnd() {\n\t\tif (this.props.onLoadEnd != null) this.props.onLoadEnd();\n\t}\n\t_onLoadError(event?: NativeSyntheticEvent<{ message?: string }>) {\n\t\tif (this.props.onLoadError != null) this.props.onLoadError(event?.nativeEvent?.message);\n\t}\n\n\trender() {\n\t\treturn <NativeBlurhashView {...this.props} onLoadStart={this._onLoadStart} onLoadEnd={this._onLoadEnd} onLoadError={this._onLoadError} />;\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","Platform","NativeBlurhashModule","NativeBlurhashView","decode83","decodeDC","isBlurhashValid","Blurhash","PureComponent","constructor","props","_onLoadStart","bind","_onLoadEnd","_onLoadError","encode","imageUri","componentsX","componentsY","Error","createBlurhashFromImage","getAverageColor","blurhash","length","undefined","value","substring","clearCosineCache","OS","console","warn","onLoadStart","onLoadEnd","event","_event$nativeEvent","onLoadError","nativeEvent","message","render","createElement","_extends","_defineProperty"],"sources":["index.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { Platform, type NativeSyntheticEvent, type ViewProps } from 'react-native';\r\nimport NativeBlurhashModule from './specs/NativeBlurhashModule';\r\nimport NativeBlurhashView from './specs/NativeBlurhashView';\r\nimport { decode83, decodeDC, isBlurhashValid, type RGB } from './utils';\r\n\r\nexport interface BlurhashProps extends Omit<ViewProps, 'children'> {\r\n\t/**\r\n\t * The blurhash string to use. Example: `LGFFaXYk^6#M@-5c,1J5@[or[Q6`.\r\n\t */\r\n\tblurhash: string;\r\n\t/**\r\n\t * The width (resolution) to decode to. Higher values decrease performance, use `16` for large lists, otherwise you can increase it to `32`.\r\n\t * @default 32\r\n\t */\r\n\tdecodeWidth?: number;\r\n\t/**\r\n\t * The height (resolution) to decode to. Higher values decrease performance, use `16` for large lists, otherwise you can increase it to `32`.\r\n\t * @default 32\r\n\t */\r\n\tdecodeHeight?: number;\r\n\t/**\r\n\t * Adjusts the contrast of the output image. Tweak it if you want a different look for your placeholders.\r\n\t * @default 1.0\r\n\t */\r\n\tdecodePunch?: number;\r\n\t/**\r\n\t * Asynchronously decode the Blurhash on a background Thread instead of the UI-Thread.\r\n\t * Read the [performance documentation](https://github.com/mrousavy/react-native-blurhash#performance)\r\n\t * before enabling this.\r\n\t * @default false\r\n\t */\r\n\tdecodeAsync?: boolean;\r\n\t/**\r\n\t * Adjusts the resize mode of the image.\r\n\t * @default 'cover'\r\n\t */\r\n\tresizeMode?: 'cover' | 'contain' | 'stretch' | 'center';\r\n\r\n\t/**\r\n\t * Emitted when the Blurhash received new parameters and started to decode the given `blurhash` string.\r\n\t */\r\n\tonLoadStart?: () => void;\r\n\r\n\t/**\r\n\t * Emitted when the Blurhash successfully decoded the given `blurhash` string and rendered the image to the `<Blurhash>` view.\r\n\t */\r\n\tonLoadEnd?: () => void;\r\n\r\n\t/**\r\n\t * Emitted when the Blurhash failed to decode/load.\r\n\t */\r\n\tonLoadError?: (message?: string) => void;\r\n}\r\n\r\nexport class Blurhash extends React.PureComponent<BlurhashProps> {\r\n\tstatic displayName = 'Blurhash';\r\n\r\n\tconstructor(props: BlurhashProps) {\r\n\t\tsuper(props);\r\n\t\tthis._onLoadStart = this._onLoadStart.bind(this);\r\n\t\tthis._onLoadEnd = this._onLoadEnd.bind(this);\r\n\t\tthis._onLoadError = this._onLoadError.bind(this);\r\n\t}\r\n\r\n\t/**\r\n\t * Encodes the given image URI to a blurhash string\r\n\t * @param imageUri An URI to an Image parseable by the react native image loader\r\n\t * @param componentsX The number of X components\r\n\t * @param componentsY The number of Y components\r\n\t * @example\r\n\t * const blurhash = await Blurhash.encode('https://blurha.sh/assets/images/img2.jpg')\r\n\t */\r\n\tstatic encode(imageUri: string, componentsX: number, componentsY: number): Promise<string> {\r\n\t\tif (typeof imageUri !== 'string') throw new Error('imageUri must be a non-empty string!');\r\n\t\tif (typeof componentsX !== 'number') throw new Error('componentsX must be a valid positive number!');\r\n\t\tif (typeof componentsY !== 'number') throw new Error('componentsY must be a valid positive number!');\r\n\r\n\t\treturn NativeBlurhashModule.createBlurhashFromImage(imageUri, componentsX, componentsY);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the average color in a given blurhash string.\r\n\t *\r\n\t * This uses the JS blurhash decoder, so it might be slow.\r\n\t * @param blurhash The blurhash string\r\n\t * @example\r\n\t * const averageColor = Blurhash.getAverageColor(`LGFFaXYk^6#M@-5c,1J5@[or[Q6.`)\r\n\t */\r\n\tstatic getAverageColor(blurhash: string): RGB | undefined {\r\n\t\tif (blurhash == null || blurhash.length < 7) return undefined;\r\n\r\n\t\tconst value = decode83(blurhash.substring(2, 6));\r\n\t\treturn decodeDC(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Clears the cosine cache and frees up memory.\r\n\t *\r\n\t * @platform Android\r\n\t * @see https://github.com/mrousavy/react-native-blurhash#cosine-operations\r\n\t */\r\n\tstatic clearCosineCache(): void {\r\n\t\tif (Platform.OS === 'android' || (Platform.OS as string) === 'harmony') NativeBlurhashModule.clearCosineCache();\r\n\t\telse console.warn('Blurhash.clearCosineCache is only available on Android.');\r\n\t}\r\n\r\n\t/**\r\n\t * Verifies if the given blurhash is valid by checking it's type, length and size flag.\r\n\t *\r\n\t * This uses the JS blurhash decoder, so it might be slow.\r\n\t * @param blurhash The given blurhash string\r\n\t */\r\n\tstatic isBlurhashValid(blurhash: string): ReturnType<typeof isBlurhashValid> {\r\n\t\treturn isBlurhashValid(blurhash);\r\n\t}\r\n\r\n\t_onLoadStart() {\r\n\t\tif (this.props.onLoadStart != null) this.props.onLoadStart();\r\n\t}\r\n\t_onLoadEnd() {\r\n\t\tif (this.props.onLoadEnd != null) this.props.onLoadEnd();\r\n\t}\r\n\t_onLoadError(event?: NativeSyntheticEvent<{ message?: string }>) {\r\n\t\tif (this.props.onLoadError != null) this.props.onLoadError(event?.nativeEvent?.message);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn <NativeBlurhashView {...this.props} onLoadStart={this._onLoadStart} onLoadEnd={this._onLoadEnd} onLoadError={this._onLoadError} />;\r\n\t}\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sources":["NativeBlurhashModule.ts"],"sourcesContent":["import { type TurboModule, TurboModuleRegistry } from 'react-native';\nimport type { Int32 } from 'react-native/Libraries/Types/CodegenTypes';\n\nexport interface Spec extends TurboModule {\n\tcreateBlurhashFromImage: (imageUri: string, componentsX: Int32, componentsY: Int32) => Promise<string>;\n\tclearCosineCache: () => void;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>('BlurhashModule');\n"],"mappings":"AAAA,SAA2BA,mBAAmB,QAAQ,cAAc;AAQpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC"}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sources":["NativeBlurhashModule.ts"],"sourcesContent":["import { type TurboModule, TurboModuleRegistry } from 'react-native';\r\nimport type { Double } from 'react-native/Libraries/Types/CodegenTypes';\r\n\r\nexport interface Spec extends TurboModule {\r\n\tcreateBlurhashFromImage: (imageUri: string, componentsX: Double, componentsY: Double) => Promise<string>;\r\n\tclearCosineCache: () => void;\r\n}\r\n\r\nexport default TurboModuleRegistry.getEnforcing<Spec>('BlurhashModule');\r\n"],"mappings":"AAAA,SAA2BA,mBAAmB,QAAQ,cAAc;AAQpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["codegenNativeComponent"],"sources":["NativeBlurhashView.ts"],"sourcesContent":["import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\nimport type { DirectEventHandler, Double, Int32, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';\nimport type { ViewProps } from 'react-native';\n\ntype OnLoadErrorEvent = { message?: string };\n\ninterface NativeProps extends ViewProps {\n\tblurhash: string;\n\tdecodeWidth?: WithDefault<Int32, 32>;\n\tdecodeHeight?: WithDefault<Int32, 32>;\n\tdecodePunch?: WithDefault<Double, 1>;\n\tdecodeAsync?: WithDefault<boolean, false>;\n\tresizeMode?: WithDefault<'cover' | 'contain' | 'stretch' | 'center', 'cover'>;\n\tonLoadStart?: DirectEventHandler<null>;\n\tonLoadEnd?: DirectEventHandler<null>;\n\tonLoadError?: DirectEventHandler<OnLoadErrorEvent>;\n}\n\nexport default codegenNativeComponent<NativeProps>('BlurhashView');\n"],"mappings":"AAAA,OAAOA,sBAAsB,MAAM,yDAAyD;AAkB5F,eAAeA,sBAAsB,CAAc,cAAc,CAAC"}
1
+ {"version":3,"names":["codegenNativeComponent"],"sources":["NativeBlurhashView.ts"],"sourcesContent":["import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';\r\nimport type { DirectEventHandler, Double, Int32, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';\r\nimport type { ViewProps } from 'react-native';\r\n\r\ntype OnLoadErrorEvent = { message?: string };\r\n\r\ninterface NativeProps extends ViewProps {\r\n\tblurhash: string;\r\n\tdecodeWidth?: WithDefault<Int32, 32>;\r\n\tdecodeHeight?: WithDefault<Int32, 32>;\r\n\tdecodePunch?: WithDefault<Double, 1>;\r\n\tdecodeAsync?: WithDefault<boolean, false>;\r\n\tresizeMode?: WithDefault<'cover' | 'contain' | 'stretch' | 'center', 'cover'>;\r\n\tonLoadStart?: DirectEventHandler<null>;\r\n\tonLoadEnd?: DirectEventHandler<null>;\r\n\tonLoadError?: DirectEventHandler<OnLoadErrorEvent>;\r\n}\r\n\r\nexport default codegenNativeComponent<NativeProps>('BlurhashView');\r\n"],"mappings":"AAAA,OAAOA,sBAAsB,MAAM,yDAAyD;AAkB5F,eAAeA,sBAAsB,CAAc,cAAc,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["sRGBToLinear","value","v","Math","pow","decodeDC","intR","intG","intB","r","g","b","decode83","str","i","length","c","digit","digitCharacters","indexOf","validateBlurhash","blurhash","Error","sizeFlag","numY","floor","numX","isBlurhashValid","error","message","JSON","stringify","isValid","errorReason"],"sources":["utils.ts"],"sourcesContent":["// Some functions from the Blurhash JS implementation that are used for light tasks (such as getting the average color or validating if a blurhash string is valid)\n\nexport interface RGB {\n\t/**\n\t * The Red value component of this RGB instance. Ranges from 0 to 255.\n\t */\n\tr: number;\n\t/**\n\t * The Green value component of this RGB instance. Ranges from 0 to 255.\n\t */\n\tg: number;\n\t/**\n\t * The Blue value component of this RGB instance. Ranges from 0 to 255.\n\t */\n\tb: number;\n}\n\nfunction sRGBToLinear(value: number): number {\n\tconst v = value / 255;\n\tif (v <= 0.04045) return v / 12.92;\n\telse return Math.pow((v + 0.055) / 1.055, 2.4);\n}\n\nexport function decodeDC(value: number): RGB {\n\tconst intR = value >> 16;\n\tconst intG = (value >> 8) & 255;\n\tconst intB = value & 255;\n\treturn { r: sRGBToLinear(intR) * 255, g: sRGBToLinear(intG) * 255, b: sRGBToLinear(intB) * 255 };\n}\n\nexport function decode83(str: string): number {\n\tlet value = 0;\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst c = str[i];\n\t\tconst digit = digitCharacters.indexOf(c);\n\t\tvalue = value * 83 + digit;\n\t}\n\treturn value;\n}\n\nfunction validateBlurhash(blurhash: string): void {\n\tif (!blurhash || blurhash.length < 6) throw new Error('The blurhash string must be at least 6 characters');\n\n\tconst sizeFlag = decode83(blurhash[0]);\n\tconst numY = Math.floor(sizeFlag / 9) + 1;\n\tconst numX = (sizeFlag % 9) + 1;\n\n\tif (blurhash.length !== 4 + 2 * numX * numY)\n\t\tthrow new Error(`blurhash length mismatch: length is ${blurhash.length} but it should be ${4 + 2 * numX * numY}`);\n}\n\nexport function isBlurhashValid(blurhash: string): { isValid: true } | { isValid: false; errorReason: string } {\n\ttry {\n\t\tvalidateBlurhash(blurhash);\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : JSON.stringify(error);\n\t\treturn { isValid: false, errorReason: message };\n\t}\n\n\treturn { isValid: true };\n}\n\nconst digitCharacters = [\n\t'0',\n\t'1',\n\t'2',\n\t'3',\n\t'4',\n\t'5',\n\t'6',\n\t'7',\n\t'8',\n\t'9',\n\t'A',\n\t'B',\n\t'C',\n\t'D',\n\t'E',\n\t'F',\n\t'G',\n\t'H',\n\t'I',\n\t'J',\n\t'K',\n\t'L',\n\t'M',\n\t'N',\n\t'O',\n\t'P',\n\t'Q',\n\t'R',\n\t'S',\n\t'T',\n\t'U',\n\t'V',\n\t'W',\n\t'X',\n\t'Y',\n\t'Z',\n\t'a',\n\t'b',\n\t'c',\n\t'd',\n\t'e',\n\t'f',\n\t'g',\n\t'h',\n\t'i',\n\t'j',\n\t'k',\n\t'l',\n\t'm',\n\t'n',\n\t'o',\n\t'p',\n\t'q',\n\t'r',\n\t's',\n\t't',\n\t'u',\n\t'v',\n\t'w',\n\t'x',\n\t'y',\n\t'z',\n\t'#',\n\t'$',\n\t'%',\n\t'*',\n\t'+',\n\t',',\n\t'-',\n\t'.',\n\t':',\n\t';',\n\t'=',\n\t'?',\n\t'@',\n\t'[',\n\t']',\n\t'^',\n\t'_',\n\t'{',\n\t'|',\n\t'}',\n\t'~',\n];\n"],"mappings":"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"}
1
+ {"version":3,"names":["sRGBToLinear","value","v","Math","pow","decodeDC","intR","intG","intB","r","g","b","decode83","str","i","length","c","digit","digitCharacters","indexOf","validateBlurhash","blurhash","Error","sizeFlag","numY","floor","numX","isBlurhashValid","error","message","JSON","stringify","isValid","errorReason"],"sources":["utils.ts"],"sourcesContent":["// Some functions from the Blurhash JS implementation that are used for light tasks (such as getting the average color or validating if a blurhash string is valid)\r\n\r\nexport interface RGB {\r\n\t/**\r\n\t * The Red value component of this RGB instance. Ranges from 0 to 255.\r\n\t */\r\n\tr: number;\r\n\t/**\r\n\t * The Green value component of this RGB instance. Ranges from 0 to 255.\r\n\t */\r\n\tg: number;\r\n\t/**\r\n\t * The Blue value component of this RGB instance. Ranges from 0 to 255.\r\n\t */\r\n\tb: number;\r\n}\r\n\r\nfunction sRGBToLinear(value: number): number {\r\n\tconst v = value / 255;\r\n\tif (v <= 0.04045) return v / 12.92;\r\n\telse return Math.pow((v + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nexport function decodeDC(value: number): RGB {\r\n\tconst intR = value >> 16;\r\n\tconst intG = (value >> 8) & 255;\r\n\tconst intB = value & 255;\r\n\treturn { r: sRGBToLinear(intR) * 255, g: sRGBToLinear(intG) * 255, b: sRGBToLinear(intB) * 255 };\r\n}\r\n\r\nexport function decode83(str: string): number {\r\n\tlet value = 0;\r\n\tfor (let i = 0; i < str.length; i++) {\r\n\t\tconst c = str[i];\r\n\t\tconst digit = digitCharacters.indexOf(c);\r\n\t\tvalue = value * 83 + digit;\r\n\t}\r\n\treturn value;\r\n}\r\n\r\nfunction validateBlurhash(blurhash: string): void {\r\n\tif (!blurhash || blurhash.length < 6) throw new Error('The blurhash string must be at least 6 characters');\r\n\r\n\tconst sizeFlag = decode83(blurhash[0]);\r\n\tconst numY = Math.floor(sizeFlag / 9) + 1;\r\n\tconst numX = (sizeFlag % 9) + 1;\r\n\r\n\tif (blurhash.length !== 4 + 2 * numX * numY)\r\n\t\tthrow new Error(`blurhash length mismatch: length is ${blurhash.length} but it should be ${4 + 2 * numX * numY}`);\r\n}\r\n\r\nexport function isBlurhashValid(blurhash: string): { isValid: true } | { isValid: false; errorReason: string } {\r\n\ttry {\r\n\t\tvalidateBlurhash(blurhash);\r\n\t} catch (error) {\r\n\t\tconst message = error instanceof Error ? error.message : JSON.stringify(error);\r\n\t\treturn { isValid: false, errorReason: message };\r\n\t}\r\n\r\n\treturn { isValid: true };\r\n}\r\n\r\nconst digitCharacters = [\r\n\t'0',\r\n\t'1',\r\n\t'2',\r\n\t'3',\r\n\t'4',\r\n\t'5',\r\n\t'6',\r\n\t'7',\r\n\t'8',\r\n\t'9',\r\n\t'A',\r\n\t'B',\r\n\t'C',\r\n\t'D',\r\n\t'E',\r\n\t'F',\r\n\t'G',\r\n\t'H',\r\n\t'I',\r\n\t'J',\r\n\t'K',\r\n\t'L',\r\n\t'M',\r\n\t'N',\r\n\t'O',\r\n\t'P',\r\n\t'Q',\r\n\t'R',\r\n\t'S',\r\n\t'T',\r\n\t'U',\r\n\t'V',\r\n\t'W',\r\n\t'X',\r\n\t'Y',\r\n\t'Z',\r\n\t'a',\r\n\t'b',\r\n\t'c',\r\n\t'd',\r\n\t'e',\r\n\t'f',\r\n\t'g',\r\n\t'h',\r\n\t'i',\r\n\t'j',\r\n\t'k',\r\n\t'l',\r\n\t'm',\r\n\t'n',\r\n\t'o',\r\n\t'p',\r\n\t'q',\r\n\t'r',\r\n\t's',\r\n\t't',\r\n\t'u',\r\n\t'v',\r\n\t'w',\r\n\t'x',\r\n\t'y',\r\n\t'z',\r\n\t'#',\r\n\t'$',\r\n\t'%',\r\n\t'*',\r\n\t'+',\r\n\t',',\r\n\t'-',\r\n\t'.',\r\n\t':',\r\n\t';',\r\n\t'=',\r\n\t'?',\r\n\t'@',\r\n\t'[',\r\n\t']',\r\n\t'^',\r\n\t'_',\r\n\t'{',\r\n\t'|',\r\n\t'}',\r\n\t'~',\r\n];\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,7 @@
1
- /// <reference types="react-native/types/modules/codegen" />
2
1
  import { type TurboModule } from 'react-native';
3
- import type { Int32 } from 'react-native/Libraries/Types/CodegenTypes';
2
+ import type { Double } from 'react-native/Libraries/Types/CodegenTypes';
4
3
  export interface Spec extends TurboModule {
5
- createBlurhashFromImage: (imageUri: string, componentsX: Int32, componentsY: Int32) => Promise<string>;
4
+ createBlurhashFromImage: (imageUri: string, componentsX: Double, componentsY: Double) => Promise<string>;
6
5
  clearCosineCache: () => void;
7
6
  }
8
7
  declare const _default: Spec;
@@ -1,4 +1,3 @@
1
- /// <reference types="react-native/types/modules/codegen" />
2
1
  import type { DirectEventHandler, Double, Int32, WithDefault } from 'react-native/Libraries/Types/CodegenTypes';
3
2
  import type { ViewProps } from 'react-native';
4
3
  type OnLoadErrorEvent = {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-native-ohos/react-native-blurhash",
3
3
  "title": "React Native Blurhash",
4
- "version": "2.1.0",
4
+ "version": "2.2.0-rc.1",
5
5
  "description": "🖼 Blurhash is a compact representation of a placeholder for an image. This is a Native UI Module for React Native to asynchronously wrap the Blurhash implementations and make them usable in React Native. Also supports encoding!",
6
6
  "main": "lib/commonjs/index.js",
7
7
  "types": "lib/typescript/index.d.ts",
@@ -47,6 +47,9 @@
47
47
  "react": ">=16.8.1",
48
48
  "react-native": ">=0.60.0-rc.0 <1.0.x"
49
49
  },
50
+ "dependencies": {
51
+ "react-native-blurhash": "2.1.3"
52
+ },
50
53
  "devDependencies": {
51
54
  "@react-native-community/eslint-config": "^3.2.0",
52
55
  "@react-native-community/eslint-plugin": "^1.3.0",
@@ -64,7 +67,7 @@
64
67
  "typescript": "^5.0.4"
65
68
  },
66
69
  "react-native-builder-bob": {
67
- "source": "harmony",
70
+ "source": "src",
68
71
  "output": "lib",
69
72
  "targets": [
70
73
  "commonjs",
package/src/index.tsx CHANGED
@@ -101,7 +101,7 @@ export class Blurhash extends React.PureComponent<BlurhashProps> {
101
101
  * @see https://github.com/mrousavy/react-native-blurhash#cosine-operations
102
102
  */
103
103
  static clearCosineCache(): void {
104
- if (Platform.OS === 'android' || Platform.OS === 'harmony') NativeBlurhashModule.clearCosineCache();
104
+ if (Platform.OS === 'android' || (Platform.OS as string) === 'harmony') NativeBlurhashModule.clearCosineCache();
105
105
  else console.warn('Blurhash.clearCosineCache is only available on Android.');
106
106
  }
107
107
 
@@ -1,8 +1,8 @@
1
1
  import { type TurboModule, TurboModuleRegistry } from 'react-native';
2
- import type { Int32 } from 'react-native/Libraries/Types/CodegenTypes';
2
+ import type { Double } from 'react-native/Libraries/Types/CodegenTypes';
3
3
 
4
4
  export interface Spec extends TurboModule {
5
- createBlurhashFromImage: (imageUri: string, componentsX: Int32, componentsY: Int32) => Promise<string>;
5
+ createBlurhashFromImage: (imageUri: string, componentsX: Double, componentsY: Double) => Promise<string>;
6
6
  clearCosineCache: () => void;
7
7
  }
8
8