@imgly/plugin-ai-generation-web 0.1.3 → 0.1.4

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 CHANGED
@@ -485,6 +485,159 @@ quickActions: {
485
485
  }
486
486
  ```
487
487
 
488
+ ### Quick Action Helper Components
489
+
490
+ The package provides several helper components for common quick action patterns:
491
+
492
+ #### 1. QuickActionBaseButton
493
+
494
+ A simple button that triggers an action when clicked:
495
+
496
+ ```typescript
497
+ import { QuickActionBaseButton } from '@imgly/plugin-ai-generation-web';
498
+
499
+ const quickAction = QuickActionBaseButton<MyInput, ImageOutput>({
500
+ quickAction: {
501
+ id: 'enhanceImage',
502
+ version: '1',
503
+ enable: true
504
+ },
505
+ buttonOptions: {
506
+ icon: '@imgly/MagicWand'
507
+ },
508
+ onClick: async (context) => {
509
+ await context.generate({
510
+ prompt: 'Enhance this image and improve quality'
511
+ });
512
+ }
513
+ });
514
+ ```
515
+
516
+ #### 2. QuickActionBasePrompt
517
+
518
+ A button that expands to show a text prompt input:
519
+
520
+ ```typescript
521
+ import { QuickActionBasePrompt } from '@imgly/plugin-ai-generation-web';
522
+
523
+ const quickAction = QuickActionBasePrompt<MyInput, ImageOutput>({
524
+ quickAction: {
525
+ id: 'changeImage',
526
+ version: '1',
527
+ enable: true,
528
+ confirmation: true
529
+ },
530
+ buttonOptions: {
531
+ icon: '@imgly/Edit'
532
+ },
533
+ textAreaOptions: {
534
+ placeholder: 'Describe the changes you want...'
535
+ },
536
+ onApply: async (prompt, context) => {
537
+ return context.generate({
538
+ prompt: prompt,
539
+ // other parameters
540
+ });
541
+ }
542
+ });
543
+ ```
544
+
545
+ #### 3. QuickActionBaseSelect
546
+
547
+ A button that opens a menu with selectable options:
548
+
549
+ ```typescript
550
+ import { QuickActionBaseSelect } from '@imgly/plugin-ai-generation-web';
551
+
552
+ const quickAction = QuickActionBaseSelect<MyInput, ImageOutput>({
553
+ cesdk: cesdk,
554
+ quickAction: {
555
+ id: 'styleTransfer',
556
+ version: '1',
557
+ enable: true,
558
+ confirmation: true
559
+ },
560
+ buttonOptions: {
561
+ icon: '@imgly/Appearance'
562
+ },
563
+ items: [
564
+ {
565
+ id: 'water',
566
+ label: 'Watercolor Painting',
567
+ prompt: 'Convert to watercolor painting.'
568
+ },
569
+ {
570
+ id: 'oil',
571
+ label: 'Oil Painting',
572
+ prompt: 'Render in oil painting style.'
573
+ }
574
+ ],
575
+ mapInput: (input) => ({
576
+ prompt: input.item.prompt,
577
+ image_url: input.uri
578
+ })
579
+ });
580
+ ```
581
+
582
+ ### Ready-to-Use Image Quick Actions
583
+
584
+ The package includes several ready-to-use quick actions for common image manipulation tasks:
585
+
586
+ #### 1. QuickActionChangeImage
587
+
588
+ Changes an image based on a text prompt:
589
+
590
+ ```typescript
591
+ import { QuickActionChangeImage } from '@imgly/plugin-ai-generation-web';
592
+
593
+ const changeImageAction = QuickActionChangeImage<MyInput, ImageOutput>({
594
+ cesdk: cesdk,
595
+ mapInput: (input) => ({
596
+ prompt: input.prompt,
597
+ image_url: input.uri
598
+ })
599
+ });
600
+ ```
601
+
602
+ #### 2. QuickActionSwapImageBackground
603
+
604
+ Changes just the background of an image:
605
+
606
+ ```typescript
607
+ import { QuickActionSwapImageBackground } from '@imgly/plugin-ai-generation-web';
608
+
609
+ const swapBackgroundAction = QuickActionSwapImageBackground<MyInput, ImageOutput>({
610
+ cesdk: cesdk,
611
+ mapInput: (input) => ({
612
+ prompt: input.prompt,
613
+ image_url: input.uri
614
+ })
615
+ });
616
+ ```
617
+
618
+ #### 3. QuickActionImageVariant
619
+
620
+ Creates a variant of an image by duplicating it first:
621
+
622
+ ```typescript
623
+ import { QuickActionImageVariant } from '@imgly/plugin-ai-generation-web';
624
+
625
+ const imageVariantAction = QuickActionImageVariant<MyInput, ImageOutput>({
626
+ cesdk: cesdk,
627
+ onApply: async ({ prompt, uri, duplicatedBlockId }, context) => {
628
+ return context.generate(
629
+ {
630
+ prompt,
631
+ image_url: uri
632
+ },
633
+ {
634
+ blockIds: [duplicatedBlockId]
635
+ }
636
+ );
637
+ }
638
+ });
639
+ ```
640
+
488
641
  ### Simple Quick Action Example
489
642
 
490
643
  ```typescript
