@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,47 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const VectorInputController: $$__sveltets_2_IsomorphicComponent<{
15
+ /**
16
+ * Component Props
17
+ * @prop {string} label - Display label for the vector selector
18
+ * @prop {string} value - Currently selected vector
19
+ * @prop {Function} onChange - Callback when vector selection changes
20
+ * @prop {string} description - Optional help text
21
+ * @prop {string} controllerId - Unique identifier for this controller
22
+ * @prop {any} openDropdowns - Store tracking open dropdown states
23
+ * @prop {Function} toggleDropdown - Function to toggle dropdown state
24
+ * @prop {Function} onFocus - Optional focus handler
25
+ */ label: string;
26
+ value?: {
27
+ name: string;
28
+ category: string;
29
+ url: string;
30
+ } | null;
31
+ onChange?: ((newValue: {
32
+ name: string;
33
+ category: string;
34
+ url: string;
35
+ } | null) => void) | undefined;
36
+ description?: string | undefined;
37
+ controllerId: string;
38
+ openDropdowns: any;
39
+ toggleDropdown: (id: string) => void;
40
+ onFocus?: () => void;
41
+ hideRecentFromList?: boolean;
42
+ hideTrashIcon?: boolean;
43
+ }, {
44
+ [evt: string]: CustomEvent<any>;
45
+ }, {}, {}, string>;
46
+ type VectorInputController = InstanceType<typeof VectorInputController>;
47
+ export default VectorInputController;
@@ -0,0 +1,39 @@
1
+ export { default as DropdownInputController } from './DropdownInputController.svelte';
2
+ export { default as DatePickerInputController } from './DatePickerInputController.svelte';
3
+ export { default as SliderInputController } from './SliderInputController.svelte';
4
+ export { default as FontInputController } from './FontInputController.svelte';
5
+ export { default as SwitchInputController } from './SwitchInputController.svelte';
6
+ export { default as TextInputController } from './TextInputController.svelte';
7
+ export { default as TextAreaInputController } from './TextAreaInputController.svelte';
8
+ export { default as TextAreaPreviewInputController } from './TextAreaPreviewInputController.svelte';
9
+ export { default as RangeCalendarInputController } from './RangeCalendarInputController.svelte';
10
+ export { default as BrowserInputController } from './BrowserInputController.svelte';
11
+ export { default as NumberInputController } from './NumberInputController.svelte';
12
+ export { default as PositionInputController } from './PositionInputController.svelte';
13
+ export { default as ColorPickerInputController } from './ColorPickerInputController.svelte';
14
+ export { default as CheckboxInputController } from './CheckboxInputController.svelte';
15
+ export { default as RadioGroupInputController } from './RadioGroupInputController.svelte';
16
+ export { default as SliderRangeInputController } from './SliderRangeInputController.svelte';
17
+ export { default as FixedPositionInputController } from './FixedPositionInputController.svelte';
18
+ export { default as VectorInputController } from './VectorInputController.svelte';
19
+ export { default as AngleInputController } from './AngleInputController.svelte';
20
+ export { default as InputControllerHeader } from './InputControllerHeader.svelte';
21
+ export { default as TimeInputController } from './TimeInputController.svelte';
22
+ export { default as RoundedCornersInputController } from './RoundedCornersInputController.svelte';
23
+ export { default as TagsInputController } from './TagsInputController.svelte';
24
+ export { default as DateFieldInputController } from './DateFieldInputController.svelte';
25
+ export interface InputControllerConfig {
26
+ placeholder?: string;
27
+ min?: number;
28
+ max?: number;
29
+ step?: number;
30
+ options?: Array<{
31
+ value: string;
32
+ label: string;
33
+ }>;
34
+ fileTypes?: string[];
35
+ showOpacityControls?: boolean;
36
+ defaultTransparency?: number;
37
+ textColor?: string;
38
+ format?: string;
39
+ }
@@ -0,0 +1,24 @@
1
+ export { default as DropdownInputController } from './DropdownInputController.svelte';
2
+ export { default as DatePickerInputController } from './DatePickerInputController.svelte';
3
+ export { default as SliderInputController } from './SliderInputController.svelte';
4
+ export { default as FontInputController } from './FontInputController.svelte';
5
+ export { default as SwitchInputController } from './SwitchInputController.svelte';
6
+ export { default as TextInputController } from './TextInputController.svelte';
7
+ export { default as TextAreaInputController } from './TextAreaInputController.svelte';
8
+ export { default as TextAreaPreviewInputController } from './TextAreaPreviewInputController.svelte';
9
+ export { default as RangeCalendarInputController } from './RangeCalendarInputController.svelte';
10
+ export { default as BrowserInputController } from './BrowserInputController.svelte';
11
+ export { default as NumberInputController } from './NumberInputController.svelte';
12
+ export { default as PositionInputController } from './PositionInputController.svelte';
13
+ export { default as ColorPickerInputController } from './ColorPickerInputController.svelte';
14
+ export { default as CheckboxInputController } from './CheckboxInputController.svelte';
15
+ export { default as RadioGroupInputController } from './RadioGroupInputController.svelte';
16
+ export { default as SliderRangeInputController } from './SliderRangeInputController.svelte';
17
+ export { default as FixedPositionInputController } from './FixedPositionInputController.svelte';
18
+ export { default as VectorInputController } from './VectorInputController.svelte';
19
+ export { default as AngleInputController } from './AngleInputController.svelte';
20
+ export { default as InputControllerHeader } from './InputControllerHeader.svelte';
21
+ export { default as TimeInputController } from './TimeInputController.svelte';
22
+ export { default as RoundedCornersInputController } from './RoundedCornersInputController.svelte';
23
+ export { default as TagsInputController } from './TagsInputController.svelte';
24
+ export { default as DateFieldInputController } from './DateFieldInputController.svelte';
@@ -0,0 +1,40 @@
1
+ <!--
2
+ * CategoryTabs Component
3
+ * A simplified, reusable component for displaying and switching between categories
4
+ *
5
+ * Features:
6
+ * - Displays a list of categories as tabs
7
+ * - Handles category selection
8
+ * - Shows the active category with different styling
9
+ * - Uses Widgetic design system styling
10
+ -->
11
+ <script lang="ts">
12
+ // Props
13
+ export let categories: any[] = [];
14
+ export let activeCategory: any = null;
15
+ export let onCategorySelect: (category: any) => void;
16
+ export let getCategoryKey: (category: any) => string = (cat) => cat?.toString() || '';
17
+ export let getCategoryLabel: (category: any) => string = (cat) => cat?.toString() || '';
18
+ export let filterVisible = true;
19
+ </script>
20
+
21
+ {#if filterVisible && categories.length > 0}
22
+ <div class="widgetic-colors widgetic-radius bg-white">
23
+ <div class="flex justify-between px-4 pt-[24px] pb-[8px] border-b border-grey2">
24
+ {#each categories as category, index}
25
+ {@const isActive = getCategoryKey(activeCategory) === getCategoryKey(category)}
26
+ <button
27
+ type="button"
28
+ class="cursor-pointer caption transition-colors text-center {
29
+ isActive
30
+ ? 'text-grey7'
31
+ : 'text-grey3 hover:text-grey5'
32
+ }"
33
+ onclick={() => onCategorySelect(category)}
34
+ >
35
+ {getCategoryLabel(category)}
36
+ </button>
37
+ {/each}
38
+ </div>
39
+ </div>
40
+ {/if}
@@ -0,0 +1,25 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const CategoryTabs: $$__sveltets_2_IsomorphicComponent<{
15
+ categories?: any[];
16
+ activeCategory?: any;
17
+ onCategorySelect: (category: any) => void;
18
+ getCategoryKey?: (category: any) => string;
19
+ getCategoryLabel?: (category: any) => string;
20
+ filterVisible?: boolean;
21
+ }, {
22
+ [evt: string]: CustomEvent<any>;
23
+ }, {}, {}, string>;
24
+ type CategoryTabs = InstanceType<typeof CategoryTabs>;
25
+ export default CategoryTabs;
@@ -0,0 +1,181 @@
1
+ <!--
2
+ * ItemGrid Component
3
+ * A reusable grid component for displaying items
4
+ *
5
+ * Features:
6
+ * - Displays a grid of items
7
+ * - Infinite scrolling to load more items
8
+ * - Handles item selection
9
+ * - Supports custom item rendering
10
+ * - Optimized with intersection observer
11
+ -->
12
+ <script lang="ts">
13
+ import { Check } from '@widgetic/design-system/icons';
14
+
15
+ export let items: any[] = [];
16
+ export let containerRef: (node: HTMLElement) => void;
17
+ export let onItemSelect: (item: any) => void;
18
+ export let isItemSelected: (item: any) => boolean;
19
+ export let renderItem: (item: any) => { html: string } | string;
20
+ export let getItemKey: (item: any) => string;
21
+ export let observeItem: ((node: HTMLElement) => { destroy: () => void }) | undefined = undefined;
22
+ export let loadingMore = false;
23
+ export let hasMoreItems = false;
24
+ export let loadNextBatch: () => void;
25
+ export let layoutClass = "grid-cols-1";
26
+ export let itemType: 'vector' | 'font' = 'vector';
27
+
28
+ // Handle scroll to load more items
29
+ function handleScroll(e: Event) {
30
+ const target = e.target as HTMLElement;
31
+ if (
32
+ !loadingMore &&
33
+ hasMoreItems &&
34
+ target.scrollHeight - target.scrollTop <= target.clientHeight + 200
35
+ ) {
36
+ loadNextBatch();
37
+ }
38
+ }
39
+
40
+ // Render content based on the item
41
+ function renderContent(item: any) {
42
+ const rendered = renderItem(item);
43
+ if (typeof rendered === 'string') {
44
+ return `<span>${rendered}</span>`;
45
+ }
46
+
47
+ if (rendered && typeof rendered === 'object' && 'html' in rendered) {
48
+ return rendered.html;
49
+ }
50
+
51
+ return '';
52
+ }
53
+ </script>
54
+
55
+ <div
56
+ class="flex-1 overflow-y-auto px-4 widgetic-colors"
57
+ use:containerRef
58
+ onscroll={handleScroll}
59
+ >
60
+ <div class="grid {layoutClass} gap-x-6 gap-y-4 pb-4">
61
+ {#each items as item (getItemKey(item))}
62
+ {#if itemType === 'vector'}
63
+ {#if observeItem}
64
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
65
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
66
+ <div
67
+ class="flex items-center justify-center widgetic-radius rounded hover:bg-light-green transition-colors cursor-pointer w-[98px] h-[96px] border-2 border-grey2"
68
+ class:bg-sage-green={isItemSelected(item)}
69
+ class:text-white={isItemSelected(item)}
70
+ class:border-sage-green={isItemSelected(item)}
71
+ class:selected-item={isItemSelected(item)}
72
+ onclick={() => onItemSelect(item)}
73
+ use:observeItem
74
+ data-item={getItemKey(item)}
75
+ data-grid-item
76
+ data-item-type="vector"
77
+ >
78
+ <div class="relative w-full h-full flex items-center justify-center">
79
+ {@html renderContent(item)}
80
+ </div>
81
+ </div>
82
+ {:else}
83
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
84
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
85
+ <div
86
+ class="flex items-center justify-center widgetic-radius rounded hover:bg-light-green transition-colors cursor-pointer w-[98px] h-[96px] border-2 border-grey2"
87
+ class:bg-sage-green={isItemSelected(item)}
88
+ class:text-white={isItemSelected(item)}
89
+ class:border-sage-green={isItemSelected(item)}
90
+ class:selected-item={isItemSelected(item)}
91
+ onclick={() => onItemSelect(item)}
92
+ data-item={getItemKey(item)}
93
+ data-grid-item
94
+ data-item-type="vector"
95
+ >
96
+ <div class="relative w-full h-full flex items-center justify-center">
97
+ {@html renderContent(item)}
98
+ </div>
99
+ </div>
100
+ {/if}
101
+ {:else}
102
+ {#if observeItem}
103
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
104
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
105
+ <div
106
+ class="w-full py-2 px-4 hover:bg-light-green cursor-pointer overflow-hidden relative rounded-small"
107
+ class:bg-sage-green={isItemSelected(item)}
108
+ class:text-white={isItemSelected(item)}
109
+ class:selected-item={isItemSelected(item)}
110
+ onclick={() => onItemSelect(item)}
111
+ use:observeItem
112
+ data-item={getItemKey(item)}
113
+ data-item-type="font"
114
+ >
115
+ <div class="flex items-center flex-1 min-w-0 group">
116
+ <Check class="mr-2 h-6 w-6 flex-shrink-0 {isItemSelected(item) ? 'text-white' : 'text-sage-green opacity-0'}"/>
117
+ <div class="flex-1 overflow-hidden">
118
+ {@html renderContent(item)}
119
+ </div>
120
+ </div>
121
+ </div>
122
+ {:else}
123
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
124
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
125
+ <div
126
+ class="w-full py-2 px-4 hover:bg-light-green cursor-pointer overflow-hidden relative rounded-small"
127
+ class:bg-sage-green={isItemSelected(item)}
128
+ class:text-white={isItemSelected(item)}
129
+ class:selected-item={isItemSelected(item)}
130
+ onclick={() => onItemSelect(item)}
131
+ data-item={getItemKey(item)}
132
+ data-item-type="font"
133
+ >
134
+ <div class="flex items-center flex-1 min-w-0 group">
135
+ <Check class="mr-2 h-6 w-6 flex-shrink-0 {isItemSelected(item) ? 'text-white' : 'text-sage-green opacity-0'}"/>
136
+ <div class="flex-1 overflow-hidden">
137
+ {@html renderContent(item)}
138
+ </div>
139
+ </div>
140
+ </div>
141
+ {/if}
142
+ {/if}
143
+ {/each}
144
+ </div>
145
+
146
+ {#if loadingMore}
147
+ <div class="py-4 subtext text-center text-grey5">
148
+ Loading more items...
149
+ </div>
150
+ {/if}
151
+ </div>
152
+
153
+ <style>
154
+ /* Prevent hover effect on selected items */
155
+ :global(.selected-item:hover) {
156
+ background-color: hsl(var(--sage-green)) !important;
157
+ color: white !important;
158
+ }
159
+
160
+ /* Ensure text is white in selected items */
161
+ :global(.selected-item) {
162
+ color: white !important;
163
+ }
164
+
165
+ /* Keep the grid styling for font items */
166
+ :global([data-item-type="font"]) {
167
+ height: 42px !important;
168
+ }
169
+
170
+ /* Specific styling for grid font items */
171
+ :global([data-grid-item][data-item-type="font"]) {
172
+ width: 98px !important;
173
+ height: 42px !important;
174
+ border: 2px solid hsl(var(--grey2)) !important;
175
+ border-radius: var(--radius-large) !important;
176
+ display: flex !important;
177
+ align-items: center !important;
178
+ justify-content: center !important;
179
+ padding: 0 !important;
180
+ }
181
+ </style>
@@ -0,0 +1,35 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const ItemGrid: $$__sveltets_2_IsomorphicComponent<{
15
+ items?: any[];
16
+ containerRef: (node: HTMLElement) => void;
17
+ onItemSelect: (item: any) => void;
18
+ isItemSelected: (item: any) => boolean;
19
+ renderItem: (item: any) => {
20
+ html: string;
21
+ } | string;
22
+ getItemKey: (item: any) => string;
23
+ observeItem?: ((node: HTMLElement) => {
24
+ destroy: () => void;
25
+ }) | undefined;
26
+ loadingMore?: boolean;
27
+ hasMoreItems?: boolean;
28
+ loadNextBatch: () => void;
29
+ layoutClass?: string;
30
+ itemType?: "vector" | "font";
31
+ }, {
32
+ [evt: string]: CustomEvent<any>;
33
+ }, {}, {}, string>;
34
+ type ItemGrid = InstanceType<typeof ItemGrid>;
35
+ export default ItemGrid;
@@ -0,0 +1,260 @@
1
+ <!--
2
+ * RecentItemsSection Component
3
+ * Displays recently used items with custom rendering
4
+ *
5
+ * Features:
6
+ * - Displays recently used items
7
+ * - Supports custom item rendering
8
+ * - Handles item selection
9
+ * - Supports deletion of custom items
10
+ * - Supports list or grid display modes
11
+ -->
12
+ <script lang="ts">
13
+ // Import Check icon from design system
14
+ import { Check } from '@widgetic/design-system/icons';
15
+ import icTrash from '../../../assets/icons/ic-browser/trash.svg?url';
16
+
17
+ export let recentItems: any[] = [];
18
+ export let title = "Recently used";
19
+ export let onItemSelect: (item: any) => void;
20
+ export let onItemDelete: (item: any, event: Event) => void;
21
+ export let isItemSelected: (item: any) => boolean;
22
+ export let renderItem: (item: any) => { html: string } | string;
23
+ export let isCustomItem: (item: any) => boolean;
24
+ export let getItemKey: (item: any) => string;
25
+ export let observeItem: ((node: HTMLElement) => { destroy: () => void }) | undefined = undefined;
26
+ export let displayMode: 'list' | 'grid' = 'list';
27
+ export let hideTrashIcon: boolean = false;
28
+ export let itemType: 'font' | 'vector' = 'font';
29
+
30
+ // Helper function to determine if the result has HTML content
31
+ function hasHtml(result: { html: string } | string): result is { html: string } {
32
+ return typeof result === 'object' && result !== null && 'html' in result;
33
+ }
34
+ </script>
35
+
36
+ {#if recentItems.length > 0}
37
+ <div class="px-4 pt-4 pb-4 widgetic-colors">
38
+ <h5 class="subtext text-grey7">{title}</h5>
39
+
40
+ {#if displayMode === 'list'}
41
+ <div class="grid grid-cols-1">
42
+ {#each recentItems as item (getItemKey(item))}
43
+ {@const renderedItem = renderItem(item)}
44
+ {@const selected = isItemSelected(item)}
45
+
46
+ {#if observeItem}
47
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
48
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
49
+ <div
50
+ class="w-full px-4 cursor-pointer overflow-hidden relative rounded-small"
51
+ class:bg-sage-green={selected}
52
+ class:text-white={selected}
53
+ class:hover:bg-light-green={!selected}
54
+ class:selected-item={selected}
55
+ onclick={() => onItemSelect(item)}
56
+ use:observeItem
57
+ data-item={getItemKey(item)}
58
+ >
59
+ <div class="flex items-center flex-1 min-w-0 group">
60
+ <Check class="mr-2 h-6 w-6 flex-shrink-0 {selected ? 'text-white' : 'text-sage-green opacity-0'}"/>
61
+ <div class="flex-1 overflow-hidden">
62
+ {#if typeof renderedItem === 'string'}
63
+ <span class="text-[24px]">{renderedItem}</span>
64
+ {:else if hasHtml(renderedItem)}
65
+ {@html renderedItem.html}
66
+ {/if}
67
+ </div>
68
+
69
+ {#if isCustomItem(item) && !hideTrashIcon}
70
+ <button
71
+ type="button"
72
+ class="p-1 rounded-full hover:bg-red-100 hover:text-red-500 transition-colors"
73
+ onclick={(e) => {
74
+ e.stopPropagation();
75
+ onItemDelete(item, e);
76
+ }}
77
+ >
78
+ <img src={icTrash} alt="Delete" class="w-4 h-4" />
79
+ </button>
80
+ {/if}
81
+ </div>
82
+ </div>
83
+ {:else}
84
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
85
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
86
+ <div
87
+ class="w-full px-4 cursor-pointer overflow-hidden relative rounded-small"
88
+ class:bg-sage-green={selected}
89
+ class:text-white={selected}
90
+ class:hover:bg-light-green={!selected}
91
+ class:selected-item={selected}
92
+ onclick={() => onItemSelect(item)}
93
+ data-item={getItemKey(item)}
94
+ >
95
+ <div class="flex items-center flex-1 min-w-0 group">
96
+ <Check class="mr-2 h-6 w-6 flex-shrink-0 {selected ? 'text-white' : 'text-sage-green opacity-0'}"/>
97
+ <div class="flex-1 overflow-hidden">
98
+ {#if typeof renderedItem === 'string'}
99
+ <span class="text-[24px]">{renderedItem}</span>
100
+ {:else if hasHtml(renderedItem)}
101
+ {@html renderedItem.html}
102
+ {/if}
103
+ </div>
104
+
105
+ {#if isCustomItem(item) && !hideTrashIcon}
106
+ <button
107
+ type="button"
108
+ class="p-1 rounded-full hover:bg-red-100 hover:text-red-500 transition-colors"
109
+ onclick={(e) => {
110
+ e.stopPropagation();
111
+ onItemDelete(item, e);
112
+ }}
113
+ >
114
+ <img src={icTrash} alt="Delete" class="w-4 h-4" />
115
+ </button>
116
+ {/if}
117
+ </div>
118
+ </div>
119
+ {/if}
120
+ {/each}
121
+ </div>
122
+ {:else}
123
+ <div class="grid grid-cols-3 gap-x-6 gap-y-4 pt-2 pb-0">
124
+ {#each recentItems as item (getItemKey(item))}
125
+ {@const renderedItem = renderItem(item)}
126
+ {@const selected = isItemSelected(item)}
127
+
128
+ {#if observeItem}
129
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
130
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
131
+ <div
132
+ class="flex-shrink-0 flex items-center justify-center widgetic-radius rounded transition-colors cursor-pointer border-2 border-grey2"
133
+ class:bg-sage-green={selected}
134
+ class:text-white={selected}
135
+ class:border-sage-green={selected}
136
+ class:hover:bg-light-green={!selected}
137
+ class:selected-item={selected}
138
+ onclick={() => onItemSelect(item)}
139
+ use:observeItem
140
+ data-item={getItemKey(item)}
141
+ data-grid-item
142
+ data-item-type={itemType}
143
+ >
144
+ <div class="relative w-full h-full flex items-center justify-center">
145
+ {#if typeof renderedItem === 'string'}
146
+ <span class="text-[24px]">{renderedItem}</span>
147
+ {:else if hasHtml(renderedItem)}
148
+ {@html renderedItem.html}
149
+ {/if}
150
+
151
+ {#if isCustomItem(item) && !hideTrashIcon}
152
+ <button
153
+ type="button"
154
+ class="absolute top-1 right-1 p-1 rounded-full hover:bg-red-100 hover:text-red-500 transition-colors bg-white"
155
+ onclick={(e) => {
156
+ e.stopPropagation();
157
+ onItemDelete(item, e);
158
+ }}
159
+ >
160
+ <img src={icTrash} alt="Delete" class="w-3 h-3" />
161
+ </button>
162
+ {/if}
163
+ </div>
164
+ </div>
165
+ {:else}
166
+ <!-- svelte-ignore a11y-click-events-have-key-events -->
167
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
168
+ <div
169
+ class="flex-shrink-0 flex items-center justify-center widgetic-radius rounded transition-colors cursor-pointer border-2 border-grey2"
170
+ class:bg-sage-green={selected}
171
+ class:text-white={selected}
172
+ class:border-sage-green={selected}
173
+ class:hover:bg-light-green={!selected}
174
+ class:selected-item={selected}
175
+ onclick={() => onItemSelect(item)}
176
+ data-item={getItemKey(item)}
177
+ data-grid-item
178
+ data-item-type={itemType}
179
+ >
180
+ <div class="relative w-full h-full flex items-center justify-center">
181
+ {#if typeof renderedItem === 'string'}
182
+ <span class="text-[24px]">{renderedItem}</span>
183
+ {:else if hasHtml(renderedItem)}
184
+ {@html renderedItem.html}
185
+ {/if}
186
+
187
+ {#if isCustomItem(item) && !hideTrashIcon}
188
+ <button
189
+ type="button"
190
+ class="absolute top-1 right-1 p-1 rounded-full hover:bg-red-100 hover:text-red-500 transition-colors bg-white"
191
+ onclick={(e) => {
192
+ e.stopPropagation();
193
+ onItemDelete(item, e);
194
+ }}
195
+ >
196
+ <img src={icTrash} alt="Delete" class="w-3 h-3" />
197
+ </button>
198
+ {/if}
199
+ </div>
200
+ </div>
201
+ {/if}
202
+ {/each}
203
+ </div>
204
+ {/if}
205
+ </div>
206
+ {/if}
207
+
208
+ <style>
209
+ /* Override the global styles for data-item when in list mode */
210
+ :global([data-item]:not([data-grid-item])) {
211
+ width: auto !important;
212
+ height: 42px !important;
213
+ border: none !important;
214
+ border-radius: var(--radius-small) !important;
215
+ display: flex !important;
216
+ align-items: center !important;
217
+ justify-content: flex-start !important;
218
+ padding: 8px 16px !important;
219
+ }
220
+
221
+ /* Keep the grid styling for font items */
222
+ :global([data-grid-item][data-item-type="font"]) {
223
+ width: 98px !important;
224
+ height: 42px !important;
225
+ border: 2px solid hsl(var(--grey2)) !important;
226
+ border-radius: var(--radius-large) !important;
227
+ display: flex !important;
228
+ align-items: center !important;
229
+ justify-content: center !important;
230
+ padding: 0 !important;
231
+ }
232
+
233
+ /* Specific styling for vector items */
234
+ :global([data-grid-item][data-item-type="vector"]) {
235
+ width: 98px !important;
236
+ height: 96px !important;
237
+ border: 2px solid hsl(var(--grey2)) !important;
238
+ border-radius: var(--radius-large) !important;
239
+ display: flex !important;
240
+ align-items: center !important;
241
+ justify-content: center !important;
242
+ padding: 0 !important;
243
+ }
244
+
245
+ :global([data-grid-item].bg-\[hsl\(var\(--sage-green\)\)\]) {
246
+ border-color: hsl(var(--sage-green)) !important;
247
+ background-color: hsl(var(--sage-green)) !important;
248
+ color: white !important;
249
+ }
250
+
251
+ :global([data-grid-item]:not(.bg-\[hsl\(var\(--sage-green\)\)\]):hover) {
252
+ background-color: hsl(var(--light-green)) !important;
253
+ }
254
+
255
+ /* Prevent hover effect on selected items */
256
+ :global(.selected-item:hover) {
257
+ background-color: hsl(var(--sage-green)) !important;
258
+ }
259
+
260
+ </style>