@peteai/presentation-editor 0.0.6 → 0.0.8

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 (330) hide show
  1. package/README.md +38 -38
  2. package/dist/components/editor/active-layers-buttons.svelte +56 -0
  3. package/dist/components/editor/active-layers.svelte +237 -0
  4. package/dist/components/editor/active-layers.svelte.d.ts +8 -0
  5. package/dist/components/{presentation-editor/cognition-slides.d.ts → editor/cognition-pages.d.ts} +1 -1
  6. package/dist/components/{presentation-editor/cognition-slides.js → editor/cognition-pages.js} +1 -1
  7. package/dist/components/{presentation-editor → editor}/cursor-tooltip.svelte +6 -2
  8. package/dist/components/editor/cursor-tooltip.svelte.d.ts +7 -0
  9. package/dist/components/{presentation-editor → editor}/dragged.svelte +7 -3
  10. package/dist/components/editor/dragged.svelte.d.ts +7 -0
  11. package/dist/components/{presentation-editor/presentation-editor.svelte → editor/editor.svelte} +64 -61
  12. package/dist/components/editor/editor.svelte.d.ts +4 -0
  13. package/dist/components/editor/editor.svelte.js +1169 -0
  14. package/dist/components/editor/header.svelte +62 -0
  15. package/dist/components/editor/header.svelte.d.ts +7 -0
  16. package/dist/components/{presentation-editor → editor}/hotkeys.svelte +48 -16
  17. package/dist/components/editor/index.d.ts +3 -0
  18. package/dist/components/editor/index.js +3 -0
  19. package/dist/components/{presentation-editor → editor}/layers/active-background-border.svelte +2 -2
  20. package/dist/components/{presentation-editor → editor}/layers/active-layer-border.svelte +5 -8
  21. package/dist/components/editor/layers/buttons/border-button/border-button-colors.svelte +59 -0
  22. package/dist/components/editor/layers/buttons/border-button/border-button-colors.svelte.d.ts +9 -0
  23. package/dist/components/{presentation-editor → editor}/layers/buttons/border-button/border-button.svelte +47 -65
  24. package/dist/components/{presentation-editor → editor}/layers/buttons/corner-radius-button/corner-radius-button.svelte +24 -28
  25. package/dist/components/{presentation-editor → editor}/layers/buttons/flip-button/flip-button.svelte +11 -12
  26. package/dist/components/{presentation-editor → editor}/layers/buttons/opacity-button/opacity-button.svelte +33 -44
  27. package/dist/components/{presentation-editor → editor}/layers/controls/corner-scale-control/corner-scale-control.svelte +27 -32
  28. package/dist/components/editor/layers/controls/group-resize-control/group-resize-control.svelte +418 -0
  29. package/dist/components/{presentation-editor → editor}/layers/controls/rotate-control/rotate-control.svelte +33 -34
  30. package/dist/components/editor/layers/controls/rotate-control/rotate-control.svelte.d.ts +6 -0
  31. package/dist/components/{presentation-editor → editor}/layers/controls/side-resize-control/side-resize-control.svelte +22 -26
  32. package/dist/components/{presentation-editor → editor}/layers/controls/side-scale-control/side-scale-control.svelte +13 -15
  33. package/dist/components/{presentation-editor → editor}/layers/controls/side-scale-control/side-scale-control.svelte.d.ts +2 -2
  34. package/dist/components/editor/layers/index.d.ts +10 -0
  35. package/dist/components/{presentation-editor → editor}/layers/index.js +8 -5
  36. package/dist/components/{presentation-editor → editor}/layers/layer-button.svelte +14 -8
  37. package/dist/components/{presentation-editor → editor}/layers/layer-thumb-wrapper.svelte +5 -6
  38. package/dist/components/{presentation-editor → editor}/layers/layer-wrapper.svelte +46 -57
  39. package/dist/components/editor/layers/types/background/background-content-image.svelte +36 -0
  40. package/dist/components/{presentation-editor → editor}/layers/types/background/background-layer-buttons.svelte +6 -6
  41. package/dist/components/editor/layers/types/background/background-layer-content.svelte +21 -0
  42. package/dist/components/{presentation-editor → editor}/layers/types/background/background-layer-content.svelte.d.ts +2 -2
  43. package/dist/components/{presentation-editor → editor}/layers/types/background/background-layer.svelte +7 -9
  44. package/dist/components/editor/layers/types/group/group-child-wrapper.svelte +44 -0
  45. package/dist/components/editor/layers/types/group/group-child-wrapper.svelte.d.ts +9 -0
  46. package/dist/components/editor/layers/types/group/group-layer-content.svelte +45 -0
  47. package/dist/components/editor/layers/types/group/group-layer-content.svelte.d.ts +9 -0
  48. package/dist/components/editor/layers/types/group/group-layer.svelte +33 -0
  49. package/dist/components/editor/layers/types/group/group-layer.svelte.d.ts +8 -0
  50. package/dist/components/editor/layers/types/group/index.d.ts +3 -0
  51. package/dist/components/editor/layers/types/group/index.js +3 -0
  52. package/dist/components/editor/layers/types/image/controls/image-rotate-control/image-rotate-control.svelte +120 -0
  53. package/dist/components/editor/layers/types/image/controls/image-rotate-control/image-rotate-control.svelte.d.ts +8 -0
  54. package/dist/components/editor/layers/types/image/controls/image-rotate-control/index.d.ts +2 -0
  55. package/dist/components/editor/layers/types/image/controls/image-rotate-control/index.js +4 -0
  56. package/dist/components/editor/layers/types/image/controls/image-scale-control/image-scale-control.svelte +154 -0
  57. package/dist/components/editor/layers/types/image/controls/image-scale-control/image-scale-control.svelte.d.ts +91 -0
  58. package/dist/components/editor/layers/types/image/controls/image-scale-control/index.d.ts +2 -0
  59. package/dist/components/editor/layers/types/image/controls/image-scale-control/index.js +4 -0
  60. package/dist/components/{presentation-editor → editor}/layers/types/image/image-layer-active.svelte +10 -13
  61. package/dist/components/{presentation-editor → editor}/layers/types/image/image-layer-content.svelte +15 -12
  62. package/dist/components/editor/layers/types/image/image-layer-crop.svelte +182 -0
  63. package/dist/components/editor/layers/types/image/image-layer-crop.svelte.d.ts +10 -0
  64. package/dist/components/{presentation-editor → editor}/layers/types/image/image-layer.svelte +24 -14
  65. package/dist/components/editor/layers/types/image/index.d.ts +4 -0
  66. package/dist/components/editor/layers/types/image/index.js +4 -0
  67. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/alignment-button/alignment-button.svelte +13 -14
  68. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/alignment-button/alignment-button.svelte.d.ts +2 -2
  69. package/dist/components/editor/layers/types/text/buttons/bold-button/bold-button.svelte +65 -0
  70. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/bold-button/bold-button.svelte.d.ts +2 -2
  71. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/case-button/case-button.svelte +24 -30
  72. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/case-button/case-button.svelte.d.ts +2 -2
  73. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/color-button/color-button.svelte +4 -4
  74. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/color-button/color-button.svelte.d.ts +2 -2
  75. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/font-family-button/font-family-button.svelte +4 -4
  76. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/font-family-button/font-family-button.svelte.d.ts +2 -2
  77. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/font-size-button/font-size-button.svelte +33 -40
  78. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/font-size-button/font-size-button.svelte.d.ts +2 -2
  79. package/dist/components/editor/layers/types/text/buttons/italic-button/italic-button.svelte +65 -0
  80. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/italic-button/italic-button.svelte.d.ts +2 -2
  81. package/dist/components/editor/layers/types/text/buttons/list-button/list-button.svelte +113 -0
  82. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/list-button/list-button.svelte.d.ts +2 -2
  83. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/strikethrough-button/strikethrough-button.svelte +10 -11
  84. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/strikethrough-button/strikethrough-button.svelte.d.ts +2 -2
  85. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/underline-button/underline-button.svelte +10 -11
  86. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/underline-button/underline-button.svelte.d.ts +2 -2
  87. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/utils.d.ts +2 -0
  88. package/dist/components/editor/layers/types/text/editor/utils.js +166 -0
  89. package/dist/components/editor/layers/types/text/extensions/list/index.d.ts +3 -0
  90. package/dist/components/editor/layers/types/text/extensions/list/index.js +3 -0
  91. package/dist/components/editor/layers/types/text/extensions/list/list.d.ts +67 -0
  92. package/dist/components/editor/layers/types/text/extensions/list/list.js +237 -0
  93. package/dist/components/editor/layers/types/text/extensions/list-item/index.d.ts +3 -0
  94. package/dist/components/editor/layers/types/text/extensions/list-item/index.js +3 -0
  95. package/dist/components/editor/layers/types/text/extensions/list-item/list-item.d.ts +13 -0
  96. package/dist/components/editor/layers/types/text/extensions/list-item/list-item.js +262 -0
  97. package/dist/components/editor/layers/types/text/extensions/list-item-paragraph/index.d.ts +3 -0
  98. package/dist/components/editor/layers/types/text/extensions/list-item-paragraph/index.js +3 -0
  99. package/dist/components/editor/layers/types/text/extensions/list-item-paragraph/list-item-paragraph.d.ts +14 -0
  100. package/dist/components/editor/layers/types/text/extensions/list-item-paragraph/list-item-paragraph.js +27 -0
  101. package/dist/components/editor/layers/types/text/extensions/paragraph/index.d.ts +3 -0
  102. package/dist/components/editor/layers/types/text/extensions/paragraph/index.js +3 -0
  103. package/dist/components/editor/layers/types/text/extensions/paragraph/paragraph.d.ts +6 -0
  104. package/dist/components/editor/layers/types/text/extensions/paragraph/paragraph.js +28 -0
  105. package/dist/components/editor/layers/types/text/extensions/preserve-formatting-on-clear/index.d.ts +3 -0
  106. package/dist/components/editor/layers/types/text/extensions/preserve-formatting-on-clear/index.js +3 -0
  107. package/dist/components/editor/layers/types/text/extensions/preserve-formatting-on-clear/preserve-formatting-on-clear.d.ts +2 -0
  108. package/dist/components/editor/layers/types/text/extensions/preserve-formatting-on-clear/preserve-formatting-on-clear.js +74 -0
  109. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/text-transform/text-transform.js +1 -4
  110. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions.js +13 -23
  111. package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/html-content.svelte +0 -9
  112. package/dist/components/editor/layers/types/text/index.d.ts +5 -0
  113. package/dist/components/editor/layers/types/text/index.js +5 -0
  114. package/dist/components/{presentation-editor/layers/types/html/html-layer-content.svelte → editor/layers/types/text/text-layer-content.svelte} +2 -2
  115. package/dist/components/editor/layers/types/text/text-layer-content.svelte.d.ts +9 -0
  116. package/dist/components/editor/layers/types/text/text-layer-edit.svelte +114 -0
  117. package/dist/components/editor/layers/types/text/text-layer-edit.svelte.d.ts +9 -0
  118. package/dist/components/editor/layers/types/text/text-layer.svelte +125 -0
  119. package/dist/components/editor/layers/types/text/text-layer.svelte.d.ts +7 -0
  120. package/dist/components/{presentation-editor → editor}/layers/utils.d.ts +32 -24
  121. package/dist/components/{presentation-editor → editor}/layers/utils.js +152 -102
  122. package/dist/components/{presentation-editor → editor}/menu/background-menu-content.svelte +24 -24
  123. package/dist/components/{presentation-editor → editor}/menu/background-menu-content.svelte.d.ts +4 -4
  124. package/dist/components/{presentation-editor → editor}/menu/layer-menu-content.svelte +62 -38
  125. package/dist/components/{presentation-editor/menu/slide-menu-content.svelte → editor/menu/page-menu-content.svelte} +19 -19
  126. package/dist/components/editor/menu/page-menu-content.svelte.d.ts +9 -0
  127. package/dist/components/{presentation-editor/slide-editor.svelte → editor/page-editor.svelte} +30 -25
  128. package/dist/components/editor/page-editor.svelte.d.ts +7 -0
  129. package/dist/components/{presentation-editor/slide-inner.svelte → editor/page-inner.svelte} +5 -5
  130. package/dist/components/{presentation-editor/sidebar/sidebar.svelte.d.ts → editor/page-inner.svelte.d.ts} +3 -3
  131. package/dist/components/editor/page.svelte +69 -0
  132. package/dist/components/editor/page.svelte.d.ts +4 -0
  133. package/dist/components/editor/pages-navigation/page-preview.svelte +36 -0
  134. package/dist/components/editor/pages-navigation/page-preview.svelte.d.ts +8 -0
  135. package/dist/components/{presentation-editor/slides-navigation/slide-preview.svelte → editor/pages-navigation/pages-navigation-item.svelte} +21 -41
  136. package/dist/components/editor/pages-navigation/pages-navigation-item.svelte.d.ts +11 -0
  137. package/dist/components/{presentation-editor/slides-navigation/slides-navigation.svelte → editor/pages-navigation/pages-navigation.svelte} +26 -21
  138. package/dist/components/editor/pages-navigation/pages-navigation.svelte.d.ts +7 -0
  139. package/dist/components/{presentation-editor → editor}/sidebar/color-sidebar/color-sidebar-color.svelte +1 -1
  140. package/dist/components/{presentation-editor → editor}/sidebar/color-sidebar/color-sidebar-gradient-picker.svelte +2 -2
  141. package/dist/components/{presentation-editor → editor}/sidebar/color-sidebar/color-sidebar.svelte +92 -89
  142. package/dist/components/{presentation-editor → editor}/sidebar/font-sidebar/font-sidebar-button.svelte +3 -3
  143. package/dist/components/{presentation-editor → editor}/sidebar/font-sidebar/font-sidebar.svelte +34 -39
  144. package/dist/components/editor/sidebar/image-crop-sidebar.svelte +112 -0
  145. package/dist/components/editor/sidebar/image-crop-sidebar.svelte.d.ts +7 -0
  146. package/dist/components/{presentation-editor/sidebar/position-slidebar.svelte → editor/sidebar/position-sidebar.svelte} +26 -20
  147. package/dist/components/editor/sidebar/position-sidebar.svelte.d.ts +3 -0
  148. package/dist/components/{presentation-editor → editor}/sidebar/sidebar-text-tab-button.svelte +5 -5
  149. package/dist/components/{presentation-editor → editor}/sidebar/sidebar-text-tab.svelte +5 -5
  150. package/dist/components/{presentation-editor → editor}/sidebar/sidebar-uploads-tab.svelte +4 -4
  151. package/dist/components/{presentation-editor → editor}/sidebar/sidebar-wrapper.svelte +6 -4
  152. package/dist/components/{presentation-editor → editor}/sidebar/sidebar.svelte +17 -10
  153. package/dist/components/editor/sidebar/sidebar.svelte.d.ts +7 -0
  154. package/dist/components/{presentation-editor → editor}/sidebar/uploads-image.svelte +3 -3
  155. package/dist/components/editor/types.d.ts +283 -0
  156. package/dist/components/{presentation-editor → editor}/utils.d.ts +14 -6
  157. package/dist/components/{presentation-editor → editor}/utils.js +98 -63
  158. package/dist/components/ui/color-picker/color-picker.svelte +2 -2
  159. package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte +2 -2
  160. package/dist/components/ui/context-menu/context-menu-radio-item.svelte +1 -1
  161. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +1 -1
  162. package/dist/components/ui/dialog/dialog-content.svelte +3 -3
  163. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +3 -3
  164. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +2 -2
  165. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  166. package/dist/components/ui/dropdown-menu/index.d.ts +1 -0
  167. package/dist/components/ui/slider/slider.svelte +28 -20
  168. package/dist/index.d.ts +12 -6
  169. package/dist/index.js +5 -3
  170. package/package.json +42 -38
  171. package/dist/components/presentation-editor/active-layers-buttons.svelte +0 -53
  172. package/dist/components/presentation-editor/active-layers.svelte +0 -181
  173. package/dist/components/presentation-editor/active-layers.svelte.d.ts +0 -3
  174. package/dist/components/presentation-editor/cursor-tooltip.svelte.d.ts +0 -18
  175. package/dist/components/presentation-editor/dragged.svelte.d.ts +0 -18
  176. package/dist/components/presentation-editor/header.svelte +0 -54
  177. package/dist/components/presentation-editor/header.svelte.d.ts +0 -18
  178. package/dist/components/presentation-editor/index.d.ts +0 -2
  179. package/dist/components/presentation-editor/index.js +0 -2
  180. package/dist/components/presentation-editor/layers/controls/group-resize-control/group-resize-control.svelte +0 -337
  181. package/dist/components/presentation-editor/layers/controls/rotate-control/rotate-control.svelte.d.ts +0 -3
  182. package/dist/components/presentation-editor/layers/index.d.ts +0 -9
  183. package/dist/components/presentation-editor/layers/types/background/background-content-image.svelte +0 -41
  184. package/dist/components/presentation-editor/layers/types/background/background-layer-content.svelte +0 -19
  185. package/dist/components/presentation-editor/layers/types/html/buttons/bold-button/bold-button.svelte +0 -71
  186. package/dist/components/presentation-editor/layers/types/html/buttons/italic-button/italic-button.svelte +0 -71
  187. package/dist/components/presentation-editor/layers/types/html/buttons/list-button/list-button.svelte +0 -90
  188. package/dist/components/presentation-editor/layers/types/html/editor/utils.js +0 -88
  189. package/dist/components/presentation-editor/layers/types/html/extensions/unstyled-list/index.d.ts +0 -3
  190. package/dist/components/presentation-editor/layers/types/html/extensions/unstyled-list/index.js +0 -3
  191. package/dist/components/presentation-editor/layers/types/html/extensions/unstyled-list/unstyled-list.d.ts +0 -47
  192. package/dist/components/presentation-editor/layers/types/html/extensions/unstyled-list/unstyled-list.js +0 -74
  193. package/dist/components/presentation-editor/layers/types/html/html-layer-content.svelte.d.ts +0 -9
  194. package/dist/components/presentation-editor/layers/types/html/html-layer-edit.svelte +0 -103
  195. package/dist/components/presentation-editor/layers/types/html/html-layer-edit.svelte.d.ts +0 -8
  196. package/dist/components/presentation-editor/layers/types/html/html-layer.svelte +0 -105
  197. package/dist/components/presentation-editor/layers/types/html/html-layer.svelte.d.ts +0 -7
  198. package/dist/components/presentation-editor/layers/types/html/index.d.ts +0 -5
  199. package/dist/components/presentation-editor/layers/types/html/index.js +0 -5
  200. package/dist/components/presentation-editor/layers/types/image/index.d.ts +0 -3
  201. package/dist/components/presentation-editor/layers/types/image/index.js +0 -3
  202. package/dist/components/presentation-editor/menu/slide-menu-content.svelte.d.ts +0 -9
  203. package/dist/components/presentation-editor/presentation-editor.svelte.d.ts +0 -4
  204. package/dist/components/presentation-editor/presentation-editor.svelte.js +0 -813
  205. package/dist/components/presentation-editor/sidebar/position-slidebar.svelte.d.ts +0 -18
  206. package/dist/components/presentation-editor/slide-editor.svelte.d.ts +0 -7
  207. package/dist/components/presentation-editor/slide-inner.svelte.d.ts +0 -18
  208. package/dist/components/presentation-editor/slides-navigation/slide-preview.svelte.d.ts +0 -11
  209. package/dist/components/presentation-editor/slides-navigation/slides-navigation.svelte.d.ts +0 -3
  210. package/dist/components/presentation-editor/types.d.ts +0 -158
  211. /package/dist/components/{presentation-editor → editor}/active-layers-buttons.svelte.d.ts +0 -0
  212. /package/dist/components/{presentation-editor → editor}/color-indicator/color-indicator-gradient-def.svelte +0 -0
  213. /package/dist/components/{presentation-editor → editor}/color-indicator/color-indicator-gradient-def.svelte.d.ts +0 -0
  214. /package/dist/components/{presentation-editor → editor}/color-indicator/color-indicator-gradient.svelte +0 -0
  215. /package/dist/components/{presentation-editor → editor}/color-indicator/color-indicator-gradient.svelte.d.ts +0 -0
  216. /package/dist/components/{presentation-editor → editor}/color-indicator/color-indicator.svelte +0 -0
  217. /package/dist/components/{presentation-editor → editor}/color-indicator/color-indicator.svelte.d.ts +0 -0
  218. /package/dist/components/{presentation-editor → editor}/color-indicator/index.d.ts +0 -0
  219. /package/dist/components/{presentation-editor → editor}/color-indicator/index.js +0 -0
  220. /package/dist/components/{presentation-editor → editor}/fonts.d.ts +0 -0
  221. /package/dist/components/{presentation-editor → editor}/fonts.js +0 -0
  222. /package/dist/components/{presentation-editor → editor}/hotkeys.svelte.d.ts +0 -0
  223. /package/dist/components/{presentation-editor → editor}/layers/active-background-border.svelte.d.ts +0 -0
  224. /package/dist/components/{presentation-editor → editor}/layers/active-layer-border.svelte.d.ts +0 -0
  225. /package/dist/components/{presentation-editor → editor}/layers/buttons/border-button/border-button.svelte.d.ts +0 -0
  226. /package/dist/components/{presentation-editor → editor}/layers/buttons/border-button/index.d.ts +0 -0
  227. /package/dist/components/{presentation-editor → editor}/layers/buttons/border-button/index.js +0 -0
  228. /package/dist/components/{presentation-editor → editor}/layers/buttons/corner-radius-button/corner-radius-button.svelte.d.ts +0 -0
  229. /package/dist/components/{presentation-editor → editor}/layers/buttons/corner-radius-button/index.d.ts +0 -0
  230. /package/dist/components/{presentation-editor → editor}/layers/buttons/corner-radius-button/index.js +0 -0
  231. /package/dist/components/{presentation-editor → editor}/layers/buttons/flip-button/flip-button.svelte.d.ts +0 -0
  232. /package/dist/components/{presentation-editor → editor}/layers/buttons/flip-button/index.d.ts +0 -0
  233. /package/dist/components/{presentation-editor → editor}/layers/buttons/flip-button/index.js +0 -0
  234. /package/dist/components/{presentation-editor → editor}/layers/buttons/opacity-button/index.d.ts +0 -0
  235. /package/dist/components/{presentation-editor → editor}/layers/buttons/opacity-button/index.js +0 -0
  236. /package/dist/components/{presentation-editor → editor}/layers/buttons/opacity-button/opacity-button.svelte.d.ts +0 -0
  237. /package/dist/components/{presentation-editor → editor}/layers/controls/corner-scale-control/corner-scale-control.svelte.d.ts +0 -0
  238. /package/dist/components/{presentation-editor → editor}/layers/controls/corner-scale-control/index.d.ts +0 -0
  239. /package/dist/components/{presentation-editor → editor}/layers/controls/corner-scale-control/index.js +0 -0
  240. /package/dist/components/{presentation-editor → editor}/layers/controls/group-resize-control/group-resize-control.svelte.d.ts +0 -0
  241. /package/dist/components/{presentation-editor → editor}/layers/controls/group-resize-control/index.d.ts +0 -0
  242. /package/dist/components/{presentation-editor → editor}/layers/controls/group-resize-control/index.js +0 -0
  243. /package/dist/components/{presentation-editor → editor}/layers/controls/rotate-control/index.d.ts +0 -0
  244. /package/dist/components/{presentation-editor → editor}/layers/controls/rotate-control/index.js +0 -0
  245. /package/dist/components/{presentation-editor → editor}/layers/controls/side-resize-control/index.d.ts +0 -0
  246. /package/dist/components/{presentation-editor → editor}/layers/controls/side-resize-control/index.js +0 -0
  247. /package/dist/components/{presentation-editor → editor}/layers/controls/side-resize-control/side-resize-control.svelte.d.ts +0 -0
  248. /package/dist/components/{presentation-editor → editor}/layers/controls/side-scale-control/index.d.ts +0 -0
  249. /package/dist/components/{presentation-editor → editor}/layers/controls/side-scale-control/index.js +0 -0
  250. /package/dist/components/{presentation-editor → editor}/layers/layer-button.svelte.d.ts +0 -0
  251. /package/dist/components/{presentation-editor → editor}/layers/layer-thumb-wrapper.svelte.d.ts +0 -0
  252. /package/dist/components/{presentation-editor → editor}/layers/layer-wrapper.svelte.d.ts +0 -0
  253. /package/dist/components/{presentation-editor → editor}/layers/types/background/background-content-image.svelte.d.ts +0 -0
  254. /package/dist/components/{presentation-editor → editor}/layers/types/background/background-layer-buttons.svelte.d.ts +0 -0
  255. /package/dist/components/{presentation-editor → editor}/layers/types/background/background-layer.svelte.d.ts +0 -0
  256. /package/dist/components/{presentation-editor → editor}/layers/types/background/index.d.ts +0 -0
  257. /package/dist/components/{presentation-editor → editor}/layers/types/background/index.js +0 -0
  258. /package/dist/components/{presentation-editor → editor}/layers/types/image/image-layer-active.svelte.d.ts +0 -0
  259. /package/dist/components/{presentation-editor → editor}/layers/types/image/image-layer-content.svelte.d.ts +0 -0
  260. /package/dist/components/{presentation-editor → editor}/layers/types/image/image-layer.svelte.d.ts +0 -0
  261. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/alignment-button/index.d.ts +0 -0
  262. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/alignment-button/index.js +0 -0
  263. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/bold-button/index.d.ts +0 -0
  264. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/bold-button/index.js +0 -0
  265. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/case-button/index.d.ts +0 -0
  266. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/case-button/index.js +0 -0
  267. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/color-button/index.d.ts +0 -0
  268. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/color-button/index.js +0 -0
  269. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/font-family-button/index.d.ts +0 -0
  270. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/font-family-button/index.js +0 -0
  271. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/font-size-button/index.d.ts +0 -0
  272. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/font-size-button/index.js +0 -0
  273. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/italic-button/index.d.ts +0 -0
  274. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/italic-button/index.js +0 -0
  275. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/list-button/index.d.ts +0 -0
  276. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/list-button/index.js +0 -0
  277. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/strikethrough-button/index.d.ts +0 -0
  278. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/strikethrough-button/index.js +0 -0
  279. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/underline-button/index.d.ts +0 -0
  280. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/buttons/underline-button/index.js +0 -0
  281. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/Editor.d.ts +0 -0
  282. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/Editor.js +0 -0
  283. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/createEditor.d.ts +0 -0
  284. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/createEditor.js +0 -0
  285. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/editor-content.svelte +0 -0
  286. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/editor-content.svelte.d.ts +0 -0
  287. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/index.d.ts +0 -0
  288. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/index.js +0 -0
  289. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/types.d.ts +0 -0
  290. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor/types.js +0 -0
  291. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/editor.css +0 -0
  292. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/font-family/font-family.d.ts +0 -0
  293. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/font-family/font-family.js +0 -0
  294. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/font-family/index.d.ts +0 -0
  295. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/font-family/index.js +0 -0
  296. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/font-size/font-size.d.ts +0 -0
  297. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/font-size/font-size.js +0 -0
  298. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/font-size/index.d.ts +0 -0
  299. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/font-size/index.js +0 -0
  300. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/line-height/index.d.ts +0 -0
  301. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/line-height/index.js +0 -0
  302. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/line-height/line-height.d.ts +0 -0
  303. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/line-height/line-height.js +0 -0
  304. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/selection/index.d.ts +0 -0
  305. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/selection/index.js +0 -0
  306. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/selection/selection.d.ts +0 -0
  307. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/selection/selection.js +0 -0
  308. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/text-transform/index.d.ts +0 -0
  309. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/text-transform/index.js +0 -0
  310. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions/text-transform/text-transform.d.ts +0 -0
  311. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/extensions.d.ts +0 -0
  312. /package/dist/components/{presentation-editor/layers/types/html → editor/layers/types/text}/html-content.svelte.d.ts +0 -0
  313. /package/dist/components/{presentation-editor → editor}/menu/layer-menu-content.svelte.d.ts +0 -0
  314. /package/dist/components/{presentation-editor → editor}/sidebar/color-sidebar/color-sidebar-color.svelte.d.ts +0 -0
  315. /package/dist/components/{presentation-editor → editor}/sidebar/color-sidebar/color-sidebar-gradient-picker.svelte.d.ts +0 -0
  316. /package/dist/components/{presentation-editor → editor}/sidebar/color-sidebar/color-sidebar.svelte.d.ts +0 -0
  317. /package/dist/components/{presentation-editor → editor}/sidebar/color-sidebar/index.d.ts +0 -0
  318. /package/dist/components/{presentation-editor → editor}/sidebar/color-sidebar/index.js +0 -0
  319. /package/dist/components/{presentation-editor → editor}/sidebar/font-sidebar/font-sidebar-button.svelte.d.ts +0 -0
  320. /package/dist/components/{presentation-editor → editor}/sidebar/font-sidebar/font-sidebar.svelte.d.ts +0 -0
  321. /package/dist/components/{presentation-editor → editor}/sidebar/font-sidebar/index.d.ts +0 -0
  322. /package/dist/components/{presentation-editor → editor}/sidebar/font-sidebar/index.js +0 -0
  323. /package/dist/components/{presentation-editor → editor}/sidebar/sidebar-text-tab-button.svelte.d.ts +0 -0
  324. /package/dist/components/{presentation-editor → editor}/sidebar/sidebar-text-tab.svelte.d.ts +0 -0
  325. /package/dist/components/{presentation-editor → editor}/sidebar/sidebar-uploads-tab.svelte.d.ts +0 -0
  326. /package/dist/components/{presentation-editor → editor}/sidebar/sidebar-wrapper.svelte.d.ts +0 -0
  327. /package/dist/components/{presentation-editor → editor}/sidebar/uploads-image.svelte.d.ts +0 -0
  328. /package/dist/components/{presentation-editor → editor}/snapping-guides.svelte +0 -0
  329. /package/dist/components/{presentation-editor → editor}/snapping-guides.svelte.d.ts +0 -0
  330. /package/dist/components/{presentation-editor → editor}/types.js +0 -0
