@pixzle/react 0.0.30 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,17 +10,72 @@ npm i @pixzle/react
10
10
 
11
11
  ## Usage
12
12
 
13
+ ### PixzleImage
14
+
15
+ Single image restoration component.
16
+
13
17
  ```tsx
14
18
  import { PixzleImage } from '@pixzle/react';
15
19
 
20
+ // Using manifest URL
21
+ const MyComponentWithManifest = () => {
22
+ return (
23
+ <PixzleImage
24
+ manifest="https://example.com/manifest.json"
25
+ image="https://example.com/fragment.png"
26
+ />
27
+ );
28
+ };
29
+
30
+ // Using manifest data
31
+ const MyComponentWithManifestData = () => {
32
+ return (
33
+ <PixzleImage
34
+ manifestData={manifestData}
35
+ image="https://example.com/fragment.png"
36
+ />
37
+ );
38
+ };
39
+
40
+ // Using explicit parameters
16
41
  const MyComponent = () => {
17
42
  return (
18
43
  <PixzleImage
19
44
  blockSize={2}
20
45
  seed={72411}
21
- imageInfo={ w: 500, h: 500 }
22
- image="path/to/fragmented/image.png"
46
+ imageInfo={{ w: 500, h: 500 }}
47
+ image="https://example.com/fragment.png"
23
48
  />
24
49
  );
25
50
  };
26
51
  ```
52
+
53
+ ---
54
+
55
+ ### PixzleImages
56
+
57
+ Multiple images restoration component using manifest.
58
+
59
+ ```tsx
60
+ import { PixzleImages } from '@pixzle/react';
61
+
62
+ const MyGallery = () => {
63
+ return (
64
+ <PixzleImages
65
+ images={[
66
+ 'https://example.com/fragment1.png',
67
+ 'https://example.com/fragment2.png',
68
+ ]}
69
+ manifest="https://example.com/manifest.json"
70
+ >
71
+ {({ sources }) => (
72
+ <div>
73
+ {sources.map((src, i) => (
74
+ <img key={i} src={src} />
75
+ ))}
76
+ </div>
77
+ )}
78
+ </PixzleImages>
79
+ );
80
+ };
81
+ ```
@@ -1,10 +1,6 @@
1
- import type { ImageInfo } from "@pixzle/core";
2
1
  import React from "react";
