@imgly/plugin-ai-generation-web 0.1.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +798 -0
- package/dist/__tests__/middleware-disposer.test.d.ts +1 -0
- package/dist/__tests__/middleware-rateLimiting.test.d.ts +1 -0
- package/dist/__tests__/middleware.test.d.ts +1 -0
- package/dist/__tests__/utils.test.d.ts +1 -0
- package/dist/common/renderImageUrlProperty.d.ts +14 -0
- package/dist/generation/generate.d.ts +16 -0
- package/dist/generation/getAssetResultForGenerated.d.ts +4 -0
- package/dist/generation/getAssetResultForPlaceholder.d.ts +4 -0
- package/dist/generation/getDryRunOutput.d.ts +3 -0
- package/dist/generation/handleGenerationError.d.ts +9 -0
- package/dist/generation/initProvider.d.ts +20 -0
- package/dist/generation/middleware/alwaysOnTopMiddleware.d.ts +14 -0
- package/dist/generation/middleware/editModeMiddleware.d.ts +30 -0
- package/dist/generation/middleware/highlightBlocksMiddleware.d.ts +24 -0
- package/dist/generation/middleware/lockMiddleware.d.ts +19 -0
- package/dist/generation/middleware/loggingMiddleware.d.ts +4 -0
- package/dist/generation/middleware/middleware.d.ts +35 -0
- package/dist/generation/middleware/pendingMiddleware.d.ts +14 -0
- package/dist/generation/middleware/rateLimitMiddleware.d.ts +40 -0
- package/dist/generation/openapi/dereferenceDocument.d.ts +14 -0
- package/dist/generation/openapi/getProperties.d.ts +5 -0
- package/dist/generation/openapi/isOpenAPISchema.d.ts +9 -0
- package/dist/generation/openapi/renderProperty.d.ts +6 -0
- package/dist/generation/openapi/types.d.ts +41 -0
- package/dist/generation/previewUri.d.ts +2 -0
- package/dist/generation/provider.d.ts +373 -0
- package/dist/generation/quickAction/consumeGeneratedResult.d.ts +23 -0
- package/dist/generation/quickAction/getQuickActionMenu.d.ts +10 -0
- package/dist/generation/quickAction/registerQuickActionMenuComponent.d.ts +12 -0
- package/dist/generation/quickAction/types.d.ts +25 -0
- package/dist/generation/quickAction/utils.d.ts +13 -0
- package/dist/generation/registerPanelInputCustom.d.ts +6 -0
- package/dist/generation/registerPanelInputSchema.d.ts +9 -0
- package/dist/generation/renderGenerationComponents.d.ts +15 -0
- package/dist/generation/types.d.ts +56 -0
- package/dist/icons.d.ts +3 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.mjs +81 -0
- package/dist/index.mjs.map +7 -0
- package/dist/registerDockComponent.d.ts +10 -0
- package/dist/utils.d.ts +66 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import CreativeEditorSDK from '@cesdk/cesdk-js';
|
|
2
|
+
import { RenderCustomProperty } from '../generation/provider';
|
|
3
|
+
/**
|
|
4
|
+
* Provides render function for a image url property that allows
|
|
5
|
+
* to select an image from the library with a MediaPreview
|
|
6
|
+
*
|
|
7
|
+
* By default this expects the property key to be `image_url`. This can be changed in the options.
|
|
8
|
+
*/
|
|
9
|
+
declare function renderImageUrlProperty(provderId: string, options: {
|
|
10
|
+
cesdk: CreativeEditorSDK;
|
|
11
|
+
propertyKey?: string;
|
|
12
|
+
defaultUrl?: string;
|
|
13
|
+
}): RenderCustomProperty;
|
|
14
|
+
export default renderImageUrlProperty;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type Provider from './provider';
|
|
2
|
+
import { type GetInput, type GetBlockInput, OutputKind, type Output } from './provider';
|
|
3
|
+
import { InitProviderConfiguration, UIOptions } from './types';
|
|
4
|
+
type Result<O> = {
|
|
5
|
+
status: 'success';
|
|
6
|
+
output: O;
|
|
7
|
+
} | {
|
|
8
|
+
status: 'aborted';
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Generate content using the provider with the given input
|
|
12
|
+
*/
|
|
13
|
+
declare function generate<K extends OutputKind, I, O extends Output>(kind: K, getInput: GetInput<I>, getBlockInput: GetBlockInput<K, I>, provider: Provider<K, I, O>, options: UIOptions & {
|
|
14
|
+
createPlaceholderBlock?: boolean;
|
|
15
|
+
}, config: InitProviderConfiguration, abortSignal: AbortSignal): Promise<Result<O>>;
|
|
16
|
+
export default generate;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type AssetResult } from '@cesdk/cesdk-js';
|
|
2
|
+
import { type OutputKind, GetBlockInputResult, Output } from './provider';
|
|
3
|
+
declare function getAssetResultForGenerated<K extends OutputKind>(id: string, kind: K, blockInputs: GetBlockInputResult<K>, output: Output): Promise<AssetResult>;
|
|
4
|
+
export default getAssetResultForGenerated;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type AssetResult } from '@cesdk/cesdk-js';
|
|
2
|
+
import { type OutputKind, GetBlockInputResult } from './provider';
|
|
3
|
+
declare function getAssetResultForPlaceholder<K extends OutputKind>(id: string, kind: K, blockInput: GetBlockInputResult<K>): AssetResult;
|
|
4
|
+
export default getAssetResultForPlaceholder;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import CreativeEditorSDK from '@cesdk/cesdk-js';
|
|
2
|
+
import Provider, { GetInput, Output, OutputKind } from './provider';
|
|
3
|
+
import { InitProviderConfiguration } from './types';
|
|
4
|
+
declare function handleGenerationError<K extends OutputKind, I, O extends Output>(error: unknown, options: {
|
|
5
|
+
cesdk: CreativeEditorSDK;
|
|
6
|
+
provider: Provider<K, I, O>;
|
|
7
|
+
getInput?: GetInput<I>;
|
|
8
|
+
}, config: InitProviderConfiguration): void;
|
|
9
|
+
export default handleGenerationError;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type Provider from './provider';
|
|
2
|
+
import { OutputKind, type Output } from './provider';
|
|
3
|
+
import { InitProviderConfiguration, Options } from './types';
|
|
4
|
+
import { BuilderRenderFunction } from '@cesdk/cesdk-js';
|
|
5
|
+
type RenderBuilderFunctions = {
|
|
6
|
+
panel?: BuilderRenderFunction<any>;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the provider. Based on the given options and configuration
|
|
10
|
+
* it will register panels and components that is used to render
|
|
11
|
+
* the provider in the UI.
|
|
12
|
+
*
|
|
13
|
+
* @param provider The provider to initialize.
|
|
14
|
+
* @param options The options to use for the provider.
|
|
15
|
+
* @param config The configuration to use for the provider.
|
|
16
|
+
*/
|
|
17
|
+
declare function initProvider<K extends OutputKind, I, O extends Output>(provider: Provider<K, I, O>, options: Options, config: InitProviderConfiguration): Promise<{
|
|
18
|
+
renderBuilderFunctions?: RenderBuilderFunctions;
|
|
19
|
+
}>;
|
|
20
|
+
export default initProvider;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Middleware } from './middleware';
|
|
2
|
+
import { Output } from '../provider';
|
|
3
|
+
/**
|
|
4
|
+
* Sets the blocks to a pending state while the middleware is running.
|
|
5
|
+
*/
|
|
6
|
+
declare function alwaysOnTopMiddleware<I, O extends Output>({ pending }: {
|
|
7
|
+
/**
|
|
8
|
+
* Should the blocks be set to a pending state?
|
|
9
|
+
*
|
|
10
|
+
* @default true
|
|
11
|
+
*/
|
|
12
|
+
pending?: boolean;
|
|
13
|
+
}): Middleware<I, O>;
|
|
14
|
+
export default alwaysOnTopMiddleware;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Middleware } from './middleware';
|
|
2
|
+
import { Output } from '../provider';
|
|
3
|
+
/**
|
|
4
|
+
* For a given edit mode and block ids, this middleware will
|
|
5
|
+
* ensure that as long as these blocks are selected, the edit mode is
|
|
6
|
+
* set to the given edit mode and cannot be changed.
|
|
7
|
+
*
|
|
8
|
+
* The use-case is to show only the generation canvas menu during
|
|
9
|
+
* the generation process.
|
|
10
|
+
*/
|
|
11
|
+
declare function editModeMiddleware<I, O extends Output>({ editMode, automaticallyUnlock, showNotification }: {
|
|
12
|
+
/**
|
|
13
|
+
* The edit mode to lock the selection to.
|
|
14
|
+
*/
|
|
15
|
+
editMode: string;
|
|
16
|
+
/**
|
|
17
|
+
* Should the selection be automatically unlocked after the function completes?
|
|
18
|
+
* Otherwise the returned unlock function must be called manually.
|
|
19
|
+
*
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
automaticallyUnlock?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Should the blocks be set when the generation is done
|
|
25
|
+
*
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
showNotification?: boolean;
|
|
29
|
+
}): Middleware<I, O>;
|
|
30
|
+
export default editModeMiddleware;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Middleware } from './middleware';
|
|
2
|
+
import { Output } from '../provider';
|
|
3
|
+
/**
|
|
4
|
+
* Highlights the blocks while the middleware is running.
|
|
5
|
+
*
|
|
6
|
+
* - Sets the blocks to always on top
|
|
7
|
+
* - Disables clipping of the parent of the blocks so it is visible
|
|
8
|
+
*/
|
|
9
|
+
declare function highlightBlocksMiddleware<I, O extends Output>({ alwaysOnTop, disableClipping }: {
|
|
10
|
+
/**
|
|
11
|
+
* Until disposed, should the block be always on top to be visible?
|
|
12
|
+
*
|
|
13
|
+
* @default true
|
|
14
|
+
*/
|
|
15
|
+
alwaysOnTop?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* If true, the clipping of the parent of the affected blocks will be
|
|
18
|
+
* temporarily disabled until unlocked.
|
|
19
|
+
*
|
|
20
|
+
* @default true
|
|
21
|
+
*/
|
|
22
|
+
disableClipping?: boolean;
|
|
23
|
+
}): Middleware<I, O>;
|
|
24
|
+
export default highlightBlocksMiddleware;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Middleware } from './middleware';
|
|
2
|
+
import { Output } from '../provider';
|
|
3
|
+
/**
|
|
4
|
+
* Highlights the blocks while the middleware is running.
|
|
5
|
+
*/
|
|
6
|
+
declare function lockMiddleware<I, O extends Output>({ editMode, automaticallyUnlock }: {
|
|
7
|
+
/**
|
|
8
|
+
* The edit mode to lock the selection to.
|
|
9
|
+
*/
|
|
10
|
+
editMode: string;
|
|
11
|
+
/**
|
|
12
|
+
* Should the selection be automatically unlocked after the function completes?
|
|
13
|
+
* Otherwise the returned unlock function must be called manually.
|
|
14
|
+
*
|
|
15
|
+
* @default false
|
|
16
|
+
*/
|
|
17
|
+
automaticallyUnlock?: boolean;
|
|
18
|
+
}): Middleware<I, O>;
|
|
19
|
+
export default lockMiddleware;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { GenerationOptions, GenerationResult, Output } from '../provider';
|
|
2
|
+
/**
|
|
3
|
+
* Result of the generation with a dispose function to clean up
|
|
4
|
+
*/
|
|
5
|
+
export interface DisposableGenerationResult<O extends Output> {
|
|
6
|
+
/**
|
|
7
|
+
* The actual generation result
|
|
8
|
+
*/
|
|
9
|
+
result: GenerationResult<O>;
|
|
10
|
+
/**
|
|
11
|
+
* Function to dispose/clean up resources created during generation
|
|
12
|
+
* This should be called when the generation is cancelled or completely
|
|
13
|
+
* finished including the confirmation of the generation if applicable.
|
|
14
|
+
*/
|
|
15
|
+
dispose: () => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Define the type for middleware functions
|
|
19
|
+
*/
|
|
20
|
+
export type Middleware<I, O extends Output> = (input: I, options: GenerationOptions & {
|
|
21
|
+
/**
|
|
22
|
+
* The block ids the generation is applied on
|
|
23
|
+
* If this value is undefined, the selected blocks will be used.
|
|
24
|
+
* Setting this value to null will explicitly tell every
|
|
25
|
+
* middleware that no block shall be used.
|
|
26
|
+
*/
|
|
27
|
+
blockIds?: number[] | null;
|
|
28
|
+
/**
|
|
29
|
+
* Adds a disposer function to this genereation which is called
|
|
30
|
+
* when the generation is cancelled or completely finished
|
|
31
|
+
* including the confirmation of the generation if applicable.
|
|
32
|
+
*/
|
|
33
|
+
addDisposer: (dispose: () => Promise<void>) => void;
|
|
34
|
+
}, next: (input: I, options: GenerationOptions) => Promise<GenerationResult<O>>) => Promise<GenerationResult<O>>;
|
|
35
|
+
export declare function composeMiddlewares<I, O extends Output>(middlewares: (Middleware<I, O> | false | undefined | null)[]): (baseHandler: (input: I, options: GenerationOptions) => Promise<GenerationResult<O>>) => (input: I, options: GenerationOptions) => Promise<DisposableGenerationResult<O>>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Middleware } from './middleware';
|
|
2
|
+
import { Output } from '../provider';
|
|
3
|
+
/**
|
|
4
|
+
* Sets the blocks to a pending state while the middleware is running.
|
|
5
|
+
*/
|
|
6
|
+
declare function pendingMiddleware<I, O extends Output>({ pending }: {
|
|
7
|
+
/**
|
|
8
|
+
* Should the blocks be set to a pending state?
|
|
9
|
+
*
|
|
10
|
+
* @default true
|
|
11
|
+
*/
|
|
12
|
+
pending?: boolean;
|
|
13
|
+
}): Middleware<I, O>;
|
|
14
|
+
export default pendingMiddleware;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { GenerationOptions, Output } from '../provider';
|
|
2
|
+
import { Middleware } from './middleware';
|
|
3
|
+
export interface RateLimitOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Maximum number of requests allowed in the time window
|
|
6
|
+
*/
|
|
7
|
+
maxRequests: number;
|
|
8
|
+
/**
|
|
9
|
+
* Time window in milliseconds
|
|
10
|
+
*/
|
|
11
|
+
timeWindowMs: number;
|
|
12
|
+
/**
|
|
13
|
+
* Optional key function to create different rate limits for different inputs
|
|
14
|
+
* If not provided, all requests share the same rate limit
|
|
15
|
+
*/
|
|
16
|
+
keyFn?: <I>(input: I, options: GenerationOptions) => string;
|
|
17
|
+
/**
|
|
18
|
+
* Callback function that is called when rate limit is exceeded
|
|
19
|
+
* Return value determines if the operation should be rejected (throw error) or allowed
|
|
20
|
+
* If true is returned, the operation will proceed despite exceeding the rate limit
|
|
21
|
+
* If false or undefined is returned, the operation will be rejected with a default error
|
|
22
|
+
*/
|
|
23
|
+
onRateLimitExceeded?: <I>(input: I, options: GenerationOptions, rateLimitInfo: {
|
|
24
|
+
key: string;
|
|
25
|
+
currentCount: number;
|
|
26
|
+
maxRequests: number;
|
|
27
|
+
timeWindowMs: number;
|
|
28
|
+
remainingTimeMs: number;
|
|
29
|
+
}) => boolean | Promise<boolean> | void;
|
|
30
|
+
}
|
|
31
|
+
interface RequestTracker {
|
|
32
|
+
timestamps: number[];
|
|
33
|
+
lastCleanup: number;
|
|
34
|
+
}
|
|
35
|
+
export declare const requestsStore: Record<string, RequestTracker>;
|
|
36
|
+
/**
|
|
37
|
+
* Middleware that implements rate limiting for AI generation requests
|
|
38
|
+
*/
|
|
39
|
+
declare function rateLimitMiddleware<I, O extends Output>(middlewareOptions: RateLimitOptions): Middleware<I, O>;
|
|
40
|
+
export default rateLimitMiddleware;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type OpenAPIV3 } from 'openapi-types';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves a JSON reference path within a document
|
|
4
|
+
* @param document The OpenAPI document
|
|
5
|
+
* @param refPath The reference path (e.g. "#/components/schemas/MySchema")
|
|
6
|
+
* @returns The resolved object from the document
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveReference(document: OpenAPIV3.Document, refPath: string): unknown;
|
|
9
|
+
/**
|
|
10
|
+
* Dereferences all $ref properties in an OpenAPI document
|
|
11
|
+
* @param document The OpenAPI document to dereference
|
|
12
|
+
* @returns A new document with all references resolved
|
|
13
|
+
*/
|
|
14
|
+
export default function dereferenceDocument(document: OpenAPIV3.Document): OpenAPIV3.Document;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { OpenAPIV3 } from 'openapi-types';
|
|
2
|
+
import { OutputKind, PanelInputSchema } from '../provider';
|
|
3
|
+
import { Property } from './types';
|
|
4
|
+
declare function getProperties<K extends OutputKind, I>(inputSchema: OpenAPIV3.SchemaObject, panelInput: PanelInputSchema<K, I>): Property[];
|
|
5
|
+
export default getProperties;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OpenAPIV3 } from 'openapi-types';
|
|
2
|
+
/**
|
|
3
|
+
* Checks if an unknown object is an OpenAPI schema (first level only)
|
|
4
|
+
*
|
|
5
|
+
* @param obj - The object to check (potentially undefined)
|
|
6
|
+
* @param debug - If true, log the reason when validation fails
|
|
7
|
+
* @returns A boolean indicating whether the object is an OpenAPI schema
|
|
8
|
+
*/
|
|
9
|
+
export declare function isOpenAPISchema(obj: unknown, debug?: boolean): obj is OpenAPIV3.SchemaObject;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BuilderRenderFunctionContext } from '@cesdk/cesdk-js';
|
|
2
|
+
import { GetPropertyInput, Property } from './types';
|
|
3
|
+
import Provider, { Output, OutputKind, PanelInputSchema } from '../provider';
|
|
4
|
+
import { InitProviderConfiguration, UIOptions } from '../types';
|
|
5
|
+
declare function renderProperty<K extends OutputKind, I, O extends Output>(context: BuilderRenderFunctionContext<any>, property: Property, provider: Provider<K, I, O>, panelInput: PanelInputSchema<K, I>, options: UIOptions, config: InitProviderConfiguration): GetPropertyInput | undefined;
|
|
6
|
+
export default renderProperty;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Builder } from '@cesdk/cesdk-js';
|
|
2
|
+
import { OpenAPIV3 } from 'openapi-types';
|
|
3
|
+
export interface Property {
|
|
4
|
+
id: string;
|
|
5
|
+
schema: OpenAPIV3.SchemaObject;
|
|
6
|
+
}
|
|
7
|
+
type PropertyInputForString = {
|
|
8
|
+
id: string;
|
|
9
|
+
type: 'string';
|
|
10
|
+
value: string;
|
|
11
|
+
};
|
|
12
|
+
type PropertyInputForBoolean = {
|
|
13
|
+
id: string;
|
|
14
|
+
type: 'boolean';
|
|
15
|
+
value: boolean;
|
|
16
|
+
};
|
|
17
|
+
type PropertyInputForInteger = {
|
|
18
|
+
id: string;
|
|
19
|
+
type: 'integer';
|
|
20
|
+
value: number;
|
|
21
|
+
};
|
|
22
|
+
type PropertyInputForObject = {
|
|
23
|
+
id: string;
|
|
24
|
+
type: 'object';
|
|
25
|
+
value: Record<string, PropertyInput>;
|
|
26
|
+
};
|
|
27
|
+
export type PropertyInput = PropertyInputForString | PropertyInputForBoolean | PropertyInputForInteger | PropertyInputForObject;
|
|
28
|
+
export type GetPropertyInput = () => PropertyInput;
|
|
29
|
+
type CustomIcon = string | (({ theme, iconSize }: {
|
|
30
|
+
theme: string;
|
|
31
|
+
iconSize: 'normal' | 'large';
|
|
32
|
+
}) => string);
|
|
33
|
+
export interface EnumValue {
|
|
34
|
+
id: string;
|
|
35
|
+
label: string | string[];
|
|
36
|
+
icon?: CustomIcon;
|
|
37
|
+
}
|
|
38
|
+
export interface ExtensionImglyBuilder {
|
|
39
|
+
component?: keyof Builder;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const previewUri = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIzIiBoZWlnaHQ9IjMyMyIgdmlld0JveD0iMCAwIDMyMyAzMjMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjMiIGhlaWdodD0iMzIzIiBmaWxsPSIjRTlFQkVEIi8+CjxnIG9wYWNpdHk9IjAuMyI+CjxwYXRoIGQ9Ik0xMTYgMTg0VjE5MS41QzExNiAxOTkuNzg0IDEyMi43MTYgMjA2LjUgMTMxIDIwNi41SDE5MUMxOTkuMjg0IDIwNi41IDIwNiAxOTkuNzg0IDIwNiAxOTEuNVYxMzEuNUMyMDYgMTIzLjIxNiAxOTkuMjg0IDExNi41IDE5MSAxMTYuNUwxOTAuOTk1IDEyNi41QzE5My43NTcgMTI2LjUgMTk2IDEyOC43MzkgMTk2IDEzMS41VjE5MS41QzE5NiAxOTQuMjYxIDE5My43NjEgMTk2LjUgMTkxIDE5Ni41SDEzMUMxMjguMjM5IDE5Ni41IDEyNiAxOTQuMjYxIDEyNiAxOTEuNVYxODRIMTE2WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTY2LjQ5NCAxMDUuOTI0QzE2NS44NjkgMTA0LjM0MiAxNjMuNjI5IDEwNC4zNDIgMTYzLjAwNSAxMDUuOTI0TDE1OS43NDUgMTE0LjE5MUMxNTkuNTU0IDExNC42NzQgMTU5LjE3MiAxMTUuMDU3IDE1OC42ODggMTE1LjI0N0wxNTAuNDIyIDExOC41MDhDMTQ4LjgzOSAxMTkuMTMyIDE0OC44MzkgMTIxLjM3MiAxNTAuNDIyIDEyMS45OTZMMTU4LjY4OCAxMjUuMjU2QzE1OS4xNzIgMTI1LjQ0NyAxNTkuNTU0IDEyNS44MjkgMTU5Ljc0NSAxMjYuMzEzTDE2My4wMDUgMTM0LjU3OUMxNjMuNjI5IDEzNi4xNjIgMTY1Ljg2OSAxMzYuMTYyIDE2Ni40OTQgMTM0LjU3OUwxNjkuNzU0IDEyNi4zMTNDMTY5Ljk0NCAxMjUuODI5IDE3MC4zMjcgMTI1LjQ0NyAxNzAuODEgMTI1LjI1NkwxNzkuMDc3IDEyMS45OTZDMTgwLjY2IDEyMS4zNzIgMTgwLjY2IDExOS4xMzIgMTc5LjA3NyAxMTguNTA4TDE3MC44MSAxMTUuMjQ3QzE3MC4zMjcgMTE1LjA1NyAxNjkuOTQ0IDExNC42NzQgMTY5Ljc1NCAxMTQuMTkxTDE2Ni40OTQgMTA1LjkyNFoiIGZpbGw9IiM4RjhGOEYiLz4KPHBhdGggZD0iTTEzMy4wMDUgMTI4LjQyNEMxMzMuNjI5IDEyNi44NDIgMTM1Ljg2OSAxMjYuODQyIDEzNi40OTQgMTI4LjQyNEwxNDEuODc1IDE0Mi4wN0MxNDIuMDY2IDE0Mi41NTMgMTQyLjQ0OCAxNDIuOTM1IDE0Mi45MzIgMTQzLjEyNkwxNTYuNTc3IDE0OC41MDhDMTU4LjE2IDE0OS4xMzIgMTU4LjE2IDE1MS4zNzIgMTU2LjU3NyAxNTEuOTk2TDE0Mi45MzIgMTU3LjM3OEMxNDIuNDQ4IDE1Ny41NjggMTQyLjA2NiAxNTcuOTUxIDE0MS44NzUgMTU4LjQzNEwxMzYuNDk0IDE3Mi4wNzlDMTM1Ljg2OSAxNzMuNjYyIDEzMy42MjkgMTczLjY2MiAxMzMuMDA1IDE3Mi4wNzlMMTI3LjYyMyAxNTguNDM0QzEyNy40MzMgMTU3Ljk1MSAxMjcuMDUgMTU3LjU2OCAxMjYuNTY3IDE1Ny4zNzhMMTEyLjkyMiAxNTEuOTk2QzExMS4zMzkgMTUxLjM3MiAxMTEuMzM5IDE0OS4xMzIgMTEyLjkyMiAxNDguNTA4TDEyNi41NjcgMTQzLjEyNkMxMjcuMDUgMTQyLjkzNSAxMjcuNDMzIDE0Mi41NTMgMTI3LjYyMyAxNDIuMDdMMTMzLjAwNSAxMjguNDI0WiIgZmlsbD0iIzhGOEY4RiIvPgo8cGF0aCBkPSJNMTk1Ljk5OSAxODQuMDA0VjE5MS41MDJDMTk1Ljk5OSAxOTQuMjYzIDE5My43NjEgMTk2LjUwMiAxOTAuOTk5IDE5Ni41MDJIMTQ3LjY2OEwxNzIuODc5IDE1OC42ODRDMTc0LjM2MyAxNTYuNDU4IDE3Ny42MzUgMTU2LjQ1OCAxNzkuMTIgMTU4LjY4NEwxOTUuOTk5IDE4NC4wMDRaIiBmaWxsPSIjOEY4RjhGIi8+CjwvZz4KPC9zdmc+Cg==";
|
|
2
|
+
export default previewUri;
|