import { aiAssistantIcon } from '@automattic/jetpack-ai-client'; import { GooglePhotosIcon, OpenverseIcon, PexelsIcon, JetpackMobileAppIcon, } from '@automattic/jetpack-shared-extension-utils/icons'; import { __ } from '@wordpress/i18n'; import React from 'react'; import { SOURCE_WORDPRESS, SOURCE_GOOGLE_PHOTOS, SOURCE_OPENVERSE, SOURCE_PEXELS, SOURCE_JETPACK_APP_MEDIA, SOURCE_JETPACK_AI_FEATURED_IMAGE, SOURCE_JETPACK_AI_GENERAL_PURPOSE_IMAGE_FOR_MEDIA_SOURCE, SOURCE_JETPACK_AI_GENERAL_PURPOSE_IMAGE_FOR_BLOCK, } from '../constants'; import GooglePhotosMedia from './google-photos'; import JetpackAIFeaturedImage from './jetpack-ai-featured-image'; import JetpackAIGeneralPurposeImageForBlock from './jetpack-ai-general-purpose-image-for-block'; import JetpackAIGeneralPurposeImageForMediaSource from './jetpack-ai-general-purpose-image-for-media-source'; import JetpackAppMedia from './jetpack-app-media'; import OpenverseMedia from './openverse'; import PexelsMedia from './pexels'; export const internalMediaSources = [ { id: SOURCE_JETPACK_APP_MEDIA, label: __( 'Your Phone', 'jetpack-external-media' ), icon: , keyword: 'jetpack mobile app', }, ]; /** * Used when the context is for a featured image. */ export const featuredImageExclusiveMediaSources = [ { id: SOURCE_JETPACK_AI_FEATURED_IMAGE, label: __( 'Generate with AI', 'jetpack-external-media' ), icon: aiAssistantIcon, keyword: 'jetpack ai', }, ]; /** * Used when the context is not the featured image, but a general purpose image. */ export const generalPurposeImageExclusiveMediaSources = [ { id: SOURCE_JETPACK_AI_GENERAL_PURPOSE_IMAGE_FOR_MEDIA_SOURCE, label: __( 'Generate with AI', 'jetpack-external-media' ), icon: aiAssistantIcon, keyword: 'jetpack ai', }, ]; export const externalMediaSources = [ { id: SOURCE_GOOGLE_PHOTOS, label: __( 'Google Photos', 'jetpack-external-media' ), icon: , keyword: 'google photos', }, { id: SOURCE_PEXELS, label: __( 'Pexels free photos', 'jetpack-external-media' ), icon: , keyword: 'pexels', }, { id: SOURCE_OPENVERSE, label: __( 'Openverse', 'jetpack-external-media' ), icon: , keyword: 'openverse', }, ]; export const mediaSources = externalMediaSources.concat( internalMediaSources ); /** * Whether we can display the placeholder * @param {object} props - The properties. * @return {boolean} True if we can display the placeholder, otherwise false. */ export function canDisplayPlaceholder( props ) { const { disableMediaButtons, dropZoneUIOnly } = props; // Deprecated. May still be used somewhere if ( dropZoneUIOnly === true ) { return false; } /** * This is a new prop that is false when editing an image (and the placeholder * should be shown), and contains a URL when not editing (and the placeholder * shouldnt be shown). The docs say it should be strictly boolean, hence the * inverse logic. */ if ( disableMediaButtons !== undefined && disableMediaButtons !== false ) { return false; } if ( props.source === SOURCE_WORDPRESS ) { return false; } return true; } /** * Get the external library * @param {string} type - The type of external sources. * @return {React.Component} - The external library. */ export function getExternalLibrary( type ) { if ( type === SOURCE_PEXELS ) { return PexelsMedia; } else if ( type === SOURCE_GOOGLE_PHOTOS ) { return GooglePhotosMedia; } else if ( type === SOURCE_OPENVERSE ) { return OpenverseMedia; } else if ( type === SOURCE_JETPACK_APP_MEDIA ) { return JetpackAppMedia; } else if ( type === SOURCE_JETPACK_AI_FEATURED_IMAGE ) { return JetpackAIFeaturedImage; } else if ( type === SOURCE_JETPACK_AI_GENERAL_PURPOSE_IMAGE_FOR_MEDIA_SOURCE ) { return JetpackAIGeneralPurposeImageForMediaSource; } else if ( type === SOURCE_JETPACK_AI_GENERAL_PURPOSE_IMAGE_FOR_BLOCK ) { return JetpackAIGeneralPurposeImageForBlock; } return null; } /** * Get the external source * @param {string} type - The type of external sources. * @return {object} The external source. */ export function getExternalSource( type ) { return mediaSources.find( item => item.id === type ); } Impressive Pen — Coming Soon

Impressive Pen — Currently not open for submissions.