@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,20 +1,76 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import type { Icon as LucideIcon } from 'lucide-svelte';
|
|
3
|
+
import TextIcon from 'lucide-svelte/icons/type';
|
|
4
|
+
import UploadIcon from 'lucide-svelte/icons/cloud-upload';
|
|
5
|
+
import Button from '../../ui/button/button.svelte';
|
|
6
|
+
import SidebarTextTab from './sidebar-text-tab.svelte';
|
|
7
|
+
import SidebarUploadsTab from './sidebar-uploads-tab.svelte';
|
|
8
|
+
import { getPresentationEditorContext } from '../presentation-editor.svelte.js';
|
|
9
|
+
import type { ActiveSidebarTab } from '../types.js';
|
|
10
|
+
import PositionSlidebar from './position-slidebar.svelte';
|
|
11
|
+
import { ColorSidebar } from './color-sidebar/index.js';
|
|
12
|
+
import { FontSidebar } from './font-sidebar/index.js';
|
|
5
13
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
14
|
+
const editor = getPresentationEditorContext();
|
|
15
|
+
|
|
16
|
+
const tabs: { id: ActiveSidebarTab; name: string; icon: typeof LucideIcon }[] = [
|
|
17
|
+
// {
|
|
18
|
+
// name: 'Template',
|
|
19
|
+
// icon: <LayoutIcon />,
|
|
20
|
+
// },
|
|
21
|
+
{
|
|
22
|
+
id: 'text',
|
|
23
|
+
name: 'Text',
|
|
24
|
+
icon: TextIcon,
|
|
25
|
+
},
|
|
26
|
+
// {
|
|
27
|
+
// name: 'Image',
|
|
28
|
+
// icon: <ImageIcon />,
|
|
29
|
+
// },
|
|
30
|
+
// {
|
|
31
|
+
// name: 'Shape',
|
|
32
|
+
// icon: <ElementsIcon />,
|
|
33
|
+
// },
|
|
34
|
+
// {
|
|
35
|
+
// name: 'Frame',
|
|
36
|
+
// icon: <FrameIcon />,
|
|
37
|
+
// },
|
|
38
|
+
{
|
|
39
|
+
id: 'uploads',
|
|
40
|
+
name: 'Uploads',
|
|
41
|
+
icon: UploadIcon,
|
|
42
|
+
},
|
|
43
|
+
];
|
|
10
44
|
</script>
|
|
11
45
|
|
|
12
|
-
|
|
13
|
-
<div class="
|
|
14
|
-
{#
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
46
|
+
<div class="flex">
|
|
47
|
+
<div class="flex h-full flex-col gap-1 overflow-y-auto border-r border-gray-200 p-1">
|
|
48
|
+
{#each tabs as tab}
|
|
49
|
+
<Button
|
|
50
|
+
variant="ghost"
|
|
51
|
+
class="flex h-16 w-16 flex-col gap-1 text-xs"
|
|
52
|
+
onclick={() => editor.toggleActiveSidebarTab(tab.id)}
|
|
53
|
+
active={!editor.activeSidebarPopup && editor.activeSidebarTab === tab.id}
|
|
54
|
+
>
|
|
55
|
+
<tab.icon />
|
|
56
|
+
{tab.name}
|
|
57
|
+
</Button>
|
|
58
|
+
{/each}
|
|
19
59
|
</div>
|
|
20
|
-
|
|
60
|
+
|
|
61
|
+
{#if editor.activeSidebarPopup || editor.activeSidebarTab}
|
|
62
|
+
<div class="bg-background h-full w-80 shrink-0 overflow-y-auto border-r border-gray-200 p-2">
|
|
63
|
+
{#if editor.activeSidebarPopup === 'position'}
|
|
64
|
+
<PositionSlidebar />
|
|
65
|
+
{:else if editor.activeSidebarPopup === 'font'}
|
|
66
|
+
<FontSidebar />
|
|
67
|
+
{:else if editor.activeSidebarPopup}
|
|
68
|
+
<ColorSidebar />
|
|
69
|
+
{:else if editor.activeSidebarTab === 'text'}
|
|
70
|
+
<SidebarTextTab />
|
|
71
|
+
{:else if editor.activeSidebarTab === 'uploads'}
|
|
72
|
+
<SidebarUploadsTab />
|
|
73
|
+
{/if}
|
|
74
|
+
</div>
|
|
75
|
+
{/if}
|
|
76
|
+
</div>
|
|
@@ -1,7 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
4
13
|
}
|
|
5
|
-
declare const Sidebar:
|
|
6
|
-
|
|
14
|
+
declare const Sidebar: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type Sidebar = InstanceType<typeof Sidebar>;
|
|
7
18
|
export default Sidebar;
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { getPresentationEditorContext } from '../presentation-editor.svelte.js';
|
|
3
|
-
import { generateId } from '../../../utils.js';
|
|
4
3
|
|
|
5
4
|
let { image } = $props();
|
|
6
5
|
|
|
7
6
|
const editor = getPresentationEditorContext();
|
|
8
7
|
|
|
9
|
-
const
|
|
8
|
+
const height = 80;
|
|
9
|
+
const initialScale = height / image.height;
|
|
10
|
+
|
|
11
|
+
let dragging = $state(false);
|
|
10
12
|
|
|
11
13
|
const onDocumentDragEnter = (e: DragEvent) => {
|
|
12
14
|
console.log('document dragenter', e);
|
|
13
15
|
if (editor.dragged) {
|
|
14
|
-
editor.dragged = {
|
|
16
|
+
editor.dragged = {
|
|
17
|
+
...editor.dragged,
|
|
18
|
+
hidden: false,
|
|
19
|
+
inside: false,
|
|
20
|
+
sticky: true,
|
|
21
|
+
customScale: null,
|
|
22
|
+
};
|
|
15
23
|
}
|
|
16
24
|
};
|
|
17
25
|
|
|
@@ -20,25 +28,28 @@
|
|
|
20
28
|
return null;
|
|
21
29
|
}
|
|
22
30
|
|
|
23
|
-
console.log('dragstart', e, $state.snapshot(image));
|
|
24
31
|
e.dataTransfer.effectAllowed = 'move';
|
|
25
32
|
editor.dragged = {
|
|
26
|
-
id,
|
|
27
33
|
hidden: false,
|
|
28
34
|
sticky: true,
|
|
29
35
|
image,
|
|
36
|
+
opacity: 0.5,
|
|
37
|
+
inside: false,
|
|
38
|
+
scale: Math.min(editor.getMaxScale(image), 1),
|
|
30
39
|
x: e.clientX,
|
|
31
40
|
y: e.clientY,
|
|
32
41
|
offsetX: e.offsetX,
|
|
33
42
|
offsetY: e.offsetY,
|
|
34
|
-
initialScale
|
|
43
|
+
initialScale,
|
|
35
44
|
};
|
|
36
45
|
addEventListener('dragenter', onDocumentDragEnter);
|
|
46
|
+
dragging = true;
|
|
37
47
|
};
|
|
38
48
|
|
|
39
49
|
const onDragEnd = (e: DragEvent) => {
|
|
40
50
|
console.log('dragend', e);
|
|
41
|
-
removeEventListener('
|
|
51
|
+
removeEventListener('dragenter', onDocumentDragEnter);
|
|
52
|
+
dragging = false;
|
|
42
53
|
editor.dragged = null;
|
|
43
54
|
};
|
|
44
55
|
|
|
@@ -49,16 +60,22 @@
|
|
|
49
60
|
editor.dragged = { ...dragged, x: e.clientX, y: e.clientY };
|
|
50
61
|
}
|
|
51
62
|
};
|
|
63
|
+
|
|
64
|
+
const createLayer = () => {
|
|
65
|
+
editor.addLayers(editor.activeSlide.id, editor.buildImageLayer({ image }));
|
|
66
|
+
};
|
|
52
67
|
</script>
|
|
53
68
|
|
|
54
69
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
55
|
-
<
|
|
56
|
-
class="m-1 inline-block
|
|
70
|
+
<button
|
|
71
|
+
class="m-1 inline-block"
|
|
72
|
+
style:height="{height}px"
|
|
73
|
+
onclick={createLayer}
|
|
57
74
|
draggable={true}
|
|
58
75
|
ondragstart={onDragStart}
|
|
59
76
|
ondragend={onDragEnd}
|
|
60
77
|
ondrag={onDrag}
|
|
61
|
-
style:opacity={
|
|
78
|
+
style:opacity={dragging ? 0 : null}
|
|
62
79
|
>
|
|
63
80
|
<img src={image.src} alt="" crossorigin="anonymous" class="h-full" draggable={false} />
|
|
64
|
-
</
|
|
81
|
+
</button>
|
|
@@ -3,19 +3,17 @@
|
|
|
3
3
|
import { cn } from '../../utils.js';
|
|
4
4
|
import {
|
|
5
5
|
ActiveLayerBorder,
|
|
6
|
-
HoveredLayer,
|
|
7
6
|
LayerWrapper,
|
|
8
7
|
BackgroundLayer,
|
|
9
8
|
HtmlLayer,
|
|
10
9
|
ImageLayer,
|
|
11
|
-
HtmlLayerActive,
|
|
12
|
-
ImageLayerActive,
|
|
13
10
|
ActiveBackgroundBorder,
|
|
14
11
|
} from './layers/index.js';
|
|
15
|
-
import type { ActiveLayerGuide
|
|
16
|
-
import SnappingGuides from './snapping-guides.svelte';
|
|
17
|
-
import SlideInner from './slide-inner.svelte';
|
|
12
|
+
import type { ActiveLayerGuide } from './types.js';
|
|
18
13
|
import { getPresentationEditorContext } from './presentation-editor.svelte.js';
|
|
14
|
+
import SlideInner from './slide-inner.svelte';
|
|
15
|
+
import ActiveLayers from './active-layers.svelte';
|
|
16
|
+
import SnappingGuides from './snapping-guides.svelte';
|
|
19
17
|
|
|
20
18
|
interface Props {
|
|
21
19
|
viewportRef: HTMLDivElement | null;
|
|
@@ -28,7 +26,7 @@
|
|
|
28
26
|
|
|
29
27
|
let activeLayerGuides: ActiveLayerGuide[] = $state([]);
|
|
30
28
|
|
|
31
|
-
let
|
|
29
|
+
let hoveredLayerId: string | null = $state(null);
|
|
32
30
|
|
|
33
31
|
let scaledWidth = $derived(editor.width * editor.zoom);
|
|
34
32
|
let scaledHeight = $derived(editor.height * editor.zoom);
|
|
@@ -36,7 +34,7 @@
|
|
|
36
34
|
|
|
37
35
|
<div class="relative min-h-0 flex-1">
|
|
38
36
|
<ScrollArea orientation="both" class="h-full" bind:viewportRef>
|
|
39
|
-
<div class="
|
|
37
|
+
<div class="flex min-h-full flex-1">
|
|
40
38
|
<div class="box-border flex w-full shrink-0 items-center justify-center p-0">
|
|
41
39
|
<div bind:this={wrapperRef} class="translate-x-0 translate-y-0 p-4 transition-transform">
|
|
42
40
|
<div class="relative flex flex-col items-center" data-slide-container>
|
|
@@ -56,12 +54,12 @@
|
|
|
56
54
|
style:width="{editor.width}px"
|
|
57
55
|
style:height="{editor.height}px"
|
|
58
56
|
>
|
|
59
|
-
<BackgroundLayer bind:
|
|
57
|
+
<BackgroundLayer bind:hoveredLayerId />
|
|
60
58
|
<SlideInner />
|
|
61
59
|
{#each editor.activeSlide.layers as layer, i (layer.id)}
|
|
62
60
|
<LayerWrapper
|
|
63
61
|
bind:layer={editor.activeSlide.layers[i]}
|
|
64
|
-
bind:
|
|
62
|
+
bind:hoveredLayerId
|
|
65
63
|
bind:activeLayerGuides
|
|
66
64
|
>
|
|
67
65
|
{#if editor.activeSlide.layers[i].type === 'html'}
|
|
@@ -75,23 +73,23 @@
|
|
|
75
73
|
</div>
|
|
76
74
|
</div>
|
|
77
75
|
<div
|
|
78
|
-
class="absolute z-10 m-0"
|
|
76
|
+
class="pointer-events-none absolute z-10 m-0"
|
|
79
77
|
style:width="{scaledWidth}px"
|
|
80
78
|
style:height="{scaledHeight}px"
|
|
81
79
|
>
|
|
82
|
-
{#if
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
<HtmlLayerActive bind:layer={editor.activeLayer} />
|
|
91
|
-
{:else if editor.activeLayer.type === 'image'}
|
|
92
|
-
<ImageLayerActive bind:layer={editor.activeLayer} />
|
|
80
|
+
{#if hoveredLayerId === 'background'}
|
|
81
|
+
{#if !editor.activeBackground}
|
|
82
|
+
<ActiveBackgroundBorder />
|
|
83
|
+
{/if}
|
|
84
|
+
{:else if hoveredLayerId && !editor.activeLayerIds.has(hoveredLayerId)}
|
|
85
|
+
{@const layer = editor.activeSlide.layers.find(({ id }) => id === hoveredLayerId)}
|
|
86
|
+
{#if layer}
|
|
87
|
+
<ActiveLayerBorder {layer} />
|
|
93
88
|
{/if}
|
|
94
89
|
{/if}
|
|
90
|
+
|
|
91
|
+
<ActiveLayers />
|
|
92
|
+
|
|
95
93
|
<SnappingGuides zoom={editor.zoom} guides={activeLayerGuides} />
|
|
96
94
|
</div>
|
|
97
95
|
</div>
|
|
@@ -8,44 +8,45 @@
|
|
|
8
8
|
|
|
9
9
|
const onDragEnter = (e: DragEvent) => {
|
|
10
10
|
console.log('dragenter slide inner', e);
|
|
11
|
-
e.preventDefault();
|
|
12
|
-
e.stopPropagation();
|
|
13
11
|
|
|
14
12
|
if (editor.dragged) {
|
|
15
|
-
|
|
13
|
+
e.preventDefault();
|
|
14
|
+
e.stopPropagation();
|
|
15
|
+
editor.dragged = {
|
|
16
|
+
...editor.dragged,
|
|
17
|
+
hidden: false,
|
|
18
|
+
customScale: null,
|
|
19
|
+
inside: true,
|
|
20
|
+
sticky: true,
|
|
21
|
+
};
|
|
16
22
|
}
|
|
17
23
|
};
|
|
18
24
|
|
|
19
25
|
const onDragOver = (e: DragEvent) => {
|
|
20
26
|
// console.log('dragover slide inner', e);
|
|
21
|
-
|
|
27
|
+
if (editor.dragged) {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
e.stopPropagation();
|
|
30
|
+
}
|
|
22
31
|
};
|
|
23
32
|
|
|
24
33
|
const onDrop = (e: DragEvent) => {
|
|
25
34
|
console.log('drop slide inner', e);
|
|
26
|
-
e.preventDefault();
|
|
27
35
|
|
|
28
36
|
const { dragged } = editor;
|
|
29
37
|
if (dragged) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
image: {
|
|
36
|
-
id: dragged.image.id,
|
|
37
|
-
src: dragged.image.src,
|
|
38
|
-
width: dragged.image.width,
|
|
39
|
-
height: dragged.image.height,
|
|
40
|
-
},
|
|
41
|
-
});
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
e.stopPropagation();
|
|
40
|
+
const x = e.offsetX - dragged.offsetX / editor.zoom + inset;
|
|
41
|
+
const y = e.offsetY - dragged.offsetY / editor.zoom + inset;
|
|
42
|
+
editor.dropDragged(x, y);
|
|
42
43
|
}
|
|
43
44
|
};
|
|
44
45
|
</script>
|
|
45
46
|
|
|
46
47
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
47
48
|
<div
|
|
48
|
-
class={cn('absolute', { 'pointer-events-
|
|
49
|
+
class={cn('absolute', { 'pointer-events-none': !editor.dragged })}
|
|
49
50
|
style:inset="{inset}px"
|
|
50
51
|
ondragenter={onDragEnter}
|
|
51
52
|
ondragover={onDragOver}
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
import { dragHandle } from 'svelte-dnd-action';
|
|
3
3
|
import PlusIcon from 'lucide-svelte/icons/plus';
|
|
4
4
|
import EllipsisIcon from 'lucide-svelte/icons/ellipsis';
|
|
5
|
+
import IconLocked from 'lucide-svelte/icons/lock-keyhole';
|
|
5
6
|
import { Button, buttonVariants } from '../../ui/button/index.js';
|
|
6
7
|
import * as ContextMenu from '../../ui/context-menu/index.js';
|
|
7
8
|
import * as DropdownMenu from '../../ui/dropdown-menu/index.js';
|
|
8
9
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
BackgroundLayerContent,
|
|
11
|
+
HtmlLayerContent,
|
|
12
|
+
ImageLayerContent,
|
|
12
13
|
LayerThumbWrapper,
|
|
13
14
|
} from '../layers/index.js';
|
|
14
15
|
import { cn } from '../../../utils.js';
|
|
15
|
-
import SlideDeleteButton from './buttons/slide-delete-button.svelte';
|
|
16
|
-
import SlideDuplicateButton from './buttons/slide-duplicate-button.svelte';
|
|
17
16
|
import type { PresentationEditor } from '../presentation-editor.svelte.js';
|
|
18
17
|
import type { Slide } from '../types.js';
|
|
18
|
+
import SlidePreviewMenuContent from '../menu/slide-menu-content.svelte';
|
|
19
19
|
|
|
20
20
|
interface Props {
|
|
21
21
|
editor: PresentationEditor;
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
let menuOpen = $state(false);
|
|
30
30
|
</script>
|
|
31
31
|
|
|
32
|
-
<div class="flex items-center">
|
|
32
|
+
<div class="relative flex items-center">
|
|
33
33
|
<div class="group h-full">
|
|
34
34
|
<div class="absolute -left-2 top-0 z-20 h-full w-4 group-hover:w-16"></div>
|
|
35
35
|
<div
|
|
@@ -50,62 +50,72 @@
|
|
|
50
50
|
</div>
|
|
51
51
|
</div>
|
|
52
52
|
</div>
|
|
53
|
-
<div
|
|
54
|
-
<
|
|
55
|
-
<
|
|
56
|
-
<ContextMenu.
|
|
57
|
-
<
|
|
58
|
-
class={cn(
|
|
59
|
-
'relative',
|
|
60
|
-
{
|
|
61
|
-
'after:absolute after:inset-0 after:rounded-xl after:border-2':
|
|
62
|
-
editor.activeSlide === slide,
|
|
63
|
-
},
|
|
64
|
-
editor.slideSelected ? 'after:border-purple-500' : 'after:border-gray-400',
|
|
65
|
-
)}
|
|
66
|
-
>
|
|
53
|
+
<div class="group relative mx-2 my-1 transition-transform">
|
|
54
|
+
<div use:dragHandle role="none">
|
|
55
|
+
<button class="block" onclick={() => editor.setActiveSlide(slide.id)}>
|
|
56
|
+
<ContextMenu.Root>
|
|
57
|
+
<ContextMenu.Trigger>
|
|
67
58
|
<div
|
|
68
|
-
class=
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
59
|
+
class={cn(
|
|
60
|
+
'relative',
|
|
61
|
+
{
|
|
62
|
+
'after:absolute after:inset-0 after:rounded-xl after:border-2':
|
|
63
|
+
editor.activeSlide.id === slide.id,
|
|
64
|
+
},
|
|
65
|
+
editor.slideSelected ? 'after:border-primary' : 'after:border-gray-400',
|
|
66
|
+
)}
|
|
74
67
|
>
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
68
|
+
<div
|
|
69
|
+
class="relative overflow-hidden rounded-lg bg-white"
|
|
70
|
+
style:clip-path={editor.activeSlide.id === slide.id
|
|
71
|
+
? 'inset(5px round 8px)'
|
|
72
|
+
: 'inset(0px round 10px)'}
|
|
73
|
+
style:width="{editor.width * thumbScale}px"
|
|
74
|
+
style:height="{editor.height * thumbScale}px"
|
|
75
|
+
>
|
|
76
|
+
<div class="absolute inset-0 overflow-hidden">
|
|
77
|
+
<div class="h-full w-full">
|
|
78
|
+
<BackgroundLayerContent {slide} {thumbScale} />
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
{#each slide.layers as layer (layer.id)}
|
|
82
|
+
<LayerThumbWrapper {layer} thumb={thumbScale}>
|
|
83
|
+
{#snippet children({ thumbScale })}
|
|
84
|
+
{#if layer.type === 'html'}
|
|
85
|
+
<HtmlLayerContent {layer} {thumbScale} />
|
|
86
|
+
{:else if layer.type === 'image'}
|
|
87
|
+
<ImageLayerContent {layer} {thumbScale} />
|
|
88
|
+
{/if}
|
|
89
|
+
{/snippet}
|
|
90
|
+
</LayerThumbWrapper>
|
|
91
|
+
{/each}
|
|
92
|
+
</div>
|
|
87
93
|
</div>
|
|
88
|
-
</
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
</button>
|
|
94
|
+
</ContextMenu.Trigger>
|
|
95
|
+
<ContextMenu.Content class="w-72">
|
|
96
|
+
<SlidePreviewMenuContent {editor} {slide} />
|
|
97
|
+
</ContextMenu.Content>
|
|
98
|
+
</ContextMenu.Root>
|
|
99
|
+
</button>
|
|
100
|
+
</div>
|
|
96
101
|
<div
|
|
97
102
|
class={cn(
|
|
98
103
|
'pointer-events-none absolute z-10 flex flex-col-reverse flex-wrap overflow-hidden',
|
|
99
104
|
)}
|
|
100
|
-
style:inset={editor.activeSlide === slide ? '5px' : '0'}
|
|
101
|
-
style:border-radius={editor.activeSlide === slide ? '8px' : '10px'}
|
|
105
|
+
style:inset={editor.activeSlide.id === slide.id ? '5px' : '0'}
|
|
106
|
+
style:border-radius={editor.activeSlide.id === slide.id ? '8px' : '10px'}
|
|
102
107
|
>
|
|
103
108
|
<div
|
|
104
|
-
class="flex h-8 min-h-5 w-
|
|
109
|
+
class="flex h-8 min-h-5 w-fit max-w-full items-end overflow-hidden rounded-bl-md rounded-br-md"
|
|
105
110
|
style:background={`radial-gradient(100% 120% at 0% 120%, rgba(255, 255, 255, 0.8) 55%, rgba(0, 0, 0, 0))`}
|
|
106
111
|
>
|
|
107
112
|
<div class="relative flex h-5 items-center px-2">
|
|
113
|
+
{#if slide.locked}
|
|
114
|
+
<IconLocked class="mr-1 size-4" />
|
|
115
|
+
{/if}
|
|
108
116
|
<p class="text-xs font-semibold">{index + 1}</p>
|
|
117
|
+
<p class="mx-0.5"></p>
|
|
118
|
+
<div class="pointer-events-auto flex h-full min-w-2"></div>
|
|
109
119
|
</div>
|
|
110
120
|
</div>
|
|
111
121
|
</div>
|
|
@@ -124,9 +134,8 @@
|
|
|
124
134
|
<EllipsisIcon />
|
|
125
135
|
</DropdownMenu.Trigger>
|
|
126
136
|
|
|
127
|
-
<DropdownMenu.Content side="top" align="start"
|
|
128
|
-
<
|
|
129
|
-
<SlideDeleteButton {editor} {slide} />
|
|
137
|
+
<DropdownMenu.Content class="w-72" side="top" align="start" trapFocus={false}>
|
|
138
|
+
<SlidePreviewMenuContent {editor} {slide} />
|
|
130
139
|
</DropdownMenu.Content>
|
|
131
140
|
</DropdownMenu.Root>
|
|
132
141
|
</div>
|
|
@@ -50,14 +50,12 @@
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
if (redo) {
|
|
53
|
-
editor.historyPush(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
item.id,
|
|
60
|
-
);
|
|
53
|
+
editor.historyPush({
|
|
54
|
+
type: 'slide',
|
|
55
|
+
slideId: item.id,
|
|
56
|
+
undo: { sortOrder: item.sortOrder },
|
|
57
|
+
redo,
|
|
58
|
+
});
|
|
61
59
|
}
|
|
62
60
|
}
|
|
63
61
|
</script>
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
<div class="absolute h-full w-full">
|
|
14
14
|
{#each guides as guide (guide.id)}
|
|
15
15
|
{#if guide.type === 'box'}
|
|
16
|
-
<div class="absolute border
|
|
16
|
+
<div class="border-primary absolute border" style:inset="{guide.inset * zoom}px"></div>
|
|
17
17
|
{:else if guide.type === 'vertical'}
|
|
18
18
|
<div
|
|
19
19
|
class={cn(
|
|
20
|
-
'absolute h-full border-l
|
|
20
|
+
'border-primary absolute h-full border-l',
|
|
21
21
|
guide.style === 'dashed' && 'border-dashed',
|
|
22
22
|
guide.style === 'dotted' && 'border-dotted',
|
|
23
23
|
)}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
{:else if guide.type === 'horizontal'}
|
|
29
29
|
<div
|
|
30
30
|
class={cn(
|
|
31
|
-
'absolute w-full border-t
|
|
31
|
+
'border-primary absolute w-full border-t',
|
|
32
32
|
guide.style === 'dashed' && 'border-dashed',
|
|
33
33
|
guide.style === 'dotted' && 'border-dotted',
|
|
34
34
|
)}
|