3
- export interface PixzleImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, "src" | "onError"> {
4
- blockSize: number;
5
- seed: number;
6
- imageInfo: ImageInfo;
7
- image: string | Blob;
2
+ import { type UsePixzleImageProps } from "./usePixzleImage";
3
+ interface PixzleImageBaseProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, "src" | "onError"> {
8
4
  /**
9
5
  * Element to render while the image is being restored.
10
6
  */
@@ -23,4 +19,6 @@ export interface PixzleImageProps extends Omit<React.ImgHTMLAttributes<HTMLImage
23
19
  */
24
20
  onError?: (error: Error) => void;
25
21
  }
22
+ export type PixzleImageProps = PixzleImageBaseProps & UsePixzleImageProps;
26
23
  export declare const PixzleImage: React.ForwardRefExoticComponent<PixzleImageProps & React.RefAttributes<HTMLImageElement>>;
24
+ export {};
@@ -37,13 +37,11 @@ exports.PixzleImage = void 0;
37
37
  const jsx_runtime_1 = require("react/jsx-runtime");
38
38
  const react_1 = __importStar(require("react"));
39
39
  const usePixzleImage_1 = require("./usePixzleImage");
40
- exports.PixzleImage = react_1.default.forwardRef(({ blockSize, seed, imageInfo, image, alt = "", fallback = null, errorFallback = null, protected: isProtected = true, onError, ...props }, ref) => {
41
- const { src, isLoading, error } = (0, usePixzleImage_1.usePixzleImage)({
42
- blockSize,
43
- seed,
44
- imageInfo,
45
- image,
46
- });
40
+ exports.PixzleImage = react_1.default.forwardRef((props, ref) => {
41
+ const { image, alt = "", fallback = null, errorFallback = null, protected: isProtected = true, onError,
42
+ // Extract variant-specific props to exclude from imgProps
43
+ blockSize: _blockSize, seed: _seed, imageInfo: _imageInfo, manifest: _manifest, manifestData: _manifestData, ...imgProps } = props;
44
+ const { src, isLoading, error } = (0, usePixzleImage_1.usePixzleImage)(props);
47
45
  (0, react_1.useEffect)(() => {
48
46
  if (error) {
49
47
  console.error("PixzleImage restoration error:", error);
@@ -62,14 +60,14 @@ exports.PixzleImage = react_1.default.forwardRef(({ blockSize, seed, imageInfo,
62
60
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: fallback });
63
61
  }
64
62
  // biome-ignore lint/a11y/useAltText: alt is passed via props or defaults to empty string
65
- return ((0, jsx_runtime_1.jsx)("img", { ref: ref, src: src, alt: alt, ...props, onContextMenu: (e) => {
63
+ return ((0, jsx_runtime_1.jsx)("img", { ref: ref, src: src, alt: alt, ...imgProps, onContextMenu: (e) => {
66
64
  if (isProtected)
67
65
  e.preventDefault();
68
- props.onContextMenu?.(e);
66
+ imgProps.onContextMenu?.(e);
69
67
  }, onDragStart: (e) => {
70
68
  if (isProtected)
71
69
  e.preventDefault();
72
- props.onDragStart?.(e);
70
+ imgProps.onDragStart?.(e);
73
71
  }, style: {
74
72
  ...(isProtected
75
73
  ? {
@@ -78,7 +76,7 @@ exports.PixzleImage = react_1.default.forwardRef(({ blockSize, seed, imageInfo,
78
76
  WebkitTouchCallout: "none",
79
77
  }
80
78
  : {}),
81
- ...props.style,
79
+ ...imgProps.style,
82
80
  } }));
83
81
  });
84
82
  exports.PixzleImage.displayName = "PixzleImage";
@@ -1 +1 @@
1
- {"version":3,"file":"PixzleImage.js","sourceRoot":"","sources":["../src/PixzleImage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAyC;AACzC,qDAAkD;AA2BrC,QAAA,WAAW,GAAG,eAAK,CAAC,UAAU,CACzC,CACE,EACE,SAAS,EACT,IAAI,EACJ,SAAS,EACT,KAAK,EACL,GAAG,GAAG,EAAE,EACR,QAAQ,GAAG,IAAI,EACf,aAAa,GAAG,IAAI,EACpB,SAAS,EAAE,WAAW,GAAG,IAAI,EAC7B,OAAO,EACP,GAAG,KAAK,EACT,EACD,GAAG,EACH,EAAE;IACF,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAA,+BAAc,EAAC;QAC/C,SAAS;QACT,IAAI;QACJ,SAAS;QACT,KAAK;KACN,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAErB,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CACL,2DACG,OAAO,aAAa,KAAK,UAAU;oBAClC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,aAAa,GAChB,CACJ,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO,2DAAG,QAAQ,GAAI,CAAC;IACzB,CAAC;IAED,yFAAyF;IACzF,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,KACJ,KAAK,EACT,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,WAAW;gBAAE,CAAC,CAAC,cAAc,EAAE,CAAC;YACpC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,WAAW;gBAAE,CAAC,CAAC,cAAc,EAAE,CAAC;YACpC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC,EACD,KAAK,EACH;YACE,GAAG,CAAC,WAAW;gBACb,CAAC,CAAC;oBACE,UAAU,EAAE,MAAM;oBAClB,gBAAgB,EAAE,MAAM;oBACxB,kBAAkB,EAAE,MAAM;iBAC3B;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,KAAK,CAAC,KAAK;SACQ,GAE1B,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,mBAAW,CAAC,WAAW,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"PixzleImage.js","sourceRoot":"","sources":["../src/PixzleImage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAyC;AACzC,qDAA4E;AAyB/D,QAAA,WAAW,GAAG,eAAK,CAAC,UAAU,CACzC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACb,MAAM,EACJ,KAAK,EACL,GAAG,GAAG,EAAE,EACR,QAAQ,GAAG,IAAI,EACf,aAAa,GAAG,IAAI,EACpB,SAAS,EAAE,WAAW,GAAG,IAAI,EAC7B,OAAO;IACP,0DAA0D;IAC1D,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,SAAS,EACnB,YAAY,EAAE,aAAa,EAC3B,GAAG,QAAQ,EACZ,GAAG,KAAK,CAAC;IAEV,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAErB,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CACL,2DACG,OAAO,aAAa,KAAK,UAAU;oBAClC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,aAAa,GAChB,CACJ,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO,2DAAG,QAAQ,GAAI,CAAC;IACzB,CAAC;IAED,yFAAyF;IACzF,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,KACJ,QAAQ,EACZ,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,WAAW;gBAAE,CAAC,CAAC,cAAc,EAAE,CAAC;YACpC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,WAAW;gBAAE,CAAC,CAAC,cAAc,EAAE,CAAC;YACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,EACD,KAAK,EACH;YACE,GAAG,CAAC,WAAW;gBACb,CAAC,CAAC;oBACE,UAAU,EAAE,MAAM;oBAClB,gBAAgB,EAAE,MAAM;oBACxB,kBAAkB,EAAE,MAAM;iBAC3B;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,QAAQ,CAAC,KAAK;SACK,GAE1B,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,mBAAW,CAAC,WAAW,GAAG,aAAa,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ManifestData } from "@pixzle/core";
2
+ import type React from "react";
3
+ import { type UsePixzleImagesResult } from "./usePixzleImages";
4
+ export type PixzleImagesChildrenProps = Pick<UsePixzleImagesResult, "sources" | "isLoading" | "error" | "progress">;
5
+ export interface PixzleImagesProps {
6
+ /** Image sources - URLs or Blobs */
7
+ images: (string | Blob)[];
8
+ /** Manifest URL */
9
+ manifest?: string;
10
+ /** Manifest data object (alternative to manifest) */
11
+ manifestData?: ManifestData;
12
+ /** Render function for restored images */
13
+ children: (props: PixzleImagesChildrenProps) => React.ReactNode;
14
+ /** Fallback while loading */
15
+ fallback?: React.ReactNode;
16
+ /** Error fallback */
17
+ errorFallback?: React.ReactNode | ((error: Error) => React.ReactNode);
18
+ /** Error callback */
19
+ onError?: (error: Error) => void;
20
+ /** Load complete callback */
21
+ onLoad?: (sources: string[]) => void;
22
+ }
23
+ export declare const PixzleImages: React.FC<PixzleImagesProps>;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PixzleImages = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const usePixzleImages_1 = require("./usePixzleImages");
7
+ const PixzleImages = ({ images, manifest, manifestData, children, fallback = null, errorFallback = null, onError, onLoad, }) => {
8
+ const { sources, isLoading, error, progress } = (0, usePixzleImages_1.usePixzleImages)({
9
+ images,
10
+ manifest,
11
+ manifestData,
12
+ });
13
+ (0, react_1.useEffect)(() => {
14
+ if (error) {
15
+ console.error("PixzleImages restoration error:", error);
16
+ onError?.(error);
17
+ }
18
+ }, [error, onError]);
19
+ (0, react_1.useEffect)(() => {
20
+ if (!isLoading && sources.length > 0 && !error) {
21
+ onLoad?.(sources);
22
+ }
23
+ }, [isLoading, sources, error, onLoad]);
24
+ if (error) {
25
+ if (errorFallback) {
26
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: typeof errorFallback === "function"
27
+ ? errorFallback(error)
28
+ : errorFallback }));
29
+ }
30
+ return null;
31
+ }
32
+ if (isLoading) {
33
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: fallback });
34
+ }
35
+ return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children({ sources, isLoading, error, progress }) });
36
+ };
37
+ exports.PixzleImages = PixzleImages;
38
+ exports.PixzleImages.displayName = "PixzleImages";
39
+ //# sourceMappingURL=PixzleImages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PixzleImages.js","sourceRoot":"","sources":["../src/PixzleImages.tsx"],"names":[],"mappings":";;;;AAEA,iCAAkC;AAClC,uDAAgF;AA0BzE,MAAM,YAAY,GAAgC,CAAC,EACxD,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,GAAG,IAAI,EACf,aAAa,GAAG,IAAI,EACpB,OAAO,EACP,MAAM,GACP,EAAE,EAAE;IACH,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAA,iCAAe,EAAC;QAC9D,MAAM;QACN,QAAQ;QACR,YAAY;KACb,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACxD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAErB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAExC,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CACL,2DACG,OAAO,aAAa,KAAK,UAAU;oBAClC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,aAAa,GAChB,CACJ,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,2DAAG,QAAQ,GAAI,CAAC;IACzB,CAAC;IAED,OAAO,2DAAG,QAAQ,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAI,CAAC;AAClE,CAAC,CAAC;AA/CW,QAAA,YAAY,gBA+CvB;AAEF,oBAAY,CAAC,WAAW,GAAG,cAAc,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from "./PixzleImage";
2
2
  export * from "./usePixzleImage";
3
+ export * from "./PixzleImages";
4
+ export * from "./usePixzleImages";
package/dist/index.js CHANGED
@@ -16,4 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./PixzleImage"), exports);
18
18
  __exportStar(require("./usePixzleImage"), exports);
19
+ __exportStar(require("./PixzleImages"), exports);
20
+ __exportStar(require("./usePixzleImages"), exports);
19
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,mDAAiC;AACjC,iDAA+B;AAC/B,oDAAkC"}
@@ -1,13 +1,41 @@
1
- import type { ImageInfo } from "@pixzle/core";
2
- export interface UsePixzleImageProps {
1
+ import type { ImageInfo, ManifestData } from "@pixzle/core";
2
+ /**
3
+ * Props for usePixzleImage hook with explicit parameters
4
+ */
5
+ export interface UsePixzleImageExplicitProps {
3
6
  blockSize: number;
4
7
  seed: number;
5
8
  imageInfo: ImageInfo;
6
9
  image: string | Blob;
10
+ manifest?: never;
11
+ manifestData?: never;
7
12
  }
13
+ /**
14
+ * Props for usePixzleImage hook with manifest URL
15
+ */
16
+ export interface UsePixzleImageManifestUrlProps {
17
+ image: string | Blob;
18
+ manifest: string;
19
+ manifestData?: never;
20
+ blockSize?: never;
21
+ seed?: never;
22
+ imageInfo?: never;
23
+ }
24
+ /**
25
+ * Props for usePixzleImage hook with manifest data
26
+ */
27
+ export interface UsePixzleImageManifestDataProps {
28
+ image: string | Blob;
29
+ manifestData: ManifestData;
30
+ manifest?: never;
31
+ blockSize?: never;
32
+ seed?: never;
33
+ imageInfo?: never;
34
+ }
35
+ export type UsePixzleImageProps = UsePixzleImageExplicitProps | UsePixzleImageManifestUrlProps | UsePixzleImageManifestDataProps;
8
36
  export interface UsePixzleImageResult {
9
37
  src: string | undefined;
10
38
  isLoading: boolean;
11
39
  error: Error | null;
12
40
  }
13
- export declare const usePixzleImage: ({ blockSize, seed, imageInfo, image, }: UsePixzleImageProps) => UsePixzleImageResult;
41
+ export declare const usePixzleImage: (props: UsePixzleImageProps) => UsePixzleImageResult;
@@ -1,54 +1,112 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
5
35
  Object.defineProperty(exports, "__esModule", { value: true });
6
36
  exports.usePixzleImage = void 0;
7
- const browser_1 = __importDefault(require("@pixzle/browser"));
37
+ const browser_1 = __importStar(require("@pixzle/browser"));
8
38
  const react_1 = require("react");
9
- const usePixzleImage = ({ blockSize, seed, imageInfo, image, }) => {
39
+ const utils_1 = require("./utils");
40
+ function isExplicitProps(props) {
41
+ return "blockSize" in props && props.blockSize !== undefined;
42
+ }
43
+ function isManifestUrlProps(props) {
44
+ return "manifest" in props && props.manifest !== undefined;
45
+ }
46
+ function isManifestDataProps(props) {
47
+ return "manifestData" in props && props.manifestData !== undefined;
48
+ }
49
+ const usePixzleImage = (props) => {
10
50
  const [src, setSrc] = (0, react_1.useState)(undefined);
11
51
  const [error, setError] = (0, react_1.useState)(null);
12
52
  const [isLoading, setIsLoading] = (0, react_1.useState)(true);
53
+ const { image } = props;
54
+ // Extract dependencies based on props type
55
+ const blockSize = isExplicitProps(props) ? props.blockSize : undefined;
56
+ const seed = isExplicitProps(props) ? props.seed : undefined;
57
+ const imageInfo = isExplicitProps(props) ? props.imageInfo : undefined;
58
+ const manifest = isManifestUrlProps(props) ? props.manifest : undefined;
59
+ const manifestData = isManifestDataProps(props)
60
+ ? props.manifestData
61
+ : undefined;
13
62
  (0, react_1.useEffect)(() => {
14
63
  let active = true;
15
64
  setIsLoading(true);
16
65
  setError(null);
17
66
  const restore = async () => {
18
67
  try {
68
+ let resolvedBlockSize;
69
+ let resolvedSeed;
70
+ let resolvedImageInfo;
71
+ if (blockSize !== undefined && seed !== undefined && imageInfo) {
72
+ // Explicit props
73
+ resolvedBlockSize = blockSize;
74
+ resolvedSeed = seed;
75
+ resolvedImageInfo = imageInfo;
76
+ }
77
+ else if (manifest) {
78
+ // Fetch manifest from URL
79
+ const fetchedManifest = await (0, browser_1.fetchManifest)(manifest);
80
+ resolvedBlockSize = fetchedManifest.config.blockSize;
81
+ resolvedSeed = fetchedManifest.config.seed;
82
+ resolvedImageInfo = fetchedManifest.images[0];
83
+ }
84
+ else if (manifestData) {
85
+ // Use provided manifest data
86
+ resolvedBlockSize = manifestData.config.blockSize;
87
+ resolvedSeed = manifestData.config.seed;
88
+ resolvedImageInfo = manifestData.images[0];
89
+ }
90
+ else {
91
+ throw new Error("Either (blockSize, seed, imageInfo) or manifest/manifestData is required");
92
+ }
19
93
  const restoredBitmap = await browser_1.default.restoreImage({
20
94
  image,
21
- blockSize,
22
- seed,
23
- imageInfo,
95
+ blockSize: resolvedBlockSize,
96
+ seed: resolvedSeed,
97
+ imageInfo: resolvedImageInfo,
24
98
  });
25
99
  if (!active)
26
100
  return;
27
- // Convert ImageBitmap to Blob URL to display in <img>
28
- const canvas = document.createElement("canvas");
29
- canvas.width = restoredBitmap.width;
30
- canvas.height = restoredBitmap.height;
31
- const ctx = canvas.getContext("2d");
32
- if (!ctx)
33
- throw new Error("Could not get 2D context");
34
- ctx.drawImage(restoredBitmap, 0, 0);
35
- canvas.toBlob((blob) => {
36
- if (!active)
37
- return;
38
- if (blob) {
39
- const url = URL.createObjectURL(blob);
40
- setSrc((prev) => {
41
- if (prev)
42
- URL.revokeObjectURL(prev);
43
- return url;
44
- });
45
- setIsLoading(false);
46
- }
47
- else {
48
- setError(new Error("Failed to create blob from canvas"));
49
- setIsLoading(false);
50
- }
101
+ const url = await (0, utils_1.imageBitmapToBlobUrl)(restoredBitmap);
102
+ if (!active)
103
+ return;
104
+ setSrc((prev) => {
105
+ if (prev)
106
+ URL.revokeObjectURL(prev);
107
+ return url;
51
108
  });
109
+ setIsLoading(false);
52
110
  }
53
111
  catch (err) {
54
112
  if (active) {
@@ -61,7 +119,7 @@ const usePixzleImage = ({ blockSize, seed, imageInfo, image, }) => {
61
119
  return () => {
62
120
  active = false;
63
121
  };
64
- }, [blockSize, seed, imageInfo, image]);
122
+ }, [blockSize, seed, imageInfo, image, manifest, manifestData]);
65
123
  // Cleanup URL on unmount
66
124
  (0, react_1.useEffect)(() => {
67
125
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"usePixzleImage.js","sourceRoot":"","sources":["../src/usePixzleImage.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAqC;AAErC,iCAA4C;AAerC,MAAM,cAAc,GAAG,CAAC,EAC7B,SAAS,EACT,IAAI,EACJ,SAAS,EACT,KAAK,GACe,EAAwB,EAAE;IAC9C,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAA,gBAAQ,EAAqB,SAAS,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAU,IAAI,CAAC,CAAC;IAE1D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,MAAM,iBAAM,CAAC,YAAY,CAAC;oBAC/C,KAAK;oBACL,SAAS;oBACT,IAAI;oBACJ,SAAS;iBACV,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM;oBAAE,OAAO;gBAEpB,sDAAsD;gBACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAChD,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;gBACpC,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;gBACtC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAEtD,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEpC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;oBACrB,IAAI,CAAC,MAAM;wBAAE,OAAO;oBACpB,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;wBACtC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;4BACd,IAAI,IAAI;gCAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;4BACpC,OAAO,GAAG,CAAC;wBACb,CAAC,CAAC,CAAC;wBACH,YAAY,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;wBACzD,YAAY,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,MAAM,EAAE,CAAC;oBACX,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9D,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,EAAE,CAAC;QAEV,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAExC,yBAAyB;IACzB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC,CAAC;AA1EW,QAAA,cAAc,kBA0EzB"}
1
+ {"version":3,"file":"usePixzleImage.js","sourceRoot":"","sources":["../src/usePixzleImage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ManifestData } from "@pixzle/core";
2
+ export interface UsePixzleImagesProps {
3
+ /** Image sources - URLs or Blobs */
4
+ images: (string | Blob)[];
5
+ /** Manifest URL */
6
+ manifest?: string;
7
+ /** Manifest data object (alternative to manifest) */
8
+ manifestData?: ManifestData;
9
+ /** Whether to auto-start restoration */
10
+ autoRestore?: boolean;
11
+ }
12
+ export interface UsePixzleImagesResult {
13
+ /** Restored image URLs (object URLs) */
14
+ sources: string[];
15
+ /** Loading state */
16
+ isLoading: boolean;
17
+ /** Error if restoration failed */
18
+ error: Error | null;
19
+ /** Progress (0-1) */
20
+ progress: number;
21
+ /** Manually trigger restoration */
22
+ restore: () => Promise<void>;
23
+ }
24
+ export declare const usePixzleImages: ({ images, manifest, manifestData, autoRestore, }: UsePixzleImagesProps) => UsePixzleImagesResult;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.usePixzleImages = void 0;
7
+ const browser_1 = __importDefault(require("@pixzle/browser"));
8
+ const react_1 = require("react");
9
+ const utils_1 = require("./utils");
10
+ const usePixzleImages = ({ images, manifest, manifestData, autoRestore = true, }) => {
11
+ const [sources, setSources] = (0, react_1.useState)([]);
12
+ const [error, setError] = (0, react_1.useState)(null);
13
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
14
+ const [progress, setProgress] = (0, react_1.useState)(0);
15
+ const sourcesRef = (0, react_1.useRef)([]);
16
+ // Keep ref in sync with sources state
17
+ (0, react_1.useEffect)(() => {
18
+ sourcesRef.current = sources;
19
+ }, [sources]);
20
+ const restore = (0, react_1.useCallback)(async () => {
21
+ if (!images.length)
22
+ return;
23
+ if (!manifest && !manifestData)
24
+ return;
25
+ setIsLoading(true);
26
+ setError(null);
27
+ setProgress(0);
28
+ try {
29
+ const restoredBitmaps = await browser_1.default.restore({
30
+ images,
31
+ manifest,
32
+ manifestData,
33
+ });
34
+ const urls = [];
35
+ for (let i = 0; i < restoredBitmaps.length; i++) {
36
+ const bitmap = restoredBitmaps[i];
37
+ const url = await (0, utils_1.imageBitmapToBlobUrl)(bitmap);
38
+ urls.push(url);
39
+ setProgress((i + 1) / restoredBitmaps.length);
40
+ }
41
+ // Cleanup old URLs
42
+ setSources((prev) => {
43
+ for (const url of prev) {
44
+ URL.revokeObjectURL(url);
45
+ }
46
+ return urls;
47
+ });
48
+ }
49
+ catch (err) {
50
+ setError(err instanceof Error ? err : new Error(String(err)));
51
+ }
52
+ finally {
53
+ setIsLoading(false);
54
+ }
55
+ }, [images, manifest, manifestData]);
56
+ (0, react_1.useEffect)(() => {
57
+ if (autoRestore) {
58
+ restore();
59
+ }
60
+ }, [restore, autoRestore]);
61
+ // Cleanup URLs on unmount
62
+ (0, react_1.useEffect)(() => {
63
+ return () => {
64
+ for (const url of sourcesRef.current) {
65
+ URL.revokeObjectURL(url);
66
+ }
67
+ };
68
+ }, []);
69
+ return { sources, isLoading, error, progress, restore };
70
+ };
71
+ exports.usePixzleImages = usePixzleImages;
72
+ //# sourceMappingURL=usePixzleImages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePixzleImages.js","sourceRoot":"","sources":["../src/usePixzleImages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Convert an ImageBitmap to a Blob URL
3
+ * @param bitmap The ImageBitmap to convert
4
+ * @returns Promise resolving to a Blob URL string
5
+ */
6
+ export declare function imageBitmapToBlobUrl(bitmap: ImageBitmap): Promise<string>;
package/dist/utils.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.imageBitmapToBlobUrl = imageBitmapToBlobUrl;
4
+ /**
5
+ * Convert an ImageBitmap to a Blob URL
6
+ * @param bitmap The ImageBitmap to convert
7
+ * @returns Promise resolving to a Blob URL string
8
+ */
9
+ async function imageBitmapToBlobUrl(bitmap) {
10
+ const canvas = document.createElement("canvas");
11
+ canvas.width = bitmap.width;
12
+ canvas.height = bitmap.height;
13
+ const ctx = canvas.getContext("2d");
14
+ if (!ctx)
15
+ throw new Error("Could not get 2D context");
16
+ ctx.drawImage(bitmap, 0, 0);
17
+ const blob = await new Promise((resolve, reject) => {
18
+ canvas.toBlob((b) => {
19
+ if (b)
20
+ resolve(b);
21
+ else
22
+ reject(new Error("Failed to create blob"));
23
+ });
24
+ });
25
+ return URL.createObjectURL(blob);
26
+ }
27
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAKA,oDAmBC;AAxBD;;;;GAIG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAmB;IAEnB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAEtD,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC;;gBACb,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixzle/react",
3
- "version": "0.0.30",
3
+ "version": "0.1.0",
4
4
  "description": "React components for pixzle",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -34,8 +34,8 @@
34
34
  "access": "public"
35
35
  },
36
36
  "dependencies": {
37
- "@pixzle/browser": "0.0.30",
38
- "@pixzle/core": "0.0.30"
37
+ "@pixzle/browser": "0.1.0",
38
+ "@pixzle/core": "0.1.0"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": ">=16.8.0",