diff --git a/.gitignore b/.gitignore index 1cc927d..eda5341 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ packages/imagekit-editor/dist/* packages/imagekit-editor/*.tgz .turbo .yarn -builds \ No newline at end of file +builds +packages/imagekit-editor/README.md \ No newline at end of file diff --git a/examples/react-example/package.json b/examples/react-example/package.json index 3c91a3e..b96ca4e 100644 --- a/examples/react-example/package.json +++ b/examples/react-example/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { - "@imagekit/editor": "1.2.0", + "@imagekit/editor": "2.0.0", "@types/node": "^20.11.24", "@types/react": "^17.0.2", "@types/react-dom": "^17.0.2", diff --git a/examples/react-example/src/index.tsx b/examples/react-example/src/index.tsx index 2100c20..a083ba6 100644 --- a/examples/react-example/src/index.tsx +++ b/examples/react-example/src/index.tsx @@ -8,7 +8,9 @@ import ReactDOM from "react-dom" function App() { const [open, setOpen] = React.useState(true) const [editorProps, setEditorProps] = - React.useState>() + React.useState< + ImageKitEditorProps<{ requireSignedUrl: boolean; fileName: string }> + >() const ref = React.useRef(null) /** @@ -28,18 +30,21 @@ function App() { url: "https://ik.imagekit.io/v3sxk1svj/white%20BMW%20car%20on%20street.jpg", metadata: { requireSignedUrl: false, + fileName: "white BMW car on street.jpg", }, }, { url: "https://ik.imagekit.io/v3sxk1svj/Young%20Living%20Patchouili%20bot....jpg", metadata: { requireSignedUrl: false, + fileName: "Young Living Patchouili bot.jpg", }, }, { url: "https://ik.imagekit.io/v3sxk1svj/brown%20bear%20plush%20toy%20on%20whi....jpg?updatedAt=1760432666859", metadata: { requireSignedUrl: false, + fileName: "brown bear plush toy on white.jpg", }, }, // ...Array.from({ length: 10000 }).map((_, i) => ({ @@ -57,26 +62,26 @@ function App() { label: "Export", icon: , isVisible: true, - onClick: (images) => { - console.log(images) + onClick: (images, currentImage) => { + console.log(images, currentImage) }, }, - { - type: "menu", - label: "Export", - icon: , - isVisible: true, - options: [ - { - label: "Export", - icon: , - isVisible: true, - onClick: (images) => { - console.log(images) - }, - }, - ], - }, + // { + // type: "menu", + // label: "Export", + // icon: , + // isVisible: true, + // options: [ + // { + // label: "Export", + // icon: , + // isVisible: true, + // onClick: (images) => { + // console.log(images) + // }, + // }, + // ], + // }, ], signer: async (request) => { console.log(request) diff --git a/package.json b/package.json index 14f4ec4..571574b 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,8 @@ "start": "turbo run start", "build": "turbo run build", "version": "yarn workspace @imagekit/editor version", - "package": "yarn build && yarn workspace @imagekit/editor pack --out ../../builds/imagekit-editor-%v.tgz", - "release": "yarn build && yarn workspace @imagekit/editor pack --out ../../builds/imagekit-editor-%v.tgz && yarn workspace @imagekit/editor publish", + "package": "yarn build && shx cp README.md ./packages/imagekit-editor/ && yarn workspace @imagekit/editor pack --out ../../builds/imagekit-editor-%v.tgz", + "release": "yarn build && shx cp README.md ./packages/imagekit-editor/ && yarn workspace @imagekit/editor pack --out ../../builds/imagekit-editor-%v.tgz && yarn workspace @imagekit/editor publish", "prepare": "husky", "lint": "biome ci" }, @@ -26,6 +26,7 @@ "@biomejs/biome": "2.1.1", "husky": "^9.1.7", "lint-staged": "^16.1.2", + "shx": "^0.4.0", "turbo": "^2.0.1" }, "packageManager": "yarn@4.9.2", diff --git a/packages/imagekit-editor-dev/src/ImageKitEditor.tsx b/packages/imagekit-editor-dev/src/ImageKitEditor.tsx index 87ad4d2..675f583 100644 --- a/packages/imagekit-editor-dev/src/ImageKitEditor.tsx +++ b/packages/imagekit-editor-dev/src/ImageKitEditor.tsx @@ -4,10 +4,9 @@ import merge from "lodash/merge" import React, { forwardRef, useImperativeHandle } from "react" import { EditorLayout, EditorWrapper } from "./components/editor" import type { HeaderProps } from "./components/header" -import type { DEFAULT_FOCUS_OBJECTS } from "./schema" import { - type FileElement, type FocusObjects, + type InputFileElement, type RequiredMetadata, type Signer, useEditorStore, @@ -15,17 +14,17 @@ import { import { themeOverrides } from "./theme" export interface ImageKitEditorRef { - loadImage: (image: string | FileElement) => void - loadImages: (images: Array) => void + loadImage: (image: string | InputFileElement) => void + loadImages: (images: Array) => void setCurrentImage: (imageSrc: string) => void } interface EditorProps { theme?: Dict - initialImages?: Array> + initialImages?: Array> signer?: Signer onAddImage?: () => void - exportOptions?: HeaderProps["exportOptions"] + exportOptions?: HeaderProps["exportOptions"] focusObjects?: ReadonlyArray onClose: (args: { dirty: boolean; destroy: () => void }) => void } diff --git a/packages/imagekit-editor-dev/src/components/RetryableImage.tsx b/packages/imagekit-editor-dev/src/components/RetryableImage.tsx index 1f19380..8b3b3ed 100644 --- a/packages/imagekit-editor-dev/src/components/RetryableImage.tsx +++ b/packages/imagekit-editor-dev/src/components/RetryableImage.tsx @@ -11,6 +11,7 @@ import { } from "@chakra-ui/react" import React, { useCallback, useEffect, useMemo, useRef, useState } from "react" import { useVisibility } from "../hooks/useVisibility" +import { useEditorStore } from "../store" export interface RetryableImageProps extends ImageProps { maxRetries?: number @@ -144,7 +145,8 @@ export default function RetryableImage(props: RetryableImageProps) { const overlayActive = !!externalLoading || loading - const handleVisibleLoad = () => { + const handleVisibleLoad = (event: React.SyntheticEvent) => { + imgProps?.onLoad?.(event) setLoading(false) setError(null) lastSuccessBaseRef.current = currentSrcBase diff --git a/packages/imagekit-editor-dev/src/components/editor/ActionBar.tsx b/packages/imagekit-editor-dev/src/components/editor/ActionBar.tsx index 8f46c3d..139957b 100644 --- a/packages/imagekit-editor-dev/src/components/editor/ActionBar.tsx +++ b/packages/imagekit-editor-dev/src/components/editor/ActionBar.tsx @@ -17,7 +17,7 @@ import { import { PiGridFour } from "@react-icons/all-files/pi/PiGridFour" import { PiImageSquare } from "@react-icons/all-files/pi/PiImageSquare" import { PiListBullets } from "@react-icons/all-files/pi/PiListBullets" -import { type FC, useEffect, useState } from "react" +import { type FC, useMemo } from "react" import { useEditorStore } from "../../store" interface ActionBarProps { @@ -33,25 +33,19 @@ export const ActionBar: FC = ({ gridImageSize, setGridImageSize, }) => { - const { currentImage, showOriginal, setShowOriginal } = useEditorStore() + const { + currentImage, + imageList, + originalImageList, + showOriginal, + setShowOriginal, + } = useEditorStore() - const [imageDimensions, setImageDimensions] = useState<{ - width: number - height: number - } | null>(null) - - useEffect(() => { - if (currentImage) { - const img = new Image() - img.onload = () => { - setImageDimensions({ - width: img.naturalWidth, - height: img.naturalHeight, - }) - } - img.src = currentImage - } - }, [currentImage]) + const imageDimensions = useMemo(() => { + const idx = imageList.findIndex((img) => img === currentImage) + if (idx === -1) return null + return originalImageList[idx].imageDimensions + }, [currentImage, imageList, originalImageList]) return ( = ({ imageSize, onAddImage }) => { originalImageList, signingImages, removeImage, + setImageDimensions, } = useEditorStore() return ( = ({ imageSize, onAddImage }) => { } isLoading={isSigning} + onLoad={(event) => { + setImageDimensions(originalImageList[index]!.url, { + width: event.currentTarget.naturalWidth, + height: event.currentTarget.naturalHeight, + }) + }} /> )} diff --git a/packages/imagekit-editor-dev/src/components/editor/ListView.tsx b/packages/imagekit-editor-dev/src/components/editor/ListView.tsx index a3936b6..dac8b90 100644 --- a/packages/imagekit-editor-dev/src/components/editor/ListView.tsx +++ b/packages/imagekit-editor-dev/src/components/editor/ListView.tsx @@ -15,6 +15,7 @@ export const ListView: FC = ({ onAddImage }) => { imageList, originalImageList, signingImages, + setImageDimensions, _internalState, } = useEditorStore() @@ -53,6 +54,16 @@ export const ListView: FC = ({ onAddImage }) => { const originalUrl = originalImageList[idx]?.url return originalUrl ? signingImages[originalUrl] : false })()} + onLoad={(event) => { + console.log(event) + if (!currentImage) return + const idx = imageList.findIndex((img) => img === currentImage) + if (idx === -1) return + setImageDimensions(originalImageList[idx]!.url, { + width: event.currentTarget.naturalWidth, + height: event.currentTarget.naturalHeight, + }) + }} /> diff --git a/packages/imagekit-editor-dev/src/components/header/index.tsx b/packages/imagekit-editor-dev/src/components/header/index.tsx index 4b8bdb4..9e4cb91 100644 --- a/packages/imagekit-editor-dev/src/components/header/index.tsx +++ b/packages/imagekit-editor-dev/src/components/header/index.tsx @@ -14,31 +14,46 @@ import { PiImageSquare } from "@react-icons/all-files/pi/PiImageSquare" import { PiImagesSquare } from "@react-icons/all-files/pi/PiImagesSquare" import { PiX } from "@react-icons/all-files/pi/PiX" import React, { useMemo } from "react" -import { useEditorStore } from "../../store" +import { + type FileElement, + type RequiredMetadata, + useEditorStore, +} from "../../store" -interface ExportOptionButton { +interface ExportOptionButton< + Metadata extends RequiredMetadata = RequiredMetadata, +> { type: "button" label: string icon?: React.ReactElement isVisible: boolean | ((images: string[], currentImage?: string) => boolean) - onClick: (images: string[], currentImage?: string) => void + onClick: ( + images: { url: string; file: FileElement }[], + currentImage?: { url: string; file: FileElement }, + ) => void } -interface ExportOptionMenu { +interface ExportOptionMenu< + Metadata extends RequiredMetadata = RequiredMetadata, +> { type: "menu" label: string icon?: React.ReactElement isVisible: boolean | ((images: string[], currentImage?: string) => boolean) - options: Array> + options: Array, "type">> } -export interface HeaderProps { +export interface HeaderProps< + Metadata extends RequiredMetadata = RequiredMetadata, +> { onClose: () => void - exportOptions?: Array + exportOptions?: Array< + ExportOptionButton | ExportOptionMenu + > } export const Header = ({ onClose, exportOptions }: HeaderProps) => { - const { imageList, currentImage } = useEditorStore() + const { imageList, originalImageList, currentImage } = useEditorStore() const headerText = useMemo(() => { if (imageList.length === 1) { @@ -92,7 +107,19 @@ export const Header = ({ onClose, exportOptions }: HeaderProps) => { borderRadius="0" px="8" size="sm" - onClick={() => exportOption.onClick(imageList, currentImage)} + onClick={() => { + const images = imageList.map((image, index) => ({ + url: image, + file: originalImageList[index], + })) + const cImage = images.find( + (image) => image.url === currentImage, + ) + exportOption.onClick(images, { + url: cImage!.url, + file: cImage!.file, + }) + }} > {exportOption.label} @@ -121,7 +148,19 @@ export const Header = ({ onClose, exportOptions }: HeaderProps) => { .map((option) => ( option.onClick(imageList, currentImage)} + onClick={() => { + const images = imageList.map((image, index) => ({ + url: image, + file: originalImageList[index], + })) + const cImage = images.find( + (image) => image.url === currentImage, + ) + option.onClick(images, { + url: cImage!.url, + file: cImage!.file, + }) + }} > {option.label} diff --git a/packages/imagekit-editor-dev/src/components/toolbar/toolbar.tsx b/packages/imagekit-editor-dev/src/components/toolbar/toolbar.tsx index fa53477..67ac076 100644 --- a/packages/imagekit-editor-dev/src/components/toolbar/toolbar.tsx +++ b/packages/imagekit-editor-dev/src/components/toolbar/toolbar.tsx @@ -21,6 +21,7 @@ export const Toolbar: FC = ({ onAddImage, onSelectImage }) => { signingImages, setCurrentImage, removeImage, + setImageDimensions, _internalState, } = useEditorStore() @@ -204,6 +205,12 @@ export const Toolbar: FC = ({ onAddImage, onSelectImage }) => { } isLoading={isSigning} + onLoad={(event) => { + setImageDimensions(originalImageList[index]!.url, { + width: event.currentTarget.naturalWidth, + height: event.currentTarget.naturalHeight, + }) + }} /> )} diff --git a/packages/imagekit-editor-dev/src/store.ts b/packages/imagekit-editor-dev/src/store.ts index 5fbad49..a66ca1f 100644 --- a/packages/imagekit-editor-dev/src/store.ts +++ b/packages/imagekit-editor-dev/src/store.ts @@ -28,8 +28,13 @@ export interface FileElement< > { url: string metadata: Metadata + imageDimensions: { width: number; height: number } | null } +export type InputFileElement< + Metadata extends RequiredMetadata = RequiredMetadata, +> = Omit, "imageDimensions"> + export interface SignerRequest< Metadata extends RequiredMetadata = RequiredMetadata, > { @@ -84,14 +89,18 @@ export type EditorActions< Metadata extends RequiredMetadata = RequiredMetadata, > = { initialize: (initialData?: { - imageList?: Array> + imageList?: Array> signer?: Signer focusObjects?: ReadonlyArray }) => void destroy: () => void setCurrentImage: (imageSrc: string | undefined) => void - addImage: (imageSrc: string | FileElement) => void - addImages: (imageSrcs: Array>) => void + setImageDimensions: ( + imageSrc: string, + dimensions: { width: number; height: number } | null, + ) => void + addImage: (imageSrc: string | InputFileElement) => void + addImages: (imageSrcs: Array>) => void removeImage: (imageSrc: string) => void setTransformations: (transformations: Omit[]) => void moveTransformation: ( @@ -131,12 +140,13 @@ function initTransformationStates(transformations: Transformation[]) { initTransformationStates(initialTransformations) function normalizeImage( - image: string | FileElement, + image: string | InputFileElement, ): FileElement { if (typeof image === "string") { return { url: image, metadata: { requireSignedUrl: false } as Metadata, + imageDimensions: null, } } return { @@ -147,6 +157,7 @@ function normalizeImage( requireSignedUrl: image.metadata.requireSignedUrl ?? false, } : ({ requireSignedUrl: false } as Metadata), + imageDimensions: null, } } @@ -202,6 +213,18 @@ const useEditorStore = create()( set({ currentImage: imageSrc }) }, + setImageDimensions: (imageSrc, imageDimensions) => { + set((state) => { + const index = state.originalImageList.findIndex( + (img) => img.url === imageSrc, + ) + if (index === -1) return state + const updatedImageList = [...state.originalImageList] + updatedImageList[index].imageDimensions = imageDimensions + return { originalImageList: updatedImageList } + }) + }, + addImage: (imageSrc) => { const img = normalizeImage(imageSrc) if (!get().originalImageList.some((i) => i.url === img.url)) { diff --git a/packages/imagekit-editor/package.json b/packages/imagekit-editor/package.json index 5152ffc..536f6e7 100644 --- a/packages/imagekit-editor/package.json +++ b/packages/imagekit-editor/package.json @@ -1,6 +1,6 @@ { "name": "@imagekit/editor", - "version": "1.2.0", + "version": "2.0.0", "description": "Image Editor powered by ImageKit", "main": "dist/index.cjs.js", "module": "dist/index.es.js", diff --git a/yarn.lock b/yarn.lock index 2ee9055..368511a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1651,7 +1651,7 @@ __metadata: languageName: node linkType: hard -"@imagekit/editor@npm:1.2.0, @imagekit/editor@workspace:packages/imagekit-editor": +"@imagekit/editor@npm:2.0.0, @imagekit/editor@workspace:packages/imagekit-editor": version: 0.0.0-use.local resolution: "@imagekit/editor@workspace:packages/imagekit-editor" peerDependencies: @@ -1865,6 +1865,33 @@ __metadata: languageName: node linkType: hard +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + "@npmcli/agent@npm:^3.0.0": version: 3.0.0 resolution: "@npmcli/agent@npm:3.0.0" @@ -2713,6 +2740,19 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^6.0.0": + version: 6.0.6 + resolution: "cross-spawn@npm:6.0.6" + dependencies: + nice-try: "npm:^1.0.4" + path-key: "npm:^2.0.1" + semver: "npm:^5.5.0" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: 10c0/bf61fb890e8635102ea9bce050515cf915ff6a50ccaa0b37a17dc82fded0fb3ed7af5478b9367b86baee19127ad86af4be51d209f64fd6638c0862dca185fe1d + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -2848,6 +2888,15 @@ __metadata: languageName: node linkType: hard +"end-of-stream@npm:^1.1.0": + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/b0701c92a10b89afb1cb45bf54a5292c6f008d744eb4382fa559d54775ff31617d1d7bc3ef617575f552e24fad2c7c1a1835948c66b3f3a4be0a6c1f35c883d8 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -2992,6 +3041,21 @@ __metadata: languageName: node linkType: hard +"execa@npm:^1.0.0": + version: 1.0.0 + resolution: "execa@npm:1.0.0" + dependencies: + cross-spawn: "npm:^6.0.0" + get-stream: "npm:^4.0.0" + is-stream: "npm:^1.1.0" + npm-run-path: "npm:^2.0.0" + p-finally: "npm:^1.0.0" + signal-exit: "npm:^3.0.0" + strip-eof: "npm:^1.0.0" + checksum: 10c0/cc71707c9aa4a2552346893ee63198bf70a04b5a1bc4f8a0ef40f1d03c319eae80932c59191f037990d7d102193e83a38ec72115fff814ec2fb3099f3661a590 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.2 resolution: "exponential-backoff@npm:3.1.2" @@ -3013,6 +3077,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -3020,6 +3097,15 @@ __metadata: languageName: node linkType: hard +"fastq@npm:^1.6.0": + version: 1.19.1 + resolution: "fastq@npm:1.19.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 + languageName: node + linkType: hard + "fdir@npm:^6.4.4": version: 6.4.6 resolution: "fdir@npm:6.4.6" @@ -3180,6 +3266,24 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^4.0.0": + version: 4.1.0 + resolution: "get-stream@npm:4.1.0" + dependencies: + pump: "npm:^3.0.0" + checksum: 10c0/294d876f667694a5ca23f0ca2156de67da950433b6fb53024833733975d32582896dbc7f257842d331809979efccf04d5e0b6b75ad4d45744c45f193fd497539 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + "glob@npm:^10.2.2": version: 10.4.5 resolution: "glob@npm:10.4.5" @@ -3341,6 +3445,7 @@ __metadata: husky: "npm:^9.1.7" lint-staged: "npm:^16.1.2" react-select: "npm:^5.2.1" + shx: "npm:^0.4.0" turbo: "npm:^2.0.1" languageName: unknown linkType: soft @@ -3376,6 +3481,13 @@ __metadata: languageName: node linkType: hard +"interpret@npm:^1.0.0": + version: 1.4.0 + resolution: "interpret@npm:1.4.0" + checksum: 10c0/08c5ad30032edeec638485bc3f6db7d0094d9b3e85e0f950866600af3c52e9fd69715416d29564731c479d9f4d43ff3e4d302a178196bdc0e6837ec147640450 + languageName: node + linkType: hard + "ip-address@npm:^9.0.5": version: 9.0.5 resolution: "ip-address@npm:9.0.5" @@ -3393,7 +3505,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.16.0": +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" dependencies: @@ -3411,6 +3523,13 @@ __metadata: languageName: node linkType: hard +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -3434,6 +3553,15 @@ __metadata: languageName: node linkType: hard +"is-glob@npm:^4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -3441,6 +3569,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 + languageName: node + linkType: hard + "is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" @@ -3727,6 +3862,13 @@ __metadata: languageName: node linkType: hard +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + "micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" @@ -3753,6 +3895,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.8": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -3880,6 +4029,13 @@ __metadata: languageName: node linkType: hard +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 10c0/95568c1b73e1d0d4069a3e3061a2102d854513d37bcfda73300015b7ba4868d3b27c198d1dbbd8ebdef4112fc2ed9e895d4a0f2e1cce0bd334f2a1346dc9205f + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 11.2.0 resolution: "node-gyp@npm:11.2.0" @@ -3918,6 +4074,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^2.0.0": + version: 2.0.2 + resolution: "npm-run-path@npm:2.0.2" + dependencies: + path-key: "npm:^2.0.0" + checksum: 10c0/95549a477886f48346568c97b08c4fda9cdbf7ce8a4fbc2213f36896d0d19249e32d68d7451bdcbca8041b5fba04a6b2c4a618beaf19849505c05b700740f1de + languageName: node + linkType: hard + "object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -3925,6 +4090,15 @@ __metadata: languageName: node linkType: hard +"once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + "onetime@npm:^7.0.0": version: 7.0.0 resolution: "onetime@npm:7.0.0" @@ -3945,6 +4119,13 @@ __metadata: languageName: node linkType: hard +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 + languageName: node + linkType: hard + "p-map@npm:^7.0.2": version: 7.0.3 resolution: "p-map@npm:7.0.3" @@ -3987,6 +4168,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^2.0.0, path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: 10c0/dd2044f029a8e58ac31d2bf34c34b93c3095c1481942960e84dd2faa95bbb71b9b762a106aead0646695330936414b31ca0bd862bf488a937ad17c8c5d73b32b + languageName: node + linkType: hard + "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -4128,6 +4316,16 @@ __metadata: languageName: node linkType: hard +"pump@npm:^3.0.0": + version: 3.0.3 + resolution: "pump@npm:3.0.3" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/ada5cdf1d813065bbc99aa2c393b8f6beee73b5de2890a8754c9f488d7323ffd2ca5f5a0943b48934e3fcbd97637d0337369c3c631aeb9614915db629f1c75c9 + languageName: node + linkType: hard + "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -4142,6 +4340,13 @@ __metadata: languageName: node linkType: hard +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + "react-best-gradient-color-picker@npm:^3.0.14": version: 3.0.14 resolution: "react-best-gradient-color-picker@npm:3.0.14" @@ -4188,7 +4393,7 @@ __metadata: version: 0.0.0-use.local resolution: "react-example@workspace:examples/react-example" dependencies: - "@imagekit/editor": "npm:1.2.0" + "@imagekit/editor": "npm:2.0.0" "@types/node": "npm:^20.11.24" "@types/react": "npm:^17.0.2" "@types/react-dom": "npm:^17.0.2" @@ -4342,6 +4547,15 @@ __metadata: languageName: node linkType: hard +"rechoir@npm:^0.6.2": + version: 0.6.2 + resolution: "rechoir@npm:0.6.2" + dependencies: + resolve: "npm:^1.1.6" + checksum: 10c0/22c4bb32f4934a9468468b608417194f7e3ceba9a508512125b16082c64f161915a28467562368eeb15dc16058eb5b7c13a20b9eb29ff9927d1ebb3b5aa83e84 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -4356,6 +4570,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.1.6": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 + languageName: node + linkType: hard + "resolve@npm:^1.19.0, resolve@npm:~1.22.1": version: 1.22.10 resolution: "resolve@npm:1.22.10" @@ -4379,6 +4606,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 + languageName: node + linkType: hard + "resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A~1.22.1#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" @@ -4419,6 +4659,13 @@ __metadata: languageName: node linkType: hard +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + "rfdc@npm:^1.4.1": version: 1.4.1 resolution: "rfdc@npm:1.4.1" @@ -4523,6 +4770,15 @@ __metadata: languageName: node linkType: hard +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -4540,6 +4796,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + "semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -4569,6 +4834,15 @@ __metadata: languageName: node linkType: hard +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: "npm:^1.0.0" + checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -4578,6 +4852,13 @@ __metadata: languageName: node linkType: hard +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 + languageName: node + linkType: hard + "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" @@ -4585,6 +4866,39 @@ __metadata: languageName: node linkType: hard +"shelljs@npm:^0.9.2": + version: 0.9.2 + resolution: "shelljs@npm:0.9.2" + dependencies: + execa: "npm:^1.0.0" + fast-glob: "npm:^3.3.2" + interpret: "npm:^1.0.0" + rechoir: "npm:^0.6.2" + bin: + shjs: bin/shjs + checksum: 10c0/2aed1e2ff344b03a36aa018326ab768e4af88e22b0f3d89fbb2f15bca1a6cf6209c6d523658ebc7fc7986675ea75c7bdbce0501201b8883f1db21b22a50d5e6d + languageName: node + linkType: hard + +"shx@npm:^0.4.0": + version: 0.4.0 + resolution: "shx@npm:0.4.0" + dependencies: + minimist: "npm:^1.2.8" + shelljs: "npm:^0.9.2" + bin: + shx: lib/cli.js + checksum: 10c0/0ccff768baaed7866641d9345713560014842fb5e7a0705ebf4a9e4e5664ca5eb58fc38e6a2a4e4c6cebe1451091b6afb0277fff390647723de6e6560dca4b01 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + "signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" @@ -4759,6 +5073,13 @@ __metadata: languageName: node linkType: hard +"strip-eof@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-eof@npm:1.0.0" + checksum: 10c0/f336beed8622f7c1dd02f2cbd8422da9208fae81daf184f73656332899978919d5c0ca84dc6cfc49ad1fc4dd7badcde5412a063cf4e0d7f8ed95a13a63f68f45 + languageName: node + linkType: hard + "strip-json-comments@npm:~3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -5281,6 +5602,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + which: ./bin/which + checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 + languageName: node + linkType: hard + "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -5336,6 +5668,13 @@ __metadata: languageName: node linkType: hard +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8"