sanity-plugin-shopify-assets
2.0.52.0.6
~
Modified (4 files)
Index: package/dist/index.js
===================================================================
--- package/dist/index.js
+++ package/dist/index.js
@@ -513,9 +513,9 @@
}),
/* @__PURE__ */ jsx(InfiniteScroll, {
dataLength: searchResults.length,
next: handleScollerLoadMore,
- hasMore: pageInfo ? pageInfo?.hasNextPage : !0,
+ hasMore: !pageInfo || pageInfo?.hasNextPage,
scrollThreshold: .99,
height: "60vh",
loader: /* @__PURE__ */ jsx(Flex, {
align: "center", Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
{
"name": "sanity-plugin-shopify-assets",
- "version": "2.0.5",
+ "version": "2.0.6",
"description": "Choose assets from your Shopify store in your Sanity Studio",
"keywords": [
"assets",
"images",
@@ -31,9 +31,9 @@
"./package.json": "./package.json"
},
"dependencies": {
"@sanity/icons": "^5.0.0",
- "@sanity/ui": "^3.3.0",
+ "@sanity/ui": "^3.3.5",
"axios": "^1.18.1",
"pretty-bytes": "^6.1.1",
"pretty-ms": "^8.0.0",
"react-infinite-scroll-component": "^6.1.1",
@@ -42,18 +42,18 @@
"video.js": "^7.21.7"
},
"devDependencies": {
"@sanity/tsconfig": "^2.2.0",
- "@sanity/tsdown-config": "^0.11.0",
+ "@sanity/tsdown-config": "^0.13.1",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@types/video.js": "^7.3.58",
"babel-plugin-react-compiler": "^1.0.0",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"sanity": "^6.3.0",
"styled-components": "^6.4.3",
- "tsdown": "^0.22.3"
+ "tsdown": "^0.22.5"
},
"peerDependencies": {
"react": "^19.2",
"react-dom": "^19.2", 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/types.ts","../src/index.ts"],"mappings":";UAEiB,YAAA;EAAA;;;EAIf,aAAa;AAAA;AAAA,UAGE,uBAAA,SAAgC,gBAAgB;EAC/D,OAAA;IACE,aAAA;EAAA;AAAA;AAAA,KAIC,iBAAA;AAAA,UAEY,iBAAA;EACf,MAAA;EACA,GAAA;EACA,KAAA;AAAA;AAAA,UAGe,SAAA;EACf,GAAA;EACA,QAAA;EACA,QAAA;EACA,MAAA;EACA,KAAA;AAAA;AAAA,UAGe,WAAA;EACf,IAAA,EAAM,SAAA;EACN,OAAA,EAAS,iBAAA;EACT,EAAA;EACA,IAAA,EAAM,iBAAA;EACN,GAAA;AAAA;AAAA,UAGe,KAAA,SAAc,WAAW;EACxC,KAAA;EACA,IAAA;EACA,QAAA;AAAA;AAAA,UAGe,QAAA;EACf,WAAA;EACA,MAAM;AAAA;AAAA,UAGS,kBAAA;EACf,QAAA,EAAU,QAAA;EACV,MAAA,EAAQ,WAAW;AAAA;AAAA;EAAA,UCzCF,MAAA;IAAA,KAGH,mBAAA,GAAsB,IAAA,CAAK,gBAAA;MACrC,IAAA;MACA,OAAA;QACE,aAAA;MAAA;IAAA;IAAA,UAIa,uBAAA;MACf,eAAA,EAAiB,mBAAA;IAAA;EAAA;AAAA;AAAA,cAKV,aAAA,mBAAa,MAAA,CAAA,YAAA"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/index.ts"],"mappings":";UAEiB;;;;EAIf;;UAGe,gCAAgC;EAC/C;IACE;;;KAIC;UAEY;EACf;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf,MAAM;EACN,SAAS;EACT;EACA,MAAM;EACN;;UAGe,cAAc;EAC7B;EACA;EACA;;UAGe;EACf;EACA;;UAGe;EACf,UAAU;EACV,QAAQ;;;YCzCS;SAGH,sBAAsB,KAAK;MACrC;MACA;QACE;;;cAIa;MACf,iBAAiB;;;;cAKV,gCAAa,OAAA"}
\ 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":["defineField","defineType","shopifyAssetMetadataSchema","type","name","title","fields","defineField","defineType","shopifyAssetPreviewSchema","type","name","title","fields","Flex","Stack","Text","DiffFromTo","Asset","Props","value","ShopifyAssetDiffPreview","t0","$","_c","preview","url","t1","t2","Symbol","for","objectFit","margin","maxWidth","maxHeight","t3","t4","type","charAt","toUpperCase","t5","slice","t6","t7","DiffProps","diff","schemaType","AssetDiff","Card","getTheme_v2","styled","Root","div","theme","v2","sanity","color","muted","bg","border","InfoLine","fg","DurationLine","CSSProperties","MouseEvent","useCallback","useEffect","useRef","videojs","VideoJsPlayer","PlayerKind","VideoProps","src","kind","VideoPlayer","t0","$","_c","videoNode","player","undefined","t1","t2","current","sources","controls","stopPropagation","_temp","t3","Symbol","for","diff","className","t4","position","style","t5","t6","t7","t8","event","Box","Flex","Text","getTheme_v2","prettyBytes","prettyMilliseconds","styled","Asset","DurationLine","InfoLine","VideoPlayer","ComponentProps","value","StyledBox","theme","v2","sanity","color","muted","bg","border","RenderAsset","t0","$","_c","url","type","t1","preview","t2","Symbol","for","maxWidth","height","display","maxHeight","t3","AssetPreview","filename","meta","fileSize","duration","t4","t5","colonNotation","secondsDecimalDigits","t6","axios","BehaviorSubject","Observable","concat","defer","debounceTime","distinctUntilChanged","map","switchMap","withLatestFrom","SearchSubject","CursorSubject","fetchProps","projectId","dataset","shop","query","cursor","resultsPerPage","token","searchProps","Omit","listProps","fetchSearch","props","get","encodeURIComponent","withCredentials","method","headers","Authorization","pipe","result","data","fetchList","search","q","c","LaunchIcon","Box","Button","Flex","useCallback","Props","title","shopifyDomain","DialogHeader","props","$","_c","t0","window","open","handleOpenInNewTab","t1","Symbol","for","opacity","t2","position","right","t3","t4","extractName","name","split","pop","Text","prettyBytes","prettyMilliseconds","useCallback","useRef","Asset","ShopifyFile","extractName","DurationLine","InfoLine","Root","Props","data","width","height","onClick","file","File","props","$","_c","rootElm","preview","meta","t0","url","filename","t1","handleClick","t2","t3","t4","t5","backgroundImage","t6","t7","fileSize","t8","t9","duration","colonNotation","secondsDecimalDigits","t10","Stack","styled","Search","ErrorOutlineIcon","Card","Dialog","Flex","Inline","Spinner","Stack","Text","TextInput","ChangeEvent","useCallback","useEffect","useMemo","useState","InfiniteScroll","PhotoAlbum","BehaviorSubject","Subscription","ObjectInputProps","PatchEvent","set","useClient","useDataset","useProjectId","search","Asset","PageInfo","ShopifyAPIResponse","ShopifyFile","DialogHeader","File","Search","RESULTS_PER_PAGE","PHOTO_SPACING","PHOTO_PADDING","AssetPickerProps","shopifyDomain","isOpen","onClose","ShopifyAssetPicker","props","$","_c","onChange","schemaType","value","projectId","dataset","t0","Symbol","for","apiVersion","client","t1","config","token","apiError","setApiError","query","setQuery","t2","searchResults","setSearchResults","pageInfo","setPageInfo","isLoading","setIsLoading","error","t3","searchSubject$","t4","cursorSubject$","t5","t6","searchSubscription","shop","cursor","resultsPerPage","subscribe","next","results","prevResults","assets","err","response","data","message","unsubscribe","t7","event","newQuery","currentTarget","undefined","handleSearchTermChanged","t8","handleScollerLoadMore","t9","name","_key","file","_type","from","handleSelect","t10","fileProps","photo","layout","width","height","renderFile","handleWidth","_temp","t11","t12","length","hasNextPage","map","_temp2","containerProps","style","marginBottom","t13","file_0","src","preview","url","key","id","ShopifyIcon","$","_c","t0","Symbol","for","ErrorOutlineIcon","Button","Card","Flex","Grid","Inline","Stack","Text","useCallback","useState","ObjectInputProps","PatchEvent","unset","Asset","AssetPreview","ShopifyAssetPicker","ShopifyIcon","ShopifyAssetInput","props","$","_c","onChange","readOnly","value","schemaType","options","shopifyDomain","dialogOpen","setDialogOpen","t0","from","removeValue","t1","Symbol","for","onOpen","t2","onClose","t3","t4","t5","gridTemplateColumns","t6","t7","t8","t9","t10","t11","defineField","defineType","AssetDiff","AssetPreview","ShopifyAssetInput","ObjectConfig","shopifyDomain","ObjectOptions","shopifyAssetSchema","config","type","name","title","options","fields","components","input","diff","preview","select","meta","url","filename","prepare","subtitle","value","definePlugin","ObjectDefinition","shopifyAssetMetadataSchema","shopifyAssetPreviewSchema","shopifyAssetSchema","PluginConfig","Schema","ShopifyAssetTypeDef","Omit","type","options","shopifyDomain","IntrinsicTypeDefinition","shopifyAssets","config","name","schema","types"],"sources":["../src/schema/shopifyAssetMetadataSchema.ts","../src/schema/shopifyAssetPreviewSchema.ts","../src/components/AssetDiff.tsx","../src/components/File.styled.tsx","../src/components/VideoPlayer.tsx","../src/components/AssetPreview.tsx","../src/datastores/shopify.ts","../src/components/DialogHeader.tsx","../src/utils/helpers.ts","../src/components/File.tsx","../src/components/ShopifyAssetInput.styled.tsx","../src/components/ShopifyAssetPicker.tsx","../src/components/ShopifyIcon.tsx","../src/components/ShopifyAssetInput.tsx","../src/schema/shopifyAssetSchema.ts","../src/index.ts"],"sourcesContent":["import {defineField, defineType} from 'sanity'\n\nexport const shopifyAssetMetadataSchema = defineType({\n type: 'object',\n name: 'shopify.assetMetadata',\n title: 'Asset metadata',\n fields: [\n defineField({\n type: 'string',\n name: 'alt',\n title: 'Alternative text',\n }),\n defineField({\n type: 'number',\n name: 'duration',\n title: 'Duration',\n }),\n defineField({\n type: 'number',\n name: 'fileSize',\n title: 'File size',\n }),\n defineField({\n type: 'number',\n name: 'height',\n title: 'Height',\n }),\n defineField({\n type: 'number',\n name: 'width',\n title: 'Width',\n }),\n ],\n})\n","import {defineField, defineType} from 'sanity'\n\nexport const shopifyAssetPreviewSchema = defineType({\n type: 'object',\n name: 'shopify.assetPreview',\n title: 'Asset preview',\n fields: [\n defineField({\n type: 'number',\n name: 'height',\n title: 'Height',\n }),\n defineField({\n type: 'number',\n name: 'width',\n title: 'Width',\n }),\n defineField({\n type: 'url',\n name: 'url',\n title: 'URL',\n }),\n ],\n})\n","import {Flex, Stack, Text} from '@sanity/ui'\nimport {DiffFromTo} from 'sanity'\n\nimport type {Asset} from '../types'\n\ntype Props = {\n value: Asset | undefined\n}\n\nconst ShopifyAssetDiffPreview = ({value}: Props) => {\n if (!value) {\n return null\n }\n\n if (value?.preview?.url) {\n return (\n <Flex justify=\"center\" align=\"center\" height=\"fill\">\n <Stack gap={2}>\n <img\n alt=\"preview\"\n src={value?.preview?.url}\n style={{\n objectFit: 'contain',\n margin: 'auto',\n maxWidth: '100%',\n maxHeight: '100%',\n }}\n />\n <Text size={1}>{value.type.charAt(0).toUpperCase() + value.type.slice(1)}</Text>\n </Stack>\n </Flex>\n )\n }\n\n return (\n <Flex justify=\"center\" align=\"center\" height=\"fill\">\n <div>(no image)</div>\n </Flex>\n )\n}\n\ntype DiffProps = {\n diff: any\n schemaType: any\n}\n\nconst AssetDiff = ({diff, schemaType}: DiffProps) => {\n return (\n <DiffFromTo\n diff={diff}\n schemaType={schemaType}\n previewComponent={ShopifyAssetDiffPreview}\n layout={'grid'}\n />\n )\n}\n\nexport default AssetDiff\n","import {Card} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {styled} from 'styled-components'\n\nexport const Root = styled.div`\n ${({theme}) => {\n const v2 = getTheme_v2({sanity: theme.sanity})\n return `\n background-color: ${v2.color.muted.bg};\n border: 1px solid ${v2.color.border};\n `\n }};\n overflow: hidden;\n background-origin: content-box;\n background-repeat: no-repeat;\n background-clip: border-box;\n background-size: cover;\n position: relative;\n outline: none !important;\n box-sizing: content-box;\n user-drag: none;\n\n &:hover {\n opacity: 0.85;\n }\n\n &:focus,\n &:active {\n border: 1px solid var(--input-border-color-focus);\n box-shadow: inset 0 0 0 3px var(--input-border-color-focus);\n }\n`\n\nexport const InfoLine = styled(Card)`\n ${({theme}) => {\n const v2 = getTheme_v2({sanity: theme.sanity})\n return `\n --infoline-fg: ${v2.color.fg};\n --infoline-bg: ${v2.color.bg};\n `\n }};\n user-drag: none;\n position: absolute;\n background-color: var(--infoline-bg);\n top: 0;\n left: 0;\n max-width: 65%;\n overflow-wrap: break-word;\n\n [data-ui='Text'] {\n color: var(--infoline-fg);\n }\n`\n\nexport const DurationLine = styled(Card)`\n ${({theme}) => {\n const v2 = getTheme_v2({sanity: theme.sanity})\n return `\n --durationline-fg: ${v2.color.bg};\n --durationline-bg: ${v2.color.fg};\n `\n }};\n user-drag: none;\n position: absolute;\n background-color: var(--durationline-bg);\n top: 0;\n right: 0;\n\n [data-ui='Text'] {\n color: var(--durationline-fg);\n }\n`\n","import {type CSSProperties, type MouseEvent, useCallback, useEffect, useRef} from 'react'\nimport videojs, {type VideoJsPlayer} from 'video.js'\n\ntype PlayerKind = 'player' | 'diff'\n\ninterface VideoProps {\n src: string\n kind: PlayerKind\n}\n\nconst VideoPlayer = ({src, kind}: VideoProps) => {\n const videoNode = useRef<HTMLVideoElement>(null)\n const player = useRef<VideoJsPlayer | undefined>(undefined)\n\n useEffect(() => {\n player.current = videojs(videoNode.current ?? '', {\n sources: [{src}],\n controls: true,\n })\n\n player.current.src({src})\n }, [src])\n\n const stopPropagation = useCallback((event: MouseEvent) => {\n event.stopPropagation()\n }, [])\n\n const className: Record<PlayerKind, string> = {\n player: 'video-js vjs-16-9 vjs-big-play-centered',\n diff: 'video-js vjs-layout-tiny vjs-fluid',\n }\n\n const style: CSSProperties = {position: 'relative'}\n\n return (\n <div>\n <link href=\"https://vjs.zencdn.net/7.8.4/video-js.css\" rel=\"stylesheet\" />\n <div data-vjs-player>\n {/* Shopify assets do not provide caption tracks */}\n {/* oxlint-disable-next-line jsx-a11y/media-has-caption */}\n <video\n aria-label=\"Video preview\"\n onClick={stopPropagation}\n style={kind === 'diff' ? style : {}}\n className={className[kind]}\n ref={videoNode}\n />\n </div>\n </div>\n )\n}\n\nexport default VideoPlayer\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport prettyBytes from 'pretty-bytes'\nimport prettyMilliseconds from 'pretty-ms'\nimport {styled} from 'styled-components'\n\nimport type {Asset} from '../types'\nimport {DurationLine, InfoLine} from './File.styled'\nimport VideoPlayer from './VideoPlayer'\n\ninterface ComponentProps {\n value: Asset | undefined\n}\n\nconst StyledBox = styled(Box)`\n ${({theme}) => {\n const v2 = getTheme_v2({sanity: theme.sanity})\n return `\n background-color: ${v2.color.muted.bg};\n border: 1px solid ${v2.color.border};\n `\n }};\n display: flex;\n justify-content: center;\n position: relative;\n`\n\nconst RenderAsset = ({value, url}: {value: Asset; url: string}) => {\n switch (value.type) {\n case 'video':\n return <VideoPlayer src={url} kind=\"player\" />\n default:\n return (\n <Flex justify=\"center\">\n <img\n alt=\"preview\"\n src={value?.preview?.url}\n style={{\n maxWidth: '100%',\n height: 'auto',\n display: 'block',\n maxHeight: '30vh',\n }}\n />\n </Flex>\n )\n }\n}\n\nconst AssetPreview = ({value}: ComponentProps) => {\n const url = value && value.url\n\n if (!value || !url) {\n return null\n }\n\n const {filename, meta} = value\n const {fileSize, duration} = meta\n\n return (\n <StyledBox marginBottom={2}>\n <RenderAsset value={value} url={url} />\n <InfoLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Select ${filename}`}>\n {filename} {fileSize && `(${prettyBytes(fileSize)})`}\n </Text>\n </InfoLine>\n {duration && (\n <DurationLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Video duration: ${filename}`}>\n {prettyMilliseconds(duration, {colonNotation: true, secondsDecimalDigits: 0})}\n </Text>\n </DurationLine>\n )}\n </StyledBox>\n )\n}\n\nexport default AssetPreview\n","import axios from 'axios'\nimport {BehaviorSubject, Observable, concat, defer} from 'rxjs'\nimport {debounceTime, distinctUntilChanged, map, switchMap, withLatestFrom} from 'rxjs/operators'\n\ntype SearchSubject = BehaviorSubject<string>\ntype CursorSubject = BehaviorSubject<any>\n\ninterface fetchProps {\n projectId: string\n dataset: string\n shop: string\n query: SearchSubject\n cursor: CursorSubject\n resultsPerPage: number\n token?: string\n}\n\ninterface searchProps extends Omit<fetchProps, 'query' | 'cursor'> {\n query: string\n cursor: string\n}\ninterface listProps extends Omit<fetchProps, 'query' | 'cursor'> {\n cursor: string\n}\n\nconst fetchSearch = (props: searchProps): Observable<any> => {\n const {projectId, dataset, shop, query, cursor, resultsPerPage, token} = props\n\n return defer(() => {\n return axios.get(\n `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}&query=${encodeURIComponent(\n query,\n )}${cursor && `&cursor=${cursor}`}&limit=${resultsPerPage}`,\n {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\n }\n : {},\n },\n )\n }).pipe(map((result) => result.data))\n}\n\nconst fetchList = (props: listProps): Observable<any> => {\n const {projectId, dataset, shop, cursor, resultsPerPage, token} = props\n\n return defer(() =>\n axios.get(\n `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}${\n cursor && `&cursor=${cursor}`\n }&limit=${resultsPerPage}`,\n {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\n }\n : {},\n },\n ),\n ).pipe(map((result) => result.data))\n}\n\nexport const search = (props: fetchProps): Observable<any> => {\n const {projectId, dataset, shop, query, cursor, resultsPerPage, token} = props\n\n return concat(\n query.pipe(\n withLatestFrom(cursor),\n debounceTime(500),\n distinctUntilChanged(),\n switchMap(([q, c]) => {\n if (q) {\n return fetchSearch({\n projectId,\n dataset,\n shop,\n query: q,\n cursor: c,\n resultsPerPage,\n token,\n }).pipe(distinctUntilChanged())\n }\n return fetchList({projectId, dataset, shop, cursor: c, resultsPerPage, token})\n }),\n ),\n )\n}\n","import {LaunchIcon} from '@sanity/icons/Launch'\nimport {Box, Button, Flex} from '@sanity/ui'\nimport {useCallback} from 'react'\n\ninterface Props {\n title: string\n shopifyDomain: string\n}\n\nconst DialogHeader = (props: Props) => {\n const {title, shopifyDomain} = props\n\n const handleOpenInNewTab = useCallback(() => {\n window.open(`https://${shopifyDomain}/admin/content/files`, '_blank')\n }, [shopifyDomain])\n\n return (\n <Flex align=\"center\">\n {title}\n {/*\n HACK: Sanity UI will attempt to focus the first 'focusable' descendant of any dialog.\n Typically this is fine, but since our first focusable element is a button with a tooltip, this\n default behaviour causes the tooltip to appear whenever the dialog is opened, which we don't want!\n\n To get around this, we include a pseudo-hidden input to ensure our tooltip-enabled button remains\n unfocused on initial mount.\n */}\n <input\n aria-hidden=\"true\"\n aria-label=\"Focus trap\"\n style={{opacity: 0}}\n tabIndex={-1}\n type=\"button\"\n />\n <Box style={{position: 'absolute', right: '-1.5em'}}>\n <Box className=\"button-large\">\n <Button\n fontSize={1}\n icon={LaunchIcon}\n mode=\"bleed\"\n onClick={handleOpenInNewTab}\n text=\"Add New\"\n />\n </Box>\n </Box>\n </Flex>\n )\n}\n\nexport default DialogHeader\n","export const extractName = (name: string): string => name?.split('/')?.pop()?.split('?')[0] ?? ''\n","import {Text} from '@sanity/ui'\nimport prettyBytes from 'pretty-bytes'\nimport prettyMilliseconds from 'pretty-ms'\nimport {useCallback, useRef} from 'react'\n\nimport type {Asset, ShopifyFile} from '../types'\nimport {extractName} from '../utils/helpers'\nimport {DurationLine, InfoLine, Root} from './File.styled'\n\ntype Props = {\n data: ShopifyFile\n width: number\n height: number\n onClick: (file: Asset) => void\n}\n\nexport default function File(props: Props) {\n const {onClick, data, width, height} = props\n const rootElm = useRef<HTMLDivElement>(null)\n\n const {preview, meta} = data\n const filename = extractName(data.url)\n\n const handleClick = useCallback(() => {\n onClick({...data, filename})\n }, [onClick, data, filename])\n\n return (\n <Root\n ref={rootElm}\n title={filename}\n tabIndex={0}\n style={{\n width: `${width}px`,\n height: `${height}px`,\n backgroundImage: `url(\"${preview?.url}\")`,\n }}\n onClick={handleClick}\n >\n <InfoLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Select ${filename}`}>\n {filename} {meta.fileSize && `(${prettyBytes(meta.fileSize)})`}\n </Text>\n </InfoLine>\n {meta.duration && (\n <DurationLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Video duration: ${filename}`}>\n {prettyMilliseconds(meta.duration, {colonNotation: true, secondsDecimalDigits: 0})}\n </Text>\n </DurationLine>\n )}\n </Root>\n )\n}\n","import {Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const Search = styled(Stack)`\n position: sticky;\n top: 0;\n z-index: 1;\n`\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Card, Dialog, Flex, Inline, Spinner, Stack, Text, TextInput} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useEffect, useMemo, useState} from 'react'\nimport InfiniteScroll from 'react-infinite-scroll-component'\nimport {PhotoAlbum} from 'react-photo-album'\nimport {BehaviorSubject, type Subscription} from 'rxjs'\nimport {type ObjectInputProps, PatchEvent, set, useClient, useDataset, useProjectId} from 'sanity'\n\nimport {search} from '../datastores/shopify'\nimport type {Asset, PageInfo, ShopifyAPIResponse, ShopifyFile} from '../types'\nimport DialogHeader from './DialogHeader'\nimport File from './File'\nimport {Search} from './ShopifyAssetInput.styled'\n\nconst RESULTS_PER_PAGE = 42\nconst PHOTO_SPACING = 2\nconst PHOTO_PADDING = 1\n\nexport interface AssetPickerProps extends ObjectInputProps<Asset> {\n shopifyDomain: string\n isOpen: boolean\n onClose: () => void\n}\n\nexport default function ShopifyAssetPicker(props: AssetPickerProps) {\n const {isOpen, onClose, shopifyDomain, onChange, schemaType, value} = props\n const projectId = useProjectId()\n const dataset = useDataset()\n const client = useClient({apiVersion: '2021-06-07'})\n const token = client.config().token\n\n const [apiError, setApiError] = useState('')\n const [query, setQuery] = useState('')\n const [searchResults, setSearchResults] = useState<ShopifyFile[]>([])\n const [pageInfo, setPageInfo] = useState<PageInfo>()\n const [isLoading, setIsLoading] = useState(true)\n\n const error = shopifyDomain\n ? apiError\n : 'Please configure your Shopify domain in the plugin config'\n\n const searchSubject$ = useMemo(() => new BehaviorSubject(''), [])\n const cursorSubject$ = useMemo(() => new BehaviorSubject(''), [])\n\n useEffect(() => {\n const searchSubscription: Subscription = search({\n projectId,\n dataset,\n shop: shopifyDomain,\n query: searchSubject$,\n cursor: cursorSubject$,\n resultsPerPage: RESULTS_PER_PAGE,\n token,\n }).subscribe({\n next: (results: ShopifyAPIResponse) => {\n setSearchResults((prevResults) => [...prevResults, ...results.assets])\n setPageInfo(results.pageInfo)\n setIsLoading(false)\n },\n error: (err) => {\n setApiError(\n `${\n err.response?.data?.message || err.message || 'An error occurred'\n } - check plugin configuration`,\n )\n },\n })\n\n return () => searchSubscription.unsubscribe()\n }, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset, token])\n\n const handleSearchTermChanged = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const newQuery = event.currentTarget.value\n setQuery(newQuery)\n setSearchResults([])\n setPageInfo(undefined)\n setIsLoading(true)\n\n cursorSubject$.next('')\n searchSubject$.next(newQuery)\n },\n [cursorSubject$, searchSubject$],\n )\n\n const handleScollerLoadMore = useCallback(() => {\n setIsLoading(true)\n if (pageInfo) cursorSubject$.next(pageInfo.cursor)\n searchSubject$.next(query)\n }, [cursorSubject$, pageInfo, searchSubject$, query])\n\n const handleSelect = useCallback(\n (file: Asset) => {\n file._key = value?._key\n file._type = schemaType.name\n onChange(PatchEvent.from([set(file)]))\n onClose()\n },\n [onChange, onClose, schemaType.name, value?._key],\n )\n\n const renderFile = useCallback(\n (fileProps: any) => {\n const {photo, layout} = fileProps\n return (\n <File\n onClick={handleSelect}\n data={photo.data}\n width={layout.width}\n height={layout.height}\n />\n )\n },\n [handleSelect],\n )\n\n const handleWidth = useCallback((width: number) => {\n if (width < 300) return 150\n else if (width < 600) return 200\n return 300\n }, [])\n\n return (\n <Dialog\n id=\"shopify-asset-source\"\n header={<DialogHeader title=\"Shopify Assets\" shopifyDomain={shopifyDomain} />}\n onClose={onClose}\n open={isOpen}\n width={4}\n >\n <Stack gap={3} padding={4}>\n {error ? (\n <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n <Flex align=\"center\" gap={3}>\n <Text size={2}>\n <ErrorOutlineIcon />\n </Text>\n <Inline gap={2}>\n <Text size={1}>{error}</Text>\n </Inline>\n </Flex>\n </Card>\n ) : (\n <>\n <Card>\n <Search gap={3}>\n <Text size={1} weight=\"semibold\">\n Search Shopify for assets\n </Text>\n <TextInput\n label=\"Search Images\"\n placeholder=\"filename.jpg\"\n value={query}\n onChange={handleSearchTermChanged}\n />\n </Search>\n </Card>\n {!isLoading && searchResults.length === 0 && (\n <Text size={1} muted>\n No results found\n </Text>\n )}\n <InfiniteScroll\n dataLength={searchResults.length} // This is important field to render the next data\n next={handleScollerLoadMore}\n hasMore={pageInfo ? pageInfo?.hasNextPage : true}\n scrollThreshold={0.99}\n height=\"60vh\"\n loader={\n <Flex align=\"center\" justify=\"center\" padding={3}>\n <Spinner muted />\n </Flex>\n }\n endMessage={\n <Flex align=\"center\" justify=\"center\" padding={3}>\n <Text size={1} muted>\n No more results\n </Text>\n </Flex>\n }\n >\n {searchResults && (\n <PhotoAlbum\n layout=\"rows\"\n spacing={PHOTO_SPACING}\n padding={PHOTO_PADDING}\n targetRowHeight={handleWidth}\n photos={searchResults.map((file: ShopifyFile) => ({\n src: file?.preview?.url,\n width: file?.preview?.width || 2048,\n height: file?.preview?.height || 2048,\n key: file.id,\n data: file,\n }))}\n renderPhoto={renderFile}\n componentsProps={{\n containerProps: {style: {marginBottom: `${PHOTO_SPACING}px`}},\n }}\n />\n )}\n </InfiniteScroll>\n </>\n )}\n </Stack>\n </Dialog>\n )\n}\n","const ShopifyIcon = () => {\n return (\n <svg width=\"18\" height=\"20\" viewBox=\"0 0 18 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15.3269 3.85113C15.3132 3.75015 15.2258 3.69411 15.1531 3.688C15.081 3.6819 13.6693 3.66026 13.6693 3.66026C13.6693 3.66026 12.4887 2.50392 12.3722 2.38628C12.2555 2.26865 12.0277 2.30417 11.9392 2.3308C11.9381 2.33135 11.7175 2.40016 11.3461 2.51612C11.2839 2.31304 11.1927 2.06335 11.0622 1.81255C10.6419 1.00356 10.0263 0.575752 9.2825 0.574642C9.28142 0.574642 9.28092 0.574642 9.27975 0.574642C9.22808 0.574642 9.17692 0.579636 9.12517 0.584074C9.10317 0.557441 9.08117 0.531362 9.05808 0.505838C8.73408 0.156272 8.31869 -0.0140727 7.82082 0.000908712C6.86027 0.0286521 5.90357 0.72834 5.12787 1.97124C4.58212 2.84572 4.16677 3.94435 4.04904 4.79497C2.94601 5.13953 2.17471 5.38035 2.15766 5.3859C1.60091 5.56235 1.58331 5.57955 1.51069 6.10889C1.45677 6.50895 0 17.8704 0 17.8704L12.2082 20L17.4994 18.6733C17.4994 18.6733 15.3407 3.95212 15.3269 3.85113ZM10.7349 2.707C10.4537 2.79467 10.1342 2.89454 9.78758 3.00274C9.78042 2.51224 9.72267 1.82975 9.496 1.23992C10.2249 1.3792 10.5836 2.21095 10.7349 2.707ZM9.14883 3.20249C8.509 3.40225 7.81091 3.62031 7.11058 3.83892C7.30753 3.0782 7.68107 2.32081 8.13989 1.8242C8.31044 1.63943 8.54917 1.43358 8.832 1.31594C9.09767 1.87525 9.15542 2.66705 9.14883 3.20249ZM7.84007 0.645665C8.06562 0.640671 8.25542 0.690609 8.41775 0.798253C8.15805 0.9342 7.90718 1.12951 7.67172 1.38419C7.06162 2.04448 6.594 3.06932 6.4075 4.0581C5.826 4.23954 5.25715 4.41766 4.73342 4.58078C5.06405 3.02438 6.35743 0.688944 7.84007 0.645665Z\"\n fill=\"#95BF47\"\n />\n <path\n d=\"M9.276 6.43238L8.66142 8.75117C8.66142 8.75117 7.97598 8.43658 7.16342 8.48817C5.97181 8.56417 5.95916 9.32217 5.97126 9.51242C6.03618 10.5495 8.74125 10.7759 8.89308 13.2051C9.01242 15.1161 7.88796 16.4233 6.26779 16.5265C4.32303 16.6502 3.25246 15.4933 3.25246 15.4933L3.66452 13.7256C3.66452 13.7256 4.74224 14.5457 5.60487 14.4907C6.16821 14.4547 6.36957 13.9924 6.34921 13.6657C6.26448 12.3128 4.06172 12.3927 3.92253 10.17C3.80536 8.29951 5.02337 6.40408 7.71081 6.23318C8.74617 6.16604 9.276 6.43238 9.276 6.43238Z\"\n fill=\"white\"\n />\n <path\n d=\"M15.1536 3.68853C15.0815 3.68243 13.6698 3.66078 13.6698 3.66078C13.6698 3.66078 12.4893 2.50444 12.3726 2.38681C12.3292 2.34298 12.2703 2.32023 12.2087 2.31079L12.2093 19.9994L17.4999 18.6733C17.4999 18.6733 15.3412 3.95264 15.3274 3.85166C15.3137 3.75068 15.2257 3.69463 15.1536 3.68853Z\"\n fill=\"#5E8E3E\"\n />\n </svg>\n )\n}\n\nexport default ShopifyIcon\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Button, Card, Flex, Grid, Inline, Stack, Text} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {type ObjectInputProps, PatchEvent, unset} from 'sanity'\n\nimport type {Asset} from '../types'\nimport AssetPreview from './AssetPreview'\nimport ShopifyAssetPicker from './ShopifyAssetPicker'\nimport ShopifyIcon from './ShopifyIcon'\n\nexport default function ShopifyAssetInput(props: ObjectInputProps<Asset>) {\n const {onChange, readOnly, value, schemaType} = props\n const {options} = schemaType\n const {shopifyDomain} = options\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const removeValue = useCallback(() => {\n onChange(PatchEvent.from([unset()]))\n }, [onChange])\n\n const onOpen = useCallback(() => {\n setDialogOpen(true)\n }, [setDialogOpen])\n\n const onClose = useCallback(() => {\n setDialogOpen(false)\n }, [setDialogOpen])\n\n if (!shopifyDomain) {\n return (\n <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n <Flex align=\"center\" gap={3}>\n <Text size={2}>\n <ErrorOutlineIcon />\n </Text>\n <Inline gap={2}>\n <Text size={1}>\n You need to configure your *.myshopify.com domain in the plugin / field options to\n enable Shopify Assets.\n </Text>\n </Inline>\n </Flex>\n </Card>\n )\n }\n\n return (\n <>\n {dialogOpen && (\n <ShopifyAssetPicker\n {...props}\n shopifyDomain={shopifyDomain}\n isOpen={dialogOpen}\n onClose={onClose}\n value={value}\n />\n )}\n <Stack>\n <AssetPreview value={value} />\n\n <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button\n disabled={readOnly}\n mode=\"ghost\"\n icon={ShopifyIcon}\n title=\"Select an asset\"\n onClick={onOpen}\n text=\"Select…\"\n />\n <Button\n disabled={readOnly || !value}\n tone=\"critical\"\n mode=\"ghost\"\n title=\"Remove asset\"\n text=\"Remove\"\n onClick={removeValue}\n />\n </Grid>\n </Stack>\n </>\n )\n}\n","import {defineField, defineType} from 'sanity'\n\nimport AssetDiff from '../components/AssetDiff'\nimport AssetPreview from '../components/AssetPreview'\nimport ShopifyAssetInput from '../components/ShopifyAssetInput'\n\ninterface ObjectConfig {\n shopifyDomain: string\n}\n\ndeclare module 'sanity' {\n interface ObjectOptions {\n shopifyDomain?: string\n }\n}\n\nexport const shopifyAssetSchema = (config: ObjectConfig) => {\n const {shopifyDomain} = config\n\n return defineType({\n type: 'object',\n name: 'shopify.asset',\n title: 'Shopify Asset',\n options: {\n shopifyDomain,\n },\n fields: [\n defineField({\n type: 'string',\n name: 'filename',\n title: 'Filename',\n }),\n defineField({\n type: 'string',\n name: 'id',\n title: 'ID',\n }),\n defineField({\n type: 'shopify.assetMetadata',\n name: 'meta',\n title: 'Metadata',\n }),\n defineField({\n type: 'shopify.assetPreview',\n name: 'preview',\n title: 'Preview',\n }),\n defineField({\n type: 'string',\n name: 'type',\n title: 'Type',\n }),\n defineField({\n type: 'url',\n name: 'url',\n title: 'URL',\n }),\n ],\n ...({\n components: {\n input: ShopifyAssetInput,\n diff: AssetDiff,\n preview: AssetPreview,\n },\n } as {}),\n preview: {\n select: {\n meta: 'meta',\n preview: 'preview',\n url: 'url',\n filename: 'filename',\n type: 'type',\n },\n prepare({url, meta, preview, filename, type}) {\n return {\n title: filename,\n subtitle: type,\n value: {\n url,\n meta,\n preview,\n filename,\n },\n }\n },\n },\n })\n}\n","import {definePlugin, type ObjectDefinition} from 'sanity'\n\nimport {shopifyAssetMetadataSchema} from './schema/shopifyAssetMetadataSchema'\nimport {shopifyAssetPreviewSchema} from './schema/shopifyAssetPreviewSchema'\nimport {shopifyAssetSchema} from './schema/shopifyAssetSchema'\nimport type {PluginConfig} from './types'\n\nexport * from './types'\n\n// enables autocompletion and validation of document options\ndeclare module 'sanity' {\n export namespace Schema {\n // here we type up our custom schema definition\n // options are optional on fields: the plugin-level config provides the default domain\n export type ShopifyAssetTypeDef = Omit<ObjectDefinition, 'type' | 'fields'> & {\n type: 'shopify.asset'\n options?: {\n shopifyDomain?: string\n }\n }\n // Adds 'extension-type' as an intrinsic type\n export interface IntrinsicTypeDefinition {\n 'shopify.asset': ShopifyAssetTypeDef\n }\n }\n}\n\nexport const shopifyAssets = definePlugin<PluginConfig>((config) => {\n return {\n name: 'shopify-asset-schema',\n schema: {\n types: [shopifyAssetPreviewSchema, shopifyAssetMetadataSchema, shopifyAssetSchema(config)],\n },\n }\n})\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,MAAaE,6BAA6BD,WAAW;CACnDE,MAAM;CACNC,MAAM;CACNC,OAAO;CACPC,QAAQ;EACNN,YAAY;GACVG,MAAM;GACNC,MAAM;GACNC,OAAO;EACT,CAAC;EACDL,YAAY;GACVG,MAAM;GACNC,MAAM;GACNC,OAAO;EACT,CAAC;EACDL,YAAY;GACVG,MAAM;GACNC,MAAM;GACNC,OAAO;EACT,CAAC;EACDL,YAAY;GACVG,MAAM;GACNC,MAAM;GACNC,OAAO;EACT,CAAC;EACDL,YAAY;GACVG,MAAM;GACNC,MAAM;GACNC,OAAO;EACT,CAAC;CAAC;AAEN,CAAC,GC/BYI,4BAA4BD,WAAW;CAClDE,MAAM;CACNC,MAAM;CACNC,OAAO;CACPC,QAAQ;EACNN,YAAY;GACVG,MAAM;GACNC,MAAM;GACNC,OAAO;EACT,CAAC;EACDL,YAAY;GACVG,MAAM;GACNC,MAAM;GACNC,OAAO;EACT,CAAC;EACDL,YAAY;GACVG,MAAM;GACNC,MAAM;GACNC,OAAO;EACT,CAAC;CAAC;AAEN,CAAC,GCdKS,2BAA0BC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAC,EAAAJ,UAAAE;CAC/B,IAAI,CAACF,OAAK,OACD;CAGT,IAAIA,OAAKK,SAAcC,KAAA;EAMR,IAAAC,KAAAP,OAAKK,SAAcC,KAAAE;EAAA,AAAAL,EAAA,OAAAM,OAAAC,IAAA,2BAAA,KACjBF,KAAA;GAAAG,WACM;GAASC,QACZ;GAAMC,UACJ;GAAMC,WACL;EACb,GAACX,EAAA,KAAAK,MAAAA,KAAAL,EAAA;EAAA,IAAAY;EAAA,AAAAZ,EAAA,OAAAI,KACDQ,KAAAZ,EAAA,MATFY,KAAA,oBAAA,OAAA;GACM,KAAA;GACC,KAAAR;GACE,OAAAC;EAKN,CAAA,GACDL,EAAA,KAAAI,IAAAJ,EAAA,KAAAY;EAAA,IAAAC;EAAA,AAAAb,EAAA,OAAAH,MAAAiB,OACgDD,KAAAb,EAAA,MAAlCa,KAAAhB,MAAKiB,KAAKC,OAAQ,CAAC,CAAC,CAAAC,YAAa,GAAChB,EAAA,KAAAH,MAAAiB,MAAAd,EAAA,KAAAa;EAAlC,IAAAI,KAAAJ,KAAqChB,MAAKiB,KAAKI,MAAO,CAAC,GAACC;EAAA,AAAAnB,EAAA,OAAAiB,KAAQE,KAAAnB,EAAA,MAAhFmB,KAAA,oBAAC,MAAD;GAAY,MAAA;aAAIF;EAAX,CAAA,GAA2EjB,EAAA,KAAAiB,IAAAjB,EAAA,KAAAmB;EAAA,IAAAC;EAE7E,OAF6EpB,EAAA,OAAAY,MAAAZ,EAAA,OAAAmB,MAZpFC,KAAA,oBAAC,MAAD;GAAc,SAAA;GAAe,OAAA;GAAgB,QAAA;aAC3C,qBAAC,OAAD;IAAY,KAAA;cAAZ,CACER,IAUAO,EAXI;;EADH,CAAA,GAcEnB,EAAA,KAAAY,IAAAZ,EAAA,KAAAmB,IAAAnB,EAAA,KAAAoB,MAAAA,KAAApB,EAAA,IAdPoB;CAcO;CAEV,IAAAhB;CAKQ,OALRJ,EAAA,QAAAM,OAAAC,IAAA,2BAAA,KAGCH,KAAA,oBAAC,MAAD;EAAc,SAAA;EAAe,OAAA;EAAgB,QAAA;YAC3C,oBAAA,OAAA,EAAA,UAAK,aAAgB,CAAA;CADlB,CAAA,GAEEJ,EAAA,MAAAI,MAAAA,KAAAJ,EAAA,KAFPI;AAEO,GASLoB,aAAYzB,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAC,EAAAqB,MAAAC,eAAAxB,IAA6BK;CAO1C,OAP0CJ,EAAA,OAAAsB,QAAAtB,EAAA,OAAAuB,cAE5CnB,KAAA,oBAAC,YAAD;EACQkB;EACMC;EACMzB,kBAAAA;EACV,QAAA;CAAM,CAAA,GACdE,EAAA,KAAAsB,MAAAtB,EAAA,KAAAuB,YAAAvB,EAAA,KAAAI,MAAAA,KAAAJ,EAAA,IALFI;AAKE,GCjDOwB,OAAOD,OAAOE,IAAAA,WAAAA;;;EAAG,IACzB,EAACC,YAAW;CACb,IAAMC,KAAKL,YAAY,EAACM,QAAQF,MAAME,OAAM,CAAC;CAC7C,OAAO;0BACeD,GAAGE,MAAMC,MAAMC,GAAE;0BACjBJ,GAAGE,MAAMG,OAAM;;AAEvC,EAAC,mWAsBUC,WAAWV,OAAOF,IAAI,CAAC,CAAA,WAAA;;;MAC/B,EAACK,YAAW;CACb,IAAMC,KAAKL,YAAY,EAACM,QAAQF,MAAME,OAAM,CAAC;CAC7C,OAAO;uBACYD,GAAGE,MAAMK,GAAE;uBACXP,GAAGE,MAAME,GAAE;;AAEhC,EAAC,wKAcUI,eAAeZ,OAAOF,IAAI,CAAC,CAAA,WAAA;;;MACnC,EAACK,YAAW;CACb,IAAMC,KAAKL,YAAY,EAACM,QAAQF,MAAME,OAAM,CAAC;CAC7C,OAAO;2BACgBD,GAAGE,MAAME,GAAE;2BACXJ,GAAGE,MAAMK,GAAE;;AAEpC,EAAC,0ICnDGa,eAAcC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAC,EAAAL,KAAAC,SAAAE,IACnBG,YAAkBX,OAAyB,IAAI,GAC/CY,SAAeZ,OAAkCa,KAAAA,CAAS,GAACC,IAAAC;CAE3DhB,AAF2DU,EAAA,OAAAJ,OASnDS,KAAAL,EAAA,IAAAM,KAAAN,EAAA,OAPEK,WAAA;EAMRF,AALAA,OAAMI,UAAWf,QAAQU,UAASK,WAAT,IAAyB;GAAAC,SACvC,CAAC,EAAAZ,IAAI,CAAC;GAACa,UACN;EACZ,CAAC,GAEDN,OAAMI,QAAQX,IAAK,EAAAA,IAAI,CAAC;CAAC,GACxBU,KAAA,CAACV,GAAG,GAACI,EAAA,KAAAJ,KAAAI,EAAA,KAAAK,IAAAL,EAAA,KAAAM,KAPRhB,UAAUe,IAOPC,EAAK;CAER,IAAAI,kBAAwBC,SAElBC;CAAA,AAAAZ,EAAA,OAAAa,OAAAC,IAAA,2BAAA,KAEwCF,KAAA;EAAAT,QACpC;EAAyCY,MAC3C;CACR,GAACf,EAAA,KAAAY,MAAAA,KAAAZ,EAAA;CAHD,IAAAgB,YAA8CJ,IAG7CK;CAAA,AAAAjB,EAAA,OAAAa,OAAAC,IAAA,2BAAA,KAE4BG,KAAA,EAAAC,UAAW,WAAU,GAAClB,EAAA,KAAAiB,MAAAA,KAAAjB,EAAA;CAAnD,IAAAmB,QAA6BF,IAAsBG;CAAA,AAAApB,EAAA,OAAAa,OAAAC,IAAA,2BAAA,KAI/CM,KAAA,oBAAA,QAAA;EAAW,MAAA;EAAgD,KAAA;CAAY,CAAA,GAAGpB,EAAA,KAAAoB,MAAAA,KAAApB,EAAA;CAAA,IAAAqB;CAAA,AAAArB,EAAA,OAAAH,OAOnCwB,KAAArB,EAAA,MAA5BqB,KAAAxB,SAAS,SAATsB,QAAA,CAA2B,GAACnB,EAAA,KAAAH,MAAAG,EAAA,KAAAqB;CACxB,IAAAC,KAAAN,UAAUnB,OAAK0B;CAI1B,OAJ0BvB,EAAA,OAAAqB,MAAArB,EAAA,OAAAsB,MAThCC,KAAA,qBAAA,OAAA,EAAA,UAAA,CACEH,IACA,oBAAA,OAAA;EAAK,mBAAA;YAGH,oBAAA,SAAA;GACa,cAAA;GACFV,SAAAA;GACF,OAAAW;GACI,WAAAC;GACNpB,KAAAA;EAAS,CAAA;CAEZ,CAAA,CACF,EAAA,CAAA,GAAAF,EAAA,KAAAqB,IAAArB,EAAA,KAAAsB,IAAAtB,EAAA,MAAAuB,MAAAA,KAAAvB,EAAA,KAbNuB;AAaM;AAtCU,SAAAZ,QAAAa,OAAA;CAchBA,MAAKd,gBAAiB;AAAC;ACV3B,MAAM4B,YAAYP,OAAON,GAAG,CAAC,CAAA,WAAA;;;MACxB,EAACc,YAAW;CACb,IAAMC,KAAKZ,YAAY,EAACa,QAAQF,MAAME,OAAM,CAAC;CAC7C,OAAO;0BACeD,GAAGE,MAAMC,MAAMC,GAAE;0BACjBJ,GAAGE,MAAMG,OAAM;;AAEvC,EAAC,0DAMGC,eAAcC,OAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAC,EAAAZ,OAAAa,QAAAH;CACnB,QAAQV,MAAKc,MAAb;EAAkB,KACX,SAAO;GAAA,IAAAC;GACoC,OADpCJ,EAAA,OAAAE,MACoCE,KAAAJ,EAAA,MAAvCI,KAAA,oBAAC,aAAD;IAAkBF,KAAAA;IAAU,MAAA;GAAQ,CAAA,GAAGF,EAAA,KAAAE,KAAAF,EAAA,KAAAI,KAAvCA;EAAuC;EAAA,SAAA;GAMnC,IAAAA,KAAAf,OAAKgB,SAAcH,KAAAI;GAAA,AAAAN,EAAA,OAAAO,OAAAC,IAAA,2BAAA,KACjBF,KAAA;IAAAG,UACK;IAAMC,QACR;IAAMC,SACL;IAAOC,WACL;GACb,GAACZ,EAAA,KAAAM,MAAAA,KAAAN,EAAA;GAAA,IAAAa;GAEE,OAFFb,EAAA,OAAAI,KAEES,KAAAb,EAAA,MAXPa,KAAA,oBAAC,MAAD;IAAc,SAAA;cACZ,oBAAA,OAAA;KACM,KAAA;KACC,KAAAT;KACE,OAAAE;IAKN,CAAA;GATA,CAAA,GAWEN,EAAA,KAAAI,IAAAJ,EAAA,KAAAa,KAXPA;EAWO;CAEb;AAAC,GAGGC,gBAAef,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAC,EAAAZ,UAAAU,IACpBG,MAAYb,SAASA,MAAKa;CAE1B,IAAI,CAACb,SAAD,CAAWa,KAAG,OACT;CAGT,IAAA,EAAAa,UAAAC,SAAyB3B,OACzB,EAAA4B,UAAAC,aAA6BF,MAAIZ;CAAA,AAAAJ,EAAA,OAAAE,OAAAF,EAAA,OAAAX,SAI7Be,KAAA,oBAAC,aAAD;EAAoBf;EAAYa;CAAG,CAAA,GAAIF,EAAA,KAAAE,KAAAF,EAAA,KAAAX,OAAAW,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAEf,IAAAM,KAAA,UAAUS,YAAUF;CAAA,AAAAb,EAAA,OAAAiB,WACYJ,KAAAb,EAAA,MAAxCa,KAAAI,YAAA,IAAgBpC,YAAYoC,QAAQ,EAAC,IAAGjB,EAAA,KAAAiB,UAAAjB,EAAA,KAAAa;CAAA,IAAAM;CAAA,AAAAnB,EAAA,OAAAe,YAAAf,EAAA,OAAAM,MAAAN,EAAA,OAAAa,MAFxDM,KAAA,oBAAC,UAAD;EAAmB,SAAA;EAAW,QAAA;EAAW,QAAA;YACvC,qBAAC,MAAD;GAAY,MAAA;GAAU,OAAAb;aAAtB;IACGS;IAAS;IAAEF;GADT;;CADE,CAAA,GAIEb,EAAA,KAAAe,UAAAf,EAAA,KAAAM,IAAAN,EAAA,KAAAa,IAAAb,EAAA,KAAAmB,MAAAA,KAAAnB,EAAA;CAAA,IAAAoB;CAAA,AAAApB,EAAA,OAAAkB,YAAAlB,EAAA,QAAAe,YACVK,KAAAF,YACC,oBAAC,cAAD;EAAuB,SAAA;EAAW,QAAA;EAAW,QAAA;YAC3C,oBAAC,MAAD;GAAY,MAAA;GAAU,OAAA,mBAAmBH;aACtCjC,mBAAmBoC,UAAU;IAAAG,eAAgB;IAAIC,sBAAwB;GAAC,CAAC;EADzE,CAAA;CADM,CAAA,GAKdtB,EAAA,KAAAkB,UAAAlB,EAAA,MAAAe,UAAAf,EAAA,MAAAoB,MAAAA,KAAApB,EAAA;CAAA,IAAAuB;CACS,OADTvB,EAAA,QAAAI,MAAAJ,EAAA,QAAAmB,MAAAnB,EAAA,QAAAoB,MAbHG,KAAA,qBAAC,WAAD;EAAyB,cAAA;YAAzB;GACEnB;GACAe;GAKCC;EAPO;KAcEpB,EAAA,MAAAI,IAAAJ,EAAA,MAAAmB,IAAAnB,EAAA,MAAAoB,IAAApB,EAAA,MAAAuB,MAAAA,KAAAvB,EAAA,KAdZuB;AAcY,GCjDVwB,eAAeC,UAAwC;CAC3D,IAAM,EAACX,WAAWC,SAASC,MAAMC,OAAOC,QAAQC,gBAAgBC,UAASK;CAEzE,OAAOpB,YACEJ,MAAMyB,IACX,WAAWZ,UAAS,mCAAoCC,QAAO,QAASC,KAAI,SAAUW,mBACpFV,KACF,IAAIC,UAAU,WAAWA,SAAQ,SAAUC,kBAC3C;EACES,iBAAiB;EACjBC,QAAQ;EACRC,SAASV,QACL,EACEW,eAAe,UAAUX,QAC3B,IACA,CAAC;CACP,CACF,CACD,CAAC,CAACY,KAAKxB,KAAKyB,WAAWA,OAAOC,IAAI,CAAC;AACtC,GAEMC,aAAaV,UAAsC;CACvD,IAAM,EAACX,WAAWC,SAASC,MAAME,QAAQC,gBAAgBC,UAASK;CAElE,OAAOpB,YACLJ,MAAMyB,IACJ,WAAWZ,UAAS,mCAAoCC,QAAO,QAASC,OACtEE,UAAU,WAAWA,SAAQ,SACrBC,kBACV;EACES,iBAAiB;EACjBC,QAAQ;EACRC,SAASV,QACL,EACEW,eAAe,UAAUX,QAC3B,IACA,CAAC;CACP,CACF,CACF,CAAC,CAACY,KAAKxB,KAAKyB,WAAWA,OAAOC,IAAI,CAAC;AACrC,GAEaE,UAAUX,UAAuC;CAC5D,IAAM,EAACX,WAAWC,SAASC,MAAMC,OAAOC,QAAQC,gBAAgBC,UAASK;CAEzE,OAAOrB,OACLa,MAAMe,KACJtB,eAAeQ,MAAM,GACrBZ,aAAa,GAAG,GAChBC,qBAAqB,GACrBE,WAAW,CAAC4B,GAAGC,OACTD,IACKb,YAAY;EACjBV;EACAC;EACAC;EACAC,OAAOoB;EACPnB,QAAQoB;EACRnB;EACAC;CACF,CAAC,CAAC,CAACY,KAAKzB,qBAAqB,CAAC,IAEzB4B,UAAU;EAACrB;EAAWC;EAASC;EAAME,QAAQoB;EAAGnB;EAAgBC;CAAK,CAAC,CAC9E,CACH,CACF;AACF,GClFM2B,gBAAeC,UAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GACnB,EAAAL,OAAAC,kBAA+BE,OAAKG;CAAA,AAAAF,EAAA,OAAAH,gBAInCK,KAAAF,EAAA,MAFsCE,WAAA;EACrCC,OAAMC,KAAM,WAAWP,cAAa,uBAAwB,QAAQ;CAAC,GACtEG,EAAA,KAAAH,eAAAG,EAAA,KAAAE;CAFD,IAAAG,qBAA2BH,IAERI;CAAA,AAAAN,EAAA,OAAAO,OAAAC,IAAA,2BAAA,KAafF,KAAA,oBAAA,SAAA;EACc,eAAA;EACD,cAAA;EACJ,OAAA,EAAAG,SAAU,EAAC;EACR,UAAA;EACL,MAAA;CAAQ,CAAA,GACbT,EAAA,KAAAM,MAAAA,KAAAN,EAAA;CAAA,IAAAU;CAAA,AAAAV,EAAA,OAAAO,OAAAC,IAAA,2BAAA,KACUE,KAAA;EAAAC,UAAW;EAAUC,OAAS;CAAQ,GAACZ,EAAA,KAAAU,MAAAA,KAAAV,EAAA;CAAA,IAAAa;CAAA,AAAAb,EAAA,OAAAK,qBAU7CQ,KAAAb,EAAA,MAVNa,KAAA,oBAAC,KAAD;EAAY,OAAAH;YACV,oBAAC,KAAD;GAAe,WAAA;aACb,oBAAC,QAAD;IACY,UAAA;IACJpB,MAAAA;IACD,MAAA;IACIe,SAAAA;IACJ,MAAA;GAAS,CAAA;EANd,CAAA;CADF,CAAA,GAUEL,EAAA,KAAAK,oBAAAL,EAAA,KAAAa;CAAA,IAAAC;CACD,OADCd,EAAA,OAAAa,MAAAb,EAAA,OAAAJ,SA3BRkB,KAAA,qBAAC,MAAD;EAAY,OAAA;YAAZ;GACGlB;GASDU;GAOAO;EAjBG;KA4BEb,EAAA,KAAAa,IAAAb,EAAA,KAAAJ,OAAAI,EAAA,KAAAc,MAAAA,KAAAd,EAAA,IA5BPc;AA4BO,GC7CEC,eAAeC,SAAyBA,MAAMC,MAAM,GAAG,CAAC,EAAEC,IAAI,CAAC,EAAED,MAAM,GAAG,CAAC,CAAC,MAAM;ACgB/F,SAAemB,KAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAL,SAAAH,MAAAC,OAAAC,WAAuCI,OACvCG,UAAgBjB,OAAuB,IAAI,GAE3C,EAAAkB,SAAAC,SAAwBX,MAAIY;CAAA,AAAAL,EAAA,OAAAP,KAAAa,MACUD,KAAAL,EAAA,MAArBK,KAAAjB,YAAYK,KAAIa,GAAI,GAACN,EAAA,KAAAP,KAAAa,KAAAN,EAAA,KAAAK;CAAtC,IAAAE,WAAiBF,IAAqBG;CAAA,AAAAR,EAAA,OAAAP,QAAAO,EAAA,OAAAO,YAAAP,EAAA,OAAAJ,WAENY,WAAA;EAC9BZ,QAAQ;GAAA,GAAIH;GAAIc;EAAU,CAAC;CAAC,GAC7BP,EAAA,KAAAP,MAAAO,EAAA,KAAAO,UAAAP,EAAA,KAAAJ,SAAAI,EAAA,KAAAQ,MAAAA,KAAAR,EAAA;CAFD,IAAAS,cAAoBD,IAUPE,KAAA,GAAGhB,MAAK,KACPiB,KAAA,GAAGhB,OAAM,KACAiB,KAAA,QAAQT,SAAOG,IAAK,KAAIO;CAAA,AAAAb,EAAA,OAAAU,MAAAV,EAAA,OAAAW,MAAAX,EAAA,OAAAY,MAHpCC,KAAA;EAAAnB,OACEgB;EAAYf,QACXgB;EAAaG,iBACJF;CACnB,GAACZ,EAAA,KAAAU,IAAAV,EAAA,KAAAW,IAAAX,EAAA,KAAAY,IAAAZ,EAAA,KAAAa,MAAAA,KAAAb,EAAA;CAIuB,IAAAe,KAAA,UAAUR,YAAUS;CAAA,AAAAhB,EAAA,QAAAI,KAAAa,WACsBD,KAAAhB,EAAA,OAAlDgB,KAAAZ,KAAIa,YAAJ,IAAqBnC,YAAYsB,KAAIa,QAAS,EAAC,IAAGjB,EAAA,MAAAI,KAAAa,UAAAjB,EAAA,MAAAgB;CAAA,IAAAE;CAAA,AAAAlB,EAAA,QAAAO,YAAAP,EAAA,QAAAe,MAAAf,EAAA,QAAAgB,MAFlEE,KAAA,oBAAC,UAAD;EAAmB,SAAA;EAAW,QAAA;EAAW,QAAA;YACvC,qBAAC,MAAD;GAAY,MAAA;GAAU,OAAAH;aAAtB;IACGR;IAAS;IAAES;GADT;;CADE,CAAA,GAIEhB,EAAA,MAAAO,UAAAP,EAAA,MAAAe,IAAAf,EAAA,MAAAgB,IAAAhB,EAAA,MAAAkB,MAAAA,KAAAlB,EAAA;CAAA,IAAAmB;CAAA,AAAAnB,EAAA,QAAAO,YAAAP,EAAA,QAAAI,KAAAgB,YACVD,KAAAf,KAAIgB,YACH,oBAAC,cAAD;EAAuB,SAAA;EAAW,QAAA;EAAW,QAAA;YAC3C,oBAAC,MAAD;GAAY,MAAA;GAAU,OAAA,mBAAmBb;aACtCxB,mBAAmBqB,KAAIgB,UAAW;IAAAC,eAAgB;IAAIC,sBAAwB;GAAC,CAAC;EAD9E,CAAA;CADM,CAAA,GAKdtB,EAAA,MAAAO,UAAAP,EAAA,MAAAI,KAAAgB,UAAApB,EAAA,MAAAmB,MAAAA,KAAAnB,EAAA;CAAA,IAAAuB;CACI,OADJvB,EAAA,QAAAO,YAAAP,EAAA,QAAAS,eAAAT,EAAA,QAAAa,MAAAb,EAAA,QAAAkB,MAAAlB,EAAA,QAAAmB,MAtBHI,MAAA,qBAAC,MAAD;EACOrB,KAAAA;EACEK,OAAAA;EACG,UAAA;EACH,OAAAM;EAKEJ,SAAAA;YATX,CAWES,IAKCC,EAhBE;KAuBEnB,EAAA,MAAAO,UAAAP,EAAA,MAAAS,aAAAT,EAAA,MAAAa,IAAAb,EAAA,MAAAkB,IAAAlB,EAAA,MAAAmB,IAAAnB,EAAA,MAAAuB,OAAAA,MAAAvB,EAAA,KAvBPuB;AAuBO;AChDX,MAAaG,SAASD,OAAOD,KAAK,CAAC,CAAA,WAAA;;;;ACqBnC,SAAe0C,mBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAL,QAAAC,SAAAF,eAAAO,UAAAC,YAAAC,UAAsEL,OACtEM,YAAkBvB,aAAa,GAC/BwB,UAAgBzB,WAAW,GAAC0B;CAAA,AAAAP,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KACHF,KAAA,EAAAG,YAAa,aAAY,GAACV,EAAA,KAAAO,MAAAA,KAAAP,EAAA;CAAnD,IAAAW,SAAe/B,UAAU2B,EAA0B,GAACK;CAAA,AAAAZ,EAAA,OAAAW,SACvBC,KAAAZ,EAAA,MAAfY,KAAAD,OAAME,OAAQ,GAACb,EAAA,KAAAW,QAAAX,EAAA,KAAAY;CAA7B,IAAAE,QAAcF,GAAeE,OAE7B,CAAAC,UAAAC,eAAgC5C,SAAS,EAAE,GAC3C,CAAA6C,OAAAC,YAA0B9C,SAAS,EAAE,GAAC+C;CAAA,AAAAnB,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAC4BU,KAAA,CAAA,GAAEnB,EAAA,KAAAmB,MAAAA,KAAAnB,EAAA;CAApE,IAAA,CAAAoB,eAAAC,oBAA0CjD,SAAwB+C,EAAE,GACpE,CAAAG,UAAAC,eAAgCnD,SAAmB,GACnD,CAAAoD,WAAAC,gBAAkCrD,SAAS,EAAI,GAE/CsD,QAAc/B,gBAAAoB,WAAA,6DAEiDY;CAAA,AAAA3B,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAE1BkB,KAAA,IAAIpD,gBAAgB,EAAE,GAACyB,EAAA,KAAA2B,MAAAA,KAAA3B,EAAA;CAA5D,IAAA4B,iBAAqCD,IAA4BE;CAAA,AAAA7B,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAC5BoB,KAAA,IAAItD,gBAAgB,EAAE,GAACyB,EAAA,KAAA6B,MAAAA,KAAA7B,EAAA;CAA5D,IAAA8B,iBAAqCD,IAA4BE,IAAAC;CAEjE9D,AAFiE8B,EAAA,OAAAM,WAAAN,EAAA,OAAAK,aAAAL,EAAA,OAAAL,iBAAAK,EAAA,OAAAc,SAEvDiB,WAAA;EACR,IAAAE,qBAAyClD,OAAO;GAAAsB;GAAAC;GAAA4B,MAGxCvC;GAAasB,OACZW;GAAcO,QACbL;GAAcM,gBACN7C;GAAgBuB;EAElC,CAAC,CAAC,CAAAuB,UAAW;GAAAC,OACLC,YAAA;IAGJd,AAFAJ,kBAAiBmB,gBAAiB,CAAA,GAAIA,aAAW,GAAKD,QAAOE,MAAO,CAAC,GACrElB,YAAYgB,QAAOjB,QAAS,GAC5BG,aAAa,EAAK;GAAC;GACpBC,QACMgB,QAAA;IACL1B,YACE,GACE0B,IAAGC,UAAeC,MAASC,WAAIH,IAAGG,WAAlC,oBAAiE,8BAErE;GAAC;EAEL,CAAC;EAAC,aAEWZ,mBAAkBa,YAAa;CAAC,GAC5Cd,KAAA;EAACJ;EAAgBE;EAAgBnC;EAAeU;EAAWC;EAASQ;CAAK,GAACd,EAAA,KAAAM,SAAAN,EAAA,KAAAK,WAAAL,EAAA,KAAAL,eAAAK,EAAA,KAAAc,OAAAd,EAAA,MAAA+B,IAAA/B,EAAA,MAAAgC,OAAAD,KAAA/B,EAAA,KAAAgC,KAAAhC,EAAA,MAzB7E9B,UAAU6D,IAyBPC,EAA0E;CAAC,IAAAe;CAAA,AAAA/C,EAAA,QAAAQ,OAAAC,IAAA,2BAAA,KAG5EsC,MAAAC,UAAA;EACE,IAAAC,WAAiBD,MAAKE,cAAc9C;EAOpCwB,AANAV,SAAS+B,QAAQ,GACjB5B,iBAAiB,CAAA,CAAE,GACnBE,YAAY4B,KAAAA,CAAS,GACrB1B,aAAa,EAAI,GAEjBK,eAAcQ,KAAM,EAAE,GACtBV,eAAcU,KAAMW,QAAQ;CAAC,GAC9BjD,EAAA,MAAA+C,MAAAA,KAAA/C,EAAA;CAVH,IAAAoD,0BAAgCL,IAY/BM;CAAA,AAAArD,EAAA,QAAAsB,YAAAtB,EAAA,QAAAiB,SAEyCoC,WAAA;EAGxCzB,AAFAH,aAAa,EAAI,GACbH,YAAUQ,eAAcQ,KAAMhB,SAAQa,MAAO,GACjDP,eAAcU,KAAMrB,KAAK;CAAC,GAC3BjB,EAAA,MAAAsB,UAAAtB,EAAA,MAAAiB,OAAAjB,EAAA,MAAAqD,MAAAA,KAAArD,EAAA;CAJD,IAAAsD,wBAA8BD,IAIuBE;CASdnD,AATcJ,EAAA,QAAAE,YAAAF,EAAA,QAAAH,WAAAG,EAAA,QAAAG,WAAAqD,QAAAxD,EAAA,QAAAI,OAAAqD,QAGnDF,MAAAG,SAAA;EAIE7D,AAHA6D,KAAID,OAAQrD,OAAKqD,MACjBC,KAAIC,QAASxD,WAAUqD,MACvBtD,SAASxB,WAAUkF,KAAM,CAACjF,IAAI+E,IAAI,CAAC,CAAC,CAAC,GACrC7D,QAAQ;CAAC,GACVG,EAAA,MAAAE,UAAAF,EAAA,MAAAH,SAAAG,EAAA,MAAAG,WAAAqD,MAAAxD,EAAA,MAAAI,OAAAqD,MAAAzD,EAAA,MAAAuD,MAAAA,KAAAvD,EAAA,KACoCI,OAAKqD;CAP5C,IAAAI,eAAqBN,IAQpBO;CAAA,AAAA9D,EAAA,QAAA6D,eAaEC,MAAA9D,EAAA,OAVD8D,OAAAC,cAAA;EACE,IAAA,EAAAC,OAAAC,WAAwBF;EAAS,OAE/B,oBAAC,MAAD;GACWF,SAAAA;GACH,MAAAG,MAAKpB;GACJ,OAAAqB,OAAMC;GACL,QAAAD,OAAME;EAAO,CAAA;CACrB,GAELnE,EAAA,MAAA6D,cAAA7D,EAAA,MAAA8D;CAXH,IAAAM,aAAmBN,KAenBO,cAAoBC,OAIdC;CAAA,AAAAvE,EAAA,QAAAL,gBAK2E4E,MAAAvE,EAAA,OAArEuE,MAAA,oBAAC,cAAD;EAAoB,OAAA;EAAgC5E;CAAa,CAAA,GAAIK,EAAA,MAAAL,eAAAK,EAAA,MAAAuE;CAAA,IAAAC;CAAA,AAAAxE,EAAA,QAAA0B,SAAA1B,EAAA,QAAAsD,yBAAAtD,EAAA,QAAAwB,aAAAxB,EAAA,QAAAsB,YAAAtB,EAAA,QAAAiB,SAAAjB,EAAA,QAAAoE,cAAApE,EAAA,QAAAoB,iBAK7EoD,MAAA,oBAAC,OAAD;EAAY,KAAA;EAAY,SAAA;YACrB9C,QACC,oBAAC,MAAD;GAAe,UAAA;GAAkB,SAAA;GAAW,QAAA;GAAW,QAAA;GAAQ,MAAA;aAC7D,qBAAC,MAAD;IAAY,OAAA;IAAc,KAAA;cAA1B,CACE,oBAAC,MAAD;KAAY,MAAA;eACV,oBAAC,kBAAD,CAAiB,CAAA;IADd,CAAA,GAGL,oBAAC,QAAD;KAAa,KAAA;eACX,oBAAC,MAAD;MAAY,MAAA;gBAAIA;KAAX,CAAA;IADA,CAAA,CAJJ;;EADF,CAAA,IADN,qBAAA,UAAA,EAAA,UAAA;GAaG,oBAAC,MAAD,EAAA,UACE,qBAAC,QAAD;IAAa,KAAA;cAAb,CACE,oBAAC,MAAD;KAAY,MAAA;KAAU,QAAA;eAAW;IAA5B,CAAA,GAGL,oBAAC,WAAD;KACQ,OAAA;KACM,aAAA;KACLT,OAAAA;KACGmC,UAAAA;IAAuB,CAAA,CAR9B;MADJ,CAAA;GAaJ,CAAC5B,aAAaJ,cAAaqD,WAAY,KACtC,oBAAC,MAAD;IAAY,MAAA;IAAG,OAAA;cAAM;GAAhB,CAAA;GAIP,oBAAC,gBAAD;IACc,YAAArD,cAAaqD;IACnBnB,MAAAA;IACG,SAAAhC,WAAWA,UAAQoD,cAAnB;IACQ,iBAAA;IACV,QAAA;IAEL,QAAA,oBAAC,MAAD;KAAY,OAAA;KAAiB,SAAA;KAAkB,SAAA;eAC7C,oBAAC,SAAD,EAAS,OAAA,GAAK,CAAA;IADX,CAAA;IAKL,YAAA,oBAAC,MAAD;KAAY,OAAA;KAAiB,SAAA;KAAkB,SAAA;eAC7C,oBAAC,MAAD;MAAY,MAAA;MAAG,OAAA;gBAAM;KAAhB,CAAA;IADF,CAAA;cAONtD,iBACC,oBAAC,YAAD;KACS,QAAA;KACE5B,SAAAA;KACAC,SAAAA;KACQ4E,iBAAAA;KACT,QAAAjD,cAAauD,IAAKC,MAMxB;KACWR,aAAAA;KACI,iBAAA,EAAAS,gBACC,EAAAC,OAAQ,EAAAC,cAAe,MAAoB,EAAC,EAC9D;IAAC,CAAA;GAnCQ,CAAA;EAsCE,EAAA,CAAA;CAtEjB,CAAA,GAyEE/E,EAAA,MAAA0B,OAAA1B,EAAA,MAAAsD,uBAAAtD,EAAA,MAAAwB,WAAAxB,EAAA,MAAAsB,UAAAtB,EAAA,MAAAiB,OAAAjB,EAAA,MAAAoE,YAAApE,EAAA,MAAAoB,eAAApB,EAAA,MAAAwE,OAAAA,MAAAxE,EAAA;CAAA,IAAAgF;CACD,OADChF,EAAA,QAAAJ,UAAAI,EAAA,QAAAH,WAAAG,EAAA,QAAAuE,OAAAvE,EAAA,QAAAwE,OAhFVQ,MAAA,oBAAC,QAAD;EACK,IAAA;EACK,QAAAT;EACC1E;EACHD,MAAAA;EACC,OAAA;YAEP4E;CAPK,CAAA,GAiFExE,EAAA,MAAAJ,QAAAI,EAAA,MAAAH,SAAAG,EAAA,MAAAuE,KAAAvE,EAAA,MAAAwE,KAAAxE,EAAA,MAAAgF,OAAAA,MAAAhF,EAAA,KAjFTgF;AAiFS;AApLE,SAAAJ,OAAAK,QAAA;CAAA,OAmKqD;EAAAC,KAC3CxB,QAAIyB,SAAcC;EAAAlB,OAChBR,QAAIyB,SAAgBjB,SAApB;EAA4BC,QAC3BT,QAAIyB,SAAiBhB,UAArB;EAA6BkB,KAChC3B,OAAI4B;EAAG1C,MACNc;CACR;AAAC;AAzKJ,SAAAY,MAAAJ,OAAA;CA8FqB,OAD5BA,QAAQ,MAAY,MACfA,QAAQ,MAAY,MACtB;AAAG;ACvHd,MAAMqB,oBAAc;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAeV,OAfUF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAEhBF,KAAA,qBAAA,OAAA;EAAW,OAAA;EAAY,QAAA;EAAa,SAAA;EAAiB,MAAA;EAAa,OAAA;YAAlE;GACE,oBAAA,QAAA;IACI,GAAA;IACG,MAAA;GAAS,CAAA;GAEhB,oBAAA,QAAA;IACI,GAAA;IACG,MAAA;GAAO,CAAA;GAEd,oBAAA,QAAA;IACI,GAAA;IACG,MAAA;GAAS,CAAA;EAEZ;KAAAF,EAAA,KAAAE,MAAAA,KAAAF,EAAA,IAbNE;AAaM;ACLV,SAAeoB,kBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACb,EAAAC,UAAAC,UAAAC,OAAAC,eAAgDN,OAChD,EAAAO,YAAkBD,YAClB,EAAAE,kBAAwBD,SAExB,CAAAE,YAAAC,iBAAoCnB,SAAS,EAAK,GAACoB;CAAA,AAAAV,EAAA,OAAAE,WAIlDQ,KAAAV,EAAA,MAF+BU,WAAA;EAC9BR,SAASV,WAAUmB,KAAM,CAAClB,MAAM,CAAC,CAAC,CAAC;CAAC,GACrCO,EAAA,KAAAE,UAAAF,EAAA,KAAAU;CAFD,IAAAE,cAAoBF,IAENG;CAAA,AAAAb,EAAA,OAAAc,OAAAC,IAAA,2BAAA,KAEaF,WAAA;EACzBJ,cAAc,EAAI;CAAC,GACpBT,EAAA,KAAAa,MAAAA,KAAAb,EAAA;CAFD,IAAAgB,SAAeH,IAEII;CAAA,AAAAjB,EAAA,OAAAc,OAAAC,IAAA,2BAAA,KAESE,WAAA;EAC1BR,cAAc,EAAK;CAAC,GACrBT,EAAA,KAAAiB,MAAAA,KAAAjB,EAAA;CAFD,IAAAkB,UAAgBD;CAIhB,IAAI,CAACV,eAAa;EAAA,IAAAY;EAAA,AAAAnB,EAAA,OAAAc,OAAAC,IAAA,2BAAA,KAIVI,KAAA,oBAAC,MAAD;GAAY,MAAA;aACV,oBAAC,kBAAD,CAAiB,CAAA;EADd,CAAA,GAEEnB,EAAA,KAAAmB,MAAAA,KAAAnB,EAAA;EAAA,IAAAoB;EAQJ,OARIpB,EAAA,OAAAc,OAAAC,IAAA,2BAAA,KAJXK,KAAA,oBAAC,MAAD;GAAe,UAAA;GAAkB,SAAA;GAAW,QAAA;GAAW,QAAA;GAAQ,MAAA;aAC7D,qBAAC,MAAD;IAAY,OAAA;IAAc,KAAA;cAA1B,CACED,IAGA,oBAAC,QAAD;KAAa,KAAA;eACX,oBAAC,MAAD;MAAY,MAAA;gBAAG;KAAV,CAAA;IADA,CAAA,CAJJ;;EADF,CAAA,GAYEnB,EAAA,KAAAoB,MAAAA,KAAApB,EAAA,IAZPoB;CAYO;CAEV,IAAAD;CAAA,AAAAnB,EAAA,OAAAQ,cAAAR,EAAA,OAAAD,SAAAC,EAAA,OAAAO,iBAAAP,EAAA,OAAAI,SAIIe,KAAAX,cACC,oBAAC,oBAAD;EAAmB,GACbT;EACWQ;EACPC,QAAAA;EACCU;EACFd;CAAK,CAAA,GAEfJ,EAAA,KAAAQ,YAAAR,EAAA,KAAAD,OAAAC,EAAA,KAAAO,eAAAP,EAAA,KAAAI,OAAAJ,EAAA,MAAAmB,MAAAA,KAAAnB,EAAA;CAAA,IAAAoB;CAAA,AAAApB,EAAA,QAAAI,QAE+BgB,KAAApB,EAAA,OAA9BoB,KAAA,oBAAC,cAAD,EAAqBhB,MAAK,CAAA,GAAIJ,EAAA,MAAAI,OAAAJ,EAAA,MAAAoB;CAAA,IAAAC;CAAA,AAAArB,EAAA,QAAAc,OAAAC,IAAA,2BAAA,KAETM,KAAA,EAAAC,qBAAsB,uCAAsC,GAACtB,EAAA,MAAAqB,MAAAA,KAAArB,EAAA;CAAA,IAAAuB;CAAA,AAAAvB,EAAA,QAAAG,WAQ9EoB,KAAAvB,EAAA,OAPFuB,KAAA,oBAAC,QAAD;EACYpB,UAAAA;EACL,MAAA;EACCN,MAAAA;EACA,OAAA;EACGmB,SAAAA;EACJ,MAAA;CAAS,CAAA,GACdhB,EAAA,MAAAG,UAAAH,EAAA,MAAAuB;CAEU,IAAAC,KAAArB,YAAA,CAAaC,OAAKqB;CAAA,AAAAzB,EAAA,QAAAY,eAAAZ,EAAA,QAAAwB,MAD9BC,KAAA,oBAAC,QAAD;EACY,UAAAD;EACL,MAAA;EACA,MAAA;EACC,OAAA;EACD,MAAA;EACIZ,SAAAA;CAAW,CAAA,GACpBZ,EAAA,MAAAY,aAAAZ,EAAA,MAAAwB,IAAAxB,EAAA,MAAAyB,MAAAA,KAAAzB,EAAA;CAAA,IAAA0B;CAAA,AAAA1B,EAAA,QAAAuB,MAAAvB,EAAA,QAAAyB,MAhBJC,KAAA,qBAAC,MAAD;EAAW,KAAA;EAAU,OAAAL;YAArB,CACEE,IAQAE,EATG;KAiBEzB,EAAA,MAAAuB,IAAAvB,EAAA,MAAAyB,IAAAzB,EAAA,MAAA0B,MAAAA,KAAA1B,EAAA;CAAA,IAAA2B;CAAA,AAAA3B,EAAA,QAAAoB,MAAApB,EAAA,QAAA0B,MApBTC,MAAA,qBAAC,OAAD,EAAA,UAAA,CACEP,IAEAM,EAHI,EAAA,CAAA,GAqBE1B,EAAA,MAAAoB,IAAApB,EAAA,MAAA0B,IAAA1B,EAAA,MAAA2B,OAAAA,MAAA3B,EAAA;CAAA,IAAA4B;CACP,OADO5B,EAAA,QAAA2B,OAAA3B,EAAA,QAAAmB,MA/BVS,MAAA,qBAAA,UAAA,EAAA,UAAA,CACGT,IASDQ,GAqBQ,EAAA,CAAA,GACP3B,EAAA,MAAA2B,KAAA3B,EAAA,MAAAmB,IAAAnB,EAAA,MAAA4B,OAAAA,MAAA5B,EAAA,KAhCH4B;AAgCG;AChEP,MAAaS,sBAAsBC,WAAyB;CAC1D,IAAM,EAACH,kBAAiBG;CAExB,OAAOR,WAAW;EAChBS,MAAM;EACNC,MAAM;EACNC,OAAO;EACPC,SAAS,EACPP,cACF;EACAQ,QAAQ;GACNd,YAAY;IACVU,MAAM;IACNC,MAAM;IACNC,OAAO;GACT,CAAC;GACDZ,YAAY;IACVU,MAAM;IACNC,MAAM;IACNC,OAAO;GACT,CAAC;GACDZ,YAAY;IACVU,MAAM;IACNC,MAAM;IACNC,OAAO;GACT,CAAC;GACDZ,YAAY;IACVU,MAAM;IACNC,MAAM;IACNC,OAAO;GACT,CAAC;GACDZ,YAAY;IACVU,MAAM;IACNC,MAAM;IACNC,OAAO;GACT,CAAC;GACDZ,YAAY;IACVU,MAAM;IACNC,MAAM;IACNC,OAAO;GACT,CAAC;EAAC;EAGFG,YAAY;GACVC,OAAOZ;GACPa,MAAMf;GACNgB,SAASf;EACX;EAEFe,SAAS;GACPC,QAAQ;IACNC,MAAM;IACNF,SAAS;IACTG,KAAK;IACLC,UAAU;IACVZ,MAAM;GACR;GACAa,QAAQ,EAACF,KAAKD,MAAMF,SAASI,UAAUZ,QAAO;IAC5C,OAAO;KACLE,OAAOU;KACPE,UAAUd;KACVe,OAAO;MACLJ;MACAD;MACAF;MACAI;KACF;IACF;GACF;EACF;CACF,CAAC;AACH,GC5DaiB,gBAAgBb,cAA4Bc,YAChD;CACLC,MAAM;CACNC,QAAQ,EACNC,OAAO;EAACd;EAA2BD;EAA4BE,mBAAmBU,MAAM;CAAC,EAC3F;AACF,EACD"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["defineField","defineType","shopifyAssetMetadataSchema","type","name","title","fields","defineField","defineType","shopifyAssetPreviewSchema","type","name","title","fields","Flex","Stack","Text","DiffFromTo","Asset","Props","value","ShopifyAssetDiffPreview","t0","$","_c","preview","url","t1","t2","Symbol","for","objectFit","margin","maxWidth","maxHeight","t3","t4","type","charAt","toUpperCase","t5","slice","t6","t7","DiffProps","diff","schemaType","AssetDiff","Card","getTheme_v2","styled","Root","div","theme","v2","sanity","color","muted","bg","border","InfoLine","fg","DurationLine","CSSProperties","MouseEvent","useCallback","useEffect","useRef","videojs","VideoJsPlayer","PlayerKind","VideoProps","src","kind","VideoPlayer","t0","$","_c","videoNode","player","undefined","t1","t2","current","sources","controls","stopPropagation","_temp","t3","Symbol","for","diff","className","t4","position","style","t5","t6","t7","t8","event","Box","Flex","Text","getTheme_v2","prettyBytes","prettyMilliseconds","styled","Asset","DurationLine","InfoLine","VideoPlayer","ComponentProps","value","StyledBox","theme","v2","sanity","color","muted","bg","border","RenderAsset","t0","$","_c","url","type","t1","preview","t2","Symbol","for","maxWidth","height","display","maxHeight","t3","AssetPreview","filename","meta","fileSize","duration","t4","t5","colonNotation","secondsDecimalDigits","t6","axios","BehaviorSubject","Observable","concat","defer","debounceTime","distinctUntilChanged","map","switchMap","withLatestFrom","SearchSubject","CursorSubject","fetchProps","projectId","dataset","shop","query","cursor","resultsPerPage","token","searchProps","Omit","listProps","fetchSearch","props","get","encodeURIComponent","withCredentials","method","headers","Authorization","pipe","result","data","fetchList","search","q","c","LaunchIcon","Box","Button","Flex","useCallback","Props","title","shopifyDomain","DialogHeader","props","$","_c","t0","window","open","handleOpenInNewTab","t1","Symbol","for","opacity","t2","position","right","t3","t4","extractName","name","split","pop","Text","prettyBytes","prettyMilliseconds","useCallback","useRef","Asset","ShopifyFile","extractName","DurationLine","InfoLine","Root","Props","data","width","height","onClick","file","File","props","$","_c","rootElm","preview","meta","t0","url","filename","t1","handleClick","t2","t3","t4","t5","backgroundImage","t6","t7","fileSize","t8","t9","duration","colonNotation","secondsDecimalDigits","t10","Stack","styled","Search","ErrorOutlineIcon","Card","Dialog","Flex","Inline","Spinner","Stack","Text","TextInput","ChangeEvent","useCallback","useEffect","useMemo","useState","InfiniteScroll","PhotoAlbum","BehaviorSubject","Subscription","ObjectInputProps","PatchEvent","set","useClient","useDataset","useProjectId","search","Asset","PageInfo","ShopifyAPIResponse","ShopifyFile","DialogHeader","File","Search","RESULTS_PER_PAGE","PHOTO_SPACING","PHOTO_PADDING","AssetPickerProps","shopifyDomain","isOpen","onClose","ShopifyAssetPicker","props","$","_c","onChange","schemaType","value","projectId","dataset","t0","Symbol","for","apiVersion","client","t1","config","token","apiError","setApiError","query","setQuery","t2","searchResults","setSearchResults","pageInfo","setPageInfo","isLoading","setIsLoading","error","t3","searchSubject$","t4","cursorSubject$","t5","t6","searchSubscription","shop","cursor","resultsPerPage","subscribe","next","results","prevResults","assets","err","response","data","message","unsubscribe","t7","event","newQuery","currentTarget","undefined","handleSearchTermChanged","t8","handleScollerLoadMore","t9","name","_key","file","_type","from","handleSelect","t10","fileProps","photo","layout","width","height","renderFile","handleWidth","_temp","t11","t12","length","hasNextPage","map","_temp2","containerProps","style","marginBottom","t13","file_0","src","preview","url","key","id","ShopifyIcon","$","_c","t0","Symbol","for","ErrorOutlineIcon","Button","Card","Flex","Grid","Inline","Stack","Text","useCallback","useState","ObjectInputProps","PatchEvent","unset","Asset","AssetPreview","ShopifyAssetPicker","ShopifyIcon","ShopifyAssetInput","props","$","_c","onChange","readOnly","value","schemaType","options","shopifyDomain","dialogOpen","setDialogOpen","t0","from","removeValue","t1","Symbol","for","onOpen","t2","onClose","t3","t4","t5","gridTemplateColumns","t6","t7","t8","t9","t10","t11","defineField","defineType","AssetDiff","AssetPreview","ShopifyAssetInput","ObjectConfig","shopifyDomain","ObjectOptions","shopifyAssetSchema","config","type","name","title","options","fields","components","input","diff","preview","select","meta","url","filename","prepare","subtitle","value","definePlugin","ObjectDefinition","shopifyAssetMetadataSchema","shopifyAssetPreviewSchema","shopifyAssetSchema","PluginConfig","Schema","ShopifyAssetTypeDef","Omit","type","options","shopifyDomain","IntrinsicTypeDefinition","shopifyAssets","config","name","schema","types"],"sources":["../src/schema/shopifyAssetMetadataSchema.ts","../src/schema/shopifyAssetPreviewSchema.ts","../src/components/AssetDiff.tsx","../src/components/File.styled.tsx","../src/components/VideoPlayer.tsx","../src/components/AssetPreview.tsx","../src/datastores/shopify.ts","../src/components/DialogHeader.tsx","../src/utils/helpers.ts","../src/components/File.tsx","../src/components/ShopifyAssetInput.styled.tsx","../src/components/ShopifyAssetPicker.tsx","../src/components/ShopifyIcon.tsx","../src/components/ShopifyAssetInput.tsx","../src/schema/shopifyAssetSchema.ts","../src/index.ts"],"sourcesContent":["import {defineField, defineType} from 'sanity'\n\nexport const shopifyAssetMetadataSchema = defineType({\n type: 'object',\n name: 'shopify.assetMetadata',\n title: 'Asset metadata',\n fields: [\n defineField({\n type: 'string',\n name: 'alt',\n title: 'Alternative text',\n }),\n defineField({\n type: 'number',\n name: 'duration',\n title: 'Duration',\n }),\n defineField({\n type: 'number',\n name: 'fileSize',\n title: 'File size',\n }),\n defineField({\n type: 'number',\n name: 'height',\n title: 'Height',\n }),\n defineField({\n type: 'number',\n name: 'width',\n title: 'Width',\n }),\n ],\n})\n","import {defineField, defineType} from 'sanity'\n\nexport const shopifyAssetPreviewSchema = defineType({\n type: 'object',\n name: 'shopify.assetPreview',\n title: 'Asset preview',\n fields: [\n defineField({\n type: 'number',\n name: 'height',\n title: 'Height',\n }),\n defineField({\n type: 'number',\n name: 'width',\n title: 'Width',\n }),\n defineField({\n type: 'url',\n name: 'url',\n title: 'URL',\n }),\n ],\n})\n","import {Flex, Stack, Text} from '@sanity/ui'\nimport {DiffFromTo} from 'sanity'\n\nimport type {Asset} from '../types'\n\ntype Props = {\n value: Asset | undefined\n}\n\nconst ShopifyAssetDiffPreview = ({value}: Props) => {\n if (!value) {\n return null\n }\n\n if (value?.preview?.url) {\n return (\n <Flex justify=\"center\" align=\"center\" height=\"fill\">\n <Stack gap={2}>\n <img\n alt=\"preview\"\n src={value?.preview?.url}\n style={{\n objectFit: 'contain',\n margin: 'auto',\n maxWidth: '100%',\n maxHeight: '100%',\n }}\n />\n <Text size={1}>{value.type.charAt(0).toUpperCase() + value.type.slice(1)}</Text>\n </Stack>\n </Flex>\n )\n }\n\n return (\n <Flex justify=\"center\" align=\"center\" height=\"fill\">\n <div>(no image)</div>\n </Flex>\n )\n}\n\ntype DiffProps = {\n diff: any\n schemaType: any\n}\n\nconst AssetDiff = ({diff, schemaType}: DiffProps) => {\n return (\n <DiffFromTo\n diff={diff}\n schemaType={schemaType}\n previewComponent={ShopifyAssetDiffPreview}\n layout={'grid'}\n />\n )\n}\n\nexport default AssetDiff\n","import {Card} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {styled} from 'styled-components'\n\nexport const Root = styled.div`\n ${({theme}) => {\n const v2 = getTheme_v2({sanity: theme.sanity})\n return `\n background-color: ${v2.color.muted.bg};\n border: 1px solid ${v2.color.border};\n `\n }};\n overflow: hidden;\n background-origin: content-box;\n background-repeat: no-repeat;\n background-clip: border-box;\n background-size: cover;\n position: relative;\n outline: none !important;\n box-sizing: content-box;\n user-drag: none;\n\n &:hover {\n opacity: 0.85;\n }\n\n &:focus,\n &:active {\n border: 1px solid var(--input-border-color-focus);\n box-shadow: inset 0 0 0 3px var(--input-border-color-focus);\n }\n`\n\nexport const InfoLine = styled(Card)`\n ${({theme}) => {\n const v2 = getTheme_v2({sanity: theme.sanity})\n return `\n --infoline-fg: ${v2.color.fg};\n --infoline-bg: ${v2.color.bg};\n `\n }};\n user-drag: none;\n position: absolute;\n background-color: var(--infoline-bg);\n top: 0;\n left: 0;\n max-width: 65%;\n overflow-wrap: break-word;\n\n [data-ui='Text'] {\n color: var(--infoline-fg);\n }\n`\n\nexport const DurationLine = styled(Card)`\n ${({theme}) => {\n const v2 = getTheme_v2({sanity: theme.sanity})\n return `\n --durationline-fg: ${v2.color.bg};\n --durationline-bg: ${v2.color.fg};\n `\n }};\n user-drag: none;\n position: absolute;\n background-color: var(--durationline-bg);\n top: 0;\n right: 0;\n\n [data-ui='Text'] {\n color: var(--durationline-fg);\n }\n`\n","import {type CSSProperties, type MouseEvent, useCallback, useEffect, useRef} from 'react'\nimport videojs, {type VideoJsPlayer} from 'video.js'\n\ntype PlayerKind = 'player' | 'diff'\n\ninterface VideoProps {\n src: string\n kind: PlayerKind\n}\n\nconst VideoPlayer = ({src, kind}: VideoProps) => {\n const videoNode = useRef<HTMLVideoElement>(null)\n const player = useRef<VideoJsPlayer | undefined>(undefined)\n\n useEffect(() => {\n player.current = videojs(videoNode.current ?? '', {\n sources: [{src}],\n controls: true,\n })\n\n player.current.src({src})\n }, [src])\n\n const stopPropagation = useCallback((event: MouseEvent) => {\n event.stopPropagation()\n }, [])\n\n const className: Record<PlayerKind, string> = {\n player: 'video-js vjs-16-9 vjs-big-play-centered',\n diff: 'video-js vjs-layout-tiny vjs-fluid',\n }\n\n const style: CSSProperties = {position: 'relative'}\n\n return (\n <div>\n <link href=\"https://vjs.zencdn.net/7.8.4/video-js.css\" rel=\"stylesheet\" />\n <div data-vjs-player>\n {/* Shopify assets do not provide caption tracks */}\n {/* oxlint-disable-next-line jsx-a11y/media-has-caption */}\n <video\n aria-label=\"Video preview\"\n onClick={stopPropagation}\n style={kind === 'diff' ? style : {}}\n className={className[kind]}\n ref={videoNode}\n />\n </div>\n </div>\n )\n}\n\nexport default VideoPlayer\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport prettyBytes from 'pretty-bytes'\nimport prettyMilliseconds from 'pretty-ms'\nimport {styled} from 'styled-components'\n\nimport type {Asset} from '../types'\nimport {DurationLine, InfoLine} from './File.styled'\nimport VideoPlayer from './VideoPlayer'\n\ninterface ComponentProps {\n value: Asset | undefined\n}\n\nconst StyledBox = styled(Box)`\n ${({theme}) => {\n const v2 = getTheme_v2({sanity: theme.sanity})\n return `\n background-color: ${v2.color.muted.bg};\n border: 1px solid ${v2.color.border};\n `\n }};\n display: flex;\n justify-content: center;\n position: relative;\n`\n\nconst RenderAsset = ({value, url}: {value: Asset; url: string}) => {\n switch (value.type) {\n case 'video':\n return <VideoPlayer src={url} kind=\"player\" />\n default:\n return (\n <Flex justify=\"center\">\n <img\n alt=\"preview\"\n src={value?.preview?.url}\n style={{\n maxWidth: '100%',\n height: 'auto',\n display: 'block',\n maxHeight: '30vh',\n }}\n />\n </Flex>\n )\n }\n}\n\nconst AssetPreview = ({value}: ComponentProps) => {\n const url = value && value.url\n\n if (!value || !url) {\n return null\n }\n\n const {filename, meta} = value\n const {fileSize, duration} = meta\n\n return (\n <StyledBox marginBottom={2}>\n <RenderAsset value={value} url={url} />\n <InfoLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Select ${filename}`}>\n {filename} {fileSize && `(${prettyBytes(fileSize)})`}\n </Text>\n </InfoLine>\n {duration && (\n <DurationLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Video duration: ${filename}`}>\n {prettyMilliseconds(duration, {colonNotation: true, secondsDecimalDigits: 0})}\n </Text>\n </DurationLine>\n )}\n </StyledBox>\n )\n}\n\nexport default AssetPreview\n","import axios from 'axios'\nimport {BehaviorSubject, Observable, concat, defer} from 'rxjs'\nimport {debounceTime, distinctUntilChanged, map, switchMap, withLatestFrom} from 'rxjs/operators'\n\ntype SearchSubject = BehaviorSubject<string>\ntype CursorSubject = BehaviorSubject<any>\n\ninterface fetchProps {\n projectId: string\n dataset: string\n shop: string\n query: SearchSubject\n cursor: CursorSubject\n resultsPerPage: number\n token?: string\n}\n\ninterface searchProps extends Omit<fetchProps, 'query' | 'cursor'> {\n query: string\n cursor: string\n}\ninterface listProps extends Omit<fetchProps, 'query' | 'cursor'> {\n cursor: string\n}\n\nconst fetchSearch = (props: searchProps): Observable<any> => {\n const {projectId, dataset, shop, query, cursor, resultsPerPage, token} = props\n\n return defer(() => {\n return axios.get(\n `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}&query=${encodeURIComponent(\n query,\n )}${cursor && `&cursor=${cursor}`}&limit=${resultsPerPage}`,\n {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\n }\n : {},\n },\n )\n }).pipe(map((result) => result.data))\n}\n\nconst fetchList = (props: listProps): Observable<any> => {\n const {projectId, dataset, shop, cursor, resultsPerPage, token} = props\n\n return defer(() =>\n axios.get(\n `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}${\n cursor && `&cursor=${cursor}`\n }&limit=${resultsPerPage}`,\n {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\n }\n : {},\n },\n ),\n ).pipe(map((result) => result.data))\n}\n\nexport const search = (props: fetchProps): Observable<any> => {\n const {projectId, dataset, shop, query, cursor, resultsPerPage, token} = props\n\n return concat(\n query.pipe(\n withLatestFrom(cursor),\n debounceTime(500),\n distinctUntilChanged(),\n switchMap(([q, c]) => {\n if (q) {\n return fetchSearch({\n projectId,\n dataset,\n shop,\n query: q,\n cursor: c,\n resultsPerPage,\n token,\n }).pipe(distinctUntilChanged())\n }\n return fetchList({projectId, dataset, shop, cursor: c, resultsPerPage, token})\n }),\n ),\n )\n}\n","import {LaunchIcon} from '@sanity/icons/Launch'\nimport {Box, Button, Flex} from '@sanity/ui'\nimport {useCallback} from 'react'\n\ninterface Props {\n title: string\n shopifyDomain: string\n}\n\nconst DialogHeader = (props: Props) => {\n const {title, shopifyDomain} = props\n\n const handleOpenInNewTab = useCallback(() => {\n window.open(`https://${shopifyDomain}/admin/content/files`, '_blank')\n }, [shopifyDomain])\n\n return (\n <Flex align=\"center\">\n {title}\n {/*\n HACK: Sanity UI will attempt to focus the first 'focusable' descendant of any dialog.\n Typically this is fine, but since our first focusable element is a button with a tooltip, this\n default behaviour causes the tooltip to appear whenever the dialog is opened, which we don't want!\n\n To get around this, we include a pseudo-hidden input to ensure our tooltip-enabled button remains\n unfocused on initial mount.\n */}\n <input\n aria-hidden=\"true\"\n aria-label=\"Focus trap\"\n style={{opacity: 0}}\n tabIndex={-1}\n type=\"button\"\n />\n <Box style={{position: 'absolute', right: '-1.5em'}}>\n <Box className=\"button-large\">\n <Button\n fontSize={1}\n icon={LaunchIcon}\n mode=\"bleed\"\n onClick={handleOpenInNewTab}\n text=\"Add New\"\n />\n </Box>\n </Box>\n </Flex>\n )\n}\n\nexport default DialogHeader\n","export const extractName = (name: string): string => name?.split('/')?.pop()?.split('?')[0] ?? ''\n","import {Text} from '@sanity/ui'\nimport prettyBytes from 'pretty-bytes'\nimport prettyMilliseconds from 'pretty-ms'\nimport {useCallback, useRef} from 'react'\n\nimport type {Asset, ShopifyFile} from '../types'\nimport {extractName} from '../utils/helpers'\nimport {DurationLine, InfoLine, Root} from './File.styled'\n\ntype Props = {\n data: ShopifyFile\n width: number\n height: number\n onClick: (file: Asset) => void\n}\n\nexport default function File(props: Props) {\n const {onClick, data, width, height} = props\n const rootElm = useRef<HTMLDivElement>(null)\n\n const {preview, meta} = data\n const filename = extractName(data.url)\n\n const handleClick = useCallback(() => {\n onClick({...data, filename})\n }, [onClick, data, filename])\n\n return (\n <Root\n ref={rootElm}\n title={filename}\n tabIndex={0}\n style={{\n width: `${width}px`,\n height: `${height}px`,\n backgroundImage: `url(\"${preview?.url}\")`,\n }}\n onClick={handleClick}\n >\n <InfoLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Select ${filename}`}>\n {filename} {meta.fileSize && `(${prettyBytes(meta.fileSize)})`}\n </Text>\n </InfoLine>\n {meta.duration && (\n <DurationLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Video duration: ${filename}`}>\n {prettyMilliseconds(meta.duration, {colonNotation: true, secondsDecimalDigits: 0})}\n </Text>\n </DurationLine>\n )}\n </Root>\n )\n}\n","import {Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const Search = styled(Stack)`\n position: sticky;\n top: 0;\n z-index: 1;\n`\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Card, Dialog, Flex, Inline, Spinner, Stack, Text, TextInput} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useEffect, useMemo, useState} from 'react'\nimport InfiniteScroll from 'react-infinite-scroll-component'\nimport {PhotoAlbum} from 'react-photo-album'\nimport {BehaviorSubject, type Subscription} from 'rxjs'\nimport {type ObjectInputProps, PatchEvent, set, useClient, useDataset, useProjectId} from 'sanity'\n\nimport {search} from '../datastores/shopify'\nimport type {Asset, PageInfo, ShopifyAPIResponse, ShopifyFile} from '../types'\nimport DialogHeader from './DialogHeader'\nimport File from './File'\nimport {Search} from './ShopifyAssetInput.styled'\n\nconst RESULTS_PER_PAGE = 42\nconst PHOTO_SPACING = 2\nconst PHOTO_PADDING = 1\n\nexport interface AssetPickerProps extends ObjectInputProps<Asset> {\n shopifyDomain: string\n isOpen: boolean\n onClose: () => void\n}\n\nexport default function ShopifyAssetPicker(props: AssetPickerProps) {\n const {isOpen, onClose, shopifyDomain, onChange, schemaType, value} = props\n const projectId = useProjectId()\n const dataset = useDataset()\n const client = useClient({apiVersion: '2021-06-07'})\n const token = client.config().token\n\n const [apiError, setApiError] = useState('')\n const [query, setQuery] = useState('')\n const [searchResults, setSearchResults] = useState<ShopifyFile[]>([])\n const [pageInfo, setPageInfo] = useState<PageInfo>()\n const [isLoading, setIsLoading] = useState(true)\n\n const error = shopifyDomain\n ? apiError\n : 'Please configure your Shopify domain in the plugin config'\n\n const searchSubject$ = useMemo(() => new BehaviorSubject(''), [])\n const cursorSubject$ = useMemo(() => new BehaviorSubject(''), [])\n\n useEffect(() => {\n const searchSubscription: Subscription = search({\n projectId,\n dataset,\n shop: shopifyDomain,\n query: searchSubject$,\n cursor: cursorSubject$,\n resultsPerPage: RESULTS_PER_PAGE,\n token,\n }).subscribe({\n next: (results: ShopifyAPIResponse) => {\n setSearchResults((prevResults) => [...prevResults, ...results.assets])\n setPageInfo(results.pageInfo)\n setIsLoading(false)\n },\n error: (err) => {\n setApiError(\n `${\n err.response?.data?.message || err.message || 'An error occurred'\n } - check plugin configuration`,\n )\n },\n })\n\n return () => searchSubscription.unsubscribe()\n }, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset, token])\n\n const handleSearchTermChanged = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const newQuery = event.currentTarget.value\n setQuery(newQuery)\n setSearchResults([])\n setPageInfo(undefined)\n setIsLoading(true)\n\n cursorSubject$.next('')\n searchSubject$.next(newQuery)\n },\n [cursorSubject$, searchSubject$],\n )\n\n const handleScollerLoadMore = useCallback(() => {\n setIsLoading(true)\n if (pageInfo) cursorSubject$.next(pageInfo.cursor)\n searchSubject$.next(query)\n }, [cursorSubject$, pageInfo, searchSubject$, query])\n\n const handleSelect = useCallback(\n (file: Asset) => {\n file._key = value?._key\n file._type = schemaType.name\n onChange(PatchEvent.from([set(file)]))\n onClose()\n },\n [onChange, onClose, schemaType.name, value?._key],\n )\n\n const renderFile = useCallback(\n (fileProps: any) => {\n const {photo, layout} = fileProps\n return (\n <File\n onClick={handleSelect}\n data={photo.data}\n width={layout.width}\n height={layout.height}\n />\n )\n },\n [handleSelect],\n )\n\n const handleWidth = useCallback((width: number) => {\n if (width < 300) return 150\n else if (width < 600) return 200\n return 300\n }, [])\n\n return (\n <Dialog\n id=\"shopify-asset-source\"\n header={<DialogHeader title=\"Shopify Assets\" shopifyDomain={shopifyDomain} />}\n onClose={onClose}\n open={isOpen}\n width={4}\n >\n <Stack gap={3} padding={4}>\n {error ? (\n <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n <Flex align=\"center\" gap={3}>\n <Text size={2}>\n <ErrorOutlineIcon />\n </Text>\n <Inline gap={2}>\n <Text size={1}>{error}</Text>\n </Inline>\n </Flex>\n </Card>\n ) : (\n <>\n <Card>\n <Search gap={3}>\n <Text size={1} weight=\"semibold\">\n Search Shopify for assets\n </Text>\n <TextInput\n label=\"Search Images\"\n placeholder=\"filename.jpg\"\n value={query}\n onChange={handleSearchTermChanged}\n />\n </Search>\n </Card>\n {!isLoading && searchResults.length === 0 && (\n <Text size={1} muted>\n No results found\n </Text>\n )}\n <InfiniteScroll\n dataLength={searchResults.length} // This is important field to render the next data\n next={handleScollerLoadMore}\n hasMore={pageInfo ? pageInfo?.hasNextPage : true}\n scrollThreshold={0.99}\n height=\"60vh\"\n loader={\n <Flex align=\"center\" justify=\"center\" padding={3}>\n <Spinner muted />\n </Flex>\n }\n endMessage={\n <Flex align=\"center\" justify=\"center\" padding={3}>\n <Text size={1} muted>\n No more results\n </Text>\n </Flex>\n }\n >\n {searchResults && (\n <PhotoAlbum\n layout=\"rows\"\n spacing={PHOTO_SPACING}\n padding={PHOTO_PADDING}\n targetRowHeight={handleWidth}\n photos={searchResults.map((file: ShopifyFile) => ({\n src: file?.preview?.url,\n width: file?.preview?.width || 2048,\n height: file?.preview?.height || 2048,\n key: file.id,\n data: file,\n }))}\n renderPhoto={renderFile}\n componentsProps={{\n containerProps: {style: {marginBottom: `${PHOTO_SPACING}px`}},\n }}\n />\n )}\n </InfiniteScroll>\n </>\n )}\n </Stack>\n </Dialog>\n )\n}\n","const ShopifyIcon = () => {\n return (\n <svg width=\"18\" height=\"20\" viewBox=\"0 0 18 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15.3269 3.85113C15.3132 3.75015 15.2258 3.69411 15.1531 3.688C15.081 3.6819 13.6693 3.66026 13.6693 3.66026C13.6693 3.66026 12.4887 2.50392 12.3722 2.38628C12.2555 2.26865 12.0277 2.30417 11.9392 2.3308C11.9381 2.33135 11.7175 2.40016 11.3461 2.51612C11.2839 2.31304 11.1927 2.06335 11.0622 1.81255C10.6419 1.00356 10.0263 0.575752 9.2825 0.574642C9.28142 0.574642 9.28092 0.574642 9.27975 0.574642C9.22808 0.574642 9.17692 0.579636 9.12517 0.584074C9.10317 0.557441 9.08117 0.531362 9.05808 0.505838C8.73408 0.156272 8.31869 -0.0140727 7.82082 0.000908712C6.86027 0.0286521 5.90357 0.72834 5.12787 1.97124C4.58212 2.84572 4.16677 3.94435 4.04904 4.79497C2.94601 5.13953 2.17471 5.38035 2.15766 5.3859C1.60091 5.56235 1.58331 5.57955 1.51069 6.10889C1.45677 6.50895 0 17.8704 0 17.8704L12.2082 20L17.4994 18.6733C17.4994 18.6733 15.3407 3.95212 15.3269 3.85113ZM10.7349 2.707C10.4537 2.79467 10.1342 2.89454 9.78758 3.00274C9.78042 2.51224 9.72267 1.82975 9.496 1.23992C10.2249 1.3792 10.5836 2.21095 10.7349 2.707ZM9.14883 3.20249C8.509 3.40225 7.81091 3.62031 7.11058 3.83892C7.30753 3.0782 7.68107 2.32081 8.13989 1.8242C8.31044 1.63943 8.54917 1.43358 8.832 1.31594C9.09767 1.87525 9.15542 2.66705 9.14883 3.20249ZM7.84007 0.645665C8.06562 0.640671 8.25542 0.690609 8.41775 0.798253C8.15805 0.9342 7.90718 1.12951 7.67172 1.38419C7.06162 2.04448 6.594 3.06932 6.4075 4.0581C5.826 4.23954 5.25715 4.41766 4.73342 4.58078C5.06405 3.02438 6.35743 0.688944 7.84007 0.645665Z\"\n fill=\"#95BF47\"\n />\n <path\n d=\"M9.276 6.43238L8.66142 8.75117C8.66142 8.75117 7.97598 8.43658 7.16342 8.48817C5.97181 8.56417 5.95916 9.32217 5.97126 9.51242C6.03618 10.5495 8.74125 10.7759 8.89308 13.2051C9.01242 15.1161 7.88796 16.4233 6.26779 16.5265C4.32303 16.6502 3.25246 15.4933 3.25246 15.4933L3.66452 13.7256C3.66452 13.7256 4.74224 14.5457 5.60487 14.4907C6.16821 14.4547 6.36957 13.9924 6.34921 13.6657C6.26448 12.3128 4.06172 12.3927 3.92253 10.17C3.80536 8.29951 5.02337 6.40408 7.71081 6.23318C8.74617 6.16604 9.276 6.43238 9.276 6.43238Z\"\n fill=\"white\"\n />\n <path\n d=\"M15.1536 3.68853C15.0815 3.68243 13.6698 3.66078 13.6698 3.66078C13.6698 3.66078 12.4893 2.50444 12.3726 2.38681C12.3292 2.34298 12.2703 2.32023 12.2087 2.31079L12.2093 19.9994L17.4999 18.6733C17.4999 18.6733 15.3412 3.95264 15.3274 3.85166C15.3137 3.75068 15.2257 3.69463 15.1536 3.68853Z\"\n fill=\"#5E8E3E\"\n />\n </svg>\n )\n}\n\nexport default ShopifyIcon\n","import {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Button, Card, Flex, Grid, Inline, Stack, Text} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\nimport {type ObjectInputProps, PatchEvent, unset} from 'sanity'\n\nimport type {Asset} from '../types'\nimport AssetPreview from './AssetPreview'\nimport ShopifyAssetPicker from './ShopifyAssetPicker'\nimport ShopifyIcon from './ShopifyIcon'\n\nexport default function ShopifyAssetInput(props: ObjectInputProps<Asset>) {\n const {onChange, readOnly, value, schemaType} = props\n const {options} = schemaType\n const {shopifyDomain} = options\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const removeValue = useCallback(() => {\n onChange(PatchEvent.from([unset()]))\n }, [onChange])\n\n const onOpen = useCallback(() => {\n setDialogOpen(true)\n }, [setDialogOpen])\n\n const onClose = useCallback(() => {\n setDialogOpen(false)\n }, [setDialogOpen])\n\n if (!shopifyDomain) {\n return (\n <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n <Flex align=\"center\" gap={3}>\n <Text size={2}>\n <ErrorOutlineIcon />\n </Text>\n <Inline gap={2}>\n <Text size={1}>\n You need to configure your *.myshopify.com domain in the plugin / field options to\n enable Shopify Assets.\n </Text>\n </Inline>\n </Flex>\n </Card>\n )\n }\n\n return (\n <>\n {dialogOpen && (\n <ShopifyAssetPicker\n {...props}\n shopifyDomain={shopifyDomain}\n isOpen={dialogOpen}\n onClose={onClose}\n value={value}\n />\n )}\n <Stack>\n <AssetPreview value={value} />\n\n <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button\n disabled={readOnly}\n mode=\"ghost\"\n icon={ShopifyIcon}\n title=\"Select an asset\"\n onClick={onOpen}\n text=\"Select…\"\n />\n <Button\n disabled={readOnly || !value}\n tone=\"critical\"\n mode=\"ghost\"\n title=\"Remove asset\"\n text=\"Remove\"\n onClick={removeValue}\n />\n </Grid>\n </Stack>\n </>\n )\n}\n","import {defineField, defineType} from 'sanity'\n\nimport AssetDiff from '../components/AssetDiff'\nimport AssetPreview from '../components/AssetPreview'\nimport ShopifyAssetInput from '../components/ShopifyAssetInput'\n\ninterface ObjectConfig {\n shopifyDomain: string\n}\n\ndeclare module 'sanity' {\n interface ObjectOptions {\n shopifyDomain?: string\n }\n}\n\nexport const shopifyAssetSchema = (config: ObjectConfig) => {\n const {shopifyDomain} = config\n\n return defineType({\n type: 'object',\n name: 'shopify.asset',\n title: 'Shopify Asset',\n options: {\n shopifyDomain,\n },\n fields: [\n defineField({\n type: 'string',\n name: 'filename',\n title: 'Filename',\n }),\n defineField({\n type: 'string',\n name: 'id',\n title: 'ID',\n }),\n defineField({\n type: 'shopify.assetMetadata',\n name: 'meta',\n title: 'Metadata',\n }),\n defineField({\n type: 'shopify.assetPreview',\n name: 'preview',\n title: 'Preview',\n }),\n defineField({\n type: 'string',\n name: 'type',\n title: 'Type',\n }),\n defineField({\n type: 'url',\n name: 'url',\n title: 'URL',\n }),\n ],\n ...({\n components: {\n input: ShopifyAssetInput,\n diff: AssetDiff,\n preview: AssetPreview,\n },\n } as {}),\n preview: {\n select: {\n meta: 'meta',\n preview: 'preview',\n url: 'url',\n filename: 'filename',\n type: 'type',\n },\n prepare({url, meta, preview, filename, type}) {\n return {\n title: filename,\n subtitle: type,\n value: {\n url,\n meta,\n preview,\n filename,\n },\n }\n },\n },\n })\n}\n","import {definePlugin, type ObjectDefinition} from 'sanity'\n\nimport {shopifyAssetMetadataSchema} from './schema/shopifyAssetMetadataSchema'\nimport {shopifyAssetPreviewSchema} from './schema/shopifyAssetPreviewSchema'\nimport {shopifyAssetSchema} from './schema/shopifyAssetSchema'\nimport type {PluginConfig} from './types'\n\nexport * from './types'\n\n// enables autocompletion and validation of document options\ndeclare module 'sanity' {\n export namespace Schema {\n // here we type up our custom schema definition\n // options are optional on fields: the plugin-level config provides the default domain\n export type ShopifyAssetTypeDef = Omit<ObjectDefinition, 'type' | 'fields'> & {\n type: 'shopify.asset'\n options?: {\n shopifyDomain?: string\n }\n }\n // Adds 'extension-type' as an intrinsic type\n export interface IntrinsicTypeDefinition {\n 'shopify.asset': ShopifyAssetTypeDef\n }\n }\n}\n\nexport const shopifyAssets = definePlugin<PluginConfig>((config) => {\n return {\n name: 'shopify-asset-schema',\n schema: {\n types: [shopifyAssetPreviewSchema, shopifyAssetMetadataSchema, shopifyAssetSchema(config)],\n },\n }\n})\n"],"mappings":"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"}
\ No newline at end of file