sanity-plugin-aprimo

2.0.202.0.21
dist/index.js.map
~dist/index.js.mapModified
+1−1
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":["{\n  value,\n  layout = 'block',\n}: ComponentProps","layout = 'block'","{\n            maxWidth: layout === 'block' ? '80px' : '100%',\n            height: 'auto',\n          }","layout === 'block' ? '80px' : '100%'","<Box>\n        <img\n          alt={`preview for ${value?.title}`}\n          src={url}\n          style={{\n            maxWidth: layout === 'block' ? '80px' : '100%',\n            height: 'auto',\n          }}\n        />\n      </Box>","`preview for ${value?.title}`","{value, tenantName}: AprimoFilePreviewProps","() => {\n    window.open(damUrl, '_blank')\n  }","useCallback(() => {\n    window.open(damUrl, '_blank')\n  }, [damUrl])","<Label as=\"p\">Aprimo File Asset</Label>","<Stack gap={3}>\n            <Label as=\"p\">Aprimo File Asset</Label>\n            <Text as=\"p\">{assetName}</Text>\n          </Stack>","<Stack>\n            {/* ADD launch icon */}\n            <Button\n              tone=\"primary\"\n              as={'a'}\n              href={damUrl}\n              target={`_blank`}\n              onClick={onClick}\n              text={'View'}\n            />\n          </Stack>","<Box paddingY={1}>\n      <Card paddingY={3} paddingX={3} radius={1} shadow={1}>\n        <Flex align=\"center\" justify=\"space-between\" gap={1}>\n          <Stack gap={3}>\n            <Label as=\"p\">Aprimo File Asset</Label>\n            <Text as=\"p\">{assetName}</Text>\n          </Stack>\n          <Stack>\n            {/* ADD launch icon */}\n            <Button\n              tone=\"primary\"\n              as={'a'}\n              href={damUrl}\n              target={`_blank`}\n              onClick={onClick}\n              text={'View'}\n            />\n          </Stack>\n        </Flex>\n      </Card>\n    </Box>","{tenantName}","() => {\n    onChange(PatchEvent.from(unset()))\n  }","() => {\n    const setAsset = (asset: Record<string, any>) => {\n      onChange(PatchEvent.from(asset ? set(asset) : unset()))\n    }\n\n    const handleMessageEvent = async (event: MessageEvent) => {\n      // Ensure only messages from the Aprimo Content Selector are handled\n      if (tenantName && event.origin === `https://${tenantName || ''}.dam.aprimo.com`) {\n        //if cancel, get out of fetching state\n        if (event.data.result === 'cancel') {\n          setIsLoading(false)\n        } else if (event.data.selection && event.data.selection[0] && isLoading) {\n          if (_key) {\n            setAsset({...event.data.selection[0], _key})\n          } else {\n            setAsset(event.data.selection[0])\n          }\n          setIsLoading(false)\n        }\n      }\n    }\n\n    window.addEventListener('message', handleMessageEvent)\n    //cleanup\n    return () => window.removeEventListener('message', handleMessageEvent)\n  }","[tenantName, isLoading, _key, onChange]","() => {\n    const selectType = schemaType.name === 'aprimo.cdnasset' ? 'singlerendition' : 'singlefile'\n    setIsLoading(true)\n    openSelector(tenantName, selectType)\n  }","name","useMemo(() => {\n    if (value && schemaType.name === 'aprimo.cdnasset' && isAprimoCDNAsset(value)) {\n      return <AprimoCDNPreview value={value} layout=\"default\" />\n    } else if (value && schemaType.name === 'aprimo.asset' && isAprimoAsset(value)) {\n      return <AprimoFilePreview value={value} tenantName={tenantName} />\n    }\n    return null\n  }, [tenantName, schemaType, value])","<AprimoCDNPreview value={value} layout=\"default\" />","<AprimoFilePreview value={value} tenantName={tenantName} />","<Box padding={3}>\n        <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n          <Text>\n            The tenant name has not been set in the configuration for the Aprimo plugin. Please add\n            a tenant name.\n          </Text>\n        </Card>\n      </Box>","<Box>{preview}</Box>","{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}","<Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n          Select…\n        </Button>","<Button\n          disabled={readOnly || !value}\n          color=\"danger\"\n          mode=\"ghost\"\n          title=\"Remove asset\"\n          onClick={removeValue}\n        >\n          Remove\n        </Button>","readOnly || !value","<Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n        <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n          Select…\n        </Button>\n        <Button\n          disabled={readOnly || !value}\n          color=\"danger\"\n          mode=\"ghost\"\n          title=\"Remove asset\"\n          onClick={removeValue}\n        >\n          Remove\n        </Button>\n      </Grid>","<Box>\n      <Box>{preview}</Box>\n      <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n        <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n          Select…\n        </Button>\n        <Button\n          disabled={readOnly || !value}\n          color=\"danger\"\n          mode=\"ghost\"\n          title=\"Remove asset\"\n          onClick={removeValue}\n        >\n          Remove\n        </Button>\n      </Grid>\n    </Box>","{\n  diff,\n  schemaType,\n}: {\n  diff: any\n  schemaType: SchemaType\n}","<DiffFromTo diff={diff} schemaType={schemaType} previewComponent={AprimoCDNPreview} />"],"sources":["../src/utils.ts","../src/components/AprimoCDNPreview.tsx","../src/components/AprimoFilePreview.tsx","../src/components/AprimoWidget.tsx","../src/schema/AdditionalFile.ts","../src/schema/AprimoAsset.ts","../src/components/AprimoDiff.tsx","../src/schema/AprimoCDNAsset.tsx","../src/plugin.tsx"],"sourcesContent":["export const openSelector = (tenantName: string, selectType: string): void => {\n  let assetType = 'asset rendition'\n  switch (selectType) {\n    case 'singlefile':\n      assetType = 'asset file'\n      break\n    case 'multiple':\n      assetType = 'asset renditions'\n      break\n    default:\n      assetType = 'asset rendition'\n  }\n\n  const selectorOptions = {\n    title: `Select ${assetType}`,\n    description: `Select the ${assetType} you'd like to bring into this document`,\n    accept: `Use ${assetType}`,\n    select: selectType,\n  }\n\n  const params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,\n  width=1000,height=600,left=100,top=100`\n\n  const encodedOptions = btoa(JSON.stringify(selectorOptions))\n  window.open(\n    `https://${tenantName}.dam.aprimo.com/dam/selectcontent#options=${encodedOptions}`,\n    'selector',\n    params,\n  )\n}\n","import {Box} from '@sanity/ui'\n\nimport type {AprimoCDNAsset} from '../types'\n\ntype ComponentProps = {\n  layout?: 'default' | 'block'\n  value: AprimoCDNAsset\n  title?: string\n}\n\nexport function AprimoCDNPreview({\n  value,\n  layout = 'block',\n}: ComponentProps): React.JSX.Element | null {\n  const url = value?.rendition?.publicuri\n  if (url) {\n    return (\n      <Box>\n        <img\n          alt={`preview for ${value?.title}`}\n          src={url}\n          style={{\n            maxWidth: layout === 'block' ? '80px' : '100%',\n            height: 'auto',\n          }}\n        />\n      </Box>\n    )\n  }\n  return null\n}\n","import {Card, Box, Flex, Stack, Text, Label, Button} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport type {AprimoAsset} from '../types'\n\ninterface AprimoFilePreviewProps {\n  value: AprimoAsset\n  tenantName: string\n}\n\nexport function AprimoFilePreview({value, tenantName}: AprimoFilePreviewProps): React.JSX.Element {\n  const {title, additionalFile, id} = value\n  const assetName = additionalFile?.fileName || title || 'No name'\n  const damUrl = `https://${tenantName}.dam.aprimo.com/Assets/Records/${id}`\n  const onClick = useCallback(() => {\n    window.open(damUrl, '_blank')\n  }, [damUrl])\n  return (\n    <Box paddingY={1}>\n      <Card paddingY={3} paddingX={3} radius={1} shadow={1}>\n        <Flex align=\"center\" justify=\"space-between\" gap={1}>\n          <Stack gap={3}>\n            <Label as=\"p\">Aprimo File Asset</Label>\n            <Text as=\"p\">{assetName}</Text>\n          </Stack>\n          <Stack>\n            {/* ADD launch icon */}\n            <Button\n              tone=\"primary\"\n              as={'a'}\n              href={damUrl}\n              target={`_blank`}\n              onClick={onClick}\n              text={'View'}\n            />\n          </Stack>\n        </Flex>\n      </Card>\n    </Box>\n  )\n}\n","import {Box, Button, Card, Grid, Text} from '@sanity/ui'\nimport {useEffect, useState, useMemo} from 'react'\nimport {PatchEvent, type ObjectInputProps, set, unset} from 'sanity'\n\nimport type {AprimoCDNAsset, AprimoAsset, AprimoConfig} from '../types'\nimport {openSelector} from '../utils'\nimport {AprimoCDNPreview} from './AprimoCDNPreview'\nimport {AprimoFilePreview} from './AprimoFilePreview'\n\nconst isAprimoCDNAsset = (value: AprimoCDNAsset | AprimoAsset): value is AprimoCDNAsset => {\n  return value && value.hasOwnProperty('rendition')\n}\n\nconst isAprimoAsset = (value: AprimoCDNAsset | AprimoAsset): value is AprimoAsset => {\n  //the ID is all we need to construct a link back to Aprimo\n  return value && value.hasOwnProperty('id')\n}\n\nexport interface AprimoWidgetProps extends ObjectInputProps<AprimoCDNAsset | AprimoAsset> {\n  pluginConfig: AprimoConfig\n}\n\nexport function AprimoWidget(props: AprimoWidgetProps): React.JSX.Element {\n  const {\n    value,\n    readOnly,\n    onChange,\n    schemaType,\n    pluginConfig: {tenantName},\n  } = props\n\n  const _key = value?._key\n  const removeValue = () => {\n    onChange(PatchEvent.from(unset()))\n  }\n\n  //this keeps track of which component is requesting an asset\n  const [isLoading, setIsLoading] = useState(false)\n\n  useEffect(() => {\n    const setAsset = (asset: Record<string, any>) => {\n      onChange(PatchEvent.from(asset ? set(asset) : unset()))\n    }\n\n    const handleMessageEvent = async (event: MessageEvent) => {\n      // Ensure only messages from the Aprimo Content Selector are handled\n      if (tenantName && event.origin === `https://${tenantName || ''}.dam.aprimo.com`) {\n        //if cancel, get out of fetching state\n        if (event.data.result === 'cancel') {\n          setIsLoading(false)\n        } else if (event.data.selection && event.data.selection[0] && isLoading) {\n          if (_key) {\n            setAsset({...event.data.selection[0], _key})\n          } else {\n            setAsset(event.data.selection[0])\n          }\n          setIsLoading(false)\n        }\n      }\n    }\n\n    window.addEventListener('message', handleMessageEvent)\n    //cleanup\n    return () => window.removeEventListener('message', handleMessageEvent)\n  }, [tenantName, isLoading, _key, onChange])\n\n  const action = () => {\n    const selectType = schemaType.name === 'aprimo.cdnasset' ? 'singlerendition' : 'singlefile'\n    setIsLoading(true)\n    openSelector(tenantName, selectType)\n  }\n\n  const preview = useMemo(() => {\n    if (value && schemaType.name === 'aprimo.cdnasset' && isAprimoCDNAsset(value)) {\n      return <AprimoCDNPreview value={value} layout=\"default\" />\n    } else if (value && schemaType.name === 'aprimo.asset' && isAprimoAsset(value)) {\n      return <AprimoFilePreview value={value} tenantName={tenantName} />\n    }\n    return null\n  }, [tenantName, schemaType, value])\n\n  if (!tenantName) {\n    return (\n      <Box padding={3}>\n        <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n          <Text>\n            The tenant name has not been set in the configuration for the Aprimo plugin. Please add\n            a tenant name.\n          </Text>\n        </Card>\n      </Box>\n    )\n  }\n\n  return (\n    <Box>\n      <Box>{preview}</Box>\n      <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n        <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n          Select…\n        </Button>\n        <Button\n          disabled={readOnly || !value}\n          color=\"danger\"\n          mode=\"ghost\"\n          title=\"Remove asset\"\n          onClick={removeValue}\n        >\n          Remove\n        </Button>\n      </Grid>\n    </Box>\n  )\n}\n","import {defineType} from 'sanity'\n\nexport const AprimoAdditionalFileSchema = defineType({\n  name: 'aprimo.additionalFile',\n  title: 'Aprimo Additional File',\n  type: 'object',\n  fields: [\n    {\n      name: 'additionalFileId',\n      title: 'Additional File ID',\n      type: 'string',\n    },\n    {\n      name: 'fileName',\n      title: 'File Name',\n      type: 'string',\n    },\n    {\n      name: 'label',\n      title: 'Label',\n      type: 'string',\n    },\n    {\n      name: 'type',\n      title: 'Type',\n      type: 'string',\n    },\n  ],\n})\n","import {AprimoWidget} from '../components/AprimoWidget'\n\nexport const AprimoAssetSchema = {\n  type: 'object',\n  name: 'aprimo.asset',\n  title: 'Aprimo Asset',\n  fields: [\n    {\n      type: 'string',\n      name: 'id',\n    },\n    {\n      type: 'string',\n      name: 'title',\n    },\n    {\n      type: 'aprimo.additionalFile',\n      name: 'additionalFile',\n    },\n  ],\n  components: {\n    input: AprimoWidget,\n  },\n}\n","import {DiffFromTo, type SchemaType} from 'sanity'\n\nimport {AprimoCDNPreview} from './AprimoCDNPreview'\n\n//@TODO: HUGE\nexport function AprimoDiff({\n  diff,\n  schemaType,\n}: {\n  diff: any\n  schemaType: SchemaType\n}): React.JSX.Element {\n  return <DiffFromTo diff={diff} schemaType={schemaType} previewComponent={AprimoCDNPreview} />\n}\n","import {AprimoDiff} from '../components/AprimoDiff'\nimport {AprimoWidget} from '../components/AprimoWidget'\n\nexport const AprimoCDNAssetSchema = {\n  type: 'object',\n  name: 'aprimo.cdnasset',\n  title: 'Aprimo CDN Asset',\n  fields: [\n    {\n      type: 'string',\n      name: 'id',\n    },\n    {\n      type: 'string',\n      name: 'title',\n    },\n    {\n      type: 'object',\n      name: 'rendition',\n      fields: [\n        {\n          type: 'string',\n          name: 'publicuri',\n        },\n      ],\n    },\n  ],\n  components: {\n    input: AprimoWidget,\n    diff: AprimoDiff,\n  },\n  preview: {\n    select: {\n      url: 'rendition.publicuri',\n      title: 'title',\n    },\n    prepare({url, title}: {url: string; title: string}) {\n      return {\n        title,\n        media: <img src={url} alt=\"\" style={{height: '100%', width: '100%'}} />,\n      }\n    },\n  },\n}\n","import {definePlugin, isObjectInputProps, type SchemaType} from 'sanity'\n\nimport {AprimoWidget} from './components/AprimoWidget'\nimport {AprimoAdditionalFileSchema} from './schema/AdditionalFile'\nimport {AprimoAssetSchema} from './schema/AprimoAsset'\nimport {AprimoCDNAssetSchema} from './schema/AprimoCDNAsset'\nimport type {AprimoCDNAsset, AprimoConfig} from './types'\n\nexport const aprimoPlugin = definePlugin((config: Partial<AprimoConfig>) => {\n  const reqConfig: AprimoConfig = {\n    tenantName: '',\n    ...config,\n  }\n\n  return {\n    name: 'aprimo-assets',\n    schema: {\n      types: [AprimoCDNAssetSchema, AprimoAdditionalFileSchema, AprimoAssetSchema],\n    },\n    form: {\n      components: {\n        input: (props) => {\n          if (\n            isObjectInputProps(props) &&\n            (isType(props.schemaType, AprimoCDNAssetSchema.name) ||\n              isType(props.schemaType, AprimoAssetSchema.name))\n          ) {\n            return (\n              // @ts-expect-error - TODO: fix this\n              <AprimoWidget\n                {...props}\n                // oxlint-disable-next-line no-unsafe-type-assertion\n                value={props.value as AprimoCDNAsset}\n                pluginConfig={reqConfig}\n              />\n            )\n          }\n          //add array check here to render the widget in array\n          return props.renderDefault(props)\n        },\n      },\n    },\n  }\n})\n\nfunction isType(schemaType: SchemaType, name: string): boolean {\n  if (schemaType.name === name) {\n    return true\n  }\n  if (schemaType.type) {\n    return isType(schemaType.type, name)\n  }\n  return false\n}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["{\n  value,\n  layout = 'block',\n}: ComponentProps","layout = 'block'","{\n            maxWidth: layout === 'block' ? '80px' : '100%',\n            height: 'auto',\n          }","layout === 'block' ? '80px' : '100%'","<Box>\n        <img\n          alt={`preview for ${value?.title}`}\n          src={url}\n          style={{\n            maxWidth: layout === 'block' ? '80px' : '100%',\n            height: 'auto',\n          }}\n        />\n      </Box>","`preview for ${value?.title}`","_c","{value, tenantName}: AprimoFilePreviewProps","() => {\n    window.open(damUrl, '_blank')\n  }","useCallback(() => {\n    window.open(damUrl, '_blank')\n  }, [damUrl])","<Label as=\"p\">Aprimo File Asset</Label>","<Stack gap={3}>\n            <Label as=\"p\">Aprimo File Asset</Label>\n            <Text as=\"p\">{assetName}</Text>\n          </Stack>","<Stack>\n            {/* ADD launch icon */}\n            <Button\n              tone=\"primary\"\n              as={'a'}\n              href={damUrl}\n              target={`_blank`}\n              onClick={onClick}\n              text={'View'}\n            />\n          </Stack>","<Box paddingY={1}>\n      <Card paddingY={3} paddingX={3} radius={1} shadow={1}>\n        <Flex align=\"center\" justify=\"space-between\" gap={1}>\n          <Stack gap={3}>\n            <Label as=\"p\">Aprimo File Asset</Label>\n            <Text as=\"p\">{assetName}</Text>\n          </Stack>\n          <Stack>\n            {/* ADD launch icon */}\n            <Button\n              tone=\"primary\"\n              as={'a'}\n              href={damUrl}\n              target={`_blank`}\n              onClick={onClick}\n              text={'View'}\n            />\n          </Stack>\n        </Flex>\n      </Card>\n    </Box>","_c","{tenantName}","() => {\n    onChange(PatchEvent.from(unset()))\n  }","() => {\n    const setAsset = (asset: Record<string, any>) => {\n      onChange(PatchEvent.from(asset ? set(asset) : unset()))\n    }\n\n    const handleMessageEvent = async (event: MessageEvent) => {\n      // Ensure only messages from the Aprimo Content Selector are handled\n      if (tenantName && event.origin === `https://${tenantName || ''}.dam.aprimo.com`) {\n        //if cancel, get out of fetching state\n        if (event.data.result === 'cancel') {\n          setIsLoading(false)\n        } else if (event.data.selection && event.data.selection[0] && isLoading) {\n          if (_key) {\n            setAsset({...event.data.selection[0], _key})\n          } else {\n            setAsset(event.data.selection[0])\n          }\n          setIsLoading(false)\n        }\n      }\n    }\n\n    window.addEventListener('message', handleMessageEvent)\n    //cleanup\n    return () => window.removeEventListener('message', handleMessageEvent)\n  }","[tenantName, isLoading, _key, onChange]","() => {\n    const selectType = schemaType.name === 'aprimo.cdnasset' ? 'singlerendition' : 'singlefile'\n    setIsLoading(true)\n    openSelector(tenantName, selectType)\n  }","name","useMemo(() => {\n    if (value && schemaType.name === 'aprimo.cdnasset' && isAprimoCDNAsset(value)) {\n      return <AprimoCDNPreview value={value} layout=\"default\" />\n    } else if (value && schemaType.name === 'aprimo.asset' && isAprimoAsset(value)) {\n      return <AprimoFilePreview value={value} tenantName={tenantName} />\n    }\n    return null\n  }, [tenantName, schemaType, value])","<AprimoCDNPreview value={value} layout=\"default\" />","<AprimoFilePreview value={value} tenantName={tenantName} />","<Box padding={3}>\n        <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n          <Text>\n            The tenant name has not been set in the configuration for the Aprimo plugin. Please add\n            a tenant name.\n          </Text>\n        </Card>\n      </Box>","<Box>{preview}</Box>","{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}","<Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n          Select…\n        </Button>","<Button\n          disabled={readOnly || !value}\n          color=\"danger\"\n          mode=\"ghost\"\n          title=\"Remove asset\"\n          onClick={removeValue}\n        >\n          Remove\n        </Button>","readOnly || !value","<Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n        <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n          Select…\n        </Button>\n        <Button\n          disabled={readOnly || !value}\n          color=\"danger\"\n          mode=\"ghost\"\n          title=\"Remove asset\"\n          onClick={removeValue}\n        >\n          Remove\n        </Button>\n      </Grid>","<Box>\n      <Box>{preview}</Box>\n      <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n        <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n          Select…\n        </Button>\n        <Button\n          disabled={readOnly || !value}\n          color=\"danger\"\n          mode=\"ghost\"\n          title=\"Remove asset\"\n          onClick={removeValue}\n        >\n          Remove\n        </Button>\n      </Grid>\n    </Box>","_c","{\n  diff,\n  schemaType,\n}: {\n  diff: any\n  schemaType: SchemaType\n}","<DiffFromTo diff={diff} schemaType={schemaType} previewComponent={AprimoCDNPreview} />","_c"],"sources":["../src/utils.ts","../src/components/AprimoCDNPreview.tsx","../src/components/AprimoFilePreview.tsx","../src/components/AprimoWidget.tsx","../src/schema/AdditionalFile.ts","../src/schema/AprimoAsset.ts","../src/components/AprimoDiff.tsx","../src/schema/AprimoCDNAsset.tsx","../src/plugin.tsx"],"sourcesContent":["export const openSelector = (tenantName: string, selectType: string): void => {\n  let assetType = 'asset rendition'\n  switch (selectType) {\n    case 'singlefile':\n      assetType = 'asset file'\n      break\n    case 'multiple':\n      assetType = 'asset renditions'\n      break\n    default:\n      assetType = 'asset rendition'\n  }\n\n  const selectorOptions = {\n    title: `Select ${assetType}`,\n    description: `Select the ${assetType} you'd like to bring into this document`,\n    accept: `Use ${assetType}`,\n    select: selectType,\n  }\n\n  const params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,\n  width=1000,height=600,left=100,top=100`\n\n  const encodedOptions = btoa(JSON.stringify(selectorOptions))\n  window.open(\n    `https://${tenantName}.dam.aprimo.com/dam/selectcontent#options=${encodedOptions}`,\n    'selector',\n    params,\n  )\n}\n","import {Box} from '@sanity/ui'\n\nimport type {AprimoCDNAsset} from '../types'\n\ntype ComponentProps = {\n  layout?: 'default' | 'block'\n  value: AprimoCDNAsset\n  title?: string\n}\n\nexport function AprimoCDNPreview({\n  value,\n  layout = 'block',\n}: ComponentProps): React.JSX.Element | null {\n  const url = value?.rendition?.publicuri\n  if (url) {\n    return (\n      <Box>\n        <img\n          alt={`preview for ${value?.title}`}\n          src={url}\n          style={{\n            maxWidth: layout === 'block' ? '80px' : '100%',\n            height: 'auto',\n          }}\n        />\n      </Box>\n    )\n  }\n  return null\n}\n","import {Card, Box, Flex, Stack, Text, Label, Button} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport type {AprimoAsset} from '../types'\n\ninterface AprimoFilePreviewProps {\n  value: AprimoAsset\n  tenantName: string\n}\n\nexport function AprimoFilePreview({value, tenantName}: AprimoFilePreviewProps): React.JSX.Element {\n  const {title, additionalFile, id} = value\n  const assetName = additionalFile?.fileName || title || 'No name'\n  const damUrl = `https://${tenantName}.dam.aprimo.com/Assets/Records/${id}`\n  const onClick = useCallback(() => {\n    window.open(damUrl, '_blank')\n  }, [damUrl])\n  return (\n    <Box paddingY={1}>\n      <Card paddingY={3} paddingX={3} radius={1} shadow={1}>\n        <Flex align=\"center\" justify=\"space-between\" gap={1}>\n          <Stack gap={3}>\n            <Label as=\"p\">Aprimo File Asset</Label>\n            <Text as=\"p\">{assetName}</Text>\n          </Stack>\n          <Stack>\n            {/* ADD launch icon */}\n            <Button\n              tone=\"primary\"\n              as={'a'}\n              href={damUrl}\n              target={`_blank`}\n              onClick={onClick}\n              text={'View'}\n            />\n          </Stack>\n        </Flex>\n      </Card>\n    </Box>\n  )\n}\n","import {Box, Button, Card, Grid, Text} from '@sanity/ui'\nimport {useEffect, useState, useMemo} from 'react'\nimport {PatchEvent, type ObjectInputProps, set, unset} from 'sanity'\n\nimport type {AprimoCDNAsset, AprimoAsset, AprimoConfig} from '../types'\nimport {openSelector} from '../utils'\nimport {AprimoCDNPreview} from './AprimoCDNPreview'\nimport {AprimoFilePreview} from './AprimoFilePreview'\n\nconst isAprimoCDNAsset = (value: AprimoCDNAsset | AprimoAsset): value is AprimoCDNAsset => {\n  return value && value.hasOwnProperty('rendition')\n}\n\nconst isAprimoAsset = (value: AprimoCDNAsset | AprimoAsset): value is AprimoAsset => {\n  //the ID is all we need to construct a link back to Aprimo\n  return value && value.hasOwnProperty('id')\n}\n\nexport interface AprimoWidgetProps extends ObjectInputProps<AprimoCDNAsset | AprimoAsset> {\n  pluginConfig: AprimoConfig\n}\n\nexport function AprimoWidget(props: AprimoWidgetProps): React.JSX.Element {\n  const {\n    value,\n    readOnly,\n    onChange,\n    schemaType,\n    pluginConfig: {tenantName},\n  } = props\n\n  const _key = value?._key\n  const removeValue = () => {\n    onChange(PatchEvent.from(unset()))\n  }\n\n  //this keeps track of which component is requesting an asset\n  const [isLoading, setIsLoading] = useState(false)\n\n  useEffect(() => {\n    const setAsset = (asset: Record<string, any>) => {\n      onChange(PatchEvent.from(asset ? set(asset) : unset()))\n    }\n\n    const handleMessageEvent = async (event: MessageEvent) => {\n      // Ensure only messages from the Aprimo Content Selector are handled\n      if (tenantName && event.origin === `https://${tenantName || ''}.dam.aprimo.com`) {\n        //if cancel, get out of fetching state\n        if (event.data.result === 'cancel') {\n          setIsLoading(false)\n        } else if (event.data.selection && event.data.selection[0] && isLoading) {\n          if (_key) {\n            setAsset({...event.data.selection[0], _key})\n          } else {\n            setAsset(event.data.selection[0])\n          }\n          setIsLoading(false)\n        }\n      }\n    }\n\n    window.addEventListener('message', handleMessageEvent)\n    //cleanup\n    return () => window.removeEventListener('message', handleMessageEvent)\n  }, [tenantName, isLoading, _key, onChange])\n\n  const action = () => {\n    const selectType = schemaType.name === 'aprimo.cdnasset' ? 'singlerendition' : 'singlefile'\n    setIsLoading(true)\n    openSelector(tenantName, selectType)\n  }\n\n  const preview = useMemo(() => {\n    if (value && schemaType.name === 'aprimo.cdnasset' && isAprimoCDNAsset(value)) {\n      return <AprimoCDNPreview value={value} layout=\"default\" />\n    } else if (value && schemaType.name === 'aprimo.asset' && isAprimoAsset(value)) {\n      return <AprimoFilePreview value={value} tenantName={tenantName} />\n    }\n    return null\n  }, [tenantName, schemaType, value])\n\n  if (!tenantName) {\n    return (\n      <Box padding={3}>\n        <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n          <Text>\n            The tenant name has not been set in the configuration for the Aprimo plugin. Please add\n            a tenant name.\n          </Text>\n        </Card>\n      </Box>\n    )\n  }\n\n  return (\n    <Box>\n      <Box>{preview}</Box>\n      <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n        <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n          Select…\n        </Button>\n        <Button\n          disabled={readOnly || !value}\n          color=\"danger\"\n          mode=\"ghost\"\n          title=\"Remove asset\"\n          onClick={removeValue}\n        >\n          Remove\n        </Button>\n      </Grid>\n    </Box>\n  )\n}\n","import {defineType} from 'sanity'\n\nexport const AprimoAdditionalFileSchema = defineType({\n  name: 'aprimo.additionalFile',\n  title: 'Aprimo Additional File',\n  type: 'object',\n  fields: [\n    {\n      name: 'additionalFileId',\n      title: 'Additional File ID',\n      type: 'string',\n    },\n    {\n      name: 'fileName',\n      title: 'File Name',\n      type: 'string',\n    },\n    {\n      name: 'label',\n      title: 'Label',\n      type: 'string',\n    },\n    {\n      name: 'type',\n      title: 'Type',\n      type: 'string',\n    },\n  ],\n})\n","import {AprimoWidget} from '../components/AprimoWidget'\n\nexport const AprimoAssetSchema = {\n  type: 'object',\n  name: 'aprimo.asset',\n  title: 'Aprimo Asset',\n  fields: [\n    {\n      type: 'string',\n      name: 'id',\n    },\n    {\n      type: 'string',\n      name: 'title',\n    },\n    {\n      type: 'aprimo.additionalFile',\n      name: 'additionalFile',\n    },\n  ],\n  components: {\n    input: AprimoWidget,\n  },\n}\n","import {DiffFromTo, type SchemaType} from 'sanity'\n\nimport {AprimoCDNPreview} from './AprimoCDNPreview'\n\n//@TODO: HUGE\nexport function AprimoDiff({\n  diff,\n  schemaType,\n}: {\n  diff: any\n  schemaType: SchemaType\n}): React.JSX.Element {\n  return <DiffFromTo diff={diff} schemaType={schemaType} previewComponent={AprimoCDNPreview} />\n}\n","import {AprimoDiff} from '../components/AprimoDiff'\nimport {AprimoWidget} from '../components/AprimoWidget'\n\nexport const AprimoCDNAssetSchema = {\n  type: 'object',\n  name: 'aprimo.cdnasset',\n  title: 'Aprimo CDN Asset',\n  fields: [\n    {\n      type: 'string',\n      name: 'id',\n    },\n    {\n      type: 'string',\n      name: 'title',\n    },\n    {\n      type: 'object',\n      name: 'rendition',\n      fields: [\n        {\n          type: 'string',\n          name: 'publicuri',\n        },\n      ],\n    },\n  ],\n  components: {\n    input: AprimoWidget,\n    diff: AprimoDiff,\n  },\n  preview: {\n    select: {\n      url: 'rendition.publicuri',\n      title: 'title',\n    },\n    prepare({url, title}: {url: string; title: string}) {\n      return {\n        title,\n        media: <img src={url} alt=\"\" style={{height: '100%', width: '100%'}} />,\n      }\n    },\n  },\n}\n","import {definePlugin, isObjectInputProps, type SchemaType} from 'sanity'\n\nimport {AprimoWidget} from './components/AprimoWidget'\nimport {AprimoAdditionalFileSchema} from './schema/AdditionalFile'\nimport {AprimoAssetSchema} from './schema/AprimoAsset'\nimport {AprimoCDNAssetSchema} from './schema/AprimoCDNAsset'\nimport type {AprimoCDNAsset, AprimoConfig} from './types'\n\nexport const aprimoPlugin = definePlugin((config: Partial<AprimoConfig>) => {\n  const reqConfig: AprimoConfig = {\n    tenantName: '',\n    ...config,\n  }\n\n  return {\n    name: 'aprimo-assets',\n    schema: {\n      types: [AprimoCDNAssetSchema, AprimoAdditionalFileSchema, AprimoAssetSchema],\n    },\n    form: {\n      components: {\n        input: (props) => {\n          if (\n            isObjectInputProps(props) &&\n            (isType(props.schemaType, AprimoCDNAssetSchema.name) ||\n              isType(props.schemaType, AprimoAssetSchema.name))\n          ) {\n            return (\n              // @ts-expect-error - TODO: fix this\n              <AprimoWidget\n                {...props}\n                // oxlint-disable-next-line no-unsafe-type-assertion\n                value={props.value as AprimoCDNAsset}\n                pluginConfig={reqConfig}\n              />\n            )\n          }\n          //add array check here to render the widget in array\n          return props.renderDefault(props)\n        },\n      },\n    },\n  }\n})\n\nfunction isType(schemaType: SchemaType, name: string): boolean {\n  if (schemaType.name === name) {\n    return true\n  }\n  if (schemaType.type) {\n    return isType(schemaType.type, name)\n  }\n  return false\n}\n"],"mappings":"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"}
\ No newline at end of file