sanity-plugin-asset-source-unsplash
7.0.157.0.16
−
Removed (4 files)
+
Added (4 files)
~
Modified (4 files)
Index: package/dist/index.js
===================================================================
--- package/dist/index.js
+++ package/dist/index.js
@@ -1,5 +1,5 @@
-import { t as Loader } from "./Loader.js";
+import { t as Loader } from "./_chunks-es/Loader.js";
import { definePlugin, useClient } from "sanity";
import { c } from "react/compiler-runtime";
import { jsx, jsxs } from "react/jsx-runtime";
import { Box, Dialog, Stack, TextInput } from "@sanity/ui";
@@ -48,9 +48,9 @@
}
const StyledDialog = styled(Dialog).withConfig({
displayName: "StyledDialog",
componentId: "sc-nyqpvm-0"
-})`& > [data-ui='DialogCard'] > [data-ui='Card']{height:100%;}`, UnsplashAssetSourceGallery = lazy(() => import("./UnsplashPhotoGallery.js"));
+})`& > [data-ui='DialogCard'] > [data-ui='Card']{height:100%;}`, UnsplashAssetSourceGallery = lazy(() => import("./_chunks-es/UnsplashPhotoGallery.js"));
function UnsplashAssetSource(t0) {
let $ = c(25), { onClose, onSelect } = t0, t1;
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t1 = { apiVersion: "2022-09-01" }, $[0] = t1) : t1 = $[0];
let client = useClient(t1), t2; Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
{
"name": "sanity-plugin-asset-source-unsplash",
- "version": "7.0.15",
+ "version": "7.0.16",
"description": "Use images from Unsplash.com in your Sanity Studio",
"keywords": [
"assets",
"images",
@@ -31,23 +31,23 @@
"./package.json": "./package.json"
},
"dependencies": {
"@sanity/icons": "^5.0.0",
- "@sanity/ui": "^3.3.1",
+ "@sanity/ui": "^3.3.5",
"lodash-es": "^4.18.1",
"react-photo-album": "^3.6.0"
},
"devDependencies": {
"@sanity/tsconfig": "^2.2.0",
- "@sanity/tsdown-config": "^0.11.0",
+ "@sanity/tsdown-config": "^0.13.1",
"@types/lodash-es": "^4.17.12",
- "@types/node": "^24.13.2",
+ "@types/node": "^24.13.3",
"@types/react": "^19.2.17",
"babel-plugin-react-compiler": "^1.0.0",
"react": "^19.2.7",
"sanity": "^6.3.0",
"styled-components": "^6.4.3",
- "tsdown": "^0.22.3"
+ "tsdown": "^0.22.5"
},
"peerDependencies": {
"react": "^19.2",
"sanity": "^5 || ^6.0.0-0", Index: package/dist/index.d.ts.map
===================================================================
--- package/dist/index.d.ts.map
+++ package/dist/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","names":[],"sources":["../src/components/Icon.tsx","../src/types.ts","../src/index.ts"],"mappings":";;;AAGA;iBAAgB,YAAA,IAAgB,KAAA,CAAM,GAAA,CAAI,OAAO;;;AAAjD;UCAiB,KAAA;EACf,IAAA;EACA,KAAA,WAAgB,IAAI;EACpB,kBAAA;IACE,gBAAA;IACA,KAAA;IACA,KAAA;IACA,WAAA;IACA,MAAA;MACE,EAAA;MACA,IAAA;MACA,GAAA;IAAA;IAEF,UAAA;EAAA;AAAA;;;;UAOa,aAAA;EACf,GAAA;EACA,KAAA;EACA,KAAA;EACA,WAAA;EACA,MAAA;IACE,EAAA;IACA,IAAA;IACA,GAAA;EAAA;EAEF,UAAA;EACA,gBAAA;AAAA;;;;UAMe,aAAA;EACf,EAAA;EACA,KAAA;EACA,MAAA;EACA,WAAA;EACA,eAAA;EACA,IAAA;IACE,IAAA;IACA,KAAA;EAAA;EAEF,IAAA;IACE,IAAA;IACA,QAAA;IACA,KAAA;MACE,IAAA;IAAA;EAAA;EAGJ,KAAA;IACE,IAAA;IACA,IAAA;IACA,QAAA;IACA,iBAAA;EAAA;AAAA;;;;cCnDS,mBAAA,EAAqB,WAMjC;;;;cAKY,kBAAA,EAAoB,MAQ/B"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../src/components/Icon.tsx","../src/types.ts","../src/index.ts"],"mappings":";;;;iBAGgB,gBAAgB,MAAM,IAAI;;;;UCAzB;EACf;EACA,gBAAgB;EAChB;IACE;IACA;IACA;IACA;IACA;MACE;MACA;MACA;;IAEF;;;;;;UAOa;EACf;EACA;EACA;EACA;EACA;IACE;IACA;IACA;;EAEF;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;EACA;EACA;IACE;IACA;;EAEF;IACE;IACA;IACA;MACE;;;EAGJ;IACE;IACA;IACA;IACA;;;;;;cCnDS,qBAAqB;;;;cAWrB,oBAAoB"}
\ No newline at end of file Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["UnsplashIcon","$","_c","t0","Symbol","for","SearchIcon","SpinnerIcon","TextInput","startTransition","useOptimistic","styled","keyframes","rotate","AnimatedSpinnerIcon","SearchInput","t0","$","_c","value","changeAction","inputValue","setInputValue","isPending","t1","handleChange","newValue","t2","length","t3","t4","event","currentTarget","t5","t6","Dialog","Stack","Box","memoize","lazy","Suspense","useMemo","useRef","useState","AssetSourceComponentProps","useClient","styled","FetcherResult","UnsplashPhoto","Loader","SearchInput","RESULTS_PER_PAGE","StyledDialog","UnsplashAssetSourceGallery","UnsplashAssetSource","t0","$","_c","onClose","onSelect","t1","Symbol","for","apiVersion","client","t2","fetcher","query","page","searchParams","URLSearchParams","per_page","trim","set","request","url","withCredentials","method","then","_temp","_temp2","query_1","setQuery","scrollContainerRef","t3","t4","overflow","overflowX","overflowY","t5","position","top","zIndex","t6","t7","t8","t9","t10","t11","query_0","page_0","JSON","stringify","results","total","length","total_pages","Math","ceil","AssetSource","definePlugin","Plugin","UnsplashIcon","UnsplashAssetSource","Asset","AssetDocument","UnsplashPhoto","unsplashAssetSource","name","title","component","icon","unsplashImageAsset","form","image","assetSources"],"sources":["../src/components/Icon.tsx","../src/components/SearchInput.tsx","../src/components/UnsplashAssetSource.tsx","../src/index.ts"],"sourcesContent":["/**\n * @public\n */\nexport function UnsplashIcon(): React.JSX.Element {\n return (\n <svg\n // oxlint-disable-next-line prefer-tag-over-role\n role=\"img\"\n viewBox=\"0 0 25 25\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n >\n <title>Unsplash</title>\n <path d=\"M9 9V4h7v5H9Zm7 3h5v9H4v-9h5v5h7v-5Z\" />\n </svg>\n )\n}\n","import {SearchIcon} from '@sanity/icons/Search'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\nimport {TextInput} from '@sanity/ui'\nimport {startTransition, useOptimistic} from 'react'\nimport {styled, keyframes} from 'styled-components'\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n`\n\nconst AnimatedSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 500ms linear infinite;\n`\n\nexport function SearchInput({\n value,\n changeAction,\n}: {\n value: string\n changeAction: (value: string) => Promise<void> | void\n}) {\n const [inputValue, setInputValue] = useOptimistic(value)\n const isPending = inputValue !== value\n function handleChange(newValue: string) {\n startTransition(async () => {\n setInputValue(newValue)\n await changeAction(newValue)\n })\n }\n\n return (\n <TextInput\n clearButton={inputValue.length > 0 && !isPending}\n icon={SearchIcon}\n onChange={(event) => handleChange(event.currentTarget.value)}\n onClear={() => handleChange('')}\n placeholder=\"Search by topics or colors\"\n value={inputValue}\n iconRight={isPending && AnimatedSpinnerIcon}\n />\n )\n}\n","import {Dialog, Stack, Box} from '@sanity/ui'\nimport memoize from 'lodash-es/memoize.js'\nimport {lazy, Suspense, useMemo, useRef, useState} from 'react'\nimport {type AssetSourceComponentProps, useClient} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport type {FetcherResult, UnsplashPhoto} from '../types'\nimport {Loader} from './Loader'\nimport {SearchInput} from './SearchInput'\n\nconst RESULTS_PER_PAGE = 42\n\nconst StyledDialog = styled(Dialog)`\n & > [data-ui='DialogCard'] > [data-ui='Card'] {\n height: 100%;\n }\n`\n\nconst UnsplashAssetSourceGallery = lazy(() => import('./UnsplashPhotoGallery'))\n\nexport function UnsplashAssetSource({onClose, onSelect}: AssetSourceComponentProps) {\n const client = useClient({apiVersion: '2022-09-01'})\n const fetcher = useMemo(\n () =>\n memoize(\n async function fetcher(query: string, page: number): Promise<FetcherResult> {\n const searchParams = new URLSearchParams({\n page: `${page}`,\n per_page: `${RESULTS_PER_PAGE}`,\n })\n if (query.trim()) {\n searchParams.set('query', query.trim())\n return client.request<{\n results: UnsplashPhoto[]\n total: number\n total_pages: number\n }>({\n url: `/addons/unsplash/search/photos?${searchParams}`,\n withCredentials: true,\n method: 'GET',\n })\n }\n searchParams.set('order_by', 'popular')\n return client\n .request<UnsplashPhoto[]>({\n url: `/addons/unsplash/photos?${searchParams}`,\n withCredentials: true,\n method: 'GET',\n })\n .then((results) => ({\n results,\n total: results.length,\n total_pages: Math.ceil(results.length / RESULTS_PER_PAGE),\n }))\n },\n (query, page) => JSON.stringify({query, page}),\n ),\n [client],\n )\n\n const [query, setQuery] = useState('')\n const scrollContainerRef = useRef<HTMLDivElement>(null)\n\n return (\n <StyledDialog\n animate\n id=\"unsplash-asset-source\"\n header=\"Select image from Unsplash\"\n onClose={() => onClose()}\n open\n height=\"100%\"\n width={4}\n >\n <Stack\n ref={scrollContainerRef}\n gap={1}\n paddingLeft={3}\n height=\"stretch\"\n style={{overflow: 'hidden scroll', overflowX: 'clip', overflowY: 'scroll'}}\n >\n <Box style={{position: 'sticky', top: 0, zIndex: 1}}>\n <SearchInput changeAction={setQuery} value={query} />\n </Box>\n <Suspense fallback={<Loader />}>\n <UnsplashAssetSourceGallery\n client={client}\n query={query}\n fetcher={fetcher}\n scrollContainerRef={scrollContainerRef}\n onSelect={onSelect}\n initialDataPromise={fetcher(query, 1)}\n />\n </Suspense>\n </Stack>\n </StyledDialog>\n )\n}\n","import {type AssetSource, definePlugin, type Plugin} from 'sanity'\n\nimport {UnsplashIcon} from './components/Icon'\nimport {UnsplashAssetSource} from './components/UnsplashAssetSource'\n\nexport type {Asset, AssetDocument, UnsplashPhoto} from './types'\n\n/**\n * @public\n */\nexport const unsplashAssetSource: AssetSource = {\n name: 'unsplash',\n // oxlint-disable-next-line no-deprecated -- `i18nKey` requires a locale bundle; a plain title is intentional here\n title: 'Unsplash',\n component: UnsplashAssetSource,\n icon: UnsplashIcon,\n}\n\n/**\n * @public\n */\nexport const unsplashImageAsset: Plugin = definePlugin({\n name: 'asset-source-unsplash-plugin',\n\n form: {\n image: {\n assetSources: [unsplashAssetSource],\n },\n },\n})\n\nexport {UnsplashIcon}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["UnsplashIcon","$","_c","t0","Symbol","for","SearchIcon","SpinnerIcon","TextInput","startTransition","useOptimistic","styled","keyframes","rotate","AnimatedSpinnerIcon","SearchInput","t0","$","_c","value","changeAction","inputValue","setInputValue","isPending","t1","handleChange","newValue","t2","length","t3","t4","event","currentTarget","t5","t6","Dialog","Stack","Box","memoize","lazy","Suspense","useMemo","useRef","useState","AssetSourceComponentProps","useClient","styled","FetcherResult","UnsplashPhoto","Loader","SearchInput","RESULTS_PER_PAGE","StyledDialog","UnsplashAssetSourceGallery","UnsplashAssetSource","t0","$","_c","onClose","onSelect","t1","Symbol","for","apiVersion","client","t2","fetcher","query","page","searchParams","URLSearchParams","per_page","trim","set","request","url","withCredentials","method","then","_temp","_temp2","query_1","setQuery","scrollContainerRef","t3","t4","overflow","overflowX","overflowY","t5","position","top","zIndex","t6","t7","t8","t9","t10","t11","query_0","page_0","JSON","stringify","results","total","length","total_pages","Math","ceil","AssetSource","definePlugin","Plugin","UnsplashIcon","UnsplashAssetSource","Asset","AssetDocument","UnsplashPhoto","unsplashAssetSource","name","title","component","icon","unsplashImageAsset","form","image","assetSources"],"sources":["../src/components/Icon.tsx","../src/components/SearchInput.tsx","../src/components/UnsplashAssetSource.tsx","../src/index.ts"],"sourcesContent":["/**\n * @public\n */\nexport function UnsplashIcon(): React.JSX.Element {\n return (\n <svg\n // oxlint-disable-next-line prefer-tag-over-role\n role=\"img\"\n viewBox=\"0 0 25 25\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n >\n <title>Unsplash</title>\n <path d=\"M9 9V4h7v5H9Zm7 3h5v9H4v-9h5v5h7v-5Z\" />\n </svg>\n )\n}\n","import {SearchIcon} from '@sanity/icons/Search'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\nimport {TextInput} from '@sanity/ui'\nimport {startTransition, useOptimistic} from 'react'\nimport {styled, keyframes} from 'styled-components'\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n`\n\nconst AnimatedSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 500ms linear infinite;\n`\n\nexport function SearchInput({\n value,\n changeAction,\n}: {\n value: string\n changeAction: (value: string) => Promise<void> | void\n}) {\n const [inputValue, setInputValue] = useOptimistic(value)\n const isPending = inputValue !== value\n function handleChange(newValue: string) {\n startTransition(async () => {\n setInputValue(newValue)\n await changeAction(newValue)\n })\n }\n\n return (\n <TextInput\n clearButton={inputValue.length > 0 && !isPending}\n icon={SearchIcon}\n onChange={(event) => handleChange(event.currentTarget.value)}\n onClear={() => handleChange('')}\n placeholder=\"Search by topics or colors\"\n value={inputValue}\n iconRight={isPending && AnimatedSpinnerIcon}\n />\n )\n}\n","import {Dialog, Stack, Box} from '@sanity/ui'\nimport memoize from 'lodash-es/memoize.js'\nimport {lazy, Suspense, useMemo, useRef, useState} from 'react'\nimport {type AssetSourceComponentProps, useClient} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport type {FetcherResult, UnsplashPhoto} from '../types'\nimport {Loader} from './Loader'\nimport {SearchInput} from './SearchInput'\n\nconst RESULTS_PER_PAGE = 42\n\nconst StyledDialog = styled(Dialog)`\n & > [data-ui='DialogCard'] > [data-ui='Card'] {\n height: 100%;\n }\n`\n\nconst UnsplashAssetSourceGallery = lazy(() => import('./UnsplashPhotoGallery'))\n\nexport function UnsplashAssetSource({onClose, onSelect}: AssetSourceComponentProps) {\n const client = useClient({apiVersion: '2022-09-01'})\n const fetcher = useMemo(\n () =>\n memoize(\n async function fetcher(query: string, page: number): Promise<FetcherResult> {\n const searchParams = new URLSearchParams({\n page: `${page}`,\n per_page: `${RESULTS_PER_PAGE}`,\n })\n if (query.trim()) {\n searchParams.set('query', query.trim())\n return client.request<{\n results: UnsplashPhoto[]\n total: number\n total_pages: number\n }>({\n url: `/addons/unsplash/search/photos?${searchParams}`,\n withCredentials: true,\n method: 'GET',\n })\n }\n searchParams.set('order_by', 'popular')\n return client\n .request<UnsplashPhoto[]>({\n url: `/addons/unsplash/photos?${searchParams}`,\n withCredentials: true,\n method: 'GET',\n })\n .then((results) => ({\n results,\n total: results.length,\n total_pages: Math.ceil(results.length / RESULTS_PER_PAGE),\n }))\n },\n (query, page) => JSON.stringify({query, page}),\n ),\n [client],\n )\n\n const [query, setQuery] = useState('')\n const scrollContainerRef = useRef<HTMLDivElement>(null)\n\n return (\n <StyledDialog\n animate\n id=\"unsplash-asset-source\"\n header=\"Select image from Unsplash\"\n onClose={() => onClose()}\n open\n height=\"100%\"\n width={4}\n >\n <Stack\n ref={scrollContainerRef}\n gap={1}\n paddingLeft={3}\n height=\"stretch\"\n style={{overflow: 'hidden scroll', overflowX: 'clip', overflowY: 'scroll'}}\n >\n <Box style={{position: 'sticky', top: 0, zIndex: 1}}>\n <SearchInput changeAction={setQuery} value={query} />\n </Box>\n <Suspense fallback={<Loader />}>\n <UnsplashAssetSourceGallery\n client={client}\n query={query}\n fetcher={fetcher}\n scrollContainerRef={scrollContainerRef}\n onSelect={onSelect}\n initialDataPromise={fetcher(query, 1)}\n />\n </Suspense>\n </Stack>\n </StyledDialog>\n )\n}\n","import {type AssetSource, definePlugin, type Plugin} from 'sanity'\n\nimport {UnsplashIcon} from './components/Icon'\nimport {UnsplashAssetSource} from './components/UnsplashAssetSource'\n\nexport type {Asset, AssetDocument, UnsplashPhoto} from './types'\n\n/**\n * @public\n */\nexport const unsplashAssetSource: AssetSource = {\n name: 'unsplash',\n // oxlint-disable-next-line no-deprecated -- `i18nKey` requires a locale bundle; a plain title is intentional here\n title: 'Unsplash',\n component: UnsplashAssetSource,\n icon: UnsplashIcon,\n}\n\n/**\n * @public\n */\nexport const unsplashImageAsset: Plugin = definePlugin({\n name: 'asset-source-unsplash-plugin',\n\n form: {\n image: {\n assetSources: [unsplashAssetSource],\n },\n },\n})\n\nexport {UnsplashIcon}\n"],"mappings":";;;;;;;;;;;;;AAGA,SAAOA,eAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAYG,OAZHF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAEHF,KAAA,qBAAA,OAAA;EAEO,MAAA;EACG,SAAA;EACF,OAAA;EACC,QAAA;EACF,MAAA;YANP,CAQE,oBAAA,SAAA,EAAA,UAAO,WAAgB,CAAA,GACvB,oBAAA,QAAA,EAAQ,GAAA,uCAAsC,CAAA,CAC1C;KAAAF,EAAA,KAAAE,MAAAA,KAAAF,EAAA,IAVNE;AAUM;ACTV,MAAMU,SAASD,SAAS,8DAUlBE,sBAAsBH,OAAOJ,WAAW,CAAC,CAAA,WAAA;;;eAChCM,OAAM;AAGrB,SAAOE,YAAAC,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAqB,EAAAC,OAAAC,iBAAAJ,IAO1B,CAAAK,YAAAC,iBAAoCZ,cAAcS,KAAK,GACvDI,YAAkBF,eAAeF,OAAKK;CAAA,AAAAP,EAAA,OAAAG,gBAAAH,EAAA,OAAAK,iBACtCE,KAAA,SAAAE,UAAA;EACEjB,gBAAgB,YAAA;GAEd,AADAa,cAAcI,QAAQ,GACtB,MAAMN,aAAaM,QAAQ;EAAC,CAC7B;CAAC,GACHT,EAAA,KAAAG,cAAAH,EAAA,KAAAK,eAAAL,EAAA,KAAAO,MAAAA,KAAAP,EAAA;CALD,IAAAQ,eAAAD,IASiBG,KAAAN,WAAUO,SAAU,KAApB,CAA0BL,WAASM,IAAAC;CAAA,AAAAb,EAAA,OAAAQ,gBAGjBI,KAAAZ,EAAA,IAAAa,KAAAb,EAAA,OADrBY,MAAAE,UAAWN,aAAaM,MAAKC,cAAcb,KAAM,GAClDW,WAAML,aAAa,EAAE,GAACR,EAAA,KAAAQ,cAAAR,EAAA,KAAAY,IAAAZ,EAAA,KAAAa;CAGpB,IAAAG,KAAAV,aAAAT,qBAAgCoB;CAC3C,OAD2CjB,EAAA,OAAAI,cAAAJ,EAAA,OAAAU,MAAAV,EAAA,OAAAY,MAAAZ,EAAA,OAAAa,MAAAb,EAAA,QAAAgB,MAP7CC,KAAA,oBAAC,WAAD;EACe,aAAAP;EACPrB,MAAAA;EACI,UAAAuB;EACD,SAAAC;EACG,aAAA;EACLT,OAAAA;EACI,WAAAY;CAAgC,CAAA,GAC3ChB,EAAA,KAAAI,YAAAJ,EAAA,KAAAU,IAAAV,EAAA,KAAAY,IAAAZ,EAAA,KAAAa,IAAAb,EAAA,MAAAgB,IAAAhB,EAAA,MAAAiB,MAAAA,KAAAjB,EAAA,KARFiB;AAQE;ACnCN,MAEMkB,eAAeN,OAAOX,MAAM,CAAC,CAAA,WAAA;;;iEAM7BkB,6BAA6Bd,WAAW,OAAO,uCAAyB;AAE9E,SAAOe,oBAAAC,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAA6B,EAAAC,SAAAC,aAAAJ,IAA8CK;CAAA,AAAAJ,EAAA,OAAAK,OAAAC,IAAA,2BAAA,KACvDF,KAAA,EAAAG,YAAa,aAAY,GAACP,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAAnD,IAAAQ,SAAenB,UAAUe,EAA0B,GAACK;CAAA,AAAAT,EAAA,OAAAQ,SAmC/CC,KAAAT,EAAA,MAhCDS,KAAA3B,QACE,eAAA6B,OAAAC,MAAA;EACE,IAAAC,eAAqB,IAAIC,gBAAgB;GAAAF,MACjC,GAAGA;GAAMG,UACL;EACZ,CAAC;EAasC,OAZnCJ,MAAKK,KAAM,KACbH,aAAYI,IAAK,SAASN,MAAKK,KAAM,CAAC,GAC/BR,OAAMU,QAIV;GAAAC,KACI,kCAAkCN;GAAcO,iBACpC;GAAIC,QACb;EACV,CAAC,MAEHR,aAAYI,IAAK,YAAY,SAAS,GAC/BT,OAAMU,QACe;GAAAC,KACnB,2BAA2BN;GAAcO,iBAC7B;GAAIC,QACb;EACV,CAAC,CAAC,CAAAC,KACIC,KAIJ;CAAC,GAEPC,MACF,GAACxB,EAAA,KAAAQ,QAAAR,EAAA,KAAAS;CAlCL,IAAAC,UAEID,IAoCJ,CAAAgB,SAAAC,YAA0BvC,SAAS,EAAE,GACrCwC,qBAA2BzC,OAAuB,IAAI,GAAC0C;CAAA,AAAA5B,EAAA,OAAAE,UAO3B0B,KAAA5B,EAAA,MAAf4B,WAAM1B,QAAQ,GAACF,EAAA,KAAAE,SAAAF,EAAA,KAAA4B;CAAA,IAAAC;CAAA,AAAA7B,EAAA,OAAAK,OAAAC,IAAA,2BAAA,KAUfuB,KAAA;EAAAC,UAAW;EAAeC,WAAa;EAAMC,WAAa;CAAQ,GAAChC,EAAA,KAAA6B,MAAAA,KAAA7B,EAAA;CAAA,IAAAiC;CAAA,AAAAjC,EAAA,OAAAK,OAAAC,IAAA,2BAAA,KAE9D2B,KAAA;EAAAC,UAAW;EAAQC,KAAO;EAACC,QAAU;CAAC,GAACpC,EAAA,KAAAiC,MAAAA,KAAAjC,EAAA;CAAA,IAAAqC;CAAA,AAAArC,EAAA,OAAAyB,UAE7CY,KAAArC,EAAA,MAFNqC,KAAA,oBAAC,KAAD;EAAY,OAAAJ;YACV,oBAAC,aAAD;GAA2BP,cAAAA;GAAiBf,OAAAA;EAAK,CAAA;CAD/C,CAAA,GAEEX,EAAA,KAAAyB,SAAAzB,EAAA,KAAAqC;CAAA,IAAAC;CAAA,AAAAtC,EAAA,OAAAK,OAAAC,IAAA,2BAAA,KACcgC,KAAA,oBAAC,QAAD,CAAO,CAAA,GAAGtC,EAAA,KAAAsC,MAAAA,KAAAtC,EAAA;CAAA,IAAAuC;CAAA,AAAAvC,EAAA,QAAAU,WAAAV,EAAA,QAAAyB,WAONc,KAAA7B,QAAQC,SAAO,CAAC,GAACX,EAAA,MAAAU,SAAAV,EAAA,MAAAyB,SAAAzB,EAAA,MAAAuC,MAAAA,KAAAvC,EAAA;CAAA,IAAAwC;CAAA,AAAAxC,EAAA,QAAAQ,UAAAR,EAAA,QAAAU,WAAAV,EAAA,QAAAG,YAAAH,EAAA,QAAAyB,WAAAzB,EAAA,QAAAuC,MAPzCC,KAAA,oBAAC,UAAD;EAAoB,UAAAF;YAClB,oBAAC,4BAAD;GACU9B;GACDG,OAAAA;GACED;GACWiB;GACVxB;GACU,oBAAAoC;EAAiB,CAAA;CAPhC,CAAA,GASEvC,EAAA,MAAAQ,QAAAR,EAAA,MAAAU,SAAAV,EAAA,MAAAG,UAAAH,EAAA,MAAAyB,SAAAzB,EAAA,MAAAuC,IAAAvC,EAAA,MAAAwC,MAAAA,KAAAxC,EAAA;CAAA,IAAAyC;CAAA,AAAAzC,EAAA,QAAAqC,MAAArC,EAAA,QAAAwC,MAnBbC,MAAA,qBAAC,OAAD;EACOd,KAAAA;EACA,KAAA;EACQ,aAAA;EACN,QAAA;EACA,OAAAE;YALT,CAOEQ,IAGAG,EAVI;KAoBExC,EAAA,MAAAqC,IAAArC,EAAA,MAAAwC,IAAAxC,EAAA,MAAAyC,OAAAA,MAAAzC,EAAA;CAAA,IAAA0C;CACK,OADL1C,EAAA,QAAAyC,OAAAzC,EAAA,QAAA4B,MA7BVc,MAAA,oBAAC,cAAD;EACE,SAAA;EACG,IAAA;EACI,QAAA;EACE,SAAAd;EACT,MAAA;EACO,QAAA;EACA,OAAA;YAEPa;CATW,CAAA,GA8BEzC,EAAA,MAAAyC,KAAAzC,EAAA,MAAA4B,IAAA5B,EAAA,MAAA0C,OAAAA,MAAA1C,EAAA,KA9Bf0C;AA8Be;AA1EZ,SAAAlB,OAAAmB,SAAAC,QAAA;CAAA,OAmCkBC,KAAIC,UAAW;EAAAnC,OAACA;EAAKC,MAAEA;CAAI,CAAC;AAAC;AAnC/C,SAAAW,MAAAwB,SAAA;CAAA,OA6ByB;EAAAA;EAAAC,OAEXD,QAAOE;EAAOC,aACRC,KAAIC,KAAML,QAAOE,SAAUtD,EAAgB;CAC1D;AAAC;;;;AC3Cb,MAAakE,sBAAmC;CAC9CC,MAAM;CAENC,OAAO;CACPC,WAAWP;CACXQ,MAAMT;AACR,GAKaU,qBAA6BZ,aAAa;CACrDQ,MAAM;CAENK,MAAM,EACJC,OAAO,EACLC,cAAc,CAACR,mBAAmB,EACpC,EACF;AACF,CAAC"}
\ No newline at end of file