sanity-plugin-shopify-assets
2.0.122.0.13
~
Modified (5 files)
Index: package/dist/index.js
===================================================================
--- package/dist/index.js
+++ package/dist/index.js
@@ -1,4 +1,5 @@
+import "@sanity/ui/styles.css";
import { DiffFromTo, PatchEvent, defineField, definePlugin, defineType, set, unset, useClient, useDataset, useProjectId } from "sanity";
import { c } from "react/compiler-runtime";
import { Box, Button, Card, Dialog, Flex, Grid, Inline, Spinner, Stack, Text, TextInput } from "@sanity/ui";
import { Fragment, jsx, jsxs } from "react/jsx-runtime"; Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
{
"name": "sanity-plugin-shopify-assets",
- "version": "2.0.12",
+ "version": "2.0.13",
"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.2.1",
- "@sanity/ui": "^3.5.1",
+ "@sanity/ui": "^4.0.0",
"axios": "^1.18.1",
"pretty-bytes": "^6.1.1",
"pretty-ms": "^8.0.0",
"react-infinite-scroll-component": "^6.1.1",
@@ -49,9 +49,9 @@
"@types/video.js": "^7.3.58",
"babel-plugin-react-compiler": "^1.0.0",
"react": "^19.2.8",
"react-dom": "^19.2.8",
- "sanity": "^6.7.0",
+ "sanity": "^6.9.0",
"styled-components": "^6.4.4",
"tsdown": "^0.22.14"
},
"peerDependencies": { 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;;;;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
+{"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;;;YCxCS;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","useEffect","useRef","videojs","VideoJsPlayer","PlayerKind","VideoProps","src","kind","className","Record","player","diff","VideoPlayer","t0","$","_c","videoContainer","undefined","t1","t2","container","current","videoElement","document","createElement","setAttribute","style","position","appendChild","stopPropagation","_temp","addEventListener","vjsPlayer","controls","removeEventListener","dispose","t3","t4","t5","Symbol","for","t6","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","cursorParam","encodeURIComponent","url","get","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","nextValue","_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 {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 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\nconst VideoPlayer = ({src, kind}: VideoProps) => {\n const videoContainer = useRef<HTMLDivElement>(null)\n const player = useRef<VideoJsPlayer | undefined>(undefined)\n\n // Create the player once, mounting an imperatively created <video> element so\n // that Video.js (not React) owns it. This avoids DOM ownership conflicts when\n // the player is disposed. Dispose on unmount so DOM nodes and event handlers\n // aren't leaked, and don't recreate the player on every source change.\n useEffect(() => {\n const container = videoContainer.current\n if (!container) return undefined\n\n const videoElement = document.createElement('video')\n videoElement.setAttribute('aria-label', 'Video preview')\n videoElement.className = className[kind]\n if (kind === 'diff') videoElement.style.position = 'relative'\n container.appendChild(videoElement)\n\n const stopPropagation = (event: Event) => event.stopPropagation()\n container.addEventListener('click', stopPropagation)\n\n const vjsPlayer = videojs(videoElement, {controls: true})\n player.current = vjsPlayer\n\n return () => {\n container.removeEventListener('click', stopPropagation)\n vjsPlayer.dispose()\n player.current = undefined\n }\n }, [kind])\n\n // Update the source on the existing player instead of recreating it.\n useEffect(() => {\n player.current?.src({src})\n }, [src])\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 <div ref={videoContainer} />\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 const cursorParam = cursor ? `&cursor=${encodeURIComponent(cursor)}` : ''\n const url = `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${encodeURIComponent(\n shop,\n )}&query=${encodeURIComponent(query)}${cursorParam}&limit=${resultsPerPage}`\n\n return defer(() =>\n axios.get(url, {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\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 const cursorParam = cursor ? `&cursor=${encodeURIComponent(cursor)}` : ''\n const url = `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${encodeURIComponent(\n shop,\n )}${cursorParam}&limit=${resultsPerPage}`\n\n return defer(() =>\n axios.get(url, {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\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 // No value-based dedupe here on purpose: callers clear results and set their\n // loading state before pushing to these subjects, so suppressing a repeated\n // [query, cursor] pair would leave them loading forever. debounceTime already\n // collapses rapid input and switchMap cancels superseded requests.\n return concat(\n query.pipe(\n withLatestFrom(cursor),\n debounceTime(500),\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', 'noopener,noreferrer')\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 const nextValue: Asset = {...file, _key: value?._key, _type: schemaType.name}\n onChange(PatchEvent.from([set(nextValue)]))\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?.shopifyDomain\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
+{"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","useEffect","useRef","videojs","VideoJsPlayer","PlayerKind","VideoProps","src","kind","className","Record","player","diff","VideoPlayer","t0","$","_c","videoContainer","undefined","t1","t2","container","current","videoElement","document","createElement","setAttribute","style","position","appendChild","stopPropagation","_temp","addEventListener","vjsPlayer","controls","removeEventListener","dispose","t3","t4","t5","Symbol","for","t6","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","cursorParam","encodeURIComponent","url","get","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","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","nextValue","_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 {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 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\nconst VideoPlayer = ({src, kind}: VideoProps) => {\n const videoContainer = useRef<HTMLDivElement>(null)\n const player = useRef<VideoJsPlayer | undefined>(undefined)\n\n // Create the player once, mounting an imperatively created <video> element so\n // that Video.js (not React) owns it. This avoids DOM ownership conflicts when\n // the player is disposed. Dispose on unmount so DOM nodes and event handlers\n // aren't leaked, and don't recreate the player on every source change.\n useEffect(() => {\n const container = videoContainer.current\n if (!container) return undefined\n\n const videoElement = document.createElement('video')\n videoElement.setAttribute('aria-label', 'Video preview')\n videoElement.className = className[kind]\n if (kind === 'diff') videoElement.style.position = 'relative'\n container.appendChild(videoElement)\n\n const stopPropagation = (event: Event) => event.stopPropagation()\n container.addEventListener('click', stopPropagation)\n\n const vjsPlayer = videojs(videoElement, {controls: true})\n player.current = vjsPlayer\n\n return () => {\n container.removeEventListener('click', stopPropagation)\n vjsPlayer.dispose()\n player.current = undefined\n }\n }, [kind])\n\n // Update the source on the existing player instead of recreating it.\n useEffect(() => {\n player.current?.src({src})\n }, [src])\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 <div ref={videoContainer} />\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 const cursorParam = cursor ? `&cursor=${encodeURIComponent(cursor)}` : ''\n const url = `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${encodeURIComponent(\n shop,\n )}&query=${encodeURIComponent(query)}${cursorParam}&limit=${resultsPerPage}`\n\n return defer(() =>\n axios.get(url, {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\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 const cursorParam = cursor ? `&cursor=${encodeURIComponent(cursor)}` : ''\n const url = `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${encodeURIComponent(\n shop,\n )}${cursorParam}&limit=${resultsPerPage}`\n\n return defer(() =>\n axios.get(url, {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\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 // No value-based dedupe here on purpose: callers clear results and set their\n // loading state before pushing to these subjects, so suppressing a repeated\n // [query, cursor] pair would leave them loading forever. debounceTime already\n // collapses rapid input and switchMap cancels superseded requests.\n return concat(\n query.pipe(\n withLatestFrom(cursor),\n debounceTime(500),\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', 'noopener,noreferrer')\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 const nextValue: Asset = {...file, _key: value?._key, _type: schemaType.name}\n onChange(PatchEvent.from([set(nextValue)]))\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?.shopifyDomain\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 '@sanity/ui/styles.css'\nimport {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 Index: package/dist/index.d.ts
===================================================================
--- package/dist/index.d.ts
+++ package/dist/index.d.ts
@@ -1,4 +1,5 @@
+import "@sanity/ui/styles.css";
import { ObjectDefinition, ObjectSchemaType } from "sanity";
interface PluginConfig {
/**
* Your *.myshopify.com domain. Do not include https:// or any path.