@interware/content-generator 0.4.4 → 0.5.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 +21 -1
- package/dist/_chunks/{App-BQr5_g5u.mjs → App-DPVBu7QB.mjs} +37 -726
- package/dist/_chunks/{App-CfwvfmvL.js → App-DVTFrZvf.js} +31 -720
- package/dist/_chunks/ImageStudioTabs-B2UbKYq7.js +5299 -0
- package/dist/_chunks/ImageStudioTabs-mlNL6aQ2.mjs +5298 -0
- package/dist/_chunks/Settings-DziRY70a.js +155 -0
- package/dist/_chunks/Settings-RrBQdijj.mjs +155 -0
- package/dist/_chunks/StudioApp-AUyPNhh2.mjs +17 -0
- package/dist/_chunks/StudioApp-Cswkzh7F.js +17 -0
- package/dist/_chunks/{getTranslation-DNhP1INv.js → getTranslation-D88uLXGd.js} +1 -1
- package/dist/_chunks/{getTranslation-B9ND5RaH.mjs → getTranslation-DfxaP_TC.mjs} +1 -1
- package/dist/_chunks/{index-Dyq8dxMX.mjs → index-CqDdi211.mjs} +25 -7
- package/dist/_chunks/{index-DGPqyrzz.js → index-Ddp0Qvqo.js} +24 -6
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/components/PluginIcon.d.ts +4 -2
- package/dist/admin/src/components/PluginProviders.d.ts +8 -0
- package/dist/admin/src/components/generate-video/Form.d.ts +1 -1
- package/dist/admin/src/components/settings/Form.d.ts +4 -5
- package/dist/admin/src/containers/settings/index.d.ts +7 -7
- package/dist/admin/src/features/background-removal/RemoveBackgroundButton.d.ts +7 -0
- package/dist/admin/src/features/background-removal/RemoveBackgroundDialog.d.ts +15 -0
- package/dist/admin/src/features/background-removal/colorKey.d.ts +29 -0
- package/dist/admin/src/features/background-removal/imageCanvas.d.ts +20 -0
- package/dist/admin/src/features/background-removal/mask.d.ts +10 -0
- package/dist/admin/src/features/background-removal/runtime.d.ts +31 -0
- package/dist/admin/src/features/generator/EditEmpty.d.ts +13 -0
- package/dist/admin/src/features/generator/GeneratorTab.d.ts +7 -0
- package/dist/admin/src/features/generator/GroundingSources.d.ts +9 -0
- package/dist/admin/src/features/generator/ModeSwitch.d.ts +6 -0
- package/dist/admin/src/features/generator/PromptComposer.d.ts +25 -0
- package/dist/admin/src/features/generator/ReferencePicker.d.ts +26 -0
- package/dist/admin/src/features/generator/VersionHistory.d.ts +13 -0
- package/dist/admin/src/features/generator/generatorApi.d.ts +71 -0
- package/dist/admin/src/features/generator/model.d.ts +60 -0
- package/dist/admin/src/features/generator/useGeneratorApi.d.ts +21 -0
- package/dist/admin/src/features/image-studio/ImageStudioTabs.d.ts +26 -0
- package/dist/admin/src/features/image-studio/SegmentedSwitch.d.ts +18 -0
- package/dist/admin/src/features/image-studio/checkerboard.d.ts +5 -0
- package/dist/admin/src/features/library/FileCard.d.ts +17 -0
- package/dist/admin/src/features/library/FolderTree.d.ts +14 -0
- package/dist/admin/src/features/library/LibraryDialogs.d.ts +46 -0
- package/dist/admin/src/features/library/LibraryImagePicker.d.ts +15 -0
- package/dist/admin/src/features/library/LibraryTab.d.ts +2 -0
- package/dist/admin/src/features/library/SaveToLibraryDialog.d.ts +15 -0
- package/dist/admin/src/features/library/model.d.ts +40 -0
- package/dist/admin/src/features/library/studioRoot.d.ts +11 -0
- package/dist/admin/src/features/library/uploadApi.d.ts +77 -0
- package/dist/admin/src/features/library/useLibraryApi.d.ts +34 -0
- package/dist/admin/src/features/templates/editor/ColorField.d.ts +11 -0
- package/dist/admin/src/features/templates/editor/Editor.d.ts +19 -0
- package/dist/admin/src/features/templates/editor/EditorBar.d.ts +9 -0
- package/dist/admin/src/features/templates/editor/EditorMenuBar.d.ts +58 -0
- package/dist/admin/src/features/templates/editor/EditorToolbar.d.ts +20 -0
- package/dist/admin/src/features/templates/editor/ElementPalette.d.ts +10 -0
- package/dist/admin/src/features/templates/editor/FloatingPanel.d.ts +17 -0
- package/dist/admin/src/features/templates/editor/FullscreenView.d.ts +11 -0
- package/dist/admin/src/features/templates/editor/IconPicker.d.ts +9 -0
- package/dist/admin/src/features/templates/editor/Inspector.d.ts +17 -0
- package/dist/admin/src/features/templates/editor/LayersPanel.d.ts +12 -0
- package/dist/admin/src/features/templates/editor/Precision.d.ts +23 -0
- package/dist/admin/src/features/templates/editor/RangeField.d.ts +12 -0
- package/dist/admin/src/features/templates/editor/SaveTemplateDialog.d.ts +14 -0
- package/dist/admin/src/features/templates/editor/Stage.d.ts +29 -0
- package/dist/admin/src/features/templates/editor/TemplateFolderSelect.d.ts +9 -0
- package/dist/admin/src/features/templates/editor/TemplatePicker.d.ts +23 -0
- package/dist/admin/src/features/templates/editor/TemplatesTab.d.ts +5 -0
- package/dist/admin/src/features/templates/editor/TypographyControls.d.ts +24 -0
- package/dist/admin/src/features/templates/editor/icons.d.ts +7 -0
- package/dist/admin/src/features/templates/editor/overlays.d.ts +20 -0
- package/dist/admin/src/features/templates/editor/useCanvasNav.d.ts +25 -0
- package/dist/admin/src/features/templates/editor/useFitScale.d.ts +3 -0
- package/dist/admin/src/features/templates/export/fontEmbed.d.ts +22 -0
- package/dist/admin/src/features/templates/export/imageSource.d.ts +21 -0
- package/dist/admin/src/features/templates/export/pdf.d.ts +6 -0
- package/dist/admin/src/features/templates/export/render.d.ts +22 -0
- package/dist/admin/src/features/templates/export/useEditorIO.d.ts +18 -0
- package/dist/admin/src/features/templates/fonts/catalog.d.ts +47 -0
- package/dist/admin/src/features/templates/fonts/customFonts.d.ts +19 -0
- package/dist/admin/src/features/templates/fonts/useCustomFonts.d.ts +9 -0
- package/dist/admin/src/features/templates/fonts/useFonts.d.ts +2 -0
- package/dist/admin/src/features/templates/model/drag.d.ts +10 -0
- package/dist/admin/src/features/templates/model/editorReducer.d.ts +58 -0
- package/dist/admin/src/features/templates/model/layers.d.ts +42 -0
- package/dist/admin/src/features/templates/model/palette.d.ts +38 -0
- package/dist/admin/src/features/templates/model/presets.d.ts +17 -0
- package/dist/admin/src/features/templates/model/shortcuts.d.ts +19 -0
- package/dist/admin/src/features/templates/model/snap.d.ts +24 -0
- package/dist/admin/src/features/templates/model/templates.d.ts +8 -0
- package/dist/admin/src/features/templates/model/types.d.ts +154 -0
- package/dist/admin/src/features/templates/model/viewport.d.ts +36 -0
- package/dist/admin/src/features/templates/render/IWLogo.d.ts +7 -0
- package/dist/admin/src/features/templates/render/LayerCanvas.d.ts +13 -0
- package/dist/admin/src/features/templates/render/fonts.d.ts +5 -0
- package/dist/admin/src/features/templates/render/icons.d.ts +10 -0
- package/dist/admin/src/features/templates/render/renderLayer.d.ts +9 -0
- package/dist/admin/src/features/templates/store/persist.d.ts +41 -0
- package/dist/admin/src/features/templates/store/templatesApi.d.ts +49 -0
- package/dist/admin/src/features/templates/store/useMyTemplates.d.ts +19 -0
- package/dist/admin/src/features/templates/store/useTemplateSaving.d.ts +14 -0
- package/dist/admin/src/features/templates/store/useTemplatesApi.d.ts +23 -0
- package/dist/admin/src/hooks/useAdminTheme.d.ts +8 -0
- package/dist/admin/src/hooks/useThemeColors.d.ts +9 -0
- package/dist/admin/src/lib/dataUrl.d.ts +6 -0
- package/dist/admin/src/lib/promptRules.d.ts +23 -0
- package/dist/admin/src/lib/use-cases/articles/index.d.ts +12 -1
- package/dist/admin/src/lib/use-cases/categories/index.d.ts +12 -1
- package/dist/admin/src/lib/use-cases/facebook/index.d.ts +1 -1
- package/dist/admin/src/lib/use-cases/generate-content/index.d.ts +2 -2
- package/dist/admin/src/lib/use-cases/images/index.d.ts +1 -4
- package/dist/admin/src/lib/use-cases/linkedin/index.d.ts +1 -1
- package/dist/admin/src/lib/use-cases/settings/index.d.ts +13 -2
- package/dist/admin/src/lib/use-cases/users/index.d.ts +12 -1
- package/dist/admin/src/pages/ImageStudio.d.ts +3 -0
- package/dist/admin/src/pages/StudioApp.d.ts +3 -0
- package/dist/admin/src/pluginId.d.ts +6 -0
- package/dist/admin/src/test-setup.d.ts +1 -0
- package/dist/admin/src/test-utils.d.ts +5 -0
- package/dist/server/index.js +2408 -1261
- package/dist/server/index.mjs +2415 -1267
- package/dist/server/src/bootstrap.d.ts +1 -1
- package/dist/server/src/content-types/index.d.ts +66 -1
- package/dist/server/src/content-types/template/index.d.ts +65 -0
- package/dist/server/src/content-types/template/schema.d.ts +69 -0
- package/dist/server/src/controllers/config.d.ts +2 -0
- package/dist/server/src/controllers/controller.d.ts +0 -5
- package/dist/server/src/controllers/image-studio.d.ts +23 -0
- package/dist/server/src/controllers/index.d.ts +128 -5
- package/dist/server/src/controllers/templates.d.ts +26 -0
- package/dist/server/src/image-studio/geminiConfig.d.ts +40 -0
- package/dist/server/src/image-studio/models.d.ts +38 -0
- package/dist/server/src/image-studio/prompt.d.ts +7 -0
- package/dist/server/src/image-studio/validate.d.ts +41 -0
- package/dist/server/src/index.d.ts +229 -75
- package/dist/server/src/routes/admin.d.ts +6 -2
- package/dist/server/src/routes/content-api.d.ts +4 -9
- package/dist/server/src/routes/index.d.ts +7 -11
- package/dist/server/src/routes/policies.d.ts +14 -0
- package/dist/server/src/services/image-studio.d.ts +62 -0
- package/dist/server/src/services/index.d.ts +27 -57
- package/dist/server/src/services/service.d.ts +0 -57
- package/dist/server/src/services/templates.d.ts +81 -0
- package/dist/server/src/templates/folders.d.ts +14 -0
- package/dist/server/src/templates/validate.d.ts +23 -0
- package/dist/server/src/utils/folders.d.ts +15 -0
- package/dist/server/src/utils/secrets.d.ts +9 -0
- package/package.json +22 -10
- package/static/background-worker.d.mts +15 -0
- package/static/background-worker.mjs +87 -0
- package/dist/_chunks/Settings-BrqTzJp-.js +0 -262
- package/dist/_chunks/Settings-CdZnYLLK.mjs +0 -244
- package/dist/admin/src/components/Navigation.d.ts +0 -2
- package/dist/admin/src/components/generate-image/Form.d.ts +0 -15
- package/dist/admin/src/components/generate-images/Image.d.ts +0 -5
- package/dist/admin/src/components/generate-images/Images.d.ts +0 -2
- package/dist/admin/src/components/generate-images/Modal.d.ts +0 -9
- package/dist/admin/src/containers/generate-image/index.d.ts +0 -2
- package/dist/admin/src/containers/generate-images/index.d.ts +0 -2
- package/dist/admin/src/hooks/generate-images/useImages.d.ts +0 -12
- package/dist/admin/src/pages/GenerateImage.d.ts +0 -2
- package/dist/admin/src/pages/GenerateImages.d.ts +0 -2
|
@@ -1,2 +1,67 @@
|
|
|
1
|
-
declare const _default: {
|
|
1
|
+
declare const _default: {
|
|
2
|
+
template: {
|
|
3
|
+
schema: {
|
|
4
|
+
kind: string;
|
|
5
|
+
collectionName: string;
|
|
6
|
+
info: {
|
|
7
|
+
singularName: string;
|
|
8
|
+
pluralName: string;
|
|
9
|
+
displayName: string;
|
|
10
|
+
description: string;
|
|
11
|
+
};
|
|
12
|
+
options: {
|
|
13
|
+
draftAndPublish: boolean;
|
|
14
|
+
};
|
|
15
|
+
pluginOptions: {
|
|
16
|
+
'content-manager': {
|
|
17
|
+
visible: boolean;
|
|
18
|
+
};
|
|
19
|
+
'content-type-builder': {
|
|
20
|
+
visible: boolean;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
attributes: {
|
|
24
|
+
name: {
|
|
25
|
+
type: string;
|
|
26
|
+
required: boolean;
|
|
27
|
+
maxLength: number;
|
|
28
|
+
};
|
|
29
|
+
folder: {
|
|
30
|
+
type: string;
|
|
31
|
+
default: string;
|
|
32
|
+
};
|
|
33
|
+
width: {
|
|
34
|
+
type: string;
|
|
35
|
+
required: boolean;
|
|
36
|
+
};
|
|
37
|
+
height: {
|
|
38
|
+
type: string;
|
|
39
|
+
required: boolean;
|
|
40
|
+
};
|
|
41
|
+
background: {
|
|
42
|
+
type: string;
|
|
43
|
+
default: string;
|
|
44
|
+
};
|
|
45
|
+
safeMargin: {
|
|
46
|
+
type: string;
|
|
47
|
+
default: number;
|
|
48
|
+
};
|
|
49
|
+
gridUnit: {
|
|
50
|
+
type: string;
|
|
51
|
+
default: number;
|
|
52
|
+
};
|
|
53
|
+
layers: {
|
|
54
|
+
type: string;
|
|
55
|
+
required: boolean;
|
|
56
|
+
};
|
|
57
|
+
baseId: {
|
|
58
|
+
type: string;
|
|
59
|
+
};
|
|
60
|
+
replacesBase: {
|
|
61
|
+
type: string;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
};
|
|
2
67
|
export default _default;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
schema: {
|
|
3
|
+
kind: string;
|
|
4
|
+
collectionName: string;
|
|
5
|
+
info: {
|
|
6
|
+
singularName: string;
|
|
7
|
+
pluralName: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
description: string;
|
|
10
|
+
};
|
|
11
|
+
options: {
|
|
12
|
+
draftAndPublish: boolean;
|
|
13
|
+
};
|
|
14
|
+
pluginOptions: {
|
|
15
|
+
'content-manager': {
|
|
16
|
+
visible: boolean;
|
|
17
|
+
};
|
|
18
|
+
'content-type-builder': {
|
|
19
|
+
visible: boolean;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
attributes: {
|
|
23
|
+
name: {
|
|
24
|
+
type: string;
|
|
25
|
+
required: boolean;
|
|
26
|
+
maxLength: number;
|
|
27
|
+
};
|
|
28
|
+
folder: {
|
|
29
|
+
type: string;
|
|
30
|
+
default: string;
|
|
31
|
+
};
|
|
32
|
+
width: {
|
|
33
|
+
type: string;
|
|
34
|
+
required: boolean;
|
|
35
|
+
};
|
|
36
|
+
height: {
|
|
37
|
+
type: string;
|
|
38
|
+
required: boolean;
|
|
39
|
+
};
|
|
40
|
+
background: {
|
|
41
|
+
type: string;
|
|
42
|
+
default: string;
|
|
43
|
+
};
|
|
44
|
+
safeMargin: {
|
|
45
|
+
type: string;
|
|
46
|
+
default: number;
|
|
47
|
+
};
|
|
48
|
+
gridUnit: {
|
|
49
|
+
type: string;
|
|
50
|
+
default: number;
|
|
51
|
+
};
|
|
52
|
+
layers: {
|
|
53
|
+
type: string;
|
|
54
|
+
required: boolean;
|
|
55
|
+
};
|
|
56
|
+
baseId: {
|
|
57
|
+
type: string;
|
|
58
|
+
};
|
|
59
|
+
replacesBase: {
|
|
60
|
+
type: string;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
export default _default;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* «Mis templates» (ADR-004, diseño S4.6 D1). Oculto en Content Manager y en Content-Type Builder:
|
|
3
|
+
* solo se edita desde el Estudio de imágenes. Las capas van en JSON y se validan en el servicio.
|
|
4
|
+
*/
|
|
5
|
+
declare const _default: {
|
|
6
|
+
kind: string;
|
|
7
|
+
collectionName: string;
|
|
8
|
+
info: {
|
|
9
|
+
singularName: string;
|
|
10
|
+
pluralName: string;
|
|
11
|
+
displayName: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
options: {
|
|
15
|
+
draftAndPublish: boolean;
|
|
16
|
+
};
|
|
17
|
+
pluginOptions: {
|
|
18
|
+
'content-manager': {
|
|
19
|
+
visible: boolean;
|
|
20
|
+
};
|
|
21
|
+
'content-type-builder': {
|
|
22
|
+
visible: boolean;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
attributes: {
|
|
26
|
+
name: {
|
|
27
|
+
type: string;
|
|
28
|
+
required: boolean;
|
|
29
|
+
maxLength: number;
|
|
30
|
+
};
|
|
31
|
+
folder: {
|
|
32
|
+
type: string;
|
|
33
|
+
default: string;
|
|
34
|
+
};
|
|
35
|
+
width: {
|
|
36
|
+
type: string;
|
|
37
|
+
required: boolean;
|
|
38
|
+
};
|
|
39
|
+
height: {
|
|
40
|
+
type: string;
|
|
41
|
+
required: boolean;
|
|
42
|
+
};
|
|
43
|
+
background: {
|
|
44
|
+
type: string;
|
|
45
|
+
default: string;
|
|
46
|
+
};
|
|
47
|
+
safeMargin: {
|
|
48
|
+
type: string;
|
|
49
|
+
default: number;
|
|
50
|
+
};
|
|
51
|
+
gridUnit: {
|
|
52
|
+
type: string;
|
|
53
|
+
default: number;
|
|
54
|
+
};
|
|
55
|
+
layers: {
|
|
56
|
+
type: string;
|
|
57
|
+
required: boolean;
|
|
58
|
+
};
|
|
59
|
+
/** Base de la que se copió (origen). */
|
|
60
|
+
baseId: {
|
|
61
|
+
type: string;
|
|
62
|
+
};
|
|
63
|
+
/** Si está, esta fila es la versión editada de esa plantilla base (S4.15): una por base. */
|
|
64
|
+
replacesBase: {
|
|
65
|
+
type: string;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export default _default;
|
|
@@ -2,7 +2,9 @@ import type { Core } from '@strapi/strapi';
|
|
|
2
2
|
declare const config: ({ strapi }: {
|
|
3
3
|
strapi: Core.Strapi;
|
|
4
4
|
}) => {
|
|
5
|
+
/** Devuelve si cada credencial está guardada y sus últimos 4 caracteres, nunca el valor. */
|
|
5
6
|
get(ctx: any): Promise<void>;
|
|
7
|
+
/** Escribe solo las credenciales conocidas que llegan como texto no vacío. */
|
|
6
8
|
set(ctx: any): Promise<void>;
|
|
7
9
|
};
|
|
8
10
|
export default config;
|
|
@@ -5,16 +5,11 @@ declare const controller: ({ strapi }: {
|
|
|
5
5
|
getArticles(ctx: any): Promise<unknown>;
|
|
6
6
|
getCategories(ctx: any): Promise<unknown>;
|
|
7
7
|
getUsers(ctx: any): Promise<unknown>;
|
|
8
|
-
getImages(ctx: any): Promise<unknown>;
|
|
9
|
-
deleteImage(ctx: any): Promise<unknown>;
|
|
10
8
|
generateArticle(ctx: any): Promise<void>;
|
|
11
9
|
generateImageForArticle(ctx: any): Promise<void>;
|
|
12
|
-
generateImage(ctx: any): Promise<void>;
|
|
13
10
|
downloadFile(ctx: any): Promise<void>;
|
|
14
11
|
generateVideo(ctx: any): Promise<void>;
|
|
15
12
|
publishToLinkedIn(ctx: any): Promise<void>;
|
|
16
13
|
publishToFacebook(ctx: any): Promise<void>;
|
|
17
|
-
get(ctx: any): Promise<void>;
|
|
18
|
-
set(ctx: any): Promise<void>;
|
|
19
14
|
};
|
|
20
15
|
export default controller;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Core } from '@strapi/strapi';
|
|
2
|
+
type Ctx = {
|
|
3
|
+
request: {
|
|
4
|
+
body?: Record<string, unknown>;
|
|
5
|
+
files?: Record<string, never>;
|
|
6
|
+
};
|
|
7
|
+
status: number;
|
|
8
|
+
body: unknown;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Rutas del Generador (diseño S4.2). Mapea los errores (D12): entrada inválida → 400, bloqueo del
|
|
12
|
+
* modelo → 422 con el motivo, cualquier otro → 502 genérico; el detalle queda en el log del
|
|
13
|
+
* servidor y nunca llega al panel (puede incluir datos de la llave o de la cuenta).
|
|
14
|
+
*/
|
|
15
|
+
declare const _default: ({ strapi }: {
|
|
16
|
+
strapi: Core.Strapi;
|
|
17
|
+
}) => {
|
|
18
|
+
models: (ctx: Ctx) => Promise<void>;
|
|
19
|
+
generate: (ctx: Ctx) => Promise<void>;
|
|
20
|
+
edit: (ctx: Ctx) => Promise<void>;
|
|
21
|
+
expand: (ctx: Ctx) => Promise<void>;
|
|
22
|
+
};
|
|
23
|
+
export default _default;
|
|
@@ -5,17 +5,12 @@ declare const _default: {
|
|
|
5
5
|
getArticles(ctx: any): Promise<unknown>;
|
|
6
6
|
getCategories(ctx: any): Promise<unknown>;
|
|
7
7
|
getUsers(ctx: any): Promise<unknown>;
|
|
8
|
-
getImages(ctx: any): Promise<unknown>;
|
|
9
|
-
deleteImage(ctx: any): Promise<unknown>;
|
|
10
8
|
generateArticle(ctx: any): Promise<void>;
|
|
11
9
|
generateImageForArticle(ctx: any): Promise<void>;
|
|
12
|
-
generateImage(ctx: any): Promise<void>;
|
|
13
10
|
downloadFile(ctx: any): Promise<void>;
|
|
14
11
|
generateVideo(ctx: any): Promise<void>;
|
|
15
12
|
publishToLinkedIn(ctx: any): Promise<void>;
|
|
16
13
|
publishToFacebook(ctx: any): Promise<void>;
|
|
17
|
-
get(ctx: any): Promise<void>;
|
|
18
|
-
set(ctx: any): Promise<void>;
|
|
19
14
|
};
|
|
20
15
|
config: ({ strapi }: {
|
|
21
16
|
strapi: import("@strapi/types/dist/core").Strapi;
|
|
@@ -23,5 +18,133 @@ declare const _default: {
|
|
|
23
18
|
get(ctx: any): Promise<void>;
|
|
24
19
|
set(ctx: any): Promise<void>;
|
|
25
20
|
};
|
|
21
|
+
'image-studio': ({ strapi }: {
|
|
22
|
+
strapi: import("@strapi/types/dist/core").Strapi;
|
|
23
|
+
}) => {
|
|
24
|
+
models: (ctx: {
|
|
25
|
+
request: {
|
|
26
|
+
body?: Record<string, unknown>;
|
|
27
|
+
files?: Record<string, never>;
|
|
28
|
+
};
|
|
29
|
+
status: number;
|
|
30
|
+
body: unknown;
|
|
31
|
+
}) => Promise<void>;
|
|
32
|
+
generate: (ctx: {
|
|
33
|
+
request: {
|
|
34
|
+
body?: Record<string, unknown>;
|
|
35
|
+
files?: Record<string, never>;
|
|
36
|
+
};
|
|
37
|
+
status: number;
|
|
38
|
+
body: unknown;
|
|
39
|
+
}) => Promise<void>;
|
|
40
|
+
edit: (ctx: {
|
|
41
|
+
request: {
|
|
42
|
+
body?: Record<string, unknown>;
|
|
43
|
+
files?: Record<string, never>;
|
|
44
|
+
};
|
|
45
|
+
status: number;
|
|
46
|
+
body: unknown;
|
|
47
|
+
}) => Promise<void>;
|
|
48
|
+
expand: (ctx: {
|
|
49
|
+
request: {
|
|
50
|
+
body?: Record<string, unknown>;
|
|
51
|
+
files?: Record<string, never>;
|
|
52
|
+
};
|
|
53
|
+
status: number;
|
|
54
|
+
body: unknown;
|
|
55
|
+
}) => Promise<void>;
|
|
56
|
+
};
|
|
57
|
+
templates: ({ strapi }: {
|
|
58
|
+
strapi: import("@strapi/types/dist/core").Strapi;
|
|
59
|
+
}) => {
|
|
60
|
+
list: (ctx: {
|
|
61
|
+
request: {
|
|
62
|
+
body?: Record<string, unknown>;
|
|
63
|
+
};
|
|
64
|
+
params: Record<string, string>;
|
|
65
|
+
status: number;
|
|
66
|
+
body: unknown;
|
|
67
|
+
}) => Promise<void>;
|
|
68
|
+
create: (ctx: {
|
|
69
|
+
request: {
|
|
70
|
+
body?: Record<string, unknown>;
|
|
71
|
+
};
|
|
72
|
+
params: Record<string, string>;
|
|
73
|
+
status: number;
|
|
74
|
+
body: unknown;
|
|
75
|
+
}) => Promise<void>;
|
|
76
|
+
findOne: (ctx: {
|
|
77
|
+
request: {
|
|
78
|
+
body?: Record<string, unknown>;
|
|
79
|
+
};
|
|
80
|
+
params: Record<string, string>;
|
|
81
|
+
status: number;
|
|
82
|
+
body: unknown;
|
|
83
|
+
}) => Promise<void>;
|
|
84
|
+
update: (ctx: {
|
|
85
|
+
request: {
|
|
86
|
+
body?: Record<string, unknown>;
|
|
87
|
+
};
|
|
88
|
+
params: Record<string, string>;
|
|
89
|
+
status: number;
|
|
90
|
+
body: unknown;
|
|
91
|
+
}) => Promise<void>;
|
|
92
|
+
remove: (ctx: {
|
|
93
|
+
request: {
|
|
94
|
+
body?: Record<string, unknown>;
|
|
95
|
+
};
|
|
96
|
+
params: Record<string, string>;
|
|
97
|
+
status: number;
|
|
98
|
+
body: unknown;
|
|
99
|
+
}) => Promise<void>;
|
|
100
|
+
saveBase: (ctx: {
|
|
101
|
+
request: {
|
|
102
|
+
body?: Record<string, unknown>;
|
|
103
|
+
};
|
|
104
|
+
params: Record<string, string>;
|
|
105
|
+
status: number;
|
|
106
|
+
body: unknown;
|
|
107
|
+
}) => Promise<void>;
|
|
108
|
+
restoreBase: (ctx: {
|
|
109
|
+
request: {
|
|
110
|
+
body?: Record<string, unknown>;
|
|
111
|
+
};
|
|
112
|
+
params: Record<string, string>;
|
|
113
|
+
status: number;
|
|
114
|
+
body: unknown;
|
|
115
|
+
}) => Promise<void>;
|
|
116
|
+
folders: (ctx: {
|
|
117
|
+
request: {
|
|
118
|
+
body?: Record<string, unknown>;
|
|
119
|
+
};
|
|
120
|
+
params: Record<string, string>;
|
|
121
|
+
status: number;
|
|
122
|
+
body: unknown;
|
|
123
|
+
}) => Promise<void>;
|
|
124
|
+
createFolder: (ctx: {
|
|
125
|
+
request: {
|
|
126
|
+
body?: Record<string, unknown>;
|
|
127
|
+
};
|
|
128
|
+
params: Record<string, string>;
|
|
129
|
+
status: number;
|
|
130
|
+
body: unknown;
|
|
131
|
+
}) => Promise<void>;
|
|
132
|
+
renameFolder: (ctx: {
|
|
133
|
+
request: {
|
|
134
|
+
body?: Record<string, unknown>;
|
|
135
|
+
};
|
|
136
|
+
params: Record<string, string>;
|
|
137
|
+
status: number;
|
|
138
|
+
body: unknown;
|
|
139
|
+
}) => Promise<void>;
|
|
140
|
+
deleteFolder: (ctx: {
|
|
141
|
+
request: {
|
|
142
|
+
body?: Record<string, unknown>;
|
|
143
|
+
};
|
|
144
|
+
params: Record<string, string>;
|
|
145
|
+
status: number;
|
|
146
|
+
body: unknown;
|
|
147
|
+
}) => Promise<void>;
|
|
148
|
+
};
|
|
26
149
|
};
|
|
27
150
|
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Core } from '@strapi/strapi';
|
|
2
|
+
type Ctx = {
|
|
3
|
+
request: {
|
|
4
|
+
body?: Record<string, unknown>;
|
|
5
|
+
};
|
|
6
|
+
params: Record<string, string>;
|
|
7
|
+
status: number;
|
|
8
|
+
body: unknown;
|
|
9
|
+
};
|
|
10
|
+
/** Rutas de «Mis templates» (diseño S4.6): 400 entrada inválida, 404 inexistente, 500 el resto. */
|
|
11
|
+
declare const _default: ({ strapi }: {
|
|
12
|
+
strapi: Core.Strapi;
|
|
13
|
+
}) => {
|
|
14
|
+
list: (ctx: Ctx) => Promise<void>;
|
|
15
|
+
create: (ctx: Ctx) => Promise<void>;
|
|
16
|
+
findOne: (ctx: Ctx) => Promise<void>;
|
|
17
|
+
update: (ctx: Ctx) => Promise<void>;
|
|
18
|
+
remove: (ctx: Ctx) => Promise<void>;
|
|
19
|
+
saveBase: (ctx: Ctx) => Promise<void>;
|
|
20
|
+
restoreBase: (ctx: Ctx) => Promise<void>;
|
|
21
|
+
folders: (ctx: Ctx) => Promise<void>;
|
|
22
|
+
createFolder: (ctx: Ctx) => Promise<void>;
|
|
23
|
+
renameFolder: (ctx: Ctx) => Promise<void>;
|
|
24
|
+
deleteFolder: (ctx: Ctx) => Promise<void>;
|
|
25
|
+
};
|
|
26
|
+
export default _default;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import type { GenerateContentConfig, ImageConfig, Part, SafetySetting, Tool } from '@google/genai';
|
|
4
|
+
/**
|
|
5
|
+
* Configuración de `generateContent` para las imágenes del Estudio (S4.14). Todo se arma con los
|
|
6
|
+
* tipos de `@google/genai` (`genai.d.ts`, 1.49): nada de literales sueltos en las llamadas.
|
|
7
|
+
*
|
|
8
|
+
* El SDK sirve a dos backends. Con llave de API (Gemini API, lo que usa el plugin hoy) rechaza
|
|
9
|
+
* `personGeneration`, así que personas se pide en el prompt; con Vertex AI va en `ImageConfig`.
|
|
10
|
+
* Decisión de Israel (2026-09-30): se migrará a Vertex; entonces basta con pasar `'vertex'`.
|
|
11
|
+
*/
|
|
12
|
+
export type Backend = 'gemini-api' | 'vertex';
|
|
13
|
+
/** Única forma de pedir «sin personas» en la Gemini API. */
|
|
14
|
+
export declare const PEOPLE_CLAUSE = "STRICTLY NO people, NO humans, NO faces, NO hands.";
|
|
15
|
+
/** Seguridad activa → bloqueo medio; apagada → solo lo alto. `BLOCK_NONE` no aplica a llaves de API (D6). */
|
|
16
|
+
export declare const safetySettings: (safety: boolean) => SafetySetting[];
|
|
17
|
+
export interface ImageConfigInput {
|
|
18
|
+
aspectRatio?: string;
|
|
19
|
+
imageSize?: string;
|
|
20
|
+
allowPeople: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare const imageConfig: ({ aspectRatio, imageSize, allowPeople }: ImageConfigInput, backend?: Backend) => ImageConfig;
|
|
23
|
+
/** El texto del prompt; en la Gemini API lleva la cláusula de personas cuando no se permiten. */
|
|
24
|
+
export declare const promptPart: (text: string, allowPeople: boolean, backend?: Backend) => Part;
|
|
25
|
+
/** Búsqueda de Google con resultados web y de imágenes (Nano Banana 2, D5). */
|
|
26
|
+
export declare const searchTool: () => Tool;
|
|
27
|
+
export interface GenerateConfigInput extends ImageConfigInput {
|
|
28
|
+
aspectRatio: string;
|
|
29
|
+
safety: boolean;
|
|
30
|
+
grounding: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare const generateConfig: ({ aspectRatio, imageSize, allowPeople, safety, grounding }: GenerateConfigInput, backend?: Backend) => GenerateContentConfig;
|
|
33
|
+
export interface EditConfigInput {
|
|
34
|
+
safety: boolean;
|
|
35
|
+
allowPeople: boolean;
|
|
36
|
+
/** La de la imagen base: con varias imágenes el modelo no la conserva solo (S4.13). */
|
|
37
|
+
aspectRatio?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare const editConfig: ({ safety, allowPeople, aspectRatio }: EditConfigInput, backend?: Backend) => GenerateContentConfig;
|
|
40
|
+
export declare const inlinePart: (bytes: Buffer, mimeType: string) => Part;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catálogo de modelos de imagen del Generador (diseño S4.2, D1). Es la única lista: cuando Google
|
|
3
|
+
* cambie o retire un modelo se edita aquí. `GET /image-studio/models` la filtra contra
|
|
4
|
+
* `ai.models.list()` (D2). El primero es el modelo por defecto.
|
|
5
|
+
*/
|
|
6
|
+
export interface ImageModelInfo {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
/** Imágenes de referencia que acepta. El panel limita a 6 como el prototipo (la API admite hasta 14). */
|
|
10
|
+
maxReferences: number;
|
|
11
|
+
/** Tamaños de salida que admite (`imageSize`, con K mayúscula); vacío = el modelo decide. */
|
|
12
|
+
sizes: string[];
|
|
13
|
+
aspectRatios: string[];
|
|
14
|
+
/** Puede editar una imagen existente con una instrucción (iterar). */
|
|
15
|
+
canEdit: boolean;
|
|
16
|
+
/** Admite la búsqueda de Google al generar (S4.14; según la doc, solo 3.1 Flash Image). */
|
|
17
|
+
grounding: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Modelos vigentes según la doc de Google (S4.12, 2026-09-29): Imagen está apagado. Las etiquetas
|
|
21
|
+
* son los nombres comerciales: Nano Banana 2 = 3.1 Flash, 2 Lite = 3.1 Flash Lite, Pro = 3 Pro, sin
|
|
22
|
+
* número = 2.5 Flash. Cada modelo
|
|
23
|
+
* estable tiene su variante `-preview` por si la llave solo tiene acceso a esa; `availableModels`
|
|
24
|
+
* oculta la preview cuando la estable también aparece.
|
|
25
|
+
*/
|
|
26
|
+
export declare const IMAGE_MODELS: ImageModelInfo[];
|
|
27
|
+
export declare const findModel: (id: string | undefined) => ImageModelInfo;
|
|
28
|
+
/**
|
|
29
|
+
* Catálogo filtrado por los nombres que devuelve `ai.models.list()` («models/<id>»). Sin lista, o si
|
|
30
|
+
* ninguno coincide (la API cambió de formato), se devuelve el catálogo completo sin verificar para
|
|
31
|
+
* no dejar el Generador vacío.
|
|
32
|
+
*/
|
|
33
|
+
export declare const availableModels: (listed: string[] | null) => {
|
|
34
|
+
models: ImageModelInfo[];
|
|
35
|
+
verified: boolean;
|
|
36
|
+
};
|
|
37
|
+
/** Modelo para iterar: el elegido si edita; si no, el primero del catálogo (D8). */
|
|
38
|
+
export declare const editModelFor: (id: string | undefined) => ImageModelInfo;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Un prompt en una sola línea y saneado (S4.14): Gemini responde peor a saltos y espacios
|
|
3
|
+
* repetidos. Segunda línea de defensa; la validación está en `validate.ts`.
|
|
4
|
+
*/
|
|
5
|
+
export declare const cleanPrompt: (text: string) => string;
|
|
6
|
+
/** Instrucción de «Expandir idea» (D9). */
|
|
7
|
+
export declare const EXPAND_INSTRUCTION: (concept: string) => string;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { checkPrompt } from '../../../admin/src/lib/promptRules';
|
|
2
|
+
import type { ImageModelInfo } from './models';
|
|
3
|
+
/** Entrada inválida del panel: el controlador la responde como 400 (diseño S4.2, D12). */
|
|
4
|
+
export declare class InputError extends Error {
|
|
5
|
+
}
|
|
6
|
+
/** Archivo de formidable tal como lo deja `ctx.request.files`. */
|
|
7
|
+
export interface UploadedFile {
|
|
8
|
+
filepath: string;
|
|
9
|
+
mimetype: string | null;
|
|
10
|
+
size: number;
|
|
11
|
+
originalFilename?: string | null;
|
|
12
|
+
}
|
|
13
|
+
type Fields = Record<string, unknown>;
|
|
14
|
+
type Files = Record<string, UploadedFile | UploadedFile[] | undefined>;
|
|
15
|
+
/** Prompt saneado y validado con las reglas compartidas con el panel (S4.14, D1). */
|
|
16
|
+
export declare const clean: (text: string, labels?: Parameters<typeof checkPrompt>[1]) => string;
|
|
17
|
+
export interface GenerateInput {
|
|
18
|
+
prompt: string;
|
|
19
|
+
model: ImageModelInfo;
|
|
20
|
+
aspectRatio: string;
|
|
21
|
+
imageSize?: string;
|
|
22
|
+
safety: boolean;
|
|
23
|
+
allowPeople: boolean;
|
|
24
|
+
/** Búsqueda de Google; `false` si el modelo no la admite (S4.14, D5). */
|
|
25
|
+
grounding: boolean;
|
|
26
|
+
references: UploadedFile[];
|
|
27
|
+
}
|
|
28
|
+
export declare const parseGenerateInput: (fields: Fields, files: Files) => GenerateInput;
|
|
29
|
+
export interface EditInput {
|
|
30
|
+
instruction: string;
|
|
31
|
+
model: ImageModelInfo;
|
|
32
|
+
image: UploadedFile;
|
|
33
|
+
/** Elementos para el cambio (un logo que colocar, S4.13). */
|
|
34
|
+
references: UploadedFile[];
|
|
35
|
+
safety: boolean;
|
|
36
|
+
allowPeople: boolean;
|
|
37
|
+
/** La proporción de la imagen base, si el modelo la admite: con varias imágenes no la conserva solo. */
|
|
38
|
+
aspectRatio?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare const parseEditInput: (fields: Fields, files: Files) => EditInput;
|
|
41
|
+
export {};
|