@peteai/presentation-editor 0.0.2 → 0.0.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 +2 -2
- package/dist/components/presentation-editor/active-layers-buttons.svelte +53 -0
- package/dist/components/presentation-editor/active-layers-buttons.svelte.d.ts +3 -0
- package/dist/components/presentation-editor/active-layers.svelte +181 -0
- package/dist/components/presentation-editor/active-layers.svelte.d.ts +3 -0
- package/dist/components/presentation-editor/color-indicator/color-indicator-gradient-def.svelte +81 -0
- package/dist/components/presentation-editor/color-indicator/color-indicator-gradient-def.svelte.d.ts +9 -0
- package/dist/components/presentation-editor/color-indicator/color-indicator-gradient.svelte +21 -0
- package/dist/components/presentation-editor/color-indicator/color-indicator-gradient.svelte.d.ts +8 -0
- package/dist/components/presentation-editor/color-indicator/color-indicator.svelte +23 -0
- package/dist/components/presentation-editor/color-indicator/color-indicator.svelte.d.ts +6 -0
- package/dist/components/presentation-editor/color-indicator/index.d.ts +4 -0
- package/dist/components/presentation-editor/color-indicator/index.js +6 -0
- package/dist/components/presentation-editor/cursor-tooltip.svelte +1 -1
- package/dist/components/presentation-editor/dragged.svelte +21 -11
- package/dist/components/presentation-editor/fonts.d.ts +3 -0
- package/dist/components/presentation-editor/fonts.js +1278 -0
- package/dist/components/presentation-editor/header.svelte +21 -33
- package/dist/components/presentation-editor/header.svelte.d.ts +16 -6
- package/dist/components/presentation-editor/hotkeys.svelte +85 -0
- package/dist/components/presentation-editor/{sidebar/layers.svelte.d.ts → hotkeys.svelte.d.ts} +3 -3
- package/dist/components/presentation-editor/layers/active-background-border.svelte +3 -7
- package/dist/components/presentation-editor/layers/active-layer-border.svelte +2 -5
- package/dist/components/presentation-editor/layers/active-layer-border.svelte.d.ts +0 -1
- package/dist/components/presentation-editor/layers/buttons/border-button/border-button.svelte +113 -129
- package/dist/components/presentation-editor/layers/buttons/border-button/border-button.svelte.d.ts +2 -2
- package/dist/components/presentation-editor/layers/buttons/corner-radius-button/corner-radius-button.svelte +51 -32
- package/dist/components/presentation-editor/layers/buttons/corner-radius-button/corner-radius-button.svelte.d.ts +2 -2
- package/dist/components/presentation-editor/layers/buttons/flip-button/flip-button.svelte +30 -7
- package/dist/components/presentation-editor/layers/buttons/flip-button/flip-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/buttons/opacity-button/opacity-button.svelte +76 -33
- package/dist/components/presentation-editor/layers/buttons/opacity-button/opacity-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/controls/corner-scale-control/corner-scale-control.svelte +89 -59
- package/dist/components/presentation-editor/layers/controls/corner-scale-control/corner-scale-control.svelte.d.ts +5 -100
- package/dist/components/presentation-editor/layers/controls/group-resize-control/group-resize-control.svelte +337 -0
- package/dist/components/presentation-editor/layers/controls/group-resize-control/group-resize-control.svelte.d.ts +104 -0
- package/dist/components/presentation-editor/layers/controls/group-resize-control/index.d.ts +2 -0
- package/dist/components/presentation-editor/layers/controls/group-resize-control/index.js +4 -0
- package/dist/components/presentation-editor/layers/controls/rotate-control/rotate-control.svelte +128 -43
- package/dist/components/presentation-editor/layers/controls/rotate-control/rotate-control.svelte.d.ts +1 -5
- package/dist/components/presentation-editor/layers/controls/side-resize-control/side-resize-control.svelte +68 -57
- package/dist/components/presentation-editor/layers/controls/side-resize-control/side-resize-control.svelte.d.ts +2 -110
- package/dist/components/presentation-editor/layers/controls/side-scale-control/side-scale-control.svelte +45 -32
- package/dist/components/presentation-editor/layers/controls/side-scale-control/side-scale-control.svelte.d.ts +2 -54
- package/dist/components/presentation-editor/layers/index.d.ts +4 -5
- package/dist/components/presentation-editor/layers/index.js +7 -8
- package/dist/components/presentation-editor/layers/layer-button.svelte +25 -7
- package/dist/components/presentation-editor/layers/layer-wrapper.svelte +212 -162
- package/dist/components/presentation-editor/layers/layer-wrapper.svelte.d.ts +2 -2
- package/dist/components/presentation-editor/layers/types/background/background-content-image.svelte +41 -0
- package/dist/components/presentation-editor/layers/types/background/background-content-image.svelte.d.ts +8 -0
- package/dist/components/presentation-editor/layers/types/background/background-layer-buttons.svelte +28 -74
- package/dist/components/presentation-editor/layers/types/background/background-layer-buttons.svelte.d.ts +2 -17
- package/dist/components/presentation-editor/layers/types/background/background-layer-content.svelte +19 -0
- package/dist/components/presentation-editor/layers/types/background/background-layer-content.svelte.d.ts +8 -0
- package/dist/components/presentation-editor/layers/types/background/background-layer.svelte +69 -61
- package/dist/components/presentation-editor/layers/types/background/background-layer.svelte.d.ts +2 -3
- package/dist/components/presentation-editor/layers/types/background/index.d.ts +2 -3
- package/dist/components/presentation-editor/layers/types/background/index.js +2 -3
- package/dist/components/presentation-editor/layers/types/html/buttons/alignment-button/alignment-button.svelte +55 -12
- package/dist/components/presentation-editor/layers/types/html/buttons/alignment-button/alignment-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/types/html/buttons/bold-button/bold-button.svelte +60 -8
- package/dist/components/presentation-editor/layers/types/html/buttons/bold-button/bold-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/types/html/buttons/case-button/case-button.svelte +59 -24
- package/dist/components/presentation-editor/layers/types/html/buttons/case-button/case-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/types/html/buttons/color-button/color-button.svelte +27 -76
- package/dist/components/presentation-editor/layers/types/html/buttons/color-button/color-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/types/html/buttons/font-family-button/font-family-button.svelte +36 -0
- package/dist/components/presentation-editor/layers/types/html/buttons/font-family-button/font-family-button.svelte.d.ts +7 -0
- package/dist/components/presentation-editor/layers/types/html/buttons/font-family-button/index.d.ts +2 -0
- package/dist/components/presentation-editor/layers/types/html/buttons/font-family-button/index.js +2 -0
- package/dist/components/presentation-editor/layers/types/html/buttons/font-size-button/font-size-button.svelte +72 -29
- package/dist/components/presentation-editor/layers/types/html/buttons/font-size-button/font-size-button.svelte.d.ts +3 -5
- package/dist/components/presentation-editor/layers/types/html/buttons/italic-button/italic-button.svelte +60 -8
- package/dist/components/presentation-editor/layers/types/html/buttons/italic-button/italic-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/types/html/buttons/list-button/list-button.svelte +71 -18
- package/dist/components/presentation-editor/layers/types/html/buttons/list-button/list-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/types/html/buttons/strikethrough-button/strikethrough-button.svelte +54 -8
- package/dist/components/presentation-editor/layers/types/html/buttons/strikethrough-button/strikethrough-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/types/html/buttons/underline-button/underline-button.svelte +54 -9
- package/dist/components/presentation-editor/layers/types/html/buttons/underline-button/underline-button.svelte.d.ts +3 -3
- package/dist/components/presentation-editor/layers/types/html/editor/createEditor.js +2 -2
- package/dist/components/presentation-editor/layers/types/html/editor/utils.d.ts +11 -0
- package/dist/components/presentation-editor/layers/types/html/editor/utils.js +88 -0
- package/dist/components/presentation-editor/layers/types/html/extensions/font-family/font-family.d.ts +27 -0
- package/dist/components/presentation-editor/layers/types/html/extensions/font-family/font-family.js +40 -0
- package/dist/components/presentation-editor/layers/types/html/extensions/font-family/index.d.ts +3 -0
- package/dist/components/presentation-editor/layers/types/html/extensions/font-family/index.js +3 -0
- package/dist/components/presentation-editor/layers/types/html/extensions/font-size/font-size.d.ts +5 -1
- package/dist/components/presentation-editor/layers/types/html/extensions/font-size/font-size.js +3 -7
- package/dist/components/presentation-editor/layers/types/html/extensions.d.ts +1 -0
- package/dist/components/presentation-editor/layers/types/html/extensions.js +56 -0
- package/dist/components/presentation-editor/layers/types/html/html-content.svelte +26 -5
- package/dist/components/presentation-editor/layers/types/html/html-layer-content.svelte +26 -0
- package/dist/components/presentation-editor/layers/types/html/html-layer-content.svelte.d.ts +9 -0
- package/dist/components/presentation-editor/layers/types/html/html-layer-edit.svelte +103 -0
- package/dist/components/presentation-editor/layers/types/html/html-layer-edit.svelte.d.ts +8 -0
- package/dist/components/presentation-editor/layers/types/html/html-layer.svelte +61 -53
- package/dist/components/presentation-editor/layers/types/html/index.d.ts +3 -5
- package/dist/components/presentation-editor/layers/types/html/index.js +3 -56
- package/dist/components/presentation-editor/layers/types/image/{image-content.svelte → image-layer-content.svelte} +11 -3
- package/dist/components/presentation-editor/layers/types/image/image-layer-content.svelte.d.ts +8 -0
- package/dist/components/presentation-editor/layers/types/image/image-layer.svelte +51 -21
- package/dist/components/presentation-editor/layers/types/image/index.d.ts +2 -4
- package/dist/components/presentation-editor/layers/types/image/index.js +2 -4
- package/dist/components/presentation-editor/layers/utils.d.ts +68 -9
- package/dist/components/presentation-editor/layers/utils.js +260 -25
- package/dist/components/presentation-editor/menu/background-menu-content.svelte +80 -0
- package/dist/components/presentation-editor/menu/background-menu-content.svelte.d.ts +9 -0
- package/dist/components/presentation-editor/menu/layer-menu-content.svelte +183 -0
- package/dist/components/presentation-editor/menu/layer-menu-content.svelte.d.ts +3 -0
- package/dist/components/presentation-editor/menu/slide-menu-content.svelte +67 -0
- package/dist/components/presentation-editor/menu/slide-menu-content.svelte.d.ts +9 -0
- package/dist/components/presentation-editor/presentation-editor.svelte +119 -175
- package/dist/components/presentation-editor/presentation-editor.svelte.js +597 -136
- package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar-color.svelte +58 -0
- package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar-color.svelte.d.ts +10 -0
- package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar-gradient-picker.svelte +144 -0
- package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar-gradient-picker.svelte.d.ts +7 -0
- package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar.svelte +404 -0
- package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar.svelte.d.ts +3 -0
- package/dist/components/presentation-editor/sidebar/color-sidebar/index.d.ts +2 -0
- package/dist/components/presentation-editor/sidebar/color-sidebar/index.js +2 -0
- package/dist/components/presentation-editor/sidebar/font-sidebar/font-sidebar-button.svelte +26 -0
- package/dist/components/presentation-editor/sidebar/font-sidebar/font-sidebar-button.svelte.d.ts +8 -0
- package/dist/components/presentation-editor/sidebar/font-sidebar/font-sidebar.svelte +216 -0
- package/dist/components/presentation-editor/sidebar/font-sidebar/font-sidebar.svelte.d.ts +3 -0
- package/dist/components/presentation-editor/sidebar/font-sidebar/index.d.ts +2 -0
- package/dist/components/presentation-editor/sidebar/font-sidebar/index.js +2 -0
- package/dist/components/presentation-editor/sidebar/position-slidebar.svelte +130 -0
- package/dist/components/presentation-editor/sidebar/position-slidebar.svelte.d.ts +18 -0
- package/dist/components/presentation-editor/sidebar/sidebar-text-tab-button.svelte +90 -0
- package/dist/components/presentation-editor/sidebar/sidebar-text-tab-button.svelte.d.ts +7 -0
- package/dist/components/presentation-editor/sidebar/sidebar-text-tab.svelte +82 -0
- package/dist/components/presentation-editor/sidebar/sidebar-text-tab.svelte.d.ts +18 -0
- package/dist/components/presentation-editor/sidebar/{images-library.svelte → sidebar-uploads-tab.svelte} +0 -1
- package/dist/components/presentation-editor/sidebar/sidebar-uploads-tab.svelte.d.ts +3 -0
- package/dist/components/presentation-editor/sidebar/sidebar-wrapper.svelte +25 -0
- package/dist/components/presentation-editor/sidebar/sidebar-wrapper.svelte.d.ts +7 -0
- package/dist/components/presentation-editor/sidebar/sidebar.svelte +71 -15
- package/dist/components/presentation-editor/sidebar/sidebar.svelte.d.ts +16 -5
- package/dist/components/presentation-editor/sidebar/uploads-image.svelte +28 -11
- package/dist/components/presentation-editor/slide-editor.svelte +20 -22
- package/dist/components/presentation-editor/slide-inner.svelte +19 -18
- package/dist/components/presentation-editor/slides-navigation/slide-preview.svelte +61 -52
- package/dist/components/presentation-editor/slides-navigation/slides-navigation.svelte +6 -8
- package/dist/components/presentation-editor/snapping-guides.svelte +3 -3
- package/dist/components/presentation-editor/types.d.ts +67 -27
- package/dist/components/presentation-editor/utils.d.ts +50 -1
- package/dist/components/presentation-editor/utils.js +101 -6
- package/dist/components/ui/button/button.svelte +3 -2
- package/dist/components/ui/button/button.svelte.d.ts +5 -82
- package/dist/components/ui/color-picker/color-picker-alpha-grid.svelte +43 -0
- package/dist/components/ui/color-picker/color-picker-alpha-grid.svelte.d.ts +8 -0
- package/dist/components/ui/color-picker/color-picker.svelte +344 -0
- package/dist/components/ui/color-picker/color-picker.svelte.d.ts +13 -0
- package/dist/components/ui/color-picker/index.d.ts +3 -0
- package/dist/components/ui/color-picker/index.js +5 -0
- package/dist/components/ui/context-menu/context-menu-shortcut.svelte +6 -3
- package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +6 -3
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
- package/dist/components/ui/infinite-loader/index.d.ts +4 -0
- package/dist/components/ui/infinite-loader/index.js +4 -0
- package/dist/components/ui/infinite-loader/infinite-loader-loop-tracker.d.ts +13 -0
- package/dist/components/ui/infinite-loader/infinite-loader-loop-tracker.js +44 -0
- package/dist/components/ui/infinite-loader/infinite-loader-state.svelte.d.ts +15 -0
- package/dist/components/ui/infinite-loader/infinite-loader-state.svelte.js +28 -0
- package/dist/components/ui/infinite-loader/infinite-loader.svelte +149 -0
- package/dist/components/ui/infinite-loader/infinite-loader.svelte.d.ts +17 -0
- package/dist/components/ui/input/input.svelte +1 -1
- package/dist/components/ui/slider/slider.svelte +20 -18
- package/dist/components/ui/tabs/index.d.ts +6 -0
- package/dist/components/ui/tabs/index.js +8 -0
- package/dist/components/ui/tabs/tabs-content.svelte +19 -0
- package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-list.svelte +19 -0
- package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte +19 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/toggle/toggle.svelte +3 -2
- package/dist/components/ui/toggle/toggle.svelte.d.ts +2 -46
- package/dist/plugin.js +3 -2
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +1 -0
- package/package.json +28 -25
- package/dist/components/presentation-editor/app.css +0 -12
- package/dist/components/presentation-editor/layers/hovered-layer.svelte +0 -34
- package/dist/components/presentation-editor/layers/hovered-layer.svelte.d.ts +0 -7
- package/dist/components/presentation-editor/layers/types/background/background-content.svelte +0 -11
- package/dist/components/presentation-editor/layers/types/background/background-content.svelte.d.ts +0 -7
- package/dist/components/presentation-editor/layers/types/background/background-layer-thumb.svelte +0 -12
- package/dist/components/presentation-editor/layers/types/background/background-layer-thumb.svelte.d.ts +0 -7
- package/dist/components/presentation-editor/layers/types/html/html-layer-active.svelte +0 -159
- package/dist/components/presentation-editor/layers/types/html/html-layer-active.svelte.d.ts +0 -8
- package/dist/components/presentation-editor/layers/types/html/html-layer-buttons.svelte +0 -42
- package/dist/components/presentation-editor/layers/types/html/html-layer-buttons.svelte.d.ts +0 -10
- package/dist/components/presentation-editor/layers/types/html/html-layer-thumb.svelte +0 -24
- package/dist/components/presentation-editor/layers/types/html/html-layer-thumb.svelte.d.ts +0 -8
- package/dist/components/presentation-editor/layers/types/image/image-content.svelte.d.ts +0 -8
- package/dist/components/presentation-editor/layers/types/image/image-layer-buttons.svelte +0 -21
- package/dist/components/presentation-editor/layers/types/image/image-layer-buttons.svelte.d.ts +0 -7
- package/dist/components/presentation-editor/layers/types/image/image-layer-thumb.svelte +0 -13
- package/dist/components/presentation-editor/layers/types/image/image-layer-thumb.svelte.d.ts +0 -8
- package/dist/components/presentation-editor/sidebar/images-library.svelte.d.ts +0 -3
- package/dist/components/presentation-editor/sidebar/layers.svelte +0 -94
- package/dist/components/presentation-editor/slides-navigation/buttons/slide-delete-button.svelte +0 -32
- package/dist/components/presentation-editor/slides-navigation/buttons/slide-delete-button.svelte.d.ts +0 -10
- package/dist/components/presentation-editor/slides-navigation/buttons/slide-duplicate-button.svelte +0 -34
- package/dist/components/presentation-editor/slides-navigation/buttons/slide-duplicate-button.svelte.d.ts +0 -10
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { tick, untrack } from 'svelte';
|
|
3
|
-
import type { HtmlLayer } from '../../../types.js';
|
|
4
|
-
import { getPresentationEditorContext } from '../../../presentation-editor.svelte.js';
|
|
5
|
-
import { createEditor, EditorContent } from './editor/index.js';
|
|
6
|
-
import { extensions } from './index.js';
|
|
7
|
-
import { calculateNewPosition } from '../../utils.js';
|
|
8
|
-
import { SideScaleControl } from '../../controls/side-scale-control/index.js';
|
|
9
|
-
import { CornerScaleControl } from '../../controls/corner-scale-control/index.js';
|
|
10
|
-
import { RotateControl } from '../../controls/rotate-control/index.js';
|
|
11
|
-
import { createDebouncedCallback } from '../../../../../utils.js';
|
|
12
|
-
|
|
13
|
-
import './editor.css';
|
|
14
|
-
|
|
15
|
-
interface Props {
|
|
16
|
-
layer: HtmlLayer;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
let { layer = $bindable() }: Props = $props();
|
|
20
|
-
|
|
21
|
-
const editorState = getPresentationEditorContext();
|
|
22
|
-
|
|
23
|
-
let scaleAndZoom = $derived((layer.scale || 1) * editorState.zoom);
|
|
24
|
-
let rotate = $derived(layer.rotate || 0);
|
|
25
|
-
|
|
26
|
-
let undo: object | null = null;
|
|
27
|
-
let currentLayer: HtmlLayer | null = $state(layer);
|
|
28
|
-
let currentHtml: object | undefined = layer.html;
|
|
29
|
-
|
|
30
|
-
const updateContent = (reset: boolean = true) => {
|
|
31
|
-
if (reset) {
|
|
32
|
-
$editor.chain().setContent(layer.html).selectAll().run();
|
|
33
|
-
} else {
|
|
34
|
-
console.log('html changed');
|
|
35
|
-
if (editorState.activeAction?.type === 'edit') {
|
|
36
|
-
if (layer.html !== currentHtml) {
|
|
37
|
-
$editor.chain().setContent(layer.html).focus().run();
|
|
38
|
-
}
|
|
39
|
-
} else {
|
|
40
|
-
$editor.chain().setContent(layer.html).selectAll().run();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
currentHtml = layer.html;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const debouncedUpdates = createDebouncedCallback((e, action) => {
|
|
47
|
-
console.log('debouncedUpdates', action);
|
|
48
|
-
editorState.historyPush(action);
|
|
49
|
-
undo = null;
|
|
50
|
-
}, 750);
|
|
51
|
-
|
|
52
|
-
console.log('create editor');
|
|
53
|
-
const editor = createEditor({
|
|
54
|
-
content: layer.html,
|
|
55
|
-
extensions,
|
|
56
|
-
injectCSS: false,
|
|
57
|
-
editorProps: { attributes: { class: 'whitespace-pre-wrap focus:outline-none' } },
|
|
58
|
-
onUpdate: async (e) => {
|
|
59
|
-
if (!undo) {
|
|
60
|
-
undo = { html: currentHtml, x: layer.x, y: layer.y, height: layer.height };
|
|
61
|
-
}
|
|
62
|
-
layer.html = e.editor.getJSON();
|
|
63
|
-
currentHtml = layer.html;
|
|
64
|
-
await tick();
|
|
65
|
-
|
|
66
|
-
const { x, y, width, height } = layer;
|
|
67
|
-
const scale = layer.scale || 1;
|
|
68
|
-
const rotate = layer.rotate || 0;
|
|
69
|
-
const layerContent = document.getElementById(`layer-content-${layer.id}`);
|
|
70
|
-
if (layerContent) {
|
|
71
|
-
const contentHeight = layerContent.offsetHeight;
|
|
72
|
-
if (contentHeight !== height) {
|
|
73
|
-
const newHeight = contentHeight * scale;
|
|
74
|
-
|
|
75
|
-
const { newX, newY } = calculateNewPosition(
|
|
76
|
-
`top-left`,
|
|
77
|
-
{ x, y, width: width * scale, height: height * scale, rotate },
|
|
78
|
-
width * scale,
|
|
79
|
-
newHeight,
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
const newValues = { x: newX, y: newY, height: newHeight / scale };
|
|
83
|
-
Object.assign(layer, newValues);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
const action = {
|
|
87
|
-
type: 'layer',
|
|
88
|
-
layer: { id: layer.id, type: layer.type },
|
|
89
|
-
undo: undo,
|
|
90
|
-
redo: { html: e.editor.getJSON(), x: layer.x, y: layer.y, height: layer.height },
|
|
91
|
-
};
|
|
92
|
-
debouncedUpdates(e, action);
|
|
93
|
-
},
|
|
94
|
-
onDestroy: () => {
|
|
95
|
-
console.log('destroy editor');
|
|
96
|
-
editorState.htmlEditor = null;
|
|
97
|
-
},
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
editorState.htmlEditor = editor;
|
|
101
|
-
updateContent();
|
|
102
|
-
|
|
103
|
-
$effect(() => {
|
|
104
|
-
if (currentLayer !== layer) {
|
|
105
|
-
console.log('layer changed');
|
|
106
|
-
currentLayer = layer;
|
|
107
|
-
updateContent();
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
// update html when it changes by history undo/redo
|
|
112
|
-
$effect(() => {
|
|
113
|
-
if (layer.html !== untrack(() => currentHtml)) {
|
|
114
|
-
updateContent(false);
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
</script>
|
|
118
|
-
|
|
119
|
-
{#if editorState.activeAction?.type === 'edit'}
|
|
120
|
-
<div
|
|
121
|
-
class="absolute origin-top-left select-none"
|
|
122
|
-
hidden={editorState.activeAction?.type !== 'edit'}
|
|
123
|
-
>
|
|
124
|
-
<div
|
|
125
|
-
class="pointer-events-auto select-text"
|
|
126
|
-
style:width={`${layer.width * scaleAndZoom}px`}
|
|
127
|
-
style:height={`${layer.height * scaleAndZoom}px`}
|
|
128
|
-
style:transform={`translate(${layer.x * editorState.zoom}px, ${layer.y * editorState.zoom}px) rotate(${rotate}deg)`}
|
|
129
|
-
>
|
|
130
|
-
<div
|
|
131
|
-
class="origin-top-left"
|
|
132
|
-
style:width="{layer.width}px"
|
|
133
|
-
style:height="{layer.height}px"
|
|
134
|
-
style:transform={`scale(${scaleAndZoom})`}
|
|
135
|
-
>
|
|
136
|
-
<EditorContent editor={$editor} />
|
|
137
|
-
</div>
|
|
138
|
-
</div>
|
|
139
|
-
</div>
|
|
140
|
-
{/if}
|
|
141
|
-
|
|
142
|
-
<div
|
|
143
|
-
class="pointer-events-none absolute left-0 top-0 h-full w-full"
|
|
144
|
-
style:width={`${layer.width * scaleAndZoom}px`}
|
|
145
|
-
style:height={`${layer.height * scaleAndZoom}px`}
|
|
146
|
-
style:transform={`translate(${layer.x * editorState.zoom}px, ${layer.y * editorState.zoom}px) rotate(${rotate}deg)`}
|
|
147
|
-
>
|
|
148
|
-
<div class="h-full w-full outline-none transition-opacity duration-300">
|
|
149
|
-
<div class="flex h-full w-full items-center justify-center">
|
|
150
|
-
<SideScaleControl origin="left" bind:layer />
|
|
151
|
-
<SideScaleControl origin="right" bind:layer />
|
|
152
|
-
<CornerScaleControl origin="bottom-right" bind:layer />
|
|
153
|
-
<CornerScaleControl origin="bottom-left" bind:layer />
|
|
154
|
-
<CornerScaleControl origin="top-right" bind:layer />
|
|
155
|
-
<CornerScaleControl origin="top-left" bind:layer />
|
|
156
|
-
<RotateControl bind:layer />
|
|
157
|
-
</div>
|
|
158
|
-
</div>
|
|
159
|
-
</div>
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { HtmlLayer } from '../../../types.js';
|
|
2
|
-
import './editor.css';
|
|
3
|
-
interface Props {
|
|
4
|
-
layer: HtmlLayer;
|
|
5
|
-
}
|
|
6
|
-
declare const HtmlLayerActive: import("svelte").Component<Props, {}, "layer">;
|
|
7
|
-
type HtmlLayerActive = ReturnType<typeof HtmlLayerActive>;
|
|
8
|
-
export default HtmlLayerActive;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Readable } from 'svelte/store';
|
|
3
|
-
import type { HtmlLayer } from '../../../types.js';
|
|
4
|
-
import { Separator } from '../../../../ui/separator/index.js';
|
|
5
|
-
import { FontSizeButton } from './buttons/font-size-button/index.js';
|
|
6
|
-
import { ColorButton } from './buttons/color-button/index.js';
|
|
7
|
-
import { BoldButton } from './buttons/bold-button/index.js';
|
|
8
|
-
import { ItalicButton } from './buttons/italic-button/index.js';
|
|
9
|
-
import { UnderlineButton } from './buttons/underline-button/index.js';
|
|
10
|
-
import { StrikethroughButton } from './buttons/strikethrough-button/index.js';
|
|
11
|
-
import { CaseButton } from './buttons/case-button/index.js';
|
|
12
|
-
import { AlignmentButton } from './buttons/alignment-button/index.js';
|
|
13
|
-
import { ListButton } from './buttons/list-button/index.js';
|
|
14
|
-
import { OpacityButton } from '../../buttons/opacity-button/index.js';
|
|
15
|
-
import type { Editor } from './editor/Editor.js';
|
|
16
|
-
|
|
17
|
-
interface Props {
|
|
18
|
-
htmlEditor: Readable<Editor>;
|
|
19
|
-
layer: HtmlLayer;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
let { htmlEditor, layer = $bindable() }: Props = $props();
|
|
23
|
-
</script>
|
|
24
|
-
|
|
25
|
-
{#if $htmlEditor}
|
|
26
|
-
<FontSizeButton {layer} editor={$htmlEditor} />
|
|
27
|
-
<ColorButton editor={$htmlEditor} />
|
|
28
|
-
<div class="grid grid-flow-col items-center gap-0.5">
|
|
29
|
-
<BoldButton editor={$htmlEditor} />
|
|
30
|
-
<ItalicButton editor={$htmlEditor} />
|
|
31
|
-
<UnderlineButton editor={$htmlEditor} />
|
|
32
|
-
<StrikethroughButton editor={$htmlEditor} />
|
|
33
|
-
<CaseButton editor={$htmlEditor} />
|
|
34
|
-
</div>
|
|
35
|
-
<Separator orientation="vertical" />
|
|
36
|
-
<div class="grid grid-flow-col items-center gap-0.5">
|
|
37
|
-
<AlignmentButton editor={$htmlEditor} />
|
|
38
|
-
<ListButton editor={$htmlEditor} />
|
|
39
|
-
</div>
|
|
40
|
-
<Separator orientation="vertical" />
|
|
41
|
-
<OpacityButton bind:layer />
|
|
42
|
-
{/if}
|
package/dist/components/presentation-editor/layers/types/html/html-layer-buttons.svelte.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Readable } from 'svelte/store';
|
|
2
|
-
import type { HtmlLayer } from '../../../types.js';
|
|
3
|
-
import type { Editor } from './editor/Editor.js';
|
|
4
|
-
interface Props {
|
|
5
|
-
htmlEditor: Readable<Editor>;
|
|
6
|
-
layer: HtmlLayer;
|
|
7
|
-
}
|
|
8
|
-
declare const HtmlLayerButtons: import("svelte").Component<Props, {}, "layer">;
|
|
9
|
-
type HtmlLayerButtons = ReturnType<typeof HtmlLayerButtons>;
|
|
10
|
-
export default HtmlLayerButtons;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { HtmlLayer } from '../../../types.js';
|
|
3
|
-
import { HtmlContent } from './index.js';
|
|
4
|
-
|
|
5
|
-
interface Props {
|
|
6
|
-
layer: HtmlLayer;
|
|
7
|
-
thumbScale: number;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
let { layer, thumbScale }: Props = $props();
|
|
11
|
-
</script>
|
|
12
|
-
|
|
13
|
-
<div
|
|
14
|
-
class="h-full origin-top-left"
|
|
15
|
-
style:width="{layer.width}px"
|
|
16
|
-
style:height="{layer.height}px"
|
|
17
|
-
style:transform={`scale(${thumbScale * (layer.scale || 1)})`}
|
|
18
|
-
>
|
|
19
|
-
<div
|
|
20
|
-
class="whitespace-pre-wrap break-words p-0 text-left text-base font-normal normal-case not-italic text-black"
|
|
21
|
-
>
|
|
22
|
-
<HtmlContent html={layer.html} />
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { HtmlLayer } from '../../../types.js';
|
|
2
|
-
interface Props {
|
|
3
|
-
layer: HtmlLayer;
|
|
4
|
-
thumbScale: number;
|
|
5
|
-
}
|
|
6
|
-
declare const HtmlLayerThumb: import("svelte").Component<Props, {}, "">;
|
|
7
|
-
type HtmlLayerThumb = ReturnType<typeof HtmlLayerThumb>;
|
|
8
|
-
export default HtmlLayerThumb;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ImageLayer } from '../../../types.js';
|
|
2
|
-
interface Props {
|
|
3
|
-
layer: ImageLayer;
|
|
4
|
-
thumbScale?: number;
|
|
5
|
-
}
|
|
6
|
-
declare const ImageContent: import("svelte").Component<Props, {}, "layer">;
|
|
7
|
-
type ImageContent = ReturnType<typeof ImageContent>;
|
|
8
|
-
export default ImageContent;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { ImageLayer } from '../../../types.js';
|
|
3
|
-
import { Separator } from '../../../../ui/separator/index.js';
|
|
4
|
-
import { BorderButton } from '../../buttons/border-button/index.js';
|
|
5
|
-
import { CornerRadiusButton } from '../../buttons/corner-radius-button/index.js';
|
|
6
|
-
import { FlipButton } from '../../buttons/flip-button/index.js';
|
|
7
|
-
import { OpacityButton } from '../../buttons/opacity-button/index.js';
|
|
8
|
-
|
|
9
|
-
interface Props {
|
|
10
|
-
layer: ImageLayer;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
let { layer = $bindable() }: Props = $props();
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<BorderButton bind:layer />
|
|
17
|
-
<CornerRadiusButton bind:layer />
|
|
18
|
-
<Separator orientation="vertical" />
|
|
19
|
-
<FlipButton bind:layer />
|
|
20
|
-
<Separator orientation="vertical" />
|
|
21
|
-
<OpacityButton bind:layer />
|
package/dist/components/presentation-editor/layers/types/image/image-layer-buttons.svelte.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ImageLayer } from '../../../types.js';
|
|
2
|
-
interface Props {
|
|
3
|
-
layer: ImageLayer;
|
|
4
|
-
}
|
|
5
|
-
declare const ImageLayerButtons: import("svelte").Component<Props, {}, "layer">;
|
|
6
|
-
type ImageLayerButtons = ReturnType<typeof ImageLayerButtons>;
|
|
7
|
-
export default ImageLayerButtons;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { ImageLayer } from '../../../types.js';
|
|
3
|
-
import ImageLayerContent from './image-content.svelte';
|
|
4
|
-
|
|
5
|
-
interface Props {
|
|
6
|
-
layer: ImageLayer;
|
|
7
|
-
thumbScale: number;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
let { layer, thumbScale }: Props = $props();
|
|
11
|
-
</script>
|
|
12
|
-
|
|
13
|
-
<ImageLayerContent {layer} {thumbScale} />
|
package/dist/components/presentation-editor/layers/types/image/image-layer-thumb.svelte.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ImageLayer } from '../../../types.js';
|
|
2
|
-
interface Props {
|
|
3
|
-
layer: ImageLayer;
|
|
4
|
-
thumbScale: number;
|
|
5
|
-
}
|
|
6
|
-
declare const ImageLayerThumb: import("svelte").Component<Props, {}, "">;
|
|
7
|
-
type ImageLayerThumb = ReturnType<typeof ImageLayerThumb>;
|
|
8
|
-
export default ImageLayerThumb;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { flip } from 'svelte/animate';
|
|
3
|
-
import { dndzone } from 'svelte-dnd-action';
|
|
4
|
-
import {
|
|
5
|
-
LayerButton,
|
|
6
|
-
LayerThumbWrapper,
|
|
7
|
-
BackgroundLayerThumb,
|
|
8
|
-
HtmlLayerThumb,
|
|
9
|
-
ImageLayerThumb,
|
|
10
|
-
} from '../layers/index.js';
|
|
11
|
-
import { getPresentationEditorContext } from '../presentation-editor.svelte.js';
|
|
12
|
-
|
|
13
|
-
const editor = getPresentationEditorContext();
|
|
14
|
-
|
|
15
|
-
const flipDurationMs = 300;
|
|
16
|
-
const otherOptions = { flipDurationMs, type: 'layers', dropTargetStyle: {} };
|
|
17
|
-
|
|
18
|
-
function handleDndConsider(e) {
|
|
19
|
-
editor.activeSlide.layers = e.detail.items;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
async function handleDndFinalize(e) {
|
|
23
|
-
console.log('handleDndFinalize', e);
|
|
24
|
-
|
|
25
|
-
editor.activeSlide.layers = e.detail.items;
|
|
26
|
-
|
|
27
|
-
const index = e.detail.items.findIndex((item) => item.id === e.detail.info.id);
|
|
28
|
-
const item = e.detail.items[index];
|
|
29
|
-
|
|
30
|
-
let redo;
|
|
31
|
-
const prev = e.detail.items[index - 1];
|
|
32
|
-
const next = e.detail.items[index + 1];
|
|
33
|
-
if (prev && next) {
|
|
34
|
-
if (!(prev.sortOrder < item.sortOrder && next.sortOrder > item.sortOrder)) {
|
|
35
|
-
redo = { sortOrder: (prev.sortOrder + next.sortOrder) / 2 };
|
|
36
|
-
}
|
|
37
|
-
} else if (next) {
|
|
38
|
-
if (next && next.sortOrder <= item.sortOrder) {
|
|
39
|
-
redo = { sortOrder: next.sortOrder - 1 };
|
|
40
|
-
}
|
|
41
|
-
} else if (prev) {
|
|
42
|
-
if (prev && prev.sortOrder >= item.sortOrder) {
|
|
43
|
-
redo = { sortOrder: prev.sortOrder + 1 };
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (redo) {
|
|
48
|
-
editor.historyPush({
|
|
49
|
-
type: 'layer',
|
|
50
|
-
layer: { id: item.id, type: item.type },
|
|
51
|
-
undo: { sortOrder: item.sortOrder },
|
|
52
|
-
redo,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
</script>
|
|
57
|
-
|
|
58
|
-
<div class="flex flex-col gap-2">
|
|
59
|
-
<div class="text-xl font-medium text-gray-500">Layers</div>
|
|
60
|
-
<div class="flex-1 resize-none overflow-y-auto">
|
|
61
|
-
<div class="flex flex-col gap-2">
|
|
62
|
-
<section
|
|
63
|
-
class="flex flex-col-reverse gap-2"
|
|
64
|
-
aria-label="Layers"
|
|
65
|
-
use:dndzone={{ items: editor.activeSlide.layers, ...otherOptions }}
|
|
66
|
-
onconsider={handleDndConsider}
|
|
67
|
-
onfinalize={handleDndFinalize}
|
|
68
|
-
>
|
|
69
|
-
{#each editor.activeSlide.layers as layer (layer.id)}
|
|
70
|
-
<div aria-label={layer.type} animate:flip={{ duration: flipDurationMs }}>
|
|
71
|
-
<LayerButton {layer}>
|
|
72
|
-
<LayerThumbWrapper {layer} thumb={{ width: 192, height: 32 }}>
|
|
73
|
-
{#snippet children({ thumbScale })}
|
|
74
|
-
{#if layer.type === 'html'}
|
|
75
|
-
<HtmlLayerThumb {layer} {thumbScale} />
|
|
76
|
-
{:else if layer.type === 'image'}
|
|
77
|
-
<ImageLayerThumb {layer} {thumbScale} />
|
|
78
|
-
{/if}
|
|
79
|
-
{/snippet}
|
|
80
|
-
</LayerThumbWrapper>
|
|
81
|
-
</LayerButton>
|
|
82
|
-
</div>
|
|
83
|
-
{/each}
|
|
84
|
-
</section>
|
|
85
|
-
<LayerButton>
|
|
86
|
-
<div class="absolute top-1/2 h-28 w-48 -translate-y-1/2">
|
|
87
|
-
<div class="h-full w-full">
|
|
88
|
-
<BackgroundLayerThumb slide={editor.activeSlide} />
|
|
89
|
-
</div>
|
|
90
|
-
</div>
|
|
91
|
-
</LayerButton>
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
</div>
|
package/dist/components/presentation-editor/slides-navigation/buttons/slide-delete-button.svelte
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import TrashIcon from 'lucide-svelte/icons/trash-2';
|
|
3
|
-
import type { PresentationEditor } from '../../presentation-editor.svelte.js';
|
|
4
|
-
import * as ContextMenu from '../../../ui/context-menu/index.js';
|
|
5
|
-
import * as DropdownMenu from '../../../ui/dropdown-menu/index.js';
|
|
6
|
-
import type { Slide } from '../../types.js';
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
editor: PresentationEditor;
|
|
10
|
-
slide: Slide;
|
|
11
|
-
context?: boolean;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
let { editor, slide, context }: Props = $props();
|
|
15
|
-
|
|
16
|
-
const ItemComponent = context ? ContextMenu.Item : DropdownMenu.Item;
|
|
17
|
-
const ShortcutComponent = context ? ContextMenu.Shortcut : DropdownMenu.Shortcut;
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
<ItemComponent onclick={() => editor.removeSlide(slide)}>
|
|
21
|
-
<div class="flex items-center">
|
|
22
|
-
<TrashIcon class="text-foreground-alt mr-2 size-5" />
|
|
23
|
-
Delete Page
|
|
24
|
-
</div>
|
|
25
|
-
<ShortcutComponent>
|
|
26
|
-
<kbd
|
|
27
|
-
class="bg-muted text-muted-foreground inline-flex items-center justify-center rounded-sm px-2 py-1 text-xs"
|
|
28
|
-
>
|
|
29
|
-
DELETE
|
|
30
|
-
</kbd>
|
|
31
|
-
</ShortcutComponent>
|
|
32
|
-
</ItemComponent>
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { PresentationEditor } from '../../presentation-editor.svelte.js';
|
|
2
|
-
import type { Slide } from '../../types.js';
|
|
3
|
-
interface Props {
|
|
4
|
-
editor: PresentationEditor;
|
|
5
|
-
slide: Slide;
|
|
6
|
-
context?: boolean;
|
|
7
|
-
}
|
|
8
|
-
declare const SlideDeleteButton: import("svelte").Component<Props, {}, "">;
|
|
9
|
-
type SlideDeleteButton = ReturnType<typeof SlideDeleteButton>;
|
|
10
|
-
export default SlideDeleteButton;
|
package/dist/components/presentation-editor/slides-navigation/buttons/slide-duplicate-button.svelte
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import DuplicateIcon from 'lucide-svelte/icons/copy-plus';
|
|
3
|
-
import type { PresentationEditor } from '../../presentation-editor.svelte.js';
|
|
4
|
-
import * as ContextMenu from '../../../ui/context-menu/index.js';
|
|
5
|
-
import * as DropdownMenu from '../../../ui/dropdown-menu/index.js';
|
|
6
|
-
import type { Slide } from '../../types.js';
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
editor: PresentationEditor;
|
|
10
|
-
slide: Slide;
|
|
11
|
-
context?: boolean;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
let { editor, slide, context }: Props = $props();
|
|
15
|
-
|
|
16
|
-
const ItemComponent = context ? ContextMenu.Item : DropdownMenu.Item;
|
|
17
|
-
const ShortcutComponent = context ? ContextMenu.Shortcut : DropdownMenu.Shortcut;
|
|
18
|
-
|
|
19
|
-
const isMac = /Mac OS X/.test(navigator.userAgent);
|
|
20
|
-
</script>
|
|
21
|
-
|
|
22
|
-
<ItemComponent onclick={() => editor.duplicateSlide(slide)}>
|
|
23
|
-
<div class="flex items-center">
|
|
24
|
-
<DuplicateIcon class="text-foreground-alt mr-2 size-5" />
|
|
25
|
-
Duplicate Page
|
|
26
|
-
</div>
|
|
27
|
-
<ShortcutComponent>
|
|
28
|
-
<kbd
|
|
29
|
-
class="bg-muted text-muted-foreground inline-flex items-center justify-center rounded-sm px-2 py-1 text-xs"
|
|
30
|
-
>
|
|
31
|
-
{isMac ? '⌘D' : 'Ctrl+D'}
|
|
32
|
-
</kbd>
|
|
33
|
-
</ShortcutComponent>
|
|
34
|
-
</ItemComponent>
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { PresentationEditor } from '../../presentation-editor.svelte.js';
|
|
2
|
-
import type { Slide } from '../../types.js';
|
|
3
|
-
interface Props {
|
|
4
|
-
editor: PresentationEditor;
|
|
5
|
-
slide: Slide;
|
|
6
|
-
context?: boolean;
|
|
7
|
-
}
|
|
8
|
-
declare const SlideDuplicateButton: import("svelte").Component<Props, {}, "">;
|
|
9
|
-
type SlideDuplicateButton = ReturnType<typeof SlideDuplicateButton>;
|
|
10
|
-
export default SlideDuplicateButton;
|