@@ -0,0 +1,9 @@
1
+ import { type Output, type OutputKind, type GetBlockInputResult } from '../provider';
2
+ import { Middleware } from './middleware';
3
+ interface DryRunOptions<K extends OutputKind> {
4
+ kind: K;
5
+ blockInputs?: GetBlockInputResult<K>;
6
+ blockIds?: number[];
7
+ }
8
+ declare function dryRunMiddleware<I, K extends OutputKind, O extends Output>(options: DryRunOptions<K>): Middleware<I, O>;
9
+ export default dryRunMiddleware;
@@ -22,7 +22,7 @@ interface Provider<K extends OutputKind, I, O extends Output, C = O> {
22
22
  * Initialize the provider when the plugin is loaded.
23
23
  * Can be used to initialize libraries, and register additional UI components.
24
24
  */
25
- initialize: (options: {
25
+ initialize?: (options: {
26
26
  engine: CreativeEngine;
27
27
  /**
28
28
  * If undefined, this indicates that the plugin was loaded
@@ -345,6 +345,12 @@ export type QuickActionsInput<I, O extends Output> = {
345
345
  };
346
346
  export type QuickAction<I, O extends Output> = {
347
347
  id: string;
348
+ /**
349
+ * If set, the quick action is shown in the menu for this kind, instead
350
+ * of the kind of the provider. E.g. a video provider can add a quick action,
351
+ * to add a button in the image menu to generate a video from.
352
+ */
353
+ kind?: OutputKind;
348
354
  version: '1';
349
355
  /**
350
356
  * Defines if the quick action is enabled or not by using the
@@ -0,0 +1,11 @@
1
+ import { ButtonOptions } from '@cesdk/cesdk-js';
2
+ import { Output, QuickAction, QuickActionContext } from '../../provider';
3
+ /**
4
+ * Quick action base for quick actions to open a panel.
5
+ */
6
+ declare function QuickActionBaseButton<I, O extends Output>(options: {
7
+ buttonOptions?: ButtonOptions;
8
+ quickAction: Omit<QuickAction<I, O>, 'render' | 'renderExpanded'>;
9
+ onClick: (context: QuickActionContext<I, O>) => Promise<void>;
10
+ }): QuickAction<I, O>;
11
+ export default QuickActionBaseButton;
@@ -0,0 +1,13 @@
1
+ import { ButtonOptions, TextAreaOptions } from '@cesdk/cesdk-js';
2
+ import { Output, QuickAction, QuickActionContext } from '../../provider';
3
+ /**
4
+ * Quick action base for quick actions that require a prompt.
5
+ * Will render a text area for the prompt.
6
+ */
7
+ declare function QuickActionBasePrompt<I, O extends Output>(options: {
8
+ buttonOptions?: ButtonOptions;
9
+ textAreaOptions?: TextAreaOptions;
10
+ quickAction: Omit<QuickAction<I, O>, 'render' | 'renderExpanded'>;
11
+ onApply: (prompt: string, context: QuickActionContext<I, O>) => Promise<O>;
12
+ }): QuickAction<I, O>;
13
+ export default QuickActionBasePrompt;
@@ -0,0 +1,28 @@
1
+ import CreativeEditorSDK, { ButtonOptions } from '@cesdk/cesdk-js';
2
+ import { Output, QuickAction, QuickActionContext } from '../../provider';
3
+ interface QuickActionBaseSelectItem {
4
+ id: string;
5
+ label: string;
6
+ icon?: string;
7
+ prompt: string;
8
+ }
9
+ /**
10
+ * Quick action base for quick actions that require a selection of items.
11
+ */
12
+ declare function QuickActionBaseSelect<I, O extends Output>(options: {
13
+ cesdk: CreativeEditorSDK;
14
+ items: QuickActionBaseSelectItem[];
15
+ buttonOptions?: ButtonOptions;
16
+ quickAction: Omit<QuickAction<I, O>, 'render' | 'renderExpanded'>;
17
+ mapInput?: (input: {
18
+ item: QuickActionBaseSelectItem;
19
+ uri: string;
20
+ blockId: number;
21
+ }) => I;
22
+ onApply?: (options: {
23
+ item: QuickActionBaseSelectItem;
24
+ uri: string;
25
+ blockId: number;
26
+ }, context: QuickActionContext<I, O>) => Promise<O>;
27
+ }): QuickAction<I, O>;
28
+ export default QuickActionBaseSelect;
@@ -0,0 +1,17 @@
1
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
2
+ import { ImageOutput, QuickAction, QuickActionContext } from '../../provider';
3
+ declare function QuickActionChangeImage<I, O extends ImageOutput>(options: {
4
+ id?: string;
5
+ cesdk: CreativeEditorSDK;
6
+ mapInput?: (input: {
7
+ prompt: string;
8
+ uri: string;
9
+ blockId: number;
10
+ }) => I;
11
+ onApply?: (options: {
12
+ prompt: string;
13
+ uri: string;
14
+ blockId: number;
15
+ }, context: QuickActionContext<I, O>) => Promise<O>;
16
+ }): QuickAction<I, O>;
17
+ export default QuickActionChangeImage;
@@ -0,0 +1,17 @@
1
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
2
+ import { ImageOutput, QuickAction, QuickActionContext } from '../../provider';
3
+ declare function QuickActionImageVariant<I, O extends ImageOutput>(options: {
4
+ id?: string;
5
+ mapInput?: (input: {
6
+ prompt: string;
7
+ uri: string;
8
+ duplicatedBlockId: number;
9
+ }) => I;
10
+ onApply?: (options: {
11
+ prompt: string;
12
+ uri: string;
13
+ duplicatedBlockId: number;
14
+ }, context: QuickActionContext<I, O>) => Promise<O>;
15
+ cesdk: CreativeEditorSDK;
16
+ }): QuickAction<I, O>;
17
+ export default QuickActionImageVariant;
@@ -0,0 +1,17 @@
1
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
2
+ import { ImageOutput, QuickAction, QuickActionContext } from '../../provider';
3
+ declare function QuickActionChangeImage<I, O extends ImageOutput>(options: {
4
+ id?: string;
5
+ mapInput?: (input: {
6
+ prompt: string;
7
+ uri: string;
8
+ blockId: number;
9
+ }) => I;
10
+ onApply?: (options: {
11
+ prompt: string;
12
+ uri: string;
13
+ blockId: number;
14
+ }, context: QuickActionContext<I, O>) => Promise<O>;
15
+ cesdk: CreativeEditorSDK;
16
+ }): QuickAction<I, O>;
17
+ export default QuickActionChangeImage;
@@ -0,0 +1,8 @@
1
+ import type CreativeEngine from '@cesdk/engine';
2
+ /**
3
+ * Enable function for a single image fill block selected.
4
+ */
5
+ declare function enableImageFill(): ({ engine }: {
6
+ engine: CreativeEngine;
7
+ }) => boolean;
8
+ export default enableImageFill;
@@ -0,0 +1,19 @@
1
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
2
+ import { QuickActionMenu, ApplyCallbacks } from './types';
3
+ import Provider, { Output, OutputKind, QuickAction } from '../provider';
4
+ import { InitProviderConfiguration } from '../types';
5
+ declare function generate<K extends OutputKind, I, O extends Output>(options: {
6
+ input: I;
7
+ blockIds: number[];
8
+ cesdk: CreativeEditorSDK;
9
+ quickAction: QuickAction<I, O>;
10
+ quickActionMenu: QuickActionMenu;
11
+ provider: Provider<K, I, O>;
12
+ abortSignal: AbortSignal;
13
+ confirmationComponentId: string;
14
+ }, config: InitProviderConfiguration): Promise<{
15
+ dispose: () => void;
16
+ returnValue: O;
17
+ applyCallbacks?: ApplyCallbacks;
18
+ }>;
19
+ export default generate;
package/dist/index.d.ts CHANGED
@@ -15,4 +15,11 @@ export { getPanelId, getDurationForVideo, getThumbnailForVideo, getLabelFromId }
15
15
  export { default as registerDockComponent } from './registerDockComponent';
16
16
  export { default as getQuickActionMenu } from './generation/quickAction/getQuickActionMenu';
17
17
  export { default as registerQuickActionMenuComponent } from './generation/quickAction/registerQuickActionMenuComponent';
18
+ export { default as QuickActionBasePrompt } from './generation/quickAction/common/QuickActionBasePrompt';
19
+ export { default as QuickActionBaseButton } from './generation/quickAction/common/QuickActionBaseButton';
20
+ export { default as QuickActionBaseSelect } from './generation/quickAction/common/QuickActionBaseSelect';
21
+ export { default as QuickActionChangeImage } from './generation/quickAction/common/QuickActionChangeImage';
22
+ export { default as QuickActionImageVariant } from './generation/quickAction/common/QuickActionImageVariant';
23
+ export { default as QuickActionSwapImageBackground } from './generation/quickAction/common/QuickActionSwapImageBackground';
24
+ export { default as enableQuickActionForImageFill } from './generation/quickAction/common/enableImageFill';
18
25
  export { isGeneratingStateKey, abortGenerationStateKey } from './generation/renderGenerationComponents';