@@ -1,11 +1,7 @@
1
1
  <script lang="ts">
2
2
  import OpacityIcon from 'svelte-radix/TransparencyGrid.svelte';
3
- import type {
4
- Layer,
5
- BackgroundImage,
6
- HistoryAction,
7
- } from '../../../types.js';
8
- import { getPresentationEditorContext } from '../../../presentation-editor.svelte.js';
3
+ import type { Layer, BackgroundImage, HistoryAction } from '../../../types.js';
4
+ import { getEditorContext } from '../../../editor.svelte.js';
9
5
  import * as Popover from '../../../../ui/popover/index.js';
10
6
  import { Button } from '../../../../ui/button/index.js';
11
7
  import { Slider } from '../../../../ui/slider/index.js';
@@ -18,17 +14,16 @@
18
14
 
19
15
  let { layers = $bindable() }: Props = $props();
20
16
 
21
- const editor = getPresentationEditorContext();
17
+ const editor = getEditorContext();
22
18
 
23
- let undo: { opacity: number | null } | null = null;
24
19
  let initial: (Layer & { state: Layer })[] | BackgroundImage | null = null;
25
- const debouncedHistoryPush = createDebouncedCallback((action: HistoryAction) => {
26
- editor.historyPush(action);
20
+ const debouncedHistoryPush = createDebouncedCallback((actions: HistoryAction[]) => {
21
+ editor.historyPush(actions);
27
22
  initial = null;
28
23
  }, 500);
29
24
 
30
25
  const getOpacity = (layer: Layer | BackgroundImage) =>
31
- parseFloat((100 - (layer.opacity ?? 1) * 100).toFixed(2));
26
+ parseFloat((100 - layer.opacity * 100).toFixed(2));
32
27
 
33
28
  const trasparency = $derived.by(() => {
34
29
  if (!Array.isArray(layers)) return getOpacity(layers);
@@ -49,54 +44,48 @@
49
44
  } else if (!(value >= min || value <= max)) {
50
45
  value = min;
51
46
  }
52
- const opacity = value ? (100 - value) / 100 : null;
47
+ const opacity = (100 - value) / 100;
53
48
 
54
49
  if (!initial) {
55
50
  initial = Array.isArray(layers)
56
51
  ? layers.map((layer) => ({ ...layer, state: layer }))
57
- : { ...layers };
52
+ : $state.snapshot(layers);
58
53
  }
59
54
 
60
- let action: HistoryAction;
55
+ let actions: HistoryAction[];
61
56
  const redo = { opacity };
62
57
  if (Array.isArray(initial)) {
63
- action = {
64
- type: 'layersGroup',
65
- actions: initial.map((layerWithState) => {
66
- const { state, ...layer } = layerWithState;
67
- const undo = { opacity: layer.opacity };
68
- Object.assign(state, redo);
69
- return {
70
- type: 'layer',
71
- slideId: editor.activeSlide.id,
72
- layer: { id: layer.id, type: layer.type },
73
- undo,
74
- redo,
75
- };
76
- }),
77
- };
58
+ actions = initial.map((layerWithState) => {
59
+ const { state, ...layer } = layerWithState;
60
+ const undo = { opacity: layer.opacity };
61
+ Object.assign(state, redo);
62
+ return {
63
+ type: 'layerUpdate',
64
+ pageId: editor.activePage.id,
65
+ layer: { id: layer.id, type: layer.type },
66
+ undo,
67
+ redo,
68
+ };
69
+ });
78
70
  } else {
79
71
  Object.assign(layers, redo);
80
- action = {
81
- type: 'backgroundImage',
82
- slideId: editor.activeSlide.id,
83
- undo: { opacity: initial.opacity },
84
- redo,
85
- };
72
+ actions = [
73
+ {
74
+ type: 'backgroundImageUpdate',
75
+ pageId: editor.activePage.id,
76
+ undo: { opacity: initial.opacity },
77
+ redo,
78
+ },
79
+ ];
86
80
  }
87
81
 
88
82
  if (debounce) {
89
- debouncedHistoryPush(action);
83
+ debouncedHistoryPush(actions);
90
84
  } else {
91
- editor.historyPush(action);
92
- undo = null;
85
+ editor.historyPush(actions);
86
+ initial = null;
93
87
  }
94
88
  };
95
-
96
- const onChange = (e: Event) => {
97
- const target = e.target as HTMLInputElement;
98
- setTransparency(target.value);
99
- };
100
89
  </script>
101
90
 
102
91
  <Popover.Root>
@@ -127,7 +116,7 @@
127
116
  inputmode="decimal"
128
117
  placeholder="--"
129
118
  value={trasparency}
130
- onchange={onChange}
119
+ onchange={(e) => setTransparency(e.currentTarget.value)}
131
120
  />
132
121
  </div>
133
122
  </div>
@@ -42,18 +42,17 @@
42
42
  import { cn } from '../../../../../utils.js';
43
43
  import {
44
44
  calculateGroupRotatedBoundingBox,
45
- calculateLayerTransform,
46
45
  calculateNewPosition,
47
46
  type Transform,
48
47
  } from '../../utils.js';
49
- import { getPresentationEditorContext } from '../../../presentation-editor.svelte.js';
48
+ import { getEditorContext } from '../../../editor.svelte.js';
50
49
  import type { Layer } from '../../../types.js';
51
50
 
52
51
  let { origin }: Props = $props();
53
52
 
54
53
  const type = `${origin}-origin-scale`;
55
54
 
56
- const editor = getPresentationEditorContext();
55
+ const editor = getEditorContext();
57
56
 
58
57
  let initial: {
59
58
  clientX: number;
@@ -76,13 +75,11 @@
76
75
  initial = {
77
76
  clientX: e.clientX,
78
77
  clientY: e.clientY,
79
- bbox:
78
+ bbox: $state.snapshot(
80
79
  editor.activeLayers.length === 1
81
- ? calculateLayerTransform(editor.activeLayers[0])
82
- : calculateGroupRotatedBoundingBox(
83
- editor.activeLayers.map(calculateLayerTransform),
84
- editor.activeGroupRotate,
85
- ),
80
+ ? editor.activeLayers[0]
81
+ : calculateGroupRotatedBoundingBox(editor.activeLayers, editor.activeGroupRotate),
82
+ ),
86
83
  layers: editor.activeLayers.map((layer) => ({ ...layer, state: layer })),
87
84
  };
88
85
  editor.activeAction = { id: actionId, type, cursor: cursor() };
@@ -99,32 +96,31 @@
99
96
  editor.activeAction = null;
100
97
  if (!initial || scaleFactor === 1) return;
101
98
 
102
- editor.historyPush({
103
- type: 'layersGroup',
104
- actions: initial.layers.map((layer) => {
99
+ editor.historyPush(
100
+ initial.layers.map((layer) => {
105
101
  if (editor.isLayerOutOfBounds(layer.state)) {
106
102
  return {
107
- type: 'layersRemove',
108
- slideId: editor.activeSlide.id,
109
- layers: [layer],
103
+ type: 'layerRemove',
104
+ pageId: editor.activePage.id,
105
+ layer,
110
106
  };
111
107
  } else {
112
108
  return {
113
- type: 'layer',
114
- slideId: editor.activeSlide.id,
109
+ type: 'layerUpdate',
110
+ pageId: editor.activePage.id,
115
111
  layer: { id: layer.id, type: layer.type },
116
112
  undo: { x: layer.x, y: layer.y, scale: layer.scale },
117
113
  redo: { x: layer.state.x, y: layer.state.y, scale: layer.state.scale },
118
114
  };
119
115
  }
120
116
  }),
121
- });
117
+ );
122
118
  };
123
119
 
124
120
  const onMouseMove = (e: MouseEvent) => {
125
121
  if (!initial || editor.activeAction?.id !== actionId) return;
126
122
 
127
- const { width, height, x, y, rotate } = initial.bbox;
123
+ const { width, height, x, y, rotate, scale } = initial.bbox;
128
124
  const angle = (rotate * Math.PI) / 180;
129
125
  const xDiff = (e.clientX - initial.clientX) / editor.zoom;
130
126
  const yDiff = (e.clientY - initial.clientY) / editor.zoom;
@@ -134,18 +130,18 @@
134
130
  // Define the new x2 and y2 coordinates based on the variant (corner being dragged)
135
131
  const originCoordinates = {
136
132
  'bottom-right': {
137
- x2: x + width - adjustedXDiff,
138
- y2: y + height - adjustedYDiff,
133
+ x2: x + width * scale - adjustedXDiff,
134
+ y2: y + height * scale - adjustedYDiff,
139
135
  },
140
136
  'bottom-left': {
141
- x2: x + width + adjustedXDiff,
142
- y2: y + height - adjustedYDiff,
137
+ x2: x + width * scale + adjustedXDiff,
138
+ y2: y + height * scale - adjustedYDiff,
143
139
  },
144
140
  'top-right': {
145
- x2: x + width - adjustedXDiff,
146
- y2: y + height + adjustedYDiff,
141
+ x2: x + width * scale - adjustedXDiff,
142
+ y2: y + height * scale + adjustedYDiff,
147
143
  },
148
- 'top-left': { x2: x + width + adjustedXDiff, y2: y + height + adjustedYDiff },
144
+ 'top-left': { x2: x + width * scale + adjustedXDiff, y2: y + height * scale + adjustedYDiff },
149
145
  };
150
146
 
151
147
  const { x2, y2 } = originCoordinates[origin];
@@ -169,19 +165,18 @@
169
165
  newHeight = 10;
170
166
  }
171
167
 
172
- scaleFactor = Math.max(newWidth / width, newHeight / height);
168
+ scaleFactor = Math.max(newWidth / (width * scale), newHeight / (height * scale));
173
169
 
174
170
  if (scaleFactor > 0) {
175
171
  const { newX, newY } = calculateNewPosition(
176
172
  origin,
177
- { x, y, width, height, rotate },
178
- width * scaleFactor,
179
- height * scaleFactor,
173
+ initial.bbox,
174
+ width * scale * scaleFactor,
175
+ height * scale * scaleFactor,
180
176
  );
181
177
  initial.layers.forEach((layer) => {
182
- const scale = layer.scale || 1;
183
178
  const newProps = {
184
- scale: scale * scaleFactor,
179
+ scale: layer.scale * scaleFactor,
185
180
  x: newX + (layer.x - x) * scaleFactor,
186
181
  y: newY + (layer.y - y) * scaleFactor,
187
182
  };
@@ -0,0 +1,418 @@
1
+ <script lang="ts" module>
2
+ import { tv, type VariantProps } from 'tailwind-variants';
3
+
4
+ const sideResizeControlVariants = tv({
5
+ slots: {
6
+ base: 'group absolute flex flex-col items-center justify-center pointer-events-none',
7
+ handler: 'absolute pointer-events-auto',
8
+ grip: 'rounded-sm bg-white group-active:bg-primary group-hover:bg-primary transition-colors',
9
+ cursor: '',
10
+ },
11
+ variants: {
12
+ origin: {
13
+ right: {
14
+ base: '-left-4 w-8 h-full',
15
+ handler: '-translate-x-2 w-4 h-full',
16
+ grip: 'w-1.5 h-4',
17
+ cursor: 'cursor-ew-resize',
18
+ },
19
+ left: {
20
+ base: '-right-4 w-8 h-full',
21
+ handler: 'translate-x-2 w-4 h-full',
22
+ grip: 'w-1.5 h-4',
23
+ cursor: 'cursor-ew-resize',
24
+ },
25
+ top: {
26
+ base: '-bottom-4 w-full h-8',
27
+ handler: 'translate-y-2 w-full h-4',
28
+ grip: 'w-4 h-1.5',
29
+ cursor: 'cursor-ns-resize',
30
+ },
31
+ bottom: {
32
+ base: '-top-4 w-full h-8',
33
+ handler: '-translate-y-2 w-full h-4',
34
+ grip: 'w-4 h-1.5',
35
+ cursor: 'cursor-ns-resize',
36
+ },
37
+ },
38
+ },
39
+ });
40
+
41
+ type Variants = VariantProps<typeof sideResizeControlVariants>;
42
+
43
+ interface Props extends Omit<Variants, 'origin'>, Required<Pick<Variants, 'origin'>> {}
44
+ </script>
45
+
46
+ <script lang="ts">
47
+ import { tick } from 'svelte';
48
+ import type { HistoryAction, Layer, LayerUpdateAction } from '../../../types.js';
49
+ import { getEditorContext } from '../../../editor.svelte.js';
50
+ import { cn } from '../../../../../utils.js';
51
+ import {
52
+ calculateGroupRotatedBoundingBox,
53
+ calculateNewPosition,
54
+ calculateNewSize,
55
+ calculateRelativeRects,
56
+ degToRad,
57
+ getRotatedBoundingBox,
58
+ rotatePoint,
59
+ type Transform,
60
+ } from '../../utils.js';
61
+
62
+ let { origin }: Props = $props();
63
+
64
+ const type = `${origin}-origin-resize`;
65
+
66
+ const editor = getEditorContext();
67
+
68
+ const { base, handler, grip, cursor } = sideResizeControlVariants({ origin });
69
+
70
+ type LayerState = {
71
+ [K in Layer as K['type']]: {
72
+ type: K['type'];
73
+ layer: K;
74
+ state: K;
75
+ };
76
+ }[Layer['type']];
77
+
78
+ type LayerStateWithoutGroup = Exclude<LayerState, { type: 'group' }>;
79
+
80
+ type Initial = {
81
+ clientX: number;
82
+ clientY: number;
83
+ bbox: Transform;
84
+ layers: LayerState[];
85
+ };
86
+
87
+ let initial: Initial | null = null;
88
+ let isChanged = false;
89
+ const actionId = editor.generateId();
90
+
91
+ const onMouseDown = (e: MouseEvent) => {
92
+ if (e.button !== 0) return;
93
+ e.preventDefault();
94
+ e.stopPropagation();
95
+ console.log(type, 'mousedown', e);
96
+
97
+ isChanged = false;
98
+
99
+ const createLayerState = (layer: Layer): LayerState =>
100
+ ({
101
+ type: layer.type,
102
+ layer: $state.snapshot(layer),
103
+ state: layer,
104
+ }) as LayerState;
105
+
106
+ initial = {
107
+ clientX: e.clientX,
108
+ clientY: e.clientY,
109
+ bbox: $state.snapshot(
110
+ editor.activeLayers.length === 1
111
+ ? editor.activeLayers[0]
112
+ : calculateGroupRotatedBoundingBox(editor.activeLayers, editor.activeGroupRotate),
113
+ ),
114
+ layers: editor.activeLayers
115
+ .flatMap((l) =>
116
+ l.type === 'group' ? [l, ...editor.findGroupChildren(editor.activePage, l.id)] : l,
117
+ )
118
+ .map(createLayerState),
119
+ };
120
+ editor.activeAction = { id: actionId, type, cursor: cursor() };
121
+ addEventListener('mousemove', onMouseMove);
122
+ addEventListener('mouseup', onMouseUp);
123
+ };
124
+
125
+ const onMouseUp = (e: MouseEvent) => {
126
+ console.log(type, 'mouseup', e);
127
+ removeEventListener('mousemove', onMouseMove);
128
+ removeEventListener('mouseup', onMouseUp);
129
+
130
+ if (editor.activeAction?.id !== actionId) return;
131
+ editor.activeAction = null;
132
+ if (!initial || !isChanged) return;
133
+
134
+ const buildLayerUpdateActionDiff = (
135
+ layer: Layer,
136
+ ): LayerUpdateAction['undo'] | LayerUpdateAction['redo'] => ({
137
+ x: layer.x,
138
+ y: layer.y,
139
+ width: layer.width,
140
+ height: layer.height,
141
+ ...(layer.type === 'image' && {
142
+ scale: layer.scale,
143
+ offsetX: layer.offsetX,
144
+ offsetY: layer.offsetY,
145
+ }),
146
+ });
147
+
148
+ const { layers } = initial;
149
+
150
+ editor.historyPush(
151
+ layers
152
+ .filter((l) => l.layer.type === 'group' || !l.layer.groupId)
153
+ .flatMap((layerState): HistoryAction | HistoryAction[] => {
154
+ if (editor.isLayerOutOfBounds(layerState.state)) {
155
+ return {
156
+ type: 'layerRemove',
157
+ pageId: editor.activePage.id,
158
+ layer: layerState.layer,
159
+ };
160
+ } else {
161
+ if (layerState.type === 'group') {
162
+ return [
163
+ {
164
+ type: 'layerUpdate',
165
+ pageId: editor.activePage.id,
166
+ layer: { id: layerState.layer.id, type: layerState.layer.type },
167
+ undo: buildLayerUpdateActionDiff(layerState.layer),
168
+ redo: buildLayerUpdateActionDiff(layerState.state),
169
+ },
170
+ ...layers
171
+ .filter((l) => l.type !== 'group')
172
+ .filter((l) => l.layer.groupId === layerState.layer.id)
173
+ .map(({ layer, state }): LayerUpdateAction => {
174
+ return {
175
+ type: 'layerUpdate',
176
+ pageId: editor.activePage.id,
177
+ layer: { id: layer.id, type: layer.type },
178
+ undo: buildLayerUpdateActionDiff(layer),
179
+ redo: buildLayerUpdateActionDiff(state),
180
+ };
181
+ }),
182
+ ];
183
+ }
184
+ return {
185
+ type: 'layerUpdate',
186
+ pageId: editor.activePage.id,
187
+ layer: { id: layerState.layer.id, type: layerState.layer.type },
188
+ undo: buildLayerUpdateActionDiff(layerState.layer),
189
+ redo: buildLayerUpdateActionDiff(layerState.state),
190
+ };
191
+ }
192
+ }),
193
+ );
194
+ };
195
+
196
+ const onMouseMove = async (e: MouseEvent) => {
197
+ if (!initial || editor.activeAction?.id !== actionId) return;
198
+
199
+ const { clientX, clientY, bbox, layers } = initial;
200
+ const groupAngle = degToRad(bbox.rotate);
201
+ const xDiff = (e.clientX - clientX) / editor.zoom;
202
+ const yDiff = (e.clientY - clientY) / editor.zoom;
203
+ const adjustedXDiff = xDiff * Math.cos(groupAngle) + yDiff * Math.sin(groupAngle);
204
+ const adjustedYDiff = -xDiff * Math.sin(groupAngle) + yDiff * Math.cos(groupAngle);
205
+
206
+ const groupAbsWidth = bbox.width * bbox.scale;
207
+ const groupAbsHeight = bbox.height * bbox.scale;
208
+ let groupNewWidth = bbox.width * bbox.scale;
209
+ let groupNewHeight = groupAbsHeight;
210
+ const minSize = 10;
211
+ if (origin === 'left') {
212
+ groupNewWidth = Math.max(groupAbsWidth + adjustedXDiff, minSize);
213
+ } else if (origin === 'top') {
214
+ groupNewHeight = Math.max(groupAbsHeight + adjustedYDiff, minSize);
215
+ } else if (origin === 'right') {
216
+ groupNewWidth = Math.max(groupAbsWidth - adjustedXDiff, minSize);
217
+ } else if (origin === 'bottom') {
218
+ groupNewHeight = Math.max(groupAbsHeight - adjustedYDiff, minSize);
219
+ }
220
+
221
+ isChanged = groupNewWidth !== groupAbsWidth || groupNewHeight !== groupAbsHeight;
222
+
223
+ const { newX: groupNewX, newY: groupNewY } = calculateNewPosition(
224
+ origin,
225
+ bbox,
226
+ groupNewWidth,
227
+ groupNewHeight,
228
+ );
229
+
230
+ const widthScale = groupNewWidth / groupAbsWidth;
231
+ const heightScale = groupNewHeight / groupAbsHeight;
232
+
233
+ const groupCenter = {
234
+ x: bbox.x + groupAbsWidth / 2,
235
+ y: bbox.y + groupAbsHeight / 2,
236
+ };
237
+ const groupNewCenter = { x: groupNewX + groupNewWidth / 2, y: groupNewY + groupNewHeight / 2 };
238
+ // calculate rotated points relative to new group center
239
+ const groupCenterRotated = rotatePoint(-groupAngle, groupCenter, groupNewCenter);
240
+
241
+ const buildLayerDiffs = async ({ layer, state }: LayerStateWithoutGroup) => {
242
+ // do calculation with absolute values, but update state with relative values
243
+ const { width, height, x, y, rotate, scale } = layer;
244
+ const center = { x: x + (width * scale) / 2, y: y + (height * scale) / 2 };
245
+ const centerRotated = rotatePoint(-groupAngle, center, groupNewCenter);
246
+ const newCenterRotated = {
247
+ x: groupNewCenter.x + (centerRotated.x - groupCenterRotated.x) * widthScale,
248
+ y: groupNewCenter.y + (centerRotated.y - groupCenterRotated.y) * heightScale,
249
+ };
250
+
251
+ // rotate relative to the bbox
252
+ const rotateRelative = rotate - bbox.rotate;
253
+
254
+ const isHorizontal = origin === 'left' || origin === 'right';
255
+ const bboxScale = isHorizontal ? widthScale : heightScale;
256
+ const newSize = calculateNewSize(width, height, rotateRelative, bboxScale, isHorizontal);
257
+
258
+ let newWidth = newSize.width * scale;
259
+ let newHeight = newSize.height * scale;
260
+ let newScale = scale;
261
+
262
+ if (layer.type === 'text') {
263
+ if (newSize.scaled === 'height') {
264
+ newHeight = height * scale;
265
+ } else {
266
+ Object.assign(state, {
267
+ width: newWidth / scale,
268
+ });
269
+ await tick();
270
+
271
+ const layerContent = document.getElementById(`layer-content-${layer.id}`);
272
+ if (layerContent) {
273
+ newHeight = layerContent.offsetHeight * scale;
274
+ }
275
+ }
276
+ }
277
+
278
+ if (newWidth < minSize) {
279
+ newWidth = minSize;
280
+ }
281
+ if (newHeight < minSize) {
282
+ newHeight = minSize;
283
+ }
284
+
285
+ const bboxRotated = getRotatedBoundingBox(centerRotated, newWidth, newHeight, rotateRelative);
286
+
287
+ if (origin === 'left' || origin === 'right') {
288
+ const minX = groupNewX + bboxRotated.width / 2;
289
+ const maxX = groupNewX + groupNewWidth - bboxRotated.width / 2;
290
+ newCenterRotated.x =
291
+ origin === 'left'
292
+ ? Math.max(Math.min(newCenterRotated.x, maxX), minX)
293
+ : Math.min(Math.max(newCenterRotated.x, minX), maxX);
294
+ } else {
295
+ const minY = groupNewY + bboxRotated.height / 2;
296
+ const maxY = groupNewY + groupNewHeight - bboxRotated.height / 2;
297
+ newCenterRotated.y =
298
+ origin === 'top'
299
+ ? Math.max(Math.min(newCenterRotated.y, maxY), minY)
300
+ : Math.min(Math.max(newCenterRotated.y, minY), maxY);
301
+ }
302
+
303
+ let newCenter = rotatePoint(degToRad(bbox.rotate), newCenterRotated, groupNewCenter);
304
+
305
+ if (layer.type === 'image') {
306
+ const { offsetX, offsetY, image } = layer;
307
+
308
+ let newOffsetX = layer.offsetX;
309
+ let newOffsetY = offsetY;
310
+
311
+ if (newSize.scaled === 'width') {
312
+ const maxOffsetDiff = Math.min(offsetX, image.width + offsetX - width);
313
+ const maxWidth = (width + Math.max(maxOffsetDiff, 0) * 2) * scale;
314
+ if (newWidth > maxWidth) {
315
+ newScale *= newWidth / maxWidth;
316
+ newOffsetX = offsetX + maxOffsetDiff;
317
+ newOffsetY -= ((layer.image.height / 2 + offsetY) * (newScale - scale)) / newScale;
318
+ } else {
319
+ newOffsetX += (newWidth / newScale - width) / 2;
320
+ }
321
+ } else {
322
+ const maxOffsetDiff = Math.min(offsetY, image.height + offsetY - height);
323
+ const maxHeight = (height + Math.max(maxOffsetDiff, 0) * 2) * scale;
324
+ if (newHeight > maxHeight) {
325
+ newScale *= newHeight / maxHeight;
326
+ newOffsetY = offsetY + maxOffsetDiff;
327
+ newOffsetX -= ((layer.image.width / 2 + offsetX) * (newScale - scale)) / newScale;
328
+ } else {
329
+ newOffsetY += (newHeight / newScale - height) / 2;
330
+ }
331
+ }
332
+
333
+ return {
334
+ x: newCenter.x - newWidth / 2,
335
+ y: newCenter.y - newHeight / 2,
336
+ width: newWidth / newScale,
337
+ height: newHeight / newScale,
338
+ scale: newScale,
339
+ offsetX: newOffsetX,
340
+ offsetY: newOffsetY,
341
+ };
342
+ } else {
343
+ return {
344
+ x: newCenter.x - newWidth / 2,
345
+ y: newCenter.y - newHeight / 2,
346
+ width: newWidth / newScale,
347
+ height: newHeight / newScale,
348
+ scale: newScale,
349
+ };
350
+ }
351
+ };
352
+
353
+ await Promise.all(
354
+ layers
355
+ .filter((l) => l.layer.type === 'group' || !l.layer.groupId)
356
+ .map(async (layerState) => {
357
+ if (layerState.type === 'group') {
358
+ const childrenState = layers
359
+ .filter((l) => l.type !== 'group')
360
+ .filter((l) => l.layer.groupId === layerState.layer.id);
361
+ const absoluteChildren = editor.getAbsoluteGroupLayers(
362
+ layerState.layer,
363
+ childrenState.map((l) => l.layer),
364
+ );
365
+ const diffs = await Promise.all(
366
+ childrenState.map(({ state }, i) =>
367
+ buildLayerDiffs({
368
+ type: state.type,
369
+ layer: absoluteChildren[i],
370
+ state,
371
+ } as LayerStateWithoutGroup),
372
+ ),
373
+ );
374
+ absoluteChildren.forEach((absolute, i) => Object.assign(absolute, diffs[i]));
375
+ const groupScale = layerState.layer.scale;
376
+ const groupRotate = layerState.layer.rotate;
377
+ const newGroupBbox = calculateGroupRotatedBoundingBox(absoluteChildren, groupRotate);
378
+ Object.assign(layerState.state, {
379
+ x: newGroupBbox.x,
380
+ y: newGroupBbox.y,
381
+ width: newGroupBbox.width / groupScale,
382
+ height: newGroupBbox.height / groupScale,
383
+ });
384
+ const relativeLayers = calculateRelativeRects(newGroupBbox, absoluteChildren);
385
+ await Promise.all(
386
+ childrenState.map(({ state }, i) => {
387
+ const diff = diffs[i];
388
+ const relativeLayer = relativeLayers[i];
389
+ Object.assign(state, diff, {
390
+ x: relativeLayer.x / groupScale,
391
+ y: relativeLayer.y / groupScale,
392
+ scale: diff.scale / groupScale,
393
+ });
394
+ }),
395
+ );
396
+ } else {
397
+ const diffs = await buildLayerDiffs(layerState);
398
+ Object.assign(layerState.state, diffs);
399
+ }
400
+ }),
401
+ );
402
+
403
+ editor.activeAction.tooltip = {
404
+ x: e.clientX,
405
+ y: e.clientY,
406
+ text: `w: ${Math.round(groupNewWidth)} h: ${Math.round(groupNewHeight)}`,
407
+ };
408
+ };
409
+ </script>
410
+
411
+ <div class={base()}>
412
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
413
+ <div class={cn(handler(), cursor())} onmousedown={onMouseDown}></div>
414
+ <div
415
+ class={grip()}
416
+ style:box-shadow="0 0 4px 1px rgba(57,76,96,.15), 0 0 0 1px rgba(43,59,74,.3)"
417
+ ></div>
418
+ </div>