ima2-gen 1.1.13 → 1.1.16
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 +31 -7
- package/bin/commands/capabilities.js +5 -0
- package/bin/commands/capabilities.ts +5 -0
- package/bin/commands/doctor.js +195 -0
- package/bin/commands/doctor.ts +202 -0
- package/bin/commands/edit.js +6 -6
- package/bin/commands/edit.ts +6 -6
- package/bin/commands/gen.js +6 -6
- package/bin/commands/gen.ts +6 -6
- package/bin/commands/grok.js +61 -0
- package/bin/commands/grok.ts +67 -0
- package/bin/commands/multimode.js +3 -3
- package/bin/commands/multimode.ts +3 -3
- package/bin/commands/node.js +4 -4
- package/bin/commands/node.ts +4 -4
- package/bin/ima2.js +5 -105
- package/bin/ima2.ts +5 -109
- package/config.js +17 -0
- package/config.ts +21 -0
- package/docs/API.md +77 -8
- package/docs/CLI.md +65 -3
- package/docs/FAQ.ko.md +82 -2
- package/docs/FAQ.md +85 -2
- package/docs/PROMPT_STUDIO.ko.md +111 -0
- package/docs/PROMPT_STUDIO.md +115 -0
- package/docs/README.ko.md +27 -7
- package/docs/grok-video-i2v-plan.md +419 -0
- package/docs/grok-video-i2v-research.md +204 -0
- package/docs/migration/runtime-test-inventory.md +12 -1
- package/lib/agentRuntime.js +88 -19
- package/lib/agentRuntime.ts +97 -29
- package/lib/agentSettings.js +1 -1
- package/lib/agentSettings.ts +1 -1
- package/lib/agentTypes.ts +1 -1
- package/lib/capabilities.js +10 -2
- package/lib/capabilities.ts +10 -2
- package/lib/configKeys.js +6 -0
- package/lib/configKeys.ts +6 -1
- package/lib/errorClassify.js +1 -1
- package/lib/errorClassify.ts +1 -1
- package/lib/generationErrors.js +121 -23
- package/lib/generationErrors.ts +100 -13
- package/lib/grokImageAdapter.js +364 -0
- package/lib/grokImageAdapter.ts +483 -0
- package/lib/grokMultimodeAdapter.js +54 -0
- package/lib/grokMultimodeAdapter.ts +84 -0
- package/lib/grokProxyLauncher.js +105 -0
- package/lib/grokProxyLauncher.ts +129 -0
- package/lib/grokRuntime.js +18 -0
- package/lib/grokRuntime.ts +23 -0
- package/lib/grokSizeMapper.js +63 -0
- package/lib/grokSizeMapper.ts +71 -0
- package/lib/grokVideoAdapter.js +374 -0
- package/lib/grokVideoAdapter.ts +438 -0
- package/lib/historyList.js +5 -1
- package/lib/historyList.ts +5 -1
- package/lib/imageMetadata.js +2 -0
- package/lib/imageMetadata.ts +2 -0
- package/lib/imageModels.js +101 -0
- package/lib/imageModels.ts +111 -0
- package/lib/providerOptions.js +15 -1
- package/lib/providerOptions.ts +15 -1
- package/lib/responsesDoctor.js +386 -0
- package/lib/responsesDoctor.ts +456 -0
- package/lib/responsesErrors.js +57 -0
- package/lib/responsesErrors.ts +83 -0
- package/lib/responsesFallback.js +72 -0
- package/lib/responsesFallback.ts +114 -0
- package/lib/responsesImageAdapter.js +121 -174
- package/lib/responsesImageAdapter.ts +136 -211
- package/lib/responsesParse.js +324 -0
- package/lib/responsesParse.ts +452 -0
- package/lib/responsesTools.js +15 -0
- package/lib/responsesTools.ts +28 -0
- package/lib/runtimeContext.js +12 -0
- package/lib/runtimeContext.ts +15 -0
- package/node_modules/array-flatten/LICENSE +21 -0
- package/node_modules/array-flatten/README.md +43 -0
- package/node_modules/array-flatten/array-flatten.js +64 -0
- package/node_modules/array-flatten/package.json +39 -0
- package/node_modules/bundle-name/index.js +5 -0
- package/node_modules/bundle-name/license +9 -0
- package/node_modules/bundle-name/package.json +45 -0
- package/node_modules/bundle-name/readme.md +23 -0
- package/node_modules/bytes/History.md +97 -0
- package/node_modules/bytes/LICENSE +23 -0
- package/node_modules/bytes/Readme.md +152 -0
- package/node_modules/bytes/index.js +170 -0
- package/node_modules/bytes/package.json +42 -0
- package/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
- package/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
- package/node_modules/call-bind-apply-helpers/.nycrc +9 -0
- package/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
- package/node_modules/call-bind-apply-helpers/LICENSE +21 -0
- package/node_modules/call-bind-apply-helpers/README.md +62 -0
- package/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
- package/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
- package/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
- package/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
- package/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
- package/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
- package/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
- package/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
- package/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
- package/node_modules/call-bind-apply-helpers/index.js +15 -0
- package/node_modules/call-bind-apply-helpers/package.json +85 -0
- package/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
- package/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
- package/node_modules/call-bind-apply-helpers/test/index.js +63 -0
- package/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
- package/node_modules/call-bound/.eslintrc +13 -0
- package/node_modules/call-bound/.github/FUNDING.yml +12 -0
- package/node_modules/call-bound/.nycrc +9 -0
- package/node_modules/call-bound/CHANGELOG.md +42 -0
- package/node_modules/call-bound/LICENSE +21 -0
- package/node_modules/call-bound/README.md +53 -0
- package/node_modules/call-bound/index.d.ts +94 -0
- package/node_modules/call-bound/index.js +19 -0
- package/node_modules/call-bound/package.json +99 -0
- package/node_modules/call-bound/test/index.js +61 -0
- package/node_modules/call-bound/tsconfig.json +10 -0
- package/node_modules/commander/LICENSE +22 -0
- package/node_modules/commander/Readme.md +1149 -0
- package/node_modules/commander/esm.mjs +16 -0
- package/node_modules/commander/index.js +24 -0
- package/node_modules/commander/lib/argument.js +149 -0
- package/node_modules/commander/lib/command.js +2662 -0
- package/node_modules/commander/lib/error.js +39 -0
- package/node_modules/commander/lib/help.js +709 -0
- package/node_modules/commander/lib/option.js +367 -0
- package/node_modules/commander/lib/suggestSimilar.js +101 -0
- package/node_modules/commander/package-support.json +16 -0
- package/node_modules/commander/package.json +82 -0
- package/node_modules/commander/typings/esm.d.mts +3 -0
- package/node_modules/commander/typings/index.d.ts +1045 -0
- package/node_modules/content-type/HISTORY.md +29 -0
- package/node_modules/content-type/LICENSE +22 -0
- package/node_modules/content-type/README.md +94 -0
- package/node_modules/content-type/index.js +225 -0
- package/node_modules/content-type/package.json +42 -0
- package/node_modules/cookie/LICENSE +24 -0
- package/node_modules/cookie/README.md +317 -0
- package/node_modules/cookie/SECURITY.md +25 -0
- package/node_modules/cookie/index.js +335 -0
- package/node_modules/cookie/package.json +44 -0
- package/node_modules/default-browser/index.d.ts +29 -0
- package/node_modules/default-browser/index.js +34 -0
- package/node_modules/default-browser/license +9 -0
- package/node_modules/default-browser/package.json +54 -0
- package/node_modules/default-browser/readme.md +24 -0
- package/node_modules/default-browser/windows.js +57 -0
- package/node_modules/default-browser-id/index.js +25 -0
- package/node_modules/default-browser-id/license +9 -0
- package/node_modules/default-browser-id/package.json +41 -0
- package/node_modules/default-browser-id/readme.md +19 -0
- package/node_modules/define-lazy-prop/index.d.ts +31 -0
- package/node_modules/define-lazy-prop/index.js +18 -0
- package/node_modules/define-lazy-prop/license +9 -0
- package/node_modules/define-lazy-prop/package.json +51 -0
- package/node_modules/define-lazy-prop/readme.md +55 -0
- package/node_modules/depd/History.md +103 -0
- package/node_modules/depd/LICENSE +22 -0
- package/node_modules/depd/Readme.md +280 -0
- package/node_modules/depd/index.js +538 -0
- package/node_modules/depd/lib/browser/index.js +77 -0
- package/node_modules/depd/package.json +45 -0
- package/node_modules/destroy/LICENSE +23 -0
- package/node_modules/destroy/README.md +63 -0
- package/node_modules/destroy/index.js +209 -0
- package/node_modules/destroy/package.json +48 -0
- package/node_modules/dunder-proto/.eslintrc +5 -0
- package/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
- package/node_modules/dunder-proto/.nycrc +13 -0
- package/node_modules/dunder-proto/CHANGELOG.md +24 -0
- package/node_modules/dunder-proto/LICENSE +21 -0
- package/node_modules/dunder-proto/README.md +54 -0
- package/node_modules/dunder-proto/get.d.ts +5 -0
- package/node_modules/dunder-proto/get.js +30 -0
- package/node_modules/dunder-proto/package.json +76 -0
- package/node_modules/dunder-proto/set.d.ts +5 -0
- package/node_modules/dunder-proto/set.js +35 -0
- package/node_modules/dunder-proto/test/get.js +34 -0
- package/node_modules/dunder-proto/test/index.js +4 -0
- package/node_modules/dunder-proto/test/set.js +50 -0
- package/node_modules/dunder-proto/tsconfig.json +9 -0
- package/node_modules/ee-first/LICENSE +22 -0
- package/node_modules/ee-first/README.md +80 -0
- package/node_modules/ee-first/index.js +95 -0
- package/node_modules/ee-first/package.json +29 -0
- package/node_modules/encodeurl/LICENSE +22 -0
- package/node_modules/encodeurl/README.md +109 -0
- package/node_modules/encodeurl/index.js +60 -0
- package/node_modules/encodeurl/package.json +40 -0
- package/node_modules/es-define-property/.eslintrc +13 -0
- package/node_modules/es-define-property/.github/FUNDING.yml +12 -0
- package/node_modules/es-define-property/.nycrc +9 -0
- package/node_modules/es-define-property/CHANGELOG.md +29 -0
- package/node_modules/es-define-property/LICENSE +21 -0
- package/node_modules/es-define-property/README.md +49 -0
- package/node_modules/es-define-property/index.d.ts +3 -0
- package/node_modules/es-define-property/index.js +14 -0
- package/node_modules/es-define-property/package.json +81 -0
- package/node_modules/es-define-property/test/index.js +56 -0
- package/node_modules/es-define-property/tsconfig.json +10 -0
- package/node_modules/es-errors/.eslintrc +5 -0
- package/node_modules/es-errors/.github/FUNDING.yml +12 -0
- package/node_modules/es-errors/CHANGELOG.md +40 -0
- package/node_modules/es-errors/LICENSE +21 -0
- package/node_modules/es-errors/README.md +55 -0
- package/node_modules/es-errors/eval.d.ts +3 -0
- package/node_modules/es-errors/eval.js +4 -0
- package/node_modules/es-errors/index.d.ts +3 -0
- package/node_modules/es-errors/index.js +4 -0
- package/node_modules/es-errors/package.json +80 -0
- package/node_modules/es-errors/range.d.ts +3 -0
- package/node_modules/es-errors/range.js +4 -0
- package/node_modules/es-errors/ref.d.ts +3 -0
- package/node_modules/es-errors/ref.js +4 -0
- package/node_modules/es-errors/syntax.d.ts +3 -0
- package/node_modules/es-errors/syntax.js +4 -0
- package/node_modules/es-errors/test/index.js +19 -0
- package/node_modules/es-errors/tsconfig.json +49 -0
- package/node_modules/es-errors/type.d.ts +3 -0
- package/node_modules/es-errors/type.js +4 -0
- package/node_modules/es-errors/uri.d.ts +3 -0
- package/node_modules/es-errors/uri.js +4 -0
- package/node_modules/es-object-atoms/.eslintrc +16 -0
- package/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
- package/node_modules/es-object-atoms/CHANGELOG.md +37 -0
- package/node_modules/es-object-atoms/LICENSE +21 -0
- package/node_modules/es-object-atoms/README.md +63 -0
- package/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
- package/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
- package/node_modules/es-object-atoms/ToObject.d.ts +7 -0
- package/node_modules/es-object-atoms/ToObject.js +10 -0
- package/node_modules/es-object-atoms/index.d.ts +3 -0
- package/node_modules/es-object-atoms/index.js +4 -0
- package/node_modules/es-object-atoms/isObject.d.ts +3 -0
- package/node_modules/es-object-atoms/isObject.js +6 -0
- package/node_modules/es-object-atoms/package.json +80 -0
- package/node_modules/es-object-atoms/test/index.js +38 -0
- package/node_modules/es-object-atoms/tsconfig.json +6 -0
- package/node_modules/escape-html/LICENSE +24 -0
- package/node_modules/escape-html/Readme.md +43 -0
- package/node_modules/escape-html/index.js +78 -0
- package/node_modules/escape-html/package.json +24 -0
- package/node_modules/etag/HISTORY.md +83 -0
- package/node_modules/etag/LICENSE +22 -0
- package/node_modules/etag/README.md +159 -0
- package/node_modules/etag/index.js +131 -0
- package/node_modules/etag/package.json +47 -0
- package/node_modules/forwarded/HISTORY.md +21 -0
- package/node_modules/forwarded/LICENSE +22 -0
- package/node_modules/forwarded/README.md +57 -0
- package/node_modules/forwarded/index.js +90 -0
- package/node_modules/forwarded/package.json +45 -0
- package/node_modules/function-bind/.eslintrc +21 -0
- package/node_modules/function-bind/.github/FUNDING.yml +12 -0
- package/node_modules/function-bind/.github/SECURITY.md +3 -0
- package/node_modules/function-bind/.nycrc +13 -0
- package/node_modules/function-bind/CHANGELOG.md +136 -0
- package/node_modules/function-bind/LICENSE +20 -0
- package/node_modules/function-bind/README.md +46 -0
- package/node_modules/function-bind/implementation.js +84 -0
- package/node_modules/function-bind/index.js +5 -0
- package/node_modules/function-bind/package.json +87 -0
- package/node_modules/function-bind/test/.eslintrc +9 -0
- package/node_modules/function-bind/test/index.js +252 -0
- package/node_modules/get-intrinsic/.eslintrc +42 -0
- package/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
- package/node_modules/get-intrinsic/.nycrc +9 -0
- package/node_modules/get-intrinsic/CHANGELOG.md +186 -0
- package/node_modules/get-intrinsic/LICENSE +21 -0
- package/node_modules/get-intrinsic/README.md +71 -0
- package/node_modules/get-intrinsic/index.js +378 -0
- package/node_modules/get-intrinsic/package.json +97 -0
- package/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
- package/node_modules/get-proto/.eslintrc +10 -0
- package/node_modules/get-proto/.github/FUNDING.yml +12 -0
- package/node_modules/get-proto/.nycrc +9 -0
- package/node_modules/get-proto/CHANGELOG.md +21 -0
- package/node_modules/get-proto/LICENSE +21 -0
- package/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
- package/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
- package/node_modules/get-proto/README.md +50 -0
- package/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
- package/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
- package/node_modules/get-proto/index.d.ts +5 -0
- package/node_modules/get-proto/index.js +27 -0
- package/node_modules/get-proto/package.json +81 -0
- package/node_modules/get-proto/test/index.js +68 -0
- package/node_modules/get-proto/tsconfig.json +9 -0
- package/node_modules/gopd/.eslintrc +16 -0
- package/node_modules/gopd/.github/FUNDING.yml +12 -0
- package/node_modules/gopd/CHANGELOG.md +45 -0
- package/node_modules/gopd/LICENSE +21 -0
- package/node_modules/gopd/README.md +40 -0
- package/node_modules/gopd/gOPD.d.ts +1 -0
- package/node_modules/gopd/gOPD.js +4 -0
- package/node_modules/gopd/index.d.ts +5 -0
- package/node_modules/gopd/index.js +15 -0
- package/node_modules/gopd/package.json +77 -0
- package/node_modules/gopd/test/index.js +36 -0
- package/node_modules/gopd/tsconfig.json +9 -0
- package/node_modules/has-symbols/.eslintrc +11 -0
- package/node_modules/has-symbols/.github/FUNDING.yml +12 -0
- package/node_modules/has-symbols/.nycrc +9 -0
- package/node_modules/has-symbols/CHANGELOG.md +91 -0
- package/node_modules/has-symbols/LICENSE +21 -0
- package/node_modules/has-symbols/README.md +46 -0
- package/node_modules/has-symbols/index.d.ts +3 -0
- package/node_modules/has-symbols/index.js +14 -0
- package/node_modules/has-symbols/package.json +111 -0
- package/node_modules/has-symbols/shams.d.ts +3 -0
- package/node_modules/has-symbols/shams.js +45 -0
- package/node_modules/has-symbols/test/index.js +22 -0
- package/node_modules/has-symbols/test/shams/core-js.js +29 -0
- package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
- package/node_modules/has-symbols/test/tests.js +58 -0
- package/node_modules/has-symbols/tsconfig.json +10 -0
- package/node_modules/hasown/.github/FUNDING.yml +12 -0
- package/node_modules/hasown/.nycrc +13 -0
- package/node_modules/hasown/CHANGELOG.md +51 -0
- package/node_modules/hasown/LICENSE +21 -0
- package/node_modules/hasown/README.md +40 -0
- package/node_modules/hasown/eslint.config.mjs +6 -0
- package/node_modules/hasown/index.d.ts +4 -0
- package/node_modules/hasown/index.js +8 -0
- package/node_modules/hasown/package.json +92 -0
- package/node_modules/hasown/tsconfig.json +6 -0
- package/node_modules/http-errors/HISTORY.md +186 -0
- package/node_modules/http-errors/LICENSE +23 -0
- package/node_modules/http-errors/README.md +169 -0
- package/node_modules/http-errors/index.js +290 -0
- package/node_modules/http-errors/package.json +54 -0
- package/node_modules/inherits/LICENSE +16 -0
- package/node_modules/inherits/README.md +42 -0
- package/node_modules/inherits/inherits.js +9 -0
- package/node_modules/inherits/inherits_browser.js +27 -0
- package/node_modules/inherits/package.json +29 -0
- package/node_modules/ipaddr.js/LICENSE +19 -0
- package/node_modules/ipaddr.js/README.md +233 -0
- package/node_modules/ipaddr.js/ipaddr.min.js +1 -0
- package/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
- package/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
- package/node_modules/ipaddr.js/package.json +35 -0
- package/node_modules/is-docker/cli.js +5 -0
- package/node_modules/is-docker/index.d.ts +13 -0
- package/node_modules/is-docker/index.js +29 -0
- package/node_modules/is-docker/license +9 -0
- package/node_modules/is-docker/package.json +44 -0
- package/node_modules/is-docker/readme.md +27 -0
- package/node_modules/is-inside-container/cli.js +5 -0
- package/node_modules/is-inside-container/index.d.ts +13 -0
- package/node_modules/is-inside-container/index.js +23 -0
- package/node_modules/is-inside-container/license +9 -0
- package/node_modules/is-inside-container/package.json +51 -0
- package/node_modules/is-inside-container/readme.md +36 -0
- package/node_modules/is-wsl/index.d.ts +15 -0
- package/node_modules/is-wsl/index.js +36 -0
- package/node_modules/is-wsl/license +9 -0
- package/node_modules/is-wsl/package.json +58 -0
- package/node_modules/is-wsl/readme.md +21 -0
- package/node_modules/math-intrinsics/.eslintrc +16 -0
- package/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
- package/node_modules/math-intrinsics/CHANGELOG.md +24 -0
- package/node_modules/math-intrinsics/LICENSE +21 -0
- package/node_modules/math-intrinsics/README.md +50 -0
- package/node_modules/math-intrinsics/abs.d.ts +1 -0
- package/node_modules/math-intrinsics/abs.js +4 -0
- package/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
- package/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
- package/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
- package/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
- package/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
- package/node_modules/math-intrinsics/constants/maxValue.js +5 -0
- package/node_modules/math-intrinsics/floor.d.ts +1 -0
- package/node_modules/math-intrinsics/floor.js +4 -0
- package/node_modules/math-intrinsics/isFinite.d.ts +3 -0
- package/node_modules/math-intrinsics/isFinite.js +12 -0
- package/node_modules/math-intrinsics/isInteger.d.ts +3 -0
- package/node_modules/math-intrinsics/isInteger.js +16 -0
- package/node_modules/math-intrinsics/isNaN.d.ts +1 -0
- package/node_modules/math-intrinsics/isNaN.js +6 -0
- package/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
- package/node_modules/math-intrinsics/isNegativeZero.js +6 -0
- package/node_modules/math-intrinsics/max.d.ts +1 -0
- package/node_modules/math-intrinsics/max.js +4 -0
- package/node_modules/math-intrinsics/min.d.ts +1 -0
- package/node_modules/math-intrinsics/min.js +4 -0
- package/node_modules/math-intrinsics/mod.d.ts +3 -0
- package/node_modules/math-intrinsics/mod.js +9 -0
- package/node_modules/math-intrinsics/package.json +86 -0
- package/node_modules/math-intrinsics/pow.d.ts +1 -0
- package/node_modules/math-intrinsics/pow.js +4 -0
- package/node_modules/math-intrinsics/round.d.ts +1 -0
- package/node_modules/math-intrinsics/round.js +4 -0
- package/node_modules/math-intrinsics/sign.d.ts +3 -0
- package/node_modules/math-intrinsics/sign.js +11 -0
- package/node_modules/math-intrinsics/test/index.js +192 -0
- package/node_modules/math-intrinsics/tsconfig.json +3 -0
- package/node_modules/methods/HISTORY.md +29 -0
- package/node_modules/methods/LICENSE +24 -0
- package/node_modules/methods/README.md +51 -0
- package/node_modules/methods/index.js +69 -0
- package/node_modules/methods/package.json +36 -0
- package/node_modules/mime/.npmignore +0 -0
- package/node_modules/mime/CHANGELOG.md +164 -0
- package/node_modules/mime/LICENSE +21 -0
- package/node_modules/mime/README.md +90 -0
- package/node_modules/mime/cli.js +8 -0
- package/node_modules/mime/mime.js +108 -0
- package/node_modules/mime/package.json +44 -0
- package/node_modules/mime/src/build.js +53 -0
- package/node_modules/mime/src/test.js +60 -0
- package/node_modules/mime/types.json +1 -0
- package/node_modules/ms/index.js +162 -0
- package/node_modules/ms/license.md +21 -0
- package/node_modules/ms/package.json +38 -0
- package/node_modules/ms/readme.md +59 -0
- package/node_modules/object-inspect/.eslintrc +53 -0
- package/node_modules/object-inspect/.github/FUNDING.yml +12 -0
- package/node_modules/object-inspect/.nycrc +13 -0
- package/node_modules/object-inspect/CHANGELOG.md +424 -0
- package/node_modules/object-inspect/LICENSE +21 -0
- package/node_modules/object-inspect/example/all.js +23 -0
- package/node_modules/object-inspect/example/circular.js +6 -0
- package/node_modules/object-inspect/example/fn.js +5 -0
- package/node_modules/object-inspect/example/inspect.js +10 -0
- package/node_modules/object-inspect/index.js +544 -0
- package/node_modules/object-inspect/package-support.json +20 -0
- package/node_modules/object-inspect/package.json +105 -0
- package/node_modules/object-inspect/readme.markdown +84 -0
- package/node_modules/object-inspect/test/bigint.js +58 -0
- package/node_modules/object-inspect/test/browser/dom.js +15 -0
- package/node_modules/object-inspect/test/circular.js +16 -0
- package/node_modules/object-inspect/test/deep.js +12 -0
- package/node_modules/object-inspect/test/element.js +53 -0
- package/node_modules/object-inspect/test/err.js +48 -0
- package/node_modules/object-inspect/test/fakes.js +29 -0
- package/node_modules/object-inspect/test/fn.js +76 -0
- package/node_modules/object-inspect/test/global.js +17 -0
- package/node_modules/object-inspect/test/has.js +15 -0
- package/node_modules/object-inspect/test/holes.js +15 -0
- package/node_modules/object-inspect/test/indent-option.js +271 -0
- package/node_modules/object-inspect/test/inspect.js +139 -0
- package/node_modules/object-inspect/test/lowbyte.js +12 -0
- package/node_modules/object-inspect/test/number.js +58 -0
- package/node_modules/object-inspect/test/quoteStyle.js +26 -0
- package/node_modules/object-inspect/test/toStringTag.js +40 -0
- package/node_modules/object-inspect/test/undef.js +12 -0
- package/node_modules/object-inspect/test/values.js +261 -0
- package/node_modules/object-inspect/test-core-js.js +26 -0
- package/node_modules/object-inspect/util.inspect.js +1 -0
- package/node_modules/on-finished/HISTORY.md +98 -0
- package/node_modules/on-finished/LICENSE +23 -0
- package/node_modules/on-finished/README.md +162 -0
- package/node_modules/on-finished/index.js +234 -0
- package/node_modules/on-finished/package.json +39 -0
- package/node_modules/open/index.d.ts +158 -0
- package/node_modules/open/index.js +366 -0
- package/node_modules/open/license +9 -0
- package/node_modules/open/node_modules/wsl-utils/index.d.ts +21 -0
- package/node_modules/open/node_modules/wsl-utils/index.js +57 -0
- package/node_modules/open/node_modules/wsl-utils/license +9 -0
- package/node_modules/open/node_modules/wsl-utils/package.json +46 -0
- package/node_modules/open/node_modules/wsl-utils/readme.md +50 -0
- package/node_modules/open/package.json +68 -0
- package/node_modules/open/readme.md +183 -0
- package/node_modules/open/xdg-open +1267 -0
- package/node_modules/parseurl/HISTORY.md +58 -0
- package/node_modules/parseurl/LICENSE +24 -0
- package/node_modules/parseurl/README.md +133 -0
- package/node_modules/parseurl/index.js +158 -0
- package/node_modules/parseurl/package.json +40 -0
- package/node_modules/progrok/LICENSE +21 -0
- package/node_modules/progrok/README.md +53 -0
- package/node_modules/progrok/THIRD_PARTY_NOTICES.md +13 -0
- package/node_modules/progrok/dist/index.js +1142 -0
- package/node_modules/progrok/dist/index.js.map +1 -0
- package/node_modules/progrok/dist/public/app.js +529 -0
- package/node_modules/progrok/dist/public/index.html +47 -0
- package/node_modules/progrok/dist/public/style.css +392 -0
- package/node_modules/progrok/node_modules/accepts/HISTORY.md +243 -0
- package/node_modules/progrok/node_modules/accepts/LICENSE +23 -0
- package/node_modules/progrok/node_modules/accepts/README.md +140 -0
- package/node_modules/progrok/node_modules/accepts/index.js +238 -0
- package/node_modules/progrok/node_modules/accepts/package.json +47 -0
- package/node_modules/progrok/node_modules/body-parser/HISTORY.md +686 -0
- package/node_modules/progrok/node_modules/body-parser/LICENSE +23 -0
- package/node_modules/progrok/node_modules/body-parser/README.md +476 -0
- package/node_modules/progrok/node_modules/body-parser/index.js +156 -0
- package/node_modules/progrok/node_modules/body-parser/lib/read.js +205 -0
- package/node_modules/progrok/node_modules/body-parser/lib/types/json.js +243 -0
- package/node_modules/progrok/node_modules/body-parser/lib/types/raw.js +101 -0
- package/node_modules/progrok/node_modules/body-parser/lib/types/text.js +121 -0
- package/node_modules/progrok/node_modules/body-parser/lib/types/urlencoded.js +299 -0
- package/node_modules/progrok/node_modules/body-parser/package.json +55 -0
- package/node_modules/progrok/node_modules/content-disposition/HISTORY.md +60 -0
- package/node_modules/progrok/node_modules/content-disposition/LICENSE +22 -0
- package/node_modules/progrok/node_modules/content-disposition/README.md +142 -0
- package/node_modules/progrok/node_modules/content-disposition/index.js +458 -0
- package/node_modules/progrok/node_modules/content-disposition/package.json +44 -0
- package/node_modules/progrok/node_modules/cookie-signature/History.md +42 -0
- package/node_modules/progrok/node_modules/cookie-signature/Readme.md +42 -0
- package/node_modules/progrok/node_modules/cookie-signature/index.js +51 -0
- package/node_modules/progrok/node_modules/cookie-signature/package.json +18 -0
- package/node_modules/progrok/node_modules/debug/.coveralls.yml +1 -0
- package/node_modules/progrok/node_modules/debug/.eslintrc +11 -0
- package/node_modules/progrok/node_modules/debug/.npmignore +9 -0
- package/node_modules/progrok/node_modules/debug/.travis.yml +14 -0
- package/node_modules/progrok/node_modules/debug/CHANGELOG.md +362 -0
- package/node_modules/progrok/node_modules/debug/LICENSE +19 -0
- package/node_modules/progrok/node_modules/debug/Makefile +50 -0
- package/node_modules/progrok/node_modules/debug/README.md +312 -0
- package/node_modules/progrok/node_modules/debug/component.json +19 -0
- package/node_modules/progrok/node_modules/debug/karma.conf.js +70 -0
- package/node_modules/progrok/node_modules/debug/node.js +1 -0
- package/node_modules/progrok/node_modules/debug/node_modules/ms/index.js +152 -0
- package/node_modules/progrok/node_modules/debug/node_modules/ms/license.md +21 -0
- package/node_modules/progrok/node_modules/debug/node_modules/ms/package.json +37 -0
- package/node_modules/progrok/node_modules/debug/node_modules/ms/readme.md +51 -0
- package/node_modules/progrok/node_modules/debug/package.json +49 -0
- package/node_modules/progrok/node_modules/debug/src/browser.js +185 -0
- package/node_modules/progrok/node_modules/debug/src/debug.js +202 -0
- package/node_modules/progrok/node_modules/debug/src/index.js +10 -0
- package/node_modules/progrok/node_modules/debug/src/inspector-log.js +15 -0
- package/node_modules/progrok/node_modules/debug/src/node.js +248 -0
- package/node_modules/progrok/node_modules/express/History.md +3676 -0
- package/node_modules/progrok/node_modules/express/LICENSE +24 -0
- package/node_modules/progrok/node_modules/express/Readme.md +260 -0
- package/node_modules/progrok/node_modules/express/index.js +11 -0
- package/node_modules/progrok/node_modules/express/lib/application.js +661 -0
- package/node_modules/progrok/node_modules/express/lib/express.js +116 -0
- package/node_modules/progrok/node_modules/express/lib/middleware/init.js +43 -0
- package/node_modules/progrok/node_modules/express/lib/middleware/query.js +47 -0
- package/node_modules/progrok/node_modules/express/lib/request.js +525 -0
- package/node_modules/progrok/node_modules/express/lib/response.js +1179 -0
- package/node_modules/progrok/node_modules/express/lib/router/index.js +673 -0
- package/node_modules/progrok/node_modules/express/lib/router/layer.js +181 -0
- package/node_modules/progrok/node_modules/express/lib/router/route.js +230 -0
- package/node_modules/progrok/node_modules/express/lib/utils.js +304 -0
- package/node_modules/progrok/node_modules/express/lib/view.js +182 -0
- package/node_modules/progrok/node_modules/express/package.json +102 -0
- package/node_modules/progrok/node_modules/finalhandler/HISTORY.md +216 -0
- package/node_modules/progrok/node_modules/finalhandler/LICENSE +22 -0
- package/node_modules/progrok/node_modules/finalhandler/README.md +147 -0
- package/node_modules/progrok/node_modules/finalhandler/SECURITY.md +25 -0
- package/node_modules/progrok/node_modules/finalhandler/index.js +341 -0
- package/node_modules/progrok/node_modules/finalhandler/package.json +47 -0
- package/node_modules/progrok/node_modules/fresh/HISTORY.md +70 -0
- package/node_modules/progrok/node_modules/fresh/LICENSE +23 -0
- package/node_modules/progrok/node_modules/fresh/README.md +119 -0
- package/node_modules/progrok/node_modules/fresh/index.js +137 -0
- package/node_modules/progrok/node_modules/fresh/package.json +46 -0
- package/node_modules/progrok/node_modules/iconv-lite/Changelog.md +162 -0
- package/node_modules/progrok/node_modules/iconv-lite/LICENSE +21 -0
- package/node_modules/progrok/node_modules/iconv-lite/README.md +156 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/index.js +22 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/internal.js +188 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/utf16.js +177 -0
- package/node_modules/progrok/node_modules/iconv-lite/encodings/utf7.js +290 -0
- package/node_modules/progrok/node_modules/iconv-lite/lib/bom-handling.js +52 -0
- package/node_modules/progrok/node_modules/iconv-lite/lib/extend-node.js +217 -0
- package/node_modules/progrok/node_modules/iconv-lite/lib/index.d.ts +24 -0
- package/node_modules/progrok/node_modules/iconv-lite/lib/index.js +153 -0
- package/node_modules/progrok/node_modules/iconv-lite/lib/streams.js +121 -0
- package/node_modules/progrok/node_modules/iconv-lite/package.json +46 -0
- package/node_modules/progrok/node_modules/media-typer/HISTORY.md +22 -0
- package/node_modules/progrok/node_modules/media-typer/LICENSE +22 -0
- package/node_modules/progrok/node_modules/media-typer/README.md +81 -0
- package/node_modules/progrok/node_modules/media-typer/index.js +270 -0
- package/node_modules/progrok/node_modules/media-typer/package.json +26 -0
- package/node_modules/progrok/node_modules/merge-descriptors/HISTORY.md +21 -0
- package/node_modules/progrok/node_modules/merge-descriptors/LICENSE +23 -0
- package/node_modules/progrok/node_modules/merge-descriptors/README.md +49 -0
- package/node_modules/progrok/node_modules/merge-descriptors/index.js +60 -0
- package/node_modules/progrok/node_modules/merge-descriptors/package.json +39 -0
- package/node_modules/progrok/node_modules/mime-db/HISTORY.md +507 -0
- package/node_modules/progrok/node_modules/mime-db/LICENSE +23 -0
- package/node_modules/progrok/node_modules/mime-db/README.md +100 -0
- package/node_modules/progrok/node_modules/mime-db/db.json +8519 -0
- package/node_modules/progrok/node_modules/mime-db/index.js +12 -0
- package/node_modules/progrok/node_modules/mime-db/package.json +60 -0
- package/node_modules/progrok/node_modules/mime-types/HISTORY.md +397 -0
- package/node_modules/progrok/node_modules/mime-types/LICENSE +23 -0
- package/node_modules/progrok/node_modules/mime-types/README.md +113 -0
- package/node_modules/progrok/node_modules/mime-types/index.js +188 -0
- package/node_modules/progrok/node_modules/mime-types/package.json +44 -0
- package/node_modules/progrok/node_modules/negotiator/HISTORY.md +108 -0
- package/node_modules/progrok/node_modules/negotiator/LICENSE +24 -0
- package/node_modules/progrok/node_modules/negotiator/README.md +203 -0
- package/node_modules/progrok/node_modules/negotiator/index.js +82 -0
- package/node_modules/progrok/node_modules/negotiator/lib/charset.js +169 -0
- package/node_modules/progrok/node_modules/negotiator/lib/encoding.js +184 -0
- package/node_modules/progrok/node_modules/negotiator/lib/language.js +179 -0
- package/node_modules/progrok/node_modules/negotiator/lib/mediaType.js +294 -0
- package/node_modules/progrok/node_modules/negotiator/package.json +42 -0
- package/node_modules/progrok/node_modules/path-to-regexp/LICENSE +21 -0
- package/node_modules/progrok/node_modules/path-to-regexp/Readme.md +35 -0
- package/node_modules/progrok/node_modules/path-to-regexp/index.js +158 -0
- package/node_modules/progrok/node_modules/path-to-regexp/package.json +30 -0
- package/node_modules/progrok/node_modules/raw-body/LICENSE +22 -0
- package/node_modules/progrok/node_modules/raw-body/README.md +223 -0
- package/node_modules/progrok/node_modules/raw-body/index.d.ts +87 -0
- package/node_modules/progrok/node_modules/raw-body/index.js +336 -0
- package/node_modules/progrok/node_modules/raw-body/package.json +47 -0
- package/node_modules/progrok/node_modules/send/HISTORY.md +538 -0
- package/node_modules/progrok/node_modules/send/LICENSE +23 -0
- package/node_modules/progrok/node_modules/send/README.md +327 -0
- package/node_modules/progrok/node_modules/send/SECURITY.md +24 -0
- package/node_modules/progrok/node_modules/send/index.js +1142 -0
- package/node_modules/progrok/node_modules/send/package.json +62 -0
- package/node_modules/progrok/node_modules/serve-static/HISTORY.md +493 -0
- package/node_modules/progrok/node_modules/serve-static/LICENSE +25 -0
- package/node_modules/progrok/node_modules/serve-static/README.md +257 -0
- package/node_modules/progrok/node_modules/serve-static/index.js +209 -0
- package/node_modules/progrok/node_modules/serve-static/package.json +42 -0
- package/node_modules/progrok/node_modules/type-is/HISTORY.md +259 -0
- package/node_modules/progrok/node_modules/type-is/LICENSE +23 -0
- package/node_modules/progrok/node_modules/type-is/README.md +170 -0
- package/node_modules/progrok/node_modules/type-is/index.js +266 -0
- package/node_modules/progrok/node_modules/type-is/package.json +45 -0
- package/node_modules/progrok/package.json +52 -0
- package/node_modules/progrok/skills/progrok/SKILL.md +228 -0
- package/node_modules/proxy-addr/HISTORY.md +161 -0
- package/node_modules/proxy-addr/LICENSE +22 -0
- package/node_modules/proxy-addr/README.md +139 -0
- package/node_modules/proxy-addr/index.js +327 -0
- package/node_modules/proxy-addr/package.json +47 -0
- package/node_modules/qs/.editorconfig +46 -0
- package/node_modules/qs/.github/FUNDING.yml +12 -0
- package/node_modules/qs/.github/SECURITY.md +11 -0
- package/node_modules/qs/.github/THREAT_MODEL.md +78 -0
- package/node_modules/qs/.nycrc +13 -0
- package/node_modules/qs/CHANGELOG.md +812 -0
- package/node_modules/qs/LICENSE.md +29 -0
- package/node_modules/qs/README.md +758 -0
- package/node_modules/qs/dist/qs.js +141 -0
- package/node_modules/qs/eslint.config.mjs +56 -0
- package/node_modules/qs/lib/formats.js +23 -0
- package/node_modules/qs/lib/index.js +11 -0
- package/node_modules/qs/lib/parse.js +373 -0
- package/node_modules/qs/lib/stringify.js +356 -0
- package/node_modules/qs/lib/utils.js +342 -0
- package/node_modules/qs/package.json +94 -0
- package/node_modules/qs/test/empty-keys-cases.js +267 -0
- package/node_modules/qs/test/parse.js +1654 -0
- package/node_modules/qs/test/stringify.js +1319 -0
- package/node_modules/qs/test/utils.js +432 -0
- package/node_modules/range-parser/HISTORY.md +56 -0
- package/node_modules/range-parser/LICENSE +23 -0
- package/node_modules/range-parser/README.md +84 -0
- package/node_modules/range-parser/index.js +162 -0
- package/node_modules/range-parser/package.json +44 -0
- package/node_modules/run-applescript/index.d.ts +66 -0
- package/node_modules/run-applescript/index.js +37 -0
- package/node_modules/run-applescript/license +9 -0
- package/node_modules/run-applescript/package.json +42 -0
- package/node_modules/run-applescript/readme.md +78 -0
- package/node_modules/safe-buffer/LICENSE +21 -0
- package/node_modules/safe-buffer/README.md +584 -0
- package/node_modules/safe-buffer/index.d.ts +187 -0
- package/node_modules/safe-buffer/index.js +65 -0
- package/node_modules/safe-buffer/package.json +51 -0
- package/node_modules/safer-buffer/LICENSE +21 -0
- package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- package/node_modules/safer-buffer/Readme.md +156 -0
- package/node_modules/safer-buffer/dangerous.js +58 -0
- package/node_modules/safer-buffer/package.json +34 -0
- package/node_modules/safer-buffer/safer.js +77 -0
- package/node_modules/safer-buffer/tests.js +406 -0
- package/node_modules/setprototypeof/LICENSE +13 -0
- package/node_modules/setprototypeof/README.md +31 -0
- package/node_modules/setprototypeof/index.d.ts +2 -0
- package/node_modules/setprototypeof/index.js +17 -0
- package/node_modules/setprototypeof/package.json +38 -0
- package/node_modules/setprototypeof/test/index.js +24 -0
- package/node_modules/side-channel/.editorconfig +9 -0
- package/node_modules/side-channel/.eslintrc +12 -0
- package/node_modules/side-channel/.github/FUNDING.yml +12 -0
- package/node_modules/side-channel/.nycrc +13 -0
- package/node_modules/side-channel/CHANGELOG.md +110 -0
- package/node_modules/side-channel/LICENSE +21 -0
- package/node_modules/side-channel/README.md +61 -0
- package/node_modules/side-channel/index.d.ts +14 -0
- package/node_modules/side-channel/index.js +43 -0
- package/node_modules/side-channel/package.json +85 -0
- package/node_modules/side-channel/test/index.js +104 -0
- package/node_modules/side-channel/tsconfig.json +9 -0
- package/node_modules/side-channel-list/.editorconfig +9 -0
- package/node_modules/side-channel-list/.eslintrc +11 -0
- package/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
- package/node_modules/side-channel-list/.nycrc +13 -0
- package/node_modules/side-channel-list/CHANGELOG.md +36 -0
- package/node_modules/side-channel-list/LICENSE +21 -0
- package/node_modules/side-channel-list/README.md +62 -0
- package/node_modules/side-channel-list/index.d.ts +13 -0
- package/node_modules/side-channel-list/index.js +111 -0
- package/node_modules/side-channel-list/list.d.ts +14 -0
- package/node_modules/side-channel-list/package.json +77 -0
- package/node_modules/side-channel-list/test/index.js +154 -0
- package/node_modules/side-channel-list/tsconfig.json +9 -0
- package/node_modules/side-channel-map/.editorconfig +9 -0
- package/node_modules/side-channel-map/.eslintrc +11 -0
- package/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
- package/node_modules/side-channel-map/.nycrc +13 -0
- package/node_modules/side-channel-map/CHANGELOG.md +22 -0
- package/node_modules/side-channel-map/LICENSE +21 -0
- package/node_modules/side-channel-map/README.md +62 -0
- package/node_modules/side-channel-map/index.d.ts +15 -0
- package/node_modules/side-channel-map/index.js +68 -0
- package/node_modules/side-channel-map/package.json +80 -0
- package/node_modules/side-channel-map/test/index.js +114 -0
- package/node_modules/side-channel-map/tsconfig.json +9 -0
- package/node_modules/side-channel-weakmap/.editorconfig +9 -0
- package/node_modules/side-channel-weakmap/.eslintrc +12 -0
- package/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
- package/node_modules/side-channel-weakmap/.nycrc +13 -0
- package/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
- package/node_modules/side-channel-weakmap/LICENSE +21 -0
- package/node_modules/side-channel-weakmap/README.md +62 -0
- package/node_modules/side-channel-weakmap/index.d.ts +15 -0
- package/node_modules/side-channel-weakmap/index.js +84 -0
- package/node_modules/side-channel-weakmap/package.json +87 -0
- package/node_modules/side-channel-weakmap/test/index.js +114 -0
- package/node_modules/side-channel-weakmap/tsconfig.json +9 -0
- package/node_modules/statuses/HISTORY.md +87 -0
- package/node_modules/statuses/LICENSE +23 -0
- package/node_modules/statuses/README.md +139 -0
- package/node_modules/statuses/codes.json +65 -0
- package/node_modules/statuses/index.js +146 -0
- package/node_modules/statuses/package.json +49 -0
- package/node_modules/toidentifier/HISTORY.md +9 -0
- package/node_modules/toidentifier/LICENSE +21 -0
- package/node_modules/toidentifier/README.md +61 -0
- package/node_modules/toidentifier/index.js +32 -0
- package/node_modules/toidentifier/package.json +38 -0
- package/node_modules/unpipe/HISTORY.md +4 -0
- package/node_modules/unpipe/LICENSE +22 -0
- package/node_modules/unpipe/README.md +43 -0
- package/node_modules/unpipe/index.js +69 -0
- package/node_modules/unpipe/package.json +27 -0
- package/node_modules/utils-merge/.npmignore +9 -0
- package/node_modules/utils-merge/LICENSE +20 -0
- package/node_modules/utils-merge/README.md +34 -0
- package/node_modules/utils-merge/index.js +23 -0
- package/node_modules/utils-merge/package.json +40 -0
- package/node_modules/vary/HISTORY.md +39 -0
- package/node_modules/vary/LICENSE +22 -0
- package/node_modules/vary/README.md +101 -0
- package/node_modules/vary/index.js +149 -0
- package/node_modules/vary/package.json +43 -0
- package/package.json +7 -2
- package/routes/edit.js +85 -13
- package/routes/edit.ts +94 -23
- package/routes/generate.js +118 -11
- package/routes/generate.ts +127 -10
- package/routes/grok.js +22 -0
- package/routes/grok.ts +24 -0
- package/routes/health.js +5 -0
- package/routes/health.ts +5 -0
- package/routes/index.js +4 -0
- package/routes/index.ts +4 -0
- package/routes/multimode.js +71 -26
- package/routes/multimode.ts +80 -39
- package/routes/nodes.js +88 -33
- package/routes/nodes.ts +97 -42
- package/routes/video.js +197 -0
- package/routes/video.ts +216 -0
- package/server.js +42 -1
- package/server.ts +34 -1
- package/skills/ima2/SKILL.md +27 -0
- package/ui/dist/.vite/manifest.json +12 -12
- package/ui/dist/assets/AgentWorkspace-c1_kEfFN.js +3 -0
- package/ui/dist/assets/{CardNewsWorkspace-BBLdwzYU.js → CardNewsWorkspace-CTBT3MbP.js} +2 -2
- package/ui/dist/assets/NodeCanvas-D3ecSAEi.js +7 -0
- package/ui/dist/assets/{PromptBuilderPanel-Y2VygFc0.js → PromptBuilderPanel-CqepukCN.js} +2 -2
- package/ui/dist/assets/{PromptImportDialog-C6lFV-LL.js → PromptImportDialog-Bvr8Q8P2.js} +2 -2
- package/ui/dist/assets/{PromptImportDiscoverySection-D8YJFhND.js → PromptImportDiscoverySection-CyZEXyWP.js} +1 -1
- package/ui/dist/assets/{PromptImportFolderSection-ywfcQolW.js → PromptImportFolderSection-CIl-_pyV.js} +1 -1
- package/ui/dist/assets/{PromptLibraryPanel-fk4KmrGy.js → PromptLibraryPanel-Bj23Q6l9.js} +2 -2
- package/ui/dist/assets/SettingsWorkspace-D_GqtEsP.js +1 -0
- package/ui/dist/assets/index-DMjgFXdO.css +1 -0
- package/ui/dist/assets/index-DQ6jg4Ui.js +32 -0
- package/ui/dist/assets/index-DtSBvfgp.js +1 -0
- package/ui/dist/index.html +2 -2
- package/vendor/progrok-0.1.0.tgz +0 -0
- package/ui/dist/assets/AgentWorkspace-BJe9yxPA.js +0 -3
- package/ui/dist/assets/NodeCanvas-BSZ527J4.js +0 -7
- package/ui/dist/assets/SettingsWorkspace-DL5vhAHQ.js +0 -1
- package/ui/dist/assets/index-BLx55BOg.js +0 -1
- package/ui/dist/assets/index-ByViUJfx.css +0 -1
- package/ui/dist/assets/index-Ci36vcFD.js +0 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as c,j as o,u as ke,f as an,t as rn,v as on,w as sn,x as St,y as me,z as ln,A as Bt,B as cn,b as j,C as un,c as dn,E as hn,F as fn,M as pn}from"./index-DQ6jg4Ui.js";const Ae=2,Oe=1e-6;function mn({paths:e,points:t,radius:n,makeId:a=()=>crypto.randomUUID()}){if(e.length===0||t.length===0||n<=0)return{paths:e,changed:!1};let r=!1;const l=[];for(const s of e){const d=vn(s,t,n,a);(d.length!==1||d[0]!==s)&&(r=!0),l.push(...d)}return{paths:l,changed:r}}function vn(e,t,n,a=()=>crypto.randomUUID()){if(e.points.length<Ae||t.length===0||n<=0)return[e];const r=[];let l=Te(e.points[0],t,n)?[]:[e.points[0]];for(let d=1;d<e.points.length;d+=1){const u=e.points[d-1],i=e.points[d],b=Te(i,t,n),f=bn(u,i,t,n);if(f){l.length===0&&!Te(u,t,n)&&(l=[u]),l.length>0&&f.leftT>Oe&&ft(l,Pe(u,i,f.leftT)),l.length>=Ae&&r.push(l),l=[],f.rightT<1-Oe&&!b&&(l=[Pe(u,i,f.rightT),i]);continue}if(b){l.length>=Ae&&r.push(l),l=[];continue}l.length===0&&!Te(u,t,n)&&(l=[u]),ft(l,i)}if(l.length>=Ae&&r.push(l),r.length===0)return[];if(r.length===1&&r[0].length===e.points.length)return[e];const s=e.tool==="arrow"?r.length-1:-1;return r.map((d,u)=>({...e,id:u===0?e.id:a(),tool:e.tool==="arrow"&&u!==s?"pen":e.tool,points:d}))}function Te(e,t,n){if(t.length===1)return ye(e,t[0])<=n;for(let a=1;a<t.length;a+=1)if(gn(e,t[a-1],t[a])<=n)return!0;return!1}function ye(e,t){const n=e.x-t.x,a=e.y-t.y;return Math.sqrt(n*n+a*a)}function bn(e,t,n,a){const r=ye(e,t);if(r<=Oe)return Te(e,n,a)?{leftT:0,rightT:1}:null;let l=null,s=Number.POSITIVE_INFINITY;for(const u of n){const i=ht(u,e,t),b=Pe(e,t,i),f=ye(u,b);f<s&&(s=f,l=i)}for(let u=1;u<n.length;u+=1){const i=[0,.25,.5,.75,1];for(const b of i){const f=Pe(n[u-1],n[u],b),_=ht(f,e,t),B=Pe(e,t,_),A=ye(f,B);A<s&&(s=A,l=_)}}if(l===null||s>a)return null;const d=Math.max(a/r,.01);return{leftT:Math.max(0,l-d),rightT:Math.min(1,l+d)}}function ht(e,t,n){const a=n.x-t.x,r=n.y-t.y,l=e.x-t.x,s=e.y-t.y,d=a*a+r*r;return d===0?0:Math.max(0,Math.min(1,(l*a+s*r)/d))}function Pe(e,t,n){return{x:e.x+(t.x-e.x)*n,y:e.y+(t.y-e.y)*n}}function ft(e,t){const n=e.at(-1);(!n||ye(n,t)>Oe)&&e.push(t)}function gn(e,t,n){const a=n.x-t.x,r=n.y-t.y,l=e.x-t.x,s=e.y-t.y,d=a*a+r*r;if(d===0)return ye(e,t);const u=Math.max(0,Math.min(1,(l*a+s*r)/d));return ye(e,{x:t.x+u*a,y:t.y+u*r})}function st(e,t){return`${e}:${t}`}function lt(e){const t=e.indexOf(":");if(t<=0)return null;const n=e.slice(0,t),a=e.slice(t+1);return!a||n!=="path"&&n!=="box"&&n!=="memo"?null:{kind:n,id:a}}function jt(e){return st("path",e.id)}function Tt(e){return st("box",e.id)}function Pt(e){return st("memo",e.id)}function pe(e,t,n){const a=lt(e);return a?.kind===t&&a.id===n}const Dt="ima2.canvas.annotationStyle.v1",At=["#ef4444","#f97316","#eab308","#22c55e","#38bdf8","#6366f1","#a855f7","#111827","#ffffff"],It=[2,3,5,8],Se={color:"#ef4444",strokeWidth:3};function xn(){if(typeof window>"u")return Se;try{const e=window.localStorage.getItem(Dt);if(!e)return Se;const t=JSON.parse(e),n=typeof t.color=="string"&&At.includes(t.color)?t.color:Se.color,a=typeof t.strokeWidth=="number"&&It.includes(t.strokeWidth)?t.strokeWidth:Se.strokeWidth;return{color:n,strokeWidth:a}}catch{return Se}}function yn(e){if(!(typeof window>"u"))try{window.localStorage.setItem(Dt,JSON.stringify(e))}catch{}}const pt=xn(),tt={activeTool:"select",toolColor:pt.color,strokeWidth:pt.strokeWidth,paths:[],boxes:[],memos:[],activeMemoId:null,activePath:null,activeBox:null,eraserMode:"object",activeEraserStroke:null,eraserBaseline:null,selectionBox:null,selectedIds:[],past:[],future:[],memoBaseline:null,moveBaseline:null,isDirty:!1};function xe(e){return{paths:e.paths,boxes:e.boxes,memos:e.memos}}function ge(e){return{...e,past:[...e.past.slice(-49),xe(e)],future:[]}}function Ge(e,t){return{...e,past:[...e.past.slice(-49),t],future:[]}}function kn(e,t){return JSON.stringify(e)===JSON.stringify(t)}function mt(e,t){return{...e,...t,activeMemoId:null,activePath:null,activeBox:null,selectionBox:null,selectedIds:[],isDirty:!0}}function Cn(e,t,n){const{start:a,current:r}=e,l=Math.min(a.x,r.x),s=Math.min(a.y,r.y),d=Math.abs(r.x-a.x),u=Math.abs(r.y-a.y);return d<.01||u<.01?null:{id:crypto.randomUUID(),x:l,y:s,width:d,height:u,color:t,strokeWidth:n}}function wn(e,t){return{...e,x:Math.min(1-e.width,Math.max(0,e.x+t.x)),y:Math.min(1-e.height,Math.max(0,e.y+t.y))}}function Ze(e,t){return{x:Math.min(1,Math.max(0,e.x+t.x)),y:Math.min(1,Math.max(0,e.y+t.y))}}function _n(e,t){switch(t.type){case"SET_TOOL":return{...e,activeTool:t.tool};case"SET_ERASER_MODE":return{...e,eraserMode:t.mode};case"SET_STYLE":return{...e,toolColor:t.style.color,strokeWidth:t.style.strokeWidth};case"START_PATH":return{...e,isDirty:!0,activePath:{id:crypto.randomUUID(),tool:e.activeTool,points:[t.point],color:e.toolColor,strokeWidth:e.strokeWidth}};case"ADD_POINT":return e.activePath?{...e,activePath:{...e.activePath,points:[...e.activePath.points,t.point]}}:e;case"END_PATH":return!e.activePath||e.activePath.points.length<2?{...e,activePath:null}:{...ge(e),isDirty:!0,paths:[...e.paths,e.activePath],activePath:null};case"START_BOX":return{...e,isDirty:!0,activeBox:{start:t.point,current:t.point}};case"UPDATE_BOX":return e.activeBox?{...e,activeBox:{...e.activeBox,current:t.point}}:e;case"END_BOX":{if(!e.activeBox)return e;const n=Cn(e.activeBox,e.toolColor,e.strokeWidth);return n?{...ge(e),isDirty:!0,boxes:[...e.boxes,n],activeBox:null}:{...e,activeBox:null}}case"CREATE_MEMO":{const n=crypto.randomUUID(),a={id:n,x:t.point.x,y:t.point.y,text:"",color:e.toolColor};return{...ge(e),isDirty:!0,memos:[...e.memos,a],activeMemoId:n}}case"UPDATE_MEMO":return{...e,isDirty:!0,memos:e.memos.map(n=>n.id===t.id?{...n,text:t.text}:n)};case"COMMIT_MEMO_EDIT":return e.memoBaseline?kn(e.memoBaseline,xe(e))?{...e,memoBaseline:null,activeMemoId:null}:{...Ge(e,e.memoBaseline),memoBaseline:null,activeMemoId:null,isDirty:!0}:{...e,activeMemoId:null};case"DELETE_MEMO":return{...ge(e),isDirty:!0,memos:e.memos.filter(n=>n.id!==t.id),activeMemoId:e.activeMemoId===t.id?null:e.activeMemoId,selectedIds:e.selectedIds.filter(n=>!pe(n,"memo",t.id))};case"FOCUS_MEMO":return{...e,activeMemoId:t.id,memoBaseline:t.id&&e.activeMemoId!==t.id&&!e.memoBaseline?xe(e):e.memoBaseline};case"CLEAR":return{...ge(e),isDirty:!0,paths:[],boxes:[],memos:[],activeMemoId:null,activePath:null,activeBox:null,selectionBox:null,selectedIds:[]};case"LOAD":return{...tt,activeTool:e.activeTool,eraserMode:e.eraserMode,toolColor:e.toolColor,strokeWidth:e.strokeWidth,...t.payload};case"MARK_SAVED":return{...e,isDirty:!1};case"RESET_LOCAL":return{...tt,activeTool:e.activeTool,eraserMode:e.eraserMode,toolColor:e.toolColor,strokeWidth:e.strokeWidth};case"UNDO":{const n=e.past.at(-1);return n?{...mt(e,n),past:e.past.slice(0,-1),future:[xe(e),...e.future]}:e}case"REDO":{const n=e.future[0];return n?{...mt(e,n),past:[...e.past.slice(-49),xe(e)],future:e.future.slice(1)}:e}case"SELECT_ONE":return{...e,selectedIds:[t.id],selectionBox:null};case"TOGGLE_SELECTED":return{...e,selectedIds:e.selectedIds.includes(t.id)?e.selectedIds.filter(n=>n!==t.id):[...e.selectedIds,t.id],selectionBox:null};case"CLEAR_SELECTION":return{...e,selectedIds:[],selectionBox:null};case"DELETE_SELECTED":return e.selectedIds.length===0?e:{...ge(e),isDirty:!0,paths:e.paths.filter(n=>!e.selectedIds.some(a=>pe(a,"path",n.id))),boxes:e.boxes.filter(n=>!e.selectedIds.some(a=>pe(a,"box",n.id))),memos:e.memos.filter(n=>!e.selectedIds.some(a=>pe(a,"memo",n.id))),selectedIds:[]};case"MOVE_SELECTED":return e.selectedIds.length===0?e:{...e,isDirty:!0,paths:e.paths.map(n=>e.selectedIds.some(a=>pe(a,"path",n.id))?{...n,points:n.points.map(a=>Ze(a,t.delta))}:n),boxes:e.boxes.map(n=>e.selectedIds.some(a=>pe(a,"box",n.id))?wn(n,t.delta):n),memos:e.memos.map(n=>e.selectedIds.some(a=>pe(a,"memo",n.id))?{...n,x:Ze(n,t.delta).x,y:Ze(n,t.delta).y}:n)};case"START_SELECTED_MOVE":return{...e,moveBaseline:xe(e)};case"COMMIT_SELECTED_MOVE":return e.moveBaseline?{...Ge(e,e.moveBaseline),moveBaseline:null,isDirty:!0}:e;case"START_SELECTION_BOX":return{...e,selectionBox:{start:t.point,current:t.point},selectedIds:[]};case"UPDATE_SELECTION_BOX":return e.selectionBox?{...e,selectionBox:{...e.selectionBox,current:t.point}}:e;case"END_SELECTION_BOX":return{...e,selectionBox:null,selectedIds:t.ids};case"ERASE_OBJECT":{const n=lt(t.id);return!n||!(n.kind==="path"?e.paths.some(r=>r.id===n.id):n.kind==="box"?e.boxes.some(r=>r.id===n.id):e.memos.some(r=>r.id===n.id))?e:{...ge(e),isDirty:!0,paths:n.kind==="path"?e.paths.filter(r=>r.id!==n.id):e.paths,boxes:n.kind==="box"?e.boxes.filter(r=>r.id!==n.id):e.boxes,memos:n.kind==="memo"?e.memos.filter(r=>r.id!==n.id):e.memos,selectedIds:e.selectedIds.filter(r=>r!==t.id)}}case"START_ERASER_STROKE":return{...e,activeEraserStroke:{points:[t.point],radius:.018},eraserBaseline:xe(e)};case"UPDATE_ERASER_STROKE":return e.activeEraserStroke?{...e,activeEraserStroke:{...e.activeEraserStroke,points:[...e.activeEraserStroke.points,t.point]}}:e;case"END_ERASER_STROKE":{if(!e.activeEraserStroke||!e.eraserBaseline)return{...e,activeEraserStroke:null,eraserBaseline:null};const n=mn({paths:e.paths,points:e.activeEraserStroke.points,radius:e.activeEraserStroke.radius});return n.changed?{...Ge(e,e.eraserBaseline),paths:n.paths,activeEraserStroke:null,eraserBaseline:null,selectedIds:[],isDirty:!0}:{...e,activeEraserStroke:null,eraserBaseline:null}}default:return e}}function Mn(){const[e,t]=c.useReducer(_n,tt),n=c.useMemo(()=>e.paths.length>0||e.boxes.length>0||e.memos.length>0,[e.paths.length,e.boxes.length,e.memos.length]),a=e.past.length>0,r=e.future.length>0,l=c.useCallback(g=>t({type:"SET_TOOL",tool:g}),[]),s=c.useCallback(g=>{yn(g),t({type:"SET_STYLE",style:g})},[]),d=c.useCallback(()=>t({type:"CLEAR"}),[]),u=c.useCallback(g=>t({type:"LOAD",payload:g}),[]),i=c.useCallback(()=>t({type:"MARK_SAVED"}),[]),b=c.useCallback(()=>t({type:"RESET_LOCAL"}),[]),f=c.useCallback(()=>t({type:"UNDO"}),[]),_=c.useCallback(()=>t({type:"REDO"}),[]),B=c.useCallback(()=>t({type:"COMMIT_MEMO_EDIT"}),[]),A=c.useCallback(()=>t({type:"START_SELECTED_MOVE"}),[]),O=c.useCallback(()=>t({type:"COMMIT_SELECTED_MOVE"}),[]),T=c.useCallback(g=>{e.activeTool==="pen"||e.activeTool==="arrow"?t({type:"START_PATH",point:g}):e.activeTool==="box"&&t({type:"START_BOX",point:g})},[e.activeTool]),N=c.useCallback(g=>{e.activePath?t({type:"ADD_POINT",point:g}):e.activeBox&&t({type:"UPDATE_BOX",point:g})},[e.activePath,e.activeBox]),p=c.useCallback(()=>{e.activePath?t({type:"END_PATH"}):e.activeBox&&t({type:"END_BOX"})},[e.activePath,e.activeBox]),C=c.useCallback(g=>t({type:"CREATE_MEMO",point:g}),[]),M=c.useCallback((g,D)=>t({type:"UPDATE_MEMO",id:g,text:D}),[]),y=c.useCallback(g=>t({type:"DELETE_MEMO",id:g}),[]),v=c.useCallback(g=>t({type:"FOCUS_MEMO",id:g}),[]),X=c.useCallback(g=>t({type:"SET_ERASER_MODE",mode:g}),[]),R=c.useCallback(g=>t({type:"SELECT_ONE",id:g}),[]),$=c.useCallback(g=>t({type:"TOGGLE_SELECTED",id:g}),[]),x=c.useCallback(()=>t({type:"CLEAR_SELECTION"}),[]),E=c.useCallback(()=>t({type:"DELETE_SELECTED"}),[]),S=c.useCallback(g=>t({type:"MOVE_SELECTED",delta:g}),[]),P=c.useCallback(g=>t({type:"START_SELECTION_BOX",point:g}),[]),Y=c.useCallback(g=>t({type:"UPDATE_SELECTION_BOX",point:g}),[]),ne=c.useCallback(g=>t({type:"END_SELECTION_BOX",ids:g}),[]),ae=c.useCallback(g=>t({type:"ERASE_OBJECT",id:g}),[]),re=c.useCallback(g=>t({type:"START_ERASER_STROKE",point:g}),[]),le=c.useCallback(g=>t({type:"UPDATE_ERASER_STROKE",point:g}),[]),I=c.useCallback(()=>t({type:"END_ERASER_STROKE"}),[]),F=c.useCallback(()=>({paths:e.paths,boxes:e.boxes,memos:e.memos}),[e.paths,e.boxes,e.memos]);return{...e,canUndo:a,canRedo:r,hasAnnotations:n,setTool:l,setStyle:s,setEraserMode:X,startDrawing:T,moveDrawing:N,endDrawing:p,createMemo:C,updateMemo:M,commitMemoEdit:B,deleteMemo:y,focusMemo:v,clear:d,load:u,toPayload:F,markSaved:i,resetLocal:b,undo:f,redo:_,selectOne:R,toggleSelected:$,clearSelection:x,deleteSelected:E,moveSelected:S,startSelectedMove:A,commitSelectedMove:O,startSelectionBox:P,updateSelectionBox:Y,endSelectionBox:ne,eraseObjectAtPoint:ae,startEraserStroke:re,updateEraserStroke:le,endEraserStroke:I}}function Ie(e,t){return{x:e.x*t.width,y:e.y*t.height}}function nt(e,t,n){if(t.points.length<2)return;const a=Ie(t.points[0],n);e.save(),e.beginPath(),e.strokeStyle=t.color,e.lineWidth=t.strokeWidth,e.lineCap="round",e.lineJoin="round",e.moveTo(a.x,a.y);for(const r of t.points.slice(1)){const l=Ie(r,n);e.lineTo(l.x,l.y)}if(e.stroke(),t.tool==="arrow"){const r=Ie(t.points[t.points.length-1],n),l=Ie(t.points[t.points.length-2],n);Bn(e,l,r,t.color,t.strokeWidth)}e.restore()}function at(e,t,n,a){const r="start"in t?{x:Math.min(t.start.x,t.current.x),y:Math.min(t.start.y,t.current.y),width:Math.abs(t.current.x-t.start.x),height:Math.abs(t.current.y-t.start.y),color:"#64c8ff",strokeWidth:2}:t;e.save(),e.strokeStyle=r.color,e.lineWidth=a==="active"?Math.max(2,r.strokeWidth):r.strokeWidth,a==="active"&&e.setLineDash([8,6]),e.strokeRect(r.x*n.width,r.y*n.height,r.width*n.width,r.height*n.height),e.restore()}function En(e,t,n){const a=t.x*n.width,r=t.y*n.height,l=Math.min(260,Math.max(150,n.width*.22)),s=12,d=18;e.save(),e.font="14px sans-serif";const u=jn(e,t.text.trim()||" ",l-s*2),i=Math.max(52,s*2+u.length*d);e.fillStyle="rgba(255, 246, 179, 0.96)",e.strokeStyle="rgba(44, 37, 12, 0.28)",e.lineWidth=1,Tn(e,a,r,l,i,8),e.fill(),e.stroke(),e.fillStyle="#2f2a13",e.textBaseline="top",u.forEach((b,f)=>{e.fillText(b,a+s,r+s+f*d)}),e.restore()}function Sn(e,t){const n=lt(e);if(!n)return null;if(n.kind==="box")return t.boxes.find(i=>i.id===n.id)??null;const a=n.kind==="memo"?t.memos.find(i=>i.id===n.id):null;if(a)return{id:a.id,x:a.x,y:a.y,width:.18,height:.12,color:a.color,strokeWidth:1};if(n.kind!=="path")return null;const r=t.paths.find(i=>i.id===n.id);if(!r||r.points.length===0)return null;const l=r.points.map(i=>i.x),s=r.points.map(i=>i.y),d=Math.min(...l),u=Math.min(...s);return{id:r.id,x:d,y:u,width:Math.max(.01,Math.max(...l)-d),height:Math.max(.01,Math.max(...s)-u),color:r.color,strokeWidth:r.strokeWidth}}function vt(e,t,n){const a="start"in t?{x:Math.min(t.start.x,t.current.x),y:Math.min(t.start.y,t.current.y),width:Math.abs(t.current.x-t.start.x),height:Math.abs(t.current.y-t.start.y)}:t;e.save(),e.strokeStyle="#64c8ff",e.lineWidth=2,e.setLineDash([5,5]),e.strokeRect(a.x*n.width,a.y*n.height,a.width*n.width,a.height*n.height),e.restore()}function Bn(e,t,n,a,r){const l=Math.atan2(n.y-t.y,n.x-t.x),s=Math.max(12,r*4),d=Math.PI/7;e.save(),e.fillStyle=a,e.beginPath(),e.moveTo(n.x,n.y),e.lineTo(n.x-s*Math.cos(l-d),n.y-s*Math.sin(l-d)),e.lineTo(n.x-s*Math.cos(l+d),n.y-s*Math.sin(l+d)),e.closePath(),e.fill(),e.restore()}function jn(e,t,n){const a=t.split(/\s+/).filter(Boolean);if(a.length===0)return[""];const r=[];let l="";for(const s of a){const d=l?`${l} ${s}`:s;if(e.measureText(d).width<=n||l===""){l=d;continue}r.push(l),l=s}return l&&r.push(l),r}function Tn(e,t,n,a,r,l){const s=Math.min(l,a/2,r/2);e.beginPath(),e.moveTo(t+s,n),e.lineTo(t+a-s,n),e.quadraticCurveTo(t+a,n,t+a,n+s),e.lineTo(t+a,n+r-s),e.quadraticCurveTo(t+a,n+r,t+a-s,n+r),e.lineTo(t+s,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s),e.lineTo(t,n+s),e.quadraticCurveTo(t,n,t+s,n),e.closePath()}function Pn({paths:e,boxes:t,memos:n=[],selectedIds:a=[],selectionBox:r=null,activePath:l,activeBox:s}){const d=c.useRef(null);return c.useEffect(()=>{const u=d.current;if(!u)return;const i=u.getBoundingClientRect(),b=window.devicePixelRatio||1;u.width=Math.max(1,Math.round(i.width*b)),u.height=Math.max(1,Math.round(i.height*b));const f=u.getContext("2d");if(!f)return;f.setTransform(b,0,0,b,0,0),f.clearRect(0,0,i.width,i.height);const _={width:i.width,height:i.height};for(const B of e)nt(f,B,_);for(const B of t)at(f,B,_,"committed");for(const B of a){const A=Sn(B,{paths:e,boxes:t,memos:n});A&&vt(f,A,_)}r&&vt(f,r,_),l&&nt(f,l,_),s&&at(f,s,_,"active")},[e,t,n,a,r,l,s]),o.jsx("canvas",{ref:d,className:"canvas-annotation-layer","aria-hidden":"true"})}function Ne(e){e.stopPropagation()}function Dn({memos:e,activeMemoId:t,onUpdate:n,onDelete:a,onFocus:r,onCommit:l}){return o.jsx("div",{className:"canvas-memo-overlay",children:e.map(s=>o.jsx("textarea",{className:`canvas-memo${t===s.id?" canvas-memo--active":""}`,value:s.text,style:{left:`${s.x*100}%`,top:`${s.y*100}%`},autoFocus:t===s.id,onFocus:()=>r(s.id),onPointerDown:Ne,onPointerMove:Ne,onPointerUp:Ne,onPointerCancel:Ne,onChange:d=>n(s.id,d.currentTarget.value),onBlur:()=>{l?.(),s.text.trim()===""&&a(s.id)},"aria-label":"Canvas memo"},s.id))})}function An({annotationFrameRef:e,imageElementRef:t,frameClassName:n,frameStyle:a,imageKey:r,imageSrc:l,fallbackImage:s,alt:d,canvasOpen:u,maskOverlayUrl:i,cleanupLayer:b,annotations:f,onOpenCanvas:_,onPointerDown:B,onPointerMove:A,onPointerUp:O,onPointerLeave:T}){return o.jsxs("div",{ref:e,className:n,onPointerDown:B,onPointerMove:A,onPointerUp:O,onPointerCancel:O,onPointerLeave:T,style:a,children:[o.jsx("img",{ref:t,className:"result-img",src:l??s,alt:d,decoding:"async",onDoubleClick:N=>{N.stopPropagation(),_()}},r),u&&i?o.jsx("img",{className:"canvas-background-cleanup-mask",src:i,alt:"","aria-hidden":"true",decoding:"async"}):null,u?b:null,u&&o.jsxs(o.Fragment,{children:[o.jsx(Pn,{paths:f.paths,boxes:f.boxes,memos:f.memos,selectedIds:f.selectedIds,selectionBox:f.selectionBox,activePath:f.activePath,activeBox:f.activeBox}),o.jsx(Dn,{memos:f.memos,activeMemoId:f.activeMemoId,onUpdate:f.updateMemo,onDelete:f.deleteMemo,onFocus:f.focusMemo,onCommit:f.commitMemoEdit})]})]})}function In(e){return`${e.x*100} ${e.y*100}`}function Nn(e){return e.map(In).join(" ")}function Rn({seeds:e,brushStrokes:t,brushCursor:n,brushRadius:a,active:r}){if(!r&&e.length===0&&t.length===0)return null;const l=a*100;return o.jsxs("svg",{className:"canvas-cleanup-overlay",viewBox:"0 0 100 100",preserveAspectRatio:"none","aria-hidden":"true",children:[t.map(s=>o.jsx("polyline",{className:`canvas-cleanup-overlay__stroke canvas-cleanup-overlay__stroke--${s.intent}`,points:Nn(s.points),strokeWidth:Math.max(.3,s.radius*200),vectorEffect:"non-scaling-stroke"},s.id)),r&&n?o.jsx("circle",{className:"canvas-cleanup-cursor",cx:n.x*100,cy:n.y*100,r:Math.max(.6,l),vectorEffect:"non-scaling-stroke"}):null]})}function Ln({mode:e,matteColor:t,onModeChange:n,onMatteColorChange:a}){const{t:r}=ke();return o.jsxs("div",{className:"canvas-toolbar__bg",role:"group","aria-label":r("canvas.toolbar.bgGroup"),children:[o.jsx("button",{type:"button",className:`canvas-toolbar__bg-tab${e==="alpha"?" active":""}`,onClick:()=>n("alpha"),children:r("canvas.toolbar.bgAlpha")}),o.jsx("button",{type:"button",className:`canvas-toolbar__bg-tab${e==="matte"?" active":""}`,onClick:()=>n("matte"),children:r("canvas.toolbar.bgMatte")}),e==="matte"?o.jsx("input",{type:"color","aria-label":r("canvas.toolbar.bgMatteColor"),value:t,onChange:l=>a(l.target.value)}):null]})}function bt({label:e,value:t,options:n,onChange:a}){return o.jsxs("div",{className:"canvas-toolbar__segmented-row",children:[o.jsx("span",{className:"canvas-toolbar__segmented-label",children:e}),o.jsx("div",{className:"canvas-toolbar__segmented",role:"group","aria-label":e,children:n.map(r=>o.jsx("button",{type:"button",className:"canvas-toolbar__segmented-button","data-value":r.value,"aria-pressed":t===r.value,onClick:()=>a(r.value),children:r.label},r.value))})]})}function On({seedCount:e,tolerance:t,stats:n,hasPreview:a,isPickingSeed:r,intent:l,tool:s,brushRadius:d,isPreviewing:u,isApplying:i,keepOpen:b,disabled:f,onAutoSample:_,onPickSeed:B,onIntentChange:A,onToolChange:O,onBrushRadiusChange:T,onToleranceChange:N,onPreview:p,onApply:C,onReset:M}){const{t:y}=ke(),[v,X]=c.useState(!1),R=c.useRef(null),$=n?Math.round(n.removedPercent*1e3)/10:0,x=r||s==="brush";return c.useEffect(()=>{if(!v)return;const E=S=>{b||R.current?.contains(S.target)||X(!1)};return window.addEventListener("pointerdown",E),()=>window.removeEventListener("pointerdown",E)},[b,v]),o.jsxs("div",{className:"canvas-toolbar__cleanup",ref:R,children:[o.jsx("button",{type:"button",className:`canvas-toolbar__button${v||a?" canvas-toolbar__button--active":""}`,onClick:()=>X(E=>!E),disabled:f,"aria-expanded":v,"aria-label":y("canvas.toolbar.cleanup"),title:y("canvas.toolbar.cleanup"),children:o.jsx($n,{})}),v?o.jsxs("div",{className:"canvas-toolbar__cleanup-panel",role:"group","aria-label":y("canvas.toolbar.cleanup"),children:[o.jsxs("div",{className:"canvas-toolbar__cleanup-row",children:[o.jsx("span",{className:"canvas-toolbar__cleanup-title",children:y("canvas.toolbar.cleanup")}),o.jsx("span",{className:"canvas-toolbar__cleanup-meta",children:y("canvas.toolbar.cleanupSeedCount",{n:e})})]}),o.jsx(bt,{label:y("canvas.toolbar.cleanupMark"),value:l,options:[{value:"remove",label:y("canvas.toolbar.cleanupRemove")},{value:"preserve",label:y("canvas.toolbar.cleanupPreserve")}],onChange:A}),o.jsx(bt,{label:y("canvas.toolbar.cleanupInput"),value:s,options:[{value:"click",label:y("canvas.toolbar.cleanupClick")},{value:"brush",label:y("canvas.toolbar.cleanupBrush")}],onChange:O}),o.jsxs("label",{className:"canvas-toolbar__cleanup-slider",children:[o.jsx("span",{children:y("canvas.toolbar.cleanupTolerance")}),o.jsx("input",{type:"range",min:"0",max:"96",value:t,onChange:E=>N(Number(E.target.value))}),o.jsx("output",{children:t})]}),s==="brush"?o.jsxs("label",{className:"canvas-toolbar__cleanup-slider",children:[o.jsx("span",{children:y("canvas.toolbar.cleanupBrushSize")}),o.jsx("input",{type:"range",min:"0.006",max:"0.06",step:"0.002",value:d,onChange:E=>T(Number(E.target.value))}),o.jsx("output",{children:Math.round(d*1e3)})]}):null,o.jsxs("div",{className:"canvas-toolbar__cleanup-actions",children:[o.jsx("button",{type:"button",onClick:_,children:y("canvas.toolbar.cleanupAutoSample")}),o.jsx("button",{type:"button",className:r?"active":"",onClick:B,children:y(x?"canvas.toolbar.cleanupActive":"canvas.toolbar.cleanupPickSeed")})]}),o.jsxs("div",{className:"canvas-toolbar__cleanup-actions",children:[o.jsx("button",{type:"button",onClick:p,disabled:u||e===0,children:y(u?"canvas.toolbar.cleanupPreviewing":"canvas.toolbar.cleanupPreview")}),o.jsx("button",{type:"button",onClick:C,disabled:i||!a&&e===0,children:y(i?"canvas.toolbar.cleanupApplying":"canvas.toolbar.cleanupApply")}),o.jsx("button",{type:"button",onClick:M,disabled:!a&&e===0,children:y("canvas.toolbar.cleanupReset")})]}),x?o.jsx("div",{className:"canvas-toolbar__cleanup-status canvas-toolbar__cleanup-status--active",children:y(s==="brush"?"canvas.toolbar.cleanupBrushHint":"canvas.toolbar.cleanupPickHint")}):n&&!a?o.jsx("div",{className:"canvas-toolbar__cleanup-status canvas-toolbar__cleanup-status--active",children:y("canvas.toolbar.cleanupMaskHint")}):null,n?o.jsx("div",{className:"canvas-toolbar__cleanup-status",children:y("canvas.toolbar.cleanupRemoved",{n:$})}):null]}):null]})}function $n(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"M5 7.5h14"}),o.jsx("path",{d:"M7 12h10"}),o.jsx("path",{d:"M10 16.5h4"}),o.jsx("path",{d:"M7.5 5.5 9 4l1.5 1.5L9 7 7.5 5.5Z"}),o.jsx("path",{d:"M13.5 11 15 9.5l1.5 1.5L15 12.5 13.5 11Z"}),o.jsx("path",{d:"M4.5 15.5 6 14l1.5 1.5L6 17 4.5 15.5Z"})]})}function Un({style:e,onStyleChange:t}){const{t:n}=ke(),[a,r]=c.useState(!1),l=c.useRef(null);return c.useEffect(()=>{if(!a)return;const s=d=>{l.current?.contains(d.target)||r(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[a]),o.jsxs("div",{ref:l,className:`canvas-toolbar__split-button${a?" canvas-toolbar__split-button--active":""}`,onKeyDown:s=>{s.key==="Escape"&&a&&(s.preventDefault(),s.stopPropagation(),r(!1))},children:[o.jsxs("button",{type:"button",className:"canvas-toolbar__button canvas-toolbar__style-trigger",onClick:()=>r(s=>!s),"aria-haspopup":"dialog","aria-expanded":a,"aria-label":n("canvas.toolbar.style"),title:n("canvas.toolbar.style"),children:[o.jsx("span",{className:"canvas-style-trigger__swatch",style:{background:e.color},"aria-hidden":"true"}),o.jsx("span",{className:"canvas-style-trigger__width",style:{height:`${Math.min(8,Math.max(2,e.strokeWidth))}px`},"aria-hidden":"true"})]}),a?o.jsxs("div",{className:"canvas-style-popover",role:"dialog","aria-label":n("canvas.toolbar.style"),children:[o.jsx("div",{className:"canvas-style-popover__row",role:"group","aria-label":n("canvas.toolbar.color"),children:At.map(s=>o.jsx("button",{type:"button",className:`canvas-style-swatch${e.color===s?" canvas-style-swatch--active":""}`,style:{background:s},onClick:()=>t({...e,color:s}),"aria-pressed":e.color===s,"aria-label":s,title:s},s))}),o.jsx("div",{className:"canvas-style-popover__row",role:"group","aria-label":n("canvas.toolbar.strokeWidth"),children:It.map(s=>o.jsx("button",{type:"button",className:`canvas-style-width${e.strokeWidth===s?" canvas-style-width--active":""}`,onClick:()=>t({...e,strokeWidth:s}),"aria-pressed":e.strokeWidth===s,"aria-label":`${s}px`,title:`${s}px`,children:o.jsx("span",{style:{height:`${s}px`,background:e.color}})},s))})]}):null]})}function Wn({tools:e,activeTool:t,onToolChange:n}){const[a,r]=c.useState(!1),l=c.useRef(null),s=e.find(u=>u.id===t)??e[0],d=s.icon;return c.useEffect(()=>{if(!a)return;const u=i=>{l.current?.contains(i.target)||r(!1)};return window.addEventListener("pointerdown",u),()=>window.removeEventListener("pointerdown",u)},[a]),o.jsxs("div",{ref:l,className:"canvas-tool-picker",children:[o.jsxs("button",{type:"button",className:`canvas-toolbar__button canvas-tool-picker__trigger${t!=="eraser"?" canvas-toolbar__button--active":""}`,onClick:()=>r(u=>!u),"aria-label":`${s.label} (${s.shortcut})`,"aria-pressed":t===s.id,"aria-haspopup":"menu","aria-expanded":a,title:`${s.label} (${s.shortcut})`,children:[o.jsx(d,{}),o.jsx("span",{className:"canvas-toolbar__shortcut","aria-hidden":"true",children:s.shortcut})]}),a?o.jsx("div",{className:"canvas-tool-picker__menu",role:"menu",children:e.map(u=>{const i=u.icon,b=t===u.id;return o.jsxs("button",{type:"button",className:`canvas-tool-picker__item${b?" active":""}`,role:"menuitemradio","aria-checked":b,onClick:()=>{n(u.id),r(!1)},children:[o.jsx(i,{}),o.jsx("span",{children:u.label}),o.jsx("kbd",{children:u.shortcut})]},u.id)})}):null]})}function Hn({activeTool:e,hasAnnotations:t,hasExportableContent:n,onToolChange:a,eraserMode:r="object",onEraserModeChange:l,style:s,onStyleChange:d,onClear:u,onApply:i,onExport:b,onUndo:f,onRedo:_,canUndo:B,canRedo:A,onDeleteSelected:O,selectedCount:T=0,onEditWithMask:N,canEditWithMask:p,isEditingWithMask:C,isApplying:M,isExporting:y,exportBackground:v="alpha",exportMatteColor:X="#ffffff",onExportBackgroundChange:R,onExportMatteColorChange:$,cleanupTolerance:x=28,cleanupSeedCount:E=0,cleanupStats:S=null,cleanupHasPreview:P=!1,isCleanupPickingSeed:Y=!1,isCleanupActive:ne=!1,cleanupIntent:ae="remove",cleanupTool:re="click",cleanupBrushRadius:le=.018,isCleanupPreviewing:I=!1,isCleanupApplying:F=!1,onCleanupAutoSample:g,onCleanupPickSeed:D,onCleanupIntentChange:J,onCleanupToolChange:de,onCleanupBrushRadiusChange:ce,onCleanupToleranceChange:G,onCleanupPreview:Q,onCleanupApply:Z,onCleanupReset:K}){const{t:k}=ke(),[H,ee]=c.useState(!1),U=c.useRef(null),te=n??t??!1,z=k(r==="object"?"canvas.toolbar.objectEraser":"canvas.toolbar.brushEraser"),V=[{id:"select",shortcut:"1",label:k("canvas.toolbar.select"),icon:Fn},{id:"pen",shortcut:"2",label:k("canvas.toolbar.pen"),icon:Vn},{id:"box",shortcut:"3",label:k("canvas.toolbar.box"),icon:Kn},{id:"arrow",shortcut:"4",label:k("canvas.toolbar.arrow"),icon:zn},{id:"memo",shortcut:"5",label:k("canvas.toolbar.memo"),icon:Xn}];c.useEffect(()=>{if(!H)return;const oe=we=>{U.current?.contains(we.target)||ee(!1)};return window.addEventListener("pointerdown",oe),()=>window.removeEventListener("pointerdown",oe)},[H]);const he=oe=>{l?.(oe),a("eraser"),ee(!1)};return o.jsxs("div",{className:"canvas-toolbar","aria-label":k("canvas.toolbar.label"),children:[o.jsx(Wn,{tools:V,activeTool:e,onToolChange:a}),o.jsx(Un,{style:s,onStyleChange:d}),o.jsxs("div",{ref:U,className:`canvas-toolbar__split-button${e==="eraser"?" canvas-toolbar__split-button--active":""}`,onKeyDown:oe=>{oe.key==="Escape"&&H&&(oe.preventDefault(),ee(!1))},children:[o.jsxs("button",{type:"button",className:`canvas-toolbar__button canvas-toolbar__button--split-main${e==="eraser"?" canvas-toolbar__button--active":""}`,onClick:()=>a("eraser"),"aria-label":`${z} (6)`,"aria-pressed":e==="eraser",title:`${z} (6)`,children:[o.jsx(qn,{}),o.jsx("span",{className:"canvas-toolbar__shortcut","aria-hidden":"true",children:"6"})]}),o.jsx("button",{type:"button",className:"canvas-toolbar__button canvas-toolbar__button--split-menu",onClick:()=>ee(oe=>!oe),"aria-label":k("canvas.toolbar.eraserMenu"),"aria-haspopup":"menu","aria-expanded":H,"aria-controls":"canvas-eraser-menu",title:k("canvas.toolbar.eraserMenu"),children:o.jsx(Yn,{})}),H?o.jsxs("div",{id:"canvas-eraser-menu",className:"canvas-toolbar__eraser-menu",role:"menu",children:[o.jsx("button",{type:"button",className:`canvas-toolbar__eraser-menu-item${r==="object"?" canvas-toolbar__eraser-menu-item--active":""}`,role:"menuitemradio","aria-checked":r==="object",onClick:()=>he("object"),children:k("canvas.toolbar.objectEraser")}),o.jsx("button",{type:"button",className:`canvas-toolbar__eraser-menu-item${r==="brush"?" canvas-toolbar__eraser-menu-item--active":""}`,role:"menuitemradio","aria-checked":r==="brush",onClick:()=>he("brush"),children:k("canvas.toolbar.brushEraser")})]}):null]}),o.jsx("span",{className:"canvas-toolbar__divider","aria-hidden":"true"}),i?o.jsx("button",{type:"button",className:`canvas-toolbar__button canvas-toolbar__button--primary${M?" canvas-toolbar__button--busy":""}`,onClick:i,disabled:!te||M,"aria-label":k("canvas.toolbar.apply"),title:k("canvas.toolbar.apply"),children:o.jsx(Gn,{})}):null,N?o.jsx("button",{type:"button",className:`canvas-toolbar__button canvas-toolbar__button--primary canvas-toolbar__button--mask${C?" canvas-toolbar__button--busy":""}`,onClick:N,disabled:!p||C,"aria-label":k(p?"canvas.toolbar.editMask":"canvas.toolbar.editMaskDisabled"),title:k(p?"canvas.toolbar.editMask":"canvas.toolbar.editMaskDisabled"),children:o.jsx(ea,{})}):null,f?o.jsx("button",{type:"button",className:"canvas-toolbar__button",onClick:f,disabled:!B,"aria-label":k("canvas.toolbar.undo"),title:k("canvas.toolbar.undo"),children:o.jsx(Jn,{})}):null,_?o.jsx("button",{type:"button",className:"canvas-toolbar__button",onClick:_,disabled:!A,"aria-label":k("canvas.toolbar.redo"),title:k("canvas.toolbar.redo"),children:o.jsx(Qn,{})}):null,O?o.jsx("button",{type:"button",className:"canvas-toolbar__button canvas-toolbar__button--danger",onClick:O,disabled:T===0,"aria-label":k("canvas.toolbar.deleteSelected"),title:k("canvas.toolbar.deleteSelected"),children:o.jsx(gt,{})}):null,b&&R&&$?o.jsx(Ln,{mode:v,matteColor:X,onModeChange:R,onMatteColorChange:$}):null,g&&D&&J&&de&&ce&&G&&Q&&Z&&K?o.jsx(On,{seedCount:E,tolerance:x,stats:S,hasPreview:P,isPickingSeed:Y,intent:ae,tool:re,brushRadius:le,isPreviewing:I,isApplying:F,keepOpen:ne,disabled:M||y,onAutoSample:g,onPickSeed:D,onIntentChange:J,onToolChange:de,onBrushRadiusChange:ce,onToleranceChange:G,onPreview:Q,onApply:Z,onReset:K}):null,b?o.jsx("button",{type:"button",className:`canvas-toolbar__button${y?" canvas-toolbar__button--busy":""}`,onClick:b,disabled:!te||y,"aria-label":k("canvas.toolbar.export"),title:k("canvas.toolbar.export"),children:o.jsx(Zn,{})}):null,o.jsx("button",{type:"button",className:"canvas-toolbar__button canvas-toolbar__button--danger",onClick:u,disabled:!te,"aria-label":k("canvas.toolbar.clear"),title:k("canvas.toolbar.clear"),children:o.jsx(gt,{})})]})}function Fn(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"M8 12.5V7a2 2 0 0 1 4 0v4"}),o.jsx("path",{d:"M12 11V5a2 2 0 0 1 4 0v7"}),o.jsx("path",{d:"M16 12V8a2 2 0 0 1 4 0v5.5A6.5 6.5 0 0 1 13.5 20H12a6 6 0 0 1-4.24-1.76L4.7 15.18a1.7 1.7 0 0 1 2.4-2.4L9 14.68"})]})}function Vn(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"m4 20 4.2-1.1L19.5 7.6a2.2 2.2 0 0 0-3.1-3.1L5.1 15.8 4 20Z"}),o.jsx("path",{d:"m14.5 6.5 3 3"})]})}function Kn(){return o.jsx("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:o.jsx("rect",{x:"5",y:"5",width:"14",height:"14",rx:"2"})})}function zn(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"M5 19 19 5"}),o.jsx("path",{d:"M10 5h9v9"})]})}function Xn(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"M6 4h12v16H6z"}),o.jsx("path",{d:"M9 8h6"}),o.jsx("path",{d:"M9 12h5"}),o.jsx("path",{d:"M9 16h3"})]})}function qn(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"m4 15 8.5-8.5a2.1 2.1 0 0 1 3 0l2 2a2.1 2.1 0 0 1 0 3L10 19H6.5L4 16.5V15Z"}),o.jsx("path",{d:"M10 19h10"}),o.jsx("path",{d:"m8.5 10.5 5 5"})]})}function Yn(){return o.jsx("svg",{className:"canvas-toolbar__icon canvas-toolbar__icon--small",viewBox:"0 0 24 24","aria-hidden":"true",children:o.jsx("path",{d:"m7 14 5-5 5 5"})})}function Gn(){return o.jsx("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:o.jsx("path",{d:"M5 12.5 10 17 19 7"})})}function Zn(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"M12 4v11"}),o.jsx("path",{d:"m8 11 4 4 4-4"}),o.jsx("path",{d:"M5 20h14"})]})}function gt(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"M4 7h16"}),o.jsx("path",{d:"M9 7V5h6v2"}),o.jsx("path",{d:"M7 7l1 13h8l1-13"}),o.jsx("path",{d:"M10 11v5"}),o.jsx("path",{d:"M14 11v5"})]})}function Jn(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"M9 7 5 11l4 4"}),o.jsx("path",{d:"M5 11h9a5 5 0 0 1 0 10h-2"})]})}function Qn(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"m15 7 4 4-4 4"}),o.jsx("path",{d:"M19 11h-9a5 5 0 0 0 0 10h2"})]})}function ea(){return o.jsxs("svg",{className:"canvas-toolbar__icon",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("rect",{x:"5",y:"5",width:"14",height:"14",rx:"2"}),o.jsx("path",{d:"M9 9h6v6H9z"})]})}function ta({annotations:e,backgroundCleanup:t,backgroundCleanupPreview:n,canvasState:a,actions:r}){return o.jsx(Hn,{activeTool:e.activeTool,eraserMode:e.eraserMode,onEraserModeChange:e.setEraserMode,style:{color:e.toolColor,strokeWidth:e.strokeWidth},onStyleChange:e.setStyle,hasExportableContent:e.hasAnnotations,onToolChange:e.setTool,onClear:e.clear,onApply:()=>{r.handleApplyCanvas()},onExport:()=>{r.handleExportCanvas()},onUndo:e.undo,onRedo:e.redo,canUndo:e.canUndo,canRedo:e.canRedo,onDeleteSelected:e.deleteSelected,selectedCount:e.selectedIds.length,onEditWithMask:()=>{r.handleEditWithMask()},canEditWithMask:e.boxes.length>0,isEditingWithMask:a.isEditingWithMask,isApplying:a.isApplying,isExporting:a.isExporting,exportBackground:a.exportBackground,exportMatteColor:a.exportMatteColor,onExportBackgroundChange:r.setExportBackground,onExportMatteColorChange:r.setExportMatteColor,cleanupTolerance:t.backgroundCleanupTolerance,cleanupSeedCount:t.backgroundCleanupSeeds.length,cleanupStats:t.backgroundCleanupStats,cleanupHasPreview:!!n,isCleanupPickingSeed:t.isBackgroundCleanupPickingSeed,isCleanupActive:t.isBackgroundCleanupActive,cleanupIntent:t.cleanupIntent,cleanupTool:t.cleanupTool,cleanupBrushRadius:t.cleanupBrushRadius,isCleanupPreviewing:t.isBackgroundCleanupPreviewing,isCleanupApplying:t.isBackgroundCleanupApplying,onCleanupAutoSample:t.handleBackgroundCleanupAutoSample,onCleanupPickSeed:t.handleBackgroundCleanupPickSeed,onCleanupIntentChange:t.setCleanupIntent,onCleanupToolChange:l=>{t.setCleanupTool(l),t.setIsBackgroundCleanupActive(!0)},onCleanupBrushRadiusChange:t.setCleanupBrushRadius,onCleanupToleranceChange:t.handleBackgroundCleanupToleranceChange,onCleanupPreview:()=>{t.runBackgroundCleanupPreview()},onCleanupApply:()=>{t.handleBackgroundCleanupApply()},onCleanupReset:t.handleBackgroundCleanupReset})}function na({currentImage:e,canvasDisplayImage:t,canvasOpen:n,displayQuality:a,displaySize:r,displayModel:l,onAfterDeleteFocus:s,onCopyPrompt:d}){const{t:u}=ke(),i=[e.elapsed!=null?`${e.elapsed}s`:null,e.usage?u("canvas.tokens",{n:e.usage.total_tokens??"?"}):null,an(e.reasoningEffort),a,r,l,e.provider??null].filter(b=>!!b).join(" · ");return o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"result-meta",children:i}),o.jsx(rn,{imageOverride:n?t:null,onAfterDeleteFocus:s}),e.prompt?o.jsx(on,{prompt:e.prompt,onCopy:d}):null]})}function aa({zoom:e,onZoomIn:t,onZoomOut:n,onZoomReset:a}){const{t:r}=ke(),l=Math.round(e*100);return o.jsxs("div",{className:"canvas-toolbar__zoom",role:"group","aria-label":r("canvas.toolbar.zoomGroup"),children:[o.jsx("button",{type:"button",className:"canvas-toolbar__zoom-button",onClick:n,"aria-label":r("canvas.toolbar.zoomOut"),title:r("canvas.toolbar.zoomOut"),children:o.jsx(ra,{})}),o.jsxs("button",{type:"button",className:"canvas-toolbar__zoom-value",onClick:a,"aria-label":r("canvas.toolbar.zoomReset"),title:r("canvas.toolbar.zoomReset"),children:[l,"%"]}),o.jsx("button",{type:"button",className:"canvas-toolbar__zoom-button",onClick:t,"aria-label":r("canvas.toolbar.zoomIn"),title:r("canvas.toolbar.zoomIn"),children:o.jsx(oa,{})})]})}function ra(){return o.jsx("svg",{className:"canvas-toolbar__icon canvas-toolbar__icon--small",viewBox:"0 0 24 24","aria-hidden":"true",children:o.jsx("path",{d:"M5 12h14"})})}function oa(){return o.jsxs("svg",{className:"canvas-toolbar__icon canvas-toolbar__icon--small",viewBox:"0 0 24 24","aria-hidden":"true",children:[o.jsx("path",{d:"M12 5v14"}),o.jsx("path",{d:"M5 12h14"})]})}function sa({zoom:e,closeLabel:t,blankCanvasLabel:n,blankCanvasAriaLabel:a,blankCanvasShortcut:r,blankCanvasBusy:l,shortcutHint:s,onZoomIn:d,onZoomOut:u,onZoomReset:i,onCreateBlankCanvas:b,onClose:f}){return o.jsxs("div",{className:"canvas-mode-topbar",children:[o.jsxs("div",{className:"canvas-mode-topbar__stack",children:[o.jsx("span",{className:"canvas-mode-topbar__label",children:"Canvas Mode"}),o.jsx(aa,{zoom:e,onZoomIn:d,onZoomOut:u,onZoomReset:i}),o.jsx("span",{className:"canvas-mode-topbar__shortcuts",children:s})]}),o.jsx("div",{className:"canvas-mode-topbar__center",children:o.jsxs("button",{type:"button",className:"canvas-mode-blank",onClick:b,disabled:l,"aria-label":a,title:a,children:[o.jsx("span",{"aria-hidden":"true",children:"+"}),o.jsx("span",{children:n}),o.jsx("kbd",{children:r})]})}),o.jsxs("button",{type:"button",className:"canvas-mode-close",onClick:f,"aria-label":t,children:[o.jsx("kbd",{children:"ESC"}),o.jsx("span",{children:t})]})]})}function Je(e,t,n){return Math.max(t,Math.min(n,e))}function la({zoom:e,panX:t,panY:n}){const a=Je(100/Math.max(1,e),18,100),r=a/2,l=Je(50-t/40,r,100-r),s=Je(50-n/40,r,100-r);return{width:`${a}%`,height:`${a}%`,left:`${l}%`,top:`${s}%`}}function ca({imageSrc:e,zoom:t,panX:n,panY:a,resetLabel:r,onReset:l}){return o.jsxs("button",{type:"button",className:"canvas-viewport-minimap",onClick:l,"aria-label":r,title:r,children:[o.jsx("img",{src:e,alt:"","aria-hidden":"true"}),o.jsx("span",{className:"canvas-viewport-minimap__window",style:la({zoom:t,panX:n,panY:a}),"aria-hidden":"true"})]})}const ia=`url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' viewBox='0 0 28 28'%3E%3Ccircle cx='14' cy='14' r='8' fill='white' fill-opacity='0.16' stroke='black' stroke-width='3'/%3E%3Ccircle cx='14' cy='14' r='8' fill='none' stroke='white' stroke-width='1.5'/%3E%3Ccircle cx='14' cy='14' r='2' fill='white' stroke='black' stroke-width='1'/%3E%3C/svg%3E") 14 14, auto`,ua=`url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' viewBox='0 0 28 28'%3E%3Ccircle cx='14' cy='14' r='8' fill='white' fill-opacity='0.18' stroke='black' stroke-width='3'/%3E%3Ccircle cx='14' cy='14' r='8' fill='none' stroke='white' stroke-width='1.5'/%3E%3C/svg%3E") 14 14, auto`;function da(e){return e==="low"?"l":e==="medium"?"m":e==="high"?"h":e??null}function ha(e){if(!e)return null;const t=e.match(/^(\d+)x\1$/);return t?`${t[1]}²`:e.replace("x","×")}function fa(e){const t=e.url??e.image;if(!e.canvasVersion||!e.canvasMergedAt||t.startsWith("data:"))return t;const n=t.includes("?")?"&":"?";return`${t}${n}canvasMergedAt=${e.canvasMergedAt}`}function ct(e,t){return!e.canvasVersion||e.prompt||!t?.prompt?e:{...e,prompt:t.prompt}}function pa(e,t){if(!t?.filename)return null;const n=e.find(a=>a.canvasVersion&&(a.canvasSourceFilename===t.filename||a.canvasEditableFilename===t.filename))??null;return n?ct(n,t):null}function ma(e,t){if(sn(e)){const n=e.images[0];if(!n)throw new Error("edit_empty_response");return{...n,prompt:t,reasoningEffort:e.reasoningEffort,provider:e.provider,quality:e.quality,size:e.size,moderation:e.moderation,model:e.model,usage:e.usage,kind:"edit",createdAt:Date.now()}}return{image:e.image,url:e.filename?`/generated/${e.filename}`:e.image,thumb:e.image,filename:e.filename,prompt:t,elapsed:e.elapsed,reasoningEffort:e.reasoningEffort,provider:e.provider,quality:e.quality,size:e.size,moderation:e.moderation,model:e.model,usage:e.usage,revisedPrompt:e.revisedPrompt??null,promptMode:e.promptMode??null,kind:"edit",createdAt:Date.now()}}const Qe=new WeakMap;function va(e){if(!e.complete||!e.naturalWidth||!e.naturalHeight)return!1;const t=Qe.get(e);if(t&&t.src===e.currentSrc&&t.width===e.naturalWidth&&t.height===e.naturalHeight)return t.result;const n=64,a=Math.min(n,e.naturalWidth),r=Math.min(n,e.naturalHeight),l=document.createElement("canvas");l.width=a,l.height=r;const s=l.getContext("2d",{willReadFrequently:!0});if(!s)return!1;try{s.drawImage(e,0,0,a,r);const d=s.getImageData(0,0,a,r).data;for(let u=3;u<d.length;u+=4)if(d[u]<250)return Qe.set(e,{src:e.currentSrc,width:e.naturalWidth,height:e.naturalHeight,result:!0}),!0;return Qe.set(e,{src:e.currentSrc,width:e.naturalWidth,height:e.naturalHeight,result:!1}),!1}catch{return!1}}function ba(e,t){if(e.width!==t.width||e.height!==t.height||e.data.length!==t.data.length)throw new Error("cleanup_mask_size_mismatch")}function xt(e,t){return{width:e,height:t,data:new Uint8Array(e*t)}}function rt(e){return{width:e.width,height:e.height,data:new Uint8Array(e.data)}}function ga(e,t){ba(e,t);for(let n=0;n<e.data.length;n+=1)(t.data[n]??0)>0&&(e.data[n]=0)}function Be(e,t){if(!e)return null;const n=rt(e);return t&&ga(n,t),n}function xa(e,t){if(e.width!==t.width||e.height!==t.height)throw new Error("cleanup_mask_size_mismatch");const n=new ImageData(new Uint8ClampedArray(e.data),e.width,e.height);for(let a=0;a<t.data.length;a+=1)(t.data[a]??0)>0&&(n.data[a*4+3]=0);return n}function Re(e){return Math.min(1,Math.max(0,e))}function ya(e){return new Promise((t,n)=>{e.toBlob(a=>{a?t(a):n(new Error("mask_blob_unavailable"))},"image/png")})}async function ka(e){const t=e.imageElement.naturalWidth,n=e.imageElement.naturalHeight;if(!t||!n)throw new Error("mask_source_size_unavailable");if(e.boxes.length===0)throw new Error("mask_boxes_required");const a=document.createElement("canvas");a.width=t,a.height=n;const r=a.getContext("2d");if(!r)throw new Error("mask_context_unavailable");r.fillStyle="rgba(0, 0, 0, 1)",r.fillRect(0,0,t,n),r.globalCompositeOperation="destination-out";for(const l of e.boxes){const s=Re(l.x)*t,d=Re(l.y)*n,u=Re(l.width)*t,i=Re(l.height)*n;u>0&&i>0&&r.fillRect(s,d,u,i)}return ya(a)}async function Ca(e){const t=e.naturalWidth,n=e.naturalHeight;if(!t||!n)throw new Error("image_source_size_unavailable");const a=document.createElement("canvas");a.width=t,a.height=n;const r=a.getContext("2d");if(!r)throw new Error("image_context_unavailable");return r.drawImage(e,0,0,t,n),a.toDataURL("image/png")}function it(e){return new Promise((t,n)=>{const a=new FileReader;a.onerror=()=>n(new Error("mask_blob_read_failed")),a.onload=()=>t(String(a.result)),a.readAsDataURL(e)})}const ut=[{x:0,y:0},{x:1,y:0},{x:0,y:1},{x:1,y:1}],wa=1024;function _a(e){return Math.max(0,Math.min(255,Math.round(e)))}function Nt(e,t,n){const a=Math.max(0,Math.min(t-1,Math.round(e.x*(t-1))));return Math.max(0,Math.min(n-1,Math.round(e.y*(n-1))))*t+a}function Ma(e,t){return(t.length>0?t:ut).map(a=>{const r=Nt(a,e.width,e.height)*4;return{r:e.data[r]??0,g:e.data[r+1]??0,b:e.data[r+2]??0}})}function Ea(e,t,n,a){for(const r of n)if(Math.max(Math.abs((e[t]??0)-r.r),Math.abs((e[t+1]??0)-r.g),Math.abs((e[t+2]??0)-r.b))<=a)return!0;return!1}function je(e,t,n,a,r,l,s){if(e<0||e>=a.length||a[e])return r;const d=e*4;return(t.data[d+3]??0)===0?(a[e]=1,r):Ea(t.data,d,l,s)?(a[e]=1,n[r]=e,r+1):r}function et(){return ut.map(e=>({...e}))}function yt(e,t,n,a){if(e.width!==t.width||e.height!==t.height)throw new Error("cleanup_mask_size_mismatch");const{width:r,height:l}=t,s=r*l,d=new Uint8Array(s),u=new Int32Array(s),i=Ma(t,n),b=_a(a);let f=0;for(const _ of n.length>0?n:ut)f=je(Nt(_,r,l),t,u,d,f,i,b);for(;f>0;){const _=u[--f];e.data[_]=255;const B=_%r;B>0&&(f=je(_-1,t,u,d,f,i,b)),B<r-1&&(f=je(_+1,t,u,d,f,i,b)),_>=r&&(f=je(_-r,t,u,d,f,i,b)),_<s-r&&(f=je(_+r,t,u,d,f,i,b))}}function Sa(e,t){const n=new ImageData(new Uint8ClampedArray(e.data),e.width,e.height),a=xa(n,t),r=t.data.reduce((l,s)=>l+(s>0?1:0),0);return{imageData:{width:e.width,height:e.height,data:a.data},stats:{width:e.width,height:e.height,removedPixels:r,removedPercent:t.data.length>0?r/t.data.length:0}}}function Rt(e){return new Promise((t,n)=>{e.toBlob(a=>{a?t(a):n(new Error("background_cleanup_blob_failed"))},"image/png")})}function Lt(e,t){const n=e.naturalWidth,a=e.naturalHeight;if(n<=0||a<=0)throw new Error("background_cleanup_image_not_ready");const r=t&&t>0?Math.min(1,t/Math.max(n,a)):1,l=Math.max(1,Math.round(n*r)),s=Math.max(1,Math.round(a*r)),d=document.createElement("canvas");d.width=l,d.height=s;const u=d.getContext("2d",{willReadFrequently:!0});if(!u)throw new Error("background_cleanup_context_failed");return u.drawImage(e,0,0,l,s),{canvas:d,context:u,width:l,height:s}}async function kt({imageElement:e,mask:t}){try{const{canvas:n,context:a,width:r,height:l}=Lt(e),s=a.getImageData(0,0,r,l),d=Sa({width:r,height:l,data:s.data},t),u=a.createImageData(r,l);u.data.set(d.imageData.data),a.putImageData(u,0,0);const i=await Rt(n);return{blob:i,dataUrl:await it(i),stats:d.stats}}catch(n){throw n instanceof Error?n:new Error("background_cleanup_failed")}}async function Ba({imageElement:e,mask:t}){try{const{width:n,height:a}=Lt(e,wa),r=document.createElement("canvas");r.width=n,r.height=a;const l=r.getContext("2d");if(!l)throw new Error("background_cleanup_context_failed");const s=l.createImageData(n,a);let d=0;for(let i=0;i<a;i+=1)for(let b=0;b<n;b+=1){const f=Math.min(t.width-1,Math.floor(b/n*t.width)),_=Math.min(t.height-1,Math.floor(i/a*t.height));if((t.data[_*t.width+f]??0)===0)continue;const B=(i*n+b)*4;s.data[B]=168,s.data[B+1]=85,s.data[B+2]=247,s.data[B+3]=150,d+=1}l.putImageData(s,0,0);const u=await Rt(r);return{dataUrl:await it(u),stats:{width:t.width,height:t.height,removedPixels:t.data.reduce((i,b)=>i+(b>0?1:0),0),removedPercent:t.data.length>0?d/(n*a):0}}}catch(n){throw n instanceof Error?n:new Error("background_cleanup_failed")}}function Ct(e){return{...e,seeds:e.seeds.map(t=>({intent:t.intent,point:{...t.point}})),brushStrokes:e.brushStrokes.map(t=>({...t,points:t.points.map(n=>({...n}))})),brushCursor:e.brushCursor?{...e.brushCursor}:null,removeMask:e.removeMask?rt(e.removeMask):null,preserveMask:e.preserveMask?rt(e.preserveMask):null}}function ja(){return`cleanup_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function Le(e){return Math.max(0,Math.min(1,e))}function Ta(e){const t=[],n=Math.max(0,e.radius*.55);for(const a of e.points)t.push({...a}),!(n<=0)&&t.push({x:Le(a.x-n),y:a.y},{x:Le(a.x+n),y:a.y},{x:a.x,y:Le(a.y-n)},{x:a.x,y:Le(a.y+n)});return t}function Pa(e){const t=e.naturalWidth,n=e.naturalHeight;if(t<=0||n<=0)throw new Error("background_cleanup_image_not_ready");const a=document.createElement("canvas");a.width=t,a.height=n;const r=a.getContext("2d",{willReadFrequently:!0});if(!r)throw new Error("background_cleanup_context_failed");r.drawImage(e,0,0,t,n);const l=r.getImageData(0,0,t,n);return{width:t,height:n,data:l.data}}function Da({canvasOpen:e,currentImage:t,canvasDisplayImage:n,imageElementRef:a,canvasSourceImageRef:r,lastMergedDataUrlRef:l,setCanvasSaveState:s,setCanvasVersionItem:d,applyMergedCanvasImage:u,attachCanvasVersionReference:i,showToast:b,t:f}){const[_,B]=c.useState(!1),[A,O]=c.useState("remove"),[T,N]=c.useState("click"),[p,C]=c.useState("flat-flood-fill"),[M,y]=c.useState([]),[v,X]=c.useState([]),[R,$]=c.useState(28),[x,E]=c.useState(null),[S,P]=c.useState(null),[Y,ne]=c.useState(null),[ae,re]=c.useState(!1),[le,I]=c.useState(.018),[F,g]=c.useState(null),[D,J]=c.useState(!1),[de,ce]=c.useState(!1),G=c.useRef(null),Q=c.useRef(null),Z=c.useRef(null),K=c.useRef({past:[],future:[]}),k=c.useRef(0),H=c.useRef(null),ee=c.useCallback(()=>Ct({intent:A,tool:T,engine:p,seeds:M,brushStrokes:v,brushRadius:le,tolerance:R,removeMask:G.current,preserveMask:Q.current,preview:x,maskOverlay:S,stats:Y,active:ae,brushCursor:F}),[v,S,x,M,Y,R,F,le,p,A,T,ae]),U=c.useCallback(()=>{K.current={past:[...K.current.past.slice(-19),ee()],future:[]}},[ee]),te=c.useCallback(w=>{const m=Ct(w);G.current=m.removeMask,Q.current=m.preserveMask,Z.current=null,O(m.intent),N(m.tool),C(m.engine),y(m.seeds),X(m.brushStrokes),I(m.brushRadius),$(m.tolerance),E(m.preview),P(m.maskOverlay),ne(m.stats),re(m.active),g(m.brushCursor),J(!1),ce(!1)},[]),z=c.useCallback(async()=>{if(!a.current||!t)return;const w=Be(G.current,Q.current);if(!w){P(null),ne(null);return}const m=k.current+1;k.current=m,J(!0);try{const L=await Ba({imageElement:a.current,mask:w});if(k.current!==m)return;P(L),ne(L.stats)}catch{if(k.current!==m)return;b(f("canvas.toolbar.cleanupFailed"),!0)}finally{k.current===m&&J(!1)}},[t,a,b,f]),V=c.useCallback(async(w,m,L)=>{if(!a.current)return;const q=Pa(a.current),ie=xt(q.width,q.height),Ce=xt(q.width,q.height);for(const be of w){const _e=be.intent==="remove"?ie:Ce;yt(_e,q,[be.point],L)}for(const be of m){const _e=be.intent==="remove"?ie:Ce;yt(_e,q,Ta(be),L)}G.current=ie,Q.current=Ce},[a]),he=c.useCallback(()=>{k.current+=1,H.current!=null&&(window.clearTimeout(H.current),H.current=null),G.current=null,Q.current=null,Z.current=null,K.current={past:[],future:[]},y([]),X([]),E(null),P(null),ne(null),re(!1),g(null),J(!1),ce(!1)},[]),oe=c.useCallback(()=>{const w=K.current.past.pop();return w?(K.current.future=[ee(),...K.current.future.slice(0,19)],te(w),!0):!1},[ee,te]),we=c.useCallback(()=>{const w=K.current.future.shift();return w?(K.current.past=[...K.current.past.slice(-19),ee()],te(w),!0):!1},[ee,te]),De=c.useCallback(w=>{U();const m=[...M,{point:w,intent:A}];y(m),E(null),V(m,v,R).then(z)},[v,M,R,A,U,V,z]),$e=c.useCallback(()=>{U();const w=et().map(m=>({point:m,intent:"remove"}));y(w),E(null),re(!1),V(w,v,R).then(z)},[v,R,U,V,z]),Ue=c.useCallback(()=>{U(),N("click"),re(w=>!w)},[U]),W=c.useCallback(w=>{U(),H.current!=null&&window.clearTimeout(H.current),$(w),E(null),H.current=window.setTimeout(()=>{H.current=null,V(M,v,w).then(z)},180)},[v,M,U,V,z]),We=c.useCallback(async()=>{if(!a.current||!t)return null;let w=Be(G.current,Q.current);if(!w){const L=et().map(q=>({point:q,intent:"remove"}));y(L),await V(L,v,R),w=Be(G.current,Q.current)}if(!w)return null;U();const m=k.current+1;k.current=m,J(!0);try{const L=await kt({imageElement:a.current,mask:w});return k.current!==m?null:(E(L),P(null),ne(L.stats),L)}catch{return k.current!==m||b(f("canvas.toolbar.cleanupFailed"),!0),null}finally{k.current===m&&J(!1)}},[v,R,t,a,U,V,b,f]),He=c.useCallback(()=>{U(),he()},[U,he]),Fe=c.useCallback(w=>{U();const m={id:ja(),intent:A,points:[{...w}],radius:le};Z.current=m,g(w),X(L=>[...L,m])},[le,A,U]),Ve=c.useCallback(w=>{const m=Z.current;if(!m){g(w);return}m.points=[...m.points,{...w}],g(w),X(L=>L.map(q=>q.id===m.id?{...m,points:m.points.map(ie=>({...ie}))}:q)),V(M,v.map(L=>L.id===m.id?m:L),R).then(z)},[v,M,R,V,z]),ve=c.useCallback(()=>{Z.current=null,V(M,v,R).then(z)},[v,M,R,V,z]),fe=c.useCallback(async()=>{if(!t||!a.current)return;const w=r.current??t;if(!w?.filename){b(f("canvas.toolbar.cleanupFailed"),!0);return}let m=Be(G.current,Q.current);if(!m){const L=et().map(q=>({point:q,intent:"remove"}));y(L),await V(L,v,R),m=Be(G.current,Q.current)}if(m){ce(!0),s("saving");try{U();const L=await kt({imageElement:a.current,mask:m}),q=await St({sourceFilename:w.canvasSourceFilename??w.filename,image:L.blob,prompt:w.prompt}),ie=ct(q.item,w);l.current=L.dataUrl,d(ie),u(ie),await i(ie),s("saved"),E(null),P(null),ne(L.stats),re(!1),b(f("canvas.toolbar.cleanupApplied"))}catch{s("error"),b(f("canvas.toolbar.cleanupFailed"),!0)}finally{ce(!1)}}},[u,i,v,R,r,t,a,l,U,V,s,d,b,f]),ue=c.useCallback(()=>ae?(Z.current=null,re(!1),g(null),!0):!1,[ae]);return c.useEffect(()=>{const w=a.current;if(!w||!e){B(!1);return}const m=()=>B(va(w));if(w.complete)m();else return w.addEventListener("load",m),()=>w.removeEventListener("load",m)},[e,n?.canvasMergedAt,n?.filename,n?.image,n?.url,x?.dataUrl,a]),{imageHasAlpha:_,backgroundCleanupSeeds:M,backgroundCleanupBrushStrokes:v,backgroundCleanupTolerance:R,backgroundCleanupPreview:x,backgroundCleanupMaskOverlay:S,backgroundCleanupStats:Y,cleanupIntent:A,setCleanupIntent:O,cleanupTool:T,setCleanupTool:N,cleanupClickEngine:p,setCleanupClickEngine:C,cleanupBrushRadius:le,setCleanupBrushRadius:I,cleanupBrushCursor:F,setCleanupBrushCursor:g,isBackgroundCleanupActive:ae,setIsBackgroundCleanupActive:re,isBackgroundCleanupPickingSeed:ae&&T==="click",isBackgroundCleanupPreviewing:D,isBackgroundCleanupApplying:de,hasActiveCleanupStroke:!!Z.current,canUndoBackgroundCleanup:K.current.past.length>0,canRedoBackgroundCleanup:K.current.future.length>0,resetBackgroundCleanup:he,undoBackgroundCleanup:oe,redoBackgroundCleanup:we,addBackgroundCleanupClick:De,addBackgroundCleanupSeed:De,runBackgroundCleanupPreview:We,handleBackgroundCleanupAutoSample:$e,handleBackgroundCleanupPickSeed:Ue,handleBackgroundCleanupToleranceChange:W,handleBackgroundCleanupReset:He,handleBackgroundCleanupApply:fe,handleBackgroundCleanupEscape:ue,startBackgroundCleanupBrushStroke:Fe,updateBackgroundCleanupBrushStroke:Ve,endBackgroundCleanupBrushStroke:ve}}function wt(e){return Math.min(1,Math.max(0,e))}function _t(e,t){const n=t.getBoundingClientRect();return{x:wt((e.clientX-n.left)/n.width),y:wt((e.clientY-n.top)/n.height)}}const Aa=.18,Ia=.12;function Na(e){return{id:"selection-box",x:Math.min(e.start.x,e.current.x),y:Math.min(e.start.y,e.current.y),width:Math.abs(e.current.x-e.start.x),height:Math.abs(e.current.y-e.start.y),color:"#64c8ff",strokeWidth:2}}function ot(e,t,n=0){return e.x>=t.x-n&&e.x<=t.x+t.width+n&&e.y>=t.y-n&&e.y<=t.y+t.height+n}function Ot(e){return{id:e.id,x:e.x,y:e.y,width:Aa,height:Ia,color:e.color,strokeWidth:1}}function Ra(e,t,n){const a=n.x-t.x,r=n.y-t.y,l=e.x-t.x,s=e.y-t.y,d=a*a+r*r;if(d===0)return Math.hypot(e.x-t.x,e.y-t.y);const u=Math.max(0,Math.min(1,(l*a+s*r)/d));return Math.hypot(e.x-(t.x+u*a),e.y-(t.y+u*r))}function La(e,t,n){for(let a=1;a<t.points.length;a+=1)if(Ra(e,t.points[a-1],t.points[a])<=n)return!0;return!1}function Mt(e,t){return e.x<=t.x+t.width&&e.x+e.width>=t.x&&e.y<=t.y+t.height&&e.y+e.height>=t.y}function Oa(e,t){return e.points.some(n=>ot(n,t))}function Et(e){const t=e.tolerance??.015;for(const n of[...e.memos].reverse())if(ot(e.point,Ot(n),t))return Pt(n);for(const n of[...e.boxes].reverse())if(ot(e.point,n,t))return Tt(n);for(const n of[...e.paths].reverse())if(La(e.point,n,t))return jt(n);return null}function $a(e){const t=[];for(const n of e.annotations.paths)Oa(n,e.box)&&t.push(jt(n));for(const n of e.annotations.boxes)Mt(n,e.box)&&t.push(Tt(n));for(const n of e.annotations.memos)Mt(Ot(n),e.box)&&t.push(Pt(n));return t}function Ua({canvasOpen:e,canvasZoom:t,canvasPanX:n,canvasPanY:a,spaceHeld:r,canDragViewportWithSelect:l,isBackgroundCleanupActive:s,cleanupTool:d,annotationFrameRef:u,annotations:i,setCanvasPan:b,addBackgroundCleanupClick:f,startBackgroundCleanupBrushStroke:_,updateBackgroundCleanupBrushStroke:B,endBackgroundCleanupBrushStroke:A,setCleanupBrushCursor:O}){const T=c.useRef({mode:null,lastPoint:null,didMove:!1}),N=c.useRef({active:!1,startX:0,startY:0,basePanX:0,basePanY:0,pointerId:null}),[p,C]=c.useState(!1),M=x=>{x.currentTarget.setPointerCapture(x.pointerId),N.current={active:!0,startX:x.clientX,startY:x.clientY,basePanX:n,basePanY:a,pointerId:x.pointerId},C(!0)};return{viewportPanActive:p,resetPointerSession:()=>{T.current={mode:null,lastPoint:null,didMove:!1},N.current={active:!1,startX:0,startY:0,basePanX:0,basePanY:0,pointerId:null},C(!1)},handleAnnotationPointerDown:x=>{if(!e||me(x.target)||!u.current)return;const E=x.button===1;if(r||E){x.preventDefault(),M(x);return}x.preventDefault();const S=_t(x,u.current);if(s){d==="click"?f(S):(x.currentTarget.setPointerCapture(x.pointerId),_(S));return}if(i.activeTool==="select"){const P=Et({point:S,paths:i.paths,boxes:i.boxes,memos:i.memos});if(P)x.shiftKey?i.toggleSelected(P):i.selectOne(P),i.startSelectedMove(),T.current={mode:"move",lastPoint:S,didMove:!1};else if(l&&t>1.01){M(x);return}else i.clearSelection(),i.startSelectionBox(S),T.current={mode:"box",lastPoint:S,didMove:!1};x.currentTarget.setPointerCapture(x.pointerId);return}if(i.activeTool==="memo"){i.createMemo(S),requestAnimationFrame(()=>{u.current?.querySelector(".canvas-memo--active")?.focus()});return}if(i.activeTool==="eraser"){if(i.eraserMode==="object"){const P=Et({point:S,paths:i.paths,boxes:i.boxes,memos:i.memos});P&&i.eraseObjectAtPoint(P);return}x.currentTarget.setPointerCapture(x.pointerId),i.startEraserStroke(S);return}x.currentTarget.setPointerCapture(x.pointerId),i.startDrawing(S)},handleAnnotationPointerMove:x=>{if(!e||me(x.target)||!u.current)return;if(N.current.active){const S=x.clientX-N.current.startX,P=x.clientY-N.current.startY;b(N.current.basePanX+S,N.current.basePanY+P);return}const E=_t(x,u.current);if(s){d==="brush"?B(E):O(E);return}if(i.activeTool==="select"){if(T.current.mode==="move"&&T.current.lastPoint){const S={x:E.x-T.current.lastPoint.x,y:E.y-T.current.lastPoint.y};(Math.abs(S.x)>5e-4||Math.abs(S.y)>5e-4)&&(i.moveSelected(S),T.current.didMove=!0),T.current.lastPoint=E}else T.current.mode==="box"&&i.updateSelectionBox(E);return}if(i.activeTool!=="memo"){if(i.activeTool==="eraser"){i.eraserMode==="brush"&&i.updateEraserStroke(E);return}i.moveDrawing(E)}},handleAnnotationPointerUp:x=>{if(e&&!me(x.target)){if(N.current.active&&N.current.pointerId===x.pointerId){x.currentTarget.hasPointerCapture(x.pointerId)&&x.currentTarget.releasePointerCapture(x.pointerId),N.current={active:!1,startX:0,startY:0,basePanX:0,basePanY:0,pointerId:null},C(!1);return}if(x.currentTarget.hasPointerCapture(x.pointerId)&&x.currentTarget.releasePointerCapture(x.pointerId),s){d==="brush"&&A();return}if(i.activeTool==="select"){T.current.mode==="move"&&T.current.didMove&&i.commitSelectedMove(),T.current.mode==="box"&&i.selectionBox&&i.endSelectionBox($a({box:Na(i.selectionBox),annotations:i.toPayload()})),T.current={mode:null,lastPoint:null,didMove:!1};return}if(i.activeTool!=="memo"){if(i.activeTool==="eraser"){i.eraserMode==="brush"&&i.endEraserStroke();return}i.endDrawing()}}},handleAnnotationPointerLeave:()=>{s&&O(null)}}}function Wa({canvasOpen:e,canvasZoom:t,currentImage:n,annotations:a,undoBackgroundCleanup:r,redoBackgroundCleanup:l,handleBackgroundCleanupEscape:s,handleCloseCanvas:d,selectHistoryShortcutTarget:u,trashHistoryItem:i,permanentlyDeleteHistoryItemByShortcut:b,setCanvasZoom:f,resetCanvasZoom:_,onCreateBlankCanvas:B,isCreatingBlankCanvas:A}){const[O,T]=c.useState(!1);return c.useEffect(()=>{if(!e)return;const p=v=>{v.preventDefault()},C=v=>{v.ctrlKey&&v.preventDefault()},M={passive:!1,capture:!0},y={passive:!1};return window.addEventListener("wheel",C,M),window.addEventListener("gesturestart",p,y),window.addEventListener("gesturechange",p,y),window.addEventListener("gestureend",p,y),()=>{window.removeEventListener("wheel",C,M),window.removeEventListener("gesturestart",p,y),window.removeEventListener("gesturechange",p,y),window.removeEventListener("gestureend",p,y)}},[e]),c.useEffect(()=>{if(!e)return;const p=M=>{M.code==="Space"&&(me(M.target)||(O||T(!0),M.preventDefault()))},C=M=>{M.code==="Space"&&T(!1)};return window.addEventListener("keydown",p),window.addEventListener("keyup",C),()=>{window.removeEventListener("keydown",p),window.removeEventListener("keyup",C)}},[e,O]),c.useEffect(()=>{if(!e)return;const p=C=>{if(!C.defaultPrevented){if(me(C.target)){C.key==="Escape"&&(C.preventDefault(),C.target.blur(),a.focusMemo(null));return}if(C.key==="Escape"){if(C.preventDefault(),s())return;d();return}if(C.shiftKey&&!C.metaKey&&!C.ctrlKey&&!C.altKey&&C.key.toLowerCase()==="b"){C.preventDefault(),!A&&!C.repeat&&B();return}if((C.metaKey||C.ctrlKey)&&C.key.toLowerCase()==="z"){if(C.preventDefault(),C.shiftKey){if(l())return;a.redo();return}if(r())return;a.undo()}}};return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[a,a.focusMemo,a.redo,a.undo,e,d,s,A,B,l,r]),{spaceHeld:O,handleViewerKeyDown:p=>{if(me(p.target)){p.key==="Escape"&&(p.preventDefault(),p.target.blur(),a.focusMemo(null));return}if(e&&["1","2","3","4","5","6"].includes(p.key)){p.preventDefault();const C=["select","pen","box","arrow","memo","eraser"];a.setTool(C[Number(p.key)-1]);return}if(e&&p.key==="Escape"){if(p.preventDefault(),p.stopPropagation(),s())return;d();return}if(e&&p.key==="]"){p.preventDefault(),f(t+.1);return}if(e&&p.key==="["){p.preventDefault(),f(t-.1);return}if(e&&p.key==="0"){p.preventDefault(),_();return}if(p.key==="Delete"||p.key==="Backspace"){if(!n||p.target!==p.currentTarget)return;if(p.preventDefault(),p.shiftKey){b(n);return}i(n);return}p.key!=="ArrowLeft"&&p.key!=="ArrowRight"&&p.key!=="Home"&&p.key!=="End"||p.target===p.currentTarget&&(me(p.target)||(p.preventDefault(),p.key==="ArrowLeft"?u("previous"):p.key==="ArrowRight"?u("next"):p.key==="Home"?u("first"):p.key==="End"&&u("last")))}}}function Ha(e,t){return new Promise((n,a)=>{e.toBlob(r=>{if(r){n(r);return}a(new Error("canvas_blob_unavailable"))},t)})}async function $t(e){const t=document.createElement("canvas");t.width=e.imageElement.naturalWidth,t.height=e.imageElement.naturalHeight;const n=t.getContext("2d");if(!n)throw new Error("canvas_context_unavailable");e.background?.mode==="matte"&&(n.fillStyle=e.background.color,n.fillRect(0,0,t.width,t.height)),n.drawImage(e.imageElement,0,0,t.width,t.height);const a={width:t.width,height:t.height};for(const l of e.paths)nt(n,l,a);for(const l of e.boxes)at(n,l,a,"committed");for(const l of e.memos)En(n,l,a);return{blob:await Ha(t,"image/png"),dataUrl:t.toDataURL("image/png")}}async function Fa(e){return(await $t(e)).blob}function Va(e={},t=new Date){const n=t.toISOString().slice(0,19).replace(/[-:T]/g,""),a=e.matte?"-flat":"";return`canvas-export-${n}${a}.png`}function Ka(e,t){const n=URL.createObjectURL(e);try{const a=document.createElement("a");a.href=n,a.download=t,a.click()}finally{URL.revokeObjectURL(n)}}function za({imageElementRef:e,currentImage:t,canvasDisplayImage:n,canvasSourceImageRef:a,lastMergedDataUrlRef:r,canvasVersionItem:l,annotations:s,exportBackground:d,exportMatteColor:u,quality:i,format:b,moderation:f,provider:_,imageModel:B,reasoningEffort:A,promptMode:O,webSearchEnabled:T,getResolvedSize:N,setCanvasVersionItem:p,setCanvasSaveState:C,setIsApplying:M,setIsExporting:y,setIsEditingWithMask:v,applyMergedCanvasImage:X,addGeneratedHistoryItem:R,attachCanvasVersionReference:$,closeCanvas:x,resetCanvasSession:E,showToast:S,t:P}){const Y=c.useCallback(async()=>{if(!e.current||!t)return null;const I=a.current??t;if(!I?.filename)return S(P("canvas.version.failed"),!0),null;M(!0),C("saving");try{const F=await $t({imageElement:e.current,paths:s.paths,boxes:s.boxes,memos:s.memos});r.current=F.dataUrl;const g=l?.filename?await ln(l.filename,{image:F.blob,sourceFilename:I.canvasSourceFilename??I.filename,prompt:I.prompt}):await St({sourceFilename:I.filename,image:F.blob,prompt:I.prompt}),D=ct(g.item,I);return p(D),X(D),await $(D),await Bt(I.filename).catch(()=>{}),s.resetLocal(),s.markSaved(),C("saved"),S(P("canvas.version.saved")),D}catch{return C("error"),S(P("canvas.version.failed"),!0),null}finally{M(!1)}},[s,X,$,a,l?.filename,t,e,r,C,p,M,S,P]);return{saveCanvasVersionAndUseReference:Y,handleApplyCanvas:async()=>{await Y()},handleCloseCanvas:async()=>{(s.hasAnnotations||s.isDirty)&&!await Y()||(x(),E())},handleExportCanvas:async()=>{if(!(!e.current||!t)){y(!0);try{const I=d==="matte",F=await Fa({imageElement:e.current,paths:s.paths,boxes:s.boxes,memos:s.memos,background:I?{mode:"matte",color:u}:{mode:"alpha"}});Ka(F,Va({matte:I}))}catch{S(P("canvas.toolbar.exportFailed"),!0)}finally{y(!1)}}},handleEditWithMask:async()=>{if(!(!e.current||!n||s.boxes.length===0)){v(!0);try{let I=r.current;if(s.isDirty||s.hasAnnotations){if(!await Y())return;I=r.current}I||(I=await Ca(e.current));const F=s.boxes.filter(de=>s.selectedIds.some(ce=>pe(ce,"box",de.id))),g=await ka({imageElement:e.current,boxes:F.length>0?F:s.boxes}),D=n.prompt??t?.prompt??"";if(!D.trim()){S(P("toast.noPromptToFork"),!0);return}const J=await cn({image:I,mask:await it(g),prompt:D,quality:i,size:n.size??t?.size??N(),format:b,moderation:f,provider:_,n:1,model:B,reasoningEffort:A,mode:O,webSearchEnabled:T});await R(ma(J,D))}catch(I){const F=I.code;S(P(F==="EDIT_MASK_NOT_SUPPORTED"?"canvas.toolbar.editMaskUnsupported":"canvas.toolbar.editMaskFailed"),!0)}finally{v(!1)}}}}}function qa(e){const t=j(h=>h.currentImage),n=j(h=>h.history),a=j(h=>h.importLocalImageToHistory),[r,l]=c.useState(!1),s=j(h=>{const se=h.multimodePreviewFlightId;return se?h.multimodeSequences[se]??null:null}),d=j(h=>h.selectHistoryShortcutTarget),u=j(h=>h.trashHistoryItem),i=j(h=>h.permanentlyDeleteHistoryItemByShortcut),b=j(h=>h.markGeneratedResultsSeen),f=j(h=>h.activeGenerations),_=j(h=>h.quality),B=j(h=>h.format),A=j(h=>h.moderation),O=j(h=>h.provider),T=j(h=>h.imageModel),N=j(h=>h.reasoningEffort),p=j(h=>h.promptMode),C=j(h=>h.webSearchEnabled),M=j(h=>h.getResolvedSize),y=j(h=>h.showToast),v=j(h=>h.canvasOpen),X=j(h=>h.openCanvas),R=j(h=>h.closeCanvas),$=j(h=>h.canvasZoom),x=j(h=>h.canvasPanX),E=j(h=>h.canvasPanY),S=j(h=>h.setCanvasPan),P=j(h=>h.setCanvasZoom),Y=j(h=>h.resetCanvasZoom),ne=j(h=>h.canvasExportBackground),ae=j(h=>h.canvasExportMatteColor),re=j(h=>h.setCanvasExportBackground),le=j(h=>h.setCanvasExportMatteColor),I=j(h=>h.applyMergedCanvasImage),F=j(h=>h.addGeneratedHistoryItem),g=j(h=>h.attachCanvasVersionReference),{t:D}=ke(),{creatingBlankCanvas:J,createBlankCanvas:de}=un(),ce=c.useRef(null),G=c.useRef(null),Q=c.useRef(null),Z=c.useRef(null),K=c.useRef(null),k=c.useRef(null),H=c.useRef(null),ee=c.useRef(null),[U,te]=c.useState(null),[z,V]=c.useState("idle"),[he,oe]=c.useState(!1),[we,De]=c.useState(!1),[$e,Ue]=c.useState(!1),W=Mn(),We=()=>{t?.prompt&&(navigator.clipboard.writeText(t.prompt),y(D("toast.promptCopied")))},He=da(t?.quality??_),Fe=ha(t?.size??M()),Ve=dn(t?.model),ve=t?.filename??t?.url??t?.image??null,fe=pa(n,t),ue=v?U??fe??t:t,w=ue?fa(ue):null,m=Da({canvasOpen:v,currentImage:t,canvasDisplayImage:ue,imageElementRef:G,canvasSourceImageRef:H,lastMergedDataUrlRef:ee,setCanvasSaveState:V,setCanvasVersionItem:te,applyMergedCanvasImage:I,attachCanvasVersionReference:g,showToast:y,t:D}),{imageHasAlpha:L,backgroundCleanupSeeds:q,backgroundCleanupPreview:ie,backgroundCleanupMaskOverlay:Ce,backgroundCleanupBrushStrokes:be,cleanupTool:_e,cleanupBrushRadius:Ut,cleanupBrushCursor:Wt,isBackgroundCleanupActive:Me}=m,Ke=m.backgroundCleanupPreview?.dataUrl??w,ze=()=>{H.current=null,K.current=null,k.current!=null&&(window.clearTimeout(k.current),k.current=null),te(null),V("idle"),m.resetBackgroundCleanup(),ee.current=null,Jt()};c.useEffect(()=>{if(!v){Z.current=ve,ze();return}if(Z.current===null){Z.current=ve,H.current=t,te(fe);return}Z.current!==ve&&(W.resetLocal(),ze(),H.current=t,te(fe),Z.current=ve)},[W.resetLocal,v,t,ve,fe]),c.useEffect(()=>{!v||!t||H.current||(H.current=t,te(fe))},[v,t,fe]),c.useEffect(()=>{if(!v||!t?.filename||t.canvasVersion)return;const h=t.filename;if(K.current===h)return;K.current=h;let se=!1;return hn(h).then(Ee=>{!se&&Ee.annotations&&W.load(Ee.annotations)}).catch(()=>{}),()=>{se=!0}},[W.load,v,t?.canvasVersion,t?.filename]),c.useEffect(()=>{if(!v||!t?.filename||t.canvasVersion||!W.isDirty)return;const h=t.filename;return k.current!=null&&window.clearTimeout(k.current),k.current=window.setTimeout(()=>{const se=W.toPayload();(W.hasAnnotations?fn(h,se):Bt(h)).then(()=>W.markSaved()).catch(()=>{})},500),()=>{k.current!=null&&(window.clearTimeout(k.current),k.current=null)}},[W,W.hasAnnotations,W.isDirty,v,t?.canvasVersion,t?.filename]);const Ht=h=>{me(h.target)||(b(),h.currentTarget.focus())},Ft=c.useCallback(()=>{window.requestAnimationFrame(()=>Q.current?.focus())},[]),Vt=h=>{if(v){if(h.preventDefault(),h.ctrlKey){P($-h.deltaY*.01);return}S(x-h.deltaX,E-h.deltaY)}},Kt=c.useCallback(h=>{Array.from(h.dataTransfer.types).includes("Files")&&(h.preventDefault(),l(se=>se||!0))},[]),zt=c.useCallback(h=>{h.currentTarget.contains(h.relatedTarget)||l(!1)},[]),Xt=c.useCallback(async h=>{if(!Array.from(h.dataTransfer.types).includes("Files"))return;h.preventDefault(),l(!1);const se=Array.from(h.dataTransfer.files).filter(Ee=>/^image\/(png|jpeg|webp)$/.test(Ee.type));se.length!==0&&await a(se[0])},[a]),{handleApplyCanvas:qt,handleCloseCanvas:dt,handleExportCanvas:Yt,handleEditWithMask:Gt}=za({imageElementRef:G,currentImage:t,canvasDisplayImage:ue,canvasSourceImageRef:H,lastMergedDataUrlRef:ee,canvasVersionItem:U,annotations:W,exportBackground:ne,exportMatteColor:ae,quality:_,format:B,moderation:A,provider:O,imageModel:T,reasoningEffort:N,promptMode:p,webSearchEnabled:C,getResolvedSize:M,setCanvasVersionItem:te,setCanvasSaveState:V,setIsApplying:oe,setIsExporting:De,setIsEditingWithMask:Ue,applyMergedCanvasImage:I,addGeneratedHistoryItem:F,attachCanvasVersionReference:g,closeCanvas:R,resetCanvasSession:ze,showToast:y,t:D}),{spaceHeld:Xe,handleViewerKeyDown:Zt}=Wa({canvasOpen:v,canvasZoom:$,currentImage:t,annotations:W,undoBackgroundCleanup:m.undoBackgroundCleanup,redoBackgroundCleanup:m.redoBackgroundCleanup,handleBackgroundCleanupEscape:m.handleBackgroundCleanupEscape,handleCloseCanvas:dt,selectHistoryShortcutTarget:d,trashHistoryItem:u,permanentlyDeleteHistoryItemByShortcut:i,setCanvasZoom:P,resetCanvasZoom:Y,onCreateBlankCanvas:de,isCreatingBlankCanvas:J}),qe=v&&$>1.01&&W.activeTool==="select"&&!Me,{viewportPanActive:Ye,resetPointerSession:Jt,handleAnnotationPointerDown:Qt,handleAnnotationPointerMove:en,handleAnnotationPointerUp:tn,handleAnnotationPointerLeave:nn}=Ua({canvasOpen:v,canvasZoom:$,canvasPanX:x,canvasPanY:E,spaceHeld:Xe,canDragViewportWithSelect:qe,isBackgroundCleanupActive:Me,cleanupTool:_e,annotationFrameRef:ce,annotations:W,setCanvasPan:S,addBackgroundCleanupClick:m.addBackgroundCleanupClick,startBackgroundCleanupBrushStroke:m.startBackgroundCleanupBrushStroke,updateBackgroundCleanupBrushStroke:m.updateBackgroundCleanupBrushStroke,endBackgroundCleanupBrushStroke:m.endBackgroundCleanupBrushStroke,setCleanupBrushCursor:m.setCleanupBrushCursor});return o.jsxs("main",{className:`canvas${v?" canvas--mode-open":""}${r?" canvas--drop-active":""}${Xe?" canvas--space-held":""}${Ye?" canvas--pan-active":""}${qe?" canvas--zoom-hand":""}`,onDragOver:Kt,onDragLeave:zt,onDrop:Xt,children:[r?o.jsx("div",{className:"canvas__drop-overlay","aria-hidden":!0,children:o.jsx("span",{className:"canvas__drop-hint",children:D("canvas.drop.hint")})}):null,v&&o.jsx(sa,{zoom:$,closeLabel:D("canvas.close"),blankCanvasLabel:D("canvas.blank.title"),blankCanvasAriaLabel:`${D(J?"canvas.blank.creating":"canvas.blank.create")} (Shift+B)`,blankCanvasShortcut:"Shift+B",blankCanvasBusy:J,shortcutHint:D("canvas.toolbar.zoomShortcutHint"),onZoomIn:()=>P($+.1),onZoomOut:()=>P($-.1),onZoomReset:Y,onCreateBlankCanvas:()=>{de()},onClose:()=>{dt()}}),o.jsx("div",{className:`progress-bar${f>0?" active":""}`}),s?o.jsx(pn,{}):t?o.jsxs("div",{ref:Q,className:"result-container visible",tabIndex:0,onMouseDown:Ht,onWheel:Vt,onKeyDown:Zt,"aria-label":D("canvas.imageViewerAria"),children:[o.jsx(An,{annotationFrameRef:ce,imageElementRef:G,frameClassName:`canvas-annotation-frame${(L||ie)&&v?" canvas-annotation-frame--alpha":""}${Me&&v?" canvas-annotation-frame--cleanup-picking":""}${Ce&&v?" canvas-annotation-frame--cleanup-mask":""}`,frameStyle:{cursor:Ye?"grabbing":Xe||qe?"grab":v?Me?"crosshair":W.activeTool==="select"?"default":W.activeTool==="eraser"?W.eraserMode==="object"?ia:ua:"crosshair":"zoom-in",transform:v?`translate(${x}px, ${E}px) scale(${$})`:void 0,transition:v&&!Ye?"transform 0.2s ease":void 0},imageKey:`${ue?.filename??ue?.url??ue?.image}:${ue?.canvasMergedAt??""}`,imageSrc:Ke??t.image,fallbackImage:t.image,alt:D("canvas.resultAlt"),canvasOpen:v,maskOverlayUrl:Ce?.dataUrl??null,cleanupLayer:o.jsx(Rn,{seeds:q,brushStrokes:be,brushCursor:Wt,brushRadius:Ut,active:Me}),annotations:W,onOpenCanvas:X,onPointerDown:Qt,onPointerMove:en,onPointerUp:tn,onPointerLeave:nn}),v&&Ke?o.jsx(ca,{imageSrc:Ke,zoom:$,panX:x,panY:E,resetLabel:D("canvas.toolbar.zoomReset"),onReset:Y}):null,v&&o.jsx(ta,{annotations:W,backgroundCleanup:m,backgroundCleanupPreview:ie,canvasState:{exportBackground:ne,exportMatteColor:ae,isApplying:he,isExporting:we,isEditingWithMask:$e},actions:{handleApplyCanvas:qt,handleExportCanvas:Yt,handleEditWithMask:Gt,setExportBackground:re,setExportMatteColor:le}}),v&&z!=="idle"?o.jsx("div",{className:`canvas-save-state canvas-save-state--${z}`,children:D(z==="saving"?"canvas.version.saving":z==="saved"?"canvas.version.saved":"canvas.version.failed")}):null,o.jsx(na,{currentImage:t,canvasDisplayImage:ue,canvasOpen:v,displayQuality:He,displaySize:Fe,displayModel:Ve,onAfterDeleteFocus:Ft,onCopyPrompt:We})]}):null]})}export{qa as CanvasModeWorkspace};
|
package/ui/dist/index.html
CHANGED
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
}
|
|
35
35
|
})();
|
|
36
36
|
</script>
|
|
37
|
-
<script type="module" crossorigin src="/assets/index-
|
|
38
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
37
|
+
<script type="module" crossorigin src="/assets/index-DQ6jg4Ui.js"></script>
|
|
38
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DMjgFXdO.css">
|
|
39
39
|
</head>
|
|
40
40
|
<body>
|
|
41
41
|
<div id="root"></div>
|
|
Binary file
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{a as d,j as e,u as p,o as Qe,b as B,U as xe}from"./index-Ci36vcFD.js";async function E(n,t){const s=await fetch(n,t);if(!s.ok){const a=await s.json().catch(()=>({})),r=a.error,l=typeof r=="string"?r:r?.message??`Request failed: ${s.status}`,o=new Error(l);throw o.status=s.status,o.code=typeof r=="object"?r?.code:a.code,o}return await s.json()}function Fe(n){return n.filename?`/generated/${n.filename}`:typeof n.url=="string"&&n.url?n.url:typeof n.thumb=="string"&&n.thumb?n.thumb:null}function Ke(n){const t=Fe(n);if(!t)return null;const s=n.filename??n.canvasEditableFilename??"current-image.png";return{id:`current-${s}`,filename:s,url:t,thumbUrl:n.thumb??t,prompt:n.prompt??n.userPrompt??null,revisedPrompt:n.revisedPrompt??null,createdAt:n.createdAt??Date.now()}}async function oe(n){const t=n?`?selectedSessionId=${encodeURIComponent(n)}`:"";return E(`/api/agent/sessions${t}`)}async function ie(n){const t=n.currentImage?Ke(n.currentImage):null;return E("/api/agent/sessions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:n.title,currentImage:t,webSearchEnabled:n.webSearchEnabled??!0})})}async function J(n,t){return E(`/api/agent/sessions/${encodeURIComponent(n)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}async function Ge(n){return E(`/api/agent/sessions/${encodeURIComponent(n)}`,{method:"DELETE"})}async function Ve(n,t,s){return E(`/api/agent/sessions/${encodeURIComponent(n)}/queue`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:t,options:s})})}async function He(n){return E(`/api/agent/queue/${encodeURIComponent(n)}/cancel`,{method:"POST"})}async function Je(n){return E(`/api/agent/queue/${encodeURIComponent(n)}/retry`,{method:"POST"})}const Xe={provider:"oauth",model:"gpt-5.4-mini",quality:"medium",size:"1024x1024",format:"png",moderation:"low",reasoningEffort:"medium",webSearchEnabled:!0,generationStrategy:"auto",variants:1,maxAutoVariants:8,parallelism:2};function ce(n){return{...Xe,...n??{}}}function ue(n){const{width:t,height:s}=n;return s<560&&t<1280?"mobile-chat-image-sheet":t>=1280?"desktop-three-pane":t>=960&&s>=560?"desktop-rail":t>=768&&s>=700?"tablet-stacked":"mobile-chat-image-sheet"}function de(){return typeof window>"u"?1440:window.innerWidth}function ge(){return typeof window>"u"?900:window.innerHeight}function Ye(){const[n,t]=d.useState(()=>ue({width:de(),height:ge()}));return d.useEffect(()=>{const s=()=>t(ue({width:de(),height:ge()}));return s(),window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[]),n}function w({size:n=16,children:t}){return e.jsx("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:t})}function Y(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M12 5v14"}),e.jsx("path",{d:"M5 12h14"})]})}function je(n){return e.jsxs(w,{...n,children:[e.jsx("circle",{cx:"11",cy:"11",r:"7"}),e.jsx("path",{d:"M21 21l-4.3-4.3"})]})}function D(n){return e.jsxs(w,{...n,children:[e.jsx("rect",{x:"3",y:"5",width:"18",height:"14",rx:"2"}),e.jsx("circle",{cx:"8",cy:"10",r:"1.5"}),e.jsx("path",{d:"M21 16l-5-5L5 19"})]})}function Z(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M18 6L6 18"}),e.jsx("path",{d:"M6 6l12 12"})]})}function Ze(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M22 2L11 13"}),e.jsx("path",{d:"M22 2l-7 20-4-9-9-4 20-7z"})]})}function en(n){return e.jsx(w,{...n,children:e.jsx("path",{d:"M21.4 11.1l-9.2 9.1a6 6 0 0 1-8.5-8.5l9.2-9.2a4 4 0 0 1 5.7 5.7l-9.2 9.2a2 2 0 0 1-2.8-2.8l8.5-8.5"})})}function nn(n){return e.jsxs(w,{...n,children:[e.jsx("circle",{cx:"12",cy:"12",r:"10"}),e.jsx("path",{d:"M2 12h20"}),e.jsx("path",{d:"M12 2a15.3 15.3 0 0 1 0 20"}),e.jsx("path",{d:"M12 2a15.3 15.3 0 0 0 0 20"})]})}function fe(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M4 6h16"}),e.jsx("path",{d:"M4 12h16"}),e.jsx("path",{d:"M4 18h16"})]})}function tn(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M3 6h18"}),e.jsx("path",{d:"M8 6V4h8v2"}),e.jsx("path",{d:"M19 6l-1 14H6L5 6"})]})}function sn(n){return e.jsxs(w,{...n,children:[e.jsx("path",{d:"M12 20h9"}),e.jsx("path",{d:"M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"})]})}function be(n){return e.jsx(w,{...n,children:e.jsx("path",{d:"M6 9l6 6 6-6"})})}function ye(n){return e.jsx(w,{...n,children:e.jsx("path",{d:"M9 6l6 6-6 6"})})}const he=[{name:"question",display:"/question",aliases:["question","ask","q"],descriptionKey:"agent.slashDesc_question"},{name:"variants",display:"/variants <N>",aliases:["variants","variant","v","n"],descriptionKey:"agent.slashDesc_variants",hasValue:!0},{name:"generate",display:"/generate <N>",aliases:["generate","gen","g"],descriptionKey:"agent.slashDesc_generate",hasValue:!0},{name:"parallelism",display:"/parallelism <N>",aliases:["parallelism","parallel","p"],descriptionKey:"agent.slashDesc_parallelism",hasValue:!0},{name:"help",display:"/help",aliases:["help","h"],descriptionKey:"agent.slashDesc_help"}];function Se(n){const t=n.toLowerCase();return t?he.filter(s=>s.aliases.some(a=>a.startsWith(t))):he}function an({listboxId:n,query:t,highlightIndex:s,onSelect:a,onHighlightChange:r}){const{t:l}=p(),o=Se(t);return o.length===0?null:e.jsx("ul",{id:n,className:"slash-command-menu",role:"listbox","aria-label":l("agent.slashCommands"),children:o.map((i,c)=>e.jsxs("li",{id:`${n}-opt-${c}`,role:"option","aria-selected":c===s,className:`slash-command-menu__item${c===s?" is-highlighted":""}`,onMouseDown:u=>u.preventDefault(),onClick:()=>a(i),onMouseEnter:()=>r(c),children:[e.jsx("span",{className:"slash-command-menu__name",children:i.display}),e.jsx("span",{className:"slash-command-menu__desc",children:l(i.descriptionKey)})]},i.name))})}function rn({webSearchEnabled:n,insertedPrompt:t,onWebSearchChange:s,onSend:a}){const{t:r}=p(),[l,o]=d.useState(""),[i,c]=d.useState(0),[u,m]=d.useState(!1),h=d.useRef(null),x=d.useId(),j=l.trim().length>0,y=l.trimStart().match(/^\/([a-z]*)$/i),M=y!==null,I=M&&!u,T=y?.[1]??"",_=Se(T),q=I&&_.length>0,A=_.length>0?Math.min(i,_.length-1):0,O=q?`${x}-opt-${A}`:void 0;d.useEffect(()=>{c(0),m(!1)},[T]),d.useEffect(()=>{M&&m(!1)},[M]),d.useEffect(()=>{t?.text&&o(f=>f.trim()?`${f.trim()}
|
|
2
|
-
|
|
3
|
-
${t.text}`:t.text)},[t]);const N=()=>{const f=l.trim();f&&(a(f),o(""))},S=f=>{o(`/${f.name} `),h.current?.focus()};return e.jsxs("div",{className:"agent-composer",children:[q&&e.jsx(an,{listboxId:x,query:T,highlightIndex:A,onSelect:S,onHighlightChange:c}),e.jsx("textarea",{ref:h,value:l,"aria-autocomplete":"list","aria-haspopup":"listbox","aria-label":r("agent.composerPlaceholder"),...q?{"aria-controls":x}:{},"aria-activedescendant":O,autoCapitalize:"off",autoCorrect:"off",placeholder:r("agent.composerPlaceholder"),onChange:f=>o(f.target.value),onKeyDown:f=>{if(f.key==="Enter"&&(f.metaKey||f.ctrlKey)){f.preventDefault(),N();return}if(q)switch(f.key){case"Tab":{f.preventDefault(),S(_[A]);return}case"ArrowDown":{f.preventDefault(),c((A+1)%_.length);return}case"ArrowUp":{f.preventDefault(),c((A-1+_.length)%_.length);return}case"Enter":{f.preventDefault(),S(_[A]);return}case"Escape":{f.preventDefault(),m(!0);return}}}}),e.jsxs("div",{className:"agent-composer__actions",children:[e.jsx("button",{type:"button","aria-label":r("agent.attachReference"),title:r("agent.attachReference"),children:e.jsx(en,{size:16})}),e.jsx("button",{type:"button",className:n?"is-active":"","aria-pressed":n,onClick:()=>s(!n),"aria-label":r("agent.webSearch"),title:r("agent.webSearch"),children:e.jsx(nn,{size:16})}),e.jsxs("button",{type:"button",className:"agent-composer__send",onClick:N,disabled:!j,"aria-label":r("agent.send"),children:[e.jsx(Ze,{size:16}),e.jsx("span",{children:r("agent.send")})]})]})]})}function z({src:n,alt:t,className:s,fallbackClassName:a,iconSize:r=18}){const[l,o]=d.useState(!1);return!n||l?e.jsx("span",{className:a??"agent-image-fallback","aria-label":t,role:"img",children:e.jsx(D,{size:r})}):e.jsx("img",{className:s,src:n,alt:t,onError:()=>o(!0)})}const P=d.forwardRef(function({image:t,selected:s=!1,compact:a=!1,onSelect:r},l){const{t:o}=p(),i=`${o("agent.selectImage")}: ${t.prompt??t.filename}`,c=`${a?"agent-result-thumb agent-result-thumb--compact":"agent-result-thumb"}${s?" is-selected":""}`;return e.jsx("button",{ref:l,type:"button",className:c,"aria-label":i,"aria-current":s?"true":void 0,onClick:()=>r(t.id),title:o("agent.selectImage"),children:e.jsx(z,{src:t.thumbUrl??t.url,alt:t.prompt??o("agent.imageAlt"),iconSize:a?14:18})})});function ln({turn:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=n.role==="user"?r("agent.user"):r("agent.assistant"),o=n.imageIds??[],i=`agent-message agent-message--${n.role}${n.status==="streaming"?" is-streaming":""}`;return e.jsxs("article",{className:i,"aria-busy":n.status==="streaming"?"true":void 0,children:[e.jsx("div",{className:"agent-message__role",children:l}),e.jsx("p",{children:n.text}),o.length>0?e.jsx("div",{className:"agent-message__images",children:o.map(c=>{const u=t[c];return u?e.jsx(P,{image:u,selected:c===s,compact:!1,onSelect:a},c):null})}):null]})}const on=["ima2.get_image_context","ima2.web_search","ima2.generate_image"];function cn(n){return n.replace(/\s+/g," ").trim()||"tool"}function un(n){if(n.toolCalls?.length)return n.toolCalls;const t=cn(n.text);return on.filter(s=>t.includes(s)).map((s,a)=>({id:`${n.id}-fallback-${a}`,name:s,status:n.status==="error"?"error":n.status==="streaming"?"running":"complete",outputSummary:t,imageIds:s==="ima2.generate_image"?n.imageIds??[]:[],webFindingIds:s==="ima2.web_search"?n.webFindingIds??[]:[]}))}function ve(n){return!n||n<0?null:n<1e3?`${n}ms`:`${(n/1e3).toFixed(1)}s`}function dn({call:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=n.imageIds??[],o=ve(n.durationMs);return e.jsxs("div",{className:"agent-tool-call-details",children:[e.jsxs("dl",{children:[e.jsxs("div",{children:[e.jsx("dt",{children:r("agent.toolInput")}),e.jsx("dd",{children:n.inputSummary??"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{children:r("agent.toolOutput")}),e.jsx("dd",{children:n.errorMessage??n.outputSummary??"-"})]}),n.requestId?e.jsxs("div",{children:[e.jsx("dt",{children:r("agent.requestId")}),e.jsx("dd",{children:n.requestId})]}):null,o?e.jsxs("div",{children:[e.jsx("dt",{children:r("agent.duration")}),e.jsx("dd",{children:o})]}):null]}),l.length>0?e.jsx("div",{className:"agent-tool-call-details__artifacts","aria-label":r("agent.toolArtifacts"),children:l.map(i=>{const c=t[i];return c?e.jsx(P,{image:c,selected:i===s,compact:!0,onSelect:a},i):null})}):null]})}function gn({call:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=d.useId(),[o,i]=d.useState(!1),c=ve(n.durationMs);return e.jsxs("li",{className:`agent-tool-call-row agent-tool-call-row--${n.status}`,children:[e.jsxs("button",{type:"button",className:"agent-tool-call-row__toggle","aria-expanded":o,"aria-controls":l,"aria-busy":n.status==="running"?"true":void 0,onClick:()=>i(u=>!u),children:[e.jsx("span",{className:"agent-tool-call-row__status","aria-label":r(`agent.toolStatus.${n.status}`)}),e.jsx("span",{className:"agent-tool-call-row__name",children:n.name}),n.imageIds?.length?e.jsx("span",{className:"agent-tool-call-row__meta",children:r("agent.toolImageCount",{count:n.imageIds.length})}):null,c?e.jsx("span",{className:"agent-tool-call-row__meta",children:c}):null,o?e.jsx(be,{size:13}):e.jsx(ye,{size:13})]}),e.jsx("div",{id:l,hidden:!o,children:e.jsx(dn,{call:n,imagesById:t,currentImageId:s,onImageSelect:a})})]})}function hn(n){const t=[],s=new Set;let a=!1;const r=[];for(const l of n){const o=un(l);t.push(...o);for(const i of l.imageIds??[])s.add(i);for(const i of o)for(const c of i.imageIds??[])s.add(c);l.status==="streaming"&&(a=!0);for(const i of o)r.includes(i.name)||r.push(i.name)}return{toolCalls:t,imageIds:[...s],isStreaming:a,label:r.join(" + ")||"tool"}}function mn({turns:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=d.useId(),[o,i]=d.useState(!1),{toolCalls:c,imageIds:u,isStreaming:m,label:h}=d.useMemo(()=>hn(n),[n]),x=r(o?"agent.toolCollapse":"agent.toolExpand");return e.jsxs("article",{className:`agent-message agent-message--tool is-collapsible${m?" is-streaming":""}`,"aria-busy":m?"true":void 0,children:[e.jsxs("div",{className:"agent-message__tool-summary",children:[e.jsxs("button",{type:"button",className:"agent-message__tool-toggle","aria-expanded":o,"aria-controls":l,"aria-label":`${x}: ${h}`,onClick:()=>i(j=>!j),children:[e.jsxs("span",{className:"agent-message__tool-header",children:[e.jsx("span",{className:"agent-message__tool-dot","aria-hidden":"true"}),e.jsx("span",{className:"agent-message__role",children:r("agent.toolGroup")}),u.length>0?e.jsx("span",{className:"agent-message__tool-count",children:r("agent.toolImageCount",{count:u.length})}):null,c.length>0?e.jsx("span",{className:"agent-message__tool-count",children:r("agent.toolCallCount",{count:c.length})}):null,o?e.jsx(be,{size:14}):e.jsx(ye,{size:14})]}),e.jsx("span",{className:"agent-message__tool-label",children:h})]}),u.length>0?e.jsx("div",{className:"agent-message__tool-thumbs",children:u.map(j=>{const y=t[j];return y?e.jsx(P,{image:y,selected:j===s,compact:!0,onSelect:a},j):null})}):null]}),e.jsx("div",{id:l,className:"agent-message__tool-details",hidden:!o,children:c.length>0?e.jsx("ul",{className:"agent-tool-call-list",children:c.map(j=>e.jsx(gn,{call:j,imagesById:t,currentImageId:s,onImageSelect:a},j.id))}):null})]})}function pn(n){const t=[];let s=[];const a=()=>{s.length!==0&&(t.push({kind:"tools",turns:s,key:s.map(r=>r.id).join("+")}),s=[])};for(const r of n)r.role==="tool"?s.push(r):(a(),t.push({kind:"single",turn:r}));return a(),t}function xn({turns:n,imagesById:t,currentImageId:s,onImageSelect:a}){const{t:r}=p(),l=d.useRef(null),o=d.useMemo(()=>pn(n),[n]);return d.useEffect(()=>{const i=l.current;i&&(i.scrollTop=i.scrollHeight)},[n.length]),e.jsxs("div",{ref:l,className:"agent-message-list",children:[n.length===0?e.jsx("div",{className:"agent-message-list__empty",children:r("agent.emptyChat")}):null,o.map(i=>i.kind==="tools"?e.jsx(mn,{turns:i.turns,imagesById:t,currentImageId:s,onImageSelect:a},i.key):e.jsx(ln,{turn:i.turn,imagesById:t,currentImageId:s,onImageSelect:a},i.turn.id))]})}function jn({status:n,compacted:t=!1}){const{t:s}=p(),a=s(n==="generating"?"agent.statusGenerating":n==="reconnecting"?"agent.statusReconnecting":"agent.statusReady");return e.jsxs("span",{className:`agent-status agent-status--${n}`,"aria-live":n==="ready"?void 0:"polite",children:[n==="generating"?e.jsx("span",{className:"agent-status__dot","aria-hidden":"true"}):null,e.jsx("span",{children:a}),t?e.jsx("em",{children:s("agent.compacted")}):null]})}function fn(n){const t=n.generationStrategy==="auto"?`auto<=${n.maxAutoVariants}`:`${n.variants}x`;return`${n.model} · ${n.quality} · ${t}/${n.parallelism}p`}function bn({session:n,turns:t,imagesById:s,currentImageId:a,runtimeStatus:r,settings:l,insertedPrompt:o,onOpenModelSettings:i,onWebSearchChange:c,onImageSelect:u,onSend:m}){const{t:h}=p(),x=l?fn(l):null;return e.jsxs("section",{className:"agent-chat","aria-label":h("agent.chat"),children:[e.jsxs("header",{className:"agent-pane-header",children:[e.jsxs("div",{className:"agent-pane-header__title",children:[e.jsx("span",{children:h("agent.chat")}),e.jsx("strong",{children:n?.title??h("agent.newSession")})]}),e.jsxs("div",{className:"agent-pane-header__actions",children:[x?e.jsxs("button",{type:"button",className:"agent-model-chip","aria-label":h("agent.openModelSettings"),title:h("agent.openModelSettings"),onClick:i,children:[e.jsx("span",{children:h("agent.model")}),e.jsx("strong",{children:x})]}):null,e.jsx(jn,{status:r,compacted:n?.compacted})]})]}),e.jsx(xn,{turns:t,imagesById:s,currentImageId:a,onImageSelect:u}),e.jsx(rn,{webSearchEnabled:n?.webSearchEnabled??!1,insertedPrompt:o,onWebSearchChange:c,onSend:m})]})}const yn=["image","refs","web","memory"];function Sn({activeTab:n,onChange:t}){const{t:s}=p(),a={image:s("agent.imageTab"),refs:s("agent.refsTab"),web:s("agent.webTab"),memory:s("agent.memoryTab")};return e.jsx("div",{className:"agent-context-tabs",role:"tablist","aria-label":s("agent.contextTabs"),children:yn.map(r=>e.jsx("button",{type:"button",role:"tab","aria-selected":n===r,className:n===r?"active":"",onClick:()=>t(r),children:a[r]},r))})}function vn({activeTab:n,currentImage:t}){const{t:s}=p();return n==="refs"?e.jsx("div",{className:"agent-tab-empty",children:s("agent.noRefs")}):n==="web"?e.jsx("div",{className:"agent-tab-empty",children:s("agent.noWeb")}):n==="memory"?e.jsxs("ul",{className:"agent-memory-list",children:[e.jsx("li",{children:s("agent.memoryItemStyle")}),e.jsx("li",{children:s("agent.memoryItemSubject")})]}):e.jsxs("dl",{className:"agent-image-meta",children:[e.jsxs("div",{children:[e.jsx("dt",{children:s("agent.filename")}),e.jsx("dd",{children:t?.filename??"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{children:s("agent.prompt")}),e.jsx("dd",{children:t?.prompt??t?.revisedPrompt??"-"})]})]})}function we({currentImage:n,images:t,activeTab:s,onTabChange:a,onImageSelect:r,headerAction:l}){const{t:o}=p(),i=d.useRef({}),c=d.useMemo(()=>t.findIndex(h=>h.id===n?.id),[n?.id,t]);d.useEffect(()=>{n?.id&&i.current[n.id]?.scrollIntoView({block:"nearest",inline:"nearest"})},[n?.id]);const u=d.useCallback(h=>{const x=t[h];x&&r(x.id)},[t,r]),m=d.useCallback(h=>{if(t.length===0)return;const x=c>=0?c:0;let j=null;(h.key==="ArrowLeft"||h.key==="ArrowUp")&&(j=Math.max(0,x-1)),(h.key==="ArrowRight"||h.key==="ArrowDown")&&(j=Math.min(t.length-1,x+1)),h.key==="Home"&&(j=0),h.key==="End"&&(j=t.length-1),!(j===null||j===x)&&(h.preventDefault(),u(j))},[c,t.length,u]);return e.jsxs("section",{className:"agent-image","aria-label":o("agent.imagePane"),children:[e.jsxs("header",{className:"agent-pane-header",children:[e.jsxs("div",{className:"agent-pane-header__title",children:[e.jsx("span",{children:o("agent.imagePane")}),e.jsx("strong",{children:o("agent.currentImage")})]}),l]}),e.jsx("div",{className:"agent-image__preview",tabIndex:t.length>1?0:void 0,onKeyDown:m,"aria-label":t.length>1?o("agent.variants"):void 0,children:n?e.jsx(z,{src:n.url,alt:n.prompt??o("agent.imageAlt"),fallbackClassName:"agent-image__empty",iconSize:34}):e.jsxs("div",{className:"agent-image__empty",children:[e.jsx(D,{size:34}),e.jsx("span",{children:o("agent.noImage")})]})}),e.jsx("div",{className:"agent-image__variants","aria-label":o("agent.variants"),onKeyDown:m,children:t.map(h=>e.jsx(P,{ref:x=>{i.current[h.id]=x},image:h,selected:h.id===n?.id,onSelect:r},h.id))}),e.jsx(Sn,{activeTab:s,onChange:a}),e.jsx(vn,{activeTab:s,currentImage:n})]})}const me='button, [href], input, textarea, select, [tabindex]:not([tabindex="-1"])';function ee(n,t){const s=d.useRef(null),a=d.useRef(null);return d.useEffect(()=>{if(!n)return;a.current=document.activeElement;const r=window.setTimeout(()=>{s.current?.querySelector(me)?.focus()},0),l=o=>{if(o.key==="Escape"){o.preventDefault(),t();return}if(o.key!=="Tab")return;const i=Array.from(s.current?.querySelectorAll(me)??[]);if(i.length===0)return;const c=i[0],u=i[i.length-1];o.shiftKey&&document.activeElement===c?(o.preventDefault(),u.focus()):!o.shiftKey&&document.activeElement===u&&(o.preventDefault(),c.focus())};return document.addEventListener("keydown",l),()=>{window.clearTimeout(r),document.removeEventListener("keydown",l),a.current?.focus()}},[t,n]),s}function wn({open:n,currentImage:t,images:s,activeTab:a,onTabChange:r,onImageSelect:l,onClose:o}){const{t:i}=p(),c=d.useCallback(()=>o(),[o]),u=ee(n,c);return n?e.jsxs("div",{className:"agent-dialog agent-dialog--image",role:"presentation",children:[e.jsx("button",{type:"button",className:"agent-dialog__backdrop",onClick:o,"aria-label":i("agent.closeImage")}),e.jsx("section",{ref:u,className:"agent-image-sheet",role:"dialog","aria-modal":"true","aria-label":i("agent.imagePane"),children:e.jsx(we,{currentImage:t,images:s,activeTab:a,onTabChange:r,onImageSelect:l,headerAction:e.jsx("button",{type:"button",onClick:o,"aria-label":i("agent.closeImage"),children:e.jsx(Z,{size:17})})})})]}):null}function Ie({settings:n,onChange:t}){const{t:s}=p();return e.jsxs("section",{className:"agent-settings-grid","aria-label":s("agent.model"),children:[e.jsxs("label",{children:[e.jsx("span",{children:s("agent.model")}),e.jsx("select",{value:n.model,onChange:a=>t({model:a.target.value}),children:Qe.map(a=>e.jsx("option",{value:a.value,children:s(a.fullLabelKey)},a.value))})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.provider")}),e.jsxs("select",{value:n.provider,onChange:a=>t({provider:a.target.value}),children:[e.jsx("option",{value:"oauth",children:"OAuth"}),e.jsx("option",{value:"api",children:"API"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.reasoningEffort")}),e.jsxs("select",{value:n.reasoningEffort,onChange:a=>t({reasoningEffort:a.target.value}),children:[e.jsx("option",{value:"low",children:"low"}),e.jsx("option",{value:"medium",children:"medium"}),e.jsx("option",{value:"high",children:"high"}),e.jsx("option",{value:"xhigh",children:"xhigh"})]})]})]})}function In({open:n,settings:t,onSettingsChange:s,onClose:a}){const{t:r}=p(),l=d.useCallback(()=>a(),[a]),o=ee(n,l);return n?e.jsxs("div",{className:"agent-dialog agent-dialog--model",role:"presentation",children:[e.jsx("button",{type:"button",className:"agent-dialog__backdrop",onClick:a,"aria-label":r("agent.closeModelSettings")}),e.jsxs("section",{ref:o,className:"agent-model-sheet",role:"dialog","aria-modal":"true","aria-label":r("agent.modelSettings"),children:[e.jsxs("header",{children:[e.jsx("strong",{children:r("agent.modelSettings")}),e.jsx("button",{type:"button",onClick:a,"aria-label":r("agent.closeModelSettings"),children:e.jsx(Z,{size:17})})]}),e.jsx(Ie,{settings:t,onChange:s})]})]}):null}function _e({mode:n,onInsert:t}){const{t:s}=p(),a=B(u=>u.promptLibrary),r=B(u=>u.promptLibraryLoading),l=B(u=>u.loadPromptLibrary),[o,i]=d.useState("");d.useEffect(()=>{l()},[l]);const c=d.useMemo(()=>{const u=o.trim().toLowerCase();return a.prompts.filter(m=>{const h=m.tags.map(x=>x.toLowerCase());return n==="forms"&&!h.includes("agent:form")?!1:u?m.name.toLowerCase().includes(u)||m.text.toLowerCase().includes(u)||h.some(x=>x.includes(u)):!0})},[a.prompts,n,o]);return e.jsxs("section",{className:"agent-sidebar-section","aria-label":s(n==="forms"?"agent.forms":"agent.promptLibrary"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:s(n==="forms"?"agent.forms":"agent.promptLibrary")}),e.jsx("strong",{children:c.length})]})}),e.jsxs("label",{className:"agent-sidebar-search",children:[e.jsx("span",{children:s("promptLibrary.search")}),e.jsx("input",{value:o,onChange:u=>i(u.target.value),placeholder:s("promptLibrary.search")})]}),e.jsxs("div",{className:"agent-prompt-library-list",children:[r?e.jsx("div",{className:"agent-tab-empty",children:s("common.loading")}):null,!r&&c.length===0?e.jsx("div",{className:"agent-tab-empty",children:s(n==="forms"?"agent.noForms":"promptLibrary.empty")}):null,c.map(u=>e.jsxs("article",{className:"agent-prompt-library-row",children:[e.jsx("strong",{children:u.name||s("promptLibrary.untitled")}),e.jsx("p",{children:u.text}),e.jsx("button",{type:"button",onClick:()=>t(u.text),children:s("agent.insertPrompt")})]},u.id))]})]})}function _n({onInsert:n}){return e.jsx(_e,{mode:"forms",onInsert:n})}function Nn({settings:n,onChange:t}){const{t:s}=p();return e.jsxs("section",{className:"agent-settings-grid","aria-label":s("agent.quality"),children:[e.jsxs("label",{children:[e.jsx("span",{children:s("agent.generationStrategy")}),e.jsxs("select",{value:n.generationStrategy,onChange:a=>t({generationStrategy:a.target.value}),children:[e.jsx("option",{value:"auto",children:s("agent.generationStrategyAuto")}),e.jsx("option",{value:"manual",children:s("agent.generationStrategyManual")})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.quality")}),e.jsxs("select",{value:n.quality,onChange:a=>t({quality:a.target.value}),children:[e.jsx("option",{value:"low",children:"low"}),e.jsx("option",{value:"medium",children:"medium"}),e.jsx("option",{value:"high",children:"high"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.size")}),e.jsxs("select",{value:n.size,onChange:a=>t({size:a.target.value}),children:[e.jsx("option",{value:"1024x1024",children:"1024x1024"}),e.jsx("option",{value:"1536x1024",children:"1536x1024"}),e.jsx("option",{value:"1024x1536",children:"1024x1536"}),e.jsx("option",{value:"2048x2048",children:"2048x2048"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.format")}),e.jsxs("select",{value:n.format,onChange:a=>t({format:a.target.value}),children:[e.jsx("option",{value:"png",children:"png"}),e.jsx("option",{value:"jpeg",children:"jpeg"}),e.jsx("option",{value:"webp",children:"webp"})]})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.moderation")}),e.jsxs("select",{value:n.moderation,onChange:a=>t({moderation:a.target.value}),children:[e.jsx("option",{value:"low",children:"low"}),e.jsx("option",{value:"auto",children:"auto"})]})]}),n.generationStrategy==="manual"?e.jsxs("label",{children:[e.jsx("span",{children:s("agent.variantsCount")}),e.jsx("input",{type:"number",min:1,max:8,value:n.variants,onChange:a=>t({variants:Number(a.target.value)})})]}):e.jsxs("label",{children:[e.jsx("span",{children:s("agent.maxAutoVariants")}),e.jsx("input",{type:"number",min:1,max:8,value:n.maxAutoVariants,onChange:a=>t({maxAutoVariants:Number(a.target.value)})})]}),e.jsxs("label",{children:[e.jsx("span",{children:s("agent.parallelism")}),e.jsx("input",{type:"number",min:1,max:8,value:n.parallelism,onChange:a=>t({parallelism:Number(a.target.value)})})]})]})}function Cn(n){return n.status==="queued"?`#${n.position}`:n.status==="running"?"running":n.status==="succeeded"?`${n.resultImageIds.length} img`:n.status==="failed"?n.errorCode??"failed":"canceled"}function An(n){if(!n)return"-";const t=Math.max(1,Math.round((Date.now()-n)/1e3));if(t<60)return`${t}s ago`;const s=Math.round(t/60);return s<60?`${s}m ago`:`${Math.round(s/60)}h ago`}function kn({item:n,onCancel:t,onRetry:s}){const{t:a}=p(),r=n.status==="queued",l=n.status==="failed"||n.status==="canceled",o=`${n.plan.plannedVariants||n.plan.prompts.length||1}v/${n.plan.plannedParallelism||n.options.parallelism}p · ${n.plan.source}`;return e.jsxs("div",{className:`agent-queue-row agent-queue-row--${n.status}`,children:[e.jsxs("div",{className:"agent-queue-row__main",children:[e.jsx("strong",{children:n.prompt}),e.jsxs("span",{children:[a(`agent.queueStatus.${n.status}`)," · ",Cn(n)," · ",o," · ",An(n.createdAt)]}),n.plan.reason?e.jsx("small",{children:n.plan.reason}):null,n.errorMessage?e.jsx("small",{children:n.errorMessage}):null]}),e.jsxs("div",{className:"agent-queue-row__actions",children:[r?e.jsx("button",{type:"button",onClick:()=>t(n.id),children:a("agent.cancelQueue")}):null,l?e.jsx("button",{type:"button",onClick:()=>s(n.id),children:a("agent.retryQueue")}):null]})]})}function Mn({items:n,summary:t,onCancel:s,onRetry:a}){const{t:r}=p();return e.jsxs("section",{className:"agent-sidebar-section","aria-label":r("agent.queue"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:r("agent.queue")}),e.jsxs("strong",{children:[t?.runningCount??0," ",r("agent.runningShort")," · ",t?.queuedCount??0," ",r("agent.queuedShort")]})]})}),e.jsx("div",{className:"agent-queue-list",children:n.length===0?e.jsx("div",{className:"agent-tab-empty",children:r("agent.queueEmpty")}):n.map(l=>e.jsx(kn,{item:l,onCancel:s,onRetry:a},l.id))})]})}const Tn=["image","library","forms","quality","model","queue"];function $n({activeTab:n,onChange:t}){const{t:s}=p();return e.jsx("div",{className:"agent-sidebar-tabs",role:"tablist","aria-label":s("agent.rightSidebar"),children:Tn.map(a=>e.jsx("button",{type:"button",role:"tab",className:n===a?"active":"","aria-selected":n===a,onClick:()=>t(a),children:s(`agent.sidebarTabs.${a}`)},a))})}function En({currentImage:n,images:t,contextTab:s,sidebarTab:a,queueItems:r,runSummary:l,settings:o,onContextTabChange:i,onSidebarTabChange:c,onImageSelect:u,onSettingsChange:m,onInsertPrompt:h,onCancelQueue:x,onRetryQueue:j}){const{t:y}=p();return e.jsxs("aside",{className:"agent-right-sidebar",children:[e.jsx($n,{activeTab:a,onChange:c}),a==="image"?e.jsx(we,{currentImage:n,images:t,activeTab:s,onTabChange:i,onImageSelect:u}):null,a==="library"?e.jsx(_e,{mode:"library",onInsert:h}):null,a==="forms"?e.jsx(_n,{onInsert:h}):null,a==="quality"?e.jsxs("section",{className:"agent-sidebar-section","aria-label":y("agent.quality"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:y("agent.quality")}),e.jsx("strong",{children:o.generationStrategy==="auto"?y("agent.generationStrategyAuto"):y("agent.generationStrategyManual")})]})}),e.jsx(Nn,{settings:o,onChange:m})]}):null,a==="model"?e.jsxs("section",{className:"agent-sidebar-section","aria-label":y("agent.modelSettings"),children:[e.jsx("header",{children:e.jsxs("div",{children:[e.jsx("span",{children:y("agent.modelSettings")}),e.jsx("strong",{children:o.model})]})}),e.jsx(Ie,{settings:o,onChange:m})]}):null,a==="queue"?e.jsx(Mn,{items:r,summary:l,onCancel:x,onRetry:j}):null]})}function Ne({summary:n}){const{t}=p();if(!n||n.status==="idle")return null;const s=n.status==="running"?t("agent.sessionRunning"):n.status==="queued"?t("agent.sessionQueued",{count:n.queuedCount}):t("agent.sessionError");return e.jsxs("span",{className:`agent-session-spinner agent-session-spinner--${n.status}`,"aria-label":s,title:s,children:[e.jsx("span",{"aria-hidden":"true"}),n.queuedCount>0?e.jsx("em",{children:n.queuedCount}):null]})}function qn(n){const t=Math.max(1,Math.round((Date.now()-n)/6e4));if(t<60)return`${t}m`;const s=Math.round(t/60);return s<24?`${s}h`:`${Math.round(s/24)}d`}function Ce({sessions:n,selectedId:t,imagesById:s,runSummaryBySession:a={},onSelect:r,onRename:l,onDelete:o}){const{t:i}=p();return e.jsx("div",{className:"agent-session-list",children:n.map(c=>{const u=c.lastImageId?s[c.lastImageId]:null;return e.jsxs("div",{className:`agent-session-row${c.id===t?" is-active":""}`,children:[e.jsxs("button",{type:"button","aria-current":c.id===t?"page":void 0,onClick:()=>r(c.id),children:[e.jsx("span",{className:"agent-session-row__thumb",children:u?e.jsx(z,{src:u.thumbUrl??u.url,alt:"",iconSize:17}):e.jsx(D,{size:17})}),e.jsxs("span",{className:"agent-session-row__body",children:[e.jsx("strong",{children:c.title}),e.jsxs("span",{children:[i("agent.imageCount",{count:c.imageCount})," · ",qn(c.updatedAt)]})]}),e.jsxs("span",{className:"agent-session-row__badges",children:[e.jsx(Ne,{summary:a[c.id]}),c.webSearchEnabled?e.jsx("em",{title:i("agent.web"),children:"W"}):null,c.compacted?e.jsx("em",{title:i("agent.compacted"),children:"C"}):null]})]}),e.jsxs("div",{className:"agent-session-row__actions",children:[e.jsx("button",{type:"button",onClick:()=>l(c.id),"aria-label":i("agent.renameSession"),title:i("agent.renameSession"),children:e.jsx(sn,{size:14})}),e.jsx("button",{type:"button",onClick:()=>o(c.id),"aria-label":i("agent.deleteSession"),title:i("agent.deleteSession"),children:e.jsx(tn,{size:14})})]})]},c.id)})})}function Ln({open:n,sessions:t,selectedId:s,imagesById:a,runSummaryBySession:r,onClose:l,onCreate:o,onSelect:i,onRename:c,onDelete:u}){const{t:m}=p(),[h,x]=d.useState(""),j=d.useCallback(()=>l(),[l]),y=ee(n,j),M=d.useMemo(()=>{const I=h.trim().toLowerCase();return I?t.filter(T=>T.title.toLowerCase().includes(I)):t},[h,t]);return n?e.jsxs("div",{className:"agent-dialog agent-dialog--drawer",role:"presentation",children:[e.jsx("button",{type:"button",className:"agent-dialog__backdrop",onClick:l,"aria-label":m("agent.closeSessions")}),e.jsxs("section",{ref:y,className:"agent-session-drawer",role:"dialog","aria-modal":"true","aria-label":m("agent.sessions"),children:[e.jsxs("header",{children:[e.jsx("strong",{children:m("agent.sessions")}),e.jsx("button",{type:"button",onClick:l,"aria-label":m("agent.closeSessions"),children:e.jsx(Z,{size:17})})]}),e.jsxs("button",{type:"button",className:"agent-sessions__create",onClick:o,children:[e.jsx(Y,{size:16}),e.jsx("span",{children:m("agent.newSession")})]}),e.jsxs("label",{className:"agent-sessions__search",children:[e.jsx(je,{size:15}),e.jsx("input",{value:h,onChange:I=>x(I.target.value),placeholder:m("agent.sessionSearch")})]}),e.jsx(Ce,{sessions:M,selectedId:s,imagesById:a,runSummaryBySession:r,onSelect:i,onRename:c,onDelete:u})]})]}):null}function Rn({sessions:n,selectedId:t,imagesById:s,runSummaryBySession:a={},onCreate:r,onSelect:l,onOpenDrawer:o}){const{t:i}=p();return e.jsxs("aside",{className:"agent-rail","aria-label":i("agent.sessions"),children:[e.jsx("button",{type:"button",onClick:o,"aria-label":i("agent.openSessions"),title:i("agent.openSessions"),children:e.jsx(fe,{size:17})}),e.jsx("button",{type:"button",onClick:r,"aria-label":i("agent.newSession"),title:i("agent.newSession"),children:e.jsx(Y,{size:17})}),e.jsx("div",{className:"agent-rail__sessions",children:n.map(c=>{const u=c.lastImageId?s[c.lastImageId]:null;return e.jsxs("button",{type:"button",className:c.id===t?"is-active":"",onClick:()=>l(c.id),title:c.title,children:[u?e.jsx(z,{src:u.thumbUrl??u.url,alt:"",iconSize:17}):e.jsx(D,{size:17}),e.jsx(Ne,{summary:a[c.id]}),c.compacted?e.jsx("span",{"aria-label":i("agent.compacted")}):null]},c.id)})})]})}function Dn(n){const{t}=p(),[s,a]=d.useState(""),r=d.useMemo(()=>{const l=s.trim().toLowerCase();return l?n.sessions.filter(o=>o.title.toLowerCase().includes(l)):n.sessions},[n.sessions,s]);return e.jsxs("aside",{className:"agent-sessions","aria-label":t("agent.sessions"),children:[e.jsxs("div",{className:"agent-sessions__brand",children:[e.jsxs("div",{children:[e.jsx("span",{children:"ima2-gen"}),e.jsx("strong",{children:t("agent.title")})]}),e.jsx(xe,{})]}),e.jsxs("button",{type:"button",className:"agent-sessions__create",onClick:n.onCreate,children:[e.jsx(Y,{size:16}),e.jsx("span",{children:t("agent.newSession")})]}),e.jsxs("label",{className:"agent-sessions__search",children:[e.jsx(je,{size:15}),e.jsx("input",{value:s,onChange:l=>a(l.target.value),placeholder:t("agent.sessionSearch")})]}),e.jsx(Ce,{...n,sessions:r})]})}function zn({layoutMode:n,session:t,currentImage:s,onOpenSessions:a,onOpenImage:r}){const{t:l}=p(),o=n==="mobile-chat-image-sheet";return e.jsxs("header",{className:"agent-topbar",children:[e.jsx("button",{type:"button",className:"agent-topbar__icon",onClick:a,"aria-label":l("agent.openSessions"),title:l("agent.openSessions"),children:e.jsx(fe,{size:18})}),e.jsxs("div",{className:"agent-topbar__title",children:[e.jsx("span",{children:l("agent.title")}),e.jsx("strong",{children:t?.title??l("agent.newSession")})]}),e.jsx(xe,{}),o?e.jsx("button",{type:"button",className:"agent-topbar__image",onClick:r,"aria-label":l("agent.openImage"),title:l("agent.openImage"),children:s?e.jsx(z,{src:s.thumbUrl??s.url,alt:"",iconSize:18}):e.jsx(D,{size:18})}):null]})}const Ae="agent-local-";let pe=0;function X(){return{sessions:[],turnsBySession:{},imagesById:{},imageIdsBySession:{},selectedSessionId:null,currentImageId:null,allowedTools:["ima2.get_image_context","ima2.web_search","ima2.generate_image"],manifest:null,queueBySession:{},runSummaryBySession:{}}}function ne(n){return pe+=1,`${Ae}${n}-${Date.now()}-${pe}`}function Bn(n){return n.id.startsWith(Ae)}function Pn(n,t){return{id:ne("user"),role:"user",text:n,imageIds:[],webFindingIds:[],status:"complete",createdAt:t}}function On(n,t){return{id:ne("pending"),role:"assistant",text:n,imageIds:[],webFindingIds:[],status:"streaming",createdAt:t}}function Wn(n){return{id:ne("error"),role:"assistant",text:n,imageIds:[],webFindingIds:[],status:"error",createdAt:Date.now()}}function Un(n,t,s){return{...n,turnsBySession:{...n.turnsBySession,[t]:[...n.turnsBySession[t]??[],...s]}}}function Qn(n,t,s,a){const r=n.turnsBySession[t]??[];return{...n,turnsBySession:{...n.turnsBySession,[t]:[...r.filter(l=>l.id!==s),Wn(a)]}}}function Fn(n,t,s){const a={...t.turnsBySession};for(const[r,l]of Object.entries(n.turnsBySession)){const o=a[r]??[],i=new Set(o.map(m=>m.id)),c=Math.max(0,...o.map(m=>m.createdAt??0)),u=l.filter(m=>s.has(m.id)||i.has(m.id)?!1:Bn(m)||m.status==="streaming"?!0:(m.createdAt??0)>=c);u.length>0&&(a[r]=[...o,...u])}return{...t,turnsBySession:a}}function Gn(){const{t:n}=p(),t=Ye(),s=B(g=>g.currentImage),a=d.useRef(!1),r=d.useRef(0),[l,o]=d.useState(()=>X()),[i,c]=d.useState(null),[u,m]=d.useState("image"),[h,x]=d.useState("image"),[j,y]=d.useState(null),[M,I]=d.useState(!1),[T,_]=d.useState(!1),[q,A]=d.useState(!1),[O,N]=d.useState("reconnecting"),S=d.useCallback(g=>{o({...X(),...g}),c(g.selectedSessionId??null)},[]),f=d.useCallback((g,b)=>{const v={...X(),...g};o(C=>Fn(C,v,b)),c(g.selectedSessionId??null)},[]),ke=()=>{r.current+=1,N("generating")},Me=()=>{r.current=Math.max(0,r.current-1),r.current===0&&N("ready")},W=d.useCallback(async g=>{N("reconnecting");const b=await oe(g);if(b.sessions.length>0){S(b),N("ready");return}const v=await ie({title:n("agent.newSession"),currentImage:s});S(v),N("ready")},[S,s,n]),te=d.useCallback(async g=>{const b=await oe(g);S(b),N("ready")},[S]);d.useEffect(()=>{a.current||(a.current=!0,W().catch(g=>{console.error(g),N("ready")}))},[W]);const L=l.sessions.find(g=>g.id===i)??null,U=l.currentImageId?l.imagesById[l.currentImageId]??null:null,se=i?(l.imageIdsBySession[i]??[]).map(g=>l.imagesById[g]).filter(g=>!!g):[],Te=L?l.turnsBySession[L.id]??[]:[],$e=i?l.queueBySession[i]??[]:[],k=i?l.runSummaryBySession[i]:void 0,R=ce(L?.generationSettings),Ee=O==="reconnecting"?"reconnecting":r.current>0||k?.status==="queued"||k?.status==="running"?"generating":"ready",qe=t==="desktop-rail",ae=t==="desktop-three-pane",Q=t!=="mobile-chat-image-sheet";d.useEffect(()=>{if(!i||k?.status!=="queued"&&k?.status!=="running")return;const g=window.setInterval(()=>{te(i).catch(console.error)},1500);return()=>window.clearInterval(g)},[te,i,k?.queuedCount,k?.runningCount,k?.status]);const F=g=>{I(!1),W(g).catch(console.error)},K=()=>{ie({title:n("agent.newSession"),currentImage:null}).then(S).catch(console.error)},re=g=>{const b=l.sessions.find(C=>C.id===g),v=window.prompt(n("agent.renameSession"),b?.title??"");v?.trim()&&J(g,{title:v.trim()}).then(S).catch(console.error)},le=g=>{const b=l.sessions.find(v=>v.id===g);!b||!window.confirm(n("agent.deleteConfirm",{title:b.title}))||Ge(g).then(S).catch(console.error)},G=g=>{if(!i)return;const b=ce({...R,...g});o(v=>({...v,sessions:v.sessions.map(C=>C.id===i?{...C,generationSettings:b,webSearchEnabled:b.webSearchEnabled}:C)})),J(i,{generationSettings:g}).then(S).catch(console.error)},Le=g=>{G({webSearchEnabled:g})},V=g=>{if(!i||l.currentImageId===g)return;const b=i;o(v=>({...v,currentImageId:g})),J(b,{currentImageId:g}).then(S).catch(console.error)},Re=g=>{y({id:Date.now(),text:g})},De=g=>{He(g).then(S).catch(console.error)},ze=g=>{Je(g).then(S).catch(console.error)},Be=()=>{if(Q){x("model");return}A(!0)},Pe=g=>{if(!i)return;const b=i,v=Date.now(),C=Pn(g,v),H=On(n("agent.pending"),v+1),Oe=new Set([C.id,H.id]);ke(),o($=>Un($,b,[C,H])),Ve(b,g,R).then($=>f($.workspace,Oe)).catch($=>{const We=$ instanceof Error?$.message:String($);o(Ue=>Qn(Ue,b,H.id,We))}).finally(Me)};return e.jsxs("main",{className:`agent-workspace agent-workspace--${t}`,"data-layout":t,"aria-label":n("agent.workspace"),children:[ae?null:e.jsx(zn,{layoutMode:t,session:L,currentImage:U,onOpenSessions:()=>I(!0),onOpenImage:()=>_(!0)}),e.jsxs("div",{className:"agent-workspace__body",children:[ae?e.jsx(Dn,{sessions:l.sessions,selectedId:i??"",imagesById:l.imagesById,runSummaryBySession:l.runSummaryBySession,onCreate:K,onSelect:F,onRename:re,onDelete:le}):null,qe?e.jsx(Rn,{sessions:l.sessions,selectedId:i??"",imagesById:l.imagesById,runSummaryBySession:l.runSummaryBySession,onCreate:K,onSelect:F,onOpenDrawer:()=>I(!0)}):null,e.jsx(bn,{session:L,turns:Te,imagesById:l.imagesById,currentImageId:l.currentImageId,runtimeStatus:Ee,settings:R,insertedPrompt:j,onOpenModelSettings:Be,onWebSearchChange:Le,onImageSelect:V,onSend:Pe}),Q?e.jsx(En,{currentImage:U,images:se,contextTab:u,sidebarTab:h,queueItems:$e,runSummary:k,settings:R,onContextTabChange:m,onSidebarTabChange:x,onImageSelect:V,onSettingsChange:G,onInsertPrompt:Re,onCancelQueue:De,onRetryQueue:ze}):null]}),e.jsx(Ln,{open:M,sessions:l.sessions,selectedId:i??"",imagesById:l.imagesById,runSummaryBySession:l.runSummaryBySession,onClose:()=>I(!1),onCreate:K,onSelect:F,onRename:re,onDelete:le}),e.jsx(wn,{open:T,currentImage:U,images:se,activeTab:u,onTabChange:m,onImageSelect:V,onClose:()=>_(!1)}),e.jsx(In,{open:q&&!Q,settings:R,onSettingsChange:G,onClose:()=>A(!1)})]})}export{Gn as AgentWorkspace};
|