@widgetic/editor 3.11.4 → 4.0.2

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 (497) hide show
  1. package/README.md +245 -0
  2. package/dist/assets/fonts.json +331 -0
  3. package/dist/assets/icons/ic-browser/audio.svg +7 -0
  4. package/dist/assets/icons/ic-browser/document.svg +11 -0
  5. package/dist/assets/icons/ic-browser/error.svg +5 -0
  6. package/dist/assets/icons/ic-browser/folder.svg +28 -0
  7. package/dist/assets/icons/ic-browser/player-pause.svg +1 -0
  8. package/dist/assets/icons/ic-browser/player-play.svg +1 -0
  9. package/dist/assets/icons/ic-browser/trash.svg +1 -0
  10. package/dist/assets/icons/ic-fixed-position/background-deselected.svg +3 -0
  11. package/dist/assets/icons/ic-fixed-position/background-selected.svg +3 -0
  12. package/dist/assets/icons/ic-fixed-position/bottom-left-background-deselected.svg +3 -0
  13. package/dist/assets/icons/ic-fixed-position/bottom-left-background-selected.svg +3 -0
  14. package/dist/assets/icons/ic-fixed-position/bottom-left-icon.svg +4 -0
  15. package/dist/assets/icons/ic-fixed-position/bottom-right-background-deselected.svg +3 -0
  16. package/dist/assets/icons/ic-fixed-position/bottom-right-background-selected.svg +3 -0
  17. package/dist/assets/icons/ic-fixed-position/bottom-right-icon.svg +4 -0
  18. package/dist/assets/icons/ic-fixed-position/center-bottom-icon.svg +5 -0
  19. package/dist/assets/icons/ic-fixed-position/center-center-icon.svg +3 -0
  20. package/dist/assets/icons/ic-fixed-position/center-left-icon.svg +5 -0
  21. package/dist/assets/icons/ic-fixed-position/center-right-icon.svg +5 -0
  22. package/dist/assets/icons/ic-fixed-position/center-top-icon.svg +5 -0
  23. package/dist/assets/icons/ic-fixed-position/top-left-background-deselected.svg +3 -0
  24. package/dist/assets/icons/ic-fixed-position/top-left-background-selected.svg +3 -0
  25. package/dist/assets/icons/ic-fixed-position/top-left-icon.svg +4 -0
  26. package/dist/assets/icons/ic-fixed-position/top-right-background-deselected.svg +3 -0
  27. package/dist/assets/icons/ic-fixed-position/top-right-background-selected.svg +3 -0
  28. package/dist/assets/icons/ic-fixed-position/top-right-icon.svg +4 -0
  29. package/dist/assets/icons/trash.svg +1 -0
  30. package/dist/components/MockWidget.svelte +108 -0
  31. package/dist/components/MockWidget.svelte.d.ts +22 -0
  32. package/dist/components/WidgetPreview.svelte +852 -0
  33. package/dist/components/WidgetPreview.svelte.d.ts +100 -0
  34. package/dist/components/color-select/ColorSelect.svelte +258 -0
  35. package/dist/components/color-select/ColorSelect.svelte.d.ts +42 -0
  36. package/dist/components/color-select/color.d.ts +25 -0
  37. package/dist/components/color-select/color.js +21 -0
  38. package/dist/components/color-select/constants.d.ts +5 -0
  39. package/dist/components/color-select/constants.js +5 -0
  40. package/dist/components/color-select/render.d.ts +5 -0
  41. package/dist/components/color-select/render.js +77 -0
  42. package/dist/components/color-select/shaders.d.ts +3 -0
  43. package/dist/components/color-select/shaders.js +8 -0
  44. package/dist/components/editors/EmbedEditor.svelte +700 -0
  45. package/dist/components/editors/EmbedEditor.svelte.d.ts +50 -0
  46. package/dist/components/editors/PropsEditor.svelte +4009 -0
  47. package/dist/components/editors/PropsEditor.svelte.d.ts +62 -0
  48. package/dist/components/editors/props-editor.css +73 -0
  49. package/dist/components/ic/AngleInputController.svelte +276 -0
  50. package/dist/components/ic/AngleInputController.svelte.d.ts +26 -0
  51. package/dist/components/ic/BrowserInputController.svelte +731 -0
  52. package/dist/components/ic/BrowserInputController.svelte.d.ts +39 -0
  53. package/dist/components/ic/CheckboxInputController.svelte +203 -0
  54. package/dist/components/ic/CheckboxInputController.svelte.d.ts +41 -0
  55. package/dist/components/ic/ColorPickerInputController.svelte +1584 -0
  56. package/dist/components/ic/ColorPickerInputController.svelte.d.ts +50 -0
  57. package/dist/components/ic/DateFieldInputController.svelte +453 -0
  58. package/dist/components/ic/DateFieldInputController.svelte.d.ts +35 -0
  59. package/dist/components/ic/DatePickerInputController.svelte +364 -0
  60. package/dist/components/ic/DatePickerInputController.svelte.d.ts +28 -0
  61. package/dist/components/ic/DropdownInputController.svelte +226 -0
  62. package/dist/components/ic/DropdownInputController.svelte.d.ts +43 -0
  63. package/dist/components/ic/FixedPositionInputController.svelte +353 -0
  64. package/dist/components/ic/FixedPositionInputController.svelte.d.ts +23 -0
  65. package/dist/components/ic/FontInputController.svelte +2098 -0
  66. package/dist/components/ic/FontInputController.svelte.d.ts +47 -0
  67. package/dist/components/ic/InputControllerHeader.svelte +147 -0
  68. package/dist/components/ic/InputControllerHeader.svelte.d.ts +23 -0
  69. package/dist/components/ic/NumberControls.svelte +299 -0
  70. package/dist/components/ic/NumberControls.svelte.d.ts +30 -0
  71. package/dist/components/ic/NumberInputController.svelte +397 -0
  72. package/dist/components/ic/NumberInputController.svelte.d.ts +30 -0
  73. package/dist/components/ic/PositionInputController.svelte +252 -0
  74. package/dist/components/ic/PositionInputController.svelte.d.ts +37 -0
  75. package/dist/components/ic/RadioGroupInputController.svelte +162 -0
  76. package/dist/components/ic/RadioGroupInputController.svelte.d.ts +38 -0
  77. package/dist/components/ic/RangeCalendarInputController.svelte +262 -0
  78. package/dist/components/ic/RangeCalendarInputController.svelte.d.ts +32 -0
  79. package/dist/components/ic/RoundedCornersInputController.svelte +469 -0
  80. package/dist/components/ic/RoundedCornersInputController.svelte.d.ts +37 -0
  81. package/dist/components/ic/SliderInputController.svelte +411 -0
  82. package/dist/components/ic/SliderInputController.svelte.d.ts +46 -0
  83. package/dist/components/ic/SliderRangeInputController.svelte +155 -0
  84. package/dist/components/ic/SliderRangeInputController.svelte.d.ts +33 -0
  85. package/dist/components/ic/SwitchInputController.svelte +107 -0
  86. package/dist/components/ic/SwitchInputController.svelte.d.ts +24 -0
  87. package/dist/components/ic/TagsInputController.svelte +125 -0
  88. package/dist/components/ic/TagsInputController.svelte.d.ts +27 -0
  89. package/dist/components/ic/TextAreaInputController.svelte +1932 -0
  90. package/dist/components/ic/TextAreaInputController.svelte.d.ts +14 -0
  91. package/dist/components/ic/TextAreaPreviewInputController.svelte +478 -0
  92. package/dist/components/ic/TextAreaPreviewInputController.svelte.d.ts +28 -0
  93. package/dist/components/ic/TextInputController.svelte +70 -0
  94. package/dist/components/ic/TextInputController.svelte.d.ts +30 -0
  95. package/dist/components/ic/TimeInputController.svelte +434 -0
  96. package/dist/components/ic/TimeInputController.svelte.d.ts +25 -0
  97. package/dist/components/ic/VectorInputController.svelte +1826 -0
  98. package/dist/components/ic/VectorInputController.svelte.d.ts +47 -0
  99. package/dist/components/ic/index.d.ts +39 -0
  100. package/dist/components/ic/index.js +24 -0
  101. package/dist/components/ic/shared/CategoryTabs.svelte +40 -0
  102. package/dist/components/ic/shared/CategoryTabs.svelte.d.ts +25 -0
  103. package/dist/components/ic/shared/ItemGrid.svelte +181 -0
  104. package/dist/components/ic/shared/ItemGrid.svelte.d.ts +35 -0
  105. package/dist/components/ic/shared/RecentItemsSection.svelte +260 -0
  106. package/dist/components/ic/shared/RecentItemsSection.svelte.d.ts +35 -0
  107. package/dist/components/ic/shared/index.d.ts +8 -0
  108. package/dist/components/ic/shared/index.js +9 -0
  109. package/dist/components/icons/addnew.svelte +21 -0
  110. package/dist/components/icons/addnew.svelte.d.ts +20 -0
  111. package/dist/components/icons/drag.svelte +29 -0
  112. package/dist/components/icons/drag.svelte.d.ts +20 -0
  113. package/dist/components/icons/drag.svg +1 -0
  114. package/dist/components/icons/locked.svelte +4 -0
  115. package/dist/components/icons/locked.svelte.d.ts +26 -0
  116. package/dist/components/icons/locked.svg +4 -0
  117. package/dist/components/icons/ok.svelte +20 -0
  118. package/dist/components/icons/ok.svelte.d.ts +20 -0
  119. package/dist/components/icons/ok.svg +11 -0
  120. package/dist/components/icons/unlocked.svelte +4 -0
  121. package/dist/components/icons/unlocked.svelte.d.ts +26 -0
  122. package/dist/components/icons/unlocked.svg +4 -0
  123. package/dist/components/icons/x.svelte +14 -0
  124. package/dist/components/icons/x.svelte.d.ts +20 -0
  125. package/dist/components/icons/x.svg +5 -0
  126. package/dist/components/ui/arrows/OpacitySliderArrows.svelte +43 -0
  127. package/dist/components/ui/arrows/OpacitySliderArrows.svelte.d.ts +23 -0
  128. package/dist/components/ui/checkerboard-background/CheckerboardBackground.svelte +15 -0
  129. package/dist/components/ui/checkerboard-background/CheckerboardBackground.svelte.d.ts +20 -0
  130. package/dist/config.d.ts +11 -0
  131. package/dist/config.js +31 -0
  132. package/dist/index.d.ts +5 -0
  133. package/dist/index.js +9 -0
  134. package/dist/stores/userSession.d.ts +7 -0
  135. package/dist/stores/userSession.js +28 -0
  136. package/dist/utils/FontManager.d.ts +278 -0
  137. package/dist/utils/FontManager.js +1302 -0
  138. package/dist/utils/MediaManager.d.ts +35 -0
  139. package/dist/utils/MediaManager.js +59 -0
  140. package/dist/utils/VectorManager.d.ts +190 -0
  141. package/dist/utils/VectorManager.js +754 -0
  142. package/dist/utils/colorAutocomplete.d.ts +10 -0
  143. package/dist/utils/colorAutocomplete.js +28 -0
  144. package/dist/utils/colorNames.d.ts +3 -0
  145. package/dist/utils/colorNames.js +152 -0
  146. package/dist/utils/colorTransparency.d.ts +52 -0
  147. package/dist/utils/colorTransparency.js +114 -0
  148. package/dist/utils/fontUtils.d.ts +34 -0
  149. package/dist/utils/fontUtils.js +132 -0
  150. package/dist/utils/passiveEvents.js +20 -0
  151. package/dist/utils/recentColors.d.ts +10 -0
  152. package/dist/utils/recentColors.js +63 -0
  153. package/dist/utils/skipFonts.d.ts +3 -0
  154. package/dist/utils/skipFonts.js +49 -0
  155. package/dist/utils/vectorUtils.d.ts +34 -0
  156. package/dist/utils/vectorUtils.js +71 -0
  157. package/dist/utils.d.ts +11 -0
  158. package/dist/utils.js +38 -0
  159. package/package.json +134 -74
  160. package/.babelrc +0 -10
  161. package/.bowerrc +0 -4
  162. package/.nvmrc +0 -1
  163. package/Gruntfile.coffee +0 -69
  164. package/bower.json +0 -28
  165. package/css/browser/entries/activateable.styl +0 -29
  166. package/css/browser/entries/audio.styl +0 -39
  167. package/css/browser/entries/folder.styl +0 -79
  168. package/css/browser/entries/image.styl +0 -26
  169. package/css/browser/entries/index.styl +0 -66
  170. package/css/browser/entries/rss.styl +0 -11
  171. package/css/browser/entries/video.styl +0 -11
  172. package/css/browser/index.styl +0 -86
  173. package/css/browser/intent/index.styl +0 -61
  174. package/css/browser/nav/index.styl +0 -73
  175. package/css/browser/social-browser.styl +0 -23
  176. package/css/controls/clock.styl +0 -110
  177. package/css/controls/config.styl +0 -6
  178. package/css/controls/control-audio-details.styl +0 -63
  179. package/css/controls/control-audio.styl +0 -28
  180. package/css/controls/control-browser.styl +0 -48
  181. package/css/controls/control-color.styl +0 -423
  182. package/css/controls/control-date_time.styl +0 -191
  183. package/css/controls/control-dropdown.styl +0 -79
  184. package/css/controls/control-font.styl +0 -147
  185. package/css/controls/control-image-details.styl +0 -35
  186. package/css/controls/control-image.styl +0 -43
  187. package/css/controls/control-order-picker.styl +0 -29
  188. package/css/controls/control-position.styl +0 -390
  189. package/css/controls/control-range.styl +0 -68
  190. package/css/controls/control-scale.styl +0 -30
  191. package/css/controls/control-slider.styl +0 -38
  192. package/css/controls/control-spinner.styl +0 -39
  193. package/css/controls/control-textarea.styl +0 -52
  194. package/css/controls/control-toggle.styl +0 -34
  195. package/css/controls/control-url.styl +0 -32
  196. package/css/controls/control-video-details.styl +0 -85
  197. package/css/controls/control-video.styl +0 -43
  198. package/css/controls/general.styl +0 -98
  199. package/css/controls/index.styl +0 -25
  200. package/css/editor/colors.styl +0 -7
  201. package/css/editor/content/directinput.styl +0 -47
  202. package/css/editor/content/index.styl +0 -111
  203. package/css/editor/content/message.styl +0 -53
  204. package/css/editor/content/tabs.styl +0 -75
  205. package/css/editor/copied-from-old-style.styl +0 -197
  206. package/css/editor/details/bulk-editor.styl +0 -104
  207. package/css/editor/details/index.styl +0 -21
  208. package/css/editor/details/item.styl +0 -153
  209. package/css/editor/embed.styl +0 -106
  210. package/css/editor/footer.styl +0 -180
  211. package/css/editor/full-editor.styl +0 -16
  212. package/css/editor/index.styl +0 -124
  213. package/css/editor/login-popup.styl +0 -13
  214. package/css/editor/preview.styl +0 -257
  215. package/css/editor/skin/editor/index.styl +0 -54
  216. package/css/editor/skin/editor/tabs.styl +0 -111
  217. package/css/editor/skin/index.styl +0 -138
  218. package/css/editor/skin/popup.styl +0 -152
  219. package/css/editor/skin/presets/dropdown.styl +0 -61
  220. package/css/editor/skin/presets/index.styl +0 -86
  221. package/css/editor/skin/presets/list.styl +0 -244
  222. package/css/editor/tooltips.styl +0 -85
  223. package/css/fonts.styl +0 -47
  224. package/css/icons/BlogvioEditor.dev.svg +0 -112
  225. package/css/icons.styl +0 -16
  226. package/css/img/arrow-right-rounded-v-small.png +0 -0
  227. package/css/img/browser-folder-separator.png +0 -0
  228. package/css/img/calendar-input-icons.png +0 -0
  229. package/css/img/check.png +0 -0
  230. package/css/img/close.png +0 -0
  231. package/css/img/composition/edit-icon.png +0 -0
  232. package/css/img/content/audio-icon.png +0 -0
  233. package/css/img/content/folder-icon.png +0 -0
  234. package/css/img/content/messages/error-background.png +0 -0
  235. package/css/img/content/messages/error-icon.png +0 -0
  236. package/css/img/content/messages/notification-background.png +0 -0
  237. package/css/img/content/messages/notification-icon.png +0 -0
  238. package/css/img/content/no-files-audio.png +0 -0
  239. package/css/img/content/no-files-image.png +0 -0
  240. package/css/img/content/no-files-video.png +0 -0
  241. package/css/img/content/no-files.png +0 -0
  242. package/css/img/content/rss-icon.png +0 -0
  243. package/css/img/content/selected.png +0 -0
  244. package/css/img/content/video-icon.png +0 -0
  245. package/css/img/content/with-control-text.png +0 -0
  246. package/css/img/control-dropdown-arrow.png +0 -0
  247. package/css/img/control-image-valid.png +0 -0
  248. package/css/img/control-position-icon.png +0 -0
  249. package/css/img/control-scale-lock-icon.png +0 -0
  250. package/css/img/control-slider-arrows-hover.png +0 -0
  251. package/css/img/control-slider-arrows.png +0 -0
  252. package/css/img/control-spinner-buttons-hover.png +0 -0
  253. package/css/img/control-spinner-buttons.png +0 -0
  254. package/css/img/control-textarea-bold-active.png +0 -0
  255. package/css/img/control-textarea-bold.png +0 -0
  256. package/css/img/control-textarea-italic-active.png +0 -0
  257. package/css/img/control-textarea-italic.png +0 -0
  258. package/css/img/control-textarea-underline-active.png +0 -0
  259. package/css/img/control-textarea-underline.png +0 -0
  260. package/css/img/custom-checkbox-sprite.png +0 -0
  261. package/css/img/details/item-collapse-icon.png +0 -0
  262. package/css/img/details/item-expand-icon.png +0 -0
  263. package/css/img/details/item-sort-icon.png +0 -0
  264. package/css/img/done-arrow.png +0 -0
  265. package/css/img/fb-logo-icon-w.png +0 -0
  266. package/css/img/grid-icons.png +0 -0
  267. package/css/img/icon-reference.png +0 -0
  268. package/css/img/indicator.png +0 -0
  269. package/css/img/loader.gif +0 -0
  270. package/css/img/loaders/audio-white.png +0 -0
  271. package/css/img/loaders/audio.png +0 -0
  272. package/css/img/loaders/photo-white.png +0 -0
  273. package/css/img/loaders/photo.png +0 -0
  274. package/css/img/loaders/util-white.png +0 -0
  275. package/css/img/loaders/util.png +0 -0
  276. package/css/img/loaders/video-white.png +0 -0
  277. package/css/img/loaders/video.png +0 -0
  278. package/css/img/maximize.png +0 -0
  279. package/css/img/minimize.png +0 -0
  280. package/css/img/next-btn.png +0 -0
  281. package/css/img/search-icon-sprite.png +0 -0
  282. package/css/img/services/blogvio.png +0 -0
  283. package/css/img/services/drive.png +0 -0
  284. package/css/img/services/dropbox-login.png +0 -0
  285. package/css/img/services/dropbox.png +0 -0
  286. package/css/img/services/facebook-login.png +0 -0
  287. package/css/img/services/facebook.png +0 -0
  288. package/css/img/services/flickr-login.png +0 -0
  289. package/css/img/services/flickr.png +0 -0
  290. package/css/img/services/instagram-login.png +0 -0
  291. package/css/img/services/instagram.png +0 -0
  292. package/css/img/services/text.png +0 -0
  293. package/css/img/services/uploads.png +0 -0
  294. package/css/img/services/uploads.svg +0 -689
  295. package/css/img/services/webaddress-bw.png +0 -0
  296. package/css/img/services/webaddress.png +0 -0
  297. package/css/img/services/webadress.png +0 -0
  298. package/css/img/services/websearch.png +0 -0
  299. package/css/img/services/wix.png +0 -0
  300. package/css/img/skin/item-active-indicator.png +0 -0
  301. package/css/img/skin/item-hover-icon.png +0 -0
  302. package/css/img/skin/overwrite.png +0 -0
  303. package/css/img/skin/popup-name-icon.png +0 -0
  304. package/css/img/skin/popup-save.png +0 -0
  305. package/css/img/skin/preset.png +0 -0
  306. package/css/img/skin/presets-arrow-purple.png +0 -0
  307. package/css/img/tw-icon-w.png +0 -0
  308. package/css/img/warning.png +0 -0
  309. package/css/img/white-rounded-check.png +0 -0
  310. package/css/index.styl +0 -9
  311. package/css/mixins.styl +0 -62
  312. package/css/scrollable.styl +0 -101
  313. package/karma.conf.js +0 -73
  314. package/lib/control.js +0 -1
  315. package/lib/controls.js +0 -1
  316. package/lib/core.editor.js +0 -4
  317. package/lib/core.js +0 -1
  318. package/lib/core.vendor.js +0 -3
  319. package/lib/dev/control.js +0 -845
  320. package/lib/dev/controls.js +0 -7774
  321. package/lib/dev/core.editor.js +0 -6439
  322. package/lib/dev/core.js +0 -1486
  323. package/lib/dev/core.vendor.js +0 -10708
  324. package/lib/dev/editor.css +0 -166
  325. package/lib/dev/editor.js +0 -29710
  326. package/lib/dev/editor.vendor.js +0 -15119
  327. package/lib/dev/jquery.nanoscroller.js.map +0 -10
  328. package/lib/editor.css +0 -167
  329. package/lib/editor.js +0 -49
  330. package/lib/editor.vendor.js +0 -11
  331. package/src/api/index.coffee +0 -23
  332. package/src/api/mixin.coffee +0 -89
  333. package/src/browser/controller/entry/audio.coffee +0 -38
  334. package/src/browser/controller/entry/button.coffee +0 -16
  335. package/src/browser/controller/entry/file.coffee +0 -35
  336. package/src/browser/controller/entry/folder.coffee +0 -14
  337. package/src/browser/controller/entry/image.coffee +0 -24
  338. package/src/browser/controller/entry/index.coffee +0 -18
  339. package/src/browser/controller/entry/rss.coffee +0 -5
  340. package/src/browser/controller/entry/video.coffee +0 -4
  341. package/src/browser/controller/index.coffee +0 -289
  342. package/src/browser/controller/instagram.coffee +0 -129
  343. package/src/browser/controller/navbar.coffee +0 -48
  344. package/src/browser/controller/social.coffee +0 -213
  345. package/src/browser/model/entry.coffee +0 -18
  346. package/src/browser/model/index.coffee +0 -34
  347. package/src/core/controller/font-loader.coffee +0 -65
  348. package/src/core/controller/lazyload.coffee +0 -14
  349. package/src/core/controller/overlay.coffee +0 -146
  350. package/src/core/controller/popup.coffee +0 -36
  351. package/src/core/controller/scrollable.coffee +0 -68
  352. package/src/core/controls/audio.coffee +0 -56
  353. package/src/core/controls/browser.coffee +0 -271
  354. package/src/core/controls/color.coffee +0 -121
  355. package/src/core/controls/date-time/calendar/index.coffee +0 -99
  356. package/src/core/controls/date-time/calendar/months.coffee +0 -52
  357. package/src/core/controls/date-time/calendar/years.coffee +0 -58
  358. package/src/core/controls/date-time/clock.coffee +0 -62
  359. package/src/core/controls/date-time/helper.coffee +0 -31
  360. package/src/core/controls/date-time/index.coffee +0 -62
  361. package/src/core/controls/date-time/popup.coffee +0 -56
  362. package/src/core/controls/details/audio.coffee +0 -33
  363. package/src/core/controls/details/image.coffee +0 -19
  364. package/src/core/controls/details/video.coffee +0 -14
  365. package/src/core/controls/dropdown.coffee +0 -100
  366. package/src/core/controls/font/font-item.coffee +0 -22
  367. package/src/core/controls/font/font-list.coffee +0 -108
  368. package/src/core/controls/font/fonts-popup.coffee +0 -91
  369. package/src/core/controls/font/index.coffee +0 -66
  370. package/src/core/controls/image.coffee +0 -37
  371. package/src/core/controls/index.coffee +0 -88
  372. package/src/core/controls/orderPicker.coffee +0 -93
  373. package/src/core/controls/position/grid-panel.coffee +0 -75
  374. package/src/core/controls/position/index.coffee +0 -98
  375. package/src/core/controls/position/panel.coffee +0 -68
  376. package/src/core/controls/position/pixel-panel.coffee +0 -54
  377. package/src/core/controls/position/popup.coffee +0 -63
  378. package/src/core/controls/position/reference-panel.coffee +0 -26
  379. package/src/core/controls/range.coffee +0 -191
  380. package/src/core/controls/rss.coffee +0 -16
  381. package/src/core/controls/scale.coffee +0 -78
  382. package/src/core/controls/slider.coffee +0 -122
  383. package/src/core/controls/stepper.coffee +0 -97
  384. package/src/core/controls/text.coffee +0 -54
  385. package/src/core/controls/textarea.coffee +0 -78
  386. package/src/core/controls/toggle.coffee +0 -29
  387. package/src/core/controls/url.coffee +0 -88
  388. package/src/core/controls/video.coffee +0 -9
  389. package/src/core/embed/api.js +0 -178
  390. package/src/core/embed/controller.js +0 -331
  391. package/src/core/models/composition.coffee +0 -178
  392. package/src/core/models/content.coffee +0 -79
  393. package/src/core/models/skin.coffee +0 -91
  394. package/src/core/models/user.coffee +0 -6
  395. package/src/core/models/widget.coffee +0 -88
  396. package/src/core/router/index.coffee +0 -44
  397. package/src/core/services/container/index.js +0 -18
  398. package/src/core/services/container/instance.js +0 -3
  399. package/src/core/services/content.js +0 -80
  400. package/src/core/services/instagram.coffee +0 -47
  401. package/src/core/services/mixin/events.js +0 -17
  402. package/src/core/services/service.js +0 -1
  403. package/src/core/services/sounds.js +0 -81
  404. package/src/core/services/uploads.js +0 -299
  405. package/src/core/utils/popup.coffee +0 -67
  406. package/src/core/utils/should-show.coffee +0 -12
  407. package/src/core/views/audio-details.pug +0 -9
  408. package/src/core/views/audio.pug +0 -7
  409. package/src/core/views/browser.pug +0 -4
  410. package/src/core/views/color.pug +0 -8
  411. package/src/core/views/date-time/calendar.pug +0 -3
  412. package/src/core/views/date-time/clock.pug +0 -12
  413. package/src/core/views/date-time/grid.pug +0 -6
  414. package/src/core/views/date-time/input.pug +0 -4
  415. package/src/core/views/date-time/table.pug +0 -6
  416. package/src/core/views/dropdown.pug +0 -9
  417. package/src/core/views/font/font-item.pug +0 -3
  418. package/src/core/views/font/fonts-list.pug +0 -7
  419. package/src/core/views/font/fonts-popup.pug +0 -5
  420. package/src/core/views/font/index.pug +0 -7
  421. package/src/core/views/image-details.pug +0 -6
  422. package/src/core/views/image.pug +0 -5
  423. package/src/core/views/input-layout.pug +0 -15
  424. package/src/core/views/order-items.pug +0 -7
  425. package/src/core/views/order-picker.pug +0 -7
  426. package/src/core/views/pixelpanel.pug +0 -69
  427. package/src/core/views/position.pug +0 -10
  428. package/src/core/views/range.pug +0 -9
  429. package/src/core/views/scale.pug +0 -7
  430. package/src/core/views/slider.pug +0 -6
  431. package/src/core/views/stepper.pug +0 -6
  432. package/src/core/views/text.pug +0 -4
  433. package/src/core/views/textarea.pug +0 -8
  434. package/src/core/views/toggle.pug +0 -5
  435. package/src/core/views/video-details.pug +0 -7
  436. package/src/core/views/video.pug +0 -4
  437. package/src/core/widget/index.coffee +0 -66
  438. package/src/editor/content/browser/dropzone.html +0 -268
  439. package/src/editor/content/browser/file.html +0 -124
  440. package/src/editor/content/browser/scroll-pane.html +0 -32
  441. package/src/editor/content/browser/service.html +0 -53
  442. package/src/editor/content/browser/upload.coffee +0 -44
  443. package/src/editor/content/browser/upload.html +0 -439
  444. package/src/editor/content/index.coffee +0 -294
  445. package/src/editor/content/input/field.coffee +0 -45
  446. package/src/editor/content/input/index.coffee +0 -115
  447. package/src/editor/content/service/base/photoitem.coffee +0 -49
  448. package/src/editor/content/service/cache.coffee +0 -20
  449. package/src/editor/content/service/default.coffee +0 -59
  450. package/src/editor/content/service/dropbox.coffee +0 -71
  451. package/src/editor/content/service/facebook.coffee +0 -143
  452. package/src/editor/content/service/flickr.coffee +0 -85
  453. package/src/editor/content/service/google-drive-sdk.coffee +0 -18
  454. package/src/editor/content/service/google-drive.coffee +0 -144
  455. package/src/editor/content/service/instagram-social.coffee +0 -84
  456. package/src/editor/content/service/instagram.coffee +0 -168
  457. package/src/editor/content/service/share-popup.coffee +0 -15
  458. package/src/editor/content/service/soundcloud.coffee +0 -163
  459. package/src/editor/content/tab.coffee +0 -27
  460. package/src/editor/details/bulk-editor/attributes-panel.coffee +0 -11
  461. package/src/editor/details/bulk-editor/index.coffee +0 -86
  462. package/src/editor/details/index.coffee +0 -156
  463. package/src/editor/details/item/attributes.coffee +0 -45
  464. package/src/editor/details/item/index.coffee +0 -82
  465. package/src/editor/editor.coffee +0 -274
  466. package/src/editor/footer/breadcrumb.coffee +0 -17
  467. package/src/editor/footer/index.coffee +0 -36
  468. package/src/editor/index.coffee +0 -79
  469. package/src/editor/listeners/embed-listener.coffee +0 -143
  470. package/src/editor/login-popup.coffee +0 -29
  471. package/src/editor/notification-controller.coffee +0 -35
  472. package/src/editor/popup.coffee +0 -68
  473. package/src/editor/remote-preview.coffee +0 -68
  474. package/src/editor/save/index.coffee +0 -62
  475. package/src/editor/skin/delete.coffee +0 -33
  476. package/src/editor/skin/editor/index.coffee +0 -188
  477. package/src/editor/skin/editor/panel.coffee +0 -37
  478. package/src/editor/skin/index.coffee +0 -126
  479. package/src/editor/skin/save.coffee +0 -58
  480. package/src/editor/skin/selector/index.coffee +0 -59
  481. package/src/editor/skin/selector/item.coffee +0 -123
  482. package/src/editor/skin/selector/list.coffee +0 -97
  483. package/src/editor/views/embed.pug +0 -10
  484. package/src/editor/views/loginbutton.pug +0 -8
  485. package/src/editor/views/popup.pug +0 -17
  486. package/src/editor/views/presets.pug +0 -8
  487. package/src/editor/views/presetslist-header.pug +0 -8
  488. package/src/editor/views/skinitem.pug +0 -13
  489. package/src/modules/control.js +0 -3
  490. package/src/modules/controls.js +0 -29
  491. package/src/modules/core.js +0 -19
  492. package/src/modules/editor.js +0 -80
  493. package/test/config.js +0 -3
  494. package/test/core/models/skin-spec.js +0 -209
  495. package/webpack.config.js +0 -46
  496. package/webpack.config.prod.js +0 -9
  497. /package/{src/core/views/date-time/popup.pug → dist/utils/passiveEvents.d.ts} +0 -0
@@ -0,0 +1,754 @@
1
+ import { vectorUtils, vectorCategories } from "./vectorUtils";
2
+ class VectorManager {
3
+ // Debug configuration
4
+ static DEBUG_MODE = false;
5
+ static WAIT_TIME = VectorManager.DEBUG_MODE ? 2500 : 250;
6
+ // Singleton instance
7
+ static instance = null;
8
+ // Track loaded and pending vectors to prevent duplicates
9
+ loadedVectors = new Set();
10
+ // Map of intersection observers keyed by container ID
11
+ observers = new Map();
12
+ // Debounce timer for scroll events
13
+ scrollTimeout = null;
14
+ // Cache promise to prevent multiple simultaneous API calls
15
+ vectorListPromise = null;
16
+ initialVectorsLoaded = false;
17
+ allVectorsLoaded = false;
18
+ cachedVectorList = [];
19
+ // Cache configuration
20
+ static CACHE_KEY = 'svg_vectors_cache';
21
+ // Controls how long we keep the vector list in browser's localStorage
22
+ static CACHE_DURATION = 24 * 60 * 60 * 1000; // 24 hours
23
+ static LOADED_VECTORS_KEY = 'loaded_vectors_cache';
24
+ // Controls how long browsers should cache the actual vector files
25
+ static CACHE_CONTROL = 'public, max-age=31536000'; // 1 year
26
+ // Add new property to store visible vectors
27
+ visibleVectors = new Set();
28
+ static initialPreloadComplete = false;
29
+ static preloadPromise = null;
30
+ completeVectorList = [];
31
+ // Add new property to track initialization
32
+ static isInitialized = false;
33
+ static initialVectorNumber = 8; // 8 - how many vectors to load initially
34
+ // Add a static property to track initialization state
35
+ static initializationPromise = null;
36
+ // Add this property
37
+ remainingTime = 0;
38
+ // Add a Map to store pre-initialized observers
39
+ preInitializedObservers = new Map();
40
+ // Add batch size constant
41
+ static BATCH_SIZE = 100;
42
+ currentBatchIndex = VectorManager.initialVectorNumber; // Start after initial vectors
43
+ // Add a map to track batch indices per controller
44
+ batchIndices = new Map();
45
+ // Add a map to store preloaded vectors per category
46
+ categoryVectors = new Map();
47
+ // Add to existing properties
48
+ customVectors = new Map();
49
+ /**
50
+ * Private constructor to enforce singleton pattern
51
+ */
52
+ constructor() {
53
+ // console.log('🏗️ [VectorManager] Creating VectorManager instance...');
54
+ }
55
+ /**
56
+ * Gets or creates the singleton instance and initializes it
57
+ */
58
+ static async getInstance() {
59
+ if (!VectorManager.instance) {
60
+ VectorManager.instance = new VectorManager();
61
+ // Initialize only once
62
+ if (!VectorManager.initializationPromise) {
63
+ VectorManager.initializationPromise = VectorManager.instance.initialize();
64
+ }
65
+ // Wait for initialization to complete
66
+ await VectorManager.initializationPromise;
67
+ }
68
+ return VectorManager.instance;
69
+ }
70
+ /**
71
+ * Initializes the VectorManager with initial vectors and setup
72
+ */
73
+ async initialize() {
74
+ if (VectorManager.isInitialized) {
75
+ // console.log('✅ [VectorManager] Already initialized');
76
+ return;
77
+ }
78
+ try {
79
+ // console.log('🚀 [VectorManager] Starting initialization...');
80
+ // Load custom vectors first, before any other operations
81
+ const customVectors = await this.loadCustomVectors();
82
+ // console.log('✅ [VectorManager] Loaded custom vectors:', customVectors.length);
83
+ // First check browser's cached vectors
84
+ const cachedVectors = await this.getBrowserCachedVectors();
85
+ // console.log('📦 [VectorManager] Browser cached vectors:', {
86
+ // total: cachedVectors.length,
87
+ // vectors: cachedVectors
88
+ // });
89
+ // Add cached vectors to loadedVectors set
90
+ cachedVectors.forEach(vector => this.loadedVectors.add(vector));
91
+ // Save to localStorage for persistence
92
+ this.saveLoadedVectors();
93
+ // Get recent vectors first
94
+ const recentVectors = vectorUtils.getRecentVectors()
95
+ .map(vector => ({
96
+ name: vector.name,
97
+ category: vectorCategories.normalize(vector.category),
98
+ url: vector.url
99
+ }));
100
+ // Get initial vector list and cache it
101
+ const initialVectorList = await this.getInitialVectorList();
102
+ // console.log('📋 [VectorManager] Initial vector list loaded:', initialVectorList.length);
103
+ // Cache the complete vector list immediately
104
+ try {
105
+ // Load vectors from svgs.json instead of API
106
+ const response = await fetch('/svgs.json');
107
+ if (!response.ok)
108
+ throw new Error('Failed to fetch vectors');
109
+ const data = await response.json();
110
+ // Convert to VectorData format and cache
111
+ this.cachedVectorList = data.svgGroups.flatMap((group) => group.items.map((item) => ({
112
+ name: item.name,
113
+ category: vectorCategories.normalize(group.category),
114
+ url: item.url
115
+ })));
116
+ // Preload initial vectors for each category
117
+ const categories = ['Icons', 'Emojis', 'Clipart', 'Mine'];
118
+ // Preload vectors for each category
119
+ await Promise.all(categories.map(async (category) => {
120
+ const categoryVectors = this.cachedVectorList
121
+ .filter(vector => vectorCategories.normalize(vector.category) === category)
122
+ .slice(0, VectorManager.initialVectorNumber);
123
+ this.categoryVectors.set(category, categoryVectors);
124
+ // Preload the vectors
125
+ await Promise.all(categoryVectors.map(async (vector) => {
126
+ try {
127
+ await this.loadVector(vector.name);
128
+ }
129
+ catch (error) {
130
+ console.warn(`⚠️ [VectorManager] Failed to preload vector: ${vector.name}`, error);
131
+ }
132
+ }));
133
+ // console.log(`📚 [VectorManager] Preloaded vectors for ${category}:`, {
134
+ // total: categoryVectors.length,
135
+ // sample: categoryVectors.slice(0, 3).map(v => v.name)
136
+ // });
137
+ }));
138
+ // Save filtered list to localStorage cache
139
+ this.saveVectorListToCache(this.cachedVectorList);
140
+ this.allVectorsLoaded = true;
141
+ // console.log('📚 [VectorManager] Complete vector list cached:', {
142
+ // total: this.cachedVectorList.length,
143
+ // categoriesPreloaded: Array.from(this.categoryVectors.keys())
144
+ // });
145
+ }
146
+ catch (error) {
147
+ console.error('❌ [VectorManager] Error caching complete vector list:', error);
148
+ }
149
+ // Only set initialized after everything is complete
150
+ VectorManager.isInitialized = true;
151
+ this.initialVectorsLoaded = true;
152
+ // console.log('✅ [VectorManager] Initialization complete. Vector status:', {
153
+ // totalLoaded: this.loadedVectors.size,
154
+ // loadedVectors: Array.from(this.loadedVectors),
155
+ // cachedVectors: this.cachedVectorList.length
156
+ // });
157
+ // Pre-initialize observers for vector controllers
158
+ this.preInitializeObservers();
159
+ }
160
+ catch (error) {
161
+ console.error('❌ [VectorManager] Initialization failed:', error);
162
+ throw error;
163
+ }
164
+ }
165
+ /**
166
+ * Pre-initializes observers during VectorManager initialization
167
+ */
168
+ preInitializeObservers() {
169
+ // Create a default observer configuration
170
+ const observerConfig = {
171
+ root: null,
172
+ rootMargin: '50px',
173
+ threshold: 0
174
+ };
175
+ // Create and store the observer
176
+ const observer = new IntersectionObserver((entries) => {
177
+ entries.forEach(entry => {
178
+ const vectorName = entry.target.getAttribute('data-vector');
179
+ if (vectorName) {
180
+ if (entry.isIntersecting) {
181
+ this.addVisibleVector(vectorName);
182
+ if (!this.isScrolling()) {
183
+ this.loadInitialVisibleVectors();
184
+ }
185
+ }
186
+ else {
187
+ this.removeVisibleVector(vectorName);
188
+ }
189
+ }
190
+ });
191
+ }, observerConfig);
192
+ // Store it with a default key
193
+ this.preInitializedObservers.set('default', observer);
194
+ }
195
+ /**
196
+ * Loads custom vectors from custom-svgs.json
197
+ */
198
+ async loadCustomVectors() {
199
+ try {
200
+ const response = await fetch('/custom-svgs.json');
201
+ if (!response.ok) {
202
+ console.error('❌ [VectorManager] Failed to load custom-svgs.json');
203
+ return [];
204
+ }
205
+ const vectorsData = await response.json();
206
+ const customVectors = [];
207
+ // Process each SVG group
208
+ for (const group of vectorsData.svgGroups) {
209
+ if (group.category === 'Mine') {
210
+ for (const item of group.items) {
211
+ const vectorData = {
212
+ name: item.name,
213
+ category: 'Mine',
214
+ url: item.url,
215
+ isCustom: true
216
+ };
217
+ this.customVectors.set(item.name, vectorData);
218
+ customVectors.push(vectorData);
219
+ this.loadedVectors.add(item.name);
220
+ }
221
+ }
222
+ }
223
+ return customVectors;
224
+ }
225
+ catch (error) {
226
+ console.error('❌ [VectorManager] Error loading custom vectors:', error);
227
+ return [];
228
+ }
229
+ }
230
+ /**
231
+ * Gets list of vectors cached in browser
232
+ */
233
+ async getBrowserCachedVectors() {
234
+ try {
235
+ const cachedVectorsList = localStorage.getItem(VectorManager.LOADED_VECTORS_KEY);
236
+ const cachedVectors = cachedVectorsList ? JSON.parse(cachedVectorsList) : [];
237
+ // console.log('📦 [VectorManager] Vectors in localStorage:', cachedVectors);
238
+ // Verify each vector exists in the DOM/cache
239
+ const verifiedVectors = await Promise.all(cachedVectors.map(async (name) => {
240
+ const status = await this.verifyVectorCache(name);
241
+ return { name, status };
242
+ }));
243
+ // Filter to only include vectors that are properly cached
244
+ const validCachedVectors = verifiedVectors
245
+ .filter(({ status }) => status.cached)
246
+ .map(({ name }) => name);
247
+ // console.log('✅ [VectorManager] Valid cached vectors:', {
248
+ // total: validCachedVectors.length,
249
+ // vectors: validCachedVectors
250
+ // });
251
+ return validCachedVectors;
252
+ }
253
+ catch (error) {
254
+ console.error('❌ [VectorManager] Error getting browser cached vectors:', error);
255
+ return [];
256
+ }
257
+ }
258
+ /**
259
+ * Saves the current state of loaded vectors to localStorage
260
+ */
261
+ saveLoadedVectors() {
262
+ try {
263
+ const vectorsToCache = Array.from(this.loadedVectors);
264
+ localStorage.setItem(VectorManager.LOADED_VECTORS_KEY, JSON.stringify(vectorsToCache));
265
+ // Verify the save operation
266
+ const savedData = localStorage.getItem(VectorManager.LOADED_VECTORS_KEY);
267
+ // console.log('💾 [VectorManager] Vector cache status:', {
268
+ // savedVectors: vectorsToCache,
269
+ // verifiedCache: savedData ? JSON.parse(savedData) : null,
270
+ // cacheSize: savedData?.length || 0
271
+ // });
272
+ }
273
+ catch (error) {
274
+ console.error('❌ [VectorManager] Error saving loaded vectors:', error);
275
+ }
276
+ }
277
+ /**
278
+ * Gets initial vector list (initial number of vectors + recent vectors)
279
+ */
280
+ async getInitialVectorList() {
281
+ try {
282
+ if (this.initialVectorsLoaded) {
283
+ return this.cachedVectorList;
284
+ }
285
+ // Load recent vectors first
286
+ const recentVectors = vectorUtils.getRecentVectors()
287
+ .map(vector => ({
288
+ name: vector.name,
289
+ category: vectorCategories.normalize(vector.category),
290
+ url: vector.url,
291
+ isCustom: vector.isCustom
292
+ }));
293
+ // Add custom vectors from custom-svgs.json
294
+ const customVectors = await this.loadCustomVectors();
295
+ // Load vectors from svgs.json
296
+ const response = await fetch('/svgs.json');
297
+ if (!response.ok)
298
+ throw new Error('Failed to fetch vectors');
299
+ const data = await response.json();
300
+ // Process and combine vectors
301
+ const standardVectors = data.svgGroups.flatMap((group) => group.items.map((item) => ({
302
+ name: item.name,
303
+ category: vectorCategories.normalize(group.category),
304
+ url: item.url,
305
+ isCustom: false
306
+ })));
307
+ // Combine all vectors
308
+ this.cachedVectorList = [
309
+ ...recentVectors,
310
+ ...customVectors,
311
+ ...standardVectors.filter((vector) => !recentVectors.some((recent) => recent.name === vector.name) &&
312
+ !customVectors.some((custom) => custom.name === vector.name))
313
+ ];
314
+ this.initialVectorsLoaded = true;
315
+ return this.cachedVectorList;
316
+ }
317
+ catch (error) {
318
+ console.error('Error getting initial vectors:', error);
319
+ return [];
320
+ }
321
+ }
322
+ /**
323
+ * Saves vector list to localStorage cache
324
+ */
325
+ saveVectorListToCache(vectors) {
326
+ try {
327
+ const cacheData = {
328
+ timestamp: Date.now(),
329
+ vectors: vectors
330
+ };
331
+ localStorage.setItem(VectorManager.CACHE_KEY, JSON.stringify(cacheData));
332
+ // console.log('💾 [VectorManager] Vector list cached:', {
333
+ // vectors: vectors.length,
334
+ // expires: new Date(cacheData.timestamp + VectorManager.CACHE_DURATION)
335
+ // });
336
+ }
337
+ catch (error) {
338
+ console.error('❌ [VectorManager] Error caching vector list:', error);
339
+ }
340
+ }
341
+ /**
342
+ * Verifies if a vector is actually cached in the browser
343
+ */
344
+ async verifyVectorCache(name) {
345
+ const status = {
346
+ name,
347
+ cached: false,
348
+ url: '',
349
+ headers: {}
350
+ };
351
+ try {
352
+ // Check if vector is in localStorage
353
+ const cachedVectors = localStorage.getItem(VectorManager.LOADED_VECTORS_KEY);
354
+ const loadedVectors = cachedVectors ? JSON.parse(cachedVectors) : [];
355
+ const isCached = loadedVectors.includes(name);
356
+ // Find vector URL
357
+ const vector = this.cachedVectorList.find(v => v.name === name);
358
+ if (vector) {
359
+ status.url = vector.url;
360
+ }
361
+ status.cached = isCached && !!status.url;
362
+ return status;
363
+ }
364
+ catch (error) {
365
+ console.warn('⚠️ [VectorManager] Error verifying vector cache:', name, error);
366
+ return status;
367
+ }
368
+ }
369
+ /**
370
+ * Loads a vector by name
371
+ * Simpler than font loading since we just need to verify the URL exists
372
+ */
373
+ async loadVector(name) {
374
+ if (this.loadedVectors.has(name)) {
375
+ return;
376
+ }
377
+ try {
378
+ // Find vector in cache
379
+ const vector = this.cachedVectorList.find(v => v.name === name);
380
+ if (!vector) {
381
+ throw new Error(`Vector ${name} not found in cache`);
382
+ }
383
+ // Verify URL exists
384
+ const response = await fetch(vector.url, { method: 'HEAD' });
385
+ if (!response.ok) {
386
+ throw new Error(`Failed to verify vector URL: ${vector.url}`);
387
+ }
388
+ // Mark as loaded
389
+ this.loadedVectors.add(name);
390
+ this.saveLoadedVectors();
391
+ // console.log('✅ [VectorManager] Vector loaded successfully:', name);
392
+ }
393
+ catch (error) {
394
+ console.warn(`⚠️ [VectorManager] Error loading vector ${name}:`, error);
395
+ // Still mark as loaded to prevent retries
396
+ this.loadedVectors.add(name);
397
+ this.saveLoadedVectors();
398
+ }
399
+ }
400
+ /**
401
+ * Loads initial visible vectors
402
+ */
403
+ async loadInitialVisibleVectors() {
404
+ const visibleVectors = Array.from(this.visibleVectors);
405
+ // Get initial vectors list
406
+ const initialVectors = this.cachedVectorList.slice(0, VectorManager.initialVectorNumber);
407
+ const initialVectorNames = new Set(initialVectors.map(vector => vector.name));
408
+ // Filter visible vectors to only include those in the initial batch
409
+ const vectorsToLoad = visibleVectors.filter(name => initialVectorNames.has(name));
410
+ if (vectorsToLoad.length > 0) {
411
+ // console.log('🔄 [VectorManager] Loading initial visible vectors:', {
412
+ // visible: visibleVectors.length,
413
+ // toLoad: vectorsToLoad.length,
414
+ // initialBatchSize: initialVectors.length
415
+ // });
416
+ const loadPromises = vectorsToLoad.map(async (name) => {
417
+ try {
418
+ await this.loadVector(name);
419
+ }
420
+ catch (error) {
421
+ console.warn(`⚠️ [VectorManager] Failed to load vector: ${name}`, error);
422
+ }
423
+ });
424
+ await Promise.all(loadPromises);
425
+ }
426
+ }
427
+ /**
428
+ * Handles scroll optimization for vector loading
429
+ * Implements debouncing to prevent excessive loading
430
+ * @param callback - Optional callback after vectors are loaded
431
+ */
432
+ handleScroll(callback) {
433
+ if (this.scrollTimeout) {
434
+ window.clearTimeout(this.scrollTimeout);
435
+ this.scrollTimeout = null;
436
+ }
437
+ this.remainingTime = VectorManager.WAIT_TIME;
438
+ this.scrollTimeout = window.setTimeout(async () => {
439
+ const visibleVectors = Array.from(this.visibleVectors);
440
+ // console.log('🔄 [VectorManager] Loading visible vectors:', {
441
+ // total: visibleVectors.length,
442
+ // vectors: visibleVectors
443
+ // });
444
+ try {
445
+ // Load all visible vectors in parallel
446
+ const loadPromises = visibleVectors.map(async (name) => {
447
+ if (this.loadedVectors.has(name)) {
448
+ const status = await this.verifyVectorCache(name);
449
+ if (!status.cached) {
450
+ // console.log('⚠️ [VectorManager] Reloading uncached vector:', name);
451
+ return this.loadVector(name);
452
+ }
453
+ return Promise.resolve();
454
+ }
455
+ // console.log('📥 [VectorManager] Loading new vector:', name);
456
+ return this.loadVector(name);
457
+ });
458
+ await Promise.all(loadPromises);
459
+ // Log final cache status
460
+ const finalStatus = await Promise.all(visibleVectors.map(async (name) => ({
461
+ name,
462
+ status: await this.verifyVectorCache(name)
463
+ })));
464
+ // console.log('✅ [VectorManager] Vector loading complete:', {
465
+ // total: finalStatus.length,
466
+ // vectors: finalStatus.map(({ name, status }) => ({
467
+ // name,
468
+ // cached: status.cached,
469
+ // url: status.url
470
+ // }))
471
+ // });
472
+ }
473
+ catch (error) {
474
+ console.error('❌ [VectorManager] Error loading vectors:', error);
475
+ }
476
+ this.visibleVectors.clear();
477
+ this.scrollTimeout = null;
478
+ if (callback)
479
+ callback();
480
+ }, VectorManager.WAIT_TIME);
481
+ }
482
+ /**
483
+ * Checks if scrolling is currently active
484
+ */
485
+ isScrolling() {
486
+ return this.scrollTimeout !== null;
487
+ }
488
+ /**
489
+ * Adds a vector to the visible set
490
+ */
491
+ addVisibleVector(name) {
492
+ if (!this.visibleVectors.has(name)) {
493
+ this.visibleVectors.add(name);
494
+ }
495
+ }
496
+ /**
497
+ * Removes a vector from the visible set
498
+ */
499
+ removeVisibleVector(name) {
500
+ if (this.visibleVectors.has(name)) {
501
+ this.visibleVectors.delete(name);
502
+ }
503
+ }
504
+ /**
505
+ * Gets the cached vector list without making an API call
506
+ */
507
+ getCachedVectorList() {
508
+ return this.cachedVectorList;
509
+ }
510
+ /**
511
+ * Gets the next batch of vectors
512
+ */
513
+ getNextBatch(controllerId, category) {
514
+ // Get or initialize batch index for this controller
515
+ let currentIndex = this.batchIndices.get(controllerId) || VectorManager.initialVectorNumber;
516
+ // Filter vectors by category first
517
+ const categoryVectors = category === 'All'
518
+ ? this.cachedVectorList
519
+ : category === 'Mine'
520
+ ? Array.from(this.customVectors.values())
521
+ : this.cachedVectorList.filter(vector => vectorCategories.normalize(vector.category) === category);
522
+ const start = currentIndex;
523
+ const end = start + VectorManager.BATCH_SIZE;
524
+ // Get next batch from category-filtered list
525
+ const batch = categoryVectors.slice(start, end);
526
+ // Only update index if we actually got more vectors
527
+ if (batch.length > 0) {
528
+ this.batchIndices.set(controllerId, end);
529
+ }
530
+ // console.log('📦 [VectorManager] Loading next batch:', {
531
+ // controllerId,
532
+ // category,
533
+ // start,
534
+ // end,
535
+ // batchSize: batch.length,
536
+ // totalInCategory: categoryVectors.length,
537
+ // remainingVectors: categoryVectors.length - end
538
+ // });
539
+ return batch;
540
+ }
541
+ /**
542
+ * Checks if there are more vectors to load
543
+ */
544
+ hasMoreVectors(controllerId, category) {
545
+ const currentIndex = this.batchIndices.get(controllerId) || VectorManager.initialVectorNumber;
546
+ // Filter vectors by category first
547
+ const categoryVectors = category === 'All'
548
+ ? this.cachedVectorList
549
+ : category === 'Mine'
550
+ ? Array.from(this.customVectors.values())
551
+ : this.cachedVectorList.filter(vector => vectorCategories.normalize(vector.category) === category);
552
+ const remainingItems = categoryVectors.length - currentIndex;
553
+ // console.log('🔍 [VectorManager] Checking remaining vectors:', {
554
+ // category,
555
+ // currentIndex,
556
+ // totalInCategory: categoryVectors.length,
557
+ // remainingItems
558
+ // });
559
+ // Only return true if we have more items in this category
560
+ return remainingItems > 0;
561
+ }
562
+ /**
563
+ * Resets the batch index to initial number
564
+ * This allows each vector input controller to start from the beginning
565
+ */
566
+ resetBatchIndex(controllerId) {
567
+ this.batchIndices.set(controllerId, VectorManager.initialVectorNumber);
568
+ // console.log('🔄 [VectorManager] Reset batch index for:', controllerId);
569
+ }
570
+ /**
571
+ * Gets preloaded vectors for a category
572
+ */
573
+ getPreloadedVectors(category) {
574
+ if (category === 'Mine') {
575
+ return Array.from(this.customVectors.values());
576
+ }
577
+ const preloadedVectors = this.categoryVectors.get(category) || [];
578
+ // Ensure vectors are loaded
579
+ preloadedVectors.forEach(vector => {
580
+ if (!this.loadedVectors.has(vector.name)) {
581
+ this.loadVector(vector.name)
582
+ .catch(error => console.warn(`⚠️ [VectorManager] Failed to load vector: ${vector.name}`, error));
583
+ }
584
+ });
585
+ return preloadedVectors;
586
+ }
587
+ /**
588
+ * Gets the complete list of vectors
589
+ */
590
+ async getCompleteVectorList(force = false) {
591
+ try {
592
+ if (this.allVectorsLoaded && !force) {
593
+ return this.cachedVectorList;
594
+ }
595
+ if (!force) {
596
+ const cachedVectors = this.getVectorListFromCache();
597
+ if (cachedVectors) {
598
+ this.cachedVectorList = cachedVectors;
599
+ this.allVectorsLoaded = true;
600
+ return cachedVectors;
601
+ }
602
+ }
603
+ this.vectorListPromise = (async () => {
604
+ const response = await fetch('/svgs.json');
605
+ if (!response.ok)
606
+ throw new Error('Failed to fetch vectors');
607
+ const data = await response.json();
608
+ const allVectors = data.svgGroups.flatMap((group) => group.items.map((item) => ({
609
+ name: item.name,
610
+ category: vectorCategories.normalize(group.category),
611
+ url: item.url,
612
+ isCustom: false
613
+ })));
614
+ this.cachedVectorList = allVectors;
615
+ this.allVectorsLoaded = true;
616
+ this.saveVectorListToCache(allVectors);
617
+ // console.log('✅ [VectorManager] Complete vector list loaded:', {
618
+ // total: allVectors.length,
619
+ // format: 'SVG'
620
+ // });
621
+ return allVectors;
622
+ })();
623
+ return this.vectorListPromise;
624
+ }
625
+ catch (error) {
626
+ console.error('❌ [VectorManager] Error getting complete vector list:', error);
627
+ return this.cachedVectorList;
628
+ }
629
+ }
630
+ /**
631
+ * Checks if a vector is a custom vector
632
+ */
633
+ isCustomVector(name) {
634
+ return this.customVectors.has(name);
635
+ }
636
+ /**
637
+ * Gets custom vector data if available
638
+ */
639
+ getCustomVector(name) {
640
+ return this.customVectors.get(name);
641
+ }
642
+ /**
643
+ * Removes a custom vector
644
+ */
645
+ async removeCustomVector(name) {
646
+ try {
647
+ if (this.customVectors.has(name)) {
648
+ this.customVectors.delete(name);
649
+ this.loadedVectors.delete(name);
650
+ // Update cached vector list
651
+ this.cachedVectorList = this.cachedVectorList.filter(vector => vector.name !== name || vector.category !== 'Mine');
652
+ // console.log('✅ [VectorManager] Custom vector removed:', name);
653
+ }
654
+ }
655
+ catch (error) {
656
+ console.error('❌ [VectorManager] Error removing custom vector:', error);
657
+ }
658
+ }
659
+ /**
660
+ * Gets observer for a container
661
+ */
662
+ getObserver(container) {
663
+ if (!container) {
664
+ console.warn('❌ [VectorManager] No container provided for observer');
665
+ return null;
666
+ }
667
+ // Generate or retrieve unique ID for container
668
+ const key = container.dataset.observerId || `vector-observer-${Math.random().toString(36).slice(2)}`;
669
+ container.dataset.observerId = key;
670
+ // Return existing observer if one exists
671
+ if (this.observers.has(key)) {
672
+ return this.observers.get(key) || null;
673
+ }
674
+ // Create new observer
675
+ console.log('🔧 [VectorManager] Creating new observer for container:', key);
676
+ const observer = new IntersectionObserver((entries) => {
677
+ entries.forEach(entry => {
678
+ const vectorName = entry.target.getAttribute('data-vector');
679
+ if (vectorName) {
680
+ if (entry.isIntersecting) {
681
+ this.addVisibleVector(vectorName);
682
+ if (!this.isScrolling()) {
683
+ this.loadInitialVisibleVectors();
684
+ }
685
+ }
686
+ else {
687
+ this.removeVisibleVector(vectorName);
688
+ }
689
+ }
690
+ });
691
+ }, {
692
+ root: container,
693
+ rootMargin: '50px' // Pre-load vectors slightly before they come into view
694
+ });
695
+ this.observers.set(key, observer);
696
+ return observer;
697
+ }
698
+ /**
699
+ * Gets a pre-initialized observer
700
+ */
701
+ getPreInitializedObserver() {
702
+ return this.preInitializedObservers.get('default') || null;
703
+ }
704
+ /**
705
+ * Gets stats about loaded vectors
706
+ */
707
+ getLoadedVectorsStats() {
708
+ return {
709
+ total: this.loadedVectors.size,
710
+ vectors: Array.from(this.loadedVectors)
711
+ };
712
+ }
713
+ /**
714
+ * Cleans up resources when a vector container is removed
715
+ * Prevents memory leaks from orphaned observers
716
+ */
717
+ cleanup(containerId) {
718
+ const observer = this.observers.get(containerId);
719
+ if (observer) {
720
+ observer.disconnect();
721
+ this.observers.delete(containerId);
722
+ }
723
+ }
724
+ /**
725
+ * Checks if a vector is already loaded
726
+ */
727
+ isVectorLoaded(name) {
728
+ return this.loadedVectors.has(name);
729
+ }
730
+ /**
731
+ * Gets the vector list from cache without making an API call
732
+ * Returns null if cache is invalid or expired
733
+ */
734
+ getVectorListFromCache() {
735
+ try {
736
+ const cached = localStorage.getItem(VectorManager.CACHE_KEY);
737
+ if (!cached)
738
+ return null;
739
+ const cache = JSON.parse(cached);
740
+ const now = Date.now();
741
+ // Check if cache has expired
742
+ if (now - cache.timestamp > VectorManager.CACHE_DURATION) {
743
+ console.log('📅 [VectorManager] Cache expired, will refresh');
744
+ return null;
745
+ }
746
+ return cache.vectors;
747
+ }
748
+ catch (error) {
749
+ console.error('❌ [VectorManager] Error reading vector cache:', error);
750
+ return null;
751
+ }
752
+ }
753
+ }
754
+ export default VectorManager;