@peteai/presentation-editor 0.0.2 → 0.0.3

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.
Files changed (211) hide show
  1. package/README.md +2 -2
  2. package/dist/components/presentation-editor/active-layers-buttons.svelte +53 -0
  3. package/dist/components/presentation-editor/active-layers-buttons.svelte.d.ts +3 -0
  4. package/dist/components/presentation-editor/active-layers.svelte +181 -0
  5. package/dist/components/presentation-editor/active-layers.svelte.d.ts +3 -0
  6. package/dist/components/presentation-editor/color-indicator/color-indicator-gradient-def.svelte +81 -0
  7. package/dist/components/presentation-editor/color-indicator/color-indicator-gradient-def.svelte.d.ts +9 -0
  8. package/dist/components/presentation-editor/color-indicator/color-indicator-gradient.svelte +21 -0
  9. package/dist/components/presentation-editor/color-indicator/color-indicator-gradient.svelte.d.ts +8 -0
  10. package/dist/components/presentation-editor/color-indicator/color-indicator.svelte +23 -0
  11. package/dist/components/presentation-editor/color-indicator/color-indicator.svelte.d.ts +6 -0
  12. package/dist/components/presentation-editor/color-indicator/index.d.ts +4 -0
  13. package/dist/components/presentation-editor/color-indicator/index.js +6 -0
  14. package/dist/components/presentation-editor/cursor-tooltip.svelte +1 -1
  15. package/dist/components/presentation-editor/dragged.svelte +21 -11
  16. package/dist/components/presentation-editor/fonts.d.ts +3 -0
  17. package/dist/components/presentation-editor/fonts.js +1278 -0
  18. package/dist/components/presentation-editor/header.svelte +21 -33
  19. package/dist/components/presentation-editor/header.svelte.d.ts +16 -6
  20. package/dist/components/presentation-editor/hotkeys.svelte +85 -0
  21. package/dist/components/presentation-editor/{sidebar/layers.svelte.d.ts → hotkeys.svelte.d.ts} +3 -3
  22. package/dist/components/presentation-editor/layers/active-background-border.svelte +3 -7
  23. package/dist/components/presentation-editor/layers/active-layer-border.svelte +2 -5
  24. package/dist/components/presentation-editor/layers/active-layer-border.svelte.d.ts +0 -1
  25. package/dist/components/presentation-editor/layers/buttons/border-button/border-button.svelte +113 -129
  26. package/dist/components/presentation-editor/layers/buttons/border-button/border-button.svelte.d.ts +2 -2
  27. package/dist/components/presentation-editor/layers/buttons/corner-radius-button/corner-radius-button.svelte +51 -32
  28. package/dist/components/presentation-editor/layers/buttons/corner-radius-button/corner-radius-button.svelte.d.ts +2 -2
  29. package/dist/components/presentation-editor/layers/buttons/flip-button/flip-button.svelte +30 -7
  30. package/dist/components/presentation-editor/layers/buttons/flip-button/flip-button.svelte.d.ts +3 -3
  31. package/dist/components/presentation-editor/layers/buttons/opacity-button/opacity-button.svelte +76 -33
  32. package/dist/components/presentation-editor/layers/buttons/opacity-button/opacity-button.svelte.d.ts +3 -3
  33. package/dist/components/presentation-editor/layers/controls/corner-scale-control/corner-scale-control.svelte +89 -59
  34. package/dist/components/presentation-editor/layers/controls/corner-scale-control/corner-scale-control.svelte.d.ts +5 -100
  35. package/dist/components/presentation-editor/layers/controls/group-resize-control/group-resize-control.svelte +337 -0
  36. package/dist/components/presentation-editor/layers/controls/group-resize-control/group-resize-control.svelte.d.ts +104 -0
  37. package/dist/components/presentation-editor/layers/controls/group-resize-control/index.d.ts +2 -0
  38. package/dist/components/presentation-editor/layers/controls/group-resize-control/index.js +4 -0
  39. package/dist/components/presentation-editor/layers/controls/rotate-control/rotate-control.svelte +128 -43
  40. package/dist/components/presentation-editor/layers/controls/rotate-control/rotate-control.svelte.d.ts +1 -5
  41. package/dist/components/presentation-editor/layers/controls/side-resize-control/side-resize-control.svelte +68 -57
  42. package/dist/components/presentation-editor/layers/controls/side-resize-control/side-resize-control.svelte.d.ts +2 -110
  43. package/dist/components/presentation-editor/layers/controls/side-scale-control/side-scale-control.svelte +45 -32
  44. package/dist/components/presentation-editor/layers/controls/side-scale-control/side-scale-control.svelte.d.ts +2 -54
  45. package/dist/components/presentation-editor/layers/index.d.ts +4 -5
  46. package/dist/components/presentation-editor/layers/index.js +7 -8
  47. package/dist/components/presentation-editor/layers/layer-button.svelte +25 -7
  48. package/dist/components/presentation-editor/layers/layer-wrapper.svelte +212 -162
  49. package/dist/components/presentation-editor/layers/layer-wrapper.svelte.d.ts +2 -2
  50. package/dist/components/presentation-editor/layers/types/background/background-content-image.svelte +41 -0
  51. package/dist/components/presentation-editor/layers/types/background/background-content-image.svelte.d.ts +8 -0
  52. package/dist/components/presentation-editor/layers/types/background/background-layer-buttons.svelte +28 -74
  53. package/dist/components/presentation-editor/layers/types/background/background-layer-buttons.svelte.d.ts +2 -17
  54. package/dist/components/presentation-editor/layers/types/background/background-layer-content.svelte +19 -0
  55. package/dist/components/presentation-editor/layers/types/background/background-layer-content.svelte.d.ts +8 -0
  56. package/dist/components/presentation-editor/layers/types/background/background-layer.svelte +69 -61
  57. package/dist/components/presentation-editor/layers/types/background/background-layer.svelte.d.ts +2 -3
  58. package/dist/components/presentation-editor/layers/types/background/index.d.ts +2 -3
  59. package/dist/components/presentation-editor/layers/types/background/index.js +2 -3
  60. package/dist/components/presentation-editor/layers/types/html/buttons/alignment-button/alignment-button.svelte +55 -12
  61. package/dist/components/presentation-editor/layers/types/html/buttons/alignment-button/alignment-button.svelte.d.ts +3 -3
  62. package/dist/components/presentation-editor/layers/types/html/buttons/bold-button/bold-button.svelte +60 -8
  63. package/dist/components/presentation-editor/layers/types/html/buttons/bold-button/bold-button.svelte.d.ts +3 -3
  64. package/dist/components/presentation-editor/layers/types/html/buttons/case-button/case-button.svelte +59 -24
  65. package/dist/components/presentation-editor/layers/types/html/buttons/case-button/case-button.svelte.d.ts +3 -3
  66. package/dist/components/presentation-editor/layers/types/html/buttons/color-button/color-button.svelte +27 -76
  67. package/dist/components/presentation-editor/layers/types/html/buttons/color-button/color-button.svelte.d.ts +3 -3
  68. package/dist/components/presentation-editor/layers/types/html/buttons/font-family-button/font-family-button.svelte +36 -0
  69. package/dist/components/presentation-editor/layers/types/html/buttons/font-family-button/font-family-button.svelte.d.ts +7 -0
  70. package/dist/components/presentation-editor/layers/types/html/buttons/font-family-button/index.d.ts +2 -0
  71. package/dist/components/presentation-editor/layers/types/html/buttons/font-family-button/index.js +2 -0
  72. package/dist/components/presentation-editor/layers/types/html/buttons/font-size-button/font-size-button.svelte +72 -29
  73. package/dist/components/presentation-editor/layers/types/html/buttons/font-size-button/font-size-button.svelte.d.ts +3 -5
  74. package/dist/components/presentation-editor/layers/types/html/buttons/italic-button/italic-button.svelte +60 -8
  75. package/dist/components/presentation-editor/layers/types/html/buttons/italic-button/italic-button.svelte.d.ts +3 -3
  76. package/dist/components/presentation-editor/layers/types/html/buttons/list-button/list-button.svelte +71 -18
  77. package/dist/components/presentation-editor/layers/types/html/buttons/list-button/list-button.svelte.d.ts +3 -3
  78. package/dist/components/presentation-editor/layers/types/html/buttons/strikethrough-button/strikethrough-button.svelte +54 -8
  79. package/dist/components/presentation-editor/layers/types/html/buttons/strikethrough-button/strikethrough-button.svelte.d.ts +3 -3
  80. package/dist/components/presentation-editor/layers/types/html/buttons/underline-button/underline-button.svelte +54 -9
  81. package/dist/components/presentation-editor/layers/types/html/buttons/underline-button/underline-button.svelte.d.ts +3 -3
  82. package/dist/components/presentation-editor/layers/types/html/editor/createEditor.js +2 -2
  83. package/dist/components/presentation-editor/layers/types/html/editor/utils.d.ts +11 -0
  84. package/dist/components/presentation-editor/layers/types/html/editor/utils.js +88 -0
  85. package/dist/components/presentation-editor/layers/types/html/extensions/font-family/font-family.d.ts +27 -0
  86. package/dist/components/presentation-editor/layers/types/html/extensions/font-family/font-family.js +40 -0
  87. package/dist/components/presentation-editor/layers/types/html/extensions/font-family/index.d.ts +3 -0
  88. package/dist/components/presentation-editor/layers/types/html/extensions/font-family/index.js +3 -0
  89. package/dist/components/presentation-editor/layers/types/html/extensions/font-size/font-size.d.ts +5 -1
  90. package/dist/components/presentation-editor/layers/types/html/extensions/font-size/font-size.js +3 -7
  91. package/dist/components/presentation-editor/layers/types/html/extensions.d.ts +1 -0
  92. package/dist/components/presentation-editor/layers/types/html/extensions.js +56 -0
  93. package/dist/components/presentation-editor/layers/types/html/html-content.svelte +26 -5
  94. package/dist/components/presentation-editor/layers/types/html/html-layer-content.svelte +26 -0
  95. package/dist/components/presentation-editor/layers/types/html/html-layer-content.svelte.d.ts +9 -0
  96. package/dist/components/presentation-editor/layers/types/html/html-layer-edit.svelte +103 -0
  97. package/dist/components/presentation-editor/layers/types/html/html-layer-edit.svelte.d.ts +8 -0
  98. package/dist/components/presentation-editor/layers/types/html/html-layer.svelte +61 -53
  99. package/dist/components/presentation-editor/layers/types/html/index.d.ts +3 -5
  100. package/dist/components/presentation-editor/layers/types/html/index.js +3 -56
  101. package/dist/components/presentation-editor/layers/types/image/{image-content.svelte → image-layer-content.svelte} +11 -3
  102. package/dist/components/presentation-editor/layers/types/image/image-layer-content.svelte.d.ts +8 -0
  103. package/dist/components/presentation-editor/layers/types/image/image-layer.svelte +51 -21
  104. package/dist/components/presentation-editor/layers/types/image/index.d.ts +2 -4
  105. package/dist/components/presentation-editor/layers/types/image/index.js +2 -4
  106. package/dist/components/presentation-editor/layers/utils.d.ts +68 -9
  107. package/dist/components/presentation-editor/layers/utils.js +260 -25
  108. package/dist/components/presentation-editor/menu/background-menu-content.svelte +80 -0
  109. package/dist/components/presentation-editor/menu/background-menu-content.svelte.d.ts +9 -0
  110. package/dist/components/presentation-editor/menu/layer-menu-content.svelte +183 -0
  111. package/dist/components/presentation-editor/menu/layer-menu-content.svelte.d.ts +3 -0
  112. package/dist/components/presentation-editor/menu/slide-menu-content.svelte +67 -0
  113. package/dist/components/presentation-editor/menu/slide-menu-content.svelte.d.ts +9 -0
  114. package/dist/components/presentation-editor/presentation-editor.svelte +119 -175
  115. package/dist/components/presentation-editor/presentation-editor.svelte.js +597 -136
  116. package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar-color.svelte +58 -0
  117. package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar-color.svelte.d.ts +10 -0
  118. package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar-gradient-picker.svelte +144 -0
  119. package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar-gradient-picker.svelte.d.ts +7 -0
  120. package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar.svelte +404 -0
  121. package/dist/components/presentation-editor/sidebar/color-sidebar/color-sidebar.svelte.d.ts +3 -0
  122. package/dist/components/presentation-editor/sidebar/color-sidebar/index.d.ts +2 -0
  123. package/dist/components/presentation-editor/sidebar/color-sidebar/index.js +2 -0
  124. package/dist/components/presentation-editor/sidebar/font-sidebar/font-sidebar-button.svelte +26 -0
  125. package/dist/components/presentation-editor/sidebar/font-sidebar/font-sidebar-button.svelte.d.ts +8 -0
  126. package/dist/components/presentation-editor/sidebar/font-sidebar/font-sidebar.svelte +216 -0
  127. package/dist/components/presentation-editor/sidebar/font-sidebar/font-sidebar.svelte.d.ts +3 -0
  128. package/dist/components/presentation-editor/sidebar/font-sidebar/index.d.ts +2 -0
  129. package/dist/components/presentation-editor/sidebar/font-sidebar/index.js +2 -0
  130. package/dist/components/presentation-editor/sidebar/position-slidebar.svelte +130 -0
  131. package/dist/components/presentation-editor/sidebar/position-slidebar.svelte.d.ts +18 -0
  132. package/dist/components/presentation-editor/sidebar/sidebar-text-tab-button.svelte +90 -0
  133. package/dist/components/presentation-editor/sidebar/sidebar-text-tab-button.svelte.d.ts +7 -0
  134. package/dist/components/presentation-editor/sidebar/sidebar-text-tab.svelte +82 -0
  135. package/dist/components/presentation-editor/sidebar/sidebar-text-tab.svelte.d.ts +18 -0
  136. package/dist/components/presentation-editor/sidebar/{images-library.svelte → sidebar-uploads-tab.svelte} +0 -1
  137. package/dist/components/presentation-editor/sidebar/sidebar-uploads-tab.svelte.d.ts +3 -0
  138. package/dist/components/presentation-editor/sidebar/sidebar-wrapper.svelte +25 -0
  139. package/dist/components/presentation-editor/sidebar/sidebar-wrapper.svelte.d.ts +7 -0
  140. package/dist/components/presentation-editor/sidebar/sidebar.svelte +71 -15
  141. package/dist/components/presentation-editor/sidebar/sidebar.svelte.d.ts +16 -5
  142. package/dist/components/presentation-editor/sidebar/uploads-image.svelte +28 -11
  143. package/dist/components/presentation-editor/slide-editor.svelte +20 -22
  144. package/dist/components/presentation-editor/slide-inner.svelte +19 -18
  145. package/dist/components/presentation-editor/slides-navigation/slide-preview.svelte +61 -52
  146. package/dist/components/presentation-editor/slides-navigation/slides-navigation.svelte +6 -8
  147. package/dist/components/presentation-editor/snapping-guides.svelte +3 -3
  148. package/dist/components/presentation-editor/types.d.ts +67 -27
  149. package/dist/components/presentation-editor/utils.d.ts +50 -1
  150. package/dist/components/presentation-editor/utils.js +101 -6
  151. package/dist/components/ui/button/button.svelte +3 -2
  152. package/dist/components/ui/button/button.svelte.d.ts +5 -82
  153. package/dist/components/ui/color-picker/color-picker-alpha-grid.svelte +43 -0
  154. package/dist/components/ui/color-picker/color-picker-alpha-grid.svelte.d.ts +8 -0
  155. package/dist/components/ui/color-picker/color-picker.svelte +344 -0
  156. package/dist/components/ui/color-picker/color-picker.svelte.d.ts +13 -0
  157. package/dist/components/ui/color-picker/index.d.ts +3 -0
  158. package/dist/components/ui/color-picker/index.js +5 -0
  159. package/dist/components/ui/context-menu/context-menu-shortcut.svelte +6 -3
  160. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +1 -1
  161. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  162. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +6 -3
  163. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  164. package/dist/components/ui/infinite-loader/index.d.ts +4 -0
  165. package/dist/components/ui/infinite-loader/index.js +4 -0
  166. package/dist/components/ui/infinite-loader/infinite-loader-loop-tracker.d.ts +13 -0
  167. package/dist/components/ui/infinite-loader/infinite-loader-loop-tracker.js +44 -0
  168. package/dist/components/ui/infinite-loader/infinite-loader-state.svelte.d.ts +15 -0
  169. package/dist/components/ui/infinite-loader/infinite-loader-state.svelte.js +28 -0
  170. package/dist/components/ui/infinite-loader/infinite-loader.svelte +149 -0
  171. package/dist/components/ui/infinite-loader/infinite-loader.svelte.d.ts +17 -0
  172. package/dist/components/ui/input/input.svelte +1 -1
  173. package/dist/components/ui/slider/slider.svelte +20 -18
  174. package/dist/components/ui/tabs/index.d.ts +6 -0
  175. package/dist/components/ui/tabs/index.js +8 -0
  176. package/dist/components/ui/tabs/tabs-content.svelte +19 -0
  177. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
  178. package/dist/components/ui/tabs/tabs-list.svelte +19 -0
  179. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
  180. package/dist/components/ui/tabs/tabs-trigger.svelte +19 -0
  181. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
  182. package/dist/components/ui/toggle/toggle.svelte +3 -2
  183. package/dist/components/ui/toggle/toggle.svelte.d.ts +2 -46
  184. package/dist/plugin.js +3 -2
  185. package/dist/utils.d.ts +1 -0
  186. package/dist/utils.js +1 -0
  187. package/package.json +28 -25
  188. package/dist/components/presentation-editor/app.css +0 -12
  189. package/dist/components/presentation-editor/layers/hovered-layer.svelte +0 -34
  190. package/dist/components/presentation-editor/layers/hovered-layer.svelte.d.ts +0 -7
  191. package/dist/components/presentation-editor/layers/types/background/background-content.svelte +0 -11
  192. package/dist/components/presentation-editor/layers/types/background/background-content.svelte.d.ts +0 -7
  193. package/dist/components/presentation-editor/layers/types/background/background-layer-thumb.svelte +0 -12
  194. package/dist/components/presentation-editor/layers/types/background/background-layer-thumb.svelte.d.ts +0 -7
  195. package/dist/components/presentation-editor/layers/types/html/html-layer-active.svelte +0 -159
  196. package/dist/components/presentation-editor/layers/types/html/html-layer-active.svelte.d.ts +0 -8
  197. package/dist/components/presentation-editor/layers/types/html/html-layer-buttons.svelte +0 -42
  198. package/dist/components/presentation-editor/layers/types/html/html-layer-buttons.svelte.d.ts +0 -10
  199. package/dist/components/presentation-editor/layers/types/html/html-layer-thumb.svelte +0 -24
  200. package/dist/components/presentation-editor/layers/types/html/html-layer-thumb.svelte.d.ts +0 -8
  201. package/dist/components/presentation-editor/layers/types/image/image-content.svelte.d.ts +0 -8
  202. package/dist/components/presentation-editor/layers/types/image/image-layer-buttons.svelte +0 -21
  203. package/dist/components/presentation-editor/layers/types/image/image-layer-buttons.svelte.d.ts +0 -7
  204. package/dist/components/presentation-editor/layers/types/image/image-layer-thumb.svelte +0 -13
  205. package/dist/components/presentation-editor/layers/types/image/image-layer-thumb.svelte.d.ts +0 -8
  206. package/dist/components/presentation-editor/sidebar/images-library.svelte.d.ts +0 -3
  207. package/dist/components/presentation-editor/sidebar/layers.svelte +0 -94
  208. package/dist/components/presentation-editor/slides-navigation/buttons/slide-delete-button.svelte +0 -32
  209. package/dist/components/presentation-editor/slides-navigation/buttons/slide-delete-button.svelte.d.ts +0 -10
  210. package/dist/components/presentation-editor/slides-navigation/buttons/slide-duplicate-button.svelte +0 -34
  211. package/dist/components/presentation-editor/slides-navigation/buttons/slide-duplicate-button.svelte.d.ts +0 -10
@@ -17,33 +17,7 @@ declare const sideScaleControlVariants: import("tailwind-variants").TVReturnType
17
17
  base: string;
18
18
  handler: string;
19
19
  cursor: string;
20
- }, undefined, import("tailwind-variants/dist/config.js").TVConfig<{
21
- origin: {
22
- right: {
23
- base: string;
24
- handler: string;
25
- cursor: string;
26
- };
27
- left: {
28
- base: string;
29
- handler: string;
30
- cursor: string;
31
- };
32
- };
33
- }, {
34
- origin: {
35
- right: {
36
- base: string;
37
- handler: string;
38
- cursor: string;
39
- };
40
- left: {
41
- base: string;
42
- handler: string;
43
- cursor: string;
44
- };
45
- };
46
- }>, {
20
+ }, undefined, {
47
21
  origin: {
48
22
  right: {
49
23
  base: string;
@@ -77,33 +51,7 @@ declare const sideScaleControlVariants: import("tailwind-variants").TVReturnType
77
51
  base: string;
78
52
  handler: string;
79
53
  cursor: string;
80
- }, undefined, import("tailwind-variants/dist/config.js").TVConfig<{
81
- origin: {
82
- right: {
83
- base: string;
84
- handler: string;
85
- cursor: string;
86
- };
87
- left: {
88
- base: string;
89
- handler: string;
90
- cursor: string;
91
- };
92
- };
93
- }, {
94
- origin: {
95
- right: {
96
- base: string;
97
- handler: string;
98
- cursor: string;
99
- };
100
- left: {
101
- base: string;
102
- handler: string;
103
- cursor: string;
104
- };
105
- };
106
- }>, unknown, unknown, undefined>>;
54
+ }, undefined, unknown, unknown, undefined>>;
107
55
  type Origin = VariantProps<typeof sideScaleControlVariants>['origin'];
108
56
  export interface Props {
109
57
  origin: NonNullable<Origin>;
@@ -1,10 +1,9 @@
1
1
  import LayerButton from './layer-button.svelte';
2
2
  import LayerThumbWrapper from './layer-thumb-wrapper.svelte';
3
3
  import LayerWrapper from './layer-wrapper.svelte';
4
- import HoveredLayer from './hovered-layer.svelte';
5
4
  import ActiveBackgroundBorder from './active-background-border.svelte';
6
5
  import ActiveLayerBorder from './active-layer-border.svelte';
7
- import { BackgroundLayerButtons, BackgroundLayer, BackgroundLayerThumb } from './types/background/index.js';
8
- import { HtmlLayer, HtmlLayerActive, HtmlLayerButtons, HtmlLayerThumb } from './types/html/index.js';
9
- import { ImageLayer, ImageLayerActive, ImageLayerButtons, ImageLayerThumb } from './types/image/index.js';
10
- export { LayerButton, LayerThumbWrapper, LayerWrapper, BackgroundLayer, BackgroundLayerThumb, BackgroundLayerButtons, HtmlLayer, HtmlLayerThumb, HtmlLayerButtons, HtmlLayerActive, ImageLayer, ImageLayerThumb, ImageLayerButtons, ImageLayerActive, HoveredLayer, ActiveBackgroundBorder, ActiveLayerBorder, };
6
+ import { BackgroundLayer, BackgroundLayerContent, BackgroundLayerButtons } from './types/background/index.js';
7
+ import { HtmlLayer, HtmlLayerContent, HtmlContent, HtmlLayerEdit } from './types/html/index.js';
8
+ import { ImageLayer, ImageLayerContent } from './types/image/index.js';
9
+ export { LayerButton, LayerThumbWrapper, LayerWrapper, BackgroundLayer, BackgroundLayerContent, BackgroundLayerButtons, HtmlLayer, HtmlLayerContent, HtmlContent, HtmlLayerEdit, ImageLayer, ImageLayerContent, ActiveBackgroundBorder, ActiveLayerBorder, };
@@ -1,22 +1,21 @@
1
1
  import LayerButton from './layer-button.svelte';
2
2
  import LayerThumbWrapper from './layer-thumb-wrapper.svelte';
3
3
  import LayerWrapper from './layer-wrapper.svelte';
4
- import HoveredLayer from './hovered-layer.svelte';
5
4
  import ActiveBackgroundBorder from './active-background-border.svelte';
6
5
  import ActiveLayerBorder from './active-layer-border.svelte';
7
- import { BackgroundLayerButtons, BackgroundLayer, BackgroundLayerThumb, } from './types/background/index.js';
8
- import { HtmlLayer, HtmlLayerActive, HtmlLayerButtons, HtmlLayerThumb, } from './types/html/index.js';
9
- import { ImageLayer, ImageLayerActive, ImageLayerButtons, ImageLayerThumb, } from './types/image/index.js';
6
+ import { BackgroundLayer, BackgroundLayerContent, BackgroundLayerButtons, } from './types/background/index.js';
7
+ import { HtmlLayer, HtmlLayerContent, HtmlContent, HtmlLayerEdit } from './types/html/index.js';
8
+ import { ImageLayer, ImageLayerContent } from './types/image/index.js';
10
9
  export {
11
10
  // layer buttons
12
11
  LayerButton, LayerThumbWrapper,
13
12
  // layers
14
13
  LayerWrapper,
15
14
  // background layer
16
- BackgroundLayer, BackgroundLayerThumb, BackgroundLayerButtons,
15
+ BackgroundLayer, BackgroundLayerContent, BackgroundLayerButtons,
17
16
  // html layer
18
- HtmlLayer, HtmlLayerThumb, HtmlLayerButtons, HtmlLayerActive,
17
+ HtmlLayer, HtmlLayerContent, HtmlContent, HtmlLayerEdit,
19
18
  //image layer
20
- ImageLayer, ImageLayerThumb, ImageLayerButtons, ImageLayerActive,
19
+ ImageLayer, ImageLayerContent,
21
20
  // layers state
22
- HoveredLayer, ActiveBackgroundBorder, ActiveLayerBorder, };
21
+ ActiveBackgroundBorder, ActiveLayerBorder, };
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import GripVerticalIcon from 'lucide-svelte/icons/grip-vertical';
3
+ import LockedIcon from 'lucide-svelte/icons/lock-keyhole';
3
4
  import { cn } from '../../../utils.js';
4
5
  import type { Layer } from '../types.js';
5
6
  import { getPresentationEditorContext } from '../presentation-editor.svelte.js';
@@ -12,27 +13,44 @@
12
13
  let { layer, children }: Props = $props();
13
14
 
14
15
  const editor = getPresentationEditorContext();
16
+
17
+ const onclick = (e: MouseEvent) => {
18
+ if (layer) {
19
+ if (e.metaKey) {
20
+ editor.setActiveLayers(layer.id, editor.activeLayerIds.has(layer.id) ? 'delete' : 'add');
21
+ } else {
22
+ editor.setActiveLayers(layer.id);
23
+ }
24
+ } else {
25
+ editor.setActiveBackground(true);
26
+ }
27
+ };
15
28
  </script>
16
29
 
17
30
  <div class="relative">
18
31
  <button
19
- onclick={() => (layer ? editor.setActiveLayer(layer) : editor.setActiveBackground(true))}
32
+ {onclick}
20
33
  class={cn(
21
- 'flex w-full items-center justify-between rounded-md border-2 border-transparent p-2 outline-none',
34
+ 'bg-muted flex w-full items-center justify-between rounded-md border-2 border-transparent p-2 outline-none',
22
35
  {
23
- 'border-blue-500': layer ? editor.activeLayer?.id === layer.id : editor.activeBackground,
36
+ 'border-blue-500': layer ? editor.activeLayerIds.has(layer.id) : editor.activeBackground,
24
37
  },
25
38
  )}
26
- style:background-color="rgba(53,71,90,.2)"
27
39
  >
28
- <div class="h-6 w-10 px-2">
40
+ <div class="h-6 w-6">
29
41
  {#if layer}
30
- <GripVerticalIcon />
42
+ {#if !editor.activeSlide.locked && !layer.locked}
43
+ <GripVerticalIcon class="size-6" />
44
+ {/if}
31
45
  {/if}
32
46
  </div>
33
47
  <div class="relative flex h-8 w-48 items-center justify-center overflow-hidden rounded-sm">
34
48
  {@render children?.()}
35
49
  </div>
36
- <div class="h-6 w-6 p-2"></div>
50
+ <div class="h-6 w-6">
51
+ {#if editor.activeSlide.locked || (layer ? layer.locked : editor.activeSlide.backgroundLocked)}
52
+ <LockedIcon class="size-6" />
53
+ {/if}
54
+ </div>
37
55
  </button>
38
56
  </div>
@@ -1,53 +1,115 @@
1
1
  <script lang="ts">
2
+ import * as ContextMenu from '../../ui/context-menu/index.js';
2
3
  import type { ActiveLayerGuide, BoxLayerGuide, Layer, LineLayerGuide } from '../types.js';
3
4
  import { getPresentationEditorContext } from '../presentation-editor.svelte.js';
4
- import { calculateBoundingBox } from './utils.js';
5
+ import {
6
+ calculateBoundingBox,
7
+ calculateGroupRotatedBoundingBox,
8
+ calculateLayerTransform,
9
+ type Transform,
10
+ } from './utils.js';
5
11
  import { generateId } from '../../../utils.js';
12
+ import LayerMenuContent from '../menu/layer-menu-content.svelte';
6
13
 
7
14
  interface Props {
8
15
  layer: Layer;
9
- hoveredLayer: Layer | 'background' | null;
16
+ hoveredLayerId: string | null;
10
17
  activeLayerGuides: ActiveLayerGuide[];
11
18
  children?: import('svelte').Snippet;
12
19
  }
13
20
 
14
21
  let {
15
22
  layer = $bindable(),
16
- hoveredLayer = $bindable(null),
23
+ hoveredLayerId = $bindable(null),
17
24
  activeLayerGuides = $bindable(),
18
25
  children,
19
26
  }: Props = $props();
20
27
 
21
28
  const editor = getPresentationEditorContext();
22
29
 
30
+ let initial: {
31
+ clientX: number;
32
+ clientY: number;
33
+ bbox: Transform;
34
+ layers: (Layer & { state: Layer })[];
35
+ } | null = null;
36
+ const actionId = editor.generateId();
37
+
23
38
  let scale = $derived(layer.scale || 1);
24
39
  let rotate = $derived(layer.rotate || 0);
25
40
 
26
- const onMouseDown = () => {
27
- console.log('mousedown', layer.id);
28
- if (editor.activeLayer?.id !== layer.id || !editor.activeAction) {
29
- editor.setActiveLayer(layer);
41
+ const tryToDeselect = () => {
42
+ removeEventListener('mouseup', tryToDeselect);
43
+ if (editor.activeAction?.id === actionId) return;
44
+ editor.setActiveLayers(layer.id, 'delete');
45
+ };
46
+
47
+ const onMouseDown = (e: MouseEvent) => {
48
+ console.log('mousedown', layer.id, e);
49
+ if (!editor.activeLayerIds.has(layer.id)) {
50
+ editor.setActiveLayers(layer.id, e.shiftKey ? 'add' : undefined);
51
+ } else if (e.shiftKey) {
52
+ addEventListener('mouseup', tryToDeselect);
53
+ }
54
+ if (
55
+ !editor.activeSlide.locked &&
56
+ !editor.activeLayers.some((l) => l.locked) &&
57
+ !editor.activeAction &&
58
+ e.button === 0
59
+ ) {
60
+ initial = {
61
+ clientX: e.clientX,
62
+ clientY: e.clientY,
63
+ bbox: {
64
+ ...calculateBoundingBox(
65
+ editor.activeLayers.length === 1
66
+ ? calculateLayerTransform(editor.activeLayers[0])
67
+ : calculateGroupRotatedBoundingBox(
68
+ editor.activeLayers.map(calculateLayerTransform),
69
+ editor.activeGroupRotate,
70
+ ),
71
+ ),
72
+ rotate: 0,
73
+ },
74
+ layers: editor.activeLayers.map((layer) => ({ ...layer, state: layer })),
75
+ };
30
76
  addEventListener('mousemove', onMouseMove);
31
77
  addEventListener('mouseup', onMouseUp);
32
78
  }
33
79
  };
34
80
 
35
- const onMouseUp = () => {
36
- console.log('mouseup', layer.id);
37
- if (editor.activeLayer?.id === layer.id && editor.activeAction?.type === 'drag') {
38
- if (editor.checkIfLayerInBounds(layer)) {
39
- editor.historyPush({
40
- type: 'layer',
41
- layer: { id: layer.id, type: layer.type },
42
- undo: { x: editor.activeAction.layer.x, y: editor.activeAction.layer.y },
43
- redo: { x: layer.x, y: layer.y },
44
- });
45
- editor.activeAction = null;
46
- }
47
- }
48
- activeLayerGuides = [];
81
+ const onMouseUp = (e: MouseEvent) => {
82
+ console.log('mouseup', layer.id, e);
49
83
  removeEventListener('mousemove', onMouseMove);
50
84
  removeEventListener('mouseup', onMouseUp);
85
+
86
+ activeLayerGuides = [];
87
+ if (editor.activeAction?.id !== actionId) return;
88
+ editor.activeAction = null;
89
+ if (!initial || (initial.clientX === e.clientX && initial.clientY === e.clientY)) return;
90
+
91
+ editor.historyPush({
92
+ type: 'layersGroup',
93
+ actions: initial.layers.map((layerWithState) => {
94
+ const { state, ...layer } = layerWithState;
95
+ if (editor.isLayerOutOfBounds(state)) {
96
+ return {
97
+ type: 'layersRemove',
98
+ slideId: editor.activeSlide.id,
99
+ layers: [layer],
100
+ };
101
+ } else {
102
+ return {
103
+ type: 'layer',
104
+ slideId: editor.activeSlide.id,
105
+ layer: { id: layer.id, type: layer.type },
106
+ undo: { x: layer.x, y: layer.y },
107
+ redo: { x: state.x, y: state.y },
108
+ };
109
+ }
110
+ }),
111
+ });
112
+ initial = null;
51
113
  };
52
114
 
53
115
  const boxInset = Math.round(Math.min(editor.width, editor.height) / 10);
@@ -86,8 +148,8 @@
86
148
  let snappingGrid: LineLayerGuide[][] = [];
87
149
  const buildSnappingGrid = () =>
88
150
  editor.activeSlide.layers
89
- .filter((l) => l.id !== layer.id)
90
- .map((l) => calculateBoundingBox(l))
151
+ .filter((l) => !editor.activeLayerIds.has(l.id))
152
+ .map((l) => calculateBoundingBox(calculateLayerTransform(l)))
91
153
  .map(({ x, y, width, height }) => {
92
154
  const verticalPositions = [x, x + width / 2, x + width];
93
155
  const horizontalPositions = [y, y + height / 2, y + height];
@@ -118,171 +180,159 @@
118
180
 
119
181
  const onMouseMove = (e: MouseEvent) => {
120
182
  console.log('mousemove', layer.id);
121
- if (editor.activeLayer?.id === layer.id) {
122
- if (!editor.activeAction) {
123
- editor.activeAction = {
124
- type: 'drag',
125
- cursor: 'cursor-move',
126
- clientX: e.clientX,
127
- clientY: e.clientY,
128
- layer: { ...layer },
129
- };
130
- snappingGrid = buildSnappingGrid();
131
- }
132
- if (editor.activeAction.type === 'drag') {
133
- let x =
134
- editor.activeAction.layer.x + (e.clientX - editor.activeAction.clientX) / editor.zoom;
135
- let y =
136
- editor.activeAction.layer.y + (e.clientY - editor.activeAction.clientY) / editor.zoom;
183
+ if (!editor.activeAction) {
184
+ editor.activeAction = { id: actionId, type: 'drag', cursor: 'cursor-move' };
185
+ snappingGrid = buildSnappingGrid();
186
+ }
137
187
 
138
- const boundingBox = calculateBoundingBox({
139
- x,
140
- y,
141
- width: layer.width,
142
- height: layer.height,
143
- rotate,
144
- });
188
+ if (!initial || editor.activeAction?.id !== actionId) return;
145
189
 
146
- const guides: {
147
- xDiff?: number;
148
- yDiff?: number;
149
- x?: number;
150
- y?: number;
151
- guide: ActiveLayerGuide;
152
- }[] = [];
153
- const snapping = 10;
154
- let minXDiff: number = Infinity;
155
- let minYDiff: number = Infinity;
156
- const xSnappingCheck = (coords: number[]) => {
157
- for (let i = 0; i < coords.length; i++) {
158
- const coordsForCheck = [
159
- coords[i],
160
- coords[i] - boundingBox.width / 2,
161
- coords[i] - boundingBox.width,
162
- ];
163
- for (let j = 0; j < coordsForCheck.length; j++) {
164
- const xDiff = Math.abs(boundingBox.x - coordsForCheck[j]);
165
- if (xDiff <= snapping) {
166
- if (xDiff < minXDiff) {
167
- minXDiff = xDiff;
168
- }
169
- const x = coordsForCheck[j] + (boundingBox.width - layer.width) / 2;
170
- return { xDiff, x };
171
- }
172
- }
173
- }
174
- };
175
- const ySnappingCheck = (coords: number[]) => {
176
- for (let i = 0; i < coords.length; i++) {
177
- const coordsForCheck = [
178
- coords[i],
179
- coords[i] - boundingBox.height / 2,
180
- coords[i] - boundingBox.height,
181
- ];
182
- for (let j = 0; j < coordsForCheck.length; j++) {
183
- const yDiff = Math.abs(boundingBox.y - coordsForCheck[j]);
184
- if (yDiff <= snapping) {
185
- if (yDiff < minYDiff) {
186
- minYDiff = yDiff;
187
- }
188
- const y = coordsForCheck[j] + (boundingBox.height - layer.height) / 2;
189
- return { yDiff, y };
190
- }
190
+ let xDiff = (e.clientX - initial.clientX) / editor.zoom;
191
+ let yDiff = (e.clientY - initial.clientY) / editor.zoom;
192
+ let x = initial.bbox.x + xDiff;
193
+ let y = initial.bbox.y + yDiff;
194
+ const { width, height } = initial.bbox;
195
+
196
+ const guides: {
197
+ xDiff?: number;
198
+ yDiff?: number;
199
+ x?: number;
200
+ y?: number;
201
+ guide: ActiveLayerGuide;
202
+ }[] = [];
203
+ const snapping = 10;
204
+ let minXDiff: number = Infinity;
205
+ let minYDiff: number = Infinity;
206
+ const xSnappingCheck = (coords: number[]) => {
207
+ for (let i = 0; i < coords.length; i++) {
208
+ const coordsForCheck = [coords[i], coords[i] - width / 2, coords[i] - width];
209
+ for (let j = 0; j < coordsForCheck.length; j++) {
210
+ const xDiff = x - coordsForCheck[j];
211
+ const xDiffAbs = Math.abs(xDiff);
212
+ if (xDiffAbs <= snapping) {
213
+ if (xDiffAbs < Math.abs(minXDiff)) {
214
+ minXDiff = xDiff;
191
215
  }
216
+ const x = coordsForCheck[j];
217
+ return { xDiff, x };
192
218
  }
193
- };
194
- const checkLineSnapping = (guide: ActiveLayerGuide) => {
195
- if (guide.type === 'vertical') {
196
- const xSnapping = xSnappingCheck([guide.x]);
197
- if (typeof xSnapping === 'object') {
198
- guides.push({ guide, ...xSnapping });
199
- }
200
- } else if (guide.type === 'horizontal') {
201
- const ySnapping = ySnappingCheck([guide.y]);
202
- if (typeof ySnapping === 'object') {
203
- guides.push({ guide, ...ySnapping });
219
+ }
220
+ }
221
+ };
222
+ const ySnappingCheck = (coords: number[]) => {
223
+ for (let i = 0; i < coords.length; i++) {
224
+ const coordsForCheck = [coords[i], coords[i] - height / 2, coords[i] - height];
225
+ for (let j = 0; j < coordsForCheck.length; j++) {
226
+ const yDiff = y - coordsForCheck[j];
227
+ const yDiffAbs = Math.abs(yDiff);
228
+ if (Math.abs(yDiff) <= snapping) {
229
+ if (yDiffAbs < Math.abs(minYDiff)) {
230
+ minYDiff = yDiff;
204
231
  }
232
+ const y = coordsForCheck[j];
233
+ return { yDiff, y };
205
234
  }
206
- };
207
- const checkBoxSnapping = (guide: BoxLayerGuide) => {
208
- const xSnapping = xSnappingCheck([guide.inset, editor.width - guide.inset]);
209
- const ySnapping = ySnappingCheck([guide.inset, editor.height - guide.inset]);
210
- if (typeof xSnapping === 'object' || typeof ySnapping === 'object') {
211
- guides.push({ guide, ...xSnapping, ...ySnapping });
212
- }
213
- };
235
+ }
236
+ }
237
+ };
238
+ const checkLineSnapping = (guide: ActiveLayerGuide) => {
239
+ if (guide.type === 'vertical') {
240
+ const xSnapping = xSnappingCheck([guide.x]);
241
+ if (typeof xSnapping === 'object') {
242
+ guides.push({ guide, ...xSnapping });
243
+ }
244
+ } else if (guide.type === 'horizontal') {
245
+ const ySnapping = ySnappingCheck([guide.y]);
246
+ if (typeof ySnapping === 'object') {
247
+ guides.push({ guide, ...ySnapping });
248
+ }
249
+ }
250
+ };
251
+ const checkBoxSnapping = (guide: BoxLayerGuide) => {
252
+ const xSnapping = xSnappingCheck([guide.inset, editor.width - guide.inset]);
253
+ const ySnapping = ySnappingCheck([guide.inset, editor.height - guide.inset]);
254
+ if (typeof xSnapping === 'object' || typeof ySnapping === 'object') {
255
+ guides.push({ guide, ...xSnapping, ...ySnapping });
256
+ }
257
+ };
214
258
 
215
- // slide padding
216
- checkBoxSnapping(paddingGuide);
259
+ // slide padding
260
+ checkBoxSnapping(paddingGuide);
217
261
 
218
- // slide edges
219
- edgeGuides.forEach(checkLineSnapping);
262
+ // slide edges
263
+ edgeGuides.forEach(checkLineSnapping);
220
264
 
221
- // rest of the slides
222
- snappingGrid.forEach((layerGuides) => {
223
- layerGuides.forEach(checkLineSnapping);
224
- });
265
+ // rest of the slides
266
+ snappingGrid.forEach((layerGuides) => {
267
+ layerGuides.forEach(checkLineSnapping);
268
+ });
225
269
 
226
- const guidesToSnap = guides.filter(
227
- ({ xDiff, yDiff }) => xDiff === minXDiff || yDiff === minYDiff,
228
- );
229
- guidesToSnap.forEach((guide) => {
230
- if (guide.x !== undefined) {
231
- x = guide.x;
232
- }
233
- if (guide.y !== undefined) {
234
- y = guide.y;
235
- }
236
- });
270
+ if (Number.isFinite(minXDiff)) {
271
+ x -= minXDiff;
272
+ xDiff -= minXDiff;
273
+ }
274
+ if (Number.isFinite(minYDiff)) {
275
+ y -= minYDiff;
276
+ yDiff -= minYDiff;
277
+ }
237
278
 
238
- activeLayerGuides = guidesToSnap.map(({ guide }) => {
239
- if (guide.type === 'horizontal') {
240
- const x = Math.min(boundingBox.x, guide.x);
241
- const length = Math.max(boundingBox.x + boundingBox.width, guide.x + guide.length) - x;
242
- return { ...guide, x, length };
243
- } else if (guide.type === 'vertical') {
244
- const y = Math.min(boundingBox.y, guide.y);
245
- const length = Math.max(boundingBox.y + boundingBox.height, guide.y + guide.length) - y;
246
- return { ...guide, y, length };
247
- }
279
+ activeLayerGuides = guides
280
+ .filter(({ xDiff, yDiff }) => xDiff === minXDiff || yDiff === minYDiff)
281
+ .map(({ guide }) => {
282
+ if (guide.type === 'horizontal') {
283
+ const minX = Math.min(x, guide.x);
284
+ const length = Math.max(x + width, guide.x + guide.length) - minX;
285
+ return { ...guide, x: minX, length };
286
+ } else if (guide.type === 'vertical') {
287
+ const minY = Math.min(y, guide.y);
288
+ const length = Math.max(y + height, guide.y + guide.length) - minY;
289
+ return { ...guide, y: minY, length };
290
+ }
248
291
 
249
- return guide;
250
- });
292
+ return guide;
293
+ });
251
294
 
252
- Object.assign(layer, { x, y });
253
- }
254
- }
295
+ initial.layers.forEach((layer) => {
296
+ Object.assign(layer.state, { x: layer.x + xDiff, y: layer.y + yDiff });
297
+ });
255
298
  };
256
299
 
257
300
  const onMouseOver = () => {
258
301
  console.log('mouseover', layer.id);
259
- hoveredLayer = layer;
302
+ hoveredLayerId = layer.id;
260
303
  };
261
304
 
262
305
  const onMouseLeave = () => {
263
306
  console.log('mouseleave', layer.id);
264
- hoveredLayer = null;
307
+ hoveredLayerId = null;
265
308
  };
266
309
 
267
310
  const onDragEnter = (e: DragEvent) => {
268
311
  console.log('dragenter layer wrapper', e);
269
- e.preventDefault();
312
+ // e.preventDefault();
270
313
  // e.stopPropagation();
271
314
  };
272
315
  </script>
273
316
 
274
- <!-- svelte-ignore a11y_mouse_events_have_key_events -->
275
- <!-- svelte-ignore a11y_no_static_element_interactions -->
276
- <div
277
- class="pointer-events-auto absolute select-none"
278
- style:width="{layer.width * scale}px"
279
- style:height="{layer.height * scale}px"
280
- style:transform={`translate(${layer.x}px, ${layer.y}px) rotate(${rotate}deg)`}
281
- style:opacity={layer.opacity ?? null}
282
- onmousedown={onMouseDown}
283
- onmouseover={onMouseOver}
284
- onmouseleave={onMouseLeave}
285
- ondragenter={onDragEnter}
286
- >
287
- {@render children?.()}
288
- </div>
317
+ <ContextMenu.Root>
318
+ <ContextMenu.Trigger>
319
+ <!-- svelte-ignore a11y_mouse_events_have_key_events -->
320
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
321
+ <div
322
+ class="absolute select-none"
323
+ style:width="{layer.width * scale}px"
324
+ style:height="{layer.height * scale}px"
325
+ style:transform={`translate(${layer.x}px, ${layer.y}px) rotate(${rotate}deg)`}
326
+ style:opacity={layer.opacity ?? null}
327
+ onmousedown={onMouseDown}
328
+ onmouseover={onMouseOver}
329
+ onmouseleave={onMouseLeave}
330
+ ondragenter={onDragEnter}
331
+ >
332
+ {@render children?.()}
333
+ </div>
334
+ </ContextMenu.Trigger>
335
+ <ContextMenu.Content class="w-72">
336
+ <LayerMenuContent />
337
+ </ContextMenu.Content>
338
+ </ContextMenu.Root>
@@ -1,10 +1,10 @@
1
1
  import type { ActiveLayerGuide, Layer } from '../types.js';
2
2
  interface Props {
3
3
  layer: Layer;
4
- hoveredLayer: Layer | 'background' | null;
4
+ hoveredLayerId: string | null;
5
5
  activeLayerGuides: ActiveLayerGuide[];
6
6
  children?: import('svelte').Snippet;
7
7
  }
8
- declare const LayerWrapper: import("svelte").Component<Props, {}, "layer" | "hoveredLayer" | "activeLayerGuides">;
8
+ declare const LayerWrapper: import("svelte").Component<Props, {}, "layer" | "hoveredLayerId" | "activeLayerGuides">;
9
9
  type LayerWrapper = ReturnType<typeof LayerWrapper>;
10
10
  export default LayerWrapper;