@interware/content-generator 0.4.3 → 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-oubMDdAZ.mjs → App-DPVBu7QB.mjs} +37 -712
- package/dist/_chunks/{App-DmCOiKrV.js → App-DVTFrZvf.js} +31 -706
- 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-DwDV99gW.js → getTranslation-D88uLXGd.js} +1 -1
- package/dist/_chunks/{getTranslation-B0tfTODk.mjs → getTranslation-DfxaP_TC.mjs} +1 -1
- package/dist/_chunks/{index-PnmqwUfI.mjs → index-CqDdi211.mjs} +25 -7
- package/dist/_chunks/{index-CTnsB_jp.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 +2439 -1247
- package/dist/server/index.mjs +2446 -1253
- 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 +1 -5
- package/dist/server/src/controllers/image-studio.d.ts +23 -0
- package/dist/server/src/controllers/index.d.ts +129 -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 +231 -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 +28 -57
- package/dist/server/src/services/service.d.ts +1 -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-APrsjya3.js +0 -262
- package/dist/_chunks/Settings-BevnW4cE.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 -11
- package/dist/admin/src/pages/GenerateImage.d.ts +0 -2
- package/dist/admin/src/pages/GenerateImages.d.ts +0 -2
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Delta } from './layers';
|
|
2
|
+
import type { Layer, LayerPatch } from './types';
|
|
3
|
+
/** Manija de redimensión que ofrece cada tipo de capa. */
|
|
4
|
+
export type Handle = 'box' | 'width' | 'size';
|
|
5
|
+
export type DragMode = 'move' | Handle;
|
|
6
|
+
export declare const handleFor: (layer: Layer) => Handle | null;
|
|
7
|
+
/** Cambio que produce un arrastre `delta` (px de pantalla) sobre la capa tal como estaba al empezar. */
|
|
8
|
+
export declare const dragPatch: (mode: DragMode, start: Layer, delta: Delta, scale: number, { keepRatio }?: {
|
|
9
|
+
keepRatio?: boolean;
|
|
10
|
+
}) => LayerPatch;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Layer, LayerPatch, Template } from './types';
|
|
2
|
+
export declare const HISTORY_LIMIT = 30;
|
|
3
|
+
export interface EditorState {
|
|
4
|
+
template: Template;
|
|
5
|
+
layers: Layer[];
|
|
6
|
+
past: Layer[][];
|
|
7
|
+
future: Layer[][];
|
|
8
|
+
/** Capas antes del gesto transitorio en curso (arrastre); `commit` las pasa al historial. */
|
|
9
|
+
pending: Layer[] | null;
|
|
10
|
+
selectedId: string | null;
|
|
11
|
+
}
|
|
12
|
+
export type EditorAction = {
|
|
13
|
+
type: 'select';
|
|
14
|
+
id: string | null;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'add';
|
|
17
|
+
layer: Layer;
|
|
18
|
+
} | {
|
|
19
|
+
type: 'update';
|
|
20
|
+
id: string;
|
|
21
|
+
patch: LayerPatch;
|
|
22
|
+
transient?: boolean;
|
|
23
|
+
} | {
|
|
24
|
+
type: 'commit';
|
|
25
|
+
} | {
|
|
26
|
+
type: 'remove';
|
|
27
|
+
id: string;
|
|
28
|
+
} | {
|
|
29
|
+
type: 'reorder';
|
|
30
|
+
id: string;
|
|
31
|
+
to: 'front' | 'back' | 'up' | 'down';
|
|
32
|
+
} | {
|
|
33
|
+
type: 'moveTo';
|
|
34
|
+
id: string;
|
|
35
|
+
targetId: string;
|
|
36
|
+
place: 'above' | 'below';
|
|
37
|
+
} | {
|
|
38
|
+
type: 'toggleBackground';
|
|
39
|
+
id: string;
|
|
40
|
+
} | {
|
|
41
|
+
type: 'undo';
|
|
42
|
+
} | {
|
|
43
|
+
type: 'redo';
|
|
44
|
+
} | {
|
|
45
|
+
type: 'reset';
|
|
46
|
+
}
|
|
47
|
+
/** Fuera del historial de deshacer: el historial guarda solo capas (diseño S4.5, D5). */
|
|
48
|
+
| {
|
|
49
|
+
type: 'setSafeMargin';
|
|
50
|
+
value: number;
|
|
51
|
+
}
|
|
52
|
+
/** También fuera del historial: renombrar no se deshace con ⌘Z (S4.11). */
|
|
53
|
+
| {
|
|
54
|
+
type: 'rename';
|
|
55
|
+
name: string;
|
|
56
|
+
};
|
|
57
|
+
export declare const initEditor: (template: Template) => EditorState;
|
|
58
|
+
export declare const editorReducer: (state: EditorState, action: EditorAction) => EditorState;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ElementPreset } from './presets';
|
|
2
|
+
import type { Layer, LayerType } from './types';
|
|
3
|
+
/** Siguiente nombre libre para una capa del tipo dado: «Etiqueta 1», «Etiqueta 2», … */
|
|
4
|
+
export declare const nextLayerName: (layers: Pick<Layer, 'label'>[], type: LayerType) => string;
|
|
5
|
+
export interface Box {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
w: number;
|
|
9
|
+
h: number;
|
|
10
|
+
}
|
|
11
|
+
/** Caja envolvente aproximada de una capa, en unidades del lienzo. */
|
|
12
|
+
export declare const bbox: (l: Layer) => Box;
|
|
13
|
+
export interface Delta {
|
|
14
|
+
dx: number;
|
|
15
|
+
dy: number;
|
|
16
|
+
}
|
|
17
|
+
/** Nueva posición tras arrastrar `delta` píxeles de pantalla con el lienzo a escala `scale`. */
|
|
18
|
+
export declare const moveBy: (pos: {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
}, { dx, dy }: Delta, scale: number) => {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
};
|
|
25
|
+
/** Nuevo tamaño tras arrastrar la manija inferior derecha. */
|
|
26
|
+
export declare const resizeBy: (size: {
|
|
27
|
+
w: number;
|
|
28
|
+
h: number;
|
|
29
|
+
}, { dx, dy }: Delta, scale: number, { min, keepRatio }?: {
|
|
30
|
+
min?: number;
|
|
31
|
+
keepRatio?: boolean;
|
|
32
|
+
}) => {
|
|
33
|
+
w: number;
|
|
34
|
+
h: number;
|
|
35
|
+
};
|
|
36
|
+
/** Capa nueva a partir de un elemento de la paleta, dentro del margen seguro y a media altura. */
|
|
37
|
+
export declare const createLayerFromPreset: (preset: ElementPreset, layers: Layer[], canvas: {
|
|
38
|
+
safeMargin: number;
|
|
39
|
+
height: number;
|
|
40
|
+
}, id: string) => Layer;
|
|
41
|
+
/** `#RRGGBB` → `rgba(r, g, b, a)`. */
|
|
42
|
+
export declare const hexA: (hex: string, alpha: number) => string;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paleta InterWare (paleta canónica del brochure). Es la única que ofrecen las muestras del
|
|
3
|
+
* editor y la única que usan las plantillas base.
|
|
4
|
+
*/
|
|
5
|
+
export declare const PALETTE: readonly [{
|
|
6
|
+
readonly label: "Navy";
|
|
7
|
+
readonly value: "#1F2A44";
|
|
8
|
+
}, {
|
|
9
|
+
readonly label: "Rojo";
|
|
10
|
+
readonly value: "#E4002B";
|
|
11
|
+
}, {
|
|
12
|
+
readonly label: "Teal";
|
|
13
|
+
readonly value: "#00C7B1";
|
|
14
|
+
}, {
|
|
15
|
+
readonly label: "Teal suave";
|
|
16
|
+
readonly value: "#92CFC7";
|
|
17
|
+
}, {
|
|
18
|
+
readonly label: "Amarillo";
|
|
19
|
+
readonly value: "#FFC844";
|
|
20
|
+
}, {
|
|
21
|
+
readonly label: "Amarillo suave";
|
|
22
|
+
readonly value: "#F8DF8D";
|
|
23
|
+
}, {
|
|
24
|
+
readonly label: "Gris";
|
|
25
|
+
readonly value: "#5B6473";
|
|
26
|
+
}, {
|
|
27
|
+
readonly label: "Papel";
|
|
28
|
+
readonly value: "#EEF1F5";
|
|
29
|
+
}, {
|
|
30
|
+
readonly label: "Blanco";
|
|
31
|
+
readonly value: "#FFFFFF";
|
|
32
|
+
}];
|
|
33
|
+
export declare const NAVY = "#1F2A44";
|
|
34
|
+
export declare const RED = "#E4002B";
|
|
35
|
+
export declare const TEAL = "#00C7B1";
|
|
36
|
+
export declare const GREY = "#5B6473";
|
|
37
|
+
export declare const PAPER = "#EEF1F5";
|
|
38
|
+
export declare const WHITE = "#FFFFFF";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Layer, LayerType, ShapeKind } from './types';
|
|
2
|
+
/** Elemento que se puede agregar desde la paleta del editor. */
|
|
3
|
+
export interface ElementPreset {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
/** Nombre de un ícono de @strapi/icons para la paleta. */
|
|
7
|
+
icon: string;
|
|
8
|
+
type: LayerType;
|
|
9
|
+
props: Partial<Layer> & Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export declare const ELEMENT_PRESETS: ElementPreset[];
|
|
12
|
+
export declare const SHAPE_TYPES: {
|
|
13
|
+
id: ShapeKind;
|
|
14
|
+
label: string;
|
|
15
|
+
}[];
|
|
16
|
+
/** Íconos de @strapi/icons disponibles como contenido de una pieza. */
|
|
17
|
+
export declare const ICON_LIBRARY: readonly ["Star", "Heart", "Lightning", "CheckCircle", "Shield", "Sparkle", "Rocket", "User", "Briefcase", "SealCheck", "Crown", "Lightbulb", "Server", "Globe", "Cloud", "Database", "Cog", "ChartBubble", "ChartPie", "PresentationChart", "Earth", "PinMap", "Mail", "Phone", "Play"];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Comandos de teclado del editor (diseño S4.5, D6). */
|
|
2
|
+
export type Command = 'undo' | 'redo' | 'duplicate' | 'save' | 'deselect' | 'delete' | {
|
|
3
|
+
reorder: 'front' | 'back' | 'up' | 'down';
|
|
4
|
+
} | {
|
|
5
|
+
nudge: {
|
|
6
|
+
dx: number;
|
|
7
|
+
dy: number;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
type KeyLike = {
|
|
11
|
+
key: string;
|
|
12
|
+
metaKey: boolean;
|
|
13
|
+
ctrlKey: boolean;
|
|
14
|
+
shiftKey: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare const commandFor: (e: KeyLike) => Command | null;
|
|
17
|
+
/** ¿El foco está en un lugar donde se escribe? Ahí los atajos no aplican. */
|
|
18
|
+
export declare const isTyping: (target: EventTarget | null) => boolean;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Box } from './layers';
|
|
2
|
+
import type { Layer } from './types';
|
|
3
|
+
/** Redondea a la unidad de la cuadrícula más cercana (diseño S4.5, D1). */
|
|
4
|
+
export declare const snapValue: (v: number, unit: number) => number;
|
|
5
|
+
/**
|
|
6
|
+
* Guías inteligentes: alinea el borde o el centro de `box` con el borde o centro más cercano del
|
|
7
|
+
* lienzo o de otra capa, si está a menos de `tolerance` (unidades del lienzo). Por eje se aplica la
|
|
8
|
+
* coincidencia más cercana y se devuelve su línea guía.
|
|
9
|
+
*/
|
|
10
|
+
export declare const alignToGuides: (box: Box, others: Box[], canvas: {
|
|
11
|
+
w: number;
|
|
12
|
+
h: number;
|
|
13
|
+
}, tolerance: number) => {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
v: number[];
|
|
17
|
+
h: number[];
|
|
18
|
+
};
|
|
19
|
+
/** Capas visibles (sin contar fondos) que salen del área segura (diseño S4.5, D8). */
|
|
20
|
+
export declare const safeViolations: (layers: Layer[], t: {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
safeMargin: number;
|
|
24
|
+
}) => Layer[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Template } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Las 6 plantillas base del prototipo, adaptadas a la marca InterWare: paleta del brochure,
|
|
4
|
+
* Texta para titulares (`font: 'display'`) e Inter para el resto. Viven en código (ADR-004).
|
|
5
|
+
*/
|
|
6
|
+
export declare const BASE_TEMPLATES: Template[];
|
|
7
|
+
/** Id de la plantilla base que representa (original o editada), o `undefined` si no es base (S4.15). */
|
|
8
|
+
export declare const baseIdOf: (t: Template) => string | undefined;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modelo de capas del editor de plantillas (ADR-004). Es el contrato que comparten el lienzo, la
|
|
3
|
+
* exportación y, desde S4.6, la persistencia en el CMS.
|
|
4
|
+
*/
|
|
5
|
+
export type LayerType = 'text' | 'list' | 'quote' | 'rect' | 'shape' | 'badge' | 'logo' | 'image' | 'icon' | 'avatar' | 'qr';
|
|
6
|
+
/** Roles anteriores a S4.16; hoy `font` es el id del catálogo (`fonts/catalog.ts`) y estos se leen como Texta e Inter. */
|
|
7
|
+
export type FontRole = 'display' | 'body';
|
|
8
|
+
export type ShapeKind = 'rect' | 'rounded' | 'circle' | 'triangle' | 'star' | 'line' | 'arrow' | 'hexagon';
|
|
9
|
+
export interface Shadow {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
blur: number;
|
|
13
|
+
color: string;
|
|
14
|
+
opacity: number;
|
|
15
|
+
}
|
|
16
|
+
interface LayerBase {
|
|
17
|
+
id: string;
|
|
18
|
+
type: LayerType;
|
|
19
|
+
label: string;
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
opacity?: number;
|
|
23
|
+
rotate?: number;
|
|
24
|
+
hidden?: boolean;
|
|
25
|
+
locked?: boolean;
|
|
26
|
+
userAdded?: boolean;
|
|
27
|
+
}
|
|
28
|
+
interface TypographyProps {
|
|
29
|
+
fontSize: number;
|
|
30
|
+
fontWeight: number;
|
|
31
|
+
color: string;
|
|
32
|
+
/** Id del catálogo de tipografías, o un rol anterior (`display`, `body`). */
|
|
33
|
+
font?: string;
|
|
34
|
+
fontStyle?: 'normal' | 'italic';
|
|
35
|
+
lineHeight?: number;
|
|
36
|
+
letterSpacing?: string;
|
|
37
|
+
textTransform?: 'none' | 'uppercase';
|
|
38
|
+
}
|
|
39
|
+
export interface TextLayer extends LayerBase, TypographyProps {
|
|
40
|
+
type: 'text';
|
|
41
|
+
w: number;
|
|
42
|
+
content: string;
|
|
43
|
+
textAlign?: 'left' | 'center' | 'right';
|
|
44
|
+
}
|
|
45
|
+
export interface ListLayer extends LayerBase, TypographyProps {
|
|
46
|
+
type: 'list';
|
|
47
|
+
w: number;
|
|
48
|
+
items: string[];
|
|
49
|
+
ordered: boolean;
|
|
50
|
+
}
|
|
51
|
+
export interface QuoteLayer extends LayerBase, TypographyProps {
|
|
52
|
+
type: 'quote';
|
|
53
|
+
w: number;
|
|
54
|
+
content: string;
|
|
55
|
+
accentColor: string;
|
|
56
|
+
}
|
|
57
|
+
export interface RectLayer extends LayerBase {
|
|
58
|
+
type: 'rect';
|
|
59
|
+
w: number;
|
|
60
|
+
h: number;
|
|
61
|
+
color: string;
|
|
62
|
+
gradient?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface ShapeLayer extends LayerBase {
|
|
65
|
+
type: 'shape';
|
|
66
|
+
w: number;
|
|
67
|
+
h: number;
|
|
68
|
+
shape: ShapeKind;
|
|
69
|
+
color: string;
|
|
70
|
+
color2?: string;
|
|
71
|
+
fillType?: 'solid' | 'linear' | 'radial';
|
|
72
|
+
gradAngle?: number;
|
|
73
|
+
radius?: number;
|
|
74
|
+
strokeWidth?: number;
|
|
75
|
+
strokeColor?: string;
|
|
76
|
+
shadow?: Shadow | null;
|
|
77
|
+
}
|
|
78
|
+
export interface BadgeLayer extends LayerBase, TypographyProps {
|
|
79
|
+
type: 'badge';
|
|
80
|
+
content: string;
|
|
81
|
+
paddingX: number;
|
|
82
|
+
paddingY: number;
|
|
83
|
+
bg: string;
|
|
84
|
+
}
|
|
85
|
+
export interface LogoLayer extends LayerBase {
|
|
86
|
+
type: 'logo';
|
|
87
|
+
color: string;
|
|
88
|
+
logoScale: number;
|
|
89
|
+
}
|
|
90
|
+
export interface ImageLayer extends LayerBase {
|
|
91
|
+
type: 'image';
|
|
92
|
+
w: number;
|
|
93
|
+
h: number;
|
|
94
|
+
/** URL de origen (Media Library o data URL de un archivo subido). */
|
|
95
|
+
src: string;
|
|
96
|
+
fileId?: number;
|
|
97
|
+
fit?: 'cover' | 'contain';
|
|
98
|
+
radius?: number;
|
|
99
|
+
bgMode?: boolean;
|
|
100
|
+
/** Imagen antes de quitarle el fondo, para «Restaurar original». */
|
|
101
|
+
srcOriginal?: string;
|
|
102
|
+
/** Geometría previa a «usar como fondo», para poder liberarla. */
|
|
103
|
+
prev?: {
|
|
104
|
+
x: number;
|
|
105
|
+
y: number;
|
|
106
|
+
w: number;
|
|
107
|
+
h: number;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export interface IconLayer extends LayerBase {
|
|
111
|
+
type: 'icon';
|
|
112
|
+
icon: string;
|
|
113
|
+
size: number;
|
|
114
|
+
color: string;
|
|
115
|
+
}
|
|
116
|
+
export interface AvatarLayer extends LayerBase {
|
|
117
|
+
type: 'avatar';
|
|
118
|
+
size: number;
|
|
119
|
+
bg: string;
|
|
120
|
+
initials: string;
|
|
121
|
+
border: boolean;
|
|
122
|
+
borderWidth: number;
|
|
123
|
+
borderColor: string;
|
|
124
|
+
src?: string;
|
|
125
|
+
}
|
|
126
|
+
export interface QrLayer extends LayerBase {
|
|
127
|
+
type: 'qr';
|
|
128
|
+
size: number;
|
|
129
|
+
color: string;
|
|
130
|
+
bg: string;
|
|
131
|
+
url: string;
|
|
132
|
+
}
|
|
133
|
+
export type Layer = TextLayer | ListLayer | QuoteLayer | RectLayer | ShapeLayer | BadgeLayer | LogoLayer | ImageLayer | IconLayer | AvatarLayer | QrLayer;
|
|
134
|
+
/** Parche aplicable a cualquier capa: el editor sabe qué campos tiene cada tipo. */
|
|
135
|
+
export type LayerPatch = Partial<Omit<Layer, 'id' | 'type'>> & Record<string, unknown>;
|
|
136
|
+
export interface Template {
|
|
137
|
+
id: string;
|
|
138
|
+
name: string;
|
|
139
|
+
category: string;
|
|
140
|
+
tag: string;
|
|
141
|
+
width: number;
|
|
142
|
+
height: number;
|
|
143
|
+
background: string;
|
|
144
|
+
safeMargin: number;
|
|
145
|
+
gridUnit: number;
|
|
146
|
+
layers: Layer[];
|
|
147
|
+
/** Solo en «Mis templates» (S4.6): id en el CMS, carpeta y plantilla base de origen. */
|
|
148
|
+
documentId?: string;
|
|
149
|
+
folder?: string;
|
|
150
|
+
baseId?: string;
|
|
151
|
+
/** Versión editada de esa plantilla base, guardada en el CMS para todos (S4.15). */
|
|
152
|
+
replacesBase?: string;
|
|
153
|
+
}
|
|
154
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vista del lienzo (diseño S4.9, D9): escala y desplazamiento de la esquina superior izquierda de la
|
|
3
|
+
* pieza dentro del viewport, en píxeles de pantalla. Un punto `c` del lienzo se ve en
|
|
4
|
+
* `pan + c * scale`.
|
|
5
|
+
*/
|
|
6
|
+
export interface View {
|
|
7
|
+
scale: number;
|
|
8
|
+
pan: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare const MIN_ZOOM = 0.05;
|
|
14
|
+
export declare const MAX_ZOOM = 4;
|
|
15
|
+
export declare const clampZoom: (z: number) => number;
|
|
16
|
+
/** Zoom a `nextScale` dejando fijo el punto del lienzo que está bajo `cursor` (pellizco, ⌘ + rueda). */
|
|
17
|
+
export declare const zoomAt: (view: View, cursor: {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
}, nextScale: number) => View;
|
|
21
|
+
/** Desplaza la vista (dos dedos, arrastre del fondo). */
|
|
22
|
+
export declare const panBy: (view: View, dx: number, dy: number) => View;
|
|
23
|
+
/**
|
|
24
|
+
* «Ajustar»: la escala que hace caber la pieza en el espacio libre entre los paneles flotantes
|
|
25
|
+
* (nunca más de 100 %) y el desplazamiento que la centra ahí (diseño S4.9, D8).
|
|
26
|
+
*/
|
|
27
|
+
export declare const fitView: (viewport: {
|
|
28
|
+
w: number;
|
|
29
|
+
h: number;
|
|
30
|
+
}, insets: {
|
|
31
|
+
left: number;
|
|
32
|
+
right: number;
|
|
33
|
+
}, piece: {
|
|
34
|
+
w: number;
|
|
35
|
+
h: number;
|
|
36
|
+
}, padding?: number, rulers?: number) => View;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface IWLogoProps {
|
|
2
|
+
color: string;
|
|
3
|
+
scale?: number;
|
|
4
|
+
}
|
|
5
|
+
/** Logotipo InterWare: punto rojo, «i», «w» y la palabra InterWare. 170 × 36 a escala 1. */
|
|
6
|
+
export declare const IWLogo: ({ color, scale }: IWLogoProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { Layer, Template } from '../model/types';
|
|
3
|
+
interface LayerCanvasProps {
|
|
4
|
+
template: Pick<Template, 'width' | 'height' | 'background'>;
|
|
5
|
+
layers: Layer[];
|
|
6
|
+
/** Escala de presentación; la exportación usa 1. */
|
|
7
|
+
scale?: number;
|
|
8
|
+
}
|
|
9
|
+
/** Imágenes usadas como fondo primero, luego el resto en su orden; las ocultas no se pintan. */
|
|
10
|
+
export declare const visibleLayers: (layers: Layer[]) => Layer[];
|
|
11
|
+
/** Pieza completa: fondo de la plantilla y sus capas, escalada para presentación. */
|
|
12
|
+
export declare const LayerCanvas: import("react").ForwardRefExoticComponent<LayerCanvasProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declara en el documento del panel las fuentes del catálogo (S4.16): las del CMS por su ruta y las
|
|
3
|
+
* subidas como data URL. Si un archivo falta, el navegador cae a la fuente de respaldo.
|
|
4
|
+
*/
|
|
5
|
+
export declare const BrandFonts: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ComponentType, SVGProps } from 'react';
|
|
2
|
+
import type { ICON_LIBRARY } from '../model/presets';
|
|
3
|
+
type IconComponent = ComponentType<SVGProps<SVGSVGElement>>;
|
|
4
|
+
/**
|
|
5
|
+
* Íconos de @strapi/icons que pueden ir dentro de una pieza (lista en model/presets). Solo los que
|
|
6
|
+
* existen también en la versión que resuelve el CMS (2.0.0-rc.18 en web-cms): `Graph` y `TrendUp`
|
|
7
|
+
* no están ahí y rompen el panel.
|
|
8
|
+
*/
|
|
9
|
+
export declare const CONTENT_ICONS: Record<(typeof ICON_LIBRARY)[number], IconComponent>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { Layer } from '../model/types';
|
|
3
|
+
/**
|
|
4
|
+
* Una capa en coordenadas del lienzo (sin escala). Es el único render de capas: lo usan el editor,
|
|
5
|
+
* las miniaturas y la exportación, para que lo que se ve sea lo que se descarga.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LayerView: import("react").MemoExoticComponent<({ layer }: {
|
|
8
|
+
layer: Layer;
|
|
9
|
+
}) => import("react/jsx-runtime").JSX.Element>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Layer, Template } from '../model/types';
|
|
2
|
+
import type { StoredTemplate, TemplateInput } from './templatesApi';
|
|
3
|
+
/** Sube un blob a la carpeta «Templates» de la Media Library y devuelve su id y URL. */
|
|
4
|
+
export type Upload = (blob: Blob, name: string) => Promise<{
|
|
5
|
+
id: number;
|
|
6
|
+
url: string;
|
|
7
|
+
}>;
|
|
8
|
+
/** Solo para pruebas. */
|
|
9
|
+
export declare const forgetUploads: () => void;
|
|
10
|
+
/**
|
|
11
|
+
* Template del editor → contrato del servidor (diseño S4.6, D6). Cada imagen en data URL se sube una
|
|
12
|
+
* sola vez a la Media Library y se reemplaza por su URL y `fileId`; `srcOriginal` se descarta
|
|
13
|
+
* (la imagen previa a quitar el fondo no se conserva). ADR-004: nada de data URLs en el template.
|
|
14
|
+
*/
|
|
15
|
+
export declare const toStored: (template: Template, { name, folder }: {
|
|
16
|
+
name: string;
|
|
17
|
+
folder: string;
|
|
18
|
+
}, upload: Upload) => Promise<TemplateInput>;
|
|
19
|
+
/**
|
|
20
|
+
* Contrato del servidor → capas del editor (diseño S4.6, D7): las imágenes remotas pasan a data URL
|
|
21
|
+
* para que la exportación no contamine el lienzo. Las que fallan quedan con su URL y se cuentan.
|
|
22
|
+
*/
|
|
23
|
+
export declare const toEditable: (layers: Layer[], toDataUrl: (url: string) => Promise<string>) => Promise<{
|
|
24
|
+
layers: Layer[];
|
|
25
|
+
failed: number;
|
|
26
|
+
}>;
|
|
27
|
+
/** «16:9», «4:5»… o «~1.9:1» si la proporción no es simple. */
|
|
28
|
+
export declare const ratioTag: (w: number, h: number) => string;
|
|
29
|
+
export declare const fromStored: (t: StoredTemplate) => Template;
|
|
30
|
+
/**
|
|
31
|
+
* Plantillas base con sus versiones editadas (S4.15): donde hay una editada se usa esa, con la
|
|
32
|
+
* categoría de la base; las demás quedan como en el código.
|
|
33
|
+
*/
|
|
34
|
+
export declare const mergeBases: (bases: Template[], edited: StoredTemplate[]) => Template[];
|
|
35
|
+
/** Tamaños del prototipo para «Crear nuevo lienzo» (diseño S4.6, D9). */
|
|
36
|
+
export declare const SIZE_PRESETS: {
|
|
37
|
+
name: string;
|
|
38
|
+
w: number;
|
|
39
|
+
h: number;
|
|
40
|
+
}[];
|
|
41
|
+
export declare const blankTemplate: (width: number, height: number) => Template;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Layer } from '../model/types';
|
|
2
|
+
export interface TemplateInput {
|
|
3
|
+
name: string;
|
|
4
|
+
folder: string;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
background: string;
|
|
8
|
+
safeMargin: number;
|
|
9
|
+
gridUnit: number;
|
|
10
|
+
layers: Layer[];
|
|
11
|
+
baseId?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface StoredTemplate extends TemplateInput {
|
|
14
|
+
documentId: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
/** Versión editada de esa plantilla base (S4.15). */
|
|
17
|
+
replacesBase?: string;
|
|
18
|
+
}
|
|
19
|
+
type Client = {
|
|
20
|
+
get: (url: string) => Promise<{
|
|
21
|
+
data: unknown;
|
|
22
|
+
}>;
|
|
23
|
+
post: (url: string, body: unknown) => Promise<{
|
|
24
|
+
data: unknown;
|
|
25
|
+
}>;
|
|
26
|
+
put: (url: string, body: unknown) => Promise<{
|
|
27
|
+
data: unknown;
|
|
28
|
+
}>;
|
|
29
|
+
del: (url: string) => Promise<{
|
|
30
|
+
data: unknown;
|
|
31
|
+
}>;
|
|
32
|
+
};
|
|
33
|
+
/** Cliente de las rutas de «Mis templates» (diseño S4.6). */
|
|
34
|
+
export declare const createTemplatesApi: (c: Client) => {
|
|
35
|
+
list: () => Promise<StoredTemplate[]>;
|
|
36
|
+
create: (t: TemplateInput) => Promise<StoredTemplate>;
|
|
37
|
+
update: (documentId: string, patch: Partial<TemplateInput>) => Promise<StoredTemplate>;
|
|
38
|
+
remove: (documentId: string) => Promise<void>;
|
|
39
|
+
/** Guarda la versión editada de una base; la crea la primera vez (S4.15). */
|
|
40
|
+
saveBase: (baseId: string, t: TemplateInput) => Promise<StoredTemplate>;
|
|
41
|
+
/** Vuelve a la versión de InterWare. */
|
|
42
|
+
restoreBase: (baseId: string) => Promise<void>;
|
|
43
|
+
folders: () => Promise<string[]>;
|
|
44
|
+
createFolder: (path: string) => Promise<string[]>;
|
|
45
|
+
renameFolder: (from: string, to: string) => Promise<string[]>;
|
|
46
|
+
deleteFolder: (path: string) => Promise<string[]>;
|
|
47
|
+
};
|
|
48
|
+
export type TemplatesApi = ReturnType<typeof createTemplatesApi>;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Template } from '../model/types';
|
|
2
|
+
import type { StoredTemplate } from './templatesApi';
|
|
3
|
+
/** Estado de «Mis templates» y sus carpetas con las operaciones del selector (diseño S4.6). */
|
|
4
|
+
export declare const useMyTemplates: () => {
|
|
5
|
+
templates: StoredTemplate[];
|
|
6
|
+
editedBases: StoredTemplate[];
|
|
7
|
+
folders: string[];
|
|
8
|
+
loading: boolean;
|
|
9
|
+
reload: () => Promise<void>;
|
|
10
|
+
rename: (t: Template, name: string) => Promise<void>;
|
|
11
|
+
/** Una base se duplica en la raíz; un template propio, en su misma carpeta. */
|
|
12
|
+
duplicate: (t: Template) => Promise<void>;
|
|
13
|
+
move: (t: Template, folder: string) => Promise<void>;
|
|
14
|
+
remove: (t: Template) => Promise<void>;
|
|
15
|
+
restoreBase: (t: Template) => Promise<void>;
|
|
16
|
+
createFolder: (parent: string, name: string) => Promise<void>;
|
|
17
|
+
renameFolder: (path: string, name: string) => Promise<void>;
|
|
18
|
+
deleteFolder: (path: string) => Promise<void>;
|
|
19
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Template } from '../model/types';
|
|
2
|
+
/**
|
|
3
|
+
* Guardar desde el editor (diseño S4.6, D8): crear un template nuevo o actualizar uno propio. Sube
|
|
4
|
+
* antes las imágenes en data URL y notifica el resultado; en error devuelve `null`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const useTemplateSaving: () => {
|
|
7
|
+
saveNew: (template: Template, target: {
|
|
8
|
+
name: string;
|
|
9
|
+
folder: string;
|
|
10
|
+
}) => Promise<Template | null>;
|
|
11
|
+
saveExisting: (template: Template) => Promise<Template | null>;
|
|
12
|
+
saveBase: (template: Template) => Promise<Template | null>;
|
|
13
|
+
folders: () => Promise<string[]>;
|
|
14
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Upload } from './persist';
|
|
2
|
+
/**
|
|
3
|
+
* Cliente de «Mis templates» conectado al panel, más la subida de imágenes a la carpeta «Templates»
|
|
4
|
+
* (diseño S4.6, D6). Como la biblioteca tiene raíz en «Generated», queda en «Generated/Templates»
|
|
5
|
+
* (S4.11). La carpeta se busca o se crea una vez por sesión del hook.
|
|
6
|
+
*/
|
|
7
|
+
export declare const useTemplatesApi: () => {
|
|
8
|
+
api: {
|
|
9
|
+
list: () => Promise<import("./templatesApi").StoredTemplate[]>;
|
|
10
|
+
create: (t: import("./templatesApi").TemplateInput) => Promise<import("./templatesApi").StoredTemplate>;
|
|
11
|
+
update: (documentId: string, patch: Partial<import("./templatesApi").TemplateInput>) => Promise<import("./templatesApi").StoredTemplate>;
|
|
12
|
+
remove: (documentId: string) => Promise<void>;
|
|
13
|
+
saveBase: (baseId: string, t: import("./templatesApi").TemplateInput) => Promise<import("./templatesApi").StoredTemplate>;
|
|
14
|
+
restoreBase: (baseId: string) => Promise<void>;
|
|
15
|
+
folders: () => Promise<string[]>;
|
|
16
|
+
createFolder: (path: string) => Promise<string[]>;
|
|
17
|
+
renameFolder: (from: string, to: string) => Promise<string[]>;
|
|
18
|
+
deleteFolder: (path: string) => Promise<string[]>;
|
|
19
|
+
};
|
|
20
|
+
upload: Upload;
|
|
21
|
+
toDataUrl: (url: string) => Promise<string>;
|
|
22
|
+
notify: (type: 'success' | 'danger' | 'warning', message: string) => void;
|
|
23
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type Scheme = 'light' | 'dark';
|
|
2
|
+
/**
|
|
3
|
+
* Tema del panel de Strapi para el `DesignSystemProvider` propio del plugin (S4.10). Sin esto el
|
|
4
|
+
* plugin se pintaba siempre claro aunque el panel estuviera en oscuro. Con «system» sigue los
|
|
5
|
+
* cambios del sistema operativo.
|
|
6
|
+
*/
|
|
7
|
+
export declare const useAdminTheme: () => Scheme;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="custom" />
|
|
2
|
+
import { lightTheme } from '@strapi/design-system';
|
|
3
|
+
type Colors = typeof lightTheme.colors;
|
|
4
|
+
/**
|
|
5
|
+
* Colores del tema activo para los snowflakes que pintan con `style` (bordes, reglas, acentos), así
|
|
6
|
+
* se ven bien en el tema claro y en el oscuro (S4.10). Sin proveedor cae al tema claro.
|
|
7
|
+
*/
|
|
8
|
+
export declare const useThemeColors: () => Colors;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Bytes de una data URL, en base64 o codificada como texto (el SVG de html-to-image). */
|
|
2
|
+
export declare const dataUrlToBytes: (dataUrl: string) => Uint8Array;
|
|
3
|
+
/**
|
|
4
|
+
* Blob de una data URL sin `fetch`: la CSP del admin limita `connect-src` y no incluye `data:`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const dataUrlToBlob: (dataUrl: string) => Blob